@babylonjs/viewer
Version:
The Babylon Viewer aims to simplify a specific but common Babylon.js use case: loading, viewing, and interacting with a 3D model.
3 lines (2 loc) • 2.93 kB
JavaScript
import{i as e,V as s,bo as t,bp as r}from"./index-BPURObVq.esm.min.js";import{b as a}from"./glTFLoader.pure-Bdyl6AcK.esm.min.js";import"./morphTargetManager-CdEb1BHc.esm.min.js";import"./bone.pure-BcPT5kCP.esm.min.js";import"./skeleton-DinTjF3y.esm.min.js";import"./assetContainer-CAncviZo.esm.min.js";import"./objectModelMapping-ClgDmo5Q.esm.min.js";import"./spotLight.pure-5s2DDDIt.esm.min.js";const o="KHR_materials_volume_scatter";class n{constructor(e){this.name=o,this.order=172,this._loader=e,this.enabled=this._loader.isExtensionUsed(o),this.enabled&&this._loader._disableInstancedMesh++}dispose(){this.enabled&&this._loader._disableInstancedMesh--,this._loader=null}loadMaterialPropertiesAsync(e,s,t){return a.LoadExtensionAsync(e,s,this.name,async(r,a)=>{const o=new Array;return o.push(this._loader.loadMaterialPropertiesAsync(e,s,t)),o.push(this._loadVolumePropertiesAsync(r,s,t,a)),await Promise.all(o).then(()=>{})})}_loadVolumePropertiesAsync(t,r,a,o){const n=this._loader._getOrCreateMaterialAdapter(a);if(0===n.transmissionWeight&&0===n.subsurfaceWeight||n.geometryThinWalled)return Promise.resolve();const i=void 0!==o.multiscatterColorFactor&&3==o.multiscatterColorFactor.length?e.FromArray(o.multiscatterColorFactor):e.Black(),l=void 0!==o.scatterAnisotropy?o.scatterAnisotropy:0;let c=Promise.resolve(null);o.multiscatterColorTexture&&(o.multiscatterColorTexture.nonColorData=!0,c=this._loader.loadTextureInfoAsync(`${t}/multiscatterColorTexture`,o.multiscatterColorTexture,e=>{e.name=`${a.name} (Scatter Color)`,n.transmissionWeight>0&&(n.transmissionScatterTexture=e),n.subsurfaceWeight>0&&(n.subsurfaceColorTexture=e)}));const u=new s(-Math.log(n.transmissionColor.r),-Math.log(n.transmissionColor.g),-Math.log(n.transmissionColor.b));if(u.scaleInPlace(1/Math.max(n.transmissionDepth,1e-6)),n.transmissionWeight>0){const e=function(e){const t=new s(e.r,e.g,e.b),r=new s(4.09712,4.09712,4.09712);r.addInPlace(new s(4.20863,4.20863,4.20863).multiplyInPlace(t));const a=new s(9.59217,9.59217,9.59217);return a.addInPlace(new s(41.6808,41.6808,41.6808).multiplyInPlace(t)),a.addInPlace(new s(17.7126,17.7126,17.7126).multiplyInPlace(t.multiply(t))),r.subtractInPlace(new s(Math.sqrt(a.x),Math.sqrt(a.y),Math.sqrt(a.z))),new s(1,1,1).subtract(r.multiply(r))}(i),t=u.multiply(e);t.scaleInPlace(n.transmissionDepth),n.transmissionScatter.set(t.x,t.y,t.z),n.transmissionScatterAnisotropy=l}if(n.subsurfaceWeight>0){n.subsurfaceScatterAnisotropy=l,n.subsurfaceColor=i;const t=new s(0!==u.x?1/u.x:1,0!==u.y?1/u.y:1,0!==u.z?1/u.z:1);n.subsurfaceRadius=Math.max(t.x,t.y,t.z),n.subsurfaceRadiusScale=new e(t.x/n.subsurfaceRadius,t.y/n.subsurfaceRadius,t.z/n.subsurfaceRadius)}return c.then(()=>{})}}let i=!1;function l(){i||(i=!0,t(o),r(o,!0,e=>new n(e)))}l();export{n as KHR_materials_volume_scatter,l as RegisterKHR_materials_volume_scatter};
//# sourceMappingURL=KHR_materials_volume_scatter-uOTKWulg.esm.min.js.map