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.

396 lines (389 loc) 18.8 kB
import { S as ShaderStore } from './index-MZPybX0H.esm.js'; // Do not edit. const name$4 = "openpbrDielectricReflectance"; const shader$4 = `struct ReflectanceParams {F0: f32, F90: f32, coloredF0: vec3f, coloredF90: vec3f,}; #define pbr_inline fn dielectricReflectance( insideIOR: f32,outsideIOR: f32,specularColor: vec3f,specularWeight: f32 )->ReflectanceParams {var outParams: ReflectanceParams;let dielectricF0=pow((insideIOR-outsideIOR)/(insideIOR+outsideIOR),2.0);let f90Scale=clamp(2.0f*abs(insideIOR-outsideIOR),0.0f,1.0f); #if (DIELECTRIC_SPECULAR_MODEL==DIELECTRIC_SPECULAR_MODEL_OPENPBR) let dielectricColorF90: vec3f=specularColor.rgb*vec3f(f90Scale); #else let dielectricColorF90: vec3f=vec3f(f90Scale); #endif #if DIELECTRIC_SPECULAR_MODEL==DIELECTRIC_SPECULAR_MODEL_GLTF let maxF0=max(specularColor.r,max(specularColor.g,specularColor.b));outParams.F0=dielectricF0*maxF0*specularWeight; #else outParams.F0=dielectricF0*specularWeight; #endif outParams.F90=f90Scale*specularWeight;outParams.coloredF0=vec3f(dielectricF0*specularWeight)*specularColor.rgb;outParams.coloredF90=dielectricColorF90*vec3f(specularWeight);return outParams;} `; // Sideeffect if (!ShaderStore.IncludesShadersStoreWGSL[name$4]) { ShaderStore.IncludesShadersStoreWGSL[name$4] = shader$4; } /** @internal */ const openpbrDielectricReflectanceWGSL = { name: name$4, shader: shader$4 }; // Do not edit. const name$3 = "openpbrGeometryInfo"; const shader$3 = `struct geometryInfoOutParams {NdotV: f32, NdotVUnclamped: f32, environmentBrdf: vec3f, horizonOcclusion: f32};struct geometryInfoAnisoOutParams {NdotV: f32, NdotVUnclamped: f32, environmentBrdf: vec3f, horizonOcclusion: f32, anisotropy: f32, anisotropicTangent: vec3f, anisotropicBitangent: vec3f, TBN: mat3x3<f32>};fn geometryInfo( normalW: vec3f,viewDirectionW: vec3f,roughness: f32,geometricNormalW: vec3f )->geometryInfoOutParams {var outParams: geometryInfoOutParams;outParams.NdotVUnclamped=dot(normalW,viewDirectionW);outParams.NdotV=absEps(outParams.NdotVUnclamped); #if defined(ENVIRONMENTBRDF) outParams.environmentBrdf=getBRDFLookup(outParams.NdotV,roughness); #else outParams.environmentBrdf=vec3f(0.0); #endif outParams.horizonOcclusion=1.0f; #if defined(ENVIRONMENTBRDF) && !defined(REFLECTIONMAP_SKYBOX) #ifdef HORIZONOCCLUSION #if defined(GEOMETRY_NORMAL) || defined(GEOMETRY_COAT_NORMAL) #ifdef REFLECTIONMAP_3D outParams.horizonOcclusion=environmentHorizonOcclusion(-viewDirectionW,normalW,geometricNormalW); #endif #endif #endif #endif return outParams;} fn geometryInfoAniso( normalW: vec3f,viewDirectionW: vec3f,roughness: f32,geometricNormalW: vec3f ,vAnisotropy: vec3f,TBN: mat3x3<f32> )->geometryInfoAnisoOutParams {let geoInfo: geometryInfoOutParams=geometryInfo(normalW,viewDirectionW,roughness,geometricNormalW);var outParams: geometryInfoAnisoOutParams;outParams.NdotV=geoInfo.NdotV;outParams.NdotVUnclamped=geoInfo.NdotVUnclamped;outParams.environmentBrdf=geoInfo.environmentBrdf;outParams.horizonOcclusion=geoInfo.horizonOcclusion;outParams.anisotropy=vAnisotropy.b;let anisotropyDirection: vec3f=vec3f(vAnisotropy.xy,0.);let anisoTBN: mat3x3<f32>=mat3x3<f32>(normalize(TBN[0]),normalize(TBN[1]),normalize(TBN[2]));outParams.anisotropicTangent=normalize(anisoTBN*anisotropyDirection);outParams.anisotropicBitangent=normalize(cross(anisoTBN[2],outParams.anisotropicTangent));outParams.TBN=TBN;return outParams;} `; // Sideeffect if (!ShaderStore.IncludesShadersStoreWGSL[name$3]) { ShaderStore.IncludesShadersStoreWGSL[name$3] = shader$3; } /** @internal */ const openpbrGeometryInfoWGSL = { name: name$3, shader: shader$3 }; // Do not edit. const name$2 = "openpbrIblFunctions"; const shader$2 = `#ifdef REFLECTION fn sampleIrradiance( surfaceNormal: vec3f #if defined(NORMAL) && defined(USESPHERICALINVERTEX) ,vEnvironmentIrradianceSH: vec3f #endif #if (defined(USESPHERICALFROMREFLECTIONMAP) && (!defined(NORMAL) || !defined(USESPHERICALINVERTEX))) || (defined(USEIRRADIANCEMAP) && defined(REFLECTIONMAP_3D)) ,iblMatrix: mat4x4f #endif #ifdef USEIRRADIANCEMAP #ifdef REFLECTIONMAP_3D ,irradianceSampler: texture_cube<f32> ,irradianceSamplerSampler: sampler #else ,irradianceSampler: texture_2d<f32> ,irradianceSamplerSampler: sampler #endif #ifdef USE_IRRADIANCE_DOMINANT_DIRECTION ,reflectionDominantDirection: vec3f #endif #endif #ifdef REALTIME_FILTERING ,reflectionFilteringInfo: vec2f #ifdef IBL_CDF_FILTERING ,icdfSampler: texture_2d<f32> ,icdfSamplerSampler: sampler #endif #endif ,reflectionInfos: vec2f ,viewDirectionW: vec3f ,diffuseRoughness: f32 ,surfaceAlbedo: vec3f )->vec3f {var environmentIrradiance=vec3f(0.,0.,0.); #if (defined(USESPHERICALFROMREFLECTIONMAP) && (!defined(NORMAL) || !defined(USESPHERICALINVERTEX))) || (defined(USEIRRADIANCEMAP) && defined(REFLECTIONMAP_3D)) var irradianceVector=(iblMatrix*vec4f(surfaceNormal,0.0f)).xyz;var irradianceView=(iblMatrix*vec4f(viewDirectionW,0.0f)).xyz; #if !defined(USE_IRRADIANCE_DOMINANT_DIRECTION) && !defined(REALTIME_FILTERING) #if BASE_DIFFUSE_MODEL != BRDF_DIFFUSE_MODEL_LAMBERT && BASE_DIFFUSE_MODEL != BRDF_DIFFUSE_MODEL_LEGACY {let NdotV=max(dot(surfaceNormal,viewDirectionW),0.0f);irradianceVector=mix(irradianceVector,irradianceView,(0.5f*(1.0f-NdotV))*diffuseRoughness);} #endif #endif #ifdef REFLECTIONMAP_OPPOSITEZ irradianceVector.z*=-1.0;irradianceView.z*=-1.0; #endif #ifdef INVERTCUBICMAP irradianceVector.y*=-1.0;irradianceView.y*=-1.0; #endif #endif #ifdef USESPHERICALFROMREFLECTIONMAP #if defined(NORMAL) && defined(USESPHERICALINVERTEX) environmentIrradiance=vEnvironmentIrradianceSH; #else #if defined(REALTIME_FILTERING) environmentIrradiance=irradiance(reflectionSampler,reflectionSamplerSampler,irradianceVector,reflectionFilteringInfo,diffuseRoughness,surfaceAlbedo,irradianceView #ifdef IBL_CDF_FILTERING ,icdfSampler ,icdfSamplerSampler #endif ); #else environmentIrradiance=computeEnvironmentIrradiance(irradianceVector); #endif #endif #elif defined(USEIRRADIANCEMAP) #ifdef REFLECTIONMAP_3D let environmentIrradianceFromTexture: vec4f=textureSample(irradianceSampler,irradianceSamplerSampler,irradianceVector); #else let environmentIrradianceFromTexture: vec4f=textureSample(irradianceSampler,irradianceSamplerSampler,reflectionCoords); #endif environmentIrradiance=environmentIrradianceFromTexture.rgb; #ifdef RGBDREFLECTION environmentIrradiance.rgb=fromRGBD(environmentIrradianceFromTexture); #endif #ifdef GAMMAREFLECTION environmentIrradiance.rgb=toLinearSpaceVec3(environmentIrradiance.rgb); #endif #ifdef USE_IRRADIANCE_DOMINANT_DIRECTION let Ls: vec3f=normalize(reflectionDominantDirection);let NoL: f32=dot(irradianceVector,Ls);let NoV: f32=dot(irradianceVector,irradianceView);var diffuseRoughnessTerm=vec3f(1.0f); #if BASE_DIFFUSE_MODEL==BRDF_DIFFUSE_MODEL_EON let LoV: f32=dot (Ls,irradianceView);let mag: f32=length(reflectionDominantDirection)*2.0f;let clampedAlbedo: vec3f=clamp(surfaceAlbedo,vec3f(0.1f),vec3f(1.0f));diffuseRoughnessTerm=diffuseBRDF_EON(clampedAlbedo,diffuseRoughness,NoL,NoV,LoV)*PI;diffuseRoughnessTerm=diffuseRoughnessTerm/clampedAlbedo;diffuseRoughnessTerm=mix(vec3f(1.0f),diffuseRoughnessTerm,sqrt(clamp(mag*NoV,0.0f,1.0f))); #elif BASE_DIFFUSE_MODEL==BRDF_DIFFUSE_MODEL_BURLEY let H: vec3f=(irradianceView+Ls)*0.5f;let VoH: f32=dot(irradianceView,H);diffuseRoughnessTerm=vec3f(diffuseBRDF_Burley(NoL,NoV,VoH,diffuseRoughness)*PI); #endif environmentIrradiance=environmentIrradiance.rgb*diffuseRoughnessTerm; #endif #endif environmentIrradiance*=reflectionInfos.x;return environmentIrradiance;} #ifdef REFLECTIONMAP_3D fn createReflectionCoords(vPositionW: vec3f,normalW: vec3f)->vec3f #else fn createReflectionCoords(vPositionW: vec3f,normalW: vec3f)->vec2f #endif {var reflectionVector: vec3f=computeReflectionCoords(vec4f(vPositionW,1.0f),normalW); #ifdef REFLECTIONMAP_OPPOSITEZ reflectionVector.z*=-1.0; #endif #ifdef REFLECTIONMAP_3D var reflectionCoords: vec3f=reflectionVector; #else var reflectionCoords: vec2f=reflectionVector.xy; #ifdef REFLECTIONMAP_PROJECTION reflectionCoords/=reflectionVector.z; #endif reflectionCoords.y=1.0f-reflectionCoords.y; #endif return reflectionCoords;} fn sampleRadiance( alphaG: f32 ,reflectionMicrosurfaceInfos: vec3f ,reflectionInfos: vec2f ,geoInfo: geometryInfoOutParams #ifdef REFLECTIONMAP_3D ,reflectionSampler: texture_cube<f32> ,reflectionSamplerSampler: sampler ,reflectionCoords: vec3f #else ,reflectionSampler: texture_2d<f32> ,reflectionSamplerSampler: sampler ,reflectionCoords: vec2f #endif #ifdef REALTIME_FILTERING ,reflectionFilteringInfo: vec2f #endif )->vec3f {var environmentRadiance: vec4f=vec4f(0.f,0.f,0.f,0.f); #if defined(LODINREFLECTIONALPHA) && !defined(REFLECTIONMAP_SKYBOX) var reflectionLOD: f32=getLodFromAlphaG(reflectionMicrosurfaceInfos.x,alphaG,geoInfo.NdotVUnclamped); #elif defined(LINEARSPECULARREFLECTION) var reflectionLOD: f32=getLinearLodFromRoughness(reflectionMicrosurfaceInfos.x,roughness); #else var reflectionLOD: f32=getLodFromAlphaG(reflectionMicrosurfaceInfos.x,alphaG); #endif reflectionLOD=reflectionLOD*reflectionMicrosurfaceInfos.y+reflectionMicrosurfaceInfos.z; #ifdef REALTIME_FILTERING environmentRadiance=vec4f(radiance(alphaG,reflectionSampler,reflectionSamplerSampler,reflectionCoords,reflectionFilteringInfo),1.0f); #else environmentRadiance=textureSampleLevel(reflectionSampler,reflectionSamplerSampler,reflectionCoords,reflectionLOD); #endif var envRadiance: vec3f=environmentRadiance.rgb; #ifdef RGBDREFLECTION envRadiance=fromRGBD(environmentRadiance); #endif #ifdef GAMMAREFLECTION envRadiance=toLinearSpaceVec3(environmentRadiance.rgb); #endif envRadiance*=reflectionInfos.x;return envRadiance;} #if defined(ANISOTROPIC) fn sampleRadianceAnisotropic( alphaG: f32 ,reflectionMicrosurfaceInfos: vec3f ,reflectionInfos: vec2f ,geoInfo: geometryInfoAnisoOutParams ,normalW: vec3f ,viewDirectionW: vec3f ,positionW: vec3f ,noise: vec3f ,isRefraction: bool ,ior: f32 #ifdef REFLECTIONMAP_3D ,reflectionSampler: texture_cube<f32> ,reflectionSamplerSampler: sampler #else ,reflectionSampler: texture_2d<f32> ,reflectionSamplerSampler: sampler #endif #ifdef REALTIME_FILTERING ,reflectionFilteringInfo: vec2f #endif )->vec3f {var environmentRadiance: vec4f=vec4f(0.f,0.f,0.f,0.f);let alphaT=alphaG*sqrt(2.0f/(1.0f+(1.0f-geoInfo.anisotropy)*(1.0f-geoInfo.anisotropy)));let alphaB=(1.0f-geoInfo.anisotropy)*alphaT;let modifiedAlphaG=alphaB; #if defined(LODINREFLECTIONALPHA) && !defined(REFLECTIONMAP_SKYBOX) var reflectionLOD: f32=getLodFromAlphaG(reflectionMicrosurfaceInfos.x,modifiedAlphaG,geoInfo.NdotVUnclamped); #elif defined(LINEARSPECULARREFLECTION) var reflectionLOD: f32=getLinearLodFromRoughness(reflectionMicrosurfaceInfos.x,roughness); #else var reflectionLOD: f32=getLodFromAlphaG(reflectionMicrosurfaceInfos.x,modifiedAlphaG); #endif reflectionLOD=reflectionLOD*reflectionMicrosurfaceInfos.y+reflectionMicrosurfaceInfos.z; #ifdef REALTIME_FILTERING var view=(uniforms.reflectionMatrix*vec4f(viewDirectionW,0.0f)).xyz;var tangent=(uniforms.reflectionMatrix*vec4f(geoInfo.anisotropicTangent,0.0f)).xyz;var bitangent=(uniforms.reflectionMatrix*vec4f(geoInfo.anisotropicBitangent,0.0f)).xyz;var normal=(uniforms.reflectionMatrix*vec4f(normalW,0.0f)).xyz; #ifdef REFLECTIONMAP_OPPOSITEZ view.z*=-1.0f;tangent.z*=-1.0f;bitangent.z*=-1.0f;normal.z*=-1.0f; #endif environmentRadiance = vec4f(radianceAnisotropic(alphaT,alphaB,reflectionSampler,reflectionSamplerSampler, view,tangent, bitangent,normal, reflectionFilteringInfo,noise.xy,isRefraction,ior), 1.0f); #else const samples: i32=16;var radianceSample=vec4f(0.0);var accumulatedRadiance=vec3f(0.0);var reflectionCoords=vec3f(0.0);var sample_weight=0.0f;var total_weight=0.0f;let step=1.0f/f32(max(samples-1,1));for (var i: i32=0; i<samples; i++) {var t: f32=mix(-1.0,1.0,f32(i)*step);t+=step*2.0*noise.x;sample_weight=max(1.0-abs(t),0.001);sample_weight*=sample_weight;t*=min(4.0*alphaT*geoInfo.anisotropy,1.0);var bentNormal: vec3f;if (t<0.0) {let blend: f32=t+1.0;bentNormal=normalize(mix(-geoInfo.anisotropicTangent,normalW,blend));} else if (t>0.0) {let blend: f32=t;bentNormal=normalize(mix(normalW,geoInfo.anisotropicTangent,blend));} else {bentNormal=normalW;} if (isRefraction) {reflectionCoords=double_refract(-viewDirectionW,bentNormal,ior);} else {reflectionCoords=reflect(-viewDirectionW,bentNormal);} reflectionCoords=(uniforms.reflectionMatrix*vec4f(reflectionCoords,0.f)).xyz; #ifdef REFLECTIONMAP_OPPOSITEZ reflectionCoords.z*=-1.0f; #endif radianceSample=textureSampleLevel(reflectionSampler,reflectionSamplerSampler,reflectionCoords,reflectionLOD); #ifdef RGBDREFLECTION accumulatedRadiance+=vec3f(sample_weight)*fromRGBD(radianceSample); #elif defined(GAMMAREFLECTION) accumulatedRadiance+=vec3f(sample_weight)*toLinearSpaceVec3(radianceSample.rgb); #else accumulatedRadiance+=vec3f(sample_weight)*radianceSample.rgb; #endif total_weight+=sample_weight;} environmentRadiance=vec4f(accumulatedRadiance/vec3f(total_weight),1.0f); #endif environmentRadiance=vec4f(environmentRadiance.rgb*reflectionInfos.xxx,environmentRadiance.a);return environmentRadiance.rgb;} #endif #endif #ifdef ENVIRONMENTBRDF fn computeDielectricIblFresnel(reflectance: ReflectanceParams,environmentBrdf: vec3f)->f32 {let dielectricIblFresnel: f32=getReflectanceFromBRDFWithEnvLookup(vec3f(reflectance.F0),vec3f(reflectance.F90),environmentBrdf).r;let dielectricECF: f32=1.0+reflectance.F0*(1.0/environmentBrdf.y-1.0);return clamp(dielectricIblFresnel*dielectricECF,0.0,1.0);} fn computeConductorIblFresnel(reflectance: ReflectanceParams,environmentBrdf: vec3f)->vec3f { #if (CONDUCTOR_SPECULAR_MODEL==CONDUCTOR_SPECULAR_MODEL_OPENPBR) let openPBRBrdf: vec3f=vec3f(environmentBrdf.xy,environmentBrdf.z/BRDF_Z_SCALE);let b: vec3f =getF82B(reflectance.coloredF0,reflectance.coloredF90);let E_F82: vec3f=getF82DirectionalAlbedo(reflectance.coloredF0,vec3f(1.0),b,openPBRBrdf);let F_avg: vec3f=getF82AverageFresnel(reflectance.coloredF0,b);let ECF: vec3f =vec3f(1.0)+F_avg*(vec3f(1.0)/openPBRBrdf.y-vec3f(1.0));return clamp(E_F82*ECF,vec3f(0.0),vec3f(1.0)); #else return getReflectanceFromBRDFLookup(reflectance.coloredF0,reflectance.coloredF90,environmentBrdf); #endif } #endif `; // Sideeffect if (!ShaderStore.IncludesShadersStoreWGSL[name$2]) { ShaderStore.IncludesShadersStoreWGSL[name$2] = shader$2; } /** @internal */ const openpbrIblFunctionsWGSL = { name: name$2, shader: shader$2 }; // Do not edit. const name$1 = "openpbrSubsurfaceLayerData"; const shader$1 = `var subsurface_weight: f32=uniforms.vSubsurfaceWeight;var subsurface_color: vec3f=uniforms.vSubsurfaceColor.rgb;var subsurface_radius: f32=uniforms.vSubsurfaceRadius;var subsurface_radius_scale: vec3f=uniforms.vSubsurfaceRadiusScale;var subsurface_scatter_anisotropy: f32=clamp(uniforms.vSubsurfaceScatterAnisotropy,-0.9999f,0.9999f); #ifdef SUBSURFACE_WEIGHT let subsurfaceWeightFromTexture: vec4f=TEXRD(subsurfaceWeightSampler,subsurfaceWeightSamplerSampler,fragmentInputs.vSubsurfaceWeightUV+uvOffset); #endif #ifdef SUBSURFACE_COLOR let subsurfaceColorFromTexture: vec4f=TEXRD(subsurfaceColorSampler,subsurfaceColorSamplerSampler,fragmentInputs.vSubsurfaceColorUV+uvOffset); #endif #ifdef SUBSURFACE_RADIUS_SCALE let subsurfaceRadiusScaleFromTexture: vec4f=TEXRD(subsurfaceRadiusScaleSampler,subsurfaceRadiusScaleSamplerSampler,fragmentInputs.vSubsurfaceRadiusScaleUV+uvOffset); #endif #ifdef SUBSURFACE_WEIGHT #ifdef SUBSURFACE_WEIGHT_FROM_TEXTURE_ALPHA subsurface_weight*=subsurfaceWeightFromTexture.a; #else subsurface_weight*=subsurfaceWeightFromTexture.r; #endif #endif #ifdef SUBSURFACE_COLOR #ifdef SUBSURFACE_COLOR_GAMMA subsurface_color*=toLinearSpaceVec3(subsurfaceColorFromTexture.rgb); #else subsurface_color*=subsurfaceColorFromTexture.rgb; #endif subsurface_color*=uniforms.vSubsurfaceColorInfos.y; #endif #ifdef SUBSURFACE_RADIUS_SCALE subsurface_radius_scale*=subsurfaceRadiusScaleFromTexture.rgb; #endif `; // Sideeffect if (!ShaderStore.IncludesShadersStoreWGSL[name$1]) { ShaderStore.IncludesShadersStoreWGSL[name$1] = shader$1; } /** @internal */ const openpbrSubsurfaceLayerDataWGSL = { name: name$1, shader: shader$1 }; // Do not edit. const name = "openpbrTransmissionLayerData"; const shader = `var transmission_weight: f32=uniforms.vTransmissionWeight;var transmission_color: vec3f=uniforms.vTransmissionColor.rgb;var transmission_depth: f32=uniforms.vTransmissionDepth;var transmission_scatter: vec3f=uniforms.vTransmissionScatter.rgb;var transmission_scatter_anisotropy: f32=clamp(uniforms.vTransmissionScatterAnisotropy,-0.9999f,0.9999f);var transmission_dispersion_scale: f32=uniforms.vTransmissionDispersionScale;var transmission_dispersion_abbe_number: f32=uniforms.vTransmissionDispersionAbbeNumber; #ifdef TRANSMISSION_WEIGHT let transmissionWeightFromTexture: vec4f=TEXRD(transmissionWeightSampler,transmissionWeightSamplerSampler,fragmentInputs.vTransmissionWeightUV+uvOffset); #endif #ifdef TRANSMISSION_COLOR let transmissionColorFromTexture: vec4f=TEXRD(transmissionColorSampler,transmissionColorSamplerSampler,fragmentInputs.vTransmissionColorUV+uvOffset); #endif #ifdef TRANSMISSION_DEPTH let transmissionDepthFromTexture: vec4f=TEXRD(transmissionDepthSampler,transmissionDepthSamplerSampler,fragmentInputs.vTransmissionDepthUV+uvOffset); #endif #ifdef TRANSMISSION_SCATTER let transmissionScatterFromTexture: vec4f=TEXRD(transmissionScatterSampler,transmissionScatterSamplerSampler,fragmentInputs.vTransmissionScatterUV+uvOffset); #endif #ifdef TRANSMISSION_DISPERSION_SCALE let transmissionDispersionScaleFromTexture: vec4f=TEXRD(transmissionDispersionScaleSampler,transmissionDispersionScaleSamplerSampler,fragmentInputs.vTransmissionDispersionScaleUV+uvOffset); #endif #ifdef TRANSMISSION_WEIGHT transmission_weight*=transmissionWeightFromTexture.r; #endif #ifdef TRANSMISSION_COLOR #ifdef TRANSMISSION_COLOR_GAMMA transmission_color*=toLinearSpaceVec3(transmissionColorFromTexture.rgb); #else transmission_color*=transmissionColorFromTexture.rgb; #endif transmission_color*=uniforms.vTransmissionColorInfos.y; #endif #ifdef TRANSMISSION_DEPTH transmission_depth*=transmissionDepthFromTexture.r; #endif #ifdef TRANSMISSION_SCATTER transmission_scatter*=transmissionScatterFromTexture.rgb; #endif #ifdef TRANSMISSION_DISPERSION_SCALE transmission_dispersion_scale*=transmissionDispersionScaleFromTexture.r; #endif `; // Sideeffect if (!ShaderStore.IncludesShadersStoreWGSL[name]) { ShaderStore.IncludesShadersStoreWGSL[name] = shader; } /** @internal */ const openpbrTransmissionLayerDataWGSL = { name, shader }; export { openpbrGeometryInfoWGSL as a, openpbrIblFunctionsWGSL as b, openpbrSubsurfaceLayerDataWGSL as c, openpbrTransmissionLayerDataWGSL as d, openpbrDielectricReflectanceWGSL as o }; //# sourceMappingURL=openpbrTransmissionLayerData-DX83qx5e.esm.js.map