@vived/component-abb-6700 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.todo.md +13 -0
- package/README.md +122 -0
- package/dist/.gitkeep +0 -0
- package/dist/Adapters/aBB6700PMAdapter.d.ts +10 -0
- package/dist/Adapters/aBB6700PMAdapter.d.ts.map +1 -0
- package/dist/Controllers/createABB6700.d.ts +12 -0
- package/dist/Controllers/createABB6700.d.ts.map +1 -0
- package/dist/Controllers/getPose.d.ts +11 -0
- package/dist/Controllers/getPose.d.ts.map +1 -0
- package/dist/Controllers/setJointAngle.d.ts +12 -0
- package/dist/Controllers/setJointAngle.d.ts.map +1 -0
- package/dist/Controllers/setPose.d.ts +11 -0
- package/dist/Controllers/setPose.d.ts.map +1 -0
- package/dist/Entities/ABB6700Entity.d.ts +35 -0
- package/dist/Entities/ABB6700Entity.d.ts.map +1 -0
- package/dist/Entities/ABB6700Repo.d.ts +32 -0
- package/dist/Entities/ABB6700Repo.d.ts.map +1 -0
- package/dist/Factory/ABB6700FeatureFactory.d.ts +26 -0
- package/dist/Factory/ABB6700FeatureFactory.d.ts.map +1 -0
- package/dist/Mocks/MockABB6700PM.d.ts +11 -0
- package/dist/Mocks/MockABB6700PM.d.ts.map +1 -0
- package/dist/Mocks/MockSetJointAngleUC.d.ts +7 -0
- package/dist/Mocks/MockSetJointAngleUC.d.ts.map +1 -0
- package/dist/Mocks/MockSetPoseUC.d.ts +7 -0
- package/dist/Mocks/MockSetPoseUC.d.ts.map +1 -0
- package/dist/PMs/ABB6700PM.d.ts +32 -0
- package/dist/PMs/ABB6700PM.d.ts.map +1 -0
- package/dist/UCs/CalcStabilizerUC.d.ts +7 -0
- package/dist/UCs/CalcStabilizerUC.d.ts.map +1 -0
- package/dist/UCs/SetJointAngleUC.d.ts +15 -0
- package/dist/UCs/SetJointAngleUC.d.ts.map +1 -0
- package/dist/UCs/SetPoseUC.d.ts +22 -0
- package/dist/UCs/SetPoseUC.d.ts.map +1 -0
- package/dist/Views/ABB6700BabylonView.d.ts +27 -0
- package/dist/Views/ABB6700BabylonView.d.ts.map +1 -0
- package/dist/abb_6700.glb +0 -0
- package/dist/abstractAudioBus-CyBWsmuN.js +14 -0
- package/dist/animationGroup-BhNThqQe.js +1454 -0
- package/dist/basisTextureLoader-BT391BsV.js +310 -0
- package/dist/brdfTextureTools-DUyKBAXf.js +79 -0
- package/dist/bumpFragment-Dd-ojPA1.js +134 -0
- package/dist/bumpFragment-KE1_PuMl.js +287 -0
- package/dist/bumpVertex-BcdvVFVx.js +8 -0
- package/dist/bumpVertexDeclaration-B5Uvs-RS.js +8 -0
- package/dist/bumpVertexDeclaration-ixSg-yGI.js +8 -0
- package/dist/clipPlaneFragment-DJwQynjA.js +136 -0
- package/dist/clipPlaneVertex-D4Wk50XG.js +376 -0
- package/dist/clipPlaneVertex-eQ147Tn2.js +350 -0
- package/dist/component.config.d.ts +17 -0
- package/dist/component.config.d.ts.map +1 -0
- package/dist/ddsTextureLoader-DeoF3iGO.js +331 -0
- package/dist/default.fragment-DKnTR9nY.js +548 -0
- package/dist/default.fragment-rIGWrUS5.js +486 -0
- package/dist/default.vertex-Bt5y1VyA.js +212 -0
- package/dist/default.vertex-Dext1liJ.js +224 -0
- package/dist/defaultUboDeclaration-BwslQZX8.js +11 -0
- package/dist/defaultUboDeclaration-DSXACgip.js +9 -0
- package/dist/easing-BAt0SO-B.js +163 -0
- package/dist/envTextureLoader-CBiW_Q-U.js +40 -0
- package/dist/exrTextureLoader-5SC6PKIA.js +740 -0
- package/dist/flowGraphApplyForceBlock-6e8-wcaw.js +32 -0
- package/dist/flowGraphApplyImpulseBlock-B27EZQow.js +32 -0
- package/dist/flowGraphArrayIndexBlock-DIUn5e4i.js +31 -0
- package/dist/flowGraphBezierCurveEasingBlock-BJmiHk40.js +25 -0
- package/dist/flowGraphBinaryOperationBlock-Bj7TANCc.js +25 -0
- package/dist/flowGraphBranchBlock-7CRvIKWc.js +19 -0
- package/dist/flowGraphCachedOperationBlock-CP1ZiuIB.js +26 -0
- package/dist/flowGraphCancelDelayBlock-DqtgzBGm.js +20 -0
- package/dist/flowGraphCodeExecutionBlock-CaYXCGqo.js +23 -0
- package/dist/flowGraphConditionalDataBlock-DJ7evX8_.js +28 -0
- package/dist/flowGraphConsoleLogBlock-cMkpqLzO.js +68 -0
- package/dist/flowGraphConstantBlock-JWybwT0A.js +28 -0
- package/dist/flowGraphContextBlock-CFDXHcbn.js +19 -0
- package/dist/flowGraphCounterBlock-B0uPkgw9.js +24 -0
- package/dist/flowGraphDataSwitchBlock-B0GSifvJ.js +27 -0
- package/dist/flowGraphDebounceBlock-CSw8zKym.js +24 -0
- package/dist/flowGraphDebugBlock-DiSR6Ahn.js +65 -0
- package/dist/flowGraphDoNBlock-C-48oQ2H.js +24 -0
- package/dist/flowGraphEasingBlock-DKUaE7Rp.js +50 -0
- package/dist/flowGraphFlipFlopBlock-DX5BGhMV.js +20 -0
- package/dist/flowGraphForLoopBlock-Di-Qwg23.js +27 -0
- package/dist/flowGraphFunctionReferenceBlock-D8X5TFsO.js +20 -0
- package/dist/flowGraphGLTFDataProvider-C4j7nPQv.js +16 -0
- package/dist/flowGraphGetAngularVelocityBlock-Cq-yTQ4D.js +31 -0
- package/dist/flowGraphGetAssetBlock-B36eioor.js +21 -0
- package/dist/flowGraphGetLinearVelocityBlock-MdrV0eUD.js +31 -0
- package/dist/flowGraphGetPhysicsMassPropertiesBlock-wXDZP1wM.js +30 -0
- package/dist/flowGraphGetPropertyBlock-eP0badwf.js +46 -0
- package/dist/flowGraphGetSoundVolumeBlock-D3gXGHXa.js +29 -0
- package/dist/flowGraphGetVariableBlock-C7-qZAec.js +31 -0
- package/dist/flowGraphIndexOfBlock-CC5l9n9P.js +31 -0
- package/dist/flowGraphInterpolationBlock-B6922jzt.js +50 -0
- package/dist/flowGraphIsKeyPressedBlock-X_iuiUOX.js +31 -0
- package/dist/flowGraphIsSoundPlayingBlock-DONQX8N8.js +29 -0
- package/dist/flowGraphJsonPointerParserBlock-DBH_gN8I.js +95 -0
- package/dist/flowGraphKeyDownEventBlock-D5T1Uyfv.js +26 -0
- package/dist/flowGraphKeyUpEventBlock-BPY_Kgkm.js +21 -0
- package/dist/flowGraphKeyboardEventBlock-C49fx3TC.js +20 -0
- package/dist/flowGraphMathBlocks-CkvrN3VJ.js +864 -0
- package/dist/flowGraphMathCombineExtractBlocks-QSjGlnoz.js +248 -0
- package/dist/flowGraphMatrixMathBlocks-B3D7Cz9p.js +117 -0
- package/dist/flowGraphMeshPickEventBlock-BBTz-taa.js +35 -0
- package/dist/flowGraphMultiGateBlock-BhY1y5BG.js +50 -0
- package/dist/flowGraphPauseAnimationBlock-CHZZXMbg.js +19 -0
- package/dist/flowGraphPauseSoundBlock-B7hMmJ0c.js +31 -0
- package/dist/flowGraphPhysicsCollisionEventBlock-CxoPpT-q.js +56 -0
- package/dist/flowGraphPlayAnimationBlock-DVAvIFux.js +99 -0
- package/dist/flowGraphPlaySoundBlock-DjHGrqbC.js +32 -0
- package/dist/flowGraphPointerDownEventBlock-qI-H0JST.js +31 -0
- package/dist/flowGraphPointerMoveEventBlock-DAi4VUyy.js +31 -0
- package/dist/flowGraphPointerOutEventBlock-CFtj68aC.js +21 -0
- package/dist/flowGraphPointerOverEventBlock-VxdHhFuu.js +23 -0
- package/dist/flowGraphPointerUpEventBlock-DRR1f07q.js +31 -0
- package/dist/flowGraphReceiveCustomEventBlock-B3bwdB66.js +52 -0
- package/dist/flowGraphSceneReadyEventBlock-Dy6lDT3j.js +23 -0
- package/dist/flowGraphSceneTickEventBlock-Bl9BF_Xw.js +32 -0
- package/dist/flowGraphSendCustomEventBlock-BAR4PGFq.js +35 -0
- package/dist/flowGraphSequenceBlock-veqU32ZZ.js +32 -0
- package/dist/flowGraphSetAngularVelocityBlock-Dj9b-zu6.js +31 -0
- package/dist/flowGraphSetDelayBlock-CMjudtvk.js +131 -0
- package/dist/flowGraphSetLinearVelocityBlock-DVDhhJBd.js +31 -0
- package/dist/flowGraphSetPhysicsMotionTypeBlock-CL3cxNCO.js +36 -0
- package/dist/flowGraphSetPropertyBlock-D3sWL3Ss.js +47 -0
- package/dist/flowGraphSetSoundVolumeBlock-CxVk45yR.js +32 -0
- package/dist/flowGraphSetVariableBlock-D1oJiwLj.js +47 -0
- package/dist/flowGraphSoundEndedEventBlock-CubEwii0.js +47 -0
- package/dist/flowGraphStopAnimationBlock-B9inwIQx.js +48 -0
- package/dist/flowGraphStopSoundBlock-BijIX2jC.js +31 -0
- package/dist/flowGraphSwitchBlock-BMhPb4OX.js +54 -0
- package/dist/flowGraphThrottleBlock-C7vrnkb1.js +37 -0
- package/dist/flowGraphTransformCoordinatesSystemBlock-DoISqaUG.js +29 -0
- package/dist/flowGraphTypeToTypeBlocks-CSML6QWx.js +57 -0
- package/dist/flowGraphUnaryOperationBlock-B0Shf-lJ.js +24 -0
- package/dist/flowGraphVectorMathBlocks-DoTRR_E0.js +178 -0
- package/dist/flowGraphWaitAllBlock-BvmDMc24.js +54 -0
- package/dist/flowGraphWhileLoopBlock-BaIq4-K2.js +27 -0
- package/dist/geometry.fragment-Bsis3UG2.js +275 -0
- package/dist/geometry.vertex-DskQ5b8j.js +222 -0
- package/dist/harmonicsFunctions-CtNrRfir.js +193 -0
- package/dist/harmonicsFunctions-PEz6APC7.js +18 -0
- package/dist/hdrTextureLoader-D9rYxJ9q.js +112 -0
- package/dist/helperFunctions-Bt7Zfkrp.js +89 -0
- package/dist/helperFunctions-CPmRxd37.js +121 -0
- package/dist/iesTextureLoader-BGUFjVhI.js +93 -0
- package/dist/index-CS3Icp_r.js +67657 -0
- package/dist/index.d.ts +23 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +27 -0
- package/dist/ktxTextureLoader-cUaGg9_L.js +459 -0
- package/dist/lightFragment-BRDibDKG.js +404 -0
- package/dist/lightFragment-DCqtGMp_.js +402 -0
- package/dist/logDepthDeclaration-Bwm-3KyB.js +16 -0
- package/dist/logDepthDeclaration-gUfeSnXX.js +20 -0
- package/dist/logDepthVertex-CKeuJ6ae.js +213 -0
- package/dist/logDepthVertex-CXkmZels.js +459 -0
- package/dist/mesh.vertexData.functions-Bc9lJlrU.js +74 -0
- package/dist/oitFragment-B8zuQigp.js +792 -0
- package/dist/oitFragment-DH3h3T6x.js +657 -0
- package/dist/openpbr.fragment-BglYS6LA.js +1405 -0
- package/dist/openpbr.fragment-DrOTZs4m.js +1553 -0
- package/dist/openpbr.vertex-B-PaLFOR.js +384 -0
- package/dist/openpbr.vertex-DMdFRTnX.js +268 -0
- package/dist/openpbrMaterial-HCU0aOca.js +2880 -0
- package/dist/openpbrMaterialLoadingAdapter-CWRAa-7S.js +1122 -0
- package/dist/openpbrTransmissionLayerData-CfDVObj5.js +352 -0
- package/dist/openpbrUboDeclaration-CA2pvSbt.js +9 -0
- package/dist/openpbrUboDeclaration-xU8VOaib.js +10 -0
- package/dist/pass.fragment-1mMP54bb.js +10 -0
- package/dist/pass.fragment-DzaUp_jk.js +10 -0
- package/dist/passCube.fragment-CQaXS7g3.js +29 -0
- package/dist/passCube.fragment-QJGPwAXI.js +29 -0
- package/dist/pbr.fragment-BnaAAGxb.js +2775 -0
- package/dist/pbr.fragment-CYZk_EGU.js +2619 -0
- package/dist/pbr.vertex-CyvdCw91.js +372 -0
- package/dist/pbr.vertex-DJMAkDxs.js +270 -0
- package/dist/pbrBRDFFunctions-EugoWm6O.js +175 -0
- package/dist/pbrDebug-Bk3sPoEG.js +719 -0
- package/dist/pbrDebug-Cdalzb1I.js +614 -0
- package/dist/pbrIBLFunctions-B0bVAXCF.js +47 -0
- package/dist/pbrIBLFunctions-C06z-ouZ.js +51 -0
- package/dist/pbrMaterial-C4FCKBZQ.js +1660 -0
- package/dist/pbrMaterialLoadingAdapter-BGHlS_ZN.js +1032 -0
- package/dist/pbrUboDeclaration-1lN5_-Bw.js +9 -0
- package/dist/pbrUboDeclaration-BJOUUOZ2.js +10 -0
- package/dist/procedural.vertex-CFPKczKj.js +14 -0
- package/dist/procedural.vertex-DUW7bYZt.js +13 -0
- package/dist/rgbdDecode.fragment-CEGgE4tL.js +8 -0
- package/dist/rgbdDecode.fragment-FT0wkgah.js +8 -0
- package/dist/rgbdEncode.fragment-CLnJJf6E.js +8 -0
- package/dist/rgbdEncode.fragment-CaAcMsY9.js +8 -0
- package/dist/sceneUboDeclaration-B6oxsfcj.js +8 -0
- package/dist/sceneUboDeclaration-JByfVKik.js +13 -0
- package/dist/setupABB6700InstanceFactory.d.ts +7 -0
- package/dist/setupABB6700InstanceFactory.d.ts.map +1 -0
- package/dist/studio.env +0 -0
- package/dist/textureProcessor.fragment-BYPw6SMQ.js +152 -0
- package/dist/textureProcessor.fragment-Ciw9-F3w.js +157 -0
- package/dist/textureTools-Cct_bGgp.js +40 -0
- package/dist/tgaTextureLoader-BJOIdnFr.js +198 -0
- package/dist/thinEngine-Bt9FW4dD.js +2425 -0
- package/dist/webAudioBus-BUzRHSxr.js +88 -0
- package/dist/webAudioMainBus-Dds1TgJG.js +49 -0
- package/package.json +49 -0
|
@@ -0,0 +1,614 @@
|
|
|
1
|
+
import { b0 as e } from "./index-CS3Icp_r.js";
|
|
2
|
+
import "./logDepthDeclaration-gUfeSnXX.js";
|
|
3
|
+
import "./oitFragment-B8zuQigp.js";
|
|
4
|
+
const t = "pbrFragmentExtraDeclaration", g = `varying vec3 vPositionW;
|
|
5
|
+
#if DEBUGMODE>0
|
|
6
|
+
varying vec4 vClipSpacePosition;
|
|
7
|
+
#endif
|
|
8
|
+
#include<mainUVVaryingDeclaration>[1..7]
|
|
9
|
+
#ifdef NORMAL
|
|
10
|
+
varying vec3 vNormalW;
|
|
11
|
+
#if defined(USESPHERICALFROMREFLECTIONMAP) && defined(USESPHERICALINVERTEX)
|
|
12
|
+
varying vec3 vEnvironmentIrradiance;
|
|
13
|
+
#endif
|
|
14
|
+
#endif
|
|
15
|
+
#if defined(VERTEXCOLOR) || defined(INSTANCESCOLOR) && defined(INSTANCES)
|
|
16
|
+
varying vec4 vColor;
|
|
17
|
+
#endif
|
|
18
|
+
#if defined(CLUSTLIGHT_BATCH) && CLUSTLIGHT_BATCH>0
|
|
19
|
+
varying float vViewDepth;
|
|
20
|
+
#endif
|
|
21
|
+
`;
|
|
22
|
+
e.IncludesShadersStore[t] || (e.IncludesShadersStore[t] = g);
|
|
23
|
+
const i = "subSurfaceScatteringFunctions", u = `bool testLightingForSSS(float diffusionProfile)
|
|
24
|
+
{return diffusionProfile<1.;}`;
|
|
25
|
+
e.IncludesShadersStore[i] || (e.IncludesShadersStore[i] = u);
|
|
26
|
+
const o = "importanceSampling", E = `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);}
|
|
27
|
+
vec3 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);}
|
|
28
|
+
vec3 hemisphereImportanceSampleDggxAnisotropic(vec2 Xi,float alphaTangent,float alphaBitangent)
|
|
29
|
+
{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;
|
|
30
|
+
float cosPhi=cos(phi);float sinPhi=sin(phi);float alpha2=(cosPhi*cosPhi)/(alphaTangent*alphaTangent) +
|
|
31
|
+
(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);}
|
|
32
|
+
vec3 hemisphereImportanceSampleDCharlie(vec2 u,float a) {
|
|
33
|
+
float 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);}`;
|
|
34
|
+
e.IncludesShadersStore[o] || (e.IncludesShadersStore[o] = E);
|
|
35
|
+
const a = "pbrHelperFunctions", h = `#define MINIMUMVARIANCE 0.0005
|
|
36
|
+
#ifndef TEXRD_DEFINED
|
|
37
|
+
#define TEXRD(s,uv) texture2D(s,uv)
|
|
38
|
+
#define TEXRD_DEFINED
|
|
39
|
+
#endif
|
|
40
|
+
float convertRoughnessToAverageSlope(float roughness)
|
|
41
|
+
{return square(roughness)+MINIMUMVARIANCE;}
|
|
42
|
+
float fresnelGrazingReflectance(float reflectance0) {float reflectance90=saturate(reflectance0*25.0);return reflectance90;}
|
|
43
|
+
vec2 getAARoughnessFactors(vec3 normalVector) {
|
|
44
|
+
#ifdef SPECULARAA
|
|
45
|
+
vec3 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);
|
|
46
|
+
#else
|
|
47
|
+
return vec2(0.);
|
|
48
|
+
#endif
|
|
49
|
+
}
|
|
50
|
+
#ifdef ANISOTROPIC
|
|
51
|
+
#ifdef ANISOTROPIC_LEGACY
|
|
52
|
+
vec2 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);}
|
|
53
|
+
vec3 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;}
|
|
54
|
+
vec3 anisotropicFrameTangent=cross(normalize(anisotropicFrameDirection),V);vec3 anisotropicFrameNormal=cross(anisotropicFrameTangent,anisotropicFrameDirection);vec3 anisotropicNormal=normalize(mix(N,anisotropicFrameNormal,abs(anisotropy)));return anisotropicNormal;}
|
|
55
|
+
#elif ANISOTROPIC_OPENPBR
|
|
56
|
+
vec2 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);}
|
|
57
|
+
#else
|
|
58
|
+
vec2 getAnisotropicRoughness(float alphaG,float anisotropy) {float alphaT=max(mix(alphaG,1.0,anisotropy*anisotropy),MINIMUMVARIANCE);float alphaB=max(alphaG,MINIMUMVARIANCE);return vec2(alphaT,alphaB);}
|
|
59
|
+
vec3 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;}
|
|
60
|
+
#endif
|
|
61
|
+
#endif
|
|
62
|
+
#if defined(CLEARCOAT) || defined(SS_REFRACTION)
|
|
63
|
+
vec3 cocaLambert(vec3 alpha,float distance) {return exp(-alpha*distance);}
|
|
64
|
+
vec3 cocaLambert(float NdotVRefract,float NdotLRefract,vec3 alpha,float thickness) {return cocaLambert(alpha,(thickness*((NdotLRefract+NdotVRefract)/(NdotLRefract*NdotVRefract))));}
|
|
65
|
+
vec3 computeColorAtDistanceInMedia(vec3 color,float distance) {return -log(color)/distance;}
|
|
66
|
+
vec3 computeClearCoatAbsorption(float NdotVRefract,float NdotLRefract,vec3 clearCoatColor,float clearCoatThickness,float clearCoatIntensity) {vec3 clearCoatAbsorption=mix(vec3(1.0),
|
|
67
|
+
cocaLambert(NdotVRefract,NdotLRefract,clearCoatColor,clearCoatThickness),
|
|
68
|
+
clearCoatIntensity);return clearCoatAbsorption;}
|
|
69
|
+
#endif
|
|
70
|
+
#ifdef MICROSURFACEAUTOMATIC
|
|
71
|
+
float computeDefaultMicroSurface(float microSurface,vec3 reflectivityColor)
|
|
72
|
+
{const float kReflectivityNoAlphaWorkflow_SmoothnessMax=0.95;float reflectivityLuminance=getLuminance(reflectivityColor);float reflectivityLuma=sqrt(reflectivityLuminance);microSurface=reflectivityLuma*kReflectivityNoAlphaWorkflow_SmoothnessMax;return microSurface;}
|
|
73
|
+
#endif
|
|
74
|
+
`;
|
|
75
|
+
e.IncludesShadersStore[a] || (e.IncludesShadersStore[a] = h);
|
|
76
|
+
const r = "pbrDirectLightingSetupFunctions", L = `struct preLightingInfo
|
|
77
|
+
{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;
|
|
78
|
+
#ifdef IRIDESCENCE
|
|
79
|
+
float iridescenceIntensity;
|
|
80
|
+
#endif
|
|
81
|
+
#if defined(AREALIGHTUSED) && defined(AREALIGHTSUPPORTED)
|
|
82
|
+
vec3 areaLightDiffuse;
|
|
83
|
+
#ifdef SPECULARTERM
|
|
84
|
+
vec3 areaLightSpecular;vec4 areaLightFresnel;
|
|
85
|
+
#endif
|
|
86
|
+
#endif
|
|
87
|
+
};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;}
|
|
88
|
+
preLightingInfo 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;}
|
|
89
|
+
preLightingInfo 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;
|
|
90
|
+
#ifdef SPECULARTERM
|
|
91
|
+
result.L=normalize(lightData.xyz);result.H=normalize(V+result.L);result.VdotH=saturate(dot(V,result.H));
|
|
92
|
+
#endif
|
|
93
|
+
result.LdotV=0.;result.roughness=0.;result.diffuseRoughness=0.;result.surfaceAlbedo=vec3(0.);return result;}
|
|
94
|
+
#if defined(AREALIGHTUSED) && defined(AREALIGHTSUPPORTED)
|
|
95
|
+
#include<ltcHelperFunctions>
|
|
96
|
+
uniform 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 )
|
|
97
|
+
{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);
|
|
98
|
+
#ifdef SPECULARTERM
|
|
99
|
+
result.areaLightFresnel=data.Fresnel;result.areaLightSpecular=data.Specular;
|
|
100
|
+
#endif
|
|
101
|
+
result.areaLightDiffuse=data.Diffuse;result.LdotV=0.;result.roughness=0.;result.diffuseRoughness=0.;result.surfaceAlbedo=vec3(0.);return result;}
|
|
102
|
+
preLightingInfo computeAreaPreLightingInfoWithTexture(sampler2D ltc1,sampler2D ltc2,sampler2D emissionTexture,vec3 viewDirectionW,vec3 vNormal,vec3 vPosition,vec4 lightData,vec3 halfWidth,vec3 halfHeight,float roughness )
|
|
103
|
+
{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);
|
|
104
|
+
#ifdef SPECULARTERM
|
|
105
|
+
result.areaLightFresnel=data.Fresnel;result.areaLightSpecular=data.Specular;
|
|
106
|
+
#endif
|
|
107
|
+
result.areaLightDiffuse=data.Diffuse;result.LdotV=0.;result.roughness=0.;result.diffuseRoughness=0.;result.surfaceAlbedo=vec3(0.);return result;}
|
|
108
|
+
#endif
|
|
109
|
+
`;
|
|
110
|
+
e.IncludesShadersStore[r] || (e.IncludesShadersStore[r] = L);
|
|
111
|
+
const n = "pbrDirectLightingFalloffFunctions", p = `float computeDistanceLightFalloff_Standard(vec3 lightOffset,float range)
|
|
112
|
+
{return max(0.,1.0-length(lightOffset)/range);}
|
|
113
|
+
float computeDistanceLightFalloff_Physical(float lightDistanceSquared)
|
|
114
|
+
{return 1.0/maxEps(lightDistanceSquared);}
|
|
115
|
+
float computeDistanceLightFalloff_GLTF(float lightDistanceSquared,float inverseSquaredRange)
|
|
116
|
+
{float lightDistanceFalloff=1.0/maxEps(lightDistanceSquared);float factor=lightDistanceSquared*inverseSquaredRange;float attenuation=saturate(1.0-factor*factor);attenuation*=attenuation;lightDistanceFalloff*=attenuation;return lightDistanceFalloff;}
|
|
117
|
+
float computeDistanceLightFalloff(vec3 lightOffset,float lightDistanceSquared,float range,float inverseSquaredRange)
|
|
118
|
+
{
|
|
119
|
+
#ifdef USEPHYSICALLIGHTFALLOFF
|
|
120
|
+
return computeDistanceLightFalloff_Physical(lightDistanceSquared);
|
|
121
|
+
#elif defined(USEGLTFLIGHTFALLOFF)
|
|
122
|
+
return computeDistanceLightFalloff_GLTF(lightDistanceSquared,inverseSquaredRange);
|
|
123
|
+
#else
|
|
124
|
+
return computeDistanceLightFalloff_Standard(lightOffset,range);
|
|
125
|
+
#endif
|
|
126
|
+
}
|
|
127
|
+
float computeDirectionalLightFalloff_Standard(vec3 lightDirection,vec3 directionToLightCenterW,float cosHalfAngle,float exponent)
|
|
128
|
+
{float falloff=0.0;float cosAngle=maxEps(dot(-lightDirection,directionToLightCenterW));if (cosAngle>=cosHalfAngle)
|
|
129
|
+
{falloff=max(0.,pow(cosAngle,exponent));}
|
|
130
|
+
return falloff;}
|
|
131
|
+
float computeDirectionalLightFalloff_IES(vec3 lightDirection,vec3 directionToLightCenterW,sampler2D iesLightSampler)
|
|
132
|
+
{float cosAngle=dot(-lightDirection,directionToLightCenterW);float angle=acos(cosAngle)/PI;return texture2D(iesLightSampler,vec2(angle,0.)).r;}
|
|
133
|
+
float computeDirectionalLightFalloff_Physical(vec3 lightDirection,vec3 directionToLightCenterW,float cosHalfAngle)
|
|
134
|
+
{const float kMinusLog2ConeAngleIntensityRatio=6.64385618977;
|
|
135
|
+
float concentrationKappa=kMinusLog2ConeAngleIntensityRatio/(1.0-cosHalfAngle);vec4 lightDirectionSpreadSG=vec4(-lightDirection*concentrationKappa,-concentrationKappa);float falloff=exp2(dot(vec4(directionToLightCenterW,1.0),lightDirectionSpreadSG));return falloff;}
|
|
136
|
+
float computeDirectionalLightFalloff_GLTF(vec3 lightDirection,vec3 directionToLightCenterW,float lightAngleScale,float lightAngleOffset)
|
|
137
|
+
{float cd=dot(-lightDirection,directionToLightCenterW);float falloff=saturate(cd*lightAngleScale+lightAngleOffset);falloff*=falloff;return falloff;}
|
|
138
|
+
float computeDirectionalLightFalloff(vec3 lightDirection,vec3 directionToLightCenterW,float cosHalfAngle,float exponent,float lightAngleScale,float lightAngleOffset)
|
|
139
|
+
{
|
|
140
|
+
#ifdef USEPHYSICALLIGHTFALLOFF
|
|
141
|
+
return computeDirectionalLightFalloff_Physical(lightDirection,directionToLightCenterW,cosHalfAngle);
|
|
142
|
+
#elif defined(USEGLTFLIGHTFALLOFF)
|
|
143
|
+
return computeDirectionalLightFalloff_GLTF(lightDirection,directionToLightCenterW,lightAngleScale,lightAngleOffset);
|
|
144
|
+
#else
|
|
145
|
+
return computeDirectionalLightFalloff_Standard(lightDirection,directionToLightCenterW,cosHalfAngle,exponent);
|
|
146
|
+
#endif
|
|
147
|
+
}`;
|
|
148
|
+
e.IncludesShadersStore[n] || (e.IncludesShadersStore[n] = p);
|
|
149
|
+
const l = "hdrFilteringFunctions", D = `#if NUM_SAMPLES
|
|
150
|
+
#if NUM_SAMPLES>0
|
|
151
|
+
#if defined(WEBGL2) || defined(WEBGPU) || defined(NATIVE)
|
|
152
|
+
float radicalInverse_VdC(uint bits)
|
|
153
|
+
{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; }
|
|
154
|
+
vec2 hammersley(uint i,uint N)
|
|
155
|
+
{return vec2(float(i)/float(N),radicalInverse_VdC(i));}
|
|
156
|
+
#else
|
|
157
|
+
float vanDerCorpus(int n,int base)
|
|
158
|
+
{float invBase=1.0/float(base);float denom =1.0;float result =0.0;for(int i=0; i<32; ++i)
|
|
159
|
+
{if(n>0)
|
|
160
|
+
{denom =mod(float(n),2.0);result+=denom*invBase;invBase=invBase/2.0;n =int(float(n)/2.0);}}
|
|
161
|
+
return result;}
|
|
162
|
+
vec2 hammersley(int i,int N)
|
|
163
|
+
{return vec2(float(i)/float(N),vanDerCorpus(i,2));}
|
|
164
|
+
#endif
|
|
165
|
+
float log4(float x) {return log2(x)/2.;}
|
|
166
|
+
vec3 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;}
|
|
167
|
+
const float NUM_SAMPLES_FLOAT=float(NUM_SAMPLES);const float NUM_SAMPLES_FLOAT_INVERSED=1./NUM_SAMPLES_FLOAT;const float K=4.;
|
|
168
|
+
#define inline
|
|
169
|
+
vec3 irradiance(
|
|
170
|
+
#ifdef CUSTOM_IRRADIANCE_FILTERING_INPUT
|
|
171
|
+
CUSTOM_IRRADIANCE_FILTERING_INPUT
|
|
172
|
+
#else
|
|
173
|
+
samplerCube inputTexture,
|
|
174
|
+
#endif
|
|
175
|
+
vec3 inputN,vec2 filteringInfo,
|
|
176
|
+
float diffuseRoughness,
|
|
177
|
+
vec3 surfaceAlbedo,
|
|
178
|
+
vec3 inputV
|
|
179
|
+
#if IBL_CDF_FILTERING
|
|
180
|
+
,sampler2D icdfSampler
|
|
181
|
+
#endif
|
|
182
|
+
)
|
|
183
|
+
{vec3 n=normalize(inputN);vec3 result=vec3(0.);
|
|
184
|
+
#ifndef IBL_CDF_FILTERING
|
|
185
|
+
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);mat3 tbnInverse=mat3(tangent.x,bitangent.x,n.x,tangent.y,bitangent.y,n.y,tangent.z,bitangent.z,n.z);
|
|
186
|
+
#endif
|
|
187
|
+
float maxLevel=filteringInfo.y;float dim0=filteringInfo.x;float omegaP=(4.*PI)/(6.*dim0*dim0);vec3 clampedAlbedo=clamp(surfaceAlbedo,vec3(0.1),vec3(1.0));
|
|
188
|
+
#if defined(WEBGL2) || defined(WEBGPU) || defined(NATIVE)
|
|
189
|
+
for(uint i=0u; i<NUM_SAMPLES; ++i)
|
|
190
|
+
#else
|
|
191
|
+
for(int i=0; i<NUM_SAMPLES; ++i)
|
|
192
|
+
#endif
|
|
193
|
+
{vec2 Xi=hammersley(i,NUM_SAMPLES);
|
|
194
|
+
#if IBL_CDF_FILTERING
|
|
195
|
+
vec2 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);
|
|
196
|
+
#if BASE_DIFFUSE_MODEL==BRDF_DIFFUSE_MODEL_EON
|
|
197
|
+
float LoV=dot (Ls,inputV);
|
|
198
|
+
#elif BASE_DIFFUSE_MODEL==BRDF_DIFFUSE_MODEL_BURLEY
|
|
199
|
+
vec3 H=(inputV+Ls)*0.5;float VoH=dot(inputV,H);
|
|
200
|
+
#endif
|
|
201
|
+
#else
|
|
202
|
+
vec3 Ls=hemisphereCosSample(Xi);Ls=normalize(Ls);float NoL=Ls.z;
|
|
203
|
+
vec3 V=tbnInverse*inputV;float NoV=V.z;
|
|
204
|
+
#if BASE_DIFFUSE_MODEL==BRDF_DIFFUSE_MODEL_EON
|
|
205
|
+
float LoV=dot (Ls,V);
|
|
206
|
+
#elif BASE_DIFFUSE_MODEL==BRDF_DIFFUSE_MODEL_BURLEY
|
|
207
|
+
vec3 H=(V+Ls)*0.5;float VoH=dot(V,H);
|
|
208
|
+
#endif
|
|
209
|
+
#endif
|
|
210
|
+
if (NoL>0.) {
|
|
211
|
+
#if IBL_CDF_FILTERING
|
|
212
|
+
float pdf=texture2D(icdfSampler,T).z;vec3 c=textureCubeLodEXT(inputTexture,Ls,0.).rgb;
|
|
213
|
+
#else
|
|
214
|
+
float 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);
|
|
215
|
+
#ifdef CUSTOM_IRRADIANCE_FILTERING_FUNCTION
|
|
216
|
+
CUSTOM_IRRADIANCE_FILTERING_FUNCTION
|
|
217
|
+
#else
|
|
218
|
+
vec3 c=textureCubeLodEXT(inputTexture,tbn*Ls,mipLevel).rgb;
|
|
219
|
+
#endif
|
|
220
|
+
#endif
|
|
221
|
+
#if GAMMA_INPUT
|
|
222
|
+
c=toLinearSpace(c);
|
|
223
|
+
#endif
|
|
224
|
+
vec3 diffuseRoughnessTerm=vec3(1.0);
|
|
225
|
+
#if BASE_DIFFUSE_MODEL==BRDF_DIFFUSE_MODEL_EON
|
|
226
|
+
diffuseRoughnessTerm=diffuseBRDF_EON(clampedAlbedo,diffuseRoughness,NoL,NoV,LoV)*PI;
|
|
227
|
+
#elif BASE_DIFFUSE_MODEL==BRDF_DIFFUSE_MODEL_BURLEY
|
|
228
|
+
diffuseRoughnessTerm=vec3(diffuseBRDF_Burley(NoL,NoV,VoH,diffuseRoughness)*PI);
|
|
229
|
+
#endif
|
|
230
|
+
#if IBL_CDF_FILTERING
|
|
231
|
+
vec3 light=pdf<1e-6 ? vec3(0.0) : vec3(1.0)/vec3(pdf)*c;result+=NoL*diffuseRoughnessTerm*light;
|
|
232
|
+
#else
|
|
233
|
+
result+=c*diffuseRoughnessTerm;
|
|
234
|
+
#endif
|
|
235
|
+
}}
|
|
236
|
+
result=result*NUM_SAMPLES_FLOAT_INVERSED;
|
|
237
|
+
#if BASE_DIFFUSE_MODEL==BRDF_DIFFUSE_MODEL_EON
|
|
238
|
+
result=result/clampedAlbedo;
|
|
239
|
+
#endif
|
|
240
|
+
return result;}
|
|
241
|
+
#define inline
|
|
242
|
+
vec3 radiance(float alphaG,samplerCube inputTexture,vec3 inputN,vec2 filteringInfo)
|
|
243
|
+
{vec3 n=normalize(inputN);vec3 c=textureCubeLodEXT(inputTexture,n,0.).rgb;
|
|
244
|
+
if (alphaG==0.) {
|
|
245
|
+
#if GAMMA_INPUT
|
|
246
|
+
c=toLinearSpace(c);
|
|
247
|
+
#endif
|
|
248
|
+
return 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.;
|
|
249
|
+
#if defined(WEBGL2) || defined(WEBGPU) || defined(NATIVE)
|
|
250
|
+
for(uint i=0u; i<NUM_SAMPLES; ++i)
|
|
251
|
+
#else
|
|
252
|
+
for(int i=0; i<NUM_SAMPLES; ++i)
|
|
253
|
+
#endif
|
|
254
|
+
{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,alphaG);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;
|
|
255
|
+
#if GAMMA_INPUT
|
|
256
|
+
c=toLinearSpace(c);
|
|
257
|
+
#endif
|
|
258
|
+
result+=c*NoL;}}
|
|
259
|
+
result=result/weight;return result;}}
|
|
260
|
+
#ifdef ANISOTROPIC
|
|
261
|
+
#define inline
|
|
262
|
+
vec3 radianceAnisotropic(
|
|
263
|
+
float alphaTangent,
|
|
264
|
+
float alphaBitangent,
|
|
265
|
+
samplerCube inputTexture,
|
|
266
|
+
vec3 inputView,
|
|
267
|
+
vec3 inputTangent,
|
|
268
|
+
vec3 inputBitangent,
|
|
269
|
+
vec3 inputNormal,
|
|
270
|
+
vec2 filteringInfo,
|
|
271
|
+
vec2 noiseInput,
|
|
272
|
+
bool isRefraction,
|
|
273
|
+
float ior
|
|
274
|
+
)
|
|
275
|
+
{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.;
|
|
276
|
+
#if defined(WEBGL2) || defined(WEBGPU) || defined(NATIVE)
|
|
277
|
+
for(uint i=0u; i<NUM_SAMPLES; ++i)
|
|
278
|
+
#else
|
|
279
|
+
for(int i=0; i<NUM_SAMPLES; ++i)
|
|
280
|
+
#endif
|
|
281
|
+
{vec2 Xi=hammersley(i,NUM_SAMPLES);Xi=fract(Xi+noiseInput*mix(0.5f,0.015f,noiseScale));
|
|
282
|
+
vec3 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);}
|
|
283
|
+
float 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(
|
|
284
|
+
H_tangent.z,H_tangent.x,H_tangent.y,vec2(clampedAlphaT,clampedAlphaB)
|
|
285
|
+
);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;
|
|
286
|
+
#if GAMMA_INPUT
|
|
287
|
+
c=toLinearSpace(c);
|
|
288
|
+
#endif
|
|
289
|
+
result+=c*NoL;}}
|
|
290
|
+
result=result/weight;return result;}
|
|
291
|
+
#endif
|
|
292
|
+
#endif
|
|
293
|
+
#endif
|
|
294
|
+
`;
|
|
295
|
+
e.IncludesShadersStore[l] || (e.IncludesShadersStore[l] = D);
|
|
296
|
+
const f = "pbrDirectLightingFunctions", v = `#define CLEARCOATREFLECTANCE90 1.0
|
|
297
|
+
struct lightingInfo
|
|
298
|
+
{vec3 diffuse;
|
|
299
|
+
#ifdef SS_TRANSLUCENCY
|
|
300
|
+
vec3 diffuseTransmission;
|
|
301
|
+
#endif
|
|
302
|
+
#ifdef SPECULARTERM
|
|
303
|
+
vec3 specular;
|
|
304
|
+
#endif
|
|
305
|
+
#ifdef CLEARCOAT
|
|
306
|
+
vec4 clearCoat;
|
|
307
|
+
#endif
|
|
308
|
+
#ifdef SHEEN
|
|
309
|
+
vec3 sheen;
|
|
310
|
+
#endif
|
|
311
|
+
};float adjustRoughnessFromLightProperties(float roughness,float lightRadius,float lightDistance) {
|
|
312
|
+
#if defined(USEPHYSICALLIGHTFALLOFF) || defined(USEGLTFLIGHTFALLOFF)
|
|
313
|
+
float lightRoughness=lightRadius/lightDistance;float totalRoughness=saturate(lightRoughness+roughness);return totalRoughness;
|
|
314
|
+
#else
|
|
315
|
+
return roughness;
|
|
316
|
+
#endif
|
|
317
|
+
}
|
|
318
|
+
vec3 computeHemisphericDiffuseLighting(preLightingInfo info,vec3 lightColor,vec3 groundColor) {return mix(groundColor,lightColor,info.NdotL);}
|
|
319
|
+
#if defined(AREALIGHTUSED) && defined(AREALIGHTSUPPORTED)
|
|
320
|
+
vec3 computeAreaDiffuseLighting(preLightingInfo info,vec3 lightColor) {return info.areaLightDiffuse*lightColor;}
|
|
321
|
+
#endif
|
|
322
|
+
vec3 computeDiffuseLighting(preLightingInfo info,vec3 lightColor) {vec3 diffuseTerm=vec3(1.0/PI);
|
|
323
|
+
#if BASE_DIFFUSE_MODEL==BRDF_DIFFUSE_MODEL_LEGACY
|
|
324
|
+
diffuseTerm=vec3(diffuseBRDF_Burley(info.NdotL,info.NdotV,info.VdotH,info.roughness));
|
|
325
|
+
#elif BASE_DIFFUSE_MODEL==BRDF_DIFFUSE_MODEL_BURLEY
|
|
326
|
+
diffuseTerm=vec3(diffuseBRDF_Burley(info.NdotL,info.NdotV,info.VdotH,info.diffuseRoughness));
|
|
327
|
+
#elif BASE_DIFFUSE_MODEL==BRDF_DIFFUSE_MODEL_EON
|
|
328
|
+
vec3 clampedAlbedo=clamp(info.surfaceAlbedo,vec3(0.1),vec3(1.0));diffuseTerm=diffuseBRDF_EON(clampedAlbedo,info.diffuseRoughness,info.NdotL,info.NdotV,info.LdotV);diffuseTerm/=clampedAlbedo;
|
|
329
|
+
#endif
|
|
330
|
+
return diffuseTerm*info.attenuation*info.NdotL*lightColor;}
|
|
331
|
+
#define inline
|
|
332
|
+
vec3 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);}
|
|
333
|
+
#ifdef SS_TRANSLUCENCY
|
|
334
|
+
vec3 computeDiffuseTransmittedLighting(preLightingInfo info,vec3 lightColor,vec3 transmittance) {vec3 transmittanceNdotL=vec3(0.);float NdotL=absEps(info.NdotLUnclamped);
|
|
335
|
+
#ifndef SS_TRANSLUCENCY_LEGACY
|
|
336
|
+
if (info.NdotLUnclamped<0.0) {
|
|
337
|
+
#endif
|
|
338
|
+
float wrapNdotL=computeWrappedDiffuseNdotL(NdotL,0.02);float trAdapt=step(0.,info.NdotLUnclamped);transmittanceNdotL=mix(transmittance*wrapNdotL,vec3(wrapNdotL),trAdapt);
|
|
339
|
+
#ifndef SS_TRANSLUCENCY_LEGACY
|
|
340
|
+
}
|
|
341
|
+
vec3 diffuseTerm=vec3(1.0/PI);
|
|
342
|
+
#if BASE_DIFFUSE_MODEL==BRDF_DIFFUSE_MODEL_LEGACY
|
|
343
|
+
diffuseTerm=vec3(diffuseBRDF_Burley(info.NdotL,info.NdotV,info.VdotH,info.roughness));
|
|
344
|
+
#elif BASE_DIFFUSE_MODEL==BRDF_DIFFUSE_MODEL_BURLEY
|
|
345
|
+
diffuseTerm=vec3(diffuseBRDF_Burley(info.NdotL,info.NdotV,info.VdotH,info.diffuseRoughness));
|
|
346
|
+
#elif BASE_DIFFUSE_MODEL==BRDF_DIFFUSE_MODEL_EON
|
|
347
|
+
vec3 clampedAlbedo=clamp(info.surfaceAlbedo,vec3(0.1),vec3(1.0));diffuseTerm=diffuseBRDF_EON(clampedAlbedo,info.diffuseRoughness,info.NdotL,info.NdotV,info.LdotV);diffuseTerm/=clampedAlbedo;
|
|
348
|
+
#endif
|
|
349
|
+
#else
|
|
350
|
+
float diffuseTerm=diffuseBRDF_Burley(NdotL,info.NdotV,info.VdotH,info.roughness);
|
|
351
|
+
#endif
|
|
352
|
+
return diffuseTerm*transmittanceNdotL*info.attenuation*lightColor;}
|
|
353
|
+
#endif
|
|
354
|
+
#ifdef SPECULARTERM
|
|
355
|
+
vec3 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);
|
|
356
|
+
#ifdef IRIDESCENCE
|
|
357
|
+
fresnel=mix(fresnel,reflectance0,info.iridescenceIntensity);
|
|
358
|
+
#endif
|
|
359
|
+
float distribution=normalDistributionFunction_TrowbridgeReitzGGX(NdotH,alphaG);
|
|
360
|
+
#ifdef BRDF_V_HEIGHT_CORRELATED
|
|
361
|
+
float smithVisibility=smithVisibility_GGXCorrelated(info.NdotL,info.NdotV,alphaG);
|
|
362
|
+
#else
|
|
363
|
+
float smithVisibility=smithVisibility_TrowbridgeReitzGGXFast(info.NdotL,info.NdotV,alphaG);
|
|
364
|
+
#endif
|
|
365
|
+
vec3 specTerm=fresnel*distribution*smithVisibility;return specTerm*info.attenuation*info.NdotL*lightColor;}
|
|
366
|
+
#if defined(AREALIGHTUSED) && defined(AREALIGHTSUPPORTED)
|
|
367
|
+
vec3 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;}
|
|
368
|
+
#endif
|
|
369
|
+
#endif
|
|
370
|
+
#ifdef FUZZ
|
|
371
|
+
float evalFuzz(vec3 L,float NdotL,float NdotV,vec3 T,vec3 B,vec3 ltcLut)
|
|
372
|
+
{if (NdotL<=0.0 || NdotV<=0.0)
|
|
373
|
+
return 0.0;mat3 M=mat3(
|
|
374
|
+
vec3(ltcLut.r,0.0,0.0),
|
|
375
|
+
vec3(ltcLut.g,1.0,0.0),
|
|
376
|
+
vec3(0.0,0.0,1.0)
|
|
377
|
+
);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;}
|
|
378
|
+
#endif
|
|
379
|
+
#if defined(ANISOTROPIC) && defined(ANISOTROPIC_OPENPBR)
|
|
380
|
+
vec3 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;}
|
|
381
|
+
#elif defined(ANISOTROPIC)
|
|
382
|
+
vec3 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);
|
|
383
|
+
#ifdef IRIDESCENCE
|
|
384
|
+
fresnel=mix(fresnel,reflectance0,info.iridescenceIntensity);
|
|
385
|
+
#endif
|
|
386
|
+
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=fresnel*distribution*smithVisibility;return specTerm*info.attenuation*info.NdotL*lightColor;}
|
|
387
|
+
#endif
|
|
388
|
+
#ifdef CLEARCOAT
|
|
389
|
+
vec4 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(
|
|
390
|
+
clearCoatTerm*info.attenuation*NccdotL*lightColor,
|
|
391
|
+
1.0-fresnel
|
|
392
|
+
);}
|
|
393
|
+
vec3 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;}
|
|
394
|
+
#endif
|
|
395
|
+
#ifdef SHEEN
|
|
396
|
+
vec3 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
|
|
397
|
+
float visibility=visibility_CharlieSheen(info.NdotL,info.NdotV,alphaG);
|
|
398
|
+
#else */
|
|
399
|
+
float visibility=visibility_Ashikhmin(info.NdotL,info.NdotV);/* #endif */
|
|
400
|
+
float sheenTerm=fresnel*distribution*visibility;return sheenTerm*info.attenuation*info.NdotL*lightColor;}
|
|
401
|
+
#endif
|
|
402
|
+
`;
|
|
403
|
+
e.IncludesShadersStore[f] || (e.IncludesShadersStore[f] = v);
|
|
404
|
+
const s = "pbrBlockNormalGeometric", m = `vec3 viewDirectionW=normalize(vEyePosition.xyz-vPositionW);
|
|
405
|
+
#ifdef NORMAL
|
|
406
|
+
vec3 normalW=normalize(vNormalW);
|
|
407
|
+
#else
|
|
408
|
+
vec3 normalW=normalize(cross(dFdx(vPositionW),dFdy(vPositionW)))*vEyePosition.w;
|
|
409
|
+
#endif
|
|
410
|
+
vec3 geometricNormalW=normalW;
|
|
411
|
+
#if defined(TWOSIDEDLIGHTING) && defined(NORMAL)
|
|
412
|
+
geometricNormalW=gl_FrontFacing ? geometricNormalW : -geometricNormalW;
|
|
413
|
+
#endif
|
|
414
|
+
`;
|
|
415
|
+
e.IncludesShadersStore[s] || (e.IncludesShadersStore[s] = m);
|
|
416
|
+
const c = "pbrBlockImageProcessing", A = `#if defined(IMAGEPROCESSINGPOSTPROCESS) || defined(SS_SCATTERING)
|
|
417
|
+
#if !defined(SKIPFINALCOLORCLAMP)
|
|
418
|
+
finalColor.rgb=clamp(finalColor.rgb,0.,30.0);
|
|
419
|
+
#endif
|
|
420
|
+
#else
|
|
421
|
+
finalColor=applyImageProcessing(finalColor);
|
|
422
|
+
#endif
|
|
423
|
+
finalColor.a*=visibility;
|
|
424
|
+
#ifdef PREMULTIPLYALPHA
|
|
425
|
+
finalColor.rgb*=finalColor.a;
|
|
426
|
+
#endif
|
|
427
|
+
`;
|
|
428
|
+
e.IncludesShadersStore[c] || (e.IncludesShadersStore[c] = A);
|
|
429
|
+
const d = "pbrDebug", C = `#if DEBUGMODE>0
|
|
430
|
+
if (vClipSpacePosition.x/vClipSpacePosition.w>=vDebugMode.x) {
|
|
431
|
+
#if DEBUGMODE==1
|
|
432
|
+
gl_FragColor.rgb=vPositionW.rgb;
|
|
433
|
+
#define DEBUGMODE_NORMALIZE
|
|
434
|
+
#elif DEBUGMODE==2 && defined(NORMAL)
|
|
435
|
+
gl_FragColor.rgb=vNormalW.rgb;
|
|
436
|
+
#define DEBUGMODE_NORMALIZE
|
|
437
|
+
#elif DEBUGMODE==3 && defined(BUMP) || DEBUGMODE==3 && defined(PARALLAX) || DEBUGMODE==3 && defined(ANISOTROPIC)
|
|
438
|
+
gl_FragColor.rgb=TBN[0];
|
|
439
|
+
#define DEBUGMODE_NORMALIZE
|
|
440
|
+
#elif DEBUGMODE==4 && defined(BUMP) || DEBUGMODE==4 && defined(PARALLAX) || DEBUGMODE==4 && defined(ANISOTROPIC)
|
|
441
|
+
gl_FragColor.rgb=TBN[1];
|
|
442
|
+
#define DEBUGMODE_NORMALIZE
|
|
443
|
+
#elif DEBUGMODE==5
|
|
444
|
+
gl_FragColor.rgb=normalW;
|
|
445
|
+
#define DEBUGMODE_NORMALIZE
|
|
446
|
+
#elif DEBUGMODE==6 && defined(MAINUV1)
|
|
447
|
+
gl_FragColor.rgb=vec3(vMainUV1,0.0);
|
|
448
|
+
#elif DEBUGMODE==7 && defined(MAINUV2)
|
|
449
|
+
gl_FragColor.rgb=vec3(vMainUV2,0.0);
|
|
450
|
+
#elif DEBUGMODE==8 && defined(CLEARCOAT) && defined(CLEARCOAT_BUMP)
|
|
451
|
+
gl_FragColor.rgb=clearcoatOut.TBNClearCoat[0];
|
|
452
|
+
#define DEBUGMODE_NORMALIZE
|
|
453
|
+
#elif DEBUGMODE==9 && defined(CLEARCOAT) && defined(CLEARCOAT_BUMP)
|
|
454
|
+
gl_FragColor.rgb=clearcoatOut.TBNClearCoat[1];
|
|
455
|
+
#define DEBUGMODE_NORMALIZE
|
|
456
|
+
#elif DEBUGMODE==10 && defined(CLEARCOAT)
|
|
457
|
+
gl_FragColor.rgb=clearcoatOut.clearCoatNormalW;
|
|
458
|
+
#define DEBUGMODE_NORMALIZE
|
|
459
|
+
#elif DEBUGMODE==11 && defined(ANISOTROPIC)
|
|
460
|
+
gl_FragColor.rgb=anisotropicOut.anisotropicNormal;
|
|
461
|
+
#define DEBUGMODE_NORMALIZE
|
|
462
|
+
#elif DEBUGMODE==12 && defined(ANISOTROPIC)
|
|
463
|
+
gl_FragColor.rgb=anisotropicOut.anisotropicTangent;
|
|
464
|
+
#define DEBUGMODE_NORMALIZE
|
|
465
|
+
#elif DEBUGMODE==13 && defined(ANISOTROPIC)
|
|
466
|
+
gl_FragColor.rgb=anisotropicOut.anisotropicBitangent;
|
|
467
|
+
#define DEBUGMODE_NORMALIZE
|
|
468
|
+
#elif DEBUGMODE==20 && defined(ALBEDO)
|
|
469
|
+
gl_FragColor.rgb=albedoTexture.rgb;
|
|
470
|
+
#ifndef GAMMAALBEDO
|
|
471
|
+
#define DEBUGMODE_GAMMA
|
|
472
|
+
#endif
|
|
473
|
+
#elif DEBUGMODE==21 && defined(AMBIENT)
|
|
474
|
+
gl_FragColor.rgb=aoOut.ambientOcclusionColorMap.rgb;
|
|
475
|
+
#elif DEBUGMODE==22 && defined(OPACITY)
|
|
476
|
+
gl_FragColor.rgb=opacityMap.rgb;
|
|
477
|
+
#elif DEBUGMODE==23 && defined(EMISSIVE)
|
|
478
|
+
gl_FragColor.rgb=emissiveColorTex.rgb;
|
|
479
|
+
#ifndef GAMMAEMISSIVE
|
|
480
|
+
#define DEBUGMODE_GAMMA
|
|
481
|
+
#endif
|
|
482
|
+
#elif DEBUGMODE==24 && defined(LIGHTMAP)
|
|
483
|
+
gl_FragColor.rgb=lightmapColor.rgb;
|
|
484
|
+
#ifndef GAMMALIGHTMAP
|
|
485
|
+
#define DEBUGMODE_GAMMA
|
|
486
|
+
#endif
|
|
487
|
+
#elif DEBUGMODE==25 && defined(REFLECTIVITY) && defined(METALLICWORKFLOW)
|
|
488
|
+
gl_FragColor.rgb=reflectivityOut.surfaceMetallicColorMap.rgb;
|
|
489
|
+
#elif DEBUGMODE==26 && defined(REFLECTIVITY) && !defined(METALLICWORKFLOW)
|
|
490
|
+
gl_FragColor.rgb=reflectivityOut.surfaceReflectivityColorMap.rgb;
|
|
491
|
+
#define DEBUGMODE_GAMMA
|
|
492
|
+
#elif DEBUGMODE==27 && defined(CLEARCOAT) && defined(CLEARCOAT_TEXTURE)
|
|
493
|
+
gl_FragColor.rgb=vec3(clearcoatOut.clearCoatMapData.rg,0.0);
|
|
494
|
+
#elif DEBUGMODE==28 && defined(CLEARCOAT) && defined(CLEARCOAT_TINT) && defined(CLEARCOAT_TINT_TEXTURE)
|
|
495
|
+
gl_FragColor.rgb=clearcoatOut.clearCoatTintMapData.rgb;
|
|
496
|
+
#elif DEBUGMODE==29 && defined(SHEEN) && defined(SHEEN_TEXTURE)
|
|
497
|
+
gl_FragColor.rgb=sheenOut.sheenMapData.rgb;
|
|
498
|
+
#elif DEBUGMODE==30 && defined(ANISOTROPIC) && defined(ANISOTROPIC_TEXTURE)
|
|
499
|
+
gl_FragColor.rgb=anisotropicOut.anisotropyMapData.rgb;
|
|
500
|
+
#elif DEBUGMODE==31 && defined(SUBSURFACE) && defined(SS_THICKNESSANDMASK_TEXTURE)
|
|
501
|
+
gl_FragColor.rgb=subSurfaceOut.thicknessMap.rgb;
|
|
502
|
+
#elif DEBUGMODE==32 && defined(BUMP)
|
|
503
|
+
gl_FragColor.rgb=texture2D(bumpSampler,vBumpUV).rgb;
|
|
504
|
+
#elif DEBUGMODE==40 && defined(SS_REFRACTION)
|
|
505
|
+
gl_FragColor.rgb=subSurfaceOut.environmentRefraction.rgb;
|
|
506
|
+
#define DEBUGMODE_GAMMA
|
|
507
|
+
#elif DEBUGMODE==41 && defined(REFLECTION)
|
|
508
|
+
gl_FragColor.rgb=reflectionOut.environmentRadiance.rgb;
|
|
509
|
+
#ifndef GAMMAREFLECTION
|
|
510
|
+
#define DEBUGMODE_GAMMA
|
|
511
|
+
#endif
|
|
512
|
+
#elif DEBUGMODE==42 && defined(CLEARCOAT) && defined(REFLECTION)
|
|
513
|
+
gl_FragColor.rgb=clearcoatOut.environmentClearCoatRadiance.rgb;
|
|
514
|
+
#define DEBUGMODE_GAMMA
|
|
515
|
+
#elif DEBUGMODE==50
|
|
516
|
+
gl_FragColor.rgb=diffuseBase.rgb;
|
|
517
|
+
#define DEBUGMODE_GAMMA
|
|
518
|
+
#elif DEBUGMODE==51 && defined(SPECULARTERM)
|
|
519
|
+
gl_FragColor.rgb=specularBase.rgb;
|
|
520
|
+
#define DEBUGMODE_GAMMA
|
|
521
|
+
#elif DEBUGMODE==52 && defined(CLEARCOAT)
|
|
522
|
+
gl_FragColor.rgb=clearCoatBase.rgb;
|
|
523
|
+
#define DEBUGMODE_GAMMA
|
|
524
|
+
#elif DEBUGMODE==53 && defined(SHEEN)
|
|
525
|
+
gl_FragColor.rgb=sheenBase.rgb;
|
|
526
|
+
#define DEBUGMODE_GAMMA
|
|
527
|
+
#elif DEBUGMODE==54 && defined(REFLECTION)
|
|
528
|
+
gl_FragColor.rgb=reflectionOut.environmentIrradiance.rgb;
|
|
529
|
+
#ifndef GAMMAREFLECTION
|
|
530
|
+
#define DEBUGMODE_GAMMA
|
|
531
|
+
#endif
|
|
532
|
+
#elif DEBUGMODE==60
|
|
533
|
+
gl_FragColor.rgb=surfaceAlbedo.rgb;
|
|
534
|
+
#define DEBUGMODE_GAMMA
|
|
535
|
+
#elif DEBUGMODE==61
|
|
536
|
+
gl_FragColor.rgb=clearcoatOut.specularEnvironmentR0;
|
|
537
|
+
#define DEBUGMODE_GAMMA
|
|
538
|
+
#elif DEBUGMODE==62 && defined(METALLICWORKFLOW)
|
|
539
|
+
gl_FragColor.rgb=vec3(reflectivityOut.metallic);
|
|
540
|
+
#elif DEBUGMODE==71 && defined(METALLICWORKFLOW)
|
|
541
|
+
gl_FragColor.rgb=reflectivityOut.metallicF0;
|
|
542
|
+
#elif DEBUGMODE==63
|
|
543
|
+
gl_FragColor.rgb=vec3(roughness);
|
|
544
|
+
#elif DEBUGMODE==64
|
|
545
|
+
gl_FragColor.rgb=vec3(alphaG);
|
|
546
|
+
#elif DEBUGMODE==65
|
|
547
|
+
gl_FragColor.rgb=vec3(NdotV);
|
|
548
|
+
#elif DEBUGMODE==66 && defined(CLEARCOAT) && defined(CLEARCOAT_TINT)
|
|
549
|
+
gl_FragColor.rgb=clearcoatOut.clearCoatColor.rgb;
|
|
550
|
+
#define DEBUGMODE_GAMMA
|
|
551
|
+
#elif DEBUGMODE==67 && defined(CLEARCOAT)
|
|
552
|
+
gl_FragColor.rgb=vec3(clearcoatOut.clearCoatRoughness);
|
|
553
|
+
#elif DEBUGMODE==68 && defined(CLEARCOAT)
|
|
554
|
+
gl_FragColor.rgb=vec3(clearcoatOut.clearCoatNdotV);
|
|
555
|
+
#elif DEBUGMODE==69 && defined(SUBSURFACE) && defined(SS_TRANSLUCENCY)
|
|
556
|
+
gl_FragColor.rgb=subSurfaceOut.transmittance;
|
|
557
|
+
#elif DEBUGMODE==70 && defined(SUBSURFACE) && defined(SS_REFRACTION)
|
|
558
|
+
gl_FragColor.rgb=subSurfaceOut.refractionTransmittance;
|
|
559
|
+
#elif DEBUGMODE==72
|
|
560
|
+
gl_FragColor.rgb=vec3(microSurface);
|
|
561
|
+
#elif DEBUGMODE==73
|
|
562
|
+
gl_FragColor.rgb=vAlbedoColor.rgb;
|
|
563
|
+
#define DEBUGMODE_GAMMA
|
|
564
|
+
#elif DEBUGMODE==74 && !defined(METALLICWORKFLOW)
|
|
565
|
+
gl_FragColor.rgb=vReflectivityColor.rgb;
|
|
566
|
+
#define DEBUGMODE_GAMMA
|
|
567
|
+
#elif DEBUGMODE==75
|
|
568
|
+
gl_FragColor.rgb=vEmissiveColor.rgb;
|
|
569
|
+
#define DEBUGMODE_GAMMA
|
|
570
|
+
#elif DEBUGMODE==80 && defined(RADIANCEOCCLUSION)
|
|
571
|
+
gl_FragColor.rgb=vec3(seo);
|
|
572
|
+
#elif DEBUGMODE==81 && defined(HORIZONOCCLUSION) && defined(BUMP) && defined(REFLECTIONMAP_3D)
|
|
573
|
+
gl_FragColor.rgb=vec3(eho);
|
|
574
|
+
#elif DEBUGMODE==82 && defined(MS_BRDF_ENERGY_CONSERVATION)
|
|
575
|
+
gl_FragColor.rgb=vec3(energyConservationFactor);
|
|
576
|
+
#elif DEBUGMODE==83 && defined(ENVIRONMENTBRDF) && !defined(REFLECTIONMAP_SKYBOX)
|
|
577
|
+
gl_FragColor.rgb=baseSpecularEnvironmentReflectance;
|
|
578
|
+
#define DEBUGMODE_GAMMA
|
|
579
|
+
#elif DEBUGMODE==84 && defined(CLEARCOAT) && defined(ENVIRONMENTBRDF) && !defined(REFLECTIONMAP_SKYBOX)
|
|
580
|
+
gl_FragColor.rgb=clearcoatOut.clearCoatEnvironmentReflectance;
|
|
581
|
+
#define DEBUGMODE_GAMMA
|
|
582
|
+
#elif DEBUGMODE==85 && defined(SHEEN) && defined(REFLECTION)
|
|
583
|
+
gl_FragColor.rgb=sheenOut.sheenEnvironmentReflectance;
|
|
584
|
+
#define DEBUGMODE_GAMMA
|
|
585
|
+
#elif DEBUGMODE==86 && defined(ALPHABLEND)
|
|
586
|
+
gl_FragColor.rgb=vec3(luminanceOverAlpha);
|
|
587
|
+
#elif DEBUGMODE==87
|
|
588
|
+
gl_FragColor.rgb=vec3(alpha);
|
|
589
|
+
#elif DEBUGMODE==88 && defined(ALBEDO)
|
|
590
|
+
gl_FragColor.rgb=vec3(albedoTexture.a);
|
|
591
|
+
#elif DEBUGMODE==89
|
|
592
|
+
gl_FragColor.rgb=aoOut.ambientOcclusionColor.rgb;
|
|
593
|
+
#else
|
|
594
|
+
float 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);
|
|
595
|
+
#endif
|
|
596
|
+
gl_FragColor.rgb*=vDebugMode.y;
|
|
597
|
+
#ifdef DEBUGMODE_NORMALIZE
|
|
598
|
+
gl_FragColor.rgb=normalize(gl_FragColor.rgb)*0.5+0.5;
|
|
599
|
+
#endif
|
|
600
|
+
#ifdef DEBUGMODE_GAMMA
|
|
601
|
+
gl_FragColor.rgb=toGammaSpace(gl_FragColor.rgb);
|
|
602
|
+
#endif
|
|
603
|
+
gl_FragColor.a=1.0;
|
|
604
|
+
#ifdef PREPASS
|
|
605
|
+
gl_FragData[0]=toLinearSpace(gl_FragColor);
|
|
606
|
+
gl_FragData[1]=vec4(0.,0.,0.,0.);
|
|
607
|
+
#endif
|
|
608
|
+
#ifdef DEBUGMODE_FORCERETURN
|
|
609
|
+
return;
|
|
610
|
+
#endif
|
|
611
|
+
}
|
|
612
|
+
#endif
|
|
613
|
+
`;
|
|
614
|
+
e.IncludesShadersStore[d] || (e.IncludesShadersStore[d] = C);
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { b0 as e } from "./index-CS3Icp_r.js";
|
|
2
|
+
const r = "pbrFragmentReflectionDeclaration", i = `#ifdef REFLECTION
|
|
3
|
+
#ifdef REFLECTIONMAP_3D
|
|
4
|
+
var reflectionSamplerSampler: sampler;var reflectionSampler: texture_cube<f32>;
|
|
5
|
+
#ifdef LODBASEDMICROSFURACE
|
|
6
|
+
#else
|
|
7
|
+
var reflectionLowSamplerSampler: sampler;var reflectionLowSampler: texture_cube<f32>;var reflectionHighSamplerSampler: sampler;var reflectionHighSampler: texture_cube<f32>;
|
|
8
|
+
#endif
|
|
9
|
+
#ifdef USEIRRADIANCEMAP
|
|
10
|
+
var irradianceSamplerSampler: sampler;var irradianceSampler: texture_cube<f32>;
|
|
11
|
+
#endif
|
|
12
|
+
#else
|
|
13
|
+
var reflectionSamplerSampler: sampler;var reflectionSampler: texture_2d<f32>;
|
|
14
|
+
#ifdef LODBASEDMICROSFURACE
|
|
15
|
+
#else
|
|
16
|
+
var reflectionLowSamplerSampler: sampler;var reflectionLowSampler: texture_2d<f32>;var reflectionHighSamplerSampler: sampler;var reflectionHighSampler: texture_2d<f32>;
|
|
17
|
+
#endif
|
|
18
|
+
#ifdef USEIRRADIANCEMAP
|
|
19
|
+
var irradianceSamplerSampler: sampler;var irradianceSampler: texture_2d<f32>;
|
|
20
|
+
#endif
|
|
21
|
+
#endif
|
|
22
|
+
#ifdef REFLECTIONMAP_SKYBOX
|
|
23
|
+
varying vPositionUVW: vec3f;
|
|
24
|
+
#else
|
|
25
|
+
#if defined(REFLECTIONMAP_EQUIRECTANGULAR_FIXED) || defined(REFLECTIONMAP_MIRROREDEQUIRECTANGULAR_FIXED)
|
|
26
|
+
varying vDirectionW: vec3f;
|
|
27
|
+
#endif
|
|
28
|
+
#endif
|
|
29
|
+
#endif
|
|
30
|
+
`;
|
|
31
|
+
e.IncludesShadersStoreWGSL[r] || (e.IncludesShadersStoreWGSL[r] = i);
|
|
32
|
+
const a = "pbrIBLFunctions", f = `#if defined(REFLECTION) || defined(SS_REFRACTION)
|
|
33
|
+
fn getLodFromAlphaG(cubeMapDimensionPixels: f32,microsurfaceAverageSlope: f32)->f32 {var microsurfaceAverageSlopeTexels: f32=cubeMapDimensionPixels*microsurfaceAverageSlope;var lod: f32=log2(microsurfaceAverageSlopeTexels);return lod;}
|
|
34
|
+
fn getLinearLodFromRoughness(cubeMapDimensionPixels: f32,roughness: f32)->f32 {var lod: f32=log2(cubeMapDimensionPixels)*roughness;return lod;}
|
|
35
|
+
#endif
|
|
36
|
+
#if defined(ENVIRONMENTBRDF) && defined(RADIANCEOCCLUSION)
|
|
37
|
+
fn environmentRadianceOcclusion(ambientOcclusion: f32,NdotVUnclamped: f32)->f32 {var temp: f32=NdotVUnclamped+ambientOcclusion;return saturate(temp*temp-1.0+ambientOcclusion);}
|
|
38
|
+
#endif
|
|
39
|
+
#if defined(ENVIRONMENTBRDF) && defined(HORIZONOCCLUSION)
|
|
40
|
+
fn environmentHorizonOcclusion(view: vec3f,normal: vec3f,geometricNormal: vec3f)->f32 {var reflection: vec3f=reflect(view,normal);var temp: f32=saturate(1.0+1.1*dot(reflection,geometricNormal));return temp*temp;}
|
|
41
|
+
#endif
|
|
42
|
+
#if defined(LODINREFLECTIONALPHA) || defined(SS_LODINREFRACTIONALPHA)
|
|
43
|
+
fn UNPACK_LOD(x: f32)->f32 {return (1.0-x)*255.0;}
|
|
44
|
+
fn getLodFromAlphaGNdotV(cubeMapDimensionPixels: f32,alphaG: f32,NdotV: f32)->f32 {var microsurfaceAverageSlope: f32=alphaG;microsurfaceAverageSlope*=sqrt(abs(NdotV));return getLodFromAlphaG(cubeMapDimensionPixels,microsurfaceAverageSlope);}
|
|
45
|
+
#endif
|
|
46
|
+
`;
|
|
47
|
+
e.IncludesShadersStoreWGSL[a] || (e.IncludesShadersStoreWGSL[a] = f);
|