1"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[34719],{10732:(e,t,o)=>{o.d(t,{I:()=>n});var i=o(52019);let a="pbrDebug",r=`#if DEBUGMODE>0 2if (vClipSpacePosition.x/vClipSpacePosition.w>=vDebugMode.x) { 3#if DEBUGMODE==1 4gl_FragColor.rgb=vPositionW.rgb; 5#define DEBUGMODE_NORMALIZE 6#elif DEBUGMODE==2 && defined(NORMAL) 7gl_FragColor.rgb=vNormalW.rgb; 8#define DEBUGMODE_NORMALIZE 9#elif DEBUGMODE==3 && defined(BUMP) || DEBUGMODE==3 && defined(PARALLAX) || DEBUGMODE==3 && defined(ANISOTROPIC) 10gl_FragColor.rgb=TBN[0]; 11#define DEBUGMODE_NORMALIZE 12#elif DEBUGMODE==4 && defined(BUMP) || DEBUGMODE==4 && defined(PARALLAX) || DEBUGMODE==4 && defined(ANISOTROPIC) 13gl_FragColor.rgb=TBN[1]; 14#define DEBUGMODE_NORMALIZE 15#elif DEBUGMODE==5 16gl_FragColor.rgb=normalW; 17#define DEBUGMODE_NORMALIZE 18#elif DEBUGMODE==6 && defined(MAINUV1) 19gl_FragColor.rgb=vec3(vMainUV1,0.0); 20#elif DEBUGMODE==7 && defined(MAINUV2) 21gl_FragColor.rgb=vec3(vMainUV2,0.0); 22#elif DEBUGMODE==8 && defined(CLEARCOAT) && defined(CLEARCOAT_BUMP) 23gl_FragColor.rgb=clearcoatOut.TBNClearCoat[0]; 24#define DEBUGMODE_NORMALIZE 25#elif DEBUGMODE==9 && defined(CLEARCOAT) && defined(CLEARCOAT_BUMP) 26gl_FragColor.rgb=clearcoatOut.TBNClearCoat[1]; 27#define DEBUGMODE_NORMALIZE 28#elif DEBUGMODE==10 && defined(CLEARCOAT) 29gl_FragColor.rgb=clearcoatOut.clearCoatNormalW; 30#define DEBUGMODE_NORMALIZE 31#elif DEBUGMODE==11 && defined(ANISOTROPIC) 32gl_FragColor.rgb=anisotropicOut.anisotropicNormal; 33#define DEBUGMODE_NORMALIZE 34#elif DEBUGMODE==12 && defined(ANISOTROPIC) 35gl_FragColor.rgb=anisotropicOut.anisotropicTangent; 36#define DEBUGMODE_NORMALIZE 37#elif DEBUGMODE==13 && defined(ANISOTROPIC) 38gl_FragColor.rgb=anisotropicOut.anisotropicBitangent; 39#define DEBUGMODE_NORMALIZE 40#elif DEBUGMODE==20 && defined(ALBEDO) 41gl_FragColor.rgb=albedoTexture.rgb; 42#ifndef GAMMAALBEDO 43#define DEBUGMODE_GAMMA 44#endif 45#elif DEBUGMODE==21 && defined(AMBIENT) 46gl_FragColor.rgb=aoOut.ambientOcclusionColorMap.rgb; 47#elif DEBUGMODE==22 && defined(OPACITY) 48gl_FragColor.rgb=opacityMap.rgb; 49#elif DEBUGMODE==23 && defined(EMISSIVE) 50gl_FragColor.rgb=emissiveColorTex.rgb; 51#ifndef GAMMAEMISSIVE 52#define DEBUGMODE_GAMMA 53#endif 54#elif DEBUGMODE==24 && defined(LIGHTMAP) 55gl_FragColor.rgb=lightmapColor.rgb; 56#ifndef GAMMALIGHTMAP 57#define DEBUGMODE_GAMMA 58#endif 59#elif DEBUGMODE==25 && defined(REFLECTIVITY) && defined(METALLICWORKFLOW) 60gl_FragColor.rgb=reflectivityOut.surfaceMetallicColorMap.rgb; 61#elif DEBUGMODE==26 && defined(REFLECTIVITY) && !defined(METALLICWORKFLOW) 62gl_FragColor.rgb=reflectivityOut.surfaceReflectivityColorMap.rgb; 63#define DEBUGMODE_GAMMA 64#elif DEBUGMODE==27 && defined(CLEARCOAT) && defined(CLEARCOAT_TEXTURE) 65gl_FragColor.rgb=vec3(clearcoatOut.clearCoatMapData.rg,0.0); 66#elif DEBUGMODE==28 && defined(CLEARCOAT) && defined(CLEARCOAT_TINT) && defined(CLEARCOAT_TINT_TEXTURE) 67gl_FragColor.rgb=clearcoatOut.clearCoatTintMapData.rgb; 68#elif DEBUGMODE==29 && defined(SHEEN) && defined(SHEEN_TEXTURE) 69gl_FragColor.rgb=sheenOut.sheenMapData.rgb; 70#elif DEBUGMODE==30 && defined(ANISOTROPIC) && defined(ANISOTROPIC_TEXTURE) 71gl_FragColor.rgb=anisotropicOut.anisotropyMapData.rgb; 72#elif DEBUGMODE==31 && defined(SUBSURFACE) && defined(SS_THICKNESSANDMASK_TEXTURE) 73gl_FragColor.rgb=subSurfaceOut.thicknessMap.rgb; 74#elif DEBUGMODE==32 && defined(BUMP) 75gl_FragColor.rgb=texture2D(bumpSampler,vBumpUV).rgb; 76#elif DEBUGMODE==40 && defined(SS_REFRACTION) 77gl_FragColor.rgb=subSurfaceOut.environmentRefraction.rgb; 78#define DEBUGMODE_GAMMA 79#elif DEBUGMODE==41 && defined(REFLECTION) 80gl_FragColor.rgb=reflectionOut.environmentRadiance.rgb; 81#ifndef GAMMAREFLECTION 82#define DEBUGMODE_GAMMA 83#endif 84#elif DEBUGMODE==42 && defined(CLEARCOAT) && defined(REFLECTION) 85gl_FragColor.rgb=clearcoatOut.environmentClearCoatRadiance.rgb; 86#define DEBUGMODE_GAMMA 87#elif DEBUGMODE==50 88gl_FragColor.rgb=diffuseBase.rgb; 89#define DEBUGMODE_GAMMA 90#elif DEBUGMODE==51 && defined(SPECULARTERM) 91gl_FragColor.rgb=specularBase.rgb; 92#define DEBUGMODE_GAMMA 93#elif DEBUGMODE==52 && defined(CLEARCOAT) 94gl_FragColor.rgb=clearCoatBase.rgb; 95#define DEBUGMODE_GAMMA 96#elif DEBUGMODE==53 && defined(SHEEN) 97gl_FragColor.rgb=sheenBase.rgb; 98#define DEBUGMODE_GAMMA 99#elif DEBUGMODE==54 && defined(REFLECTION) 100gl_FragColor.rgb=reflectionOut.environmentIrradiance.rgb; 101#ifndef GAMMAREFLECTION 102#define DEBUGMODE_GAMMA 103#endif 104#elif DEBUGMODE==60 105gl_FragColor.rgb=surfaceAlbedo.rgb; 106#define DEBUGMODE_GAMMA 107#elif DEBUGMODE==61 108gl_FragColor.rgb=clearcoatOut.specularEnvironmentR0; 109#define DEBUGMODE_GAMMA 110#elif DEBUGMODE==62 && defined(METALLICWORKFLOW) 111gl_FragColor.rgb=vec3(reflectivityOut.metallic); 112#elif DEBUGMODE==71 && defined(METALLICWORKFLOW) 113gl_FragColor.rgb=reflectivityOut.metallicF0; 114#elif DEBUGMODE==63 115gl_FragColor.rgb=vec3(roughness); 116#elif DEBUGMODE==64 117gl_FragColor.rgb=vec3(alphaG); 118#elif DEBUGMODE==65 119gl_FragColor.rgb=vec3(NdotV); 120#elif DEBUGMODE==66 && defined(CLEARCOAT) && defined(CLEARCOAT_TINT) 121gl_FragColor.rgb=clearcoatOut.clearCoatColor.rgb; 122#define DEBUGMODE_GAMMA 123#elif DEBUGMODE==67 && defined(CLEARCOAT) 124gl_FragColor.rgb=vec3(clearcoatOut.clearCoatRoughness); 125#elif DEBUGMODE==68 && defined(CLEARCOAT) 126gl_FragColor.rgb=vec3(clearcoatOut.clearCoatNdotV); 127#elif DEBUGMODE==69 && defined(SUBSURFACE) && defined(SS_TRANSLUCENCY) 128gl_FragColor.rgb=subSurfaceOut.transmittance; 129#elif DEBUGMODE==70 && defined(SUBSURFACE) && defined(SS_REFRACTION) 130gl_FragColor.rgb=subSurfaceOut.refractionTransmittance; 131#elif DEBUGMODE==72 132gl_FragColor.rgb=vec3(microSurface); 133#elif DEBUGMODE==73 134gl_FragColor.rgb=vAlbedoColor.rgb; 135#define DEBUGMODE_GAMMA 136#elif DEBUGMODE==74 && !defined(METALLICWORKFLOW) 137gl_FragColor.rgb=vReflectivityColor.rgb; 138#define DEBUGMODE_GAMMA 139#elif DEBUGMODE==75 140gl_FragColor.rgb=vEmissiveColor.rgb; 141#define DEBUGMODE_GAMMA 142#elif DEBUGMODE==80 && defined(RADIANCEOCCLUSION) 143gl_FragColor.rgb=vec3(seo); 144#elif DEBUGMODE==81 && defined(HORIZONOCCLUSION) && defined(BUMP) && defined(REFLECTIONMAP_3D) 145gl_FragColor.rgb=vec3(eho); 146#elif DEBUGMODE==82 && defined(MS_BRDF_ENERGY_CONSERVATION) 147gl_FragColor.rgb=vec3(energyConservationFactor); 148#elif DEBUGMODE==83 && defined(ENVIRONMENTBRDF) && !defined(REFLECTIONMAP_SKYBOX) 149gl_FragColor.rgb=baseSpecularEnvironmentReflectance; 150#define DEBUGMODE_GAMMA 151#elif DEBUGMODE==84 && defined(CLEARCOAT) && defined(ENVIRONMENTBRDF) && !defined(REFLECTIONMAP_SKYBOX) 152gl_FragColor.rgb=clearcoatOut.clearCoatEnvironmentReflectance; 153#define DEBUGMODE_GAMMA 154#elif DEBUGMODE==85 && defined(SHEEN) && defined(REFLECTION) 155gl_FragColor.rgb=sheenOut.sheenEnvironmentReflectance; 156#define DEBUGMODE_GAMMA 157#elif DEBUGMODE==86 && defined(ALPHABLEND) 158gl_FragColor.rgb=vec3(luminanceOverAlpha); 159#elif DEBUGMODE==87 160gl_FragColor.rgb=vec3(alpha); 161#elif DEBUGMODE==88 && defined(ALBEDO) 162gl_FragColor.rgb=vec3(albedoTexture.a); 163#elif DEBUGMODE==89 164gl_FragColor.rgb=aoOut.ambientOcclusionColor.rgb; 165#else 166float stripeWidth=30.;float stripePos=floor(gl_FragCoord.x/stripeWidth);float whichColor=mod(stripePos,2.);vec3 color1=vec3(.6,.2,.2);vec3 color2=vec3(.3,.1,.1);gl_FragColor.rgb=mix(color1,color2,whichColor); 167#endif 168gl_FragColor.rgb*=vDebugMode.y; 169#ifdef DEBUGMODE_NORMALIZE 170gl_FragColor.rgb=normalize(gl_FragColor.rgb)*0.5+0.5; 171#endif 172#ifdef DEBUGMODE_GAMMA 173gl_FragColor.rgb=toGammaSpace(gl_FragColor.rgb); 174#endif 175gl_FragColor.a=1.0; 176#ifdef PREPASS 177gl_FragData[0]=toLinearSpace(gl_FragColor); 178gl_FragData[1]=vec4(0.,0.,0.,0.); 179#endif 180#ifdef DEBUGMODE_FORCERETURN 181return; 182#endif 183} 184#endif 185`;i.l.IncludesShadersStore[a]||(i.l.IncludesShadersStore[a]=r);let n={name:a,shader:r}},17890:(e,t,o)=>{o.d(t,{k:()=>n});var i=o(52019);let a="pbrHelperFunctions",r=`#define MINIMUMVARIANCE 0.0005 186#ifndef TEXRD_DEFINED 187#define TEXRD(s,uv) texture2D(s,uv) 188#define TEXRD_DEFINED 189#endif
190float convertRoughnessToAverageSlope(float roughness) 191{return square(roughness)+MINIMUMVARIANCE;} 192float fresnelGrazingReflectance(float reflectance0) {float reflectance90=saturate(reflectance0*25.0);return reflectance90;} 193vec2 getAARoughnessFactors(vec3 normalVector) { 194#ifdef SPECULARAA 195vec3 nDfdx=dFdx(normalVector.xyz);vec3 nDfdy=dFdy(normalVector.xyz);float slopeSquare=max(dot(nDfdx,nDfdx),dot(nDfdy,nDfdy));float geometricRoughnessFactor=pow(saturate(slopeSquare),0.333);float geometricAlphaGFactor=sqrt(slopeSquare);geometricAlphaGFactor*=0.75;return vec2(geometricRoughnessFactor,geometricAlphaGFactor); 196#else 197return vec2(0.); 198#endif 199} 200#ifdef ANISOTROPIC 201#ifdef ANISOTROPIC_LEGACY 202vec2 getAnisotropicRoughness(float alphaG,float anisotropy) {float alphaT=max(alphaG*(1.0+anisotropy),MINIMUMVARIANCE);float alphaB=max(alphaG*(1.0-anisotropy),MINIMUMVARIANCE);return vec2(alphaT,alphaB);} 203vec3 getAnisotropicBentNormals(const vec3 T,const vec3 B,const vec3 N,const vec3 V,float anisotropy,float roughness) {vec3 anisotropicFrameDirection;if (anisotropy>=0.0) {anisotropicFrameDirection=B;} else {anisotropicFrameDirection=T;} 204vec3 anisotropicFrameTangent=cross(normalize(anisotropicFrameDirection),V);vec3 anisotropicFrameNormal=cross(anisotropicFrameTangent,anisotropicFrameDirection);vec3 anisotropicNormal=normalize(mix(N,anisotropicFrameNormal,abs(anisotropy)));return anisotropicNormal;} 205#elif ANISOTROPIC_OPENPBR 206vec2 getAnisotropicRoughness(float alphaG,float anisotropy) {float alphaT=max(alphaG*alphaG*sqrt(2.0/(1.0+(1.0-anisotropy)*(1.0-anisotropy))),MINIMUMVARIANCE);float alphaB=max(alphaT*(1.0-anisotropy),MINIMUMVARIANCE);return vec2(alphaT,alphaB);} 207#else 208vec2 getAnisotropicRoughness(float alphaG,float anisotropy) {float alphaT=max(mix(alphaG,1.0,anisotropy*anisotropy),MINIMUMVARIANCE);float alphaB=max(alphaG,MINIMUMVARIANCE);return vec2(alphaT,alphaB);} 209vec3 getAnisotropicBentNormals(const vec3 T,const vec3 B,const vec3 N,const vec3 V,float anisotropy,float roughness) {vec3 bentNormal=cross(B,V);bentNormal=normalize(cross(bentNormal,B));float a=square(square(1.0-anisotropy*(1.0-roughness)));bentNormal=normalize(mix(bentNormal,N,a));return bentNormal;} 210#endif 211#endif 212#if defined(CLEARCOAT) || defined(SS_REFRACTION) 213vec3 cocaLambert(vec3 alpha,float distance) {return exp(-alpha*distance);} 214vec3 cocaLambert(float NdotVRefract,float NdotLRefract,vec3 alpha,float thickness) {return cocaLambert(alpha,(thickness*((NdotLRefract+NdotVRefract)/(NdotLRefract*NdotVRefract))));} 215vec3 computeColorAtDistanceInMedia(vec3 color,float distance) {return -log(color)/distance;} 216vec3 computeClearCoatAbsorption(float NdotVRefract,float NdotLRefract,vec3 clearCoatColor,float clearCoatThickness,float clearCoatIntensity) {vec3 clearCoatAbsorption=mix(vec3(1.0), 217cocaLambert(NdotVRefract,NdotLRefract,clearCoatColor,clearCoatThickness), 218clearCoatIntensity);return clearCoatAbsorption;} 219#endif 220#ifdef MICROSURFACEAUTOMATIC 221float computeDefaultMicroSurface(float microSurface,vec3 reflectivityColor) 222{const float kReflectivityNoAlphaWorkflow_SmoothnessMax=0.95;float reflectivityLuminance=getLuminance(reflectivityColor);float reflectivityLuma=sqrt(reflectivityLuminance);microSurface=reflectivityLuma*kReflectivityNoAlphaWorkflow_SmoothnessMax;return microSurface;} 223#endif 224`;i.l.IncludesShadersStore[a]||(i.l.IncludesShadersStore[a]=r);let n={name:a,shader:r}},26604:(e,t,o)=>{o.d(t,{o:()=>n});var i=o(52019);let a="importanceSampling",r=`vec3 hemisphereCosSample(vec2 u) {float phi=2.*PI*u.x;float cosTheta2=1.-u.y;float cosTheta=sqrt(cosTheta2);float sinTheta=sqrt(1.-cosTheta2);return vec3(sinTheta*cos(phi),sinTheta*sin(phi),cosTheta);} 225vec3 hemisphereImportanceSampleDggx(vec2 u,float a) {float phi=2.*PI*u.x;float cosTheta2=(1.-u.y)/(1.+(a+1.)*((a-1.)*u.y));float cosTheta=sqrt(cosTheta2);float sinTheta=sqrt(1.-cosTheta2);return vec3(sinTheta*cos(phi),sinTheta*sin(phi),cosTheta);} 226vec3 hemisphereImportanceSampleDggxAnisotropic(vec2 Xi,float alphaTangent,float alphaBitangent) 227{alphaTangent=max(alphaTangent,0.0001);alphaBitangent=max(alphaBitangent,0.0001);float phi=atan(alphaBitangent/alphaTangent*tan(2.0*3.14159265*Xi.x));if (Xi.x>0.5) phi+=3.14159265;
228float cosPhi=cos(phi);float sinPhi=sin(phi);float alpha2=(cosPhi*cosPhi)/(alphaTangent*alphaTangent) + 229(sinPhi*sinPhi)/(alphaBitangent*alphaBitangent);float tanTheta2=Xi.y/(1.0-Xi.y)/alpha2;float cosTheta=1.0/sqrt(1.0+tanTheta2);float sinTheta=sqrt(max(0.0,1.0-cosTheta*cosTheta));return vec3(sinTheta*cosPhi,sinTheta*sinPhi,cosTheta);} 230vec3 hemisphereImportanceSampleDCharlie(vec2 u,float a) { 231float phi=2.*PI*u.x;float sinTheta=pow(u.y,a/(2.*a+1.));float cosTheta=sqrt(1.-sinTheta*sinTheta);return vec3(sinTheta*cos(phi),sinTheta*sin(phi),cosTheta);}`;i.l.IncludesShadersStore[a]||(i.l.IncludesShadersStore[a]=r);let n={name:a,shader:r}},34882:(e,t,o)=>{o.d(t,{s:()=>n});var i=o(52019);o(27973);let a="pbrDirectLightingSetupFunctions",r=`struct preLightingInfo 232{vec3 lightOffset;float lightDistanceSquared;float lightDistance;float attenuation;vec3 L;vec3 H;float NdotV;float NdotLUnclamped;float NdotL;float VdotH;float LdotV;float roughness;float diffuseRoughness;vec3 surfaceAlbedo; 233#ifdef IRIDESCENCE 234float iridescenceIntensity; 235#endif 236#if defined(AREALIGHTUSED) && defined(AREALIGHTSUPPORTED) 237vec3 areaLightDiffuse; 238#ifdef SPECULARTERM 239vec3 areaLightSpecular;vec4 areaLightFresnel; 240#endif 241#endif 242};preLightingInfo computePointAndSpotPreLightingInfo(vec4 lightData,vec3 V,vec3 N,vec3 posW) {preLightingInfo result;result.lightOffset=lightData.xyz-posW;result.lightDistanceSquared=dot(result.lightOffset,result.lightOffset);result.lightDistance=sqrt(result.lightDistanceSquared);result.L=normalize(result.lightOffset);result.H=normalize(V+result.L);result.VdotH=saturate(dot(V,result.H));result.NdotLUnclamped=dot(N,result.L);result.NdotL=saturateEps(result.NdotLUnclamped);result.LdotV=0.;result.roughness=0.;result.diffuseRoughness=0.;result.surfaceAlbedo=vec3(0.);return result;} 243preLightingInfo computeDirectionalPreLightingInfo(vec4 lightData,vec3 V,vec3 N) {preLightingInfo result;result.lightDistance=length(-lightData.xyz);result.L=normalize(-lightData.xyz);result.H=normalize(V+result.L);result.VdotH=saturate(dot(V,result.H));result.NdotLUnclamped=dot(N,result.L);result.NdotL=saturateEps(result.NdotLUnclamped);result.LdotV=dot(result.L,V);result.roughness=0.;result.diffuseRoughness=0.;result.surfaceAlbedo=vec3(0.);return result;} 244preLightingInfo computeHemisphericPreLightingInfo(vec4 lightData,vec3 V,vec3 N) {preLightingInfo result;result.NdotL=dot(N,lightData.xyz)*0.5+0.5;result.NdotL=saturateEps(result.NdotL);result.NdotLUnclamped=result.NdotL; 245#ifdef SPECULARTERM 246result.L=normalize(lightData.xyz);result.H=normalize(V+result.L);result.VdotH=saturate(dot(V,result.H)); 247#endif 248result.LdotV=0.;result.roughness=0.;result.diffuseRoughness=0.;result.surfaceAlbedo=vec3(0.);return result;} 249#if defined(AREALIGHTUSED) && defined(AREALIGHTSUPPORTED) 250#include<ltcHelperFunctions> 251uniform sampler2D areaLightsLTC1Sampler;uniform sampler2D areaLightsLTC2Sampler;preLightingInfo computeAreaPreLightingInfo(sampler2D ltc1,sampler2D ltc2,vec3 viewDirectionW,vec3 vNormal,vec3 vPosition,vec4 lightData,vec3 halfWidth,vec3 halfHeight,float roughness ) 252{preLightingInfo result;result.lightOffset=lightData.xyz-vPosition;result.lightDistanceSquared=dot(result.lightOffset,result.lightOffset);result.lightDistance=sqrt(result.lightDistanceSquared);areaLightData data=computeAreaLightSpecularDiffuseFresnel(ltc1,ltc2,viewDirectionW,vNormal,vPosition,lightData.xyz,halfWidth,halfHeight,roughness); 253#ifdef SPECULARTERM 254result.areaLightFresnel=data.Fresnel;result.areaLightSpecular=data.Specular; 255#endif 256result.areaLightDiffuse=data.Diffuse;result.LdotV=0.;result.roughness=0.;result.diffuseRoughness=0.;result.surfaceAlbedo=vec3(0.);return result;} 257preLightingInfo computeAreaPreLightingInfoWithTexture(sampler2D ltc1,sampler2D ltc2,sampler2D emissionTexture,vec3 viewDirectionW,vec3 vNormal,vec3 vPosition,vec4 lightData,vec3 halfWidth,vec3 halfHeight,float roughness ) 258{preLightingInfo result;result.lightOffset=lightData.xyz-vPosition;result.lightDistanceSquared=dot(result.lightOffset,result.lightOffset);result.lightDistance=sqrt(result.lightDistanceSquared);areaLightData data=computeAreaLightSpecularDiffuseFresnelWithEmission(ltc1,ltc2,emissionTexture,viewDirectionW,vNormal,vPosition,lightData.xyz,halfWidth,halfHeight,roughness); 259#ifdef SPECULARTERM 260result.areaLightFresnel=data.Fresnel;result.areaLightSpecular=data.Specular; 261#endif 262result.areaLightDiffuse=data.Diffuse;result.LdotV=0.;result.roughness=0.;result.diffuseRoughness=0.;result.surfaceAlbedo=vec3(0.);return result;} 263#endif 264`;i.l.IncludesShadersStore[a]||(i.l.IncludesShadersStore[a]=r);let n={name:a,shader:r}},35735:(e,t,o)=>{o.d(t,{D:()=>n});var i=o(52019);let a="pbrDirectLightingFalloffFunctions",r=`float computeDistanceLightFalloff_Standard(vec3 lightOffset,float range) 265{return max(0.,1.0-length(lightOffset)/range);} 266float computeDistanceLightFalloff_Physical(float lightDistanceSquared) 267{return 1.0/maxEps(lightDistanceSquared);} 268float computeDistanceLightFalloff_GLTF(float lightDistanceSquared,float inverseSquaredRange) 269{float lightDistanceFalloff=1.0/maxEps(lightDistanceSquared);float factor=lightDistanceSquared*inverseSquaredRange;
269float attenuation=saturate(1.0-factor*factor);attenuation*=attenuation;lightDistanceFalloff*=attenuation;return lightDistanceFalloff;} 270float computeDistanceLightFalloff(vec3 lightOffset,float lightDistanceSquared,float range,float inverseSquaredRange) 271{ 272#ifdef USEPHYSICALLIGHTFALLOFF 273return computeDistanceLightFalloff_Physical(lightDistanceSquared); 274#elif defined(USEGLTFLIGHTFALLOFF) 275return computeDistanceLightFalloff_GLTF(lightDistanceSquared,inverseSquaredRange); 276#else 277return computeDistanceLightFalloff_Standard(lightOffset,range); 278#endif 279} 280float computeDirectionalLightFalloff_Standard(vec3 lightDirection,vec3 directionToLightCenterW,float cosHalfAngle,float exponent) 281{float falloff=0.0;float cosAngle=maxEps(dot(-lightDirection,directionToLightCenterW));if (cosAngle>=cosHalfAngle) 282{falloff=max(0.,pow(cosAngle,exponent));} 283return falloff;} 284float computeDirectionalLightFalloff_IES(vec3 lightDirection,vec3 directionToLightCenterW,sampler2D iesLightSampler) 285{float cosAngle=dot(-lightDirection,directionToLightCenterW);float angle=acos(cosAngle)/PI;return texture2D(iesLightSampler,vec2(angle,0.)).r;} 286float computeDirectionalLightFalloff_Physical(vec3 lightDirection,vec3 directionToLightCenterW,float cosHalfAngle) 287{const float kMinusLog2ConeAngleIntensityRatio=6.64385618977; 288float concentrationKappa=kMinusLog2ConeAngleIntensityRatio/(1.0-cosHalfAngle);vec4 lightDirectionSpreadSG=vec4(-lightDirection*concentrationKappa,-concentrationKappa);float falloff=exp2(dot(vec4(directionToLightCenterW,1.0),lightDirectionSpreadSG));return falloff;} 289float computeDirectionalLightFalloff_GLTF(vec3 lightDirection,vec3 directionToLightCenterW,float lightAngleScale,float lightAngleOffset) 290{float cd=dot(-lightDirection,directionToLightCenterW);float falloff=saturate(cd*lightAngleScale+lightAngleOffset);falloff*=falloff;return falloff;} 291float computeDirectionalLightFalloff(vec3 lightDirection,vec3 directionToLightCenterW,float cosHalfAngle,float exponent,float lightAngleScale,float lightAngleOffset) 292{ 293#ifdef USEPHYSICALLIGHTFALLOFF 294return computeDirectionalLightFalloff_Physical(lightDirection,directionToLightCenterW,cosHalfAngle); 295#elif defined(USEGLTFLIGHTFALLOFF) 296return computeDirectionalLightFalloff_GLTF(lightDirection,directionToLightCenterW,lightAngleScale,lightAngleOffset); 297#else 298return computeDirectionalLightFalloff_Standard(lightDirection,directionToLightCenterW,cosHalfAngle,exponent); 299#endif 300}`;i.l.IncludesShadersStore[a]||(i.l.IncludesShadersStore[a]=r);let n={name:a,shader:r}},36358:(e,t,o)=>{o.d(t,{S:()=>n});var i=o(52019);let a="harmonicsFunctions",r=`#ifdef USESPHERICALFROMREFLECTIONMAP 301#ifdef SPHERICAL_HARMONICS 302vec3 computeEnvironmentIrradiance(vec3 normal) {return vSphericalL00 303+ vSphericalL1_1*(normal.y) 304+ vSphericalL10*(normal.z) 305+ vSphericalL11*(normal.x) 306+ vSphericalL2_2*(normal.y*normal.x) 307+ vSphericalL2_1*(normal.y*normal.z) 308+ vSphericalL20*((3.0*normal.z*normal.z)-1.0) 309+ vSphericalL21*(normal.z*normal.x) 310+ vSphericalL22*(normal.x*normal.x-(normal.y*normal.y));} 311#else 312vec3 computeEnvironmentIrradiance(vec3 normal) {float Nx=normal.x;float Ny=normal.y;float Nz=normal.z;vec3 C1=vSphericalZZ.rgb;vec3 Cx=vSphericalX.rgb;vec3 Cy=vSphericalY.rgb;vec3 Cz=vSphericalZ.rgb;vec3 Cxx_zz=vSphericalXX_ZZ.rgb;vec3 Cyy_zz=vSphericalYY_ZZ.rgb;vec3 Cxy=vSphericalXY.rgb;vec3 Cyz=vSphericalYZ.rgb;vec3 Czx=vSphericalZX.rgb;vec3 a1=Cyy_zz*Ny+Cy;vec3 a2=Cyz*Nz+a1;vec3 b1=Czx*Nz+Cx;vec3 b2=Cxy*Ny+b1;vec3 b3=Cxx_zz*Nx+b2;vec3 t1=Cz *Nz+C1;vec3 t2=a2 *Ny+t1;vec3 t3=b3 *Nx+t2;return t3;} 313#endif 314#endif 315`;i.l.IncludesShadersStore[a]||(i.l.IncludesShadersStore[a]=r);let n={name:a,shader:r}},50060:(e,t,o)=>{o.d(t,{E:()=>n});var i=o(52019);let a="hdrFilteringFunctions",r=`#if NUM_SAMPLES 316#if NUM_SAMPLES>0 317#if defined(WEBGL2) || defined(WEBGPU) || defined(NATIVE) 318float radicalInverse_VdC(uint bits) 319{bits=(bits<<16u) | (bits>>16u);bits=((bits & 0x55555555u)<<1u) | ((bits & 0xAAAAAAAAu)>>1u);bits=((bits & 0x33333333u)<<2u) | ((bits & 0xCCCCCCCCu)>>2u);bits=((bits & 0x0F0F0F0Fu)<<4u) | ((bits & 0xF0F0F0F0u)>>4u);bits=((bits & 0x00FF00FFu)<<8u) | ((bits & 0xFF00FF00u)>>8u);return float(bits)*2.3283064365386963e-10; } 320vec2 hammersley(uint i,uint N) 321{return vec2(float(i)/float(N),radicalInverse_VdC(i));} 322#else 323float vanDerCorpus(int n,int base)
324{float invBase=1.0/float(base);float denom =1.0;float result =0.0;for(int i=0; i<32; ++i) 325{if(n>0) 326{denom =mod(float(n),2.0);result+=denom*invBase;invBase=invBase/2.0;n =int(float(n)/2.0);}} 327return result;} 328vec2 hammersley(int i,int N) 329{return vec2(float(i)/float(N),vanDerCorpus(i,2));} 330#endif 331float log4(float x) {return log2(x)/2.;} 332vec3 uv_to_normal(vec2 uv) {vec3 N;vec2 uvRange=uv;float theta=uvRange.x*2.*PI;float phi=uvRange.y*PI;float sinPhi=sin(phi);N.x=cos(theta)*sinPhi;N.z=sin(theta)*sinPhi;N.y=cos(phi);return N;} 333const float NUM_SAMPLES_FLOAT=float(NUM_SAMPLES);const float NUM_SAMPLES_FLOAT_INVERSED=1./NUM_SAMPLES_FLOAT;const float K=4.; 334#define inline 335vec3 irradiance( 336#ifdef CUSTOM_IRRADIANCE_FILTERING_INPUT 337CUSTOM_IRRADIANCE_FILTERING_INPUT 338#else 339samplerCube inputTexture, 340#endif 341vec3 inputN,vec2 filteringInfo, 342float diffuseRoughness, 343vec3 surfaceAlbedo, 344vec3 inputV 345#if IBL_CDF_FILTERING 346,sampler2D icdfSampler 347#endif 348) 349{vec3 n=normalize(inputN);vec3 result=vec3(0.); 350#ifndef IBL_CDF_FILTERING 351vec3 tangent=abs(n.z)<0.999 ? vec3(0.,0.,1.) : vec3(1.,0.,0.);tangent=normalize(cross(tangent,n));vec3 bitangent=cross(n,tangent);mat3 tbn=mat3(tangent,bitangent,n);mat3 tbnInverse=mat3(tangent.x,bitangent.x,n.x,tangent.y,bitangent.y,n.y,tangent.z,bitangent.z,n.z); 352#endif 353float maxLevel=filteringInfo.y;float dim0=filteringInfo.x;float omegaP=(4.*PI)/(6.*dim0*dim0);vec3 clampedAlbedo=clamp(surfaceAlbedo,vec3(0.1),vec3(1.0)); 354#if defined(WEBGL2) || defined(WEBGPU) || defined(NATIVE) 355for(uint i=0u; i<NUM_SAMPLES; ++i) 356#else 357for(int i=0; i<NUM_SAMPLES; ++i) 358#endif 359{vec2 Xi=hammersley(i,NUM_SAMPLES); 360#if IBL_CDF_FILTERING 361vec2 T;T.x=texture2D(icdfSampler,vec2(Xi.x,0.)).x;T.y=texture2D(icdfSampler,vec2(T.x,Xi.y)).y;vec3 Ls=uv_to_normal(vec2(1.0-fract(T.x+0.25),T.y));float NoL=dot(n,Ls);float NoV=dot(n,inputV); 362#if BASE_DIFFUSE_MODEL==BRDF_DIFFUSE_MODEL_EON 363float LoV=dot (Ls,inputV); 364#elif BASE_DIFFUSE_MODEL==BRDF_DIFFUSE_MODEL_BURLEY 365vec3 H=(inputV+Ls)*0.5;float VoH=dot(inputV,H); 366#endif 367#else 368vec3 Ls=hemisphereCosSample(Xi);Ls=normalize(Ls);float NoL=Ls.z; 369vec3 V=tbnInverse*inputV;float NoV=V.z; 370#if BASE_DIFFUSE_MODEL==BRDF_DIFFUSE_MODEL_EON 371float LoV=dot (Ls,V); 372#elif BASE_DIFFUSE_MODEL==BRDF_DIFFUSE_MODEL_BURLEY 373vec3 H=(V+Ls)*0.5;float VoH=dot(V,H); 374#endif 375#endif 376if (NoL>0.) { 377#if IBL_CDF_FILTERING 378float pdf=texture2D(icdfSampler,T).z;vec3 c=textureCubeLodEXT(inputTexture,Ls,0.).rgb; 379#else 380float pdf_inversed=PI/NoL;float omegaS=NUM_SAMPLES_FLOAT_INVERSED*pdf_inversed;float l=log4(omegaS)-log4(omegaP)+log4(K);float mipLevel=clamp(l,0.,maxLevel); 381#ifdef CUSTOM_IRRADIANCE_FILTERING_FUNCTION 382CUSTOM_IRRADIANCE_FILTERING_FUNCTION 383#else 384vec3 c=textureCubeLodEXT(inputTexture,tbn*Ls,mipLevel).rgb; 385#endif 386#endif 387#if GAMMA_INPUT 388c=toLinearSpace(c); 389#endif 390vec3 diffuseRoughnessTerm=vec3(1.0); 391#if BASE_DIFFUSE_MODEL==BRDF_DIFFUSE_MODEL_EON 392diffuseRoughnessTerm=diffuseBRDF_EON(clampedAlbedo,diffuseRoughness,NoL,NoV,LoV)*PI; 393#elif BASE_DIFFUSE_MODEL==BRDF_DIFFUSE_MODEL_BURLEY 394diffuseRoughnessTerm=vec3(diffuseBRDF_Burley(NoL,NoV,VoH,diffuseRoughness)*PI); 395#endif 396#if IBL_CDF_FILTERING 397vec3 light=pdf<1e-6 ? vec3(0.0) : vec3(1.0)/vec3(pdf)*c;result+=NoL*diffuseRoughnessTerm*light; 398#else 399result+=c*diffuseRoughnessTerm; 400#endif 401}} 402result=result*NUM_SAMPLES_FLOAT_INVERSED; 403#if BASE_DIFFUSE_MODEL==BRDF_DIFFUSE_MODEL_EON 404result=result/clampedAlbedo; 405#endif 406return result;} 407#define inline 408vec3 radiance(float alphaG,samplerCube inputTexture,vec3 inputN,vec2 filteringInfo) 409{vec3 n=normalize(inputN);vec3 c=textureCubeLodEXT(inputTexture,n,0.).rgb; 410if (alphaG==0.) { 411#if GAMMA_INPUT 412c=toLinearSpace(c); 413#endif 414return c;} else {vec3 result=vec3(0.);vec3 tangent=abs(n.z)<0.999 ? vec3(0.,0.,1.) : vec3(1.,0.,0.);tangent=normalize(cross(tangent,n));vec3 bitangent=cross(n,tangent);mat3 tbn=mat3(tangent,bitangent,n);float maxLevel=filteringInfo.y;float dim0=filteringInfo.x;float omegaP=(4.*PI)/(6.*dim0*dim0);float weight=0.; 415#if defined(WEBGL2) || defined(WEBGPU) || defined(NATIVE) 416for(uint i=0u; i<NUM_SAMPLES; ++i) 417#else 418for(int i=0; i<NUM_SAMPLES; ++i) 419#endif 420{vec2 Xi=hammersley(i,NUM_SAMPLES);vec3 H=hemisphereImportanceSampleDggx(Xi,alphaG);float NoV=1.;float NoH=H.z;float NoH2=H.z*H.z;float NoL=2.*NoH2-1.;vec3 L=vec3(2.*NoH*H.x,2.*NoH*H.y,NoL);L=normalize(L);if (NoL>0.) {float pdf_inversed=4./normalDistributionFunction_TrowbridgeReitzGGX(NoH,alph
420aG);float omegaS=NUM_SAMPLES_FLOAT_INVERSED*pdf_inversed;float l=log4(omegaS)-log4(omegaP)+log4(K);float mipLevel=clamp(float(l),0.0,maxLevel);weight+=NoL;vec3 c=textureCubeLodEXT(inputTexture,tbn*L,mipLevel).rgb; 421#if GAMMA_INPUT 422c=toLinearSpace(c); 423#endif 424result+=c*NoL;}} 425result=result/weight;return result;}} 426#ifdef ANISOTROPIC 427#define inline 428vec3 radianceAnisotropic( 429float alphaTangent, 430float alphaBitangent, 431samplerCube inputTexture, 432vec3 inputView, 433vec3 inputTangent, 434vec3 inputBitangent, 435vec3 inputNormal, 436vec2 filteringInfo, 437vec2 noiseInput, 438bool isRefraction, 439float ior 440) 441{vec3 V=inputView;vec3 N=inputNormal;vec3 T=inputTangent;vec3 B=inputBitangent;vec3 result=vec3(0.);float maxLevel=filteringInfo.y;float dim0=filteringInfo.x;float clampedAlphaT=max(alphaTangent,MINIMUMVARIANCE);float clampedAlphaB=max(alphaBitangent,MINIMUMVARIANCE);float effectiveDim=dim0*sqrt(clampedAlphaT*clampedAlphaB);float omegaP=(4.*PI)/(6.*effectiveDim*effectiveDim);const float noiseScale=clamp(log2(float(NUM_SAMPLES))/12.0f,0.0f,1.0f);float weight=0.; 442#if defined(WEBGL2) || defined(WEBGPU) || defined(NATIVE) 443for(uint i=0u; i<NUM_SAMPLES; ++i) 444#else 445for(int i=0; i<NUM_SAMPLES; ++i) 446#endif 447{vec2 Xi=hammersley(i,NUM_SAMPLES);Xi=fract(Xi+noiseInput*mix(0.5f,0.015f,noiseScale)); 448vec3 H_tangent=hemisphereImportanceSampleDggxAnisotropic(Xi,clampedAlphaT,clampedAlphaB);vec3 H=normalize(H_tangent.x*T+H_tangent.y*B+H_tangent.z*N);vec3 L;if (isRefraction) {L=refract(-V,H,1.0/ior);} else {L=reflect(-V,H);} 449float NoH=max(dot(N,H),0.001);float VoH=max(dot(V,H),0.001);float NoL=max(dot(N,L),0.001);if (NoL>0.) {float pdf_inversed=4./normalDistributionFunction_BurleyGGX_Anisotropic( 450H_tangent.z,H_tangent.x,H_tangent.y,vec2(clampedAlphaT,clampedAlphaB) 451);float omegaS=NUM_SAMPLES_FLOAT_INVERSED*pdf_inversed;float l=log4(omegaS)-log4(omegaP)+log4(K);float mipLevel=clamp(float(l),0.0,maxLevel);weight+=NoL;vec3 c=textureCubeLodEXT(inputTexture,L,mipLevel).rgb; 452#if GAMMA_INPUT 453c=toLinearSpace(c); 454#endif 455result+=c*NoL;}} 456result=result/weight;return result;} 457#endif 458#endif 459#endif 460`;i.l.IncludesShadersStore[a]||(i.l.IncludesShadersStore[a]=r);let n={name:a,shader:r}},53948:(e,t,o)=>{o.d(t,{G:()=>n});var i=o(52019);let a="pbrBRDFFunctions",r=`#define FRESNEL_MAXIMUM_ON_ROUGH 0.25 461#define BRDF_DIFFUSE_MODEL_EON 0 462#define BRDF_DIFFUSE_MODEL_BURLEY 1 463#define BRDF_DIFFUSE_MODEL_LAMBERT 2 464#define BRDF_DIFFUSE_MODEL_LEGACY 3 465#define DIELECTRIC_SPECULAR_MODEL_GLTF 0 466#define DIELECTRIC_SPECULAR_MODEL_OPENPBR 1 467#define CONDUCTOR_SPECULAR_MODEL_GLTF 0 468#define CONDUCTOR_SPECULAR_MODEL_OPENPBR 1 469#if !defined(PBR_VERTEX_SHADER) && !defined(OPENPBR_VERTEX_SHADER) 470#ifdef MS_BRDF_ENERGY_CONSERVATION 471vec3 getEnergyConservationFactor(const vec3 specularEnvironmentR0,const vec3 environmentBrdf) {return 1.0+specularEnvironmentR0*(1.0/environmentBrdf.y-1.0);} 472#endif 473#if CONDUCTOR_SPECULAR_MODEL==CONDUCTOR_SPECULAR_MODEL_OPENPBR 474#define F82_COS_THETA_MAX 0.142857143 475#define F82_ONE_MINUS_CTM_POW5 0.462664366 476#define F82_ONE_MINUS_CTM_POW6 0.396569457 477#define F82_B_DENOMINATOR_RECIP 17.6512785 478#define BRDF_Z_SCALE 16.0 479vec3 getF82Specular(float NdotV,vec3 F0,vec3 edgeTint,float roughness) {vec3 white_minus_F0=vec3(1.0)-F0;vec3 b=(F0+white_minus_F0*F82_ONE_MINUS_CTM_POW5)*(vec3(1.0)-edgeTint)*F82_B_DENOMINATOR_RECIP;float cos_theta=max(roughness,NdotV);float one_minus_cos_theta=1.0-cos_theta;vec3 offset_from_F0=(white_minus_F0-b*cos_theta*one_minus_cos_theta)*pow(one_minus_cos_theta,5.0);return clamp(F0+offset_from_F0,0.0,1.0);} 480vec3 getF82B(vec3 F0,vec3 edgeTint) {return (F0+(vec3(1.0)-F0)*F82_ONE_MINUS_CTM_POW5)*(vec3(1.0)-edgeTint)*F82_B_DENOMINATOR_RECIP;} 481vec3 getF82DirectionalAlbedo(vec3 F0,vec3 F90,vec3 b,vec3 environmentBrdf) {return (F90-F0)*environmentBrdf.x+F0*environmentBrdf.y-b*environmentBrdf.z;} 482vec3 getF82AverageFresnel(vec3 F0,vec3 b) {return F0+(vec3(1.0)-F0)/21.0-b/126.0;} 483#endif 484#ifdef FUZZENVIRONMENTBRDF 485vec3 getFuzzBRDFLookup(float NdotV,float perceptualRoughness) {vec2 UV=vec2(perceptualRoughness,NdotV);vec4 brdfLookup=texture2D(environmentFuzzBrdfSampler,UV);const vec2 RiRange=vec2(0.0,0.75);const vec2 ARange =vec2(0.005,0.88);const vec2 BRange =vec2(-0.18,0.002);brdfLookup.r=mix(ARange.x, ARange.y, brdfLookup.r);brdfLookup.g=mix(BRange.x, BRange.y, brdfLookup.g);brdfLookup.b=mix(RiRange.x,RiRange.y,brdfLookup.b);return brdfLookup.rgb;} 486#endif 487#ifdef ENVIRONMENTBRDF 488vec3 getBRDFLookup(float NdotV,float perceptualRoughness) {vec2 UV=vec2(NdotV,perceptualRoughness);vec4 brdfLookup=texture2D(environmentBrdfSampler,UV); 489#ifdef ENVIRONMENTBRDF_RGBD 490brdfLookup.rgb=fromRGBD(brdfLookup.rgba); 491#endif 492return brdfLookup.rgb;} 493vec3 getReflectanceFromBRDFLookup(const vec3 specularEnvironmentR0,const vec3 specularEnvironmentR90,const vec3 environmentBrdf) { 494#ifdef BRDF_V_HEIGHT_CORRELATED
495vec3 reflectance=(specularEnvironmentR90-specularEnvironmentR0)*environmentBrdf.x+specularEnvironmentR0*environmentBrdf.y; 496#else 497vec3 reflectance=specularEnvironmentR0*environmentBrdf.x+specularEnvironmentR90*environmentBrdf.y; 498#endif 499return reflectance;} 500vec3 getReflectanceFromBRDFLookup(const vec3 specularEnvironmentR0,const vec3 environmentBrdf) { 501#ifdef BRDF_V_HEIGHT_CORRELATED 502vec3 reflectance=mix(environmentBrdf.xxx,environmentBrdf.yyy,specularEnvironmentR0); 503#else 504vec3 reflectance=specularEnvironmentR0*environmentBrdf.x+environmentBrdf.y; 505#endif 506return reflectance;} 507#endif 508/* NOT USED 509#if defined(SHEEN) && defined(SHEEN_SOFTER) 510float getBRDFLookupCharlieSheen(float NdotV,float perceptualRoughness) 511{float c=1.0-NdotV;float c3=c*c*c;return 0.65584461*c3+1.0/(4.16526551+exp(-7.97291361*perceptualRoughness+6.33516894));} 512#endif 513*/ 514#if !defined(ENVIRONMENTBRDF) || defined(REFLECTIONMAP_SKYBOX) || defined(ALPHAFRESNEL) 515vec3 getReflectanceFromAnalyticalBRDFLookup_Jones(float VdotN,vec3 reflectance0,vec3 reflectance90,float smoothness) 516{float weight=mix(FRESNEL_MAXIMUM_ON_ROUGH,1.0,smoothness);return reflectance0+weight*(reflectance90-reflectance0)*pow5(saturate(1.0-VdotN));} 517#endif 518#if defined(SHEEN) && defined(ENVIRONMENTBRDF) 519/** 520* The sheen BRDF not containing F can be easily stored in the blue channel of the BRDF texture. 521* The blue channel contains DCharlie*VAshikhmin*NdotL as a lokkup table 522*/ 523vec3 getSheenReflectanceFromBRDFLookup(const vec3 reflectance0,const vec3 environmentBrdf) {vec3 sheenEnvironmentReflectance=reflectance0*environmentBrdf.b;return sheenEnvironmentReflectance;} 524#endif 525vec3 fresnelSchlickGGX(float VdotH,vec3 reflectance0,vec3 reflectance90) 526{return reflectance0+(reflectance90-reflectance0)*pow5(1.0-VdotH);} 527float fresnelSchlickGGX(float VdotH,float reflectance0,float reflectance90) 528{return reflectance0+(reflectance90-reflectance0)*pow5(1.0-VdotH);} 529#ifdef CLEARCOAT 530vec3 getR0RemappedForClearCoat(vec3 f0) { 531#ifdef CLEARCOAT_DEFAULTIOR 532#ifdef MOBILE 533return saturate(f0*(f0*0.526868+0.529324)-0.0482256); 534#else 535return saturate(f0*(f0*(0.941892-0.263008*f0)+0.346479)-0.0285998); 536#endif 537#else 538vec3 s=sqrt(f0);vec3 t=(vClearCoatRefractionParams.z+vClearCoatRefractionParams.w*s)/(vClearCoatRefractionParams.w+vClearCoatRefractionParams.z*s);return square(t); 539#endif 540} 541#endif 542#ifdef IRIDESCENCE 543const mat3 XYZ_TO_REC709=mat3( 5443.2404542,-0.9692660, 0.0556434, 545-1.5371385, 1.8760108,-0.2040259, 546-0.4985314, 0.0415560, 1.0572252 547);vec3 getIORTfromAirToSurfaceR0(vec3 f0) {vec3 sqrtF0=sqrt(f0);return (1.+sqrtF0)/(1.-sqrtF0);} 548vec3 getR0fromIORs(vec3 iorT,float iorI) {return square((iorT-vec3(iorI))/(iorT+vec3(iorI)));} 549float getR0fromIORs(float iorT,float iorI) {return square((iorT-iorI)/(iorT+iorI));} 550vec3 evalSensitivity(float opd,vec3 shift) {float phase=2.0*PI*opd*1.0e-9;const vec3 val=vec3(5.4856e-13,4.4201e-13,5.2481e-13);const vec3 pos=vec3(1.6810e+06,1.7953e+06,2.2084e+06);const vec3 var=vec3(4.3278e+09,9.3046e+09,6.6121e+09);vec3 xyz=val*sqrt(2.0*PI*var)*cos(pos*phase+shift)*exp(-square(phase)*var);xyz.x+=9.7470e-14*sqrt(2.0*PI*4.5282e+09)*cos(2.2399e+06*phase+shift[0])*exp(-4.5282e+09*square(phase));xyz/=1.0685e-7;vec3 srgb=XYZ_TO_REC709*xyz;return srgb;} 551vec3 evalIridescence(float outsideIOR,float eta2,float cosTheta1,float thinFilmThickness,vec3 baseF0) {vec3 I=vec3(1.0);float iridescenceIOR=mix(outsideIOR,eta2,smoothstep(0.0,0.03,thinFilmThickness));float sinTheta2Sq=square(outsideIOR/iridescenceIOR)*(1.0-square(cosTheta1));float cosTheta2Sq=1.0-sinTheta2Sq;if (cosTheta2Sq<0.0) {return I;} 552float cosTheta2=sqrt(cosTheta2Sq);float R0=getR0fromIORs(iridescenceIOR,outsideIOR);float R12=fresnelSchlickGGX(cosTheta1,R0,1.);float R21=R12;float T121=1.0-R12;float phi12=0.0;if (iridescenceIOR<outsideIOR) phi12=PI;float phi21=PI-phi12;vec3 baseIOR=getIORTfromAirToSurfaceR0(clamp(baseF0,0.0,0.9999)); 553vec3 R1=getR0fromIORs(baseIOR,iridescenceIOR);float maxR1=max(R1.r,max(R1.g,R1.b));if (maxR1<1e-6) {return max(vec3(R12),vec3(0.0));} 554vec3 R23=fresnelSchlickGGX(cosTheta2,R1,vec3(1.));vec3 phi23=vec3(0.0);if (baseIOR[0]<iridescenceIOR) phi23[0]=PI;if (baseIOR[1]<iridescenceIOR) phi23[1]=PI;if (baseIOR[2]<iridescenceIOR) phi23[2]=PI;float opd=2.0*iridescenceIOR*thinFilmThickness*cosTheta2;vec3 phi=vec3(phi21)+phi23;vec3 R123=clamp(R12*R23,1e-5,0.9999);vec3 r123=sqrt(R123);vec3 Rs=square(T121)*R23/(vec3(1.0)-R123);vec3 C0=R12+Rs;I=C0;vec3 Cm=Rs-T121;for (int m=1; m<=2; ++m) 555{Cm*=r123;vec3 Sm=2.0*evalSensitivity(float(m)*opd,float(m)*phi);I+=Cm*Sm;} 556return max(I,vec3(0.0));} 557#endif 558float normalDistributionFunction_TrowbridgeReitzGGX(float NdotH,float alphaG) 559{float a2=square(alphaG);float d=NdotH*NdotH*(a2-1.0)+1.0;return a2/(PI*d*d);} 560#ifdef SHEEN 561float normalDistributionFunction_CharlieSheen(float NdotH,float alphaG) 562{float invR=1./alphaG;float cos2h=NdotH*NdotH;float sin2h=1.-cos2h;return (2.+invR)*pow(sin2h,invR*.5)/(2.*PI);} 563#endif 564#ifdef ANISOTROPIC 565float normalDistributionFunction_BurleyGGX_Anisotropic(float NdotH,float TdotH,float BdotH,const vec2 alphaTB) {float a2=alphaTB.x*alphaTB.y;vec3 v=vec3(alphaTB.y*TdotH,alphaTB.x *BdotH,a2*NdotH);float v2=dot(v,v);float w2=a2/v2;return a2*w2*w2*RECIPROCAL_PI;} 566#endif 567#ifdef BRDF_V_HEIGHT_CORRELATED 568float smithVisibility_GGXCorrelated(float NdotL,float NdotV,float alphaG) { 569#ifdef MOBILE 570float GGXV=NdotL*(NdotV*(1.0-alphaG)+alphaG);float GGXL=NdotV*(NdotL*(1.0-alphaG)+alphaG);return 0.5/(GGXV+GGXL); 571#else 572float a2=alphaG*alphaG;float GGXV=NdotL*sqrt(NdotV*(NdotV-a2*NdotV)+a2);float GGXL=NdotV*sqrt(NdotL*(NdotL-a2*NdotL)+a2);return 0.5/(GGXV+GGXL); 573#endif 574} 575#else 576float smithVisibilityG1_TrowbridgeReitzGGXFast(float dot,float alphaG) 577{ 578#ifdef MOBILE 579return 1.0/(dot+alphaG+(1.0-alphaG)*dot )); 580#else 581float alphaSquared=alphaG*alphaG;return 1.0/(dot+sqrt(alphaSquared+(1.0-alphaSquared)*dot*dot)); 582#endif 583} 584float smithVisibility_TrowbridgeReitzGGXFast(float NdotL,float NdotV,float alphaG) 585{float visibility=smithVisibilityG1_TrowbridgeReitzGGXFast(NdotL,alphaG)*smithVisibilityG1_TrowbridgeReitzGGXFast(NdotV,alphaG);return visibility;} 586#endif 587#ifdef ANISOTROPIC 588float smithVisibility_GGXCorrelated_Anisotropic(float NdotL,float NdotV,float TdotV,float BdotV,float TdotL,float BdotL,const vec2 alphaTB) {float lambdaV=NdotL*length(vec3(alphaTB.x*TdotV,alphaTB.y*BdotV,NdotV));float lambdaL=NdotV*length(vec3(alphaTB.x*TdotL,alphaTB.y*BdotL,NdotL));float v=0.5/(lambdaV+lambdaL);return v;} 589#endif 590#ifdef CLEARCOAT 591float visibility_Kelemen(float VdotH) {return 0.25/(VdotH*VdotH); } 592#endif 593#ifdef SHEEN 594float visibility_Ashikhmin(float NdotL,float NdotV) 595{return 1./(4.*(NdotL+NdotV-NdotL*NdotV));} 596/* NOT USED 597#ifdef SHEEN_SOFTER 598float l(float x,float alphaG) 599{float oneMinusAlphaSq=(1.0-alphaG)*(1.0-alphaG);float a=mix(21.5473,25.3245,oneMinusAlphaSq);float b=mix(3.82987,3.32435,oneMinusAlphaSq);float c=mix(0.19823,0.16801,oneMinusAlphaSq);float d=mix(-1.97760,-1.27393,oneMinusAlphaSq);float e=mix(-4.32054,-4.85967,oneMinusAlphaSq);return a/(1.0+b*pow(x,c))+d*x+e;} 600float lambdaSheen(float cosTheta,float alphaG) 601{return abs(cosTheta)<0.5 ? exp(l(cosTheta,alphaG)) : exp(2.0*l(0.5,alphaG)-l(1.0-cosTheta,alphaG));} 602float visibility_CharlieSheen(float NdotL,float NdotV,float alphaG) 603{float G=1.0/(1.0+lambdaSheen(NdotV,alphaG)+lambdaSheen(NdotL,alphaG));return G/(4.0*NdotV*NdotL);} 604#endif 605*/ 606#endif 607float diffuseBRDF_Burley(float NdotL,float NdotV,float VdotH,float roughness) {float diffuseFresnelNV=pow5(saturateEps(1.0-NdotL));float diffuseFresnelNL=pow5(saturateEps(1.0-NdotV));float diffuseFresnel90=0.5+2.0*VdotH*VdotH*roughness;float fresnel = 608(1.0+(diffuseFresnel90-1.0)*diffuseFresnelNL) * 609(1.0+(diffuseFresnel90-1.0)*diffuseFresnelNV);return fresnel/PI;} 610const float constant1_FON=0.5-2.0/(3.0*PI);const float constant2_FON=2.0/3.0-28.0/(15.0*PI);float E_FON_approx(float mu,float roughness) 611{float sigma=roughness; 612float mucomp=1.0-mu;float mucomp2=mucomp*mucomp;const mat2 Gcoeffs=mat2(0.0571085289,-0.332181442, 6130.491881867,0.0714429953);
613float GoverPi=dot(Gcoeffs*vec2(mucomp,mucomp2),vec2(1.0,mucomp2));return (1.0+sigma*GoverPi)/(1.0+constant1_FON*sigma);} 614vec3 diffuseBRDF_EON(vec3 albedo,float roughness,float NdotL,float NdotV,float LdotV) 615{vec3 rho=albedo;float sigma=roughness; 616float mu_i=NdotL; 617float mu_o=NdotV; 618float s=LdotV-mu_i*mu_o; 619float sovertF=s>0.0 ? s/max(mu_i,mu_o) : s; 620float AF=1.0/(1.0+constant1_FON*sigma); 621vec3 f_ss=(rho*RECIPROCAL_PI)*AF*(1.0+sigma*sovertF); 622float EFo=E_FON_approx(mu_o,sigma); 623float EFi=E_FON_approx(mu_i,sigma); 624float avgEF=AF*(1.0+constant2_FON*sigma); 625vec3 rho_ms=(rho*rho)*avgEF/(vec3(1.0)-rho*(1.0-avgEF));const float eps=1.0e-7;vec3 f_ms=(rho_ms*RECIPROCAL_PI)*max(eps,1.0-EFo) 626* max(eps,1.0-EFi) 627/ max(eps,1.0-avgEF);return (f_ss+f_ms);} 628#ifdef SS_TRANSLUCENCY 629vec3 transmittanceBRDF_Burley(const vec3 tintColor,const vec3 diffusionDistance,float thickness) {vec3 S=1./maxEps(diffusionDistance);vec3 temp=exp((-0.333333333*thickness)*S);return tintColor.rgb*0.25*(temp*temp*temp+3.0*temp);} 630float computeWrappedDiffuseNdotL(float NdotL,float w) {float t=1.0+w;float invt2=1.0/square(t);return saturate((NdotL+w)*invt2);} 631#endif 632#endif 633`;i.l.IncludesShadersStore[a]||(i.l.IncludesShadersStore[a]=r);let n={name:a,shader:r}},65964:(e,t,o)=>{o.d(t,{U:()=>n});var i=o(52019);let a="pbrBlockImageProcessing",r=`#if defined(IMAGEPROCESSINGPOSTPROCESS) || defined(SS_SCATTERING) 634#if !defined(SKIPFINALCOLORCLAMP) 635finalColor.rgb=clamp(finalColor.rgb,0.,30.0); 636#endif 637#else 638finalColor=applyImageProcessing(finalColor); 639#endif 640finalColor.a*=visibility; 641#ifdef PREMULTIPLYALPHA 642finalColor.rgb*=finalColor.a; 643#endif 644`;i.l.IncludesShadersStore[a]||(i.l.IncludesShadersStore[a]=r);let n={name:a,shader:r}},72162:(e,t,o)=>{o.d(t,{A:()=>n});var i=o(52019);let a="pbrBlockNormalGeometric",r=`vec3 viewDirectionW=normalize(vEyePosition.xyz-vPositionW); 645#ifdef NORMAL 646vec3 normalW=normalize(vNormalW); 647#else 648vec3 normalW=normalize(cross(dFdx(vPositionW),dFdy(vPositionW)))*vEyePosition.w; 649#endif 650vec3 geometricNormalW=normalW; 651#if defined(TWOSIDEDLIGHTING) && defined(NORMAL) 652geometricNormalW=gl_FrontFacing ? geometricNormalW : -geometricNormalW; 653#endif 654`;i.l.IncludesShadersStore[a]||(i.l.IncludesShadersStore[a]=r);let n={name:a,shader:r}},77571:(e,t,o)=>{o.d(t,{N:()=>n});var i=o(52019);o(39445);let a="pbrFragmentExtraDeclaration",r=`varying vec3 vPositionW; 655#if DEBUGMODE>0 656varying vec4 vClipSpacePosition; 657#endif 658#include<mainUVVaryingDeclaration>[1..7] 659#ifdef NORMAL 660varying vec3 vNormalW; 661#if defined(USESPHERICALFROMREFLECTIONMAP) && defined(USESPHERICALINVERTEX) 662varying vec3 vEnvironmentIrradiance; 663#endif 664#endif 665#if defined(VERTEXCOLOR) || defined(INSTANCESCOLOR) && defined(INSTANCES) 666varying vec4 vColor; 667#endif 668#if defined(CLUSTLIGHT_BATCH) && CLUSTLIGHT_BATCH>0 669varying float vViewDepth; 670#endif 671`;i.l.IncludesShadersStore[a]||(i.l.IncludesShadersStore[a]=r);let n={name:a,shader:r}},82483:(e,t,o)=>{o.d(t,{r:()=>n});var i=o(52019);let a="pbrIBLFunctions",r=`#if defined(REFLECTION) || defined(SS_REFRACTION) 672float getLodFromAlphaG(float cubeMapDimensionPixels,float microsurfaceAverageSlope) {float microsurfaceAverageSlopeTexels=cubeMapDimensionPixels*microsurfaceAverageSlope;float lod=log2(microsurfaceAverageSlopeTexels);return lod;} 673float getLinearLodFromRoughness(float cubeMapDimensionPixels,float roughness) {float lod=log2(cubeMapDimensionPixels)*roughness;return lod;} 674#endif 675#if defined(ENVIRONMENTBRDF) && defined(RADIANCEOCCLUSION) 676float environmentRadianceOcclusion(float ambientOcclusion,float NdotVUnclamped) {float temp=NdotVUnclamped+ambientOcclusion;return saturate(square(temp)-1.0+ambientOcclusion);} 677#endif 678#if defined(ENVIRONMENTBRDF) && defined(HORIZONOCCLUSION) 679float environmentHorizonOcclusion(vec3 view,vec3 normal,vec3 geometricNormal) {vec3 reflection=reflect(view,normal);float temp=saturate(1.0+1.1*dot(reflection,geometricNormal));return square(temp);} 680#endif 681#if defined(LODINREFLECTIONALPHA) || defined(SS_LODINREFRACTIONALPHA) 682#define UNPACK_LOD(x) (1.0-x)*255.0 683float getLodFromAlphaG(float cubeMapDimensionPixels,float alphaG,float NdotV) {float microsurfaceAverageSlope=alphaG;microsurfaceAverageSlope*=sqrt(abs(NdotV));return getLodFromAlphaG(cubeMapDimensionPixels,microsurfaceAverageSlope);} 684#endif 685`;i.l.IncludesShadersStore[a]||(i.l.IncludesShadersStore[a]=r);let n={name:a,shader:r}},83480:(e,t,o)=>{o.d(t,{a:()=>n});var i=o(52019);let a="pbrFragmentReflectionDeclaration",r=`#ifdef REFLECTION 686#ifdef REFLECTIONMAP_3D 687#define sampleReflection(s,c) textureCube(s,c) 688uniform samplerCube reflectionSampler; 689#ifdef LODBASEDMICROSFURACE 690#define sampleReflectionLod(s,c,l) textureCubeLodEXT(s,c,l) 691#else 692uniform samplerCube reflectionSamplerLow;uniform samplerCube reflectionSamplerHigh; 693#endif 694#ifdef USEIRRADIANCEMAP 695uniform samplerCube irradianceSampler; 696#endif 697#else 698#define sampleReflection(s,c) texture2D(s,c) 699uniform sampler2D reflectionSampler; 700#ifdef LODBASEDMICROSFURACE 701#define sampleReflectionLod(s,c,l) texture2DLodEXT(s,c,l) 702#else 703uniform sampler2D reflectionSamplerLow;uniform sampler2D reflectionSamplerHigh; 704#endif 705#ifdef USEIRRADIANCEMAP 706uniform sampler2D irradianceSampler; 707#endif 708#endif 709#ifdef REFLECTIONMAP_SKYBOX 710varying vec3 vPositionUVW; 711#else 712#if defined(REFLECTIONMAP_EQUIRECTANGULAR_FIXED) || defined(REFLECTIONMAP_MIRROREDEQUIRECTANGULAR_FIXED) 713varying vec3 vDirectionW; 714#endif 715#endif 716#endif 717`;i.l.IncludesShadersStore[a]||(i.l.IncludesShadersStore[a]=r);let n={name:a,shader:r}},92149:(e,t,o)=>{o.d(t,{R:()=>n});var i=o(52019);let a="subSurfaceScatteringFunctions",r=`bool testLightingForSSS(float diffusionProfile) 718{return diffusionProfile<1.;}`;i.l.IncludesShadersStore[a]||(i.l.IncludesShadersStore[a]=r);let n={name:a,shader:r}},96741:(e,t,o)=>{o.d(t,{v:()=>n});var i=o(52019);let a="pbrDirectLightingFunctions",r=`#define CLEARCOATREFLECTANCE90 1.0 719struct lightingInfo 720{vec3 diffuse; 721#ifdef SS_TRANSLUCENCY 722vec3 diffuseTransmission; 723#endif 724#ifdef SPECULARTERM 725vec3 specular; 726#endif 727#ifdef CLEARCOAT 728vec4 clearCoat; 729#endif 730#ifdef SHEEN 731vec3 sheen; 732#endif 733};
733float adjustRoughnessFromLightProperties(float roughness,float lightRadius,float lightDistance) { 734#if defined(USEPHYSICALLIGHTFALLOFF) || defined(USEGLTFLIGHTFALLOFF) 735float lightRoughness=lightRadius/lightDistance;float totalRoughness=saturate(lightRoughness+roughness);return totalRoughness; 736#else 737return roughness; 738#endif 739} 740vec3 computeHemisphericDiffuseLighting(preLightingInfo info,vec3 lightColor,vec3 groundColor) {return mix(groundColor,lightColor,info.NdotL);} 741#if defined(AREALIGHTUSED) && defined(AREALIGHTSUPPORTED) 742vec3 computeAreaDiffuseLighting(preLightingInfo info,vec3 lightColor) {return info.areaLightDiffuse*lightColor;} 743#endif 744vec3 computeDiffuseLighting(preLightingInfo info,vec3 lightColor) {vec3 diffuseTerm=vec3(1.0/PI); 745#if BASE_DIFFUSE_MODEL==BRDF_DIFFUSE_MODEL_LEGACY 746diffuseTerm=vec3(diffuseBRDF_Burley(info.NdotL,info.NdotV,info.VdotH,info.roughness)); 747#elif BASE_DIFFUSE_MODEL==BRDF_DIFFUSE_MODEL_BURLEY 748diffuseTerm=vec3(diffuseBRDF_Burley(info.NdotL,info.NdotV,info.VdotH,info.diffuseRoughness)); 749#elif BASE_DIFFUSE_MODEL==BRDF_DIFFUSE_MODEL_EON 750vec3 clampedAlbedo=clamp(info.surfaceAlbedo,vec3(0.1),vec3(1.0));diffuseTerm=diffuseBRDF_EON(clampedAlbedo,info.diffuseRoughness,info.NdotL,info.NdotV,info.LdotV);diffuseTerm/=clampedAlbedo; 751#endif 752return diffuseTerm*info.attenuation*info.NdotL*lightColor;} 753#define inline 754vec3 computeProjectionTextureDiffuseLighting(sampler2D projectionLightSampler,mat4 textureProjectionMatrix,vec3 posW){vec4 strq=textureProjectionMatrix*vec4(posW,1.0);strq/=strq.w;vec3 textureColor=texture2D(projectionLightSampler,strq.xy).rgb;return toLinearSpace(textureColor);} 755#ifdef SS_TRANSLUCENCY 756vec3 computeDiffuseTransmittedLighting(preLightingInfo info,vec3 lightColor,vec3 transmittance) {vec3 transmittanceNdotL=vec3(0.);float NdotL=absEps(info.NdotLUnclamped); 757#ifndef SS_TRANSLUCENCY_LEGACY 758if (info.NdotLUnclamped<0.0) { 759#endif 760float wrapNdotL=computeWrappedDiffuseNdotL(NdotL,0.02);float trAdapt=step(0.,info.NdotLUnclamped);transmittanceNdotL=mix(transmittance*wrapNdotL,vec3(wrapNdotL),trAdapt); 761#ifndef SS_TRANSLUCENCY_LEGACY 762} 763vec3 diffuseTerm=vec3(1.0/PI); 764#if BASE_DIFFUSE_MODEL==BRDF_DIFFUSE_MODEL_LEGACY 765diffuseTerm=vec3(diffuseBRDF_Burley(info.NdotL,info.NdotV,info.VdotH,info.roughness)); 766#elif BASE_DIFFUSE_MODEL==BRDF_DIFFUSE_MODEL_BURLEY 767diffuseTerm=vec3(diffuseBRDF_Burley(info.NdotL,info.NdotV,info.VdotH,info.diffuseRoughness)); 768#elif BASE_DIFFUSE_MODEL==BRDF_DIFFUSE_MODEL_EON 769vec3 clampedAlbedo=clamp(info.surfaceAlbedo,vec3(0.1),vec3(1.0));diffuseTerm=diffuseBRDF_EON(clampedAlbedo,info.diffuseRoughness,info.NdotL,info.NdotV,info.LdotV);diffuseTerm/=clampedAlbedo; 770#endif 771#else 772float diffuseTerm=diffuseBRDF_Burley(NdotL,info.NdotV,info.VdotH,info.roughness); 773#endif 774return diffuseTerm*transmittanceNdotL*info.attenuation*lightColor;} 775#endif 776#ifdef SPECULARTERM 777vec3 computeSpecularLighting(preLightingInfo info,vec3 N,vec3 reflectance0,vec3 fresnel,float geometricRoughnessFactor,vec3 lightColor) {float NdotH=saturateEps(dot(N,info.H));float roughness=max(info.roughness,geometricRoughnessFactor);float alphaG=convertRoughnessToAverageSlope(roughness); 778#ifdef IRIDESCENCE 779fresnel=mix(fresnel,reflectance0,info.iridescenceIntensity); 780#endif 781float distribution=normalDistributionFunction_TrowbridgeReitzGGX(NdotH,alphaG); 782#ifdef BRDF_V_HEIGHT_CORRELATED 783float smithVisibility=smithVisibility_GGXCorrelated(info.NdotL,info.NdotV,alphaG); 784#else 785float smithVisibility=smithVisibility_TrowbridgeReitzGGXFast(info.NdotL,info.NdotV,alphaG); 786#endif 787vec3 specTerm=fresnel*distribution*smithVisibility;return specTerm*info.attenuation*info.NdotL*lightColor;} 788#if defined(AREALIGHTUSED) && defined(AREALIGHTSUPPORTED) 789vec3 computeAreaSpecularLighting(preLightingInfo info,vec3 specularColor,vec3 reflectance0,vec3 reflectance90) {vec3 fresnel=specularColor*info.areaLightFresnel.x*reflectance0+( vec3( 1.0 )-specularColor )*info.areaLightFresnel.y*reflectance90;return specularColor*fresnel*info.areaLightSpecular;} 790#endif 791#endif 792#ifdef FUZZ 793float evalFuzz(vec3 L,float NdotL,float NdotV,vec3 T,vec3 B,vec3 ltcLut) 794{if (NdotL<=0.0 || NdotV<=0.0) 795return 0.0;mat3 M=mat3(
796vec3(ltcLut.r,0.0,0.0), 797vec3(ltcLut.g,1.0,0.0), 798vec3(0.0,0.0,1.0) 799);vec3 Llocal=vec3(dot(L,T),dot(L,B),NdotL);vec3 Lwarp=normalize(M*Llocal);float cosThetaWarp=max(Lwarp.z,0.0);return cosThetaWarp*NdotL;} 800#endif 801#if defined(ANISOTROPIC) && defined(ANISOTROPIC_OPENPBR) 802vec3 computeAnisotropicSpecularLighting(preLightingInfo info,vec3 V,vec3 N,vec3 T,vec3 B,float anisotropy,float geometricRoughnessFactor,vec3 lightColor) {float NdotH=saturateEps(dot(N,info.H));float TdotH=dot(T,info.H);float BdotH=dot(B,info.H);float TdotV=dot(T,V);float BdotV=dot(B,V);float TdotL=dot(T,info.L);float BdotL=dot(B,info.L);float alphaG=convertRoughnessToAverageSlope(info.roughness);vec2 alphaTB=getAnisotropicRoughness(alphaG,anisotropy);float distribution=normalDistributionFunction_BurleyGGX_Anisotropic(NdotH,TdotH,BdotH,alphaTB);float smithVisibility=smithVisibility_GGXCorrelated_Anisotropic(info.NdotL,info.NdotV,TdotV,BdotV,TdotL,BdotL,alphaTB);vec3 specTerm=vec3(distribution*smithVisibility);return specTerm*info.attenuation*info.NdotL*lightColor;} 803#elif defined(ANISOTROPIC) 804vec3 computeAnisotropicSpecularLighting(preLightingInfo info,vec3 V,vec3 N,vec3 T,vec3 B,float anisotropy,vec3 reflectance0,vec3 reflectance90,float geometricRoughnessFactor,vec3 lightColor) {float NdotH=saturateEps(dot(N,info.H));float TdotH=dot(T,info.H);float BdotH=dot(B,info.H);float TdotV=dot(T,V);float BdotV=dot(B,V);float TdotL=dot(T,info.L);float BdotL=dot(B,info.L);float alphaG=convertRoughnessToAverageSlope(info.roughness);vec2 alphaTB=getAnisotropicRoughness(alphaG,anisotropy);alphaTB=max(alphaTB,square(geometricRoughnessFactor));vec3 fresnel=fresnelSchlickGGX(info.VdotH,reflectance0,reflectance90); 805#ifdef IRIDESCENCE 806fresnel=mix(fresnel,reflectance0,info.iridescenceIntensity); 807#endif 808float distribution=normalDistributionFunction_BurleyGGX_Anisotropic(NdotH,TdotH,BdotH,alphaTB);float smithVisibility=smithVisibility_GGXCorrelated_Anisotropic(info.NdotL,info.NdotV,TdotV,BdotV,TdotL,BdotL,alphaTB);vec3 specTerm=fresnel*distribution*smithVisibility;return specTerm*info.attenuation*info.NdotL*lightColor;} 809#endif 810#ifdef CLEARCOAT 811vec4 computeClearCoatLighting(preLightingInfo info,vec3 Ncc,float geometricRoughnessFactor,float clearCoatIntensity,vec3 lightColor) {float NccdotL=saturateEps(dot(Ncc,info.L));float NccdotH=saturateEps(dot(Ncc,info.H));float clearCoatRoughness=max(info.roughness,geometricRoughnessFactor);float alphaG=convertRoughnessToAverageSlope(clearCoatRoughness);float fresnel=fresnelSchlickGGX(info.VdotH,vClearCoatRefractionParams.x,CLEARCOATREFLECTANCE90);fresnel*=clearCoatIntensity;float distribution=normalDistributionFunction_TrowbridgeReitzGGX(NccdotH,alphaG);float kelemenVisibility=visibility_Kelemen(info.VdotH);float clearCoatTerm=fresnel*distribution*kelemenVisibility;return vec4( 812clearCoatTerm*info.attenuation*NccdotL*lightColor, 8131.0-fresnel 814);} 815vec3 computeClearCoatLightingAbsorption(float NdotVRefract,vec3 L,vec3 Ncc,vec3 clearCoatColor,float clearCoatThickness,float clearCoatIntensity) {vec3 LRefract=-refract(L,Ncc,vClearCoatRefractionParams.y);float NdotLRefract=saturateEps(dot(Ncc,LRefract));vec3 absorption=computeClearCoatAbsorption(NdotVRefract,NdotLRefract,clearCoatColor,clearCoatThickness,clearCoatIntensity);return absorption;} 816#endif 817#ifdef SHEEN 818vec3 computeSheenLighting(preLightingInfo info,vec3 N,vec3 reflectance0,vec3 reflectance90,float geometricRoughnessFactor,vec3 lightColor) {float NdotH=saturateEps(dot(N,info.H));float roughness=max(info.roughness,geometricRoughnessFactor);float alphaG=convertRoughnessToAverageSlope(roughness);float fresnel=1.;float distribution=normalDistributionFunction_CharlieSheen(NdotH,alphaG);/*#ifdef SHEEN_SOFTER 819float visibility=visibility_CharlieSheen(info.NdotL,info.NdotV,alphaG); 820#else */ 821float visibility=visibility_Ashikhmin(info.NdotL,info.NdotV);/* #endif */ 822float sheenTerm=fresnel*distribution*visibility;return sheenTerm*info.attenuation*info.NdotL*lightColor;} 823#endif 824`;i.l.IncludesShadersStore[a]||(i.l.IncludesShadersStore[a]=r);let n={name:a,shader:r}}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.