@zephyr3d/scene 0.9.24 → 0.9.26

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 (264) hide show
  1. package/dist/animation/hair/gpu_hair_simulation.js +1090 -0
  2. package/dist/animation/hair/gpu_hair_simulation.js.map +1 -0
  3. package/dist/animation/joint_dynamics/controller.js +7 -5
  4. package/dist/animation/joint_dynamics/controller.js.map +1 -1
  5. package/dist/animation/joint_dynamics/joint_dynamics_system.js +81 -5
  6. package/dist/animation/joint_dynamics/joint_dynamics_system.js.map +1 -1
  7. package/dist/animation/morphtrack.js +3 -4
  8. package/dist/animation/morphtrack.js.map +1 -1
  9. package/dist/animation/skeleton.js +58 -24
  10. package/dist/animation/skeleton.js.map +1 -1
  11. package/dist/animation/spring/multi_chain_spring_system.js +577 -179
  12. package/dist/animation/spring/multi_chain_spring_system.js.map +1 -1
  13. package/dist/animation/spring/spring_collider.js +4 -3
  14. package/dist/animation/spring/spring_collider.js.map +1 -1
  15. package/dist/animation/spring/spring_node_pose_tracker.js +40 -0
  16. package/dist/animation/spring/spring_node_pose_tracker.js.map +1 -0
  17. package/dist/animation/spring/spring_particle.js +2 -0
  18. package/dist/animation/spring/spring_particle.js.map +1 -1
  19. package/dist/animation/spring/spring_system.js +11 -3
  20. package/dist/animation/spring/spring_system.js.map +1 -1
  21. package/dist/animation/spring_modifier.js +10 -0
  22. package/dist/animation/spring_modifier.js.map +1 -1
  23. package/dist/app/engine.js +53 -43
  24. package/dist/app/engine.js.map +1 -1
  25. package/dist/app/scriptingsystem.js +119 -6
  26. package/dist/app/scriptingsystem.js.map +1 -1
  27. package/dist/app/scriptregistry.js +3 -2
  28. package/dist/app/scriptregistry.js.map +1 -1
  29. package/dist/asset/assetmanager.js +284 -67
  30. package/dist/asset/assetmanager.js.map +1 -1
  31. package/dist/asset/loaders/zhair/zhair_format.js +288 -0
  32. package/dist/asset/loaders/zhair/zhair_format.js.map +1 -0
  33. package/dist/asset/loaders/zhair/zhair_loader.js +221 -0
  34. package/dist/asset/loaders/zhair/zhair_loader.js.map +1 -0
  35. package/dist/asset/model.js +178 -67
  36. package/dist/asset/model.js.map +1 -1
  37. package/dist/camera/camera.js +193 -21
  38. package/dist/camera/camera.js.map +1 -1
  39. package/dist/camera/perspectivecamera.js +3 -1
  40. package/dist/camera/perspectivecamera.js.map +1 -1
  41. package/dist/index.d.ts +4040 -1290
  42. package/dist/index.js +16 -6
  43. package/dist/index.js.map +1 -1
  44. package/dist/material/eye.js +932 -0
  45. package/dist/material/eye.js.map +1 -0
  46. package/dist/material/hair.js +917 -0
  47. package/dist/material/hair.js.map +1 -0
  48. package/dist/material/hairstrand.js +842 -0
  49. package/dist/material/hairstrand.js.map +1 -0
  50. package/dist/material/hairstrand_data.js +162 -0
  51. package/dist/material/hairstrand_data.js.map +1 -0
  52. package/dist/material/lambert.js +5 -2
  53. package/dist/material/lambert.js.map +1 -1
  54. package/dist/material/material.js +338 -300
  55. package/dist/material/material.js.map +1 -1
  56. package/dist/material/meshmaterial.js +120 -19
  57. package/dist/material/meshmaterial.js.map +1 -1
  58. package/dist/material/mixins/albedocolor.js +1 -1
  59. package/dist/material/mixins/albedocolor.js.map +1 -1
  60. package/dist/material/mixins/lightmodel/blinnphong.js +5 -3
  61. package/dist/material/mixins/lightmodel/blinnphong.js.map +1 -1
  62. package/dist/material/mixins/lightmodel/lambert.js +5 -4
  63. package/dist/material/mixins/lightmodel/lambert.js.map +1 -1
  64. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js +3 -3
  65. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js.map +1 -1
  66. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +5 -5
  67. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
  68. package/dist/material/mixins/lightmodel/pbrspecularglossness.js +3 -3
  69. package/dist/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -1
  70. package/dist/material/mixins/lit.js +73 -18
  71. package/dist/material/mixins/lit.js.map +1 -1
  72. package/dist/material/mixins/pbr/common.js +4 -4
  73. package/dist/material/mixins/pbr/common.js.map +1 -1
  74. package/dist/material/mixins/texture.js +48 -11
  75. package/dist/material/mixins/texture.js.map +1 -1
  76. package/dist/material/mtoon.js +6 -5
  77. package/dist/material/mtoon.js.map +1 -1
  78. package/dist/material/pbrblueprint.js +146 -28
  79. package/dist/material/pbrblueprint.js.map +1 -1
  80. package/dist/material/pbrblueprint_instance.js +501 -0
  81. package/dist/material/pbrblueprint_instance.js.map +1 -0
  82. package/dist/material/pbrmr.js +15 -16
  83. package/dist/material/pbrmr.js.map +1 -1
  84. package/dist/material/shader/helper.js +766 -456
  85. package/dist/material/shader/helper.js.map +1 -1
  86. package/dist/material/shader/terrain_blend.js +55 -0
  87. package/dist/material/shader/terrain_blend.js.map +1 -0
  88. package/dist/material/skin.js +192 -32
  89. package/dist/material/skin.js.map +1 -1
  90. package/dist/material/spriteblueprint.js +16 -1
  91. package/dist/material/spriteblueprint.js.map +1 -1
  92. package/dist/material/subsurfaceprofile.js +86 -23
  93. package/dist/material/subsurfaceprofile.js.map +1 -1
  94. package/dist/material/water.js +3 -1
  95. package/dist/material/water.js.map +1 -1
  96. package/dist/posteffect/bloom.js +167 -7
  97. package/dist/posteffect/bloom.js.map +1 -1
  98. package/dist/posteffect/coloradjust.js +2 -1
  99. package/dist/posteffect/coloradjust.js.map +1 -1
  100. package/dist/posteffect/compositor.js.map +1 -1
  101. package/dist/posteffect/fxaa.js +2 -1
  102. package/dist/posteffect/fxaa.js.map +1 -1
  103. package/dist/posteffect/grayscale.js +3 -1
  104. package/dist/posteffect/grayscale.js.map +1 -1
  105. package/dist/posteffect/motionblur.js +4 -1
  106. package/dist/posteffect/motionblur.js.map +1 -1
  107. package/dist/posteffect/posteffect.js.map +1 -1
  108. package/dist/posteffect/skinsss.js +368 -69
  109. package/dist/posteffect/skinsss.js.map +1 -1
  110. package/dist/posteffect/ssgi.js +16 -9
  111. package/dist/posteffect/ssgi.js.map +1 -1
  112. package/dist/posteffect/ssr.js +3 -0
  113. package/dist/posteffect/ssr.js.map +1 -1
  114. package/dist/posteffect/sss.js +91 -34
  115. package/dist/posteffect/sss.js.map +1 -1
  116. package/dist/posteffect/taa.js.map +1 -1
  117. package/dist/posteffect/tonemap.js +44 -1
  118. package/dist/posteffect/tonemap.js.map +1 -1
  119. package/dist/render/abuffer_oit.js +45 -39
  120. package/dist/render/abuffer_oit.js.map +1 -1
  121. package/dist/render/cluster_light.js +4 -4
  122. package/dist/render/cluster_light.js.map +1 -1
  123. package/dist/render/cull_visitor.js +19 -0
  124. package/dist/render/cull_visitor.js.map +1 -1
  125. package/dist/render/depthpass.js +36 -2
  126. package/dist/render/depthpass.js.map +1 -1
  127. package/dist/render/drawable_mixin.js +26 -1
  128. package/dist/render/drawable_mixin.js.map +1 -1
  129. package/dist/render/dualdepthpeeling_oit.js +52 -51
  130. package/dist/render/dualdepthpeeling_oit.js.map +1 -1
  131. package/dist/render/envlight.js +1 -1
  132. package/dist/render/envlight.js.map +1 -1
  133. package/dist/render/fbm_wavegenerator.js +3 -0
  134. package/dist/render/fbm_wavegenerator.js.map +1 -1
  135. package/dist/render/gerstner_wavegenerator.js +3 -0
  136. package/dist/render/gerstner_wavegenerator.js.map +1 -1
  137. package/dist/render/globalbindgroup_allocator.js +3 -0
  138. package/dist/render/globalbindgroup_allocator.js.map +1 -1
  139. package/dist/render/oit.js +29 -0
  140. package/dist/render/oit.js.map +1 -0
  141. package/dist/render/render_queue.js +3 -0
  142. package/dist/render/render_queue.js.map +1 -1
  143. package/dist/render/rendergraph/device_pool_allocator.js.map +1 -1
  144. package/dist/render/rendergraph/executor.js +2 -0
  145. package/dist/render/rendergraph/executor.js.map +1 -1
  146. package/dist/render/rendergraph/forward_plus_builder.js +61 -1
  147. package/dist/render/rendergraph/forward_plus_builder.js.map +1 -1
  148. package/dist/render/rendergraph/rendergraph.js.map +1 -1
  149. package/dist/render/rendergraph/texture_affinity_cache.js +1 -1
  150. package/dist/render/rendergraph/texture_affinity_cache.js.map +1 -1
  151. package/dist/render/rendergraph/types.js.map +1 -1
  152. package/dist/render/shadow_mask_pass.js +73 -8
  153. package/dist/render/shadow_mask_pass.js.map +1 -1
  154. package/dist/render/sky.js +166 -126
  155. package/dist/render/sky.js.map +1 -1
  156. package/dist/render/weightedblended_oit.js +36 -35
  157. package/dist/render/weightedblended_oit.js.map +1 -1
  158. package/dist/scene/basesprite.js +8 -0
  159. package/dist/scene/basesprite.js.map +1 -1
  160. package/dist/scene/batchgroup.js +3 -0
  161. package/dist/scene/batchgroup.js.map +1 -1
  162. package/dist/scene/environment.js +4 -1
  163. package/dist/scene/environment.js.map +1 -1
  164. package/dist/scene/hair.js +963 -0
  165. package/dist/scene/hair.js.map +1 -0
  166. package/dist/scene/light.js +5 -1
  167. package/dist/scene/light.js.map +1 -1
  168. package/dist/scene/mesh.js +481 -47
  169. package/dist/scene/mesh.js.map +1 -1
  170. package/dist/scene/meshdrawable.js +6 -0
  171. package/dist/scene/meshdrawable.js.map +1 -1
  172. package/dist/scene/msdftext.js +3 -0
  173. package/dist/scene/msdftext.js.map +1 -1
  174. package/dist/scene/msdftextsprite.js +3 -0
  175. package/dist/scene/msdftextsprite.js.map +1 -1
  176. package/dist/scene/particlesys.js +6 -0
  177. package/dist/scene/particlesys.js.map +1 -1
  178. package/dist/scene/scene.js +3 -0
  179. package/dist/scene/scene.js.map +1 -1
  180. package/dist/scene/scene_node.js +6 -1
  181. package/dist/scene/scene_node.js.map +1 -1
  182. package/dist/scene/terrain-cm/grass.js +273 -249
  183. package/dist/scene/terrain-cm/grass.js.map +1 -1
  184. package/dist/scene/terrain-cm/grassmaterial.js +3 -0
  185. package/dist/scene/terrain-cm/grassmaterial.js.map +1 -1
  186. package/dist/scene/terrain-cm/terrain-cm.js +6 -0
  187. package/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
  188. package/dist/scene/terrain-cm/texture_cache.js +309 -0
  189. package/dist/scene/terrain-cm/texture_cache.js.map +1 -0
  190. package/dist/scene/water.js +6 -0
  191. package/dist/scene/water.js.map +1 -1
  192. package/dist/shaders/atmosphere.js.map +1 -1
  193. package/dist/shaders/diffusion.js +54 -0
  194. package/dist/shaders/diffusion.js.map +1 -0
  195. package/dist/shaders/shadow.js +33 -21
  196. package/dist/shaders/shadow.js.map +1 -1
  197. package/dist/shaders/temporal.js +71 -33
  198. package/dist/shaders/temporal.js.map +1 -1
  199. package/dist/shadow/dom.js +546 -0
  200. package/dist/shadow/dom.js.map +1 -0
  201. package/dist/shadow/pcf_opt.js +3 -5
  202. package/dist/shadow/pcf_opt.js.map +1 -1
  203. package/dist/shadow/pcf_pd.js +1 -1
  204. package/dist/shadow/pcf_pd.js.map +1 -1
  205. package/dist/shadow/receiver_bias.js +41 -0
  206. package/dist/shadow/receiver_bias.js.map +1 -0
  207. package/dist/shadow/shader.js +20 -60
  208. package/dist/shadow/shader.js.map +1 -1
  209. package/dist/shadow/shadow_impl.js +89 -0
  210. package/dist/shadow/shadow_impl.js.map +1 -1
  211. package/dist/shadow/shadow_region.js +50 -50
  212. package/dist/shadow/shadow_region.js.map +1 -1
  213. package/dist/shadow/shadowmapper.js +150 -37
  214. package/dist/shadow/shadowmapper.js.map +1 -1
  215. package/dist/shapes/shape.js +11 -2
  216. package/dist/shapes/shape.js.map +1 -1
  217. package/dist/shapes/sphere.js +50 -9
  218. package/dist/shapes/sphere.js.map +1 -1
  219. package/dist/utility/blueprint/common/constants.js +112 -2
  220. package/dist/utility/blueprint/common/constants.js.map +1 -1
  221. package/dist/utility/blueprint/material/func.js +142 -49
  222. package/dist/utility/blueprint/material/func.js.map +1 -1
  223. package/dist/utility/blueprint/material/ir.js +490 -25
  224. package/dist/utility/blueprint/material/ir.js.map +1 -1
  225. package/dist/utility/blueprint/material/texture.js +898 -4
  226. package/dist/utility/blueprint/material/texture.js.map +1 -1
  227. package/dist/utility/serialization/manager.js +431 -100
  228. package/dist/utility/serialization/manager.js.map +1 -1
  229. package/dist/utility/serialization/scene/animation.js +370 -3
  230. package/dist/utility/serialization/scene/animation.js.map +1 -1
  231. package/dist/utility/serialization/scene/batch.js +4 -0
  232. package/dist/utility/serialization/scene/batch.js.map +1 -1
  233. package/dist/utility/serialization/scene/camera.js +133 -1
  234. package/dist/utility/serialization/scene/camera.js.map +1 -1
  235. package/dist/utility/serialization/scene/common.js +26 -5
  236. package/dist/utility/serialization/scene/common.js.map +1 -1
  237. package/dist/utility/serialization/scene/hair.js +1141 -0
  238. package/dist/utility/serialization/scene/hair.js.map +1 -0
  239. package/dist/utility/serialization/scene/light.js +84 -4
  240. package/dist/utility/serialization/scene/light.js.map +1 -1
  241. package/dist/utility/serialization/scene/material.js +1867 -166
  242. package/dist/utility/serialization/scene/material.js.map +1 -1
  243. package/dist/utility/serialization/scene/mesh.js +231 -14
  244. package/dist/utility/serialization/scene/mesh.js.map +1 -1
  245. package/dist/utility/serialization/scene/node.js +141 -7
  246. package/dist/utility/serialization/scene/node.js.map +1 -1
  247. package/dist/utility/serialization/scene/particle.js +4 -0
  248. package/dist/utility/serialization/scene/particle.js.map +1 -1
  249. package/dist/utility/serialization/scene/primitive.js +18 -0
  250. package/dist/utility/serialization/scene/primitive.js.map +1 -1
  251. package/dist/utility/serialization/scene/sprite.js +4 -0
  252. package/dist/utility/serialization/scene/sprite.js.map +1 -1
  253. package/dist/utility/serialization/scene/terrain.js +92 -69
  254. package/dist/utility/serialization/scene/terrain.js.map +1 -1
  255. package/dist/utility/serialization/scene/text.js +4 -0
  256. package/dist/utility/serialization/scene/text.js.map +1 -1
  257. package/dist/utility/serialization/scene/water.js +4 -0
  258. package/dist/utility/serialization/scene/water.js.map +1 -1
  259. package/dist/utility/serialization/types.js.map +1 -1
  260. package/dist/utility/shprojector.js +96 -95
  261. package/dist/utility/shprojector.js.map +1 -1
  262. package/dist/values.js +105 -58
  263. package/dist/values.js.map +1 -1
  264. package/package.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"file":"blinnphong.js","sources":["../../../../src/material/mixins/lightmodel/blinnphong.ts"],"sourcesContent":["import type { BindGroup, PBFunctionScope, PBInsideFunctionScope, PBShaderExp } from '@zephyr3d/device';\r\nimport type { MeshMaterial } from '../../meshmaterial';\r\nimport { applyMaterialMixins } from '../../meshmaterial';\r\nimport type { IMixinLight } from '../lit';\r\nimport { mixinLight } from '../lit';\r\nimport type { DrawContext } from '../../../render';\r\nimport { ShaderHelper } from '../../shader/helper';\r\nimport { LIGHT_TYPE_POINT, MaterialVaryingFlags } from '../../../values';\r\nimport type { Immutable } from '@zephyr3d/base';\r\nimport { Vector4 } from '@zephyr3d/base';\r\n\r\n/**\r\n * Interface for blinn-phong lighting model mixin\r\n * @public\r\n */\r\nexport type IMixinBlinnPhong = {\r\n shininess: number;\r\n scatterWrap: number;\r\n scatterWidth: number;\r\n scatterColor: Vector4;\r\n blinnPhongLight(\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp,\r\n normal: PBShaderExp,\r\n viewVec: PBShaderExp,\r\n albedo: PBShaderExp,\r\n outRoughness?: PBShaderExp\r\n ): PBShaderExp;\r\n} & IMixinLight;\r\n\r\n/**\r\n * Blinn-phong lighting model mixin\r\n * @param BaseCls - Class to mix in\r\n * @returns Mixed class\r\n * @public\r\n */\r\nexport function mixinBlinnPhong<T extends typeof MeshMaterial>(BaseCls: T) {\r\n if ((BaseCls as any).blinnPhongMixed) {\r\n return BaseCls as T & { new (...args: any[]): IMixinBlinnPhong };\r\n }\r\n const S = applyMaterialMixins(BaseCls, mixinLight);\r\n const SHININESS_UNIFORM = S.defineInstanceUniform('shininess', 'float', 'Shininess');\r\n let FEATURE_WRAP_LIGHTING = 0;\r\n const cls = class extends S implements IMixinBlinnPhong {\r\n protected static blinnPhongMixed = true;\r\n private _shininess: number;\r\n private _wrap: number;\r\n private _scatterWidth: number;\r\n private _scatterColor: Vector4;\r\n constructor() {\r\n super();\r\n this._shininess = 32;\r\n this._wrap = 0;\r\n this._scatterWidth = 0.3;\r\n this._scatterColor = Vector4.zero();\r\n this.useFeature(FEATURE_WRAP_LIGHTING, false);\r\n }\r\n copyFrom(other: this) {\r\n super.copyFrom(other);\r\n this.shininess = other.shininess;\r\n this.scatterWrap = other.scatterWrap;\r\n this.scatterColor = other.scatterColor;\r\n this.scatterWidth = other.scatterWidth;\r\n }\r\n /** Shininess */\r\n get shininess() {\r\n return this._shininess;\r\n }\r\n set shininess(val) {\r\n if (val !== this._shininess) {\r\n this._shininess = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n /** Wrap */\r\n get scatterWrap() {\r\n return this._wrap;\r\n }\r\n set scatterWrap(wrap) {\r\n if (this._wrap !== wrap) {\r\n this._wrap = wrap;\r\n this.uniformChanged();\r\n this.useFeature(FEATURE_WRAP_LIGHTING, this._wrap !== 0);\r\n }\r\n }\r\n /** Scatter color */\r\n get scatterColor(): Immutable<Vector4> {\r\n return this._scatterColor;\r\n }\r\n set scatterColor(color: Immutable<Vector4>) {\r\n if (!color.equalsTo(this._scatterColor)) {\r\n this._scatterColor.set(color);\r\n this.uniformChanged();\r\n }\r\n }\r\n /** Scatter width */\r\n get scatterWidth() {\r\n return this._scatterWidth;\r\n }\r\n set scatterWidth(val) {\r\n if (val !== this._scatterWidth) {\r\n this._scatterWidth = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n vertexShader(scope: PBFunctionScope) {\r\n super.vertexShader(scope);\r\n if (this.needFragmentColor() && this.drawContext.materialFlags & MaterialVaryingFlags.INSTANCING) {\r\n scope.$outputs.zShininess = this.getInstancedUniform(scope, SHININESS_UNIFORM);\r\n }\r\n }\r\n fragmentShader(scope: PBFunctionScope) {\r\n super.fragmentShader(scope);\r\n const pb = scope.$builder;\r\n if (this.needFragmentColor() && !(this.drawContext.materialFlags & MaterialVaryingFlags.INSTANCING)) {\r\n scope.zShininess = pb.float().uniform(2);\r\n if (this.featureUsed(FEATURE_WRAP_LIGHTING)) {\r\n scope.zScatterWrap = pb.float().uniform(2);\r\n scope.zScatterWidth = pb.float().uniform(2);\r\n scope.zScatterColor = pb.vec4().uniform(2);\r\n }\r\n }\r\n }\r\n applyUniformValues(bindGroup: BindGroup, ctx: DrawContext, pass: number) {\r\n super.applyUniformValues(bindGroup, ctx, pass);\r\n if (this.needFragmentColor(ctx) && !(ctx.materialFlags & MaterialVaryingFlags.INSTANCING)) {\r\n bindGroup.setValue('zShininess', this._shininess);\r\n if (this.featureUsed(FEATURE_WRAP_LIGHTING)) {\r\n bindGroup.setValue('zScatterWrap', this._wrap);\r\n bindGroup.setValue('zScatterWidth', this._scatterWidth);\r\n bindGroup.setValue('zScatterColor', this._scatterColor);\r\n }\r\n }\r\n }\r\n blinnPhongLight(\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp,\r\n normal: PBShaderExp,\r\n viewVec: PBShaderExp,\r\n albedo: PBShaderExp,\r\n outRoughness?: PBShaderExp\r\n ) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_blinnPhongLight';\r\n const that = this;\r\n const baseLightPass = !that.drawContext.lightBlending;\r\n pb.func(\r\n funcName,\r\n [\r\n pb.vec3('worldPos'),\r\n pb.vec3('normal'),\r\n pb.vec3('viewVec'),\r\n pb.vec4('albedo'),\r\n ...(outRoughness ? [pb.vec4('outRoughness').out()] : [])\r\n ],\r\n function () {\r\n if (!that.needFragmentColor()) {\r\n this.$return(this.albedo.rgb);\r\n } else {\r\n const shininess =\r\n that.drawContext.materialFlags & MaterialVaryingFlags.INSTANCING\r\n ? this.$inputs.zShininess\r\n : this.zShininess;\r\n if (that.needCalculateEnvLight() && !outRoughness && baseLightPass) {\r\n this.$l.diffuseColor = that.getEnvLightIrradiance(this, this.normal);\r\n } else {\r\n this.$l.diffuseColor = pb.vec3(0);\r\n }\r\n this.$l.specularColor = pb.vec3(0);\r\n that.forEachLight(this, function (type, posRange, dirCutoff, colorIntensity, extra, shadow) {\r\n this.$l.diffuseScale = pb.float(1);\r\n this.$l.specularScale = pb.float(1);\r\n this.$l.sourceRadiusFactor = pb.float(0);\r\n this.$if(pb.equal(type, LIGHT_TYPE_POINT), function () {\r\n this.diffuseScale = extra.x;\r\n this.specularScale = extra.y;\r\n this.sourceRadiusFactor = pb.div(\r\n extra.z,\r\n pb.max(pb.distance(posRange.xyz, this.worldPos), 0.0001)\r\n );\r\n });\r\n this.$l.lightAtten = that.calculateLightAttenuation(\r\n this,\r\n type,\r\n this.worldPos,\r\n posRange,\r\n dirCutoff,\r\n extra\r\n );\r\n this.$l.lightDir = that.calculateLightDirection(this, type, this.worldPos, posRange, dirCutoff);\r\n this.$l.NoL = pb.dot(this.normal, this.lightDir);\r\n this.$l.halfVec = pb.normalize(pb.add(this.viewVec, this.lightDir));\r\n this.$l.NoH = pb.clamp(pb.dot(this.normal, this.halfVec), 0, 1);\r\n this.$l.lightColor = pb.mul(colorIntensity.rgb, colorIntensity.a, this.lightAtten);\r\n this.$l.pointShininess = pb.div(shininess, pb.add(1, pb.mul(this.sourceRadiusFactor, 32)));\r\n this.$l.pointShininess = pb.max(this.pointShininess, 1);\r\n if (that.featureUsed(FEATURE_WRAP_LIGHTING)) {\r\n this.$l.NoLwrap = pb.div(pb.add(this.NoL, this.zScatterWrap), pb.add(1, this.zScatterWrap));\r\n this.$l.diff = pb.max(this.NoLwrap, 0);\r\n this.$l.scatter = pb.mul(\r\n pb.smoothStep(0, this.zScatterWidth, this.NoLwrap),\r\n pb.smoothStep(pb.mul(this.zScatterWidth, 2), this.zScatterWidth, this.NoLwrap)\r\n );\r\n this.$l.spec = this.$choice(\r\n pb.lessThanEqual(this.NoLwrap, 0),\r\n pb.float(0),\r\n pb.pow(this.NoH, this.pointShininess)\r\n );\r\n this.$l.diffuse = pb.mul(\r\n this.lightColor,\r\n 1 / Math.PI,\r\n pb.add(pb.vec3(this.diff), pb.mul(this.zScatterColor.rgb, this.scatter), this.diffuseScale)\r\n );\r\n this.$l.specular = pb.mul(this.lightColor, this.spec, this.specularScale);\r\n } else {\r\n this.NoL = pb.clamp(this.NoL, 0, 1);\r\n this.$l.diffuse = pb.mul(this.lightColor, 1 / Math.PI, this.NoL, this.diffuseScale);\r\n this.$l.specular = pb.mul(\r\n this.lightColor,\r\n pb.pow(this.NoH, this.pointShininess),\r\n this.specularScale\r\n );\r\n }\r\n if (shadow) {\r\n this.$if(pb.greaterThan(this.NoL, 0), function () {\r\n this.$l.shadow = pb.vec3(that.calculateShadow(this, this.worldPos, this.NoL));\r\n this.diffuse = pb.mul(this.diffuse, this.shadow);\r\n this.specular = pb.mul(this.specular, this.shadow);\r\n });\r\n }\r\n this.diffuseColor = pb.add(this.diffuseColor, this.diffuse);\r\n this.specularColor = pb.add(this.specularColor, this.specular);\r\n });\r\n this.$l.litColor = pb.add(pb.mul(this.albedo.rgb, this.diffuseColor), this.specularColor);\r\n if (outRoughness) {\r\n this.$l.roughness = pb.sqrt(pb.div(2, pb.add(shininess, 2)));\r\n this.outRoughness = pb.vec4(\r\n pb.mul(this.albedo.rgb, pb.sub(1, this.roughness)),\r\n pb.mul(this.roughness, ShaderHelper.getCameraRoughnessFactor(this))\r\n );\r\n }\r\n this.$return(this.litColor);\r\n }\r\n }\r\n );\r\n return (\r\n outRoughness\r\n ? pb.getGlobalScope()[funcName](worldPos, normal, viewVec, albedo, outRoughness)\r\n : pb.getGlobalScope()[funcName](worldPos, normal, viewVec, albedo)\r\n ) as PBShaderExp;\r\n }\r\n } as unknown as T & { new (...args: any[]): IMixinBlinnPhong };\r\n FEATURE_WRAP_LIGHTING = cls.defineFeature();\r\n return cls;\r\n}\r\n"],"names":["mixinBlinnPhong","BaseCls","blinnPhongMixed","S","applyMaterialMixins","mixinLight","SHININESS_UNIFORM","defineInstanceUniform","FEATURE_WRAP_LIGHTING","cls","_shininess","_wrap","_scatterWidth","_scatterColor","Vector4","zero","useFeature","copyFrom","other","shininess","scatterWrap","scatterColor","scatterWidth","val","uniformChanged","wrap","color","equalsTo","set","vertexShader","scope","needFragmentColor","drawContext","materialFlags","MaterialVaryingFlags","INSTANCING","$outputs","zShininess","getInstancedUniform","fragmentShader","pb","$builder","float","uniform","featureUsed","zScatterWrap","zScatterWidth","zScatterColor","vec4","applyUniformValues","bindGroup","ctx","pass","setValue","blinnPhongLight","worldPos","normal","viewVec","albedo","outRoughness","funcName","that","baseLightPass","lightBlending","func","vec3","out","$return","rgb","$inputs","needCalculateEnvLight","$l","diffuseColor","getEnvLightIrradiance","specularColor","forEachLight","type","posRange","dirCutoff","colorIntensity","extra","shadow","diffuseScale","specularScale","sourceRadiusFactor","$if","equal","LIGHT_TYPE_POINT","x","y","div","z","max","distance","xyz","lightAtten","calculateLightAttenuation","lightDir","calculateLightDirection","NoL","dot","halfVec","normalize","add","NoH","clamp","lightColor","mul","a","pointShininess","NoLwrap","diff","scatter","smoothStep","spec","$choice","lessThanEqual","pow","diffuse","Math","PI","specular","greaterThan","calculateShadow","litColor","roughness","sqrt","sub","ShaderHelper","getCameraRoughnessFactor","getGlobalScope","defineFeature"],"mappings":";;;;;;AA8BA;;;;;IAMO,SAASA,eAAAA,CAA+CC,OAAU,EAAA;IACvE,IAAKA,OAAgBC,CAAAA,eAAe,EAAE;QACpC,OAAOD,OAAAA;AACT;IACA,MAAME,CAAAA,GAAIC,oBAAoBH,OAASI,EAAAA,UAAAA,CAAAA;AACvC,IAAA,MAAMC,iBAAoBH,GAAAA,CAAAA,CAAEI,qBAAqB,CAAC,aAAa,OAAS,EAAA,WAAA,CAAA;AACxE,IAAA,IAAIC,qBAAwB,GAAA,CAAA;AAC5B,IAAA,MAAMC,MAAM,cAAcN,CAAAA,CAAAA;AACxB,QAAA,OAAiBD,kBAAkB,IAAK;QAChCQ,UAAmB;QACnBC,KAAc;QACdC,aAAsB;QACtBC,aAAuB;QAC/B,WAAc,EAAA;YACZ,KAAK,EAAA;YACL,IAAI,CAACH,UAAU,GAAG,EAAA;YAClB,IAAI,CAACC,KAAK,GAAG,CAAA;YACb,IAAI,CAACC,aAAa,GAAG,GAAA;AACrB,YAAA,IAAI,CAACC,aAAa,GAAGC,OAAAA,CAAQC,IAAI,EAAA;YACjC,IAAI,CAACC,UAAU,CAACR,qBAAuB,EAAA,KAAA,CAAA;AACzC;AACAS,QAAAA,QAAAA,CAASC,KAAW,EAAE;AACpB,YAAA,KAAK,CAACD,QAASC,CAAAA,KAAAA,CAAAA;AACf,YAAA,IAAI,CAACC,SAAS,GAAGD,KAAAA,CAAMC,SAAS;AAChC,YAAA,IAAI,CAACC,WAAW,GAAGF,KAAAA,CAAME,WAAW;AACpC,YAAA,IAAI,CAACC,YAAY,GAAGH,KAAAA,CAAMG,YAAY;AACtC,YAAA,IAAI,CAACC,YAAY,GAAGJ,KAAAA,CAAMI,YAAY;AACxC;yBAEA,IAAIH,SAAY,GAAA;YACd,OAAO,IAAI,CAACT,UAAU;AACxB;QACA,IAAIS,SAAAA,CAAUI,GAAG,EAAE;AACjB,YAAA,IAAIA,GAAQ,KAAA,IAAI,CAACb,UAAU,EAAE;gBAC3B,IAAI,CAACA,UAAU,GAAGa,GAAAA;AAClB,gBAAA,IAAI,CAACC,cAAc,EAAA;AACrB;AACF;oBAEA,IAAIJ,WAAc,GAAA;YAChB,OAAO,IAAI,CAACT,KAAK;AACnB;QACA,IAAIS,WAAAA,CAAYK,IAAI,EAAE;AACpB,YAAA,IAAI,IAAI,CAACd,KAAK,KAAKc,IAAM,EAAA;gBACvB,IAAI,CAACd,KAAK,GAAGc,IAAAA;AACb,gBAAA,IAAI,CAACD,cAAc,EAAA;AACnB,gBAAA,IAAI,CAACR,UAAU,CAACR,uBAAuB,IAAI,CAACG,KAAK,KAAK,CAAA,CAAA;AACxD;AACF;6BAEA,IAAIU,YAAmC,GAAA;YACrC,OAAO,IAAI,CAACR,aAAa;AAC3B;QACA,IAAIQ,YAAAA,CAAaK,KAAyB,EAAE;AAC1C,YAAA,IAAI,CAACA,KAAMC,CAAAA,QAAQ,CAAC,IAAI,CAACd,aAAa,CAAG,EAAA;AACvC,gBAAA,IAAI,CAACA,aAAa,CAACe,GAAG,CAACF,KAAAA,CAAAA;AACvB,gBAAA,IAAI,CAACF,cAAc,EAAA;AACrB;AACF;6BAEA,IAAIF,YAAe,GAAA;YACjB,OAAO,IAAI,CAACV,aAAa;AAC3B;QACA,IAAIU,YAAAA,CAAaC,GAAG,EAAE;AACpB,YAAA,IAAIA,GAAQ,KAAA,IAAI,CAACX,aAAa,EAAE;gBAC9B,IAAI,CAACA,aAAa,GAAGW,GAAAA;AACrB,gBAAA,IAAI,CAACC,cAAc,EAAA;AACrB;AACF;AACAK,QAAAA,YAAAA,CAAaC,KAAsB,EAAE;AACnC,YAAA,KAAK,CAACD,YAAaC,CAAAA,KAAAA,CAAAA;AACnB,YAAA,IAAI,IAAI,CAACC,iBAAiB,EAAA,IAAM,IAAI,CAACC,WAAW,CAACC,aAAa,GAAGC,oBAAqBC,CAAAA,UAAU,EAAE;gBAChGL,KAAMM,CAAAA,QAAQ,CAACC,UAAU,GAAG,IAAI,CAACC,mBAAmB,CAACR,KAAOxB,EAAAA,iBAAAA,CAAAA;AAC9D;AACF;AACAiC,QAAAA,cAAAA,CAAeT,KAAsB,EAAE;AACrC,YAAA,KAAK,CAACS,cAAeT,CAAAA,KAAAA,CAAAA;YACrB,MAAMU,EAAAA,GAAKV,MAAMW,QAAQ;AACzB,YAAA,IAAI,IAAI,CAACV,iBAAiB,EAAA,IAAM,EAAE,IAAI,CAACC,WAAW,CAACC,aAAa,GAAGC,oBAAqBC,CAAAA,UAAU,CAAG,EAAA;AACnGL,gBAAAA,KAAAA,CAAMO,UAAU,GAAGG,EAAAA,CAAGE,KAAK,EAAA,CAAGC,OAAO,CAAC,CAAA,CAAA;AACtC,gBAAA,IAAI,IAAI,CAACC,WAAW,CAACpC,qBAAwB,CAAA,EAAA;AAC3CsB,oBAAAA,KAAAA,CAAMe,YAAY,GAAGL,EAAAA,CAAGE,KAAK,EAAA,CAAGC,OAAO,CAAC,CAAA,CAAA;AACxCb,oBAAAA,KAAAA,CAAMgB,aAAa,GAAGN,EAAAA,CAAGE,KAAK,EAAA,CAAGC,OAAO,CAAC,CAAA,CAAA;AACzCb,oBAAAA,KAAAA,CAAMiB,aAAa,GAAGP,EAAAA,CAAGQ,IAAI,EAAA,CAAGL,OAAO,CAAC,CAAA,CAAA;AAC1C;AACF;AACF;AACAM,QAAAA,kBAAAA,CAAmBC,SAAoB,EAAEC,GAAgB,EAAEC,IAAY,EAAE;YACvE,KAAK,CAACH,kBAAmBC,CAAAA,SAAAA,EAAWC,GAAKC,EAAAA,IAAAA,CAAAA;AACzC,YAAA,IAAI,IAAI,CAACrB,iBAAiB,CAACoB,GAAQ,CAAA,IAAA,EAAEA,GAAAA,CAAIlB,aAAa,GAAGC,oBAAqBC,CAAAA,UAAU,CAAG,EAAA;AACzFe,gBAAAA,SAAAA,CAAUG,QAAQ,CAAC,YAAc,EAAA,IAAI,CAAC3C,UAAU,CAAA;AAChD,gBAAA,IAAI,IAAI,CAACkC,WAAW,CAACpC,qBAAwB,CAAA,EAAA;AAC3C0C,oBAAAA,SAAAA,CAAUG,QAAQ,CAAC,cAAgB,EAAA,IAAI,CAAC1C,KAAK,CAAA;AAC7CuC,oBAAAA,SAAAA,CAAUG,QAAQ,CAAC,eAAiB,EAAA,IAAI,CAACzC,aAAa,CAAA;AACtDsC,oBAAAA,SAAAA,CAAUG,QAAQ,CAAC,eAAiB,EAAA,IAAI,CAACxC,aAAa,CAAA;AACxD;AACF;AACF;QACAyC,eACExB,CAAAA,KAA4B,EAC5ByB,QAAqB,EACrBC,MAAmB,EACnBC,OAAoB,EACpBC,MAAmB,EACnBC,YAA0B,EAC1B;YACA,MAAMnB,EAAAA,GAAKV,MAAMW,QAAQ;AACzB,YAAA,MAAMmB,QAAW,GAAA,mBAAA;AACjB,YAAA,MAAMC,OAAO,IAAI;AACjB,YAAA,MAAMC,aAAgB,GAAA,CAACD,IAAK7B,CAAAA,WAAW,CAAC+B,aAAa;YACrDvB,EAAGwB,CAAAA,IAAI,CACLJ,QACA,EAAA;AACEpB,gBAAAA,EAAAA,CAAGyB,IAAI,CAAC,UAAA,CAAA;AACRzB,gBAAAA,EAAAA,CAAGyB,IAAI,CAAC,QAAA,CAAA;AACRzB,gBAAAA,EAAAA,CAAGyB,IAAI,CAAC,SAAA,CAAA;AACRzB,gBAAAA,EAAAA,CAAGQ,IAAI,CAAC,QAAA,CAAA;mBACJW,YAAe,GAAA;oBAACnB,EAAGQ,CAAAA,IAAI,CAAC,cAAA,CAAA,CAAgBkB,GAAG;AAAG,iBAAA,GAAG;aACtD,EACD,WAAA;gBACE,IAAI,CAACL,IAAK9B,CAAAA,iBAAiB,EAAI,EAAA;AAC7B,oBAAA,IAAI,CAACoC,OAAO,CAAC,IAAI,CAACT,MAAM,CAACU,GAAG,CAAA;iBACvB,MAAA;AACL,oBAAA,MAAMjD,YACJ0C,IAAK7B,CAAAA,WAAW,CAACC,aAAa,GAAGC,oBAAqBC,CAAAA,UAAU,GAC5D,IAAI,CAACkC,OAAO,CAAChC,UAAU,GACvB,IAAI,CAACA,UAAU;AACrB,oBAAA,IAAIwB,IAAKS,CAAAA,qBAAqB,EAAM,IAAA,CAACX,gBAAgBG,aAAe,EAAA;AAClE,wBAAA,IAAI,CAACS,EAAE,CAACC,YAAY,GAAGX,IAAAA,CAAKY,qBAAqB,CAAC,IAAI,EAAE,IAAI,CAACjB,MAAM,CAAA;qBAC9D,MAAA;AACL,wBAAA,IAAI,CAACe,EAAE,CAACC,YAAY,GAAGhC,EAAAA,CAAGyB,IAAI,CAAC,CAAA,CAAA;AACjC;AACA,oBAAA,IAAI,CAACM,EAAE,CAACG,aAAa,GAAGlC,EAAAA,CAAGyB,IAAI,CAAC,CAAA,CAAA;AAChCJ,oBAAAA,IAAAA,CAAKc,YAAY,CAAC,IAAI,EAAE,SAAUC,IAAI,EAAEC,QAAQ,EAAEC,SAAS,EAAEC,cAAc,EAAEC,KAAK,EAAEC,MAAM,EAAA;AACxF,wBAAA,IAAI,CAACV,EAAE,CAACW,YAAY,GAAG1C,EAAAA,CAAGE,KAAK,CAAC,CAAA,CAAA;AAChC,wBAAA,IAAI,CAAC6B,EAAE,CAACY,aAAa,GAAG3C,EAAAA,CAAGE,KAAK,CAAC,CAAA,CAAA;AACjC,wBAAA,IAAI,CAAC6B,EAAE,CAACa,kBAAkB,GAAG5C,EAAAA,CAAGE,KAAK,CAAC,CAAA,CAAA;AACtC,wBAAA,IAAI,CAAC2C,GAAG,CAAC7C,GAAG8C,KAAK,CAACV,MAAMW,gBAAmB,CAAA,EAAA,WAAA;AACzC,4BAAA,IAAI,CAACL,YAAY,GAAGF,KAAAA,CAAMQ,CAAC;AAC3B,4BAAA,IAAI,CAACL,aAAa,GAAGH,KAAAA,CAAMS,CAAC;4BAC5B,IAAI,CAACL,kBAAkB,GAAG5C,EAAAA,CAAGkD,GAAG,CAC9BV,KAAAA,CAAMW,CAAC,EACPnD,EAAAA,CAAGoD,GAAG,CAACpD,EAAAA,CAAGqD,QAAQ,CAAChB,QAAAA,CAASiB,GAAG,EAAE,IAAI,CAACvC,QAAQ,CAAG,EAAA,MAAA,CAAA,CAAA;AAErD,yBAAA,CAAA;AACA,wBAAA,IAAI,CAACgB,EAAE,CAACwB,UAAU,GAAGlC,KAAKmC,yBAAyB,CACjD,IAAI,EACJpB,MACA,IAAI,CAACrB,QAAQ,EACbsB,UACAC,SACAE,EAAAA,KAAAA,CAAAA;AAEF,wBAAA,IAAI,CAACT,EAAE,CAAC0B,QAAQ,GAAGpC,IAAKqC,CAAAA,uBAAuB,CAAC,IAAI,EAAEtB,IAAM,EAAA,IAAI,CAACrB,QAAQ,EAAEsB,QAAUC,EAAAA,SAAAA,CAAAA;AACrF,wBAAA,IAAI,CAACP,EAAE,CAAC4B,GAAG,GAAG3D,EAAG4D,CAAAA,GAAG,CAAC,IAAI,CAAC5C,MAAM,EAAE,IAAI,CAACyC,QAAQ,CAAA;AAC/C,wBAAA,IAAI,CAAC1B,EAAE,CAAC8B,OAAO,GAAG7D,GAAG8D,SAAS,CAAC9D,EAAG+D,CAAAA,GAAG,CAAC,IAAI,CAAC9C,OAAO,EAAE,IAAI,CAACwC,QAAQ,CAAA,CAAA;AACjE,wBAAA,IAAI,CAAC1B,EAAE,CAACiC,GAAG,GAAGhE,EAAAA,CAAGiE,KAAK,CAACjE,EAAAA,CAAG4D,GAAG,CAAC,IAAI,CAAC5C,MAAM,EAAE,IAAI,CAAC6C,OAAO,GAAG,CAAG,EAAA,CAAA,CAAA;AAC7D,wBAAA,IAAI,CAAC9B,EAAE,CAACmC,UAAU,GAAGlE,GAAGmE,GAAG,CAAC5B,cAAeX,CAAAA,GAAG,EAAEW,cAAe6B,CAAAA,CAAC,EAAE,IAAI,CAACb,UAAU,CAAA;AACjF,wBAAA,IAAI,CAACxB,EAAE,CAACsC,cAAc,GAAGrE,EAAAA,CAAGkD,GAAG,CAACvE,SAAAA,EAAWqB,GAAG+D,GAAG,CAAC,GAAG/D,EAAGmE,CAAAA,GAAG,CAAC,IAAI,CAACvB,kBAAkB,EAAE,EAAA,CAAA,CAAA,CAAA;wBACrF,IAAI,CAACb,EAAE,CAACsC,cAAc,GAAGrE,EAAGoD,CAAAA,GAAG,CAAC,IAAI,CAACiB,cAAc,EAAE,CAAA,CAAA;wBACrD,IAAIhD,IAAAA,CAAKjB,WAAW,CAACpC,qBAAwB,CAAA,EAAA;4BAC3C,IAAI,CAAC+D,EAAE,CAACuC,OAAO,GAAGtE,GAAGkD,GAAG,CAAClD,EAAG+D,CAAAA,GAAG,CAAC,IAAI,CAACJ,GAAG,EAAE,IAAI,CAACtD,YAAY,CAAA,EAAGL,EAAG+D,CAAAA,GAAG,CAAC,CAAA,EAAG,IAAI,CAAC1D,YAAY,CAAA,CAAA;4BACzF,IAAI,CAAC0B,EAAE,CAACwC,IAAI,GAAGvE,EAAGoD,CAAAA,GAAG,CAAC,IAAI,CAACkB,OAAO,EAAE,CAAA,CAAA;AACpC,4BAAA,IAAI,CAACvC,EAAE,CAACyC,OAAO,GAAGxE,GAAGmE,GAAG,CACtBnE,EAAGyE,CAAAA,UAAU,CAAC,CAAG,EAAA,IAAI,CAACnE,aAAa,EAAE,IAAI,CAACgE,OAAO,CAAA,EACjDtE,GAAGyE,UAAU,CAACzE,EAAGmE,CAAAA,GAAG,CAAC,IAAI,CAAC7D,aAAa,EAAE,IAAI,IAAI,CAACA,aAAa,EAAE,IAAI,CAACgE,OAAO,CAAA,CAAA;AAE/E,4BAAA,IAAI,CAACvC,EAAE,CAAC2C,IAAI,GAAG,IAAI,CAACC,OAAO,CACzB3E,EAAAA,CAAG4E,aAAa,CAAC,IAAI,CAACN,OAAO,EAAE,CAAA,CAAA,EAC/BtE,EAAGE,CAAAA,KAAK,CAAC,CAAA,CAAA,EACTF,EAAG6E,CAAAA,GAAG,CAAC,IAAI,CAACb,GAAG,EAAE,IAAI,CAACK,cAAc,CAAA,CAAA;AAEtC,4BAAA,IAAI,CAACtC,EAAE,CAAC+C,OAAO,GAAG9E,EAAAA,CAAGmE,GAAG,CACtB,IAAI,CAACD,UAAU,EACf,CAAIa,GAAAA,IAAAA,CAAKC,EAAE,EACXhF,EAAAA,CAAG+D,GAAG,CAAC/D,EAAAA,CAAGyB,IAAI,CAAC,IAAI,CAAC8C,IAAI,GAAGvE,EAAGmE,CAAAA,GAAG,CAAC,IAAI,CAAC5D,aAAa,CAACqB,GAAG,EAAE,IAAI,CAAC4C,OAAO,CAAG,EAAA,IAAI,CAAC9B,YAAY,CAAA,CAAA;AAE5F,4BAAA,IAAI,CAACX,EAAE,CAACkD,QAAQ,GAAGjF,EAAAA,CAAGmE,GAAG,CAAC,IAAI,CAACD,UAAU,EAAE,IAAI,CAACQ,IAAI,EAAE,IAAI,CAAC/B,aAAa,CAAA;yBACnE,MAAA;4BACL,IAAI,CAACgB,GAAG,GAAG3D,EAAGiE,CAAAA,KAAK,CAAC,IAAI,CAACN,GAAG,EAAE,CAAG,EAAA,CAAA,CAAA;4BACjC,IAAI,CAAC5B,EAAE,CAAC+C,OAAO,GAAG9E,EAAGmE,CAAAA,GAAG,CAAC,IAAI,CAACD,UAAU,EAAE,CAAIa,GAAAA,IAAAA,CAAKC,EAAE,EAAE,IAAI,CAACrB,GAAG,EAAE,IAAI,CAACjB,YAAY,CAAA;4BAClF,IAAI,CAACX,EAAE,CAACkD,QAAQ,GAAGjF,GAAGmE,GAAG,CACvB,IAAI,CAACD,UAAU,EACflE,GAAG6E,GAAG,CAAC,IAAI,CAACb,GAAG,EAAE,IAAI,CAACK,cAAc,CAAA,EACpC,IAAI,CAAC1B,aAAa,CAAA;AAEtB;AACA,wBAAA,IAAIF,MAAQ,EAAA;4BACV,IAAI,CAACI,GAAG,CAAC7C,EAAGkF,CAAAA,WAAW,CAAC,IAAI,CAACvB,GAAG,EAAE,CAAI,CAAA,EAAA,WAAA;AACpC,gCAAA,IAAI,CAAC5B,EAAE,CAACU,MAAM,GAAGzC,EAAAA,CAAGyB,IAAI,CAACJ,IAAAA,CAAK8D,eAAe,CAAC,IAAI,EAAE,IAAI,CAACpE,QAAQ,EAAE,IAAI,CAAC4C,GAAG,CAAA,CAAA;AAC3E,gCAAA,IAAI,CAACmB,OAAO,GAAG9E,EAAAA,CAAGmE,GAAG,CAAC,IAAI,CAACW,OAAO,EAAE,IAAI,CAACrC,MAAM,CAAA;AAC/C,gCAAA,IAAI,CAACwC,QAAQ,GAAGjF,EAAAA,CAAGmE,GAAG,CAAC,IAAI,CAACc,QAAQ,EAAE,IAAI,CAACxC,MAAM,CAAA;AACnD,6BAAA,CAAA;AACF;AACA,wBAAA,IAAI,CAACT,YAAY,GAAGhC,EAAAA,CAAG+D,GAAG,CAAC,IAAI,CAAC/B,YAAY,EAAE,IAAI,CAAC8C,OAAO,CAAA;AAC1D,wBAAA,IAAI,CAAC5C,aAAa,GAAGlC,EAAAA,CAAG+D,GAAG,CAAC,IAAI,CAAC7B,aAAa,EAAE,IAAI,CAAC+C,QAAQ,CAAA;AAC/D,qBAAA,CAAA;oBACA,IAAI,CAAClD,EAAE,CAACqD,QAAQ,GAAGpF,EAAG+D,CAAAA,GAAG,CAAC/D,EAAAA,CAAGmE,GAAG,CAAC,IAAI,CAACjD,MAAM,CAACU,GAAG,EAAE,IAAI,CAACI,YAAY,CAAA,EAAG,IAAI,CAACE,aAAa,CAAA;AACxF,oBAAA,IAAIf,YAAc,EAAA;AAChB,wBAAA,IAAI,CAACY,EAAE,CAACsD,SAAS,GAAGrF,EAAGsF,CAAAA,IAAI,CAACtF,EAAAA,CAAGkD,GAAG,CAAC,CAAA,EAAGlD,EAAG+D,CAAAA,GAAG,CAACpF,SAAW,EAAA,CAAA,CAAA,CAAA,CAAA;AACxD,wBAAA,IAAI,CAACwC,YAAY,GAAGnB,EAAAA,CAAGQ,IAAI,CACzBR,EAAAA,CAAGmE,GAAG,CAAC,IAAI,CAACjD,MAAM,CAACU,GAAG,EAAE5B,EAAAA,CAAGuF,GAAG,CAAC,CAAG,EAAA,IAAI,CAACF,SAAS,IAChDrF,EAAGmE,CAAAA,GAAG,CAAC,IAAI,CAACkB,SAAS,EAAEG,YAAaC,CAAAA,wBAAwB,CAAC,IAAI,CAAA,CAAA,CAAA;AAErE;AACA,oBAAA,IAAI,CAAC9D,OAAO,CAAC,IAAI,CAACyD,QAAQ,CAAA;AAC5B;AACF,aAAA,CAAA;YAEF,OACEjE,YAAAA,GACInB,GAAG0F,cAAc,EAAE,CAACtE,QAAS,CAAA,CAACL,UAAUC,MAAQC,EAAAA,OAAAA,EAASC,QAAQC,YACjEnB,CAAAA,GAAAA,EAAAA,CAAG0F,cAAc,EAAE,CAACtE,SAAS,CAACL,QAAAA,EAAUC,QAAQC,OAASC,EAAAA,MAAAA,CAAAA;AAEjE;AACF,KAAA;AACAlD,IAAAA,qBAAAA,GAAwBC,IAAI0H,aAAa,EAAA;IACzC,OAAO1H,GAAAA;AACT;;;;"}
1
+ {"version":3,"file":"blinnphong.js","sources":["../../../../src/material/mixins/lightmodel/blinnphong.ts"],"sourcesContent":["import type { BindGroup, PBFunctionScope, PBInsideFunctionScope, PBShaderExp } from '@zephyr3d/device';\r\nimport type { MeshMaterial } from '../../meshmaterial';\r\nimport { applyMaterialMixins } from '../../meshmaterial';\r\nimport type { IMixinLight } from '../lit';\r\nimport { mixinLight } from '../lit';\r\nimport type { DrawContext } from '../../../render';\r\nimport { ShaderHelper } from '../../shader/helper';\r\nimport { LIGHT_TYPE_POINT, MaterialVaryingFlags } from '../../../values';\r\nimport type { Immutable } from '@zephyr3d/base';\r\nimport { Vector4 } from '@zephyr3d/base';\r\n\r\n/**\r\n * Interface for blinn-phong lighting model mixin\r\n * @public\r\n */\r\nexport type IMixinBlinnPhong = {\r\n shininess: number;\r\n scatterWrap: number;\r\n scatterWidth: number;\r\n scatterColor: Vector4;\r\n /**\r\n * @param geometricNormal - Interpolated vertex normal, used for shadow normal\r\n * offset bias. Defaults to `normal`; pass the pre-normal-map normal (such as\r\n * `TBN[2]`) when the material has one, so the shadow lookup is not displaced\r\n * along normal map detail.\r\n */\r\n blinnPhongLight(\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp,\r\n normal: PBShaderExp,\r\n viewVec: PBShaderExp,\r\n albedo: PBShaderExp,\r\n outRoughness?: PBShaderExp,\r\n geometricNormal?: PBShaderExp\r\n ): PBShaderExp;\r\n} & IMixinLight;\r\n\r\n/**\r\n * Blinn-phong lighting model mixin\r\n * @param BaseCls - Class to mix in\r\n * @returns Mixed class\r\n * @public\r\n */\r\nexport function mixinBlinnPhong<T extends typeof MeshMaterial>(BaseCls: T) {\r\n if ((BaseCls as any).blinnPhongMixed) {\r\n return BaseCls as T & { new (...args: any[]): IMixinBlinnPhong };\r\n }\r\n const S = applyMaterialMixins(BaseCls, mixinLight);\r\n const SHININESS_UNIFORM = S.defineInstanceUniform('shininess', 'float', 'Shininess');\r\n let FEATURE_WRAP_LIGHTING = 0;\r\n const cls = class extends S implements IMixinBlinnPhong {\r\n protected static blinnPhongMixed = true;\r\n private _shininess: number;\r\n private _wrap: number;\r\n private _scatterWidth: number;\r\n private _scatterColor: Vector4;\r\n constructor() {\r\n super();\r\n this._shininess = 32;\r\n this._wrap = 0;\r\n this._scatterWidth = 0.3;\r\n this._scatterColor = Vector4.zero();\r\n this.useFeature(FEATURE_WRAP_LIGHTING, false);\r\n }\r\n copyFrom(other: this) {\r\n super.copyFrom(other);\r\n this.shininess = other.shininess;\r\n this.scatterWrap = other.scatterWrap;\r\n this.scatterColor = other.scatterColor;\r\n this.scatterWidth = other.scatterWidth;\r\n }\r\n /** Shininess */\r\n get shininess() {\r\n return this._shininess;\r\n }\r\n set shininess(val) {\r\n if (val !== this._shininess) {\r\n this._shininess = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n /** Wrap */\r\n get scatterWrap() {\r\n return this._wrap;\r\n }\r\n set scatterWrap(wrap) {\r\n if (this._wrap !== wrap) {\r\n this._wrap = wrap;\r\n this.uniformChanged();\r\n this.useFeature(FEATURE_WRAP_LIGHTING, this._wrap !== 0);\r\n }\r\n }\r\n /** Scatter color */\r\n get scatterColor(): Immutable<Vector4> {\r\n return this._scatterColor;\r\n }\r\n set scatterColor(color: Immutable<Vector4>) {\r\n if (!color.equalsTo(this._scatterColor)) {\r\n this._scatterColor.set(color);\r\n this.uniformChanged();\r\n }\r\n }\r\n /** Scatter width */\r\n get scatterWidth() {\r\n return this._scatterWidth;\r\n }\r\n set scatterWidth(val) {\r\n if (val !== this._scatterWidth) {\r\n this._scatterWidth = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n vertexShader(scope: PBFunctionScope) {\r\n super.vertexShader(scope);\r\n if (this.needFragmentColor() && this.drawContext.materialFlags & MaterialVaryingFlags.INSTANCING) {\r\n scope.$outputs.zShininess = this.getInstancedUniform(scope, SHININESS_UNIFORM);\r\n }\r\n }\r\n fragmentShader(scope: PBFunctionScope) {\r\n super.fragmentShader(scope);\r\n const pb = scope.$builder;\r\n if (this.needFragmentColor() && !(this.drawContext.materialFlags & MaterialVaryingFlags.INSTANCING)) {\r\n scope.zShininess = pb.float().uniform(2);\r\n if (this.featureUsed(FEATURE_WRAP_LIGHTING)) {\r\n scope.zScatterWrap = pb.float().uniform(2);\r\n scope.zScatterWidth = pb.float().uniform(2);\r\n scope.zScatterColor = pb.vec4().uniform(2);\r\n }\r\n }\r\n }\r\n applyUniformValues(bindGroup: BindGroup, ctx: DrawContext, pass: number) {\r\n super.applyUniformValues(bindGroup, ctx, pass);\r\n if (this.needFragmentColor(ctx) && !(ctx.materialFlags & MaterialVaryingFlags.INSTANCING)) {\r\n bindGroup.setValue('zShininess', this._shininess);\r\n if (this.featureUsed(FEATURE_WRAP_LIGHTING)) {\r\n bindGroup.setValue('zScatterWrap', this._wrap);\r\n bindGroup.setValue('zScatterWidth', this._scatterWidth);\r\n bindGroup.setValue('zScatterColor', this._scatterColor);\r\n }\r\n }\r\n }\r\n blinnPhongLight(\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp,\r\n normal: PBShaderExp,\r\n viewVec: PBShaderExp,\r\n albedo: PBShaderExp,\r\n outRoughness?: PBShaderExp,\r\n geometricNormal?: PBShaderExp\r\n ) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_blinnPhongLight';\r\n const that = this;\r\n const baseLightPass = !that.drawContext.lightBlending;\r\n pb.func(\r\n funcName,\r\n [\r\n pb.vec3('worldPos'),\r\n pb.vec3('normal'),\r\n pb.vec3('viewVec'),\r\n pb.vec4('albedo'),\r\n pb.vec3('geometricNormal'),\r\n ...(outRoughness ? [pb.vec4('outRoughness').out()] : [])\r\n ],\r\n function () {\r\n if (!that.needFragmentColor()) {\r\n this.$return(this.albedo.rgb);\r\n } else {\r\n const shininess =\r\n that.drawContext.materialFlags & MaterialVaryingFlags.INSTANCING\r\n ? this.$inputs.zShininess\r\n : this.zShininess;\r\n if (that.needCalculateEnvLight() && !outRoughness && baseLightPass) {\r\n this.$l.diffuseColor = that.getEnvLightIrradiance(this, this.normal);\r\n } else {\r\n this.$l.diffuseColor = pb.vec3(0);\r\n }\r\n this.$l.specularColor = pb.vec3(0);\r\n that.forEachLight(this, function (type, posRange, dirCutoff, colorIntensity, extra, shadow) {\r\n this.$l.diffuseScale = pb.float(1);\r\n this.$l.specularScale = pb.float(1);\r\n this.$l.sourceRadiusFactor = pb.float(0);\r\n this.$if(pb.equal(type, LIGHT_TYPE_POINT), function () {\r\n this.diffuseScale = extra.x;\r\n this.specularScale = extra.y;\r\n this.sourceRadiusFactor = pb.div(\r\n extra.z,\r\n pb.max(pb.distance(posRange.xyz, this.worldPos), 0.0001)\r\n );\r\n });\r\n this.$l.lightAtten = that.calculateLightAttenuation(\r\n this,\r\n type,\r\n this.worldPos,\r\n posRange,\r\n dirCutoff,\r\n extra\r\n );\r\n this.$l.lightDir = that.calculateLightDirection(this, type, this.worldPos, posRange, dirCutoff);\r\n this.$l.NoL = pb.dot(this.normal, this.lightDir);\r\n this.$l.halfVec = pb.normalize(pb.add(this.viewVec, this.lightDir));\r\n this.$l.NoH = pb.clamp(pb.dot(this.normal, this.halfVec), 0, 1);\r\n this.$l.lightColor = pb.mul(colorIntensity.rgb, colorIntensity.a, this.lightAtten);\r\n this.$l.pointShininess = pb.div(shininess, pb.add(1, pb.mul(this.sourceRadiusFactor, 32)));\r\n this.$l.pointShininess = pb.max(this.pointShininess, 1);\r\n if (that.featureUsed(FEATURE_WRAP_LIGHTING)) {\r\n this.$l.NoLwrap = pb.div(pb.add(this.NoL, this.zScatterWrap), pb.add(1, this.zScatterWrap));\r\n this.$l.diff = pb.max(this.NoLwrap, 0);\r\n this.$l.scatter = pb.mul(\r\n pb.smoothStep(0, this.zScatterWidth, this.NoLwrap),\r\n pb.smoothStep(pb.mul(this.zScatterWidth, 2), this.zScatterWidth, this.NoLwrap)\r\n );\r\n this.$l.spec = this.$choice(\r\n pb.lessThanEqual(this.NoLwrap, 0),\r\n pb.float(0),\r\n pb.pow(this.NoH, this.pointShininess)\r\n );\r\n this.$l.diffuse = pb.mul(\r\n this.lightColor,\r\n 1 / Math.PI,\r\n pb.add(pb.vec3(this.diff), pb.mul(this.zScatterColor.rgb, this.scatter), this.diffuseScale)\r\n );\r\n this.$l.specular = pb.mul(this.lightColor, this.spec, this.specularScale);\r\n } else {\r\n this.NoL = pb.clamp(this.NoL, 0, 1);\r\n this.$l.diffuse = pb.mul(this.lightColor, 1 / Math.PI, this.NoL, this.diffuseScale);\r\n this.$l.specular = pb.mul(\r\n this.lightColor,\r\n pb.pow(this.NoH, this.pointShininess),\r\n this.specularScale\r\n );\r\n }\r\n if (shadow) {\r\n this.$if(pb.greaterThan(this.NoL, 0), function () {\r\n this.$l.shadow = pb.vec3(\r\n that.calculateShadow(this, this.worldPos, this.geometricNormal, this.NoL)\r\n );\r\n this.diffuse = pb.mul(this.diffuse, this.shadow);\r\n this.specular = pb.mul(this.specular, this.shadow);\r\n });\r\n }\r\n this.diffuseColor = pb.add(this.diffuseColor, this.diffuse);\r\n this.specularColor = pb.add(this.specularColor, this.specular);\r\n });\r\n this.$l.litColor = pb.add(pb.mul(this.albedo.rgb, this.diffuseColor), this.specularColor);\r\n if (outRoughness) {\r\n this.$l.roughness = pb.sqrt(pb.div(2, pb.add(shininess, 2)));\r\n this.outRoughness = pb.vec4(\r\n pb.mul(this.albedo.rgb, pb.sub(1, this.roughness)),\r\n pb.mul(this.roughness, ShaderHelper.getCameraRoughnessFactor(this))\r\n );\r\n }\r\n this.$return(this.litColor);\r\n }\r\n }\r\n );\r\n const gn = geometricNormal ?? normal;\r\n return (\r\n outRoughness\r\n ? pb.getGlobalScope()[funcName](worldPos, normal, viewVec, albedo, gn, outRoughness)\r\n : pb.getGlobalScope()[funcName](worldPos, normal, viewVec, albedo, gn)\r\n ) as PBShaderExp;\r\n }\r\n } as unknown as T & { new (...args: any[]): IMixinBlinnPhong };\r\n FEATURE_WRAP_LIGHTING = cls.defineFeature();\r\n return cls;\r\n}\r\n"],"names":["mixinBlinnPhong","BaseCls","blinnPhongMixed","S","applyMaterialMixins","mixinLight","SHININESS_UNIFORM","defineInstanceUniform","FEATURE_WRAP_LIGHTING","cls","_shininess","_wrap","_scatterWidth","_scatterColor","Vector4","zero","useFeature","copyFrom","other","shininess","scatterWrap","scatterColor","scatterWidth","val","uniformChanged","wrap","color","equalsTo","set","vertexShader","scope","needFragmentColor","drawContext","materialFlags","MaterialVaryingFlags","INSTANCING","$outputs","zShininess","getInstancedUniform","fragmentShader","pb","$builder","float","uniform","featureUsed","zScatterWrap","zScatterWidth","zScatterColor","vec4","applyUniformValues","bindGroup","ctx","pass","setValue","blinnPhongLight","worldPos","normal","viewVec","albedo","outRoughness","geometricNormal","funcName","that","baseLightPass","lightBlending","func","vec3","out","$return","rgb","$inputs","needCalculateEnvLight","$l","diffuseColor","getEnvLightIrradiance","specularColor","forEachLight","type","posRange","dirCutoff","colorIntensity","extra","shadow","diffuseScale","specularScale","sourceRadiusFactor","$if","equal","LIGHT_TYPE_POINT","x","y","div","z","max","distance","xyz","lightAtten","calculateLightAttenuation","lightDir","calculateLightDirection","NoL","dot","halfVec","normalize","add","NoH","clamp","lightColor","mul","a","pointShininess","NoLwrap","diff","scatter","smoothStep","spec","$choice","lessThanEqual","pow","diffuse","Math","PI","specular","greaterThan","calculateShadow","litColor","roughness","sqrt","sub","ShaderHelper","getCameraRoughnessFactor","gn","getGlobalScope","defineFeature"],"mappings":"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"}
@@ -17,7 +17,7 @@ import { LIGHT_TYPE_POINT } from '../../../values.js';
17
17
  constructor(){
18
18
  super();
19
19
  }
20
- lambertLight(scope, worldPos, normal, albedo) {
20
+ lambertLight(scope, worldPos, normal, albedo, geometricNormal) {
21
21
  const pb = scope.$builder;
22
22
  const funcName = 'Z_lambertLight';
23
23
  const that = this;
@@ -25,7 +25,8 @@ import { LIGHT_TYPE_POINT } from '../../../values.js';
25
25
  pb.func(funcName, [
26
26
  pb.vec3('worldPos'),
27
27
  pb.vec3('normal'),
28
- pb.vec4('albedo')
28
+ pb.vec4('albedo'),
29
+ pb.vec3('geometricNormal')
29
30
  ], function() {
30
31
  if (!that.needFragmentColor()) {
31
32
  this.$return(this.albedo.rgb);
@@ -46,7 +47,7 @@ import { LIGHT_TYPE_POINT } from '../../../values.js';
46
47
  this.$l.lightColor = pb.mul(colorIntensity.rgb, colorIntensity.a, this.lightAtten, this.diffuseScale);
47
48
  this.$l.diffuse = pb.mul(this.lightColor, 1 / Math.PI, this.NoL);
48
49
  if (shadow) {
49
- this.$l.shadow = pb.vec3(that.calculateShadow(this, this.worldPos, this.NoL));
50
+ this.$l.shadow = pb.vec3(that.calculateShadow(this, this.worldPos, this.geometricNormal, this.NoL));
50
51
  this.diffuse = pb.mul(this.diffuse, this.shadow);
51
52
  }
52
53
  this.diffuseColor = pb.add(this.diffuseColor, this.diffuse);
@@ -55,7 +56,7 @@ import { LIGHT_TYPE_POINT } from '../../../values.js';
55
56
  this.$return(this.litColor);
56
57
  }
57
58
  });
58
- return pb.getGlobalScope()[funcName](worldPos, normal, albedo);
59
+ return pb.getGlobalScope()[funcName](worldPos, normal, albedo, geometricNormal ?? normal);
59
60
  }
60
61
  };
61
62
  }
@@ -1 +1 @@
1
- {"version":3,"file":"lambert.js","sources":["../../../../src/material/mixins/lightmodel/lambert.ts"],"sourcesContent":["import type { PBInsideFunctionScope, PBShaderExp } from '@zephyr3d/device';\r\nimport type { MeshMaterial } from '../../meshmaterial';\r\nimport { applyMaterialMixins } from '../../meshmaterial';\r\nimport type { IMixinLight } from '../lit';\r\nimport { mixinLight } from '../lit';\r\nimport { LIGHT_TYPE_POINT } from '../../../values';\r\n\r\n/**\r\n * Interface of lambert lighting model mixin\r\n * @public\r\n */\r\nexport type IMixinLambert = {\r\n lambertLight(\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp,\r\n normal: PBShaderExp,\r\n albedo: PBShaderExp\r\n ): PBShaderExp;\r\n} & IMixinLight;\r\n\r\n/**\r\n * Lambert lighting model mixin\r\n * @param BaseCls - Class to mix in\r\n * @returns Mixed class\r\n * @public\r\n */\r\nexport function mixinLambert<T extends typeof MeshMaterial>(BaseCls: T) {\r\n if ((BaseCls as any).lambertMixed) {\r\n return BaseCls as T & { new (...args: any[]): IMixinLambert };\r\n }\r\n const S = applyMaterialMixins(BaseCls, mixinLight);\r\n return class extends S {\r\n protected static lambertMixed = true;\r\n constructor() {\r\n super();\r\n }\r\n lambertLight(\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp,\r\n normal: PBShaderExp,\r\n albedo: PBShaderExp\r\n ) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_lambertLight';\r\n const that = this;\r\n const baseLightPass = !that.drawContext.lightBlending;\r\n pb.func(funcName, [pb.vec3('worldPos'), pb.vec3('normal'), pb.vec4('albedo')], function () {\r\n if (!that.needFragmentColor()) {\r\n this.$return(this.albedo.rgb);\r\n } else {\r\n if (that.needCalculateEnvLight() && baseLightPass) {\r\n this.$l.diffuseColor = that.getEnvLightIrradiance(this, this.normal);\r\n } else {\r\n this.$l.diffuseColor = pb.vec3(0);\r\n }\r\n that.forEachLight(this, function (type, posRange, dirCutoff, colorIntensity, extra, shadow) {\r\n this.$l.diffuseScale = pb.float(1);\r\n this.$if(pb.equal(type, LIGHT_TYPE_POINT), function () {\r\n this.diffuseScale = extra.x;\r\n });\r\n this.$l.lightAtten = that.calculateLightAttenuation(\r\n this,\r\n type,\r\n this.worldPos,\r\n posRange,\r\n dirCutoff,\r\n extra\r\n );\r\n this.$l.lightDir = that.calculateLightDirection(this, type, this.worldPos, posRange, dirCutoff);\r\n this.$l.NoL = pb.clamp(pb.dot(this.normal, this.lightDir), 0, 1);\r\n this.$l.lightColor = pb.mul(\r\n colorIntensity.rgb,\r\n colorIntensity.a,\r\n this.lightAtten,\r\n this.diffuseScale\r\n );\r\n this.$l.diffuse = pb.mul(this.lightColor, 1 / Math.PI, this.NoL);\r\n if (shadow) {\r\n this.$l.shadow = pb.vec3(that.calculateShadow(this, this.worldPos, this.NoL));\r\n this.diffuse = pb.mul(this.diffuse, this.shadow);\r\n }\r\n this.diffuseColor = pb.add(this.diffuseColor, this.diffuse);\r\n });\r\n this.$l.litColor = pb.mul(this.albedo.rgb, this.diffuseColor);\r\n this.$return(this.litColor);\r\n }\r\n });\r\n return pb.getGlobalScope()[funcName](worldPos, normal, albedo) as PBShaderExp;\r\n }\r\n } as unknown as T & { new (...args: any[]): IMixinLambert };\r\n}\r\n"],"names":["mixinLambert","BaseCls","lambertMixed","S","applyMaterialMixins","mixinLight","lambertLight","scope","worldPos","normal","albedo","pb","$builder","funcName","that","baseLightPass","drawContext","lightBlending","func","vec3","vec4","needFragmentColor","$return","rgb","needCalculateEnvLight","$l","diffuseColor","getEnvLightIrradiance","forEachLight","type","posRange","dirCutoff","colorIntensity","extra","shadow","diffuseScale","float","$if","equal","LIGHT_TYPE_POINT","x","lightAtten","calculateLightAttenuation","lightDir","calculateLightDirection","NoL","clamp","dot","lightColor","mul","a","diffuse","Math","PI","calculateShadow","add","litColor","getGlobalScope"],"mappings":"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"}
1
+ {"version":3,"file":"lambert.js","sources":["../../../../src/material/mixins/lightmodel/lambert.ts"],"sourcesContent":["import type { PBInsideFunctionScope, PBShaderExp } from '@zephyr3d/device';\r\nimport type { MeshMaterial } from '../../meshmaterial';\r\nimport { applyMaterialMixins } from '../../meshmaterial';\r\nimport type { IMixinLight } from '../lit';\r\nimport { mixinLight } from '../lit';\r\nimport { LIGHT_TYPE_POINT } from '../../../values';\r\n\r\n/**\r\n * Interface of lambert lighting model mixin\r\n * @public\r\n */\r\nexport type IMixinLambert = {\r\n /**\r\n * @param geometricNormal - Interpolated vertex normal, used for shadow normal\r\n * offset bias. Defaults to `normal`; pass the pre-normal-map normal (such as\r\n * `TBN[2]`) when the material has one, so the shadow lookup is not displaced\r\n * along normal map detail.\r\n */\r\n lambertLight(\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp,\r\n normal: PBShaderExp,\r\n albedo: PBShaderExp,\r\n geometricNormal?: PBShaderExp\r\n ): PBShaderExp;\r\n} & IMixinLight;\r\n\r\n/**\r\n * Lambert lighting model mixin\r\n * @param BaseCls - Class to mix in\r\n * @returns Mixed class\r\n * @public\r\n */\r\nexport function mixinLambert<T extends typeof MeshMaterial>(BaseCls: T) {\r\n if ((BaseCls as any).lambertMixed) {\r\n return BaseCls as T & { new (...args: any[]): IMixinLambert };\r\n }\r\n const S = applyMaterialMixins(BaseCls, mixinLight);\r\n return class extends S {\r\n protected static lambertMixed = true;\r\n constructor() {\r\n super();\r\n }\r\n lambertLight(\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp,\r\n normal: PBShaderExp,\r\n albedo: PBShaderExp,\r\n geometricNormal?: PBShaderExp\r\n ) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_lambertLight';\r\n const that = this;\r\n const baseLightPass = !that.drawContext.lightBlending;\r\n pb.func(\r\n funcName,\r\n [pb.vec3('worldPos'), pb.vec3('normal'), pb.vec4('albedo'), pb.vec3('geometricNormal')],\r\n function () {\r\n if (!that.needFragmentColor()) {\r\n this.$return(this.albedo.rgb);\r\n } else {\r\n if (that.needCalculateEnvLight() && baseLightPass) {\r\n this.$l.diffuseColor = that.getEnvLightIrradiance(this, this.normal);\r\n } else {\r\n this.$l.diffuseColor = pb.vec3(0);\r\n }\r\n that.forEachLight(this, function (type, posRange, dirCutoff, colorIntensity, extra, shadow) {\r\n this.$l.diffuseScale = pb.float(1);\r\n this.$if(pb.equal(type, LIGHT_TYPE_POINT), function () {\r\n this.diffuseScale = extra.x;\r\n });\r\n this.$l.lightAtten = that.calculateLightAttenuation(\r\n this,\r\n type,\r\n this.worldPos,\r\n posRange,\r\n dirCutoff,\r\n extra\r\n );\r\n this.$l.lightDir = that.calculateLightDirection(this, type, this.worldPos, posRange, dirCutoff);\r\n this.$l.NoL = pb.clamp(pb.dot(this.normal, this.lightDir), 0, 1);\r\n this.$l.lightColor = pb.mul(\r\n colorIntensity.rgb,\r\n colorIntensity.a,\r\n this.lightAtten,\r\n this.diffuseScale\r\n );\r\n this.$l.diffuse = pb.mul(this.lightColor, 1 / Math.PI, this.NoL);\r\n if (shadow) {\r\n this.$l.shadow = pb.vec3(\r\n that.calculateShadow(this, this.worldPos, this.geometricNormal, this.NoL)\r\n );\r\n this.diffuse = pb.mul(this.diffuse, this.shadow);\r\n }\r\n this.diffuseColor = pb.add(this.diffuseColor, this.diffuse);\r\n });\r\n this.$l.litColor = pb.mul(this.albedo.rgb, this.diffuseColor);\r\n this.$return(this.litColor);\r\n }\r\n }\r\n );\r\n return pb\r\n .getGlobalScope()\r\n [funcName](worldPos, normal, albedo, geometricNormal ?? normal) as PBShaderExp;\r\n }\r\n } as unknown as T & { new (...args: any[]): IMixinLambert };\r\n}\r\n"],"names":["mixinLambert","BaseCls","lambertMixed","S","applyMaterialMixins","mixinLight","lambertLight","scope","worldPos","normal","albedo","geometricNormal","pb","$builder","funcName","that","baseLightPass","drawContext","lightBlending","func","vec3","vec4","needFragmentColor","$return","rgb","needCalculateEnvLight","$l","diffuseColor","getEnvLightIrradiance","forEachLight","type","posRange","dirCutoff","colorIntensity","extra","shadow","diffuseScale","float","$if","equal","LIGHT_TYPE_POINT","x","lightAtten","calculateLightAttenuation","lightDir","calculateLightDirection","NoL","clamp","dot","lightColor","mul","a","diffuse","Math","PI","calculateShadow","add","litColor","getGlobalScope"],"mappings":"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"}
@@ -98,7 +98,7 @@ const PBR_REFLECTION_MODE = {
98
98
  if (shadow) {
99
99
  this.$l.rectL = pb.normalize(pb.sub(this.center, this.worldPos));
100
100
  this.$l.rectNoL = pb.clamp(pb.dot(this.pbrData.normal, this.rectL), 0, 1);
101
- this.rectShadow = that.calculateShadow(this, this.worldPos, pb.max(this.rectNoL, 1e-5));
101
+ this.rectShadow = that.calculateShadow(this, this.worldPos, this.pbrData.TBN[2], pb.max(this.rectNoL, 1e-5));
102
102
  }
103
103
  this.$l.samplePos = pb.vec3();
104
104
  this.$l.Lvec = pb.vec3();
@@ -154,7 +154,7 @@ const PBR_REFLECTION_MODE = {
154
154
  this.$l.NoL = pb.clamp(pb.dot(this.pbrData.normal, this.lightDir), 0, 1);
155
155
  this.$l.lightColor = pb.mul(colorIntensity.rgb, colorIntensity.a, this.lightAtten, this.NoL);
156
156
  if (shadow) {
157
- this.lightColor = pb.mul(this.lightColor, that.calculateShadow(this, this.worldPos, this.NoL));
157
+ this.lightColor = pb.mul(this.lightColor, that.calculateShadow(this, this.worldPos, this.pbrData.TBN[2], this.NoL));
158
158
  }
159
159
  if (outSSSDiffuse) {
160
160
  that.directLighting(this, this.lightDir, this.lightColor, this.viewVec, this.pbrData, this.diffuseScale, this.specularScale, this.sourceRadiusFactor, this.lightingColor, this.sssDiffuseColor);
@@ -335,7 +335,7 @@ const PBR_REFLECTION_MODE = {
335
335
  const envLightStrength = ShaderHelper.getEnvLightStrength(this);
336
336
  const envLightSpecularStrength = ShaderHelper.getEnvLightSpecularStrength(this);
337
337
  this.$l.occlusion = envLightStrength;
338
- this.$l.diffuseOcclusion = ctx.SSGI && ctx.SSGIIrradianceHistoryTexture && ctx.SSGISurfaceHistoryTexture && (ctx.device.type !== 'webgpu' || ctx.motionVectorTexture) ? pb.float(1) : this.occlusion;
338
+ this.$l.diffuseOcclusion = ctx.SSGI && ctx.SSGIIrradianceHistoryTexture && ctx.SSGISurfaceHistoryTexture && (ctx.device.type === 'webgl' || ctx.motionVectorTexture) ? pb.float(1) : this.occlusion;
339
339
  this.$l.reflectionMode = this.zReflectionMode;
340
340
  this.$l.NoV = pb.clamp(pb.dot(this.data.normal, this.viewVec), 0.0001, 1);
341
341
  this.$l.ggxLutSample = pb.clamp(pb.textureSampleLevel(this.zGGXLut, pb.clamp(pb.vec2(this.NoV, this.data.roughness), pb.vec2(0), pb.vec2(1)), 0), pb.vec4(0), pb.vec4(1));
@@ -1 +1 @@
1
- {"version":3,"file":"pbrblueprintmixin.js","sources":["../../../../src/material/mixins/lightmodel/pbrblueprintmixin.ts"],"sourcesContent":["import type { BindGroup, PBFunctionScope, PBInsideFunctionScope, ShaderTypeFunc } from '@zephyr3d/device';\r\nimport type { PBShaderExp } from '@zephyr3d/device';\r\nimport type { MeshMaterial } from '../../meshmaterial';\r\nimport { applyMaterialMixins } from '../../meshmaterial';\r\nimport type { IMixinLight } from '../lit';\r\nimport { mixinLight } from '../lit';\r\nimport type { IMixinPBRBRDF } from '../pbr/brdf';\r\nimport { mixinPBRBRDF } from '../pbr/brdf';\r\nimport type { MaterialBlueprintIR } from '../../../utility/blueprint/material/ir';\r\nimport { ShaderHelper } from '../../shader/helper';\r\nimport { LIGHT_TYPE_POINT, LIGHT_TYPE_RECT, MaterialVaryingFlags } from '../../../values';\r\nimport type { DrawContext } from '../../../render';\r\nimport { getGGXLUT } from '../../../utility/textures/ggxlut';\r\n\r\nconst PBR_REFLECTION_MODE = {\r\n none: 0,\r\n ggx: 1,\r\n anisotropic: 2,\r\n glint: 3\r\n} as const;\r\n\r\n/**\r\n * Interface for mixinPBRBluePrint lighting model mixin\r\n * @public\r\n */\r\nexport type IMixinPBRBluePrint = {\r\n PBRLight(\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp,\r\n viewVec: PBShaderExp,\r\n commonData: PBShaderExp,\r\n outRoughness?: PBShaderExp,\r\n outSSSDiffuse?: PBShaderExp\r\n ): PBShaderExp;\r\n getCommonDatasStruct(scope: PBInsideFunctionScope): ShaderTypeFunc;\r\n getCommonData(\r\n scope: PBInsideFunctionScope,\r\n data: PBShaderExp,\r\n viewVec: PBShaderExp,\r\n worldPos: PBShaderExp,\r\n worldNorm: PBShaderExp,\r\n worldTangent: PBShaderExp,\r\n worldBinormal: PBShaderExp,\r\n vertexColor: PBShaderExp,\r\n vertexUV: PBShaderExp,\r\n ir: MaterialBlueprintIR\r\n ): void;\r\n calculateCommonData(\r\n scope: PBInsideFunctionScope,\r\n ir: MaterialBlueprintIR,\r\n viewVec: PBShaderExp,\r\n worldPos: PBShaderExp,\r\n worldNorm: PBShaderExp,\r\n worldTangent: PBShaderExp,\r\n worldBinormal: PBShaderExp,\r\n vertexColor: PBShaderExp,\r\n vertexUV: PBShaderExp,\r\n data: PBShaderExp\r\n ): void;\r\n directLighting(\r\n scope: PBInsideFunctionScope,\r\n lightDir: PBShaderExp,\r\n lightColor: PBShaderExp,\r\n viewVec: PBShaderExp,\r\n commonData: PBShaderExp,\r\n diffuseScale: PBShaderExp,\r\n specularScale: PBShaderExp,\r\n sourceRadiusFactor: PBShaderExp,\r\n outColor: PBShaderExp,\r\n outDiffuseColor?: PBShaderExp\r\n ): void;\r\n indirectLighting(\r\n scope: PBInsideFunctionScope,\r\n viewVec: PBShaderExp,\r\n commonData: PBShaderExp,\r\n outColor: PBShaderExp,\r\n outRoughness?: PBShaderExp,\r\n outDiffuseColor?: PBShaderExp\r\n ): void;\r\n} & IMixinPBRBRDF &\r\n IMixinLight;\r\n\r\n/**\r\n * PBRBluePrint lighting model mixin\r\n * @param BaseCls - Class to mix in\r\n * @returns Mixed class\r\n * @public\r\n */\r\nexport function mixinPBRBluePrint<T extends typeof MeshMaterial>(BaseCls: T) {\r\n if ((BaseCls as any).pbrBluePrint) {\r\n return BaseCls as T & { new (...args: any[]): IMixinPBRBluePrint };\r\n }\r\n const S = applyMaterialMixins(BaseCls, mixinPBRBRDF, mixinLight);\r\n\r\n return class extends S {\r\n static readonly pbrBluePrint = true;\r\n constructor() {\r\n super();\r\n }\r\n copyFrom(other: this) {\r\n super.copyFrom(other);\r\n }\r\n getCommonData(\r\n scope: PBInsideFunctionScope,\r\n data: PBShaderExp,\r\n viewVec: PBShaderExp,\r\n worldPos: PBShaderExp,\r\n worldNorm: PBShaderExp,\r\n worldTangent: PBShaderExp,\r\n worldBinormal: PBShaderExp,\r\n vertexColor: PBShaderExp,\r\n vertexUV: PBShaderExp,\r\n ir: MaterialBlueprintIR\r\n ) {\r\n this.calculateCommonData(\r\n scope,\r\n ir,\r\n viewVec,\r\n worldPos,\r\n worldNorm,\r\n worldTangent,\r\n worldBinormal,\r\n vertexColor,\r\n vertexUV,\r\n data\r\n );\r\n }\r\n getCommonDatasStruct(scope: PBInsideFunctionScope) {\r\n const pb = scope.$builder;\r\n return pb.defineStruct([\r\n pb.vec4('f0'),\r\n pb.vec3('f90'),\r\n pb.vec4('albedo'),\r\n pb.vec4('diffuse'),\r\n pb.float('metallic'),\r\n pb.float('roughness'),\r\n pb.vec3('normal'),\r\n pb.mat3('TBN'),\r\n pb.vec3('emissive'),\r\n pb.vec3('specular')\r\n ]);\r\n }\r\n\r\n PBRLight(\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp,\r\n viewVec: PBShaderExp,\r\n commonData: PBShaderExp,\r\n outRoughness?: PBShaderExp,\r\n outSSSDiffuse?: PBShaderExp\r\n ) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_PBRBluePrintLight';\r\n const that = this;\r\n const baseLightPass = !that.drawContext.lightBlending;\r\n pb.func(\r\n funcName,\r\n [\r\n that.getCommonDatasStruct(scope)('pbrData'),\r\n pb.vec3('viewVec'),\r\n pb.vec3('worldPos'),\r\n ...(outRoughness ? [pb.vec4('outRoughness').out()] : []),\r\n ...(outSSSDiffuse ? [pb.vec4('outSSSDiffuse').out()] : [])\r\n ],\r\n function () {\r\n this.$l.lightingColor = pb.vec3(0);\r\n this.$l.sssDiffuseColor = pb.vec3(0);\r\n this.$l.emissiveColor = baseLightPass ? this.pbrData.emissive : pb.vec3(0);\r\n if (baseLightPass) {\r\n if (outRoughness && outSSSDiffuse) {\r\n that.indirectLighting(\r\n this,\r\n this.viewVec,\r\n this.pbrData,\r\n this.lightingColor,\r\n this.outRoughness,\r\n this.sssDiffuseColor\r\n );\r\n } else if (outRoughness) {\r\n that.indirectLighting(this, this.viewVec, this.pbrData, this.lightingColor, this.outRoughness);\r\n } else if (outSSSDiffuse) {\r\n that.indirectLighting(\r\n this,\r\n this.viewVec,\r\n this.pbrData,\r\n this.lightingColor,\r\n undefined,\r\n this.sssDiffuseColor\r\n );\r\n } else {\r\n that.indirectLighting(this, this.viewVec, this.pbrData, this.lightingColor);\r\n }\r\n }\r\n that.forEachLight(this, function (type, posRange, dirCutoff, colorIntensity, extra, shadow) {\r\n this.$if(pb.equal(type, LIGHT_TYPE_RECT), function () {\r\n this.$l.center = posRange.xyz;\r\n this.$l.range = posRange.w;\r\n this.$l.ax = dirCutoff.xyz;\r\n this.$l.ay = extra.xyz;\r\n this.$l.halfWidth = pb.length(this.ax);\r\n this.$l.halfHeight = pb.length(this.ay);\r\n this.$l.area = pb.mul(this.halfWidth, this.halfHeight, 4);\r\n this.$l.lightNormal = pb.normalize(pb.cross(this.ax, this.ay));\r\n this.lightNormal = pb.neg(this.lightNormal);\r\n this.$if(pb.greaterThan(this.area, 0), function () {\r\n this.$l.baseColor = pb.mul(colorIntensity.rgb, colorIntensity.a, this.area, 0.25);\r\n // calculateShadow() samples with implicit derivatives (dpdx);\r\n // WGSL requires uniform control flow, so sample once per light\r\n // toward the rect center instead of inside the per-sample\r\n // NoL_light branch.\r\n this.$l.rectShadow = pb.float(1);\r\n if (shadow) {\r\n this.$l.rectL = pb.normalize(pb.sub(this.center, this.worldPos));\r\n this.$l.rectNoL = pb.clamp(pb.dot(this.pbrData.normal, this.rectL), 0, 1);\r\n this.rectShadow = that.calculateShadow(this, this.worldPos, pb.max(this.rectNoL, 1e-5));\r\n }\r\n this.$l.samplePos = pb.vec3();\r\n this.$l.Lvec = pb.vec3();\r\n this.$l.L = pb.vec3();\r\n this.$l.dist = pb.float();\r\n this.$l.invDist2 = pb.float();\r\n this.$l.NoL = pb.float();\r\n this.$l.NoL_light = pb.float();\r\n this.$l.falloff = pb.float();\r\n this.$l.atten = pb.float();\r\n this.$l.lightColor = pb.vec3();\r\n\r\n const sample = (u: number, v: number) => {\r\n this.samplePos = pb.add(\r\n this.center,\r\n pb.add(pb.mul(this.ax, pb.sub(pb.mul(u, 2), 1)), pb.mul(this.ay, pb.sub(pb.mul(v, 2), 1)))\r\n );\r\n this.Lvec = pb.sub(this.samplePos, this.worldPos);\r\n this.dist = pb.length(this.Lvec);\r\n this.invDist2 = pb.div(1, pb.max(pb.mul(this.dist, this.dist), 0.0001));\r\n this.L = pb.normalize(this.Lvec);\r\n this.NoL = pb.clamp(pb.dot(this.pbrData.normal, this.L), 0, 1);\r\n this.NoL_light = pb.clamp(pb.dot(this.lightNormal, pb.neg(this.L)), 0, 1);\r\n this.$if(pb.greaterThan(this.NoL_light, 0), function () {\r\n this.falloff = pb.float(1);\r\n this.$if(pb.greaterThan(this.range, 0), function () {\r\n this.falloff = pb.max(0, pb.sub(1, pb.div(this.dist, this.range)));\r\n this.falloff = pb.mul(this.falloff, this.falloff);\r\n });\r\n this.atten = pb.mul(this.invDist2, this.NoL_light, this.falloff);\r\n this.lightColor = pb.mul(this.baseColor, this.atten, this.NoL, this.rectShadow);\r\n if (outSSSDiffuse) {\r\n that.directLighting(\r\n this,\r\n this.L,\r\n this.lightColor,\r\n this.viewVec,\r\n this.pbrData,\r\n pb.float(1),\r\n pb.float(1),\r\n pb.float(0),\r\n this.lightingColor,\r\n this.sssDiffuseColor\r\n );\r\n } else {\r\n that.directLighting(\r\n this,\r\n this.L,\r\n this.lightColor,\r\n this.viewVec,\r\n this.pbrData,\r\n pb.float(1),\r\n pb.float(1),\r\n pb.float(0),\r\n this.lightingColor\r\n );\r\n }\r\n });\r\n };\r\n\r\n sample(0.25, 0.25);\r\n sample(0.75, 0.25);\r\n sample(0.25, 0.75);\r\n sample(0.75, 0.75);\r\n });\r\n }).$else(function () {\r\n this.$l.diffuse = pb.vec3();\r\n this.$l.specular = pb.vec3();\r\n this.$l.diffuseScale = pb.float(1);\r\n this.$l.specularScale = pb.float(1);\r\n this.$l.sourceRadiusFactor = pb.float(0);\r\n this.$if(pb.equal(type, LIGHT_TYPE_POINT), function () {\r\n this.diffuseScale = extra.x;\r\n this.specularScale = extra.y;\r\n this.sourceRadiusFactor = pb.div(\r\n extra.z,\r\n pb.max(pb.distance(posRange.xyz, this.worldPos), 0.0001)\r\n );\r\n });\r\n this.$l.lightAtten = that.calculateLightAttenuation(\r\n this,\r\n type,\r\n this.worldPos,\r\n posRange,\r\n dirCutoff,\r\n extra\r\n );\r\n this.$l.lightDir = that.calculateLightDirection(this, type, this.worldPos, posRange, dirCutoff);\r\n this.$l.NoL = pb.clamp(pb.dot(this.pbrData.normal, this.lightDir), 0, 1);\r\n this.$l.lightColor = pb.mul(colorIntensity.rgb, colorIntensity.a, this.lightAtten, this.NoL);\r\n if (shadow) {\r\n this.lightColor = pb.mul(\r\n this.lightColor,\r\n that.calculateShadow(this, this.worldPos, this.NoL)\r\n );\r\n }\r\n if (outSSSDiffuse) {\r\n that.directLighting(\r\n this,\r\n this.lightDir,\r\n this.lightColor,\r\n this.viewVec,\r\n this.pbrData,\r\n this.diffuseScale,\r\n this.specularScale,\r\n this.sourceRadiusFactor,\r\n this.lightingColor,\r\n this.sssDiffuseColor\r\n );\r\n } else {\r\n that.directLighting(\r\n this,\r\n this.lightDir,\r\n this.lightColor,\r\n this.viewVec,\r\n this.pbrData,\r\n this.diffuseScale,\r\n this.specularScale,\r\n this.sourceRadiusFactor,\r\n this.lightingColor\r\n );\r\n }\r\n });\r\n });\r\n if (outSSSDiffuse) {\r\n this.outSSSDiffuse = pb.vec4(this.sssDiffuseColor, this.pbrData.albedo.a);\r\n }\r\n this.$return(pb.vec4(pb.add(this.lightingColor, this.emissiveColor), this.pbrData.albedo.a));\r\n }\r\n );\r\n return (\r\n outRoughness && outSSSDiffuse\r\n ? pb.getGlobalScope()[funcName](commonData, viewVec, worldPos, outRoughness, outSSSDiffuse)\r\n : outRoughness\r\n ? pb.getGlobalScope()[funcName](commonData, viewVec, worldPos, outRoughness)\r\n : outSSSDiffuse\r\n ? pb.getGlobalScope()[funcName](commonData, viewVec, worldPos, outSSSDiffuse)\r\n : pb.getGlobalScope()[funcName](commonData, viewVec, worldPos)\r\n ) as PBShaderExp;\r\n }\r\n vertexShader(scope: PBFunctionScope) {\r\n super.vertexShader(scope);\r\n }\r\n fragmentShader(scope: PBFunctionScope) {\r\n const pb = scope.$builder;\r\n super.fragmentShader(scope);\r\n if (this.needFragmentColor()) {\r\n scope.zReflectionMode = pb.float().uniform(2);\r\n if (this.drawContext.drawEnvLight) {\r\n scope.zGGXLut = pb.tex2D().uniform(2);\r\n }\r\n }\r\n }\r\n calculateCommonData(\r\n scope: PBInsideFunctionScope,\r\n ir: MaterialBlueprintIR,\r\n viewVec: PBShaderExp,\r\n worldPos: PBShaderExp,\r\n worldNorm: PBShaderExp,\r\n worldTangent: PBShaderExp,\r\n worldBinormal: PBShaderExp,\r\n vertexColor: PBShaderExp,\r\n vertexUV: PBShaderExp,\r\n data: PBShaderExp\r\n ) {\r\n const that = this;\r\n const pb = scope.$builder;\r\n const funcName = 'zCalculateCommonDataPBRBluePrint';\r\n const params: PBShaderExp[] = [\r\n this.getCommonDatasStruct(scope)('zCommonData').out(),\r\n pb.vec3('zViewVec'),\r\n pb.vec3('zWorldPos'),\r\n pb.vec3('zVertexNormal'),\r\n pb.vec3('zVertexTangent'),\r\n pb.vec3('zVertexBinormal'),\r\n pb.vec4('zVertexColor'),\r\n pb.vec2('zVertexUV')\r\n ];\r\n const paramValues: PBShaderExp[] = [\r\n data,\r\n viewVec,\r\n worldPos,\r\n worldNorm,\r\n worldTangent,\r\n worldBinormal,\r\n vertexColor,\r\n vertexUV\r\n ];\r\n pb.func(funcName, params, function () {\r\n const outputs = ir.create(pb)!;\r\n this.zCommonData.albedo = pb.vec4(\r\n (that.getOutput(outputs, 'BaseColor') as PBShaderExp)?.rgb ?? pb.vec3(1),\r\n (that.getOutput(outputs, 'Opacity') as number | PBShaderExp) ?? 1\r\n );\r\n this.zCommonData.metallic = that.getOutput(outputs, 'Metallic') ?? 0;\r\n this.zCommonData.roughness = that.getOutput(outputs, 'Roughness')\r\n ? pb.mul(\r\n that.getOutput(outputs, 'Roughness') as number | PBShaderExp,\r\n ShaderHelper.getCameraRoughnessFactor(scope)\r\n )\r\n : ShaderHelper.getCameraRoughnessFactor(scope);\r\n this.zCommonData.specular = that.getOutput(outputs, 'Specular') ?? pb.vec3(1);\r\n // A blueprint-authored emitter is a material quantity, so unlike lights it is not\r\n // pre-exposed on the CPU. Physical scenes expose it here (blueprints have no per-material\r\n // exposure weight, so it always follows exposure); in legacy the factor is 1. The graph\r\n // output replaces the whole emissive term, so under physical lighting it is a cd/m²\r\n // luminance: emit hundreds to thousands, not the [0,1] of a legacy scene.\r\n this.zCommonData.emissive = pb.mul(\r\n (that.getOutput(outputs, 'Emissive') ?? pb.vec3(0)) as PBShaderExp,\r\n ShaderHelper.getPreExposureUniform(scope)\r\n );\r\n this.zCommonData.f90 = pb.vec3(1);\r\n this.zCommonData.f0 = pb.vec4(\r\n pb.mix(\r\n pb.min(pb.mul(pb.vec3(0.04), this.zCommonData.specular), pb.vec3(1)),\r\n this.zCommonData.albedo.rgb,\r\n this.zCommonData.metallic\r\n ),\r\n 1.5\r\n );\r\n this.$l.tangent = that.getOutput(outputs, 'Tangent') ?? this.zVertexTangent;\r\n this.$l.ng = pb.normalize(this.zVertexNormal);\r\n this.$l.t_ = pb.normalize(this.tangent);\r\n this.$l.t = pb.normalize(pb.sub(this.t_, pb.mul(this.ng, pb.dot(this.ng, this.t_))));\r\n this.$l.b = pb.cross(this.ng, this.t);\r\n if (that.doubleSidedLighting && that.cullMode !== 'back') {\r\n this.$if(pb.not(this.$builtins.frontFacing), function () {\r\n this.t = pb.mul(this.t, -1);\r\n this.b = pb.mul(this.b, -1);\r\n this.ng = pb.mul(this.ng, -1);\r\n });\r\n }\r\n this.zCommonData.TBN = pb.mat3(this.t, this.b, this.ng);\r\n\r\n if (that.getOutput(outputs, 'Normal')) {\r\n this.zCommonData.normal = pb.normalize(\r\n pb.mul(this.zCommonData.TBN, that.getOutput(outputs, 'Normal') as number | PBShaderExp)\r\n );\r\n } else {\r\n this.zCommonData.normal = this.ng;\r\n }\r\n this.zCommonData.diffuse = pb.vec4(\r\n pb.mix(this.zCommonData.albedo.rgb, pb.vec3(0), this.zCommonData.metallic),\r\n this.zCommonData.albedo.a\r\n );\r\n });\r\n scope[funcName](...paramValues);\r\n }\r\n private getOutput(\r\n outputs: {\r\n name: string;\r\n exp: number | boolean | PBShaderExp;\r\n }[],\r\n name: string\r\n ) {\r\n return outputs.find((output) => output.name === name)?.exp;\r\n }\r\n directLighting(\r\n scope: PBInsideFunctionScope,\r\n lightDir: PBShaderExp,\r\n lightColor: PBShaderExp,\r\n viewVec: PBShaderExp,\r\n commonData: PBShaderExp,\r\n diffuseScale: PBShaderExp,\r\n specularScale: PBShaderExp,\r\n sourceRadiusFactor: PBShaderExp,\r\n outColor: PBShaderExp,\r\n outDiffuseColor?: PBShaderExp\r\n ) {\r\n const pb = scope.$builder;\r\n const that = this;\r\n const funcName = 'Z_PBRDirectLighting';\r\n pb.func(\r\n funcName,\r\n [\r\n pb.vec3('L'),\r\n pb.vec3('lightColor'),\r\n pb.vec3('viewVec'),\r\n that.getCommonDatasStruct(scope)('data'),\r\n pb.float('diffuseScale'),\r\n pb.float('specularScale'),\r\n pb.float('sourceRadiusFactor'),\r\n pb.vec3('outColor').inout(),\r\n ...(outDiffuseColor ? [pb.vec3('outDiffuseColor').inout()] : [])\r\n ],\r\n function () {\r\n this.$l.reflectionMode = this.zReflectionMode;\r\n this.$l.H = pb.normalize(pb.add(this.viewVec, this.L));\r\n this.$l.NoH = pb.clamp(pb.dot(this.data.normal, this.H), 0, 1);\r\n this.$l.NoL = pb.clamp(pb.dot(this.data.normal, this.L), 0, 1);\r\n this.$l.NoV = pb.clamp(pb.dot(this.data.normal, this.viewVec), 0, 1);\r\n this.$if(pb.greaterThan(this.NoL, 0), function () {\r\n this.$l.VoH = pb.clamp(pb.dot(this.viewVec, this.H), 0, 1);\r\n this.$l.schlickFresnel = that.fresnelSchlick(this, this.VoH, this.data.f0.rgb, this.data.f90);\r\n this.$l.F = this.schlickFresnel;\r\n this.$l.specularRoughness = pb.clamp(pb.add(this.data.roughness, this.sourceRadiusFactor), 0, 1);\r\n this.$l.alphaRoughness = pb.mul(this.specularRoughness, this.specularRoughness);\r\n this.$l.D = that.distributionGGX(this, this.NoH, this.alphaRoughness);\r\n this.$if(pb.equal(this.reflectionMode, PBR_REFLECTION_MODE.anisotropic), function () {\r\n this.$l.dirAngle = pb.mul(\r\n pb.add(\r\n pb.mul(this.zAnisotropyDirection, this.zAnisotropyDirectionScaleBias.x),\r\n this.zAnisotropyDirectionScaleBias.y\r\n ),\r\n Math.PI / 180\r\n );\r\n this.$l.t0 = pb.normalize(this.data.TBN[0]);\r\n this.$l.b0 = pb.normalize(this.data.TBN[1]);\r\n this.$l.tangent = pb.normalize(\r\n pb.add(pb.mul(this.t0, pb.cos(this.dirAngle)), pb.mul(this.b0, pb.sin(this.dirAngle)))\r\n );\r\n this.$l.bitangent = pb.normalize(pb.cross(this.data.normal, this.tangent));\r\n this.$l.ToH = pb.dot(this.tangent, this.H);\r\n this.$l.BoH = pb.dot(this.bitangent, this.H);\r\n this.$l.at = pb.max(pb.mul(this.alphaRoughness, pb.add(1, this.zAnisotropy)), 0.0001);\r\n this.$l.ab = pb.max(pb.mul(this.alphaRoughness, pb.sub(1, this.zAnisotropy)), 0.0001);\r\n this.$l.anisoDenom = pb.mul(\r\n Math.PI,\r\n this.at,\r\n this.ab,\r\n pb.pow(\r\n pb.add(\r\n pb.div(pb.mul(this.ToH, this.ToH), pb.mul(this.at, this.at)),\r\n pb.div(pb.mul(this.BoH, this.BoH), pb.mul(this.ab, this.ab)),\r\n pb.mul(this.NoH, this.NoH)\r\n ),\r\n 2\r\n )\r\n );\r\n this.D = pb.div(1, pb.max(this.anisoDenom, 0.0001));\r\n });\r\n this.$if(pb.equal(this.reflectionMode, PBR_REFLECTION_MODE.glint), function () {\r\n this.$l.glintNoise = pb.fract(\r\n pb.mul(\r\n pb.sin(pb.add(pb.dot(this.H, pb.vec3(127.1, 311.7, 74.7)), pb.mul(this.NoH, 43.1))),\r\n 43758.5453\r\n )\r\n );\r\n this.$l.glintMask = pb.smoothStep(0.97, 1, this.glintNoise);\r\n this.D = pb.mul(this.D, pb.add(1, pb.mul(this.glintMask, 8)));\r\n });\r\n this.$l.V = that.visGGX(this, this.NoV, this.NoL, this.alphaRoughness);\r\n this.$l.specular = pb.mul(this.lightColor, this.D, this.V, this.F, this.specularScale);\r\n this.$if(pb.equal(this.reflectionMode, PBR_REFLECTION_MODE.none), function () {\r\n this.specular = pb.vec3(0);\r\n });\r\n this.outColor = pb.add(this.outColor, this.specular);\r\n this.$l.diffuseBRDF = pb.mul(pb.sub(pb.vec3(1), this.F), pb.div(this.data.diffuse.rgb, Math.PI));\r\n this.$l.diffuse = pb.mul(\r\n this.lightColor,\r\n pb.max(this.diffuseBRDF, pb.vec3(0)),\r\n this.diffuseScale\r\n );\r\n this.outColor = pb.add(this.outColor, this.diffuse);\r\n if (outDiffuseColor) {\r\n this.outDiffuseColor = pb.add(this.outDiffuseColor, this.diffuse);\r\n }\r\n });\r\n }\r\n );\r\n if (outDiffuseColor) {\r\n scope.$g[funcName](\r\n lightDir,\r\n lightColor,\r\n viewVec,\r\n commonData,\r\n diffuseScale,\r\n specularScale,\r\n sourceRadiusFactor,\r\n outColor,\r\n outDiffuseColor\r\n );\r\n } else {\r\n scope.$g[funcName](\r\n lightDir,\r\n lightColor,\r\n viewVec,\r\n commonData,\r\n diffuseScale,\r\n specularScale,\r\n sourceRadiusFactor,\r\n outColor\r\n );\r\n }\r\n }\r\n indirectLighting(\r\n scope: PBInsideFunctionScope,\r\n viewVec: PBShaderExp,\r\n commonData: PBShaderExp,\r\n outColor: PBShaderExp,\r\n outRoughness?: PBShaderExp,\r\n outDiffuseColor?: PBShaderExp\r\n ) {\r\n const pb = scope.$builder;\r\n const that = this;\r\n const ctx = that.drawContext;\r\n const funcName = 'Z_PBRIndirectLighting';\r\n pb.func(\r\n funcName,\r\n [\r\n pb.vec3('viewVec'),\r\n that.getCommonDatasStruct(scope)('data'),\r\n pb.vec3('outColor').inout(),\r\n ...(outRoughness ? [pb.vec4('outRoughness').out()] : []),\r\n ...(outDiffuseColor ? [pb.vec3('outDiffuseColor').inout()] : [])\r\n ],\r\n function () {\r\n if (\r\n !ctx.drawEnvLight ||\r\n (!ctx.env!.light.envLight.hasRadiance() && !ctx.env!.light.envLight.hasIrradiance())\r\n ) {\r\n return;\r\n }\r\n const envLightStrength = ShaderHelper.getEnvLightStrength(this);\r\n const envLightSpecularStrength = ShaderHelper.getEnvLightSpecularStrength(this);\r\n this.$l.occlusion = envLightStrength;\r\n this.$l.diffuseOcclusion =\r\n ctx.SSGI &&\r\n ctx.SSGIIrradianceHistoryTexture &&\r\n ctx.SSGISurfaceHistoryTexture &&\r\n (ctx.device.type !== 'webgpu' || ctx.motionVectorTexture)\r\n ? pb.float(1)\r\n : this.occlusion;\r\n this.$l.reflectionMode = this.zReflectionMode;\r\n this.$l.NoV = pb.clamp(pb.dot(this.data.normal, this.viewVec), 0.0001, 1);\r\n this.$l.ggxLutSample = pb.clamp(\r\n pb.textureSampleLevel(\r\n this.zGGXLut,\r\n pb.clamp(pb.vec2(this.NoV, this.data.roughness), pb.vec2(0), pb.vec2(1)),\r\n 0\r\n ),\r\n pb.vec4(0),\r\n pb.vec4(1)\r\n );\r\n this.$l.f_ab = this.ggxLutSample.rg;\r\n this.$l.Fr = pb.sub(\r\n pb.max(pb.vec3(pb.sub(1, this.data.roughness)), this.data.f0.rgb),\r\n this.data.f0.rgb\r\n );\r\n this.$l.k_S = pb.add(this.data.f0.rgb, pb.mul(this.Fr, pb.pow(pb.sub(1, this.NoV), 5)));\r\n if (outRoughness || ctx.env!.light.envLight.hasRadiance()) {\r\n this.$l.FssEss = pb.add(pb.mul(this.k_S, this.f_ab.x), pb.vec3(this.f_ab.y));\r\n this.$l.specularFactor = pb.mul(this.FssEss, this.occlusion);\r\n this.specularFactor = pb.mul(\r\n this.specularFactor,\r\n pb.float(pb.notEqual(this.reflectionMode, PBR_REFLECTION_MODE.none))\r\n );\r\n if (outRoughness) {\r\n this.outRoughness = pb.vec4(this.specularFactor /*this.data.f0.rgb*/, this.data.roughness);\r\n }\r\n // Skip specular IBL only when the roughness target exists, since SSR\r\n // is its only requester and resolves the reflection from it; adding\r\n // it here too would count it twice. `outRoughness` alone is not that\r\n // signal: SSGI requests the scene normal target and materials raise\r\n // the roughness and normal flags together, so an SSGI-only frame\r\n // wrote outRoughness with nobody to resolve the reflection, which\r\n // silently dropped specular highlights.\r\n const ssrResolvesSpecular = !!(ctx.materialFlags & MaterialVaryingFlags.SCENE_STORE_ROUGHNESS);\r\n if (!ssrResolvesSpecular && ctx.env!.light.envLight.hasRadiance()) {\r\n this.$l.radiance = ctx.env!.light.envLight.getRadiance(\r\n this,\r\n pb.reflect(pb.neg(this.viewVec), this.data.normal),\r\n this.data.roughness\r\n );\r\n this.outColor = pb.add(\r\n this.outColor,\r\n pb.mul(this.radiance, this.specularFactor, envLightSpecularStrength)\r\n );\r\n }\r\n }\r\n if (ctx.env!.light.envLight.hasIrradiance()) {\r\n this.$l.irradiance = ctx.env!.light.envLight.getIrradiance(this, this.data.normal, ctx);\r\n this.$l.mixedF0 = this.data.f0.rgb;\r\n this.$l.FssEss = pb.add(pb.mul(this.k_S, this.f_ab.x), pb.vec3(this.f_ab.y));\r\n this.$l.Ems = pb.sub(1, pb.add(this.f_ab.x, this.f_ab.y));\r\n this.$l.F_avg = pb.add(this.mixedF0, pb.div(pb.sub(pb.vec3(1), this.mixedF0), 21));\r\n this.$l.FmsEms = pb.div(\r\n pb.mul(this.FssEss, this.F_avg, this.Ems),\r\n pb.sub(pb.vec3(1), pb.mul(this.F_avg, this.Ems))\r\n );\r\n this.$l.k_D = pb.mul(this.data.diffuse.rgb, pb.add(pb.sub(pb.vec3(1), this.FssEss), this.FmsEms));\r\n this.$l.iblDiffuse = pb.mul(\r\n pb.add(this.FmsEms, this.k_D),\r\n this.irradiance,\r\n this.diffuseOcclusion\r\n );\r\n this.outColor = pb.add(this.outColor, this.iblDiffuse);\r\n if (outDiffuseColor) {\r\n this.outDiffuseColor = pb.add(this.outDiffuseColor, this.iblDiffuse);\r\n }\r\n }\r\n }\r\n );\r\n if (outRoughness && outDiffuseColor) {\r\n scope.$g[funcName](viewVec, commonData, outColor, outRoughness, outDiffuseColor);\r\n } else if (outRoughness) {\r\n scope.$g[funcName](viewVec, commonData, outColor, outRoughness);\r\n } else if (outDiffuseColor) {\r\n scope.$g[funcName](viewVec, commonData, outColor, outDiffuseColor);\r\n } else {\r\n scope.$g[funcName](viewVec, commonData, outColor);\r\n }\r\n }\r\n applyUniformValues(bindGroup: BindGroup, ctx: DrawContext, pass: number) {\r\n super.applyUniformValues(bindGroup, ctx, pass);\r\n if (this.needFragmentColor(ctx)) {\r\n if (ctx.drawEnvLight) {\r\n bindGroup.setTexture('zGGXLut', getGGXLUT(1024));\r\n }\r\n }\r\n }\r\n } as unknown as T & { new (...args: any[]): IMixinPBRBluePrint };\r\n}\r\n"],"names":["PBR_REFLECTION_MODE","none","ggx","anisotropic","glint","mixinPBRBluePrint","BaseCls","pbrBluePrint","S","applyMaterialMixins","mixinPBRBRDF","mixinLight","copyFrom","other","getCommonData","scope","data","viewVec","worldPos","worldNorm","worldTangent","worldBinormal","vertexColor","vertexUV","ir","calculateCommonData","getCommonDatasStruct","pb","$builder","defineStruct","vec4","vec3","float","mat3","PBRLight","commonData","outRoughness","outSSSDiffuse","funcName","that","baseLightPass","drawContext","lightBlending","func","out","$l","lightingColor","sssDiffuseColor","emissiveColor","pbrData","emissive","indirectLighting","undefined","forEachLight","type","posRange","dirCutoff","colorIntensity","extra","shadow","$if","equal","LIGHT_TYPE_RECT","center","xyz","range","w","ax","ay","halfWidth","length","halfHeight","area","mul","lightNormal","normalize","cross","neg","greaterThan","baseColor","rgb","a","rectShadow","rectL","sub","rectNoL","clamp","dot","normal","calculateShadow","max","samplePos","Lvec","L","dist","invDist2","NoL","NoL_light","falloff","atten","lightColor","sample","u","v","add","div","directLighting","$else","diffuse","specular","diffuseScale","specularScale","sourceRadiusFactor","LIGHT_TYPE_POINT","x","y","z","distance","lightAtten","calculateLightAttenuation","lightDir","calculateLightDirection","albedo","$return","getGlobalScope","vertexShader","fragmentShader","needFragmentColor","zReflectionMode","uniform","drawEnvLight","zGGXLut","tex2D","params","vec2","paramValues","outputs","create","zCommonData","getOutput","metallic","roughness","ShaderHelper","getCameraRoughnessFactor","getPreExposureUniform","f90","f0","mix","min","tangent","zVertexTangent","ng","zVertexNormal","t_","t","b","doubleSidedLighting","cullMode","not","$builtins","frontFacing","TBN","name","find","output","exp","outColor","outDiffuseColor","inout","reflectionMode","H","NoH","NoV","VoH","schlickFresnel","fresnelSchlick","F","specularRoughness","alphaRoughness","D","distributionGGX","dirAngle","zAnisotropyDirection","zAnisotropyDirectionScaleBias","Math","PI","t0","b0","cos","sin","bitangent","ToH","BoH","at","zAnisotropy","ab","anisoDenom","pow","glintNoise","fract","glintMask","smoothStep","V","visGGX","diffuseBRDF","$g","ctx","env","light","envLight","hasRadiance","hasIrradiance","envLightStrength","getEnvLightStrength","envLightSpecularStrength","getEnvLightSpecularStrength","occlusion","diffuseOcclusion","SSGI","SSGIIrradianceHistoryTexture","SSGISurfaceHistoryTexture","device","motionVectorTexture","ggxLutSample","textureSampleLevel","f_ab","rg","Fr","k_S","FssEss","specularFactor","notEqual","ssrResolvesSpecular","materialFlags","MaterialVaryingFlags","SCENE_STORE_ROUGHNESS","radiance","getRadiance","reflect","irradiance","getIrradiance","mixedF0","Ems","F_avg","FmsEms","k_D","iblDiffuse","applyUniformValues","bindGroup","pass","setTexture","getGGXLUT"],"mappings":"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"}
1
+ {"version":3,"file":"pbrblueprintmixin.js","sources":["../../../../src/material/mixins/lightmodel/pbrblueprintmixin.ts"],"sourcesContent":["import type { BindGroup, PBFunctionScope, PBInsideFunctionScope, ShaderTypeFunc } from '@zephyr3d/device';\r\nimport type { PBShaderExp } from '@zephyr3d/device';\r\nimport type { MeshMaterial } from '../../meshmaterial';\r\nimport { applyMaterialMixins } from '../../meshmaterial';\r\nimport type { IMixinLight } from '../lit';\r\nimport { mixinLight } from '../lit';\r\nimport type { IMixinPBRBRDF } from '../pbr/brdf';\r\nimport { mixinPBRBRDF } from '../pbr/brdf';\r\nimport type { MaterialBlueprintIR } from '../../../utility/blueprint/material/ir';\r\nimport { ShaderHelper } from '../../shader/helper';\r\nimport { LIGHT_TYPE_POINT, LIGHT_TYPE_RECT, MaterialVaryingFlags } from '../../../values';\r\nimport type { DrawContext } from '../../../render';\r\nimport { getGGXLUT } from '../../../utility/textures/ggxlut';\r\n\r\nconst PBR_REFLECTION_MODE = {\r\n none: 0,\r\n ggx: 1,\r\n anisotropic: 2,\r\n glint: 3\r\n} as const;\r\n\r\n/**\r\n * Interface for mixinPBRBluePrint lighting model mixin\r\n * @public\r\n */\r\nexport type IMixinPBRBluePrint = {\r\n PBRLight(\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp,\r\n viewVec: PBShaderExp,\r\n commonData: PBShaderExp,\r\n outRoughness?: PBShaderExp,\r\n outSSSDiffuse?: PBShaderExp\r\n ): PBShaderExp;\r\n getCommonDatasStruct(scope: PBInsideFunctionScope): ShaderTypeFunc;\r\n getCommonData(\r\n scope: PBInsideFunctionScope,\r\n data: PBShaderExp,\r\n viewVec: PBShaderExp,\r\n worldPos: PBShaderExp,\r\n worldNorm: PBShaderExp,\r\n worldTangent: PBShaderExp,\r\n worldBinormal: PBShaderExp,\r\n vertexColor: PBShaderExp,\r\n vertexUV: PBShaderExp,\r\n ir: MaterialBlueprintIR\r\n ): void;\r\n calculateCommonData(\r\n scope: PBInsideFunctionScope,\r\n ir: MaterialBlueprintIR,\r\n viewVec: PBShaderExp,\r\n worldPos: PBShaderExp,\r\n worldNorm: PBShaderExp,\r\n worldTangent: PBShaderExp,\r\n worldBinormal: PBShaderExp,\r\n vertexColor: PBShaderExp,\r\n vertexUV: PBShaderExp,\r\n data: PBShaderExp\r\n ): void;\r\n directLighting(\r\n scope: PBInsideFunctionScope,\r\n lightDir: PBShaderExp,\r\n lightColor: PBShaderExp,\r\n viewVec: PBShaderExp,\r\n commonData: PBShaderExp,\r\n diffuseScale: PBShaderExp,\r\n specularScale: PBShaderExp,\r\n sourceRadiusFactor: PBShaderExp,\r\n outColor: PBShaderExp,\r\n outDiffuseColor?: PBShaderExp\r\n ): void;\r\n indirectLighting(\r\n scope: PBInsideFunctionScope,\r\n viewVec: PBShaderExp,\r\n commonData: PBShaderExp,\r\n outColor: PBShaderExp,\r\n outRoughness?: PBShaderExp,\r\n outDiffuseColor?: PBShaderExp\r\n ): void;\r\n} & IMixinPBRBRDF &\r\n IMixinLight;\r\n\r\n/**\r\n * PBRBluePrint lighting model mixin\r\n * @param BaseCls - Class to mix in\r\n * @returns Mixed class\r\n * @public\r\n */\r\nexport function mixinPBRBluePrint<T extends typeof MeshMaterial>(BaseCls: T) {\r\n if ((BaseCls as any).pbrBluePrint) {\r\n return BaseCls as T & { new (...args: any[]): IMixinPBRBluePrint };\r\n }\r\n const S = applyMaterialMixins(BaseCls, mixinPBRBRDF, mixinLight);\r\n\r\n return class extends S {\r\n static readonly pbrBluePrint = true;\r\n constructor() {\r\n super();\r\n }\r\n copyFrom(other: this) {\r\n super.copyFrom(other);\r\n }\r\n getCommonData(\r\n scope: PBInsideFunctionScope,\r\n data: PBShaderExp,\r\n viewVec: PBShaderExp,\r\n worldPos: PBShaderExp,\r\n worldNorm: PBShaderExp,\r\n worldTangent: PBShaderExp,\r\n worldBinormal: PBShaderExp,\r\n vertexColor: PBShaderExp,\r\n vertexUV: PBShaderExp,\r\n ir: MaterialBlueprintIR\r\n ) {\r\n this.calculateCommonData(\r\n scope,\r\n ir,\r\n viewVec,\r\n worldPos,\r\n worldNorm,\r\n worldTangent,\r\n worldBinormal,\r\n vertexColor,\r\n vertexUV,\r\n data\r\n );\r\n }\r\n getCommonDatasStruct(scope: PBInsideFunctionScope) {\r\n const pb = scope.$builder;\r\n return pb.defineStruct([\r\n pb.vec4('f0'),\r\n pb.vec3('f90'),\r\n pb.vec4('albedo'),\r\n pb.vec4('diffuse'),\r\n pb.float('metallic'),\r\n pb.float('roughness'),\r\n pb.vec3('normal'),\r\n pb.mat3('TBN'),\r\n pb.vec3('emissive'),\r\n pb.vec3('specular')\r\n ]);\r\n }\r\n\r\n PBRLight(\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp,\r\n viewVec: PBShaderExp,\r\n commonData: PBShaderExp,\r\n outRoughness?: PBShaderExp,\r\n outSSSDiffuse?: PBShaderExp\r\n ) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_PBRBluePrintLight';\r\n const that = this;\r\n const baseLightPass = !that.drawContext.lightBlending;\r\n pb.func(\r\n funcName,\r\n [\r\n that.getCommonDatasStruct(scope)('pbrData'),\r\n pb.vec3('viewVec'),\r\n pb.vec3('worldPos'),\r\n ...(outRoughness ? [pb.vec4('outRoughness').out()] : []),\r\n ...(outSSSDiffuse ? [pb.vec4('outSSSDiffuse').out()] : [])\r\n ],\r\n function () {\r\n this.$l.lightingColor = pb.vec3(0);\r\n this.$l.sssDiffuseColor = pb.vec3(0);\r\n this.$l.emissiveColor = baseLightPass ? this.pbrData.emissive : pb.vec3(0);\r\n if (baseLightPass) {\r\n if (outRoughness && outSSSDiffuse) {\r\n that.indirectLighting(\r\n this,\r\n this.viewVec,\r\n this.pbrData,\r\n this.lightingColor,\r\n this.outRoughness,\r\n this.sssDiffuseColor\r\n );\r\n } else if (outRoughness) {\r\n that.indirectLighting(this, this.viewVec, this.pbrData, this.lightingColor, this.outRoughness);\r\n } else if (outSSSDiffuse) {\r\n that.indirectLighting(\r\n this,\r\n this.viewVec,\r\n this.pbrData,\r\n this.lightingColor,\r\n undefined,\r\n this.sssDiffuseColor\r\n );\r\n } else {\r\n that.indirectLighting(this, this.viewVec, this.pbrData, this.lightingColor);\r\n }\r\n }\r\n that.forEachLight(this, function (type, posRange, dirCutoff, colorIntensity, extra, shadow) {\r\n this.$if(pb.equal(type, LIGHT_TYPE_RECT), function () {\r\n this.$l.center = posRange.xyz;\r\n this.$l.range = posRange.w;\r\n this.$l.ax = dirCutoff.xyz;\r\n this.$l.ay = extra.xyz;\r\n this.$l.halfWidth = pb.length(this.ax);\r\n this.$l.halfHeight = pb.length(this.ay);\r\n this.$l.area = pb.mul(this.halfWidth, this.halfHeight, 4);\r\n this.$l.lightNormal = pb.normalize(pb.cross(this.ax, this.ay));\r\n this.lightNormal = pb.neg(this.lightNormal);\r\n this.$if(pb.greaterThan(this.area, 0), function () {\r\n this.$l.baseColor = pb.mul(colorIntensity.rgb, colorIntensity.a, this.area, 0.25);\r\n // calculateShadow() samples with implicit derivatives (dpdx);\r\n // WGSL requires uniform control flow, so sample once per light\r\n // toward the rect center instead of inside the per-sample\r\n // NoL_light branch.\r\n this.$l.rectShadow = pb.float(1);\r\n if (shadow) {\r\n this.$l.rectL = pb.normalize(pb.sub(this.center, this.worldPos));\r\n this.$l.rectNoL = pb.clamp(pb.dot(this.pbrData.normal, this.rectL), 0, 1);\r\n this.rectShadow = that.calculateShadow(\r\n this,\r\n this.worldPos,\r\n this.pbrData.TBN[2],\r\n pb.max(this.rectNoL, 1e-5)\r\n );\r\n }\r\n this.$l.samplePos = pb.vec3();\r\n this.$l.Lvec = pb.vec3();\r\n this.$l.L = pb.vec3();\r\n this.$l.dist = pb.float();\r\n this.$l.invDist2 = pb.float();\r\n this.$l.NoL = pb.float();\r\n this.$l.NoL_light = pb.float();\r\n this.$l.falloff = pb.float();\r\n this.$l.atten = pb.float();\r\n this.$l.lightColor = pb.vec3();\r\n\r\n const sample = (u: number, v: number) => {\r\n this.samplePos = pb.add(\r\n this.center,\r\n pb.add(pb.mul(this.ax, pb.sub(pb.mul(u, 2), 1)), pb.mul(this.ay, pb.sub(pb.mul(v, 2), 1)))\r\n );\r\n this.Lvec = pb.sub(this.samplePos, this.worldPos);\r\n this.dist = pb.length(this.Lvec);\r\n this.invDist2 = pb.div(1, pb.max(pb.mul(this.dist, this.dist), 0.0001));\r\n this.L = pb.normalize(this.Lvec);\r\n this.NoL = pb.clamp(pb.dot(this.pbrData.normal, this.L), 0, 1);\r\n this.NoL_light = pb.clamp(pb.dot(this.lightNormal, pb.neg(this.L)), 0, 1);\r\n this.$if(pb.greaterThan(this.NoL_light, 0), function () {\r\n this.falloff = pb.float(1);\r\n this.$if(pb.greaterThan(this.range, 0), function () {\r\n this.falloff = pb.max(0, pb.sub(1, pb.div(this.dist, this.range)));\r\n this.falloff = pb.mul(this.falloff, this.falloff);\r\n });\r\n this.atten = pb.mul(this.invDist2, this.NoL_light, this.falloff);\r\n this.lightColor = pb.mul(this.baseColor, this.atten, this.NoL, this.rectShadow);\r\n if (outSSSDiffuse) {\r\n that.directLighting(\r\n this,\r\n this.L,\r\n this.lightColor,\r\n this.viewVec,\r\n this.pbrData,\r\n pb.float(1),\r\n pb.float(1),\r\n pb.float(0),\r\n this.lightingColor,\r\n this.sssDiffuseColor\r\n );\r\n } else {\r\n that.directLighting(\r\n this,\r\n this.L,\r\n this.lightColor,\r\n this.viewVec,\r\n this.pbrData,\r\n pb.float(1),\r\n pb.float(1),\r\n pb.float(0),\r\n this.lightingColor\r\n );\r\n }\r\n });\r\n };\r\n\r\n sample(0.25, 0.25);\r\n sample(0.75, 0.25);\r\n sample(0.25, 0.75);\r\n sample(0.75, 0.75);\r\n });\r\n }).$else(function () {\r\n this.$l.diffuse = pb.vec3();\r\n this.$l.specular = pb.vec3();\r\n this.$l.diffuseScale = pb.float(1);\r\n this.$l.specularScale = pb.float(1);\r\n this.$l.sourceRadiusFactor = pb.float(0);\r\n this.$if(pb.equal(type, LIGHT_TYPE_POINT), function () {\r\n this.diffuseScale = extra.x;\r\n this.specularScale = extra.y;\r\n this.sourceRadiusFactor = pb.div(\r\n extra.z,\r\n pb.max(pb.distance(posRange.xyz, this.worldPos), 0.0001)\r\n );\r\n });\r\n this.$l.lightAtten = that.calculateLightAttenuation(\r\n this,\r\n type,\r\n this.worldPos,\r\n posRange,\r\n dirCutoff,\r\n extra\r\n );\r\n this.$l.lightDir = that.calculateLightDirection(this, type, this.worldPos, posRange, dirCutoff);\r\n this.$l.NoL = pb.clamp(pb.dot(this.pbrData.normal, this.lightDir), 0, 1);\r\n this.$l.lightColor = pb.mul(colorIntensity.rgb, colorIntensity.a, this.lightAtten, this.NoL);\r\n if (shadow) {\r\n this.lightColor = pb.mul(\r\n this.lightColor,\r\n that.calculateShadow(this, this.worldPos, this.pbrData.TBN[2], this.NoL)\r\n );\r\n }\r\n if (outSSSDiffuse) {\r\n that.directLighting(\r\n this,\r\n this.lightDir,\r\n this.lightColor,\r\n this.viewVec,\r\n this.pbrData,\r\n this.diffuseScale,\r\n this.specularScale,\r\n this.sourceRadiusFactor,\r\n this.lightingColor,\r\n this.sssDiffuseColor\r\n );\r\n } else {\r\n that.directLighting(\r\n this,\r\n this.lightDir,\r\n this.lightColor,\r\n this.viewVec,\r\n this.pbrData,\r\n this.diffuseScale,\r\n this.specularScale,\r\n this.sourceRadiusFactor,\r\n this.lightingColor\r\n );\r\n }\r\n });\r\n });\r\n if (outSSSDiffuse) {\r\n this.outSSSDiffuse = pb.vec4(this.sssDiffuseColor, this.pbrData.albedo.a);\r\n }\r\n this.$return(pb.vec4(pb.add(this.lightingColor, this.emissiveColor), this.pbrData.albedo.a));\r\n }\r\n );\r\n return (\r\n outRoughness && outSSSDiffuse\r\n ? pb.getGlobalScope()[funcName](commonData, viewVec, worldPos, outRoughness, outSSSDiffuse)\r\n : outRoughness\r\n ? pb.getGlobalScope()[funcName](commonData, viewVec, worldPos, outRoughness)\r\n : outSSSDiffuse\r\n ? pb.getGlobalScope()[funcName](commonData, viewVec, worldPos, outSSSDiffuse)\r\n : pb.getGlobalScope()[funcName](commonData, viewVec, worldPos)\r\n ) as PBShaderExp;\r\n }\r\n vertexShader(scope: PBFunctionScope) {\r\n super.vertexShader(scope);\r\n }\r\n fragmentShader(scope: PBFunctionScope) {\r\n const pb = scope.$builder;\r\n super.fragmentShader(scope);\r\n if (this.needFragmentColor()) {\r\n scope.zReflectionMode = pb.float().uniform(2);\r\n if (this.drawContext.drawEnvLight) {\r\n scope.zGGXLut = pb.tex2D().uniform(2);\r\n }\r\n }\r\n }\r\n calculateCommonData(\r\n scope: PBInsideFunctionScope,\r\n ir: MaterialBlueprintIR,\r\n viewVec: PBShaderExp,\r\n worldPos: PBShaderExp,\r\n worldNorm: PBShaderExp,\r\n worldTangent: PBShaderExp,\r\n worldBinormal: PBShaderExp,\r\n vertexColor: PBShaderExp,\r\n vertexUV: PBShaderExp,\r\n data: PBShaderExp\r\n ) {\r\n const that = this;\r\n const pb = scope.$builder;\r\n const funcName = 'zCalculateCommonDataPBRBluePrint';\r\n const params: PBShaderExp[] = [\r\n this.getCommonDatasStruct(scope)('zCommonData').out(),\r\n pb.vec3('zViewVec'),\r\n pb.vec3('zWorldPos'),\r\n pb.vec3('zVertexNormal'),\r\n pb.vec3('zVertexTangent'),\r\n pb.vec3('zVertexBinormal'),\r\n pb.vec4('zVertexColor'),\r\n pb.vec2('zVertexUV')\r\n ];\r\n const paramValues: PBShaderExp[] = [\r\n data,\r\n viewVec,\r\n worldPos,\r\n worldNorm,\r\n worldTangent,\r\n worldBinormal,\r\n vertexColor,\r\n vertexUV\r\n ];\r\n pb.func(funcName, params, function () {\r\n const outputs = ir.create(pb)!;\r\n this.zCommonData.albedo = pb.vec4(\r\n (that.getOutput(outputs, 'BaseColor') as PBShaderExp)?.rgb ?? pb.vec3(1),\r\n (that.getOutput(outputs, 'Opacity') as number | PBShaderExp) ?? 1\r\n );\r\n this.zCommonData.metallic = that.getOutput(outputs, 'Metallic') ?? 0;\r\n this.zCommonData.roughness = that.getOutput(outputs, 'Roughness')\r\n ? pb.mul(\r\n that.getOutput(outputs, 'Roughness') as number | PBShaderExp,\r\n ShaderHelper.getCameraRoughnessFactor(scope)\r\n )\r\n : ShaderHelper.getCameraRoughnessFactor(scope);\r\n this.zCommonData.specular = that.getOutput(outputs, 'Specular') ?? pb.vec3(1);\r\n // A blueprint-authored emitter is a material quantity, so unlike lights it is not\r\n // pre-exposed on the CPU. Physical scenes expose it here (blueprints have no per-material\r\n // exposure weight, so it always follows exposure); in legacy the factor is 1. The graph\r\n // output replaces the whole emissive term, so under physical lighting it is a cd/m²\r\n // luminance: emit hundreds to thousands, not the [0,1] of a legacy scene.\r\n this.zCommonData.emissive = pb.mul(\r\n (that.getOutput(outputs, 'Emissive') ?? pb.vec3(0)) as PBShaderExp,\r\n ShaderHelper.getPreExposureUniform(scope)\r\n );\r\n this.zCommonData.f90 = pb.vec3(1);\r\n this.zCommonData.f0 = pb.vec4(\r\n pb.mix(\r\n pb.min(pb.mul(pb.vec3(0.04), this.zCommonData.specular), pb.vec3(1)),\r\n this.zCommonData.albedo.rgb,\r\n this.zCommonData.metallic\r\n ),\r\n 1.5\r\n );\r\n this.$l.tangent = that.getOutput(outputs, 'Tangent') ?? this.zVertexTangent;\r\n this.$l.ng = pb.normalize(this.zVertexNormal);\r\n this.$l.t_ = pb.normalize(this.tangent);\r\n this.$l.t = pb.normalize(pb.sub(this.t_, pb.mul(this.ng, pb.dot(this.ng, this.t_))));\r\n this.$l.b = pb.cross(this.ng, this.t);\r\n if (that.doubleSidedLighting && that.cullMode !== 'back') {\r\n this.$if(pb.not(this.$builtins.frontFacing), function () {\r\n this.t = pb.mul(this.t, -1);\r\n this.b = pb.mul(this.b, -1);\r\n this.ng = pb.mul(this.ng, -1);\r\n });\r\n }\r\n this.zCommonData.TBN = pb.mat3(this.t, this.b, this.ng);\r\n\r\n if (that.getOutput(outputs, 'Normal')) {\r\n this.zCommonData.normal = pb.normalize(\r\n pb.mul(this.zCommonData.TBN, that.getOutput(outputs, 'Normal') as number | PBShaderExp)\r\n );\r\n } else {\r\n this.zCommonData.normal = this.ng;\r\n }\r\n this.zCommonData.diffuse = pb.vec4(\r\n pb.mix(this.zCommonData.albedo.rgb, pb.vec3(0), this.zCommonData.metallic),\r\n this.zCommonData.albedo.a\r\n );\r\n });\r\n scope[funcName](...paramValues);\r\n }\r\n private getOutput(\r\n outputs: {\r\n name: string;\r\n exp: number | boolean | PBShaderExp;\r\n }[],\r\n name: string\r\n ) {\r\n return outputs.find((output) => output.name === name)?.exp;\r\n }\r\n directLighting(\r\n scope: PBInsideFunctionScope,\r\n lightDir: PBShaderExp,\r\n lightColor: PBShaderExp,\r\n viewVec: PBShaderExp,\r\n commonData: PBShaderExp,\r\n diffuseScale: PBShaderExp,\r\n specularScale: PBShaderExp,\r\n sourceRadiusFactor: PBShaderExp,\r\n outColor: PBShaderExp,\r\n outDiffuseColor?: PBShaderExp\r\n ) {\r\n const pb = scope.$builder;\r\n const that = this;\r\n const funcName = 'Z_PBRDirectLighting';\r\n pb.func(\r\n funcName,\r\n [\r\n pb.vec3('L'),\r\n pb.vec3('lightColor'),\r\n pb.vec3('viewVec'),\r\n that.getCommonDatasStruct(scope)('data'),\r\n pb.float('diffuseScale'),\r\n pb.float('specularScale'),\r\n pb.float('sourceRadiusFactor'),\r\n pb.vec3('outColor').inout(),\r\n ...(outDiffuseColor ? [pb.vec3('outDiffuseColor').inout()] : [])\r\n ],\r\n function () {\r\n this.$l.reflectionMode = this.zReflectionMode;\r\n this.$l.H = pb.normalize(pb.add(this.viewVec, this.L));\r\n this.$l.NoH = pb.clamp(pb.dot(this.data.normal, this.H), 0, 1);\r\n this.$l.NoL = pb.clamp(pb.dot(this.data.normal, this.L), 0, 1);\r\n this.$l.NoV = pb.clamp(pb.dot(this.data.normal, this.viewVec), 0, 1);\r\n this.$if(pb.greaterThan(this.NoL, 0), function () {\r\n this.$l.VoH = pb.clamp(pb.dot(this.viewVec, this.H), 0, 1);\r\n this.$l.schlickFresnel = that.fresnelSchlick(this, this.VoH, this.data.f0.rgb, this.data.f90);\r\n this.$l.F = this.schlickFresnel;\r\n this.$l.specularRoughness = pb.clamp(pb.add(this.data.roughness, this.sourceRadiusFactor), 0, 1);\r\n this.$l.alphaRoughness = pb.mul(this.specularRoughness, this.specularRoughness);\r\n this.$l.D = that.distributionGGX(this, this.NoH, this.alphaRoughness);\r\n this.$if(pb.equal(this.reflectionMode, PBR_REFLECTION_MODE.anisotropic), function () {\r\n this.$l.dirAngle = pb.mul(\r\n pb.add(\r\n pb.mul(this.zAnisotropyDirection, this.zAnisotropyDirectionScaleBias.x),\r\n this.zAnisotropyDirectionScaleBias.y\r\n ),\r\n Math.PI / 180\r\n );\r\n this.$l.t0 = pb.normalize(this.data.TBN[0]);\r\n this.$l.b0 = pb.normalize(this.data.TBN[1]);\r\n this.$l.tangent = pb.normalize(\r\n pb.add(pb.mul(this.t0, pb.cos(this.dirAngle)), pb.mul(this.b0, pb.sin(this.dirAngle)))\r\n );\r\n this.$l.bitangent = pb.normalize(pb.cross(this.data.normal, this.tangent));\r\n this.$l.ToH = pb.dot(this.tangent, this.H);\r\n this.$l.BoH = pb.dot(this.bitangent, this.H);\r\n this.$l.at = pb.max(pb.mul(this.alphaRoughness, pb.add(1, this.zAnisotropy)), 0.0001);\r\n this.$l.ab = pb.max(pb.mul(this.alphaRoughness, pb.sub(1, this.zAnisotropy)), 0.0001);\r\n this.$l.anisoDenom = pb.mul(\r\n Math.PI,\r\n this.at,\r\n this.ab,\r\n pb.pow(\r\n pb.add(\r\n pb.div(pb.mul(this.ToH, this.ToH), pb.mul(this.at, this.at)),\r\n pb.div(pb.mul(this.BoH, this.BoH), pb.mul(this.ab, this.ab)),\r\n pb.mul(this.NoH, this.NoH)\r\n ),\r\n 2\r\n )\r\n );\r\n this.D = pb.div(1, pb.max(this.anisoDenom, 0.0001));\r\n });\r\n this.$if(pb.equal(this.reflectionMode, PBR_REFLECTION_MODE.glint), function () {\r\n this.$l.glintNoise = pb.fract(\r\n pb.mul(\r\n pb.sin(pb.add(pb.dot(this.H, pb.vec3(127.1, 311.7, 74.7)), pb.mul(this.NoH, 43.1))),\r\n 43758.5453\r\n )\r\n );\r\n this.$l.glintMask = pb.smoothStep(0.97, 1, this.glintNoise);\r\n this.D = pb.mul(this.D, pb.add(1, pb.mul(this.glintMask, 8)));\r\n });\r\n this.$l.V = that.visGGX(this, this.NoV, this.NoL, this.alphaRoughness);\r\n this.$l.specular = pb.mul(this.lightColor, this.D, this.V, this.F, this.specularScale);\r\n this.$if(pb.equal(this.reflectionMode, PBR_REFLECTION_MODE.none), function () {\r\n this.specular = pb.vec3(0);\r\n });\r\n this.outColor = pb.add(this.outColor, this.specular);\r\n this.$l.diffuseBRDF = pb.mul(pb.sub(pb.vec3(1), this.F), pb.div(this.data.diffuse.rgb, Math.PI));\r\n this.$l.diffuse = pb.mul(\r\n this.lightColor,\r\n pb.max(this.diffuseBRDF, pb.vec3(0)),\r\n this.diffuseScale\r\n );\r\n this.outColor = pb.add(this.outColor, this.diffuse);\r\n if (outDiffuseColor) {\r\n this.outDiffuseColor = pb.add(this.outDiffuseColor, this.diffuse);\r\n }\r\n });\r\n }\r\n );\r\n if (outDiffuseColor) {\r\n scope.$g[funcName](\r\n lightDir,\r\n lightColor,\r\n viewVec,\r\n commonData,\r\n diffuseScale,\r\n specularScale,\r\n sourceRadiusFactor,\r\n outColor,\r\n outDiffuseColor\r\n );\r\n } else {\r\n scope.$g[funcName](\r\n lightDir,\r\n lightColor,\r\n viewVec,\r\n commonData,\r\n diffuseScale,\r\n specularScale,\r\n sourceRadiusFactor,\r\n outColor\r\n );\r\n }\r\n }\r\n indirectLighting(\r\n scope: PBInsideFunctionScope,\r\n viewVec: PBShaderExp,\r\n commonData: PBShaderExp,\r\n outColor: PBShaderExp,\r\n outRoughness?: PBShaderExp,\r\n outDiffuseColor?: PBShaderExp\r\n ) {\r\n const pb = scope.$builder;\r\n const that = this;\r\n const ctx = that.drawContext;\r\n const funcName = 'Z_PBRIndirectLighting';\r\n pb.func(\r\n funcName,\r\n [\r\n pb.vec3('viewVec'),\r\n that.getCommonDatasStruct(scope)('data'),\r\n pb.vec3('outColor').inout(),\r\n ...(outRoughness ? [pb.vec4('outRoughness').out()] : []),\r\n ...(outDiffuseColor ? [pb.vec3('outDiffuseColor').inout()] : [])\r\n ],\r\n function () {\r\n if (\r\n !ctx.drawEnvLight ||\r\n (!ctx.env!.light.envLight.hasRadiance() && !ctx.env!.light.envLight.hasIrradiance())\r\n ) {\r\n return;\r\n }\r\n const envLightStrength = ShaderHelper.getEnvLightStrength(this);\r\n const envLightSpecularStrength = ShaderHelper.getEnvLightSpecularStrength(this);\r\n this.$l.occlusion = envLightStrength;\r\n this.$l.diffuseOcclusion =\r\n ctx.SSGI &&\r\n ctx.SSGIIrradianceHistoryTexture &&\r\n ctx.SSGISurfaceHistoryTexture &&\r\n (ctx.device.type === 'webgl' || ctx.motionVectorTexture)\r\n ? pb.float(1)\r\n : this.occlusion;\r\n this.$l.reflectionMode = this.zReflectionMode;\r\n this.$l.NoV = pb.clamp(pb.dot(this.data.normal, this.viewVec), 0.0001, 1);\r\n this.$l.ggxLutSample = pb.clamp(\r\n pb.textureSampleLevel(\r\n this.zGGXLut,\r\n pb.clamp(pb.vec2(this.NoV, this.data.roughness), pb.vec2(0), pb.vec2(1)),\r\n 0\r\n ),\r\n pb.vec4(0),\r\n pb.vec4(1)\r\n );\r\n this.$l.f_ab = this.ggxLutSample.rg;\r\n this.$l.Fr = pb.sub(\r\n pb.max(pb.vec3(pb.sub(1, this.data.roughness)), this.data.f0.rgb),\r\n this.data.f0.rgb\r\n );\r\n this.$l.k_S = pb.add(this.data.f0.rgb, pb.mul(this.Fr, pb.pow(pb.sub(1, this.NoV), 5)));\r\n if (outRoughness || ctx.env!.light.envLight.hasRadiance()) {\r\n this.$l.FssEss = pb.add(pb.mul(this.k_S, this.f_ab.x), pb.vec3(this.f_ab.y));\r\n this.$l.specularFactor = pb.mul(this.FssEss, this.occlusion);\r\n this.specularFactor = pb.mul(\r\n this.specularFactor,\r\n pb.float(pb.notEqual(this.reflectionMode, PBR_REFLECTION_MODE.none))\r\n );\r\n if (outRoughness) {\r\n this.outRoughness = pb.vec4(this.specularFactor /*this.data.f0.rgb*/, this.data.roughness);\r\n }\r\n // Skip specular IBL only when the roughness target exists, since SSR\r\n // is its only requester and resolves the reflection from it; adding\r\n // it here too would count it twice. `outRoughness` alone is not that\r\n // signal: SSGI requests the scene normal target and materials raise\r\n // the roughness and normal flags together, so an SSGI-only frame\r\n // wrote outRoughness with nobody to resolve the reflection, which\r\n // silently dropped specular highlights.\r\n const ssrResolvesSpecular = !!(ctx.materialFlags & MaterialVaryingFlags.SCENE_STORE_ROUGHNESS);\r\n if (!ssrResolvesSpecular && ctx.env!.light.envLight.hasRadiance()) {\r\n this.$l.radiance = ctx.env!.light.envLight.getRadiance(\r\n this,\r\n pb.reflect(pb.neg(this.viewVec), this.data.normal),\r\n this.data.roughness\r\n );\r\n this.outColor = pb.add(\r\n this.outColor,\r\n pb.mul(this.radiance, this.specularFactor, envLightSpecularStrength)\r\n );\r\n }\r\n }\r\n if (ctx.env!.light.envLight.hasIrradiance()) {\r\n this.$l.irradiance = ctx.env!.light.envLight.getIrradiance(this, this.data.normal, ctx);\r\n this.$l.mixedF0 = this.data.f0.rgb;\r\n this.$l.FssEss = pb.add(pb.mul(this.k_S, this.f_ab.x), pb.vec3(this.f_ab.y));\r\n this.$l.Ems = pb.sub(1, pb.add(this.f_ab.x, this.f_ab.y));\r\n this.$l.F_avg = pb.add(this.mixedF0, pb.div(pb.sub(pb.vec3(1), this.mixedF0), 21));\r\n this.$l.FmsEms = pb.div(\r\n pb.mul(this.FssEss, this.F_avg, this.Ems),\r\n pb.sub(pb.vec3(1), pb.mul(this.F_avg, this.Ems))\r\n );\r\n this.$l.k_D = pb.mul(this.data.diffuse.rgb, pb.add(pb.sub(pb.vec3(1), this.FssEss), this.FmsEms));\r\n this.$l.iblDiffuse = pb.mul(\r\n pb.add(this.FmsEms, this.k_D),\r\n this.irradiance,\r\n this.diffuseOcclusion\r\n );\r\n this.outColor = pb.add(this.outColor, this.iblDiffuse);\r\n if (outDiffuseColor) {\r\n this.outDiffuseColor = pb.add(this.outDiffuseColor, this.iblDiffuse);\r\n }\r\n }\r\n }\r\n );\r\n if (outRoughness && outDiffuseColor) {\r\n scope.$g[funcName](viewVec, commonData, outColor, outRoughness, outDiffuseColor);\r\n } else if (outRoughness) {\r\n scope.$g[funcName](viewVec, commonData, outColor, outRoughness);\r\n } else if (outDiffuseColor) {\r\n scope.$g[funcName](viewVec, commonData, outColor, outDiffuseColor);\r\n } else {\r\n scope.$g[funcName](viewVec, commonData, outColor);\r\n }\r\n }\r\n applyUniformValues(bindGroup: BindGroup, ctx: DrawContext, pass: number) {\r\n super.applyUniformValues(bindGroup, ctx, pass);\r\n if (this.needFragmentColor(ctx)) {\r\n if (ctx.drawEnvLight) {\r\n bindGroup.setTexture('zGGXLut', getGGXLUT(1024));\r\n }\r\n }\r\n }\r\n } as unknown as T & { new (...args: any[]): IMixinPBRBluePrint };\r\n}\r\n"],"names":["PBR_REFLECTION_MODE","none","ggx","anisotropic","glint","mixinPBRBluePrint","BaseCls","pbrBluePrint","S","applyMaterialMixins","mixinPBRBRDF","mixinLight","copyFrom","other","getCommonData","scope","data","viewVec","worldPos","worldNorm","worldTangent","worldBinormal","vertexColor","vertexUV","ir","calculateCommonData","getCommonDatasStruct","pb","$builder","defineStruct","vec4","vec3","float","mat3","PBRLight","commonData","outRoughness","outSSSDiffuse","funcName","that","baseLightPass","drawContext","lightBlending","func","out","$l","lightingColor","sssDiffuseColor","emissiveColor","pbrData","emissive","indirectLighting","undefined","forEachLight","type","posRange","dirCutoff","colorIntensity","extra","shadow","$if","equal","LIGHT_TYPE_RECT","center","xyz","range","w","ax","ay","halfWidth","length","halfHeight","area","mul","lightNormal","normalize","cross","neg","greaterThan","baseColor","rgb","a","rectShadow","rectL","sub","rectNoL","clamp","dot","normal","calculateShadow","TBN","max","samplePos","Lvec","L","dist","invDist2","NoL","NoL_light","falloff","atten","lightColor","sample","u","v","add","div","directLighting","$else","diffuse","specular","diffuseScale","specularScale","sourceRadiusFactor","LIGHT_TYPE_POINT","x","y","z","distance","lightAtten","calculateLightAttenuation","lightDir","calculateLightDirection","albedo","$return","getGlobalScope","vertexShader","fragmentShader","needFragmentColor","zReflectionMode","uniform","drawEnvLight","zGGXLut","tex2D","params","vec2","paramValues","outputs","create","zCommonData","getOutput","metallic","roughness","ShaderHelper","getCameraRoughnessFactor","getPreExposureUniform","f90","f0","mix","min","tangent","zVertexTangent","ng","zVertexNormal","t_","t","b","doubleSidedLighting","cullMode","not","$builtins","frontFacing","name","find","output","exp","outColor","outDiffuseColor","inout","reflectionMode","H","NoH","NoV","VoH","schlickFresnel","fresnelSchlick","F","specularRoughness","alphaRoughness","D","distributionGGX","dirAngle","zAnisotropyDirection","zAnisotropyDirectionScaleBias","Math","PI","t0","b0","cos","sin","bitangent","ToH","BoH","at","zAnisotropy","ab","anisoDenom","pow","glintNoise","fract","glintMask","smoothStep","V","visGGX","diffuseBRDF","$g","ctx","env","light","envLight","hasRadiance","hasIrradiance","envLightStrength","getEnvLightStrength","envLightSpecularStrength","getEnvLightSpecularStrength","occlusion","diffuseOcclusion","SSGI","SSGIIrradianceHistoryTexture","SSGISurfaceHistoryTexture","device","motionVectorTexture","ggxLutSample","textureSampleLevel","f_ab","rg","Fr","k_S","FssEss","specularFactor","notEqual","ssrResolvesSpecular","materialFlags","MaterialVaryingFlags","SCENE_STORE_ROUGHNESS","radiance","getRadiance","reflect","irradiance","getIrradiance","mixedF0","Ems","F_avg","FmsEms","k_D","iblDiffuse","applyUniformValues","bindGroup","pass","setTexture","getGGXLUT"],"mappings":"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"}
@@ -308,7 +308,7 @@ const PBR_REFLECTION_MODE = {
308
308
  if (shadow) {
309
309
  this.$l.rectL = pb.normalize(pb.sub(posRange.xyz, this.worldPos));
310
310
  this.$l.rectNoL = pb.clamp(pb.dot(this.normal, this.rectL), 0, 1);
311
- this.$l.rectShadow = that.calculateShadow(this, this.worldPos, pb.max(this.rectNoL, 1e-5));
311
+ this.$l.rectShadow = that.calculateShadow(this, this.worldPos, this.TBN[2], pb.max(this.rectNoL, 1e-5));
312
312
  this.rectColorIntensity = pb.vec4(colorIntensity.rgb, pb.mul(colorIntensity.a, this.rectShadow));
313
313
  }
314
314
  that.directRectLight(this, this.worldPos, this.normal, this.viewVec, this.pbrData, posRange, dirCutoff, extra, this.rectColorIntensity, this.lightingColor);
@@ -328,7 +328,7 @@ const PBR_REFLECTION_MODE = {
328
328
  this.$l.NoL = pb.clamp(pb.dot(this.normal, this.lightDir), 0, 1);
329
329
  this.$l.lightColor = pb.mul(colorIntensity.rgb, colorIntensity.a, this.lightAtten, this.NoL);
330
330
  if (shadow) {
331
- this.lightColor = pb.mul(this.lightColor, that.calculateShadow(this, this.worldPos, this.NoL));
331
+ this.lightColor = pb.mul(this.lightColor, that.calculateShadow(this, this.worldPos, this.TBN[2], this.NoL));
332
332
  }
333
333
  if (outSSSDiffuse) {
334
334
  if (outSSSTransmission) {
@@ -408,7 +408,7 @@ const PBR_REFLECTION_MODE = {
408
408
  const roughness = this.calculateRoughness(scope, albedo, normal);
409
409
  const specularFactor = this.calculateSpecularFactor(scope, albedo, normal);
410
410
  const reflectionMode = this.calculateReflectionMode(scope);
411
- if (this.metallicRoughnessTexture) {
411
+ if (this.hasMetallicRoughnessTexture()) {
412
412
  scope.$l.metallicRoughnessSample = this.sampleMetallicRoughnessTexture(scope);
413
413
  data.metallic = pb.mul(metallic, scope.metallicRoughnessSample.z);
414
414
  data.roughness = pb.mul(roughness, scope.metallicRoughnessSample.y);
@@ -417,12 +417,12 @@ const PBR_REFLECTION_MODE = {
417
417
  data.roughness = roughness;
418
418
  }
419
419
  data.roughness = pb.mul(data.roughness, ShaderHelper.getCameraRoughnessFactor(scope));
420
- if (this.specularColorTexture) {
420
+ if (this.hasSpecularColorTexture()) {
421
421
  scope.$l.specularColor = pb.mul(specularFactor.rgb, this.sampleSpecularColorTexture(scope).rgb);
422
422
  } else {
423
423
  scope.$l.specularColor = specularFactor.rgb;
424
424
  }
425
- if (this.specularTexture) {
425
+ if (this.hasSpecularTexture()) {
426
426
  data.specularWeight = pb.mul(specularFactor.a, this.sampleSpecularTexture(scope).a);
427
427
  } else {
428
428
  data.specularWeight = specularFactor.a;