@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.
Files changed (203) hide show
  1. package/.todo.md +13 -0
  2. package/README.md +122 -0
  3. package/dist/.gitkeep +0 -0
  4. package/dist/Adapters/aBB6700PMAdapter.d.ts +10 -0
  5. package/dist/Adapters/aBB6700PMAdapter.d.ts.map +1 -0
  6. package/dist/Controllers/createABB6700.d.ts +12 -0
  7. package/dist/Controllers/createABB6700.d.ts.map +1 -0
  8. package/dist/Controllers/getPose.d.ts +11 -0
  9. package/dist/Controllers/getPose.d.ts.map +1 -0
  10. package/dist/Controllers/setJointAngle.d.ts +12 -0
  11. package/dist/Controllers/setJointAngle.d.ts.map +1 -0
  12. package/dist/Controllers/setPose.d.ts +11 -0
  13. package/dist/Controllers/setPose.d.ts.map +1 -0
  14. package/dist/Entities/ABB6700Entity.d.ts +35 -0
  15. package/dist/Entities/ABB6700Entity.d.ts.map +1 -0
  16. package/dist/Entities/ABB6700Repo.d.ts +32 -0
  17. package/dist/Entities/ABB6700Repo.d.ts.map +1 -0
  18. package/dist/Factory/ABB6700FeatureFactory.d.ts +26 -0
  19. package/dist/Factory/ABB6700FeatureFactory.d.ts.map +1 -0
  20. package/dist/Mocks/MockABB6700PM.d.ts +11 -0
  21. package/dist/Mocks/MockABB6700PM.d.ts.map +1 -0
  22. package/dist/Mocks/MockSetJointAngleUC.d.ts +7 -0
  23. package/dist/Mocks/MockSetJointAngleUC.d.ts.map +1 -0
  24. package/dist/Mocks/MockSetPoseUC.d.ts +7 -0
  25. package/dist/Mocks/MockSetPoseUC.d.ts.map +1 -0
  26. package/dist/PMs/ABB6700PM.d.ts +32 -0
  27. package/dist/PMs/ABB6700PM.d.ts.map +1 -0
  28. package/dist/UCs/CalcStabilizerUC.d.ts +7 -0
  29. package/dist/UCs/CalcStabilizerUC.d.ts.map +1 -0
  30. package/dist/UCs/SetJointAngleUC.d.ts +15 -0
  31. package/dist/UCs/SetJointAngleUC.d.ts.map +1 -0
  32. package/dist/UCs/SetPoseUC.d.ts +22 -0
  33. package/dist/UCs/SetPoseUC.d.ts.map +1 -0
  34. package/dist/Views/ABB6700BabylonView.d.ts +27 -0
  35. package/dist/Views/ABB6700BabylonView.d.ts.map +1 -0
  36. package/dist/abb_6700.glb +0 -0
  37. package/dist/abstractAudioBus-CyBWsmuN.js +14 -0
  38. package/dist/animationGroup-BhNThqQe.js +1454 -0
  39. package/dist/basisTextureLoader-BT391BsV.js +310 -0
  40. package/dist/brdfTextureTools-DUyKBAXf.js +79 -0
  41. package/dist/bumpFragment-Dd-ojPA1.js +134 -0
  42. package/dist/bumpFragment-KE1_PuMl.js +287 -0
  43. package/dist/bumpVertex-BcdvVFVx.js +8 -0
  44. package/dist/bumpVertexDeclaration-B5Uvs-RS.js +8 -0
  45. package/dist/bumpVertexDeclaration-ixSg-yGI.js +8 -0
  46. package/dist/clipPlaneFragment-DJwQynjA.js +136 -0
  47. package/dist/clipPlaneVertex-D4Wk50XG.js +376 -0
  48. package/dist/clipPlaneVertex-eQ147Tn2.js +350 -0
  49. package/dist/component.config.d.ts +17 -0
  50. package/dist/component.config.d.ts.map +1 -0
  51. package/dist/ddsTextureLoader-DeoF3iGO.js +331 -0
  52. package/dist/default.fragment-DKnTR9nY.js +548 -0
  53. package/dist/default.fragment-rIGWrUS5.js +486 -0
  54. package/dist/default.vertex-Bt5y1VyA.js +212 -0
  55. package/dist/default.vertex-Dext1liJ.js +224 -0
  56. package/dist/defaultUboDeclaration-BwslQZX8.js +11 -0
  57. package/dist/defaultUboDeclaration-DSXACgip.js +9 -0
  58. package/dist/easing-BAt0SO-B.js +163 -0
  59. package/dist/envTextureLoader-CBiW_Q-U.js +40 -0
  60. package/dist/exrTextureLoader-5SC6PKIA.js +740 -0
  61. package/dist/flowGraphApplyForceBlock-6e8-wcaw.js +32 -0
  62. package/dist/flowGraphApplyImpulseBlock-B27EZQow.js +32 -0
  63. package/dist/flowGraphArrayIndexBlock-DIUn5e4i.js +31 -0
  64. package/dist/flowGraphBezierCurveEasingBlock-BJmiHk40.js +25 -0
  65. package/dist/flowGraphBinaryOperationBlock-Bj7TANCc.js +25 -0
  66. package/dist/flowGraphBranchBlock-7CRvIKWc.js +19 -0
  67. package/dist/flowGraphCachedOperationBlock-CP1ZiuIB.js +26 -0
  68. package/dist/flowGraphCancelDelayBlock-DqtgzBGm.js +20 -0
  69. package/dist/flowGraphCodeExecutionBlock-CaYXCGqo.js +23 -0
  70. package/dist/flowGraphConditionalDataBlock-DJ7evX8_.js +28 -0
  71. package/dist/flowGraphConsoleLogBlock-cMkpqLzO.js +68 -0
  72. package/dist/flowGraphConstantBlock-JWybwT0A.js +28 -0
  73. package/dist/flowGraphContextBlock-CFDXHcbn.js +19 -0
  74. package/dist/flowGraphCounterBlock-B0uPkgw9.js +24 -0
  75. package/dist/flowGraphDataSwitchBlock-B0GSifvJ.js +27 -0
  76. package/dist/flowGraphDebounceBlock-CSw8zKym.js +24 -0
  77. package/dist/flowGraphDebugBlock-DiSR6Ahn.js +65 -0
  78. package/dist/flowGraphDoNBlock-C-48oQ2H.js +24 -0
  79. package/dist/flowGraphEasingBlock-DKUaE7Rp.js +50 -0
  80. package/dist/flowGraphFlipFlopBlock-DX5BGhMV.js +20 -0
  81. package/dist/flowGraphForLoopBlock-Di-Qwg23.js +27 -0
  82. package/dist/flowGraphFunctionReferenceBlock-D8X5TFsO.js +20 -0
  83. package/dist/flowGraphGLTFDataProvider-C4j7nPQv.js +16 -0
  84. package/dist/flowGraphGetAngularVelocityBlock-Cq-yTQ4D.js +31 -0
  85. package/dist/flowGraphGetAssetBlock-B36eioor.js +21 -0
  86. package/dist/flowGraphGetLinearVelocityBlock-MdrV0eUD.js +31 -0
  87. package/dist/flowGraphGetPhysicsMassPropertiesBlock-wXDZP1wM.js +30 -0
  88. package/dist/flowGraphGetPropertyBlock-eP0badwf.js +46 -0
  89. package/dist/flowGraphGetSoundVolumeBlock-D3gXGHXa.js +29 -0
  90. package/dist/flowGraphGetVariableBlock-C7-qZAec.js +31 -0
  91. package/dist/flowGraphIndexOfBlock-CC5l9n9P.js +31 -0
  92. package/dist/flowGraphInterpolationBlock-B6922jzt.js +50 -0
  93. package/dist/flowGraphIsKeyPressedBlock-X_iuiUOX.js +31 -0
  94. package/dist/flowGraphIsSoundPlayingBlock-DONQX8N8.js +29 -0
  95. package/dist/flowGraphJsonPointerParserBlock-DBH_gN8I.js +95 -0
  96. package/dist/flowGraphKeyDownEventBlock-D5T1Uyfv.js +26 -0
  97. package/dist/flowGraphKeyUpEventBlock-BPY_Kgkm.js +21 -0
  98. package/dist/flowGraphKeyboardEventBlock-C49fx3TC.js +20 -0
  99. package/dist/flowGraphMathBlocks-CkvrN3VJ.js +864 -0
  100. package/dist/flowGraphMathCombineExtractBlocks-QSjGlnoz.js +248 -0
  101. package/dist/flowGraphMatrixMathBlocks-B3D7Cz9p.js +117 -0
  102. package/dist/flowGraphMeshPickEventBlock-BBTz-taa.js +35 -0
  103. package/dist/flowGraphMultiGateBlock-BhY1y5BG.js +50 -0
  104. package/dist/flowGraphPauseAnimationBlock-CHZZXMbg.js +19 -0
  105. package/dist/flowGraphPauseSoundBlock-B7hMmJ0c.js +31 -0
  106. package/dist/flowGraphPhysicsCollisionEventBlock-CxoPpT-q.js +56 -0
  107. package/dist/flowGraphPlayAnimationBlock-DVAvIFux.js +99 -0
  108. package/dist/flowGraphPlaySoundBlock-DjHGrqbC.js +32 -0
  109. package/dist/flowGraphPointerDownEventBlock-qI-H0JST.js +31 -0
  110. package/dist/flowGraphPointerMoveEventBlock-DAi4VUyy.js +31 -0
  111. package/dist/flowGraphPointerOutEventBlock-CFtj68aC.js +21 -0
  112. package/dist/flowGraphPointerOverEventBlock-VxdHhFuu.js +23 -0
  113. package/dist/flowGraphPointerUpEventBlock-DRR1f07q.js +31 -0
  114. package/dist/flowGraphReceiveCustomEventBlock-B3bwdB66.js +52 -0
  115. package/dist/flowGraphSceneReadyEventBlock-Dy6lDT3j.js +23 -0
  116. package/dist/flowGraphSceneTickEventBlock-Bl9BF_Xw.js +32 -0
  117. package/dist/flowGraphSendCustomEventBlock-BAR4PGFq.js +35 -0
  118. package/dist/flowGraphSequenceBlock-veqU32ZZ.js +32 -0
  119. package/dist/flowGraphSetAngularVelocityBlock-Dj9b-zu6.js +31 -0
  120. package/dist/flowGraphSetDelayBlock-CMjudtvk.js +131 -0
  121. package/dist/flowGraphSetLinearVelocityBlock-DVDhhJBd.js +31 -0
  122. package/dist/flowGraphSetPhysicsMotionTypeBlock-CL3cxNCO.js +36 -0
  123. package/dist/flowGraphSetPropertyBlock-D3sWL3Ss.js +47 -0
  124. package/dist/flowGraphSetSoundVolumeBlock-CxVk45yR.js +32 -0
  125. package/dist/flowGraphSetVariableBlock-D1oJiwLj.js +47 -0
  126. package/dist/flowGraphSoundEndedEventBlock-CubEwii0.js +47 -0
  127. package/dist/flowGraphStopAnimationBlock-B9inwIQx.js +48 -0
  128. package/dist/flowGraphStopSoundBlock-BijIX2jC.js +31 -0
  129. package/dist/flowGraphSwitchBlock-BMhPb4OX.js +54 -0
  130. package/dist/flowGraphThrottleBlock-C7vrnkb1.js +37 -0
  131. package/dist/flowGraphTransformCoordinatesSystemBlock-DoISqaUG.js +29 -0
  132. package/dist/flowGraphTypeToTypeBlocks-CSML6QWx.js +57 -0
  133. package/dist/flowGraphUnaryOperationBlock-B0Shf-lJ.js +24 -0
  134. package/dist/flowGraphVectorMathBlocks-DoTRR_E0.js +178 -0
  135. package/dist/flowGraphWaitAllBlock-BvmDMc24.js +54 -0
  136. package/dist/flowGraphWhileLoopBlock-BaIq4-K2.js +27 -0
  137. package/dist/geometry.fragment-Bsis3UG2.js +275 -0
  138. package/dist/geometry.vertex-DskQ5b8j.js +222 -0
  139. package/dist/harmonicsFunctions-CtNrRfir.js +193 -0
  140. package/dist/harmonicsFunctions-PEz6APC7.js +18 -0
  141. package/dist/hdrTextureLoader-D9rYxJ9q.js +112 -0
  142. package/dist/helperFunctions-Bt7Zfkrp.js +89 -0
  143. package/dist/helperFunctions-CPmRxd37.js +121 -0
  144. package/dist/iesTextureLoader-BGUFjVhI.js +93 -0
  145. package/dist/index-CS3Icp_r.js +67657 -0
  146. package/dist/index.d.ts +23 -0
  147. package/dist/index.d.ts.map +1 -0
  148. package/dist/index.js +27 -0
  149. package/dist/ktxTextureLoader-cUaGg9_L.js +459 -0
  150. package/dist/lightFragment-BRDibDKG.js +404 -0
  151. package/dist/lightFragment-DCqtGMp_.js +402 -0
  152. package/dist/logDepthDeclaration-Bwm-3KyB.js +16 -0
  153. package/dist/logDepthDeclaration-gUfeSnXX.js +20 -0
  154. package/dist/logDepthVertex-CKeuJ6ae.js +213 -0
  155. package/dist/logDepthVertex-CXkmZels.js +459 -0
  156. package/dist/mesh.vertexData.functions-Bc9lJlrU.js +74 -0
  157. package/dist/oitFragment-B8zuQigp.js +792 -0
  158. package/dist/oitFragment-DH3h3T6x.js +657 -0
  159. package/dist/openpbr.fragment-BglYS6LA.js +1405 -0
  160. package/dist/openpbr.fragment-DrOTZs4m.js +1553 -0
  161. package/dist/openpbr.vertex-B-PaLFOR.js +384 -0
  162. package/dist/openpbr.vertex-DMdFRTnX.js +268 -0
  163. package/dist/openpbrMaterial-HCU0aOca.js +2880 -0
  164. package/dist/openpbrMaterialLoadingAdapter-CWRAa-7S.js +1122 -0
  165. package/dist/openpbrTransmissionLayerData-CfDVObj5.js +352 -0
  166. package/dist/openpbrUboDeclaration-CA2pvSbt.js +9 -0
  167. package/dist/openpbrUboDeclaration-xU8VOaib.js +10 -0
  168. package/dist/pass.fragment-1mMP54bb.js +10 -0
  169. package/dist/pass.fragment-DzaUp_jk.js +10 -0
  170. package/dist/passCube.fragment-CQaXS7g3.js +29 -0
  171. package/dist/passCube.fragment-QJGPwAXI.js +29 -0
  172. package/dist/pbr.fragment-BnaAAGxb.js +2775 -0
  173. package/dist/pbr.fragment-CYZk_EGU.js +2619 -0
  174. package/dist/pbr.vertex-CyvdCw91.js +372 -0
  175. package/dist/pbr.vertex-DJMAkDxs.js +270 -0
  176. package/dist/pbrBRDFFunctions-EugoWm6O.js +175 -0
  177. package/dist/pbrDebug-Bk3sPoEG.js +719 -0
  178. package/dist/pbrDebug-Cdalzb1I.js +614 -0
  179. package/dist/pbrIBLFunctions-B0bVAXCF.js +47 -0
  180. package/dist/pbrIBLFunctions-C06z-ouZ.js +51 -0
  181. package/dist/pbrMaterial-C4FCKBZQ.js +1660 -0
  182. package/dist/pbrMaterialLoadingAdapter-BGHlS_ZN.js +1032 -0
  183. package/dist/pbrUboDeclaration-1lN5_-Bw.js +9 -0
  184. package/dist/pbrUboDeclaration-BJOUUOZ2.js +10 -0
  185. package/dist/procedural.vertex-CFPKczKj.js +14 -0
  186. package/dist/procedural.vertex-DUW7bYZt.js +13 -0
  187. package/dist/rgbdDecode.fragment-CEGgE4tL.js +8 -0
  188. package/dist/rgbdDecode.fragment-FT0wkgah.js +8 -0
  189. package/dist/rgbdEncode.fragment-CLnJJf6E.js +8 -0
  190. package/dist/rgbdEncode.fragment-CaAcMsY9.js +8 -0
  191. package/dist/sceneUboDeclaration-B6oxsfcj.js +8 -0
  192. package/dist/sceneUboDeclaration-JByfVKik.js +13 -0
  193. package/dist/setupABB6700InstanceFactory.d.ts +7 -0
  194. package/dist/setupABB6700InstanceFactory.d.ts.map +1 -0
  195. package/dist/studio.env +0 -0
  196. package/dist/textureProcessor.fragment-BYPw6SMQ.js +152 -0
  197. package/dist/textureProcessor.fragment-Ciw9-F3w.js +157 -0
  198. package/dist/textureTools-Cct_bGgp.js +40 -0
  199. package/dist/tgaTextureLoader-BJOIdnFr.js +198 -0
  200. package/dist/thinEngine-Bt9FW4dD.js +2425 -0
  201. package/dist/webAudioBus-BUzRHSxr.js +88 -0
  202. package/dist/webAudioMainBus-Dds1TgJG.js +49 -0
  203. package/package.json +49 -0
@@ -0,0 +1,719 @@
1
+ import { b0 as e } from "./index-CS3Icp_r.js";
2
+ import "./logDepthDeclaration-Bwm-3KyB.js";
3
+ import "./oitFragment-DH3h3T6x.js";
4
+ const t = "pbrFragmentExtraDeclaration", v = `varying vPositionW: vec3f;
5
+ #if DEBUGMODE>0
6
+ varying vClipSpacePosition: vec4f;
7
+ #endif
8
+ #include<mainUVVaryingDeclaration>[1..7]
9
+ #ifdef NORMAL
10
+ varying vNormalW: vec3f;
11
+ #if defined(USESPHERICALFROMREFLECTIONMAP) && defined(USESPHERICALINVERTEX)
12
+ varying vEnvironmentIrradiance: vec3f;
13
+ #endif
14
+ #endif
15
+ #if defined(VERTEXCOLOR) || defined(INSTANCESCOLOR) && defined(INSTANCES)
16
+ varying vColor: vec4f;
17
+ #endif
18
+ #if defined(CLUSTLIGHT_BATCH) && CLUSTLIGHT_BATCH>0
19
+ varying vViewDepth: f32;
20
+ #endif
21
+ `;
22
+ e.IncludesShadersStoreWGSL[t] || (e.IncludesShadersStoreWGSL[t] = v);
23
+ const i = "subSurfaceScatteringFunctions", g = `fn testLightingForSSS(diffusionProfile: f32)->bool
24
+ {return diffusionProfile<1.;}`;
25
+ e.IncludesShadersStoreWGSL[i] || (e.IncludesShadersStoreWGSL[i] = g);
26
+ const f = "importanceSampling", h = `fn hemisphereCosSample(u: vec2f)->vec3f {var phi: f32=2.*PI*u.x;var cosTheta2: f32=1.-u.y;var cosTheta: f32=sqrt(cosTheta2);var sinTheta: f32=sqrt(1.-cosTheta2);return vec3f(sinTheta*cos(phi),sinTheta*sin(phi),cosTheta);}
27
+ fn hemisphereImportanceSampleDggx(u: vec2f,a: f32)->vec3f {var phi: f32=2.*PI*u.x;var cosTheta2: f32=(1.-u.y)/(1.+(a+1.)*((a-1.)*u.y));var cosTheta: f32=sqrt(cosTheta2);var sinTheta: f32=sqrt(1.-cosTheta2);return vec3f(sinTheta*cos(phi),sinTheta*sin(phi),cosTheta);}
28
+ fn hemisphereImportanceSampleDggxAnisotropic(Xi: vec2f,alphaTangent: f32,alphaBitangent: f32)->vec3f
29
+ {let alphaT: f32=max(alphaTangent,0.0001);let alphaB: f32=max(alphaBitangent,0.0001);var phi: f32=atan(alphaB/alphaT*tan(2.0f*PI*Xi.x));if (Xi.x>0.5) {phi+=PI; }
30
+ let cosPhi: f32=cos(phi);let sinPhi: f32=sin(phi);let alpha2: f32=(cosPhi*cosPhi)/(alphaT*alphaT) +
31
+ (sinPhi*sinPhi)/(alphaB*alphaB);let tanTheta2: f32=Xi.y/(1.0f-Xi.y)/alpha2;let cosTheta: f32=1.0f/sqrt(1.0f+tanTheta2);let sinTheta: f32=sqrt(max(0.0f,1.0f-cosTheta*cosTheta));return vec3f(sinTheta*cosPhi,sinTheta*sinPhi,cosTheta);}
32
+ fn hemisphereImportanceSampleDCharlie(u: vec2f,a: f32)->vec3f {
33
+ var phi: f32=2.*PI*u.x;var sinTheta: f32=pow(u.y,a/(2.*a+1.));var cosTheta: f32=sqrt(1.-sinTheta*sinTheta);return vec3f(sinTheta*cos(phi),sinTheta*sin(phi),cosTheta);}`;
34
+ e.IncludesShadersStoreWGSL[f] || (e.IncludesShadersStoreWGSL[f] = h);
35
+ const r = "pbrHelperFunctions", p = `#define MINIMUMVARIANCE 0.0005
36
+ #ifndef TEXRD_DEFINED
37
+ fn TEXRD(t: texture_2d<f32>,ts: sampler,uv: vec2f)->vec4f {return textureSample(t,ts,uv);}
38
+ #define TEXRD_DEFINED
39
+ #endif
40
+ fn convertRoughnessToAverageSlope(roughness: f32)->f32
41
+ {return roughness*roughness+MINIMUMVARIANCE;}
42
+ fn fresnelGrazingReflectance(reflectance0: f32)->f32 {var reflectance90: f32=saturate(reflectance0*25.0);return reflectance90;}
43
+ fn getAARoughnessFactors(normalVector: vec3f)->vec2f {
44
+ #ifdef SPECULARAA
45
+ var nDfdx: vec3f=dpdx(normalVector.xyz);var nDfdy: vec3f=dpdy(normalVector.xyz);var slopeSquare: f32=max(dot(nDfdx,nDfdx),dot(nDfdy,nDfdy));var geometricRoughnessFactor: f32=pow(saturate(slopeSquare),0.333);var geometricAlphaGFactor: f32=sqrt(slopeSquare);geometricAlphaGFactor*=0.75;return vec2f(geometricRoughnessFactor,geometricAlphaGFactor);
46
+ #else
47
+ return vec2f(0.);
48
+ #endif
49
+ }
50
+ #ifdef ANISOTROPIC
51
+ #ifdef ANISOTROPIC_LEGACY
52
+ fn getAnisotropicRoughness(alphaG: f32,anisotropy: f32)->vec2f {var alphaT: f32=max(alphaG*(1.0+anisotropy),MINIMUMVARIANCE);var alphaB: f32=max(alphaG*(1.0-anisotropy),MINIMUMVARIANCE);return vec2f(alphaT,alphaB);}
53
+ fn getAnisotropicBentNormals(T: vec3f,B: vec3f,N: vec3f,V: vec3f,anisotropy: f32,roughness: f32)->vec3f {var anisotropicFrameDirection: vec3f=select(T,B,anisotropy>=0.0);var anisotropicFrameTangent: vec3f=cross(normalize(anisotropicFrameDirection),V);var anisotropicFrameNormal: vec3f=cross(anisotropicFrameTangent,anisotropicFrameDirection);var anisotropicNormal: vec3f=normalize(mix(N,anisotropicFrameNormal,abs(anisotropy)));return anisotropicNormal;}
54
+ #elif ANISOTROPIC_OPENPBR
55
+ fn getAnisotropicRoughness(alphaG: f32,anisotropy: f32)->vec2f {var alphaT: f32=max(alphaG*alphaG*sqrt(2.0/(1.0+(1.0-anisotropy)*(1.0-anisotropy))),MINIMUMVARIANCE);var alphaB: f32=max(alphaT*(1.0-anisotropy),MINIMUMVARIANCE);return vec2f(alphaT,alphaB);}
56
+ #else
57
+ fn getAnisotropicRoughness(alphaG: f32,anisotropy: f32)->vec2f {var alphaT: f32=max(mix(alphaG,1.0,anisotropy*anisotropy),MINIMUMVARIANCE);var alphaB: f32=max(alphaG,MINIMUMVARIANCE);return vec2f(alphaT,alphaB);}
58
+ fn getAnisotropicBentNormals(T: vec3f,B: vec3f,N: vec3f,V: vec3f,anisotropy: f32,roughness: f32)->vec3f {var bentNormal: vec3f=cross(B,V);bentNormal=normalize(cross(bentNormal,B));var sq=1.0-anisotropy*(1.0-roughness);var a: f32=sq*sq*sq*sq;bentNormal=normalize(mix(bentNormal,N,a));return bentNormal;}
59
+ #endif
60
+ #endif
61
+ #if defined(CLEARCOAT) || defined(SS_REFRACTION)
62
+ fn cocaLambertVec3(alpha: vec3f,distance: f32)->vec3f {return exp(-alpha*distance);}
63
+ fn cocaLambert(NdotVRefract: f32,NdotLRefract: f32,alpha: vec3f,thickness: f32)->vec3f {return cocaLambertVec3(alpha,(thickness*((NdotLRefract+NdotVRefract)/(NdotLRefract*NdotVRefract))));}
64
+ fn computeColorAtDistanceInMedia(color: vec3f,distance: f32)->vec3f {return -log(color)/distance;}
65
+ fn computeClearCoatAbsorption(NdotVRefract: f32,NdotLRefract: f32,clearCoatColor: vec3f,clearCoatThickness: f32,clearCoatIntensity: f32)->vec3f {var clearCoatAbsorption: vec3f=mix( vec3f(1.0),
66
+ cocaLambert(NdotVRefract,NdotLRefract,clearCoatColor,clearCoatThickness),
67
+ clearCoatIntensity);return clearCoatAbsorption;}
68
+ #endif
69
+ #ifdef MICROSURFACEAUTOMATIC
70
+ fn computeDefaultMicroSurface(microSurface: f32,reflectivityColor: vec3f)->f32
71
+ {const kReflectivityNoAlphaWorkflow_SmoothnessMax: f32=0.95;var reflectivityLuminance: f32=getLuminance(reflectivityColor);var reflectivityLuma: f32=sqrt(reflectivityLuminance);var resultMicroSurface=reflectivityLuma*kReflectivityNoAlphaWorkflow_SmoothnessMax;return resultMicroSurface;}
72
+ #endif
73
+ `;
74
+ e.IncludesShadersStoreWGSL[r] || (e.IncludesShadersStoreWGSL[r] = p);
75
+ const n = "pbrDirectLightingSetupFunctions", E = `struct preLightingInfo
76
+ {lightOffset: vec3f,
77
+ lightDistanceSquared: f32,
78
+ lightDistance: f32,
79
+ attenuation: f32,
80
+ L: vec3f,
81
+ H: vec3f,
82
+ NdotV: f32,
83
+ NdotLUnclamped: f32,
84
+ NdotL: f32,
85
+ VdotH: f32,
86
+ LdotV: f32,
87
+ roughness: f32,
88
+ diffuseRoughness: f32,
89
+ surfaceAlbedo: vec3f,
90
+ #ifdef IRIDESCENCE
91
+ iridescenceIntensity: f32
92
+ #endif
93
+ #if defined(AREALIGHTUSED) && defined(AREALIGHTSUPPORTED)
94
+ areaLightDiffuse: vec3f,
95
+ #ifdef SPECULARTERM
96
+ areaLightSpecular: vec3f,
97
+ areaLightFresnel: vec4f
98
+ #endif
99
+ #endif
100
+ };fn computePointAndSpotPreLightingInfo(lightData: vec4f,V: vec3f,N: vec3f,posW: vec3f)->preLightingInfo {var result: preLightingInfo;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);return result;}
101
+ fn computeDirectionalPreLightingInfo(lightData: vec4f,V: vec3f,N: vec3f)->preLightingInfo {var result: preLightingInfo;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);return result;}
102
+ fn computeHemisphericPreLightingInfo(lightData: vec4f,V: vec3f,N: vec3f)->preLightingInfo {var result: preLightingInfo;result.NdotL=dot(N,lightData.xyz)*0.5+0.5;result.NdotL=saturateEps(result.NdotL);result.NdotLUnclamped=result.NdotL;
103
+ #ifdef SPECULARTERM
104
+ result.L=normalize(lightData.xyz);result.H=normalize(V+result.L);result.VdotH=saturate(dot(V,result.H));
105
+ #endif
106
+ return result;}
107
+ #if defined(AREALIGHTUSED) && defined(AREALIGHTSUPPORTED)
108
+ #include<ltcHelperFunctions>
109
+ var areaLightsLTC1SamplerSampler: sampler;var areaLightsLTC1Sampler: texture_2d<f32>;var areaLightsLTC2SamplerSampler: sampler;var areaLightsLTC2Sampler: texture_2d<f32>;fn computeAreaPreLightingInfo(ltc1: texture_2d<f32>,ltc1Sampler:sampler,ltc2:texture_2d<f32>,ltc2Sampler:sampler,viewDirectionW: vec3f,vNormal:vec3f,vPosition:vec3f,lightCenter:vec3f,halfWidth:vec3f, halfHeight:vec3f,roughness:f32)->preLightingInfo {var result: preLightingInfo;var data: areaLightData=computeAreaLightSpecularDiffuseFresnel(ltc1,ltc1Sampler,ltc2,ltc2Sampler,viewDirectionW,vNormal,vPosition,lightCenter,halfWidth,halfHeight,roughness);
110
+ #ifdef SPECULARTERM
111
+ result.areaLightFresnel=data.Fresnel;result.areaLightSpecular=data.Specular;
112
+ #endif
113
+ result.areaLightDiffuse+=data.Diffuse;return result;}
114
+ fn computeAreaPreLightingInfoWithTexture(ltc1: texture_2d<f32>,ltc1Sampler:sampler,ltc2:texture_2d<f32>,ltc2Sampler:sampler,emissionTexture:texture_2d<f32>,emissionTextureSampler:sampler,viewDirectionW: vec3f,vNormal:vec3f,vPosition:vec3f,lightCenter:vec3f,halfWidth:vec3f, halfHeight:vec3f,roughness:f32)->preLightingInfo {var result: preLightingInfo;result.lightOffset=lightCenter-vPosition;result.lightDistanceSquared=dot(result.lightOffset,result.lightOffset);result.lightDistance=sqrt(result.lightDistanceSquared);var data: areaLightData=computeAreaLightSpecularDiffuseFresnelWithEmission(ltc1,ltc1Sampler,ltc2,ltc2Sampler,emissionTexture,emissionTextureSampler,viewDirectionW,vNormal,vPosition,lightCenter,halfWidth,halfHeight,roughness);
115
+ #ifdef SPECULARTERM
116
+ result.areaLightFresnel=data.Fresnel;result.areaLightSpecular=data.Specular;
117
+ #endif
118
+ result.areaLightDiffuse=data.Diffuse;result.LdotV=0.;result.roughness=0.;result.diffuseRoughness=0.;result.surfaceAlbedo=vec3f(0.);return result;}
119
+ #endif
120
+ `;
121
+ e.IncludesShadersStoreWGSL[n] || (e.IncludesShadersStoreWGSL[n] = E);
122
+ const o = "pbrDirectLightingFalloffFunctions", L = `fn computeDistanceLightFalloff_Standard(lightOffset: vec3f,range: f32)->f32
123
+ {return max(0.,1.0-length(lightOffset)/range);}
124
+ fn computeDistanceLightFalloff_Physical(lightDistanceSquared: f32)->f32
125
+ {return 1.0/maxEps(lightDistanceSquared);}
126
+ fn computeDistanceLightFalloff_GLTF(lightDistanceSquared: f32,inverseSquaredRange: f32)->f32
127
+ {var lightDistanceFalloff: f32=1.0/maxEps(lightDistanceSquared);var factor: f32=lightDistanceSquared*inverseSquaredRange;var attenuation: f32=saturate(1.0-factor*factor);attenuation*=attenuation;lightDistanceFalloff*=attenuation;return lightDistanceFalloff;}
128
+ fn computeDirectionalLightFalloff_IES(lightDirection: vec3f,directionToLightCenterW: vec3f,iesLightTexture: texture_2d<f32>,iesLightTextureSampler: sampler)->f32
129
+ {var cosAngle: f32=dot(-lightDirection,directionToLightCenterW);var angle=acos(cosAngle)/PI;return textureSampleLevel(iesLightTexture,iesLightTextureSampler,vec2f(angle,0),0.).r;}
130
+ fn computeDistanceLightFalloff(lightOffset: vec3f,lightDistanceSquared: f32,range: f32,inverseSquaredRange: f32)->f32
131
+ {
132
+ #ifdef USEPHYSICALLIGHTFALLOFF
133
+ return computeDistanceLightFalloff_Physical(lightDistanceSquared);
134
+ #elif defined(USEGLTFLIGHTFALLOFF)
135
+ return computeDistanceLightFalloff_GLTF(lightDistanceSquared,inverseSquaredRange);
136
+ #else
137
+ return computeDistanceLightFalloff_Standard(lightOffset,range);
138
+ #endif
139
+ }
140
+ fn computeDirectionalLightFalloff_Standard(lightDirection: vec3f,directionToLightCenterW: vec3f,cosHalfAngle: f32,exponent: f32)->f32
141
+ {var falloff: f32=0.0;var cosAngle: f32=maxEps(dot(-lightDirection,directionToLightCenterW));if (cosAngle>=cosHalfAngle)
142
+ {falloff=max(0.,pow(cosAngle,exponent));}
143
+ return falloff;}
144
+ fn computeDirectionalLightFalloff_Physical(lightDirection: vec3f,directionToLightCenterW: vec3f,cosHalfAngle: f32)->f32
145
+ {const kMinusLog2ConeAngleIntensityRatio: f32=6.64385618977;
146
+ var concentrationKappa: f32=kMinusLog2ConeAngleIntensityRatio/(1.0-cosHalfAngle);var lightDirectionSpreadSG: vec4f= vec4f(-lightDirection*concentrationKappa,-concentrationKappa);var falloff: f32=exp2(dot( vec4f(directionToLightCenterW,1.0),lightDirectionSpreadSG));return falloff;}
147
+ fn computeDirectionalLightFalloff_GLTF(lightDirection: vec3f,directionToLightCenterW: vec3f,lightAngleScale: f32,lightAngleOffset: f32)->f32
148
+ {var cd: f32=dot(-lightDirection,directionToLightCenterW);var falloff: f32=saturate(cd*lightAngleScale+lightAngleOffset);falloff*=falloff;return falloff;}
149
+ fn computeDirectionalLightFalloff(lightDirection: vec3f,directionToLightCenterW: vec3f,cosHalfAngle: f32,exponent: f32,lightAngleScale: f32,lightAngleOffset: f32)->f32
150
+ {
151
+ #ifdef USEPHYSICALLIGHTFALLOFF
152
+ return computeDirectionalLightFalloff_Physical(lightDirection,directionToLightCenterW,cosHalfAngle);
153
+ #elif defined(USEGLTFLIGHTFALLOFF)
154
+ return computeDirectionalLightFalloff_GLTF(lightDirection,directionToLightCenterW,lightAngleScale,lightAngleOffset);
155
+ #else
156
+ return computeDirectionalLightFalloff_Standard(lightDirection,directionToLightCenterW,cosHalfAngle,exponent);
157
+ #endif
158
+ }`;
159
+ e.IncludesShadersStoreWGSL[o] || (e.IncludesShadersStoreWGSL[o] = L);
160
+ const a = "hdrFilteringFunctions", m = `#ifdef NUM_SAMPLES
161
+ #if NUM_SAMPLES>0
162
+ fn radicalInverse_VdC(value: u32)->f32
163
+ {var bits=(value<<16u) | (value>>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 f32(bits)*2.3283064365386963e-10; }
164
+ fn hammersley(i: u32,N: u32)->vec2f
165
+ {return vec2f( f32(i)/ f32(N),radicalInverse_VdC(i));}
166
+ fn log4(x: f32)->f32 {return log2(x)/2.;}
167
+ fn uv_to_normal(uv: vec2f)->vec3f {var N: vec3f;var uvRange: vec2f=uv;var theta: f32=uvRange.x*2.0*PI;var phi: f32=uvRange.y*PI;N.x=cos(theta)*sin(phi);N.z=sin(theta)*sin(phi);N.y=cos(phi);return N;}
168
+ const NUM_SAMPLES_FLOAT: f32= f32(NUM_SAMPLES);const NUM_SAMPLES_FLOAT_INVERSED: f32=1./NUM_SAMPLES_FLOAT;const K: f32=4.;fn irradiance(
169
+ #ifdef CUSTOM_IRRADIANCE_FILTERING_INPUT
170
+ CUSTOM_IRRADIANCE_FILTERING_INPUT
171
+ #else
172
+ inputTexture: texture_cube<f32>,inputSampler: sampler,
173
+ #endif
174
+ inputN: vec3f,
175
+ filteringInfo: vec2f,
176
+ diffuseRoughness: f32,
177
+ surfaceAlbedo: vec3f,
178
+ inputV: vec3f
179
+ #ifdef IBL_CDF_FILTERING
180
+ ,icdfSampler: texture_2d<f32>,icdfSamplerSampler: sampler
181
+ #endif
182
+ )->vec3f
183
+ {var n: vec3f=normalize(inputN);var result: vec3f= vec3f(0.0);
184
+ #ifndef IBL_CDF_FILTERING
185
+ var tangent: vec3f=select(vec3f(1.,0.,0.),vec3f(0.,0.,1.),abs(n.z)<0.999);tangent=normalize(cross(tangent,n));var bitangent: vec3f=cross(n,tangent);var tbn: mat3x3f= mat3x3f(tangent,bitangent,n);var tbnInverse: mat3x3f=transpose(tbn);
186
+ #endif
187
+ var maxLevel: f32=filteringInfo.y;var dim0: f32=filteringInfo.x;var omegaP: f32=(4.*PI)/(6.*dim0*dim0);var clampedAlbedo: vec3f=clamp(surfaceAlbedo,vec3f(0.1),vec3f(1.0));for(var i: u32=0u; i<NUM_SAMPLES; i++)
188
+ {var Xi: vec2f=hammersley(i,NUM_SAMPLES);
189
+ #ifdef IBL_CDF_FILTERING
190
+ var T: vec2f;T.x=textureSampleLevel(icdfSampler,icdfSamplerSampler,vec2(Xi.x,0.0),0.0).x;T.y=textureSampleLevel(icdfSampler,icdfSamplerSampler,vec2(T.x,Xi.y),0.0).y;var Ls: vec3f=uv_to_normal(vec2f(1.0-fract(T.x+0.25),T.y));var NoL: f32=dot(n,Ls);var NoV: f32=dot(n,inputV);
191
+ #if BASE_DIFFUSE_MODEL==BRDF_DIFFUSE_MODEL_EON
192
+ var LoV: f32=dot(Ls,inputV);
193
+ #elif BASE_DIFFUSE_MODEL==BRDF_DIFFUSE_MODEL_BURLEY
194
+ var H: vec3f=(inputV+Ls)*0.5;var VoH: f32=dot(inputV,H);
195
+ #endif
196
+ #else
197
+ var Ls: vec3f=hemisphereCosSample(Xi);Ls=normalize(Ls);var Ns: vec3f= vec3f(0.,0.,1.);var NoL: f32=dot(Ns,Ls);var V: vec3f=tbnInverse*inputV;var NoV: f32=dot(Ns,V);
198
+ #if BASE_DIFFUSE_MODEL==BRDF_DIFFUSE_MODEL_EON
199
+ var LoV: f32=dot(Ls,V);
200
+ #elif BASE_DIFFUSE_MODEL==BRDF_DIFFUSE_MODEL_BURLEY
201
+ var H: vec3f=(V+Ls)*0.5;var VoH: f32=dot(V,H);
202
+ #endif
203
+ #endif
204
+ if (NoL>0.) {
205
+ #ifdef IBL_CDF_FILTERING
206
+ var pdf: f32=textureSampleLevel(icdfSampler,icdfSamplerSampler,T,0.0).z;var c: vec3f=textureSampleLevel(inputTexture,inputSampler,Ls,0.0).rgb;
207
+ #else
208
+ var pdf_inversed: f32=PI/NoL;var omegaS: f32=NUM_SAMPLES_FLOAT_INVERSED*pdf_inversed;var l: f32=log4(omegaS)-log4(omegaP)+log4(K);var mipLevel: f32=clamp(l,0.0,maxLevel);
209
+ #ifdef CUSTOM_IRRADIANCE_FILTERING_FUNCTION
210
+ CUSTOM_IRRADIANCE_FILTERING_FUNCTION
211
+ #else
212
+ var c: vec3f=textureSampleLevel(inputTexture,inputSampler,tbn*Ls,mipLevel).rgb;
213
+ #endif
214
+ #endif
215
+ #ifdef GAMMA_INPUT
216
+ c=toLinearSpaceVec3(c);
217
+ #endif
218
+ var diffuseRoughnessTerm: vec3f=vec3f(1.0);
219
+ #if BASE_DIFFUSE_MODEL==BRDF_DIFFUSE_MODEL_EON
220
+ diffuseRoughnessTerm=diffuseBRDF_EON(clampedAlbedo,diffuseRoughness,NoL,NoV,LoV)*PI;
221
+ #elif BASE_DIFFUSE_MODEL==BRDF_DIFFUSE_MODEL_BURLEY
222
+ diffuseRoughnessTerm=vec3f(diffuseBRDF_Burley(NoL,NoV,VoH,diffuseRoughness)*PI);
223
+ #endif
224
+ #ifdef IBL_CDF_FILTERING
225
+ var light: vec3f=vec3f(0.0);if (pdf>1e-6) {light=vec3f(1.0)/vec3f(pdf)*c;}
226
+ result+=NoL*diffuseRoughnessTerm*light;
227
+ #else
228
+ result+=c*diffuseRoughnessTerm;
229
+ #endif
230
+ }}
231
+ result=result*NUM_SAMPLES_FLOAT_INVERSED;
232
+ #if BASE_DIFFUSE_MODEL==BRDF_DIFFUSE_MODEL_EON
233
+ result=result/clampedAlbedo;
234
+ #endif
235
+ return result;}
236
+ fn radiance(alphaG: f32,inputTexture: texture_cube<f32>,inputSampler: sampler,inputN: vec3f,filteringInfo: vec2f)->vec3f
237
+ {var n: vec3f=normalize(inputN);var c: vec3f=textureSampleLevel(inputTexture,inputSampler,n,0.0).rgb;
238
+ if (alphaG==0.) {
239
+ #ifdef GAMMA_INPUT
240
+ c=toLinearSpaceVec3(c);
241
+ #endif
242
+ return c;} else {var result: vec3f= vec3f(0.);var tangent: vec3f=select(vec3f(1.,0.,0.),vec3f(0.,0.,1.),abs(n.z)<0.999);tangent=normalize(cross(tangent,n));var bitangent: vec3f=cross(n,tangent);var tbn: mat3x3f= mat3x3f(tangent,bitangent,n);var maxLevel: f32=filteringInfo.y;var dim0: f32=filteringInfo.x;var omegaP: f32=(4.*PI)/(6.*dim0*dim0);var weight: f32=0.;for(var i: u32=0u; i<NUM_SAMPLES; i++)
243
+ {var Xi: vec2f=hammersley(i,NUM_SAMPLES);var H: vec3f=hemisphereImportanceSampleDggx(Xi,alphaG);var NoV: f32=1.;var NoH: f32=H.z;var NoH2: f32=H.z*H.z;var NoL: f32=2.*NoH2-1.;var L: vec3f= vec3f(2.*NoH*H.x,2.*NoH*H.y,NoL);L=normalize(L);if (NoL>0.) {var pdf_inversed: f32=4./normalDistributionFunction_TrowbridgeReitzGGX(NoH,alphaG);var omegaS: f32=NUM_SAMPLES_FLOAT_INVERSED*pdf_inversed;var l: f32=log4(omegaS)-log4(omegaP)+log4(K);var mipLevel: f32=clamp( f32(l),0.0,maxLevel);weight+=NoL;var c: vec3f=textureSampleLevel(inputTexture,inputSampler,tbn*L,mipLevel).rgb;
244
+ #ifdef GAMMA_INPUT
245
+ c=toLinearSpaceVec3(c);
246
+ #endif
247
+ result+=c*NoL;}}
248
+ result=result/weight;return result;}}
249
+ #ifdef ANISOTROPIC
250
+ fn radianceAnisotropic(
251
+ alphaTangent: f32,
252
+ alphaBitangent: f32,
253
+ inputTexture: texture_cube<f32>,
254
+ inputSampler: sampler,
255
+ inputView: vec3f,
256
+ inputTangent: vec3f,
257
+ inputBitangent: vec3f,
258
+ inputNormal: vec3f,
259
+ filteringInfo: vec2f,
260
+ noiseInput: vec2f,
261
+ isRefraction: bool,
262
+ ior: f32
263
+ )->vec3f {var V: vec3f=inputView;var N: vec3f=inputNormal;var T: vec3f=inputTangent;var B: vec3f=inputBitangent;var result: vec3f=vec3f(0.f);var maxLevel: f32=filteringInfo.y;var dim0: f32=filteringInfo.x;let clampedAlphaT: f32=max(alphaTangent,MINIMUMVARIANCE);let clampedAlphaB: f32=max(alphaBitangent,MINIMUMVARIANCE);var effectiveDim: f32=dim0*sqrt(clampedAlphaT*clampedAlphaB);var omegaP: f32=(4.f*PI)/(6.f*effectiveDim*effectiveDim);let noiseScale: f32=clamp(log2(f32(NUM_SAMPLES))/12.0f,0.0f,1.0f);var weight: f32=0.f;for(var i: u32=0u; i<NUM_SAMPLES; i++)
264
+ {var Xi: vec2f=hammersley(i,NUM_SAMPLES);Xi=fract(Xi+noiseInput*mix(0.5f,0.015f,noiseScale));
265
+ var H_tangent: vec3f=hemisphereImportanceSampleDggxAnisotropic(Xi,clampedAlphaT,clampedAlphaB);var H: vec3f=normalize(H_tangent.x*T+H_tangent.y*B+H_tangent.z*N);var L: vec3f;if (isRefraction) {L=refract(-V,H,1.0/ior);} else {L=reflect(-V,H);}
266
+ var NoH: f32=max(dot(N,H),0.001f);var VoH: f32=max(dot(V,H),0.001f);var NoL: f32=max(dot(N,L),0.001f);if (NoL>0.f) {var pdf_inversed: f32=4./normalDistributionFunction_BurleyGGX_Anisotropic(
267
+ H_tangent.z,H_tangent.x,H_tangent.y,vec2f(clampedAlphaT,clampedAlphaB)
268
+ );var omegaS: f32=NUM_SAMPLES_FLOAT_INVERSED*pdf_inversed;var l: f32=log4(omegaS)-log4(omegaP)+log4(K);var mipLevel: f32=clamp(l,0.0f,maxLevel);weight+=NoL;var c: vec3f=textureSampleLevel(inputTexture,inputSampler,L,mipLevel).rgb;
269
+ #if GAMMA_INPUT
270
+ c=toLinearSpaceVec3(c);
271
+ #endif
272
+ result+=c*NoL;}}
273
+ result=result/weight;return result;}
274
+ #endif
275
+ #endif
276
+ #endif
277
+ `;
278
+ e.IncludesShadersStoreWGSL[a] || (e.IncludesShadersStoreWGSL[a] = m);
279
+ const l = "pbrBlockReflectance0", S = `var reflectanceF0: f32=reflectivityOut.reflectanceF0;var specularEnvironmentR0: vec3f=reflectivityOut.colorReflectanceF0;var specularEnvironmentR90: vec3f= reflectivityOut.reflectanceF90;
280
+ #ifdef ALPHAFRESNEL
281
+ var reflectance90: f32=fresnelGrazingReflectance(reflectanceF0);specularEnvironmentR90=specularEnvironmentR90*reflectance90;
282
+ #endif
283
+ `;
284
+ e.IncludesShadersStoreWGSL[l] || (e.IncludesShadersStoreWGSL[l] = S);
285
+ const c = "pbrDirectLightingFunctions", D = `#define CLEARCOATREFLECTANCE90 1.0
286
+ struct lightingInfo
287
+ {diffuse: vec3f,
288
+ #ifdef SS_TRANSLUCENCY
289
+ diffuseTransmission: vec3f,
290
+ #endif
291
+ #ifdef SPECULARTERM
292
+ specular: vec3f,
293
+ #endif
294
+ #ifdef CLEARCOAT
295
+ clearCoat: vec4f,
296
+ #endif
297
+ #ifdef SHEEN
298
+ sheen: vec3f
299
+ #endif
300
+ };fn adjustRoughnessFromLightProperties(roughness: f32,lightRadius: f32,lightDistance: f32)->f32 {
301
+ #if defined(USEPHYSICALLIGHTFALLOFF) || defined(USEGLTFLIGHTFALLOFF)
302
+ var lightRoughness: f32=lightRadius/lightDistance;var totalRoughness: f32=saturate(lightRoughness+roughness);return totalRoughness;
303
+ #else
304
+ return roughness;
305
+ #endif
306
+ }
307
+ fn computeHemisphericDiffuseLighting(info: preLightingInfo,lightColor: vec3f,groundColor: vec3f)->vec3f {return mix(groundColor,lightColor,info.NdotL);}
308
+ #if defined(AREALIGHTUSED) && defined(AREALIGHTSUPPORTED)
309
+ fn computeAreaDiffuseLighting(info: preLightingInfo,lightColor: vec3f)->vec3f {return info.areaLightDiffuse*lightColor;}
310
+ #endif
311
+ fn computeDiffuseLighting(info: preLightingInfo,lightColor: vec3f)->vec3f {var diffuseTerm: vec3f=vec3f(1.0/PI);
312
+ #if BASE_DIFFUSE_MODEL==BRDF_DIFFUSE_MODEL_LEGACY
313
+ diffuseTerm=vec3f(diffuseBRDF_Burley(info.NdotL,info.NdotV,info.VdotH,info.roughness));
314
+ #elif BASE_DIFFUSE_MODEL==BRDF_DIFFUSE_MODEL_BURLEY
315
+ diffuseTerm=vec3f(diffuseBRDF_Burley(info.NdotL,info.NdotV,info.VdotH,info.diffuseRoughness));
316
+ #elif BASE_DIFFUSE_MODEL==BRDF_DIFFUSE_MODEL_EON
317
+ var clampedAlbedo: vec3f=clamp(info.surfaceAlbedo,vec3f(0.1),vec3f(1.0));diffuseTerm=diffuseBRDF_EON(clampedAlbedo,info.diffuseRoughness,info.NdotL,info.NdotV,info.LdotV);diffuseTerm/=clampedAlbedo;
318
+ #endif
319
+ return diffuseTerm*info.attenuation*info.NdotL*lightColor;}
320
+ fn computeProjectionTextureDiffuseLighting(projectionLightTexture: texture_2d<f32>,projectionLightSampler: sampler,textureProjectionMatrix: mat4x4f,posW: vec3f)->vec3f{var strq: vec4f=textureProjectionMatrix* vec4f(posW,1.0);strq/=strq.w;var textureColor: vec3f=textureSample(projectionLightTexture,projectionLightSampler,strq.xy).rgb;return toLinearSpaceVec3(textureColor);}
321
+ #ifdef SS_TRANSLUCENCY
322
+ fn computeDiffuseTransmittedLighting(info: preLightingInfo,lightColor: vec3f,transmittance: vec3f)->vec3f {var transmittanceNdotL=vec3f(0.0);var NdotL: f32=absEps(info.NdotLUnclamped);
323
+ #ifndef SS_TRANSLUCENCY_LEGACY
324
+ if (info.NdotLUnclamped<0.0) {
325
+ #endif
326
+ var wrapNdotL: f32=computeWrappedDiffuseNdotL(NdotL,0.02);var trAdapt: f32=step(0.,info.NdotLUnclamped);transmittanceNdotL=mix(transmittance*wrapNdotL, vec3f(wrapNdotL),trAdapt);
327
+ #ifndef SS_TRANSLUCENCY_LEGACY
328
+ }
329
+ var diffuseTerm : vec3f=vec3f(1.0/PI);
330
+ #if BASE_DIFFUSE_MODEL==BRDF_DIFFUSE_MODEL_LEGACY
331
+ diffuseTerm=vec3f(diffuseBRDF_Burley(
332
+ info.NdotL,info.NdotV,info.VdotH,info.roughness));
333
+ #elif BASE_DIFFUSE_MODEL==BRDF_DIFFUSE_MODEL_BURLEY
334
+ diffuseTerm=vec3f(diffuseBRDF_Burley(
335
+ info.NdotL,info.NdotV,info.VdotH,info.diffuseRoughness));
336
+ #elif BASE_DIFFUSE_MODEL==BRDF_DIFFUSE_MODEL_EON
337
+ var clampedAlbedo: vec3f=clamp(info.surfaceAlbedo,vec3f(0.1),vec3f(1.0));diffuseTerm=diffuseBRDF_EON(clampedAlbedo,info.diffuseRoughness,
338
+ info.NdotL,info.NdotV,info.LdotV);diffuseTerm/=clampedAlbedo;
339
+ #endif
340
+ return (transmittanceNdotL*diffuseTerm)*info.attenuation*lightColor;
341
+ #else
342
+ let diffuseTerm=diffuseBRDF_Burley(NdotL,info.NdotV,info.VdotH,info.roughness);return diffuseTerm*transmittanceNdotL*info.attenuation*lightColor;
343
+ #endif
344
+ }
345
+ #endif
346
+ #ifdef SPECULARTERM
347
+ fn computeSpecularLighting(info: preLightingInfo,N: vec3f,reflectance0: vec3f,fresnel: vec3f,geometricRoughnessFactor: f32,lightColor: vec3f)->vec3f {var NdotH: f32=saturateEps(dot(N,info.H));var roughness: f32=max(info.roughness,geometricRoughnessFactor);var alphaG: f32=convertRoughnessToAverageSlope(roughness);var modifiedFresnel: vec3f=fresnel;
348
+ #ifdef IRIDESCENCE
349
+ modifiedFresnel=mix(fresnel,reflectance0,info.iridescenceIntensity);
350
+ #endif
351
+ var distribution: f32=normalDistributionFunction_TrowbridgeReitzGGX(NdotH,alphaG);
352
+ #ifdef BRDF_V_HEIGHT_CORRELATED
353
+ var smithVisibility: f32=smithVisibility_GGXCorrelated(info.NdotL,info.NdotV,alphaG);
354
+ #else
355
+ var smithVisibility: f32=smithVisibility_TrowbridgeReitzGGXFast(info.NdotL,info.NdotV,alphaG);
356
+ #endif
357
+ var specTerm: vec3f=modifiedFresnel*distribution*smithVisibility;return specTerm*info.attenuation*info.NdotL*lightColor;}
358
+ #if defined(AREALIGHTUSED) && defined(AREALIGHTSUPPORTED)
359
+ fn computeAreaSpecularLighting(info: preLightingInfo,specularColor: vec3f,reflectance0: vec3f,reflectance90: vec3f)->vec3f {var fresnel:vec3f =reflectance0*specularColor*info.areaLightFresnel.x+( vec3f( 1.0 )-specularColor )*info.areaLightFresnel.y*reflectance90;return specularColor*fresnel*info.areaLightSpecular;}
360
+ #endif
361
+ #endif
362
+ #ifdef FUZZ
363
+ fn evalFuzz(L: vec3f,NdotL: f32,NdotV: f32,T: vec3f,B: vec3f,ltcLut: vec3f)->f32
364
+ {if (NdotL<=0.0f || NdotV<=0.0f) {return 0.0f;}
365
+ let M=mat3x3f(
366
+ vec3f(ltcLut.r,0.0f,0.0f),
367
+ vec3f(ltcLut.g,1.0f,0.0f),
368
+ vec3f(0.0f,0.0f,1.0f)
369
+ );let Llocal: vec3f=vec3f(dot(L,T),dot(L,B),NdotL);let Lwarp: vec3f=normalize(M*Llocal);let cosThetaWarp: f32=max(Lwarp.z,0.0f);return cosThetaWarp*NdotL;}
370
+ #endif
371
+ #if defined(ANISOTROPIC) && defined(ANISOTROPIC_OPENPBR)
372
+ fn computeAnisotropicSpecularLighting(info: preLightingInfo,V: vec3f,N: vec3f,T: vec3f,B: vec3f,anisotropy: f32,geometricRoughnessFactor: f32,lightColor: vec3f)->vec3f {var NdotH: f32=saturateEps(dot(N,info.H));var TdotH: f32=dot(T,info.H);var BdotH: f32=dot(B,info.H);var TdotV: f32=dot(T,V);var BdotV: f32=dot(B,V);var TdotL: f32=dot(T,info.L);var BdotL: f32=dot(B,info.L);var alphaG: f32=convertRoughnessToAverageSlope(info.roughness);var alphaTB: vec2f=getAnisotropicRoughness(alphaG,anisotropy);var distribution: f32=normalDistributionFunction_BurleyGGX_Anisotropic(NdotH,TdotH,BdotH,alphaTB);var smithVisibility: f32=smithVisibility_GGXCorrelated_Anisotropic(info.NdotL,info.NdotV,TdotV,BdotV,TdotL,BdotL,alphaTB);var specTerm: vec3f=vec3f(distribution*smithVisibility);return specTerm*info.attenuation*info.NdotL*lightColor;}
373
+ #elif defined(ANISOTROPIC)
374
+ fn computeAnisotropicSpecularLighting(info: preLightingInfo,V: vec3f,N: vec3f,T: vec3f,B: vec3f,anisotropy: f32,reflectance0: vec3f,reflectance90: vec3f,geometricRoughnessFactor: f32,lightColor: vec3f)->vec3f {var NdotH: f32=saturateEps(dot(N,info.H));var TdotH: f32=dot(T,info.H);var BdotH: f32=dot(B,info.H);var TdotV: f32=dot(T,V);var BdotV: f32=dot(B,V);var TdotL: f32=dot(T,info.L);var BdotL: f32=dot(B,info.L);var alphaG: f32=convertRoughnessToAverageSlope(info.roughness);var alphaTB: vec2f=getAnisotropicRoughness(alphaG,anisotropy);alphaTB=max(alphaTB,vec2f(geometricRoughnessFactor*geometricRoughnessFactor));var fresnel: vec3f=fresnelSchlickGGXVec3(info.VdotH,reflectance0,reflectance90);
375
+ #ifdef IRIDESCENCE
376
+ fresnel=mix(fresnel,reflectance0,info.iridescenceIntensity);
377
+ #endif
378
+ var distribution: f32=normalDistributionFunction_BurleyGGX_Anisotropic(NdotH,TdotH,BdotH,alphaTB);var smithVisibility: f32=smithVisibility_GGXCorrelated_Anisotropic(info.NdotL,info.NdotV,TdotV,BdotV,TdotL,BdotL,alphaTB);var specTerm: vec3f=fresnel*distribution*smithVisibility;return specTerm*info.attenuation*info.NdotL*lightColor;}
379
+ #endif
380
+ #ifdef CLEARCOAT
381
+ fn computeClearCoatLighting(info: preLightingInfo,Ncc: vec3f,geometricRoughnessFactor: f32,clearCoatIntensity: f32,lightColor: vec3f)->vec4f {var NccdotL: f32=saturateEps(dot(Ncc,info.L));var NccdotH: f32=saturateEps(dot(Ncc,info.H));var clearCoatRoughness: f32=max(info.roughness,geometricRoughnessFactor);var alphaG: f32=convertRoughnessToAverageSlope(clearCoatRoughness);var fresnel: f32=fresnelSchlickGGX(info.VdotH,uniforms.vClearCoatRefractionParams.x,CLEARCOATREFLECTANCE90);fresnel*=clearCoatIntensity;var distribution: f32=normalDistributionFunction_TrowbridgeReitzGGX(NccdotH,alphaG);var kelemenVisibility: f32=visibility_Kelemen(info.VdotH);var clearCoatTerm: f32=fresnel*distribution*kelemenVisibility;return vec4f(
382
+ clearCoatTerm*info.attenuation*NccdotL*lightColor,
383
+ 1.0-fresnel
384
+ );}
385
+ fn computeClearCoatLightingAbsorption(NdotVRefract: f32,L: vec3f,Ncc: vec3f,clearCoatColor: vec3f,clearCoatThickness: f32,clearCoatIntensity: f32)->vec3f {var LRefract: vec3f=-refract(L,Ncc,uniforms.vClearCoatRefractionParams.y);var NdotLRefract: f32=saturateEps(dot(Ncc,LRefract));var absorption: vec3f=computeClearCoatAbsorption(NdotVRefract,NdotLRefract,clearCoatColor,clearCoatThickness,clearCoatIntensity);return absorption;}
386
+ #endif
387
+ #ifdef SHEEN
388
+ fn computeSheenLighting(info: preLightingInfo,N: vec3f,reflectance0: vec3f,reflectance90: vec3f,geometricRoughnessFactor: f32,lightColor: vec3f)->vec3f {var NdotH: f32=saturateEps(dot(N,info.H));var roughness: f32=max(info.roughness,geometricRoughnessFactor);var alphaG: f32=convertRoughnessToAverageSlope(roughness);var fresnel: f32=1.;var distribution: f32=normalDistributionFunction_CharlieSheen(NdotH,alphaG);/*#ifdef SHEEN_SOFTER
389
+ var visibility: f32=visibility_CharlieSheen(info.NdotL,info.NdotV,alphaG);
390
+ #else */
391
+ var visibility: f32=visibility_Ashikhmin(info.NdotL,info.NdotV);/* #endif */
392
+ var sheenTerm: f32=fresnel*distribution*visibility;return sheenTerm*info.attenuation*info.NdotL*lightColor;}
393
+ #endif
394
+ #if defined(CLUSTLIGHT_BATCH) && CLUSTLIGHT_BATCH>0
395
+ #include<clusteredLightingFunctions>
396
+ fn computeClusteredLighting(
397
+ lightDataTexture: texture_2d<f32>,
398
+ tileMaskBuffer: ptr<storage,array<u32>>,
399
+ lightData: vec4f,
400
+ sliceRange: vec2u,
401
+ V: vec3f,
402
+ N: vec3f,
403
+ posW: vec3f,
404
+ surfaceAlbedo: vec3f,
405
+ reflectivityOut: reflectivityOutParams,
406
+ #ifdef IRIDESCENCE
407
+ iridescenceIntensity: f32,
408
+ #endif
409
+ #ifdef SS_TRANSLUCENCY
410
+ subSurfaceOut: subSurfaceOutParams,
411
+ #endif
412
+ #ifdef SPECULARTERM
413
+ AARoughnessFactor: f32,
414
+ #endif
415
+ #ifdef ANISOTROPIC
416
+ anisotropicOut: anisotropicOutParams,
417
+ #endif
418
+ #ifdef SHEEN
419
+ sheenOut: sheenOutParams,
420
+ #endif
421
+ #ifdef CLEARCOAT
422
+ clearcoatOut: clearcoatOutParams,
423
+ #endif
424
+ )->lightingInfo {let NdotV=absEps(dot(N,V));
425
+ #include<pbrBlockReflectance0>
426
+ #ifdef CLEARCOAT
427
+ specularEnvironmentR0=clearcoatOut.specularEnvironmentR0;
428
+ #endif
429
+ var result: lightingInfo;let tilePosition=vec2u(fragmentInputs.position.xy*lightData.xy);let maskResolution=vec2u(lightData.zw);var tileIndex=(tilePosition.x*maskResolution.x+tilePosition.y)*maskResolution.y;let batchRange=sliceRange/CLUSTLIGHT_BATCH;var batchOffset=batchRange.x*CLUSTLIGHT_BATCH;tileIndex+=batchRange.x;for (var i=batchRange.x; i<=batchRange.y; i+=1) {var mask=tileMaskBuffer[tileIndex];tileIndex+=1;let maskOffset=max(sliceRange.x,batchOffset)-batchOffset;
430
+ let maskWidth=min(sliceRange.y-batchOffset+1,CLUSTLIGHT_BATCH);mask=extractBits(mask,maskOffset,maskWidth);while mask != 0 {let trailing=firstTrailingBit(mask);mask ^= 1u<<trailing;let light=getClusteredLight(lightDataTexture,batchOffset+maskOffset+trailing);var preInfo=computePointAndSpotPreLightingInfo(light.vLightData,V,N,posW);preInfo.NdotV=NdotV;preInfo.attenuation=computeDistanceLightFalloff(preInfo.lightOffset,preInfo.lightDistanceSquared,light.vLightFalloff.x,light.vLightFalloff.y);if light.vLightDirection.w>=0.0 {preInfo.attenuation*=computeDirectionalLightFalloff(light.vLightDirection.xyz,preInfo.L,light.vLightDirection.w,light.vLightData.w,light.vLightFalloff.z,light.vLightFalloff.w);}
431
+ preInfo.roughness=adjustRoughnessFromLightProperties(reflectivityOut.roughness,light.vLightSpecular.a,preInfo.lightDistance);preInfo.diffuseRoughness=reflectivityOut.diffuseRoughness;preInfo.surfaceAlbedo=surfaceAlbedo;
432
+ #ifdef IRIDESCENCE
433
+ preInfo.iridescenceIntensity=iridescenceIntensity;
434
+ #endif
435
+ var info: lightingInfo;
436
+ #ifdef SS_TRANSLUCENCY
437
+ #ifdef SS_TRANSLUCENCY_LEGACY
438
+ info.diffuse=computeDiffuseTransmittedLighting(preInfo,light.vLightDiffuse.rgb,subSurfaceOut.transmittance);info.diffuseTransmission=vec3(0);
439
+ #else
440
+ info.diffuse=computeDiffuseLighting(preInfo,light.vLightDiffuse.rgb)*(1.0-subSurfaceOut.translucencyIntensity);info.diffuseTransmission=computeDiffuseTransmittedLighting(preInfo,light.vLightDiffuse.rgb,subSurfaceOut.transmittance);
441
+ #endif
442
+ #else
443
+ info.diffuse=computeDiffuseLighting(preInfo,light.vLightDiffuse.rgb);
444
+ #endif
445
+ #ifdef SPECULARTERM
446
+ #if CONDUCTOR_SPECULAR_MODEL==CONDUCTOR_SPECULAR_MODEL_OPENPBR
447
+ let metalFresnel=reflectivityOut.specularWeight*getF82Specular(preInfo.VdotH,specularEnvironmentR0,reflectivityOut.colorReflectanceF90,reflectivityOut.roughness);let dielectricFresnel=fresnelSchlickGGXVec3(preInfo.VdotH,reflectivityOut.dielectricColorF0,reflectivityOut.colorReflectanceF90);let coloredFresnel=mix(dielectricFresnel,metalFresnel,reflectivityOut.metallic);
448
+ #else
449
+ let coloredFresnel=fresnelSchlickGGXVec3(preInfo.VdotH,specularEnvironmentR0,reflectivityOut.colorReflectanceF90);
450
+ #endif
451
+ #ifndef LEGACY_SPECULAR_ENERGY_CONSERVATION
452
+ let NdotH=dot(N,preInfo.H);let fresnel=fresnelSchlickGGXVec3(NdotH,vec3(reflectanceF0),specularEnvironmentR90);info.diffuse*=(vec3(1.0)-fresnel);
453
+ #endif
454
+ #ifdef ANISOTROPIC
455
+ info.specular=computeAnisotropicSpecularLighting(preInfo,V,N,anisotropicOut.anisotropicTangent,anisotropicOut.anisotropicBitangent,anisotropicOut.anisotropy,specularEnvironmentR0,specularEnvironmentR90,AARoughnessFactor,light.vLightDiffuse.rgb);
456
+ #else
457
+ info.specular=computeSpecularLighting(preInfo,N,specularEnvironmentR0,coloredFresnel,AARoughnessFactor,light.vLightDiffuse.rgb);
458
+ #endif
459
+ #endif
460
+ #ifdef SHEEN
461
+ #ifdef SHEEN_LINKWITHALBEDO
462
+ preInfo.roughness=sheenOut.sheenIntensity;
463
+ #else
464
+ preInfo.roughness=adjustRoughnessFromLightProperties(sheenOut.sheenRoughness,light.vLightSpecular.a,preInfo.lightDistance);
465
+ #endif
466
+ info.sheen=computeSheenLighting(preInfo,normalW,sheenOut.sheenColor,specularEnvironmentR90,AARoughnessFactor,light.vLightDiffuse.rgb);
467
+ #endif
468
+ #ifdef CLEARCOAT
469
+ preInfo.roughness=adjustRoughnessFromLightProperties(clearcoatOut.clearCoatRoughness,light.vLightSpecular.a,preInfo.lightDistance);info.clearCoat=computeClearCoatLighting(preInfo,clearcoatOut.clearCoatNormalW,clearcoatOut.clearCoatAARoughnessFactors.x,clearcoatOut.clearCoatIntensity,light.vLightDiffuse.rgb);
470
+ #ifdef CLEARCOAT_TINT
471
+ let absorption=computeClearCoatLightingAbsorption(clearcoatOut.clearCoatNdotVRefract,preInfo.L,clearcoatOut.clearCoatNormalW,clearcoatOut.clearCoatColor,clearcoatOut.clearCoatThickness,clearcoatOut.clearCoatIntensity);info.diffuse*=absorption;
472
+ #ifdef SS_TRANSLUCENCY
473
+ info.diffuseTransmission*=absorption;
474
+ #endif
475
+ #ifdef SPECULARTERM
476
+ info.specular*=absorption;
477
+ #endif
478
+ #endif
479
+ info.diffuse*=info.clearCoat.w;
480
+ #ifdef SS_TRANSLUCENCY
481
+ info.diffuseTransmission*=info.clearCoat.w;
482
+ #endif
483
+ #ifdef SPECULARTERM
484
+ info.specular*=info.clearCoat.w;
485
+ #endif
486
+ #ifdef SHEEN
487
+ info.sheen*=info.clearCoat.w;
488
+ #endif
489
+ #endif
490
+ result.diffuse+=info.diffuse;
491
+ #ifdef SS_TRANSLUCENCY
492
+ result.diffuseTransmission+=info.diffuseTransmission;
493
+ #endif
494
+ #ifdef SPECULARTERM
495
+ result.specular+=info.specular;
496
+ #endif
497
+ #ifdef CLEARCOAT
498
+ result.clearCoat+=info.clearCoat;
499
+ #endif
500
+ #ifdef SHEEN
501
+ result.sheen+=info.sheen;
502
+ #endif
503
+ }
504
+ batchOffset+=CLUSTLIGHT_BATCH;}
505
+ return result;}
506
+ #endif
507
+ `;
508
+ e.IncludesShadersStoreWGSL[c] || (e.IncludesShadersStoreWGSL[c] = D);
509
+ const s = "pbrBlockNormalGeometric", A = `var viewDirectionW: vec3f=normalize(scene.vEyePosition.xyz-input.vPositionW);
510
+ #ifdef NORMAL
511
+ var normalW: vec3f=normalize(input.vNormalW);
512
+ #else
513
+ var normalW: vec3f=normalize(cross(dpdx(input.vPositionW),dpdy(input.vPositionW)))*scene.vEyePosition.w;
514
+ #endif
515
+ var geometricNormalW: vec3f=normalW;
516
+ #if defined(TWOSIDEDLIGHTING) && defined(NORMAL)
517
+ geometricNormalW=select(-geometricNormalW,geometricNormalW,fragmentInputs.frontFacing);
518
+ #endif
519
+ `;
520
+ e.IncludesShadersStoreWGSL[s] || (e.IncludesShadersStoreWGSL[s] = A);
521
+ const d = "pbrBlockImageProcessing", T = `#if defined(IMAGEPROCESSINGPOSTPROCESS) || defined(SS_SCATTERING)
522
+ #if !defined(SKIPFINALCOLORCLAMP)
523
+ finalColor=vec4f(clamp(finalColor.rgb,vec3f(0.),vec3f(30.0)),finalColor.a);
524
+ #endif
525
+ #else
526
+ finalColor=applyImageProcessing(finalColor);
527
+ #endif
528
+ finalColor=vec4f(finalColor.rgb,finalColor.a*mesh.visibility);
529
+ #ifdef PREMULTIPLYALPHA
530
+ finalColor=vec4f(finalColor.rgb*finalColor.a,finalColor.a);;
531
+ #endif
532
+ `;
533
+ e.IncludesShadersStoreWGSL[d] || (e.IncludesShadersStoreWGSL[d] = T);
534
+ const u = "pbrDebug", N = `#if DEBUGMODE>0
535
+ if (input.vClipSpacePosition.x/input.vClipSpacePosition.w>=uniforms.vDebugMode.x) {var color: vec3f;
536
+ #if DEBUGMODE==1
537
+ color=fragmentInputs.vPositionW.rgb;
538
+ #define DEBUGMODE_NORMALIZE
539
+ #elif DEBUGMODE==2 && defined(NORMAL)
540
+ color=fragmentInputs.vNormalW.rgb;
541
+ #define DEBUGMODE_NORMALIZE
542
+ #elif DEBUGMODE==3 && defined(BUMP) || DEBUGMODE==3 && defined(PARALLAX) || DEBUGMODE==3 && defined(ANISOTROPIC)
543
+ color=TBN[0];
544
+ #define DEBUGMODE_NORMALIZE
545
+ #elif DEBUGMODE==4 && defined(BUMP) || DEBUGMODE==4 && defined(PARALLAX) || DEBUGMODE==4 && defined(ANISOTROPIC)
546
+ color=TBN[1];
547
+ #define DEBUGMODE_NORMALIZE
548
+ #elif DEBUGMODE==5
549
+ color=normalW;
550
+ #define DEBUGMODE_NORMALIZE
551
+ #elif DEBUGMODE==6 && defined(MAINUV1)
552
+ color= vec3f(input.vMainUV1,0.0);
553
+ #elif DEBUGMODE==7 && defined(MAINUV2)
554
+ color= vec3f(input.vMainUV2,0.0);
555
+ #elif DEBUGMODE==8 && defined(CLEARCOAT) && defined(CLEARCOAT_BUMP)
556
+ color=clearcoatOut.TBNClearCoat[0];
557
+ #define DEBUGMODE_NORMALIZE
558
+ #elif DEBUGMODE==9 && defined(CLEARCOAT) && defined(CLEARCOAT_BUMP)
559
+ color=clearcoatOut.TBNClearCoat[1];
560
+ #define DEBUGMODE_NORMALIZE
561
+ #elif DEBUGMODE==10 && defined(CLEARCOAT)
562
+ color=clearcoatOut.clearCoatNormalW;
563
+ #define DEBUGMODE_NORMALIZE
564
+ #elif DEBUGMODE==11 && defined(ANISOTROPIC)
565
+ color=anisotropicOut.anisotropicNormal;
566
+ #define DEBUGMODE_NORMALIZE
567
+ #elif DEBUGMODE==12 && defined(ANISOTROPIC)
568
+ color=anisotropicOut.anisotropicTangent;
569
+ #define DEBUGMODE_NORMALIZE
570
+ #elif DEBUGMODE==13 && defined(ANISOTROPIC)
571
+ color=anisotropicOut.anisotropicBitangent;
572
+ #define DEBUGMODE_NORMALIZE
573
+ #elif DEBUGMODE==20 && defined(ALBEDO)
574
+ color=albedoTexture.rgb;
575
+ #ifndef GAMMAALBEDO
576
+ #define DEBUGMODE_GAMMA
577
+ #endif
578
+ #elif DEBUGMODE==21 && defined(AMBIENT)
579
+ color=aoOut.ambientOcclusionColorMap.rgb;
580
+ #elif DEBUGMODE==22 && defined(OPACITY)
581
+ color=opacityMap.rgb;
582
+ #elif DEBUGMODE==23 && defined(EMISSIVE)
583
+ color=emissiveColorTex.rgb;
584
+ #ifndef GAMMAEMISSIVE
585
+ #define DEBUGMODE_GAMMA
586
+ #endif
587
+ #elif DEBUGMODE==24 && defined(LIGHTMAP)
588
+ color=lightmapColor;
589
+ #ifndef GAMMALIGHTMAP
590
+ #define DEBUGMODE_GAMMA
591
+ #endif
592
+ #elif DEBUGMODE==25 && defined(REFLECTIVITY) && defined(METALLICWORKFLOW)
593
+ color=reflectivityOut.surfaceMetallicColorMap.rgb;
594
+ #elif DEBUGMODE==26 && defined(REFLECTIVITY) && !defined(METALLICWORKFLOW)
595
+ color=reflectivityOut.surfaceReflectivityColorMap.rgb;
596
+ #define DEBUGMODE_GAMMA
597
+ #elif DEBUGMODE==27 && defined(CLEARCOAT) && defined(CLEARCOAT_TEXTURE)
598
+ color= vec3f(clearcoatOut.clearCoatMapData.rg,0.0);
599
+ #elif DEBUGMODE==28 && defined(CLEARCOAT) && defined(CLEARCOAT_TINT) && defined(CLEARCOAT_TINT_TEXTURE)
600
+ color=clearcoatOut.clearCoatTintMapData.rgb;
601
+ #elif DEBUGMODE==29 && defined(SHEEN) && defined(SHEEN_TEXTURE)
602
+ color=sheenOut.sheenMapData.rgb;
603
+ #elif DEBUGMODE==30 && defined(ANISOTROPIC) && defined(ANISOTROPIC_TEXTURE)
604
+ color=anisotropicOut.anisotropyMapData.rgb;
605
+ #elif DEBUGMODE==31 && defined(SUBSURFACE) && defined(SS_THICKNESSANDMASK_TEXTURE)
606
+ color=subSurfaceOut.thicknessMap.rgb;
607
+ #elif DEBUGMODE==32 && defined(BUMP)
608
+ color=textureSample(bumpSampler,bumpSamplerSampler,fragmentInputs.vBumpUV).rgb;
609
+ #elif DEBUGMODE==40 && defined(SS_REFRACTION)
610
+ color=subSurfaceOut.environmentRefraction.rgb;
611
+ #define DEBUGMODE_GAMMA
612
+ #elif DEBUGMODE==41 && defined(REFLECTION)
613
+ color=reflectionOut.environmentRadiance.rgb;
614
+ #ifndef GAMMAREFLECTION
615
+ #define DEBUGMODE_GAMMA
616
+ #endif
617
+ #elif DEBUGMODE==42 && defined(CLEARCOAT) && defined(REFLECTION)
618
+ color=clearcoatOut.environmentClearCoatRadiance.rgb;
619
+ #define DEBUGMODE_GAMMA
620
+ #elif DEBUGMODE==50
621
+ color=diffuseBase.rgb;
622
+ #define DEBUGMODE_GAMMA
623
+ #elif DEBUGMODE==51 && defined(SPECULARTERM)
624
+ color=specularBase.rgb;
625
+ #define DEBUGMODE_GAMMA
626
+ #elif DEBUGMODE==52 && defined(CLEARCOAT)
627
+ color=clearCoatBase.rgb;
628
+ #define DEBUGMODE_GAMMA
629
+ #elif DEBUGMODE==53 && defined(SHEEN)
630
+ color=sheenBase.rgb;
631
+ #define DEBUGMODE_GAMMA
632
+ #elif DEBUGMODE==54 && defined(REFLECTION)
633
+ color=reflectionOut.environmentIrradiance.rgb;
634
+ #ifndef GAMMAREFLECTION
635
+ #define DEBUGMODE_GAMMA
636
+ #endif
637
+ #elif DEBUGMODE==60
638
+ color=surfaceAlbedo.rgb;
639
+ #define DEBUGMODE_GAMMA
640
+ #elif DEBUGMODE==61
641
+ color=clearcoatOut.specularEnvironmentR0;
642
+ #define DEBUGMODE_GAMMA
643
+ #elif DEBUGMODE==62 && defined(METALLICWORKFLOW)
644
+ color= vec3f(reflectivityOut.metallic);
645
+ #elif DEBUGMODE==71 && defined(METALLICWORKFLOW)
646
+ color=reflectivityOut.metallicF0;
647
+ #elif DEBUGMODE==63
648
+ color= vec3f(roughness);
649
+ #elif DEBUGMODE==64
650
+ color= vec3f(alphaG);
651
+ #elif DEBUGMODE==65
652
+ color= vec3f(NdotV);
653
+ #elif DEBUGMODE==66 && defined(CLEARCOAT) && defined(CLEARCOAT_TINT)
654
+ color=clearcoatOut.clearCoatColor;
655
+ #define DEBUGMODE_GAMMA
656
+ #elif DEBUGMODE==67 && defined(CLEARCOAT)
657
+ color= vec3f(clearcoatOut.clearCoatRoughness);
658
+ #elif DEBUGMODE==68 && defined(CLEARCOAT)
659
+ color= vec3f(clearcoatOut.clearCoatNdotV);
660
+ #elif DEBUGMODE==69 && defined(SUBSURFACE) && defined(SS_TRANSLUCENCY)
661
+ color=subSurfaceOut.transmittance;
662
+ #elif DEBUGMODE==70 && defined(SUBSURFACE) && defined(SS_REFRACTION)
663
+ color=subSurfaceOut.refractionTransmittance;
664
+ #elif DEBUGMODE==72
665
+ color= vec3f(microSurface);
666
+ #elif DEBUGMODE==73
667
+ color=uniforms.vAlbedoColor.rgb;
668
+ #define DEBUGMODE_GAMMA
669
+ #elif DEBUGMODE==74 && !defined(METALLICWORKFLOW)
670
+ color=uniforms.vReflectivityColor.rgb;
671
+ #define DEBUGMODE_GAMMA
672
+ #elif DEBUGMODE==75
673
+ color=uniforms.vEmissiveColor;
674
+ #define DEBUGMODE_GAMMA
675
+ #elif DEBUGMODE==80 && defined(RADIANCEOCCLUSION)
676
+ color= vec3f(seo);
677
+ #elif DEBUGMODE==81 && defined(HORIZONOCCLUSION) && defined(BUMP) && defined(REFLECTIONMAP_3D)
678
+ color= vec3f(eho);
679
+ #elif DEBUGMODE==82 && defined(MS_BRDF_ENERGY_CONSERVATION)
680
+ color= vec3f(energyConservationFactor);
681
+ #elif DEBUGMODE==83 && defined(ENVIRONMENTBRDF) && !defined(REFLECTIONMAP_SKYBOX)
682
+ color=baseSpecularEnvironmentReflectance;
683
+ #define DEBUGMODE_GAMMA
684
+ #elif DEBUGMODE==84 && defined(CLEARCOAT) && defined(ENVIRONMENTBRDF) && !defined(REFLECTIONMAP_SKYBOX)
685
+ color=clearcoatOut.clearCoatEnvironmentReflectance;
686
+ #define DEBUGMODE_GAMMA
687
+ #elif DEBUGMODE==85 && defined(SHEEN) && defined(REFLECTION)
688
+ color=sheenOut.sheenEnvironmentReflectance;
689
+ #define DEBUGMODE_GAMMA
690
+ #elif DEBUGMODE==86 && defined(ALPHABLEND)
691
+ color= vec3f(luminanceOverAlpha);
692
+ #elif DEBUGMODE==87
693
+ color= vec3f(alpha);
694
+ #elif DEBUGMODE==88 && defined(ALBEDO)
695
+ color= vec3f(albedoTexture.a);
696
+ #elif DEBUGMODE==89
697
+ color=aoOut.ambientOcclusionColor;
698
+ #else
699
+ var stripeWidth: f32=30.;var stripePos: f32=abs(floor(input.position.x/stripeWidth));var whichColor: f32=((stripePos)%(2.));var color1: vec3f= vec3f(.6,.2,.2);var color2: vec3f= vec3f(.3,.1,.1);color=mix(color1,color2,whichColor);
700
+ #endif
701
+ color*=uniforms.vDebugMode.y;
702
+ #ifdef DEBUGMODE_NORMALIZE
703
+ color=normalize(color)*0.5+0.5;
704
+ #endif
705
+ #ifdef DEBUGMODE_GAMMA
706
+ color=toGammaSpaceVec3(color);
707
+ #endif
708
+ fragmentOutputs.color=vec4f(color,1.0);
709
+ #ifdef PREPASS
710
+ fragmentOutputs.fragData0=toLinearSpaceVec3(color);
711
+ fragmentOutputs.fragData1=vec4f(0.,0.,0.,0.);
712
+ #endif
713
+ #ifdef DEBUGMODE_FORCERETURN
714
+ return fragmentOutputs;
715
+ #endif
716
+ }
717
+ #endif
718
+ `;
719
+ e.IncludesShadersStoreWGSL[u] || (e.IncludesShadersStoreWGSL[u] = N);