UNPKG

@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.68 kB
const e={id:"KHR_materials_dielectric",async applyMaterial(e,t){const r=e._rawMatDef?.extensions;if(!r)return null;const s=r.KHR_materials_ior,a=r.KHR_materials_specular,o=r.KHR_materials_volume,i=r.KHR_materials_transmission,c=r.KHR_materials_dispersion;if(!(s||a||o||i||c))return null;const n="number"==typeof s?.ior?s.ior:1.5,l="number"==typeof i?.transmissionFactor?i.transmissionFactor:0,u="number"==typeof o?.thicknessFactor?o.thicknessFactor:0,p="number"==typeof c?.dispersion?c.dispersion:0,m=a?.specularColorFactor,f=!!i&&(l>0||!!i.transmissionTexture),F=p>0&&(!!s||f)&&!!o&&(u>0||!!o.thicknessTexture),x=!!a?.specularTexture||!!a?.specularColorTexture||!!s&&1.5!==n||"number"==typeof a?.specularFactor&&Math.abs(a.specularFactor-1)>1e-6||Array.isArray(m)&&3===m.length&&(1!==m[0]||1!==m[1]||1!==m[2]),[d,h,_,y,b,C,T]=await Promise.all([t._texture(a?.specularTexture,!1),t._texture(a?.specularColorTexture,!1),t._texture(o?.thicknessTexture,!1),t._texture(i?.transmissionTexture,!1),f?import("./set-transmission-B-QA1Hmx.esm.min.js"):void 0,F?import("./set-dispersion-EzglBhg3.esm.min.js"):void 0,x?import("./set-metallic-reflectance-CdBVQVJt.esm.min.js"):void 0]),v={},k={},g={};let D=!1;if(s&&(1.5!==n&&(g.f0Factor=((n-1)/(n+1))**2/.04,g.specularWeight=1,D=!0),k.refraction={indexOfRefraction:n}),a&&("number"==typeof a.specularFactor&&(Math.abs(a.specularFactor-1)>1e-6?(g.f0Factor=a.specularFactor,g.specularWeight=a.specularFactor,D=!0):(delete g.f0Factor,delete g.specularWeight)),Array.isArray(a.specularColorFactor)&&3===a.specularColorFactor.length&&(1===a.specularColorFactor[0]&&1===a.specularColorFactor[1]&&1===a.specularColorFactor[2]||(g.color=[a.specularColorFactor[0],a.specularColorFactor[1],a.specularColorFactor[2]],D=!0)),d&&(g.texture=d,g.useOnlyMetallicFromTexture=!0),h&&(g.reflectanceTexture=h)),o){(u>0||_)&&(k.thickness={min:0,max:u||1,useGlTFChannel:!0,..._?{texture:_}:void 0});const e=Array.isArray(o.attenuationColor)&&3===o.attenuationColor.length?o.attenuationColor:void 0,t="number"==typeof o.attenuationDistance?o.attenuationDistance:void 0;e||void 0!==t?k.tint={...e?{color:e}:void 0,...void 0!==t?{atDistance:t}:void 0}:k.thickness&&(k.tint={color:[1,1,1],atDistance:1})}return b&&(l>0||y)&&(v._subsurface=k,b.setPbrTransmission(v,{...k.refraction??{},intensity:l,useThicknessAsDepth:!!k.thickness,...y?{texture:y}:void 0})),C&&k.refraction&&k.thickness&&(v._subsurface=k,C.setPbrDispersion(v,20/p)),Object.keys(k).length>0&&(v._subsurface=k),T&&(g.texture||g.reflectanceTexture||D)&&T.setPbrMetallicReflectance(v,g),Object.keys(v).length>0?v:null}};export{e as default}; //# sourceMappingURL=gltf-ext-dielectric-T7WcIoMH.esm.min.js.map