@zephyr3d/scene 0.9.21 → 0.9.23

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 (238) hide show
  1. package/dist/animation/joint_dynamics/collision.js +1 -7
  2. package/dist/animation/joint_dynamics/collision.js.map +1 -1
  3. package/dist/animation/joint_dynamics/constraints.js +2 -17
  4. package/dist/animation/joint_dynamics/constraints.js.map +1 -1
  5. package/dist/animation/joint_dynamics/controller.js +2 -20
  6. package/dist/animation/joint_dynamics/controller.js.map +1 -1
  7. package/dist/animation/joint_dynamics/joint_dynamics_system.js +1 -3
  8. package/dist/animation/joint_dynamics/joint_dynamics_system.js.map +1 -1
  9. package/dist/animation/joint_dynamics/solver.js +14 -60
  10. package/dist/animation/joint_dynamics/solver.js.map +1 -1
  11. package/dist/animation/joint_dynamics/types.js +3 -3
  12. package/dist/animation/joint_dynamics/types.js.map +1 -1
  13. package/dist/app/app.js +23 -0
  14. package/dist/app/app.js.map +1 -1
  15. package/dist/app/scriptregistry.js +16 -53
  16. package/dist/app/scriptregistry.js.map +1 -1
  17. package/dist/asset/assetmanager.js +2 -0
  18. package/dist/asset/assetmanager.js.map +1 -1
  19. package/dist/asset/model.js +22 -0
  20. package/dist/asset/model.js.map +1 -1
  21. package/dist/blitter/bilateralblur.js +3 -1
  22. package/dist/blitter/bilateralblur.js.map +1 -1
  23. package/dist/blitter/blitter.js +3 -3
  24. package/dist/blitter/blitter.js.map +1 -1
  25. package/dist/camera/camera.js +398 -45
  26. package/dist/camera/camera.js.map +1 -1
  27. package/dist/camera/perspectivecamera.js +69 -2
  28. package/dist/camera/perspectivecamera.js.map +1 -1
  29. package/dist/index.d.ts +9100 -8712
  30. package/dist/index.js +9 -1
  31. package/dist/index.js.map +1 -1
  32. package/dist/material/blinn.js +1 -1
  33. package/dist/material/blinn.js.map +1 -1
  34. package/dist/material/lambert.js +3 -3
  35. package/dist/material/lambert.js.map +1 -1
  36. package/dist/material/material.js +8 -5
  37. package/dist/material/material.js.map +1 -1
  38. package/dist/material/meshmaterial.js +17 -10
  39. package/dist/material/meshmaterial.js.map +1 -1
  40. package/dist/material/mixins/lightmodel/blinnphong.js +1 -1
  41. package/dist/material/mixins/lightmodel/blinnphong.js.map +1 -1
  42. package/dist/material/mixins/lightmodel/lambert.js +1 -1
  43. package/dist/material/mixins/lightmodel/lambert.js.map +1 -1
  44. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js +21 -6
  45. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js.map +1 -1
  46. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +1 -1
  47. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
  48. package/dist/material/mixins/lightmodel/pbrspecularglossness.js +1 -1
  49. package/dist/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -1
  50. package/dist/material/mixins/lit.js +33 -11
  51. package/dist/material/mixins/lit.js.map +1 -1
  52. package/dist/material/mixins/pbr/brdf.js +44 -12
  53. package/dist/material/mixins/pbr/brdf.js.map +1 -1
  54. package/dist/material/mixins/pbr/common.js +149 -14
  55. package/dist/material/mixins/pbr/common.js.map +1 -1
  56. package/dist/material/mtoon.js +7 -4
  57. package/dist/material/mtoon.js.map +1 -1
  58. package/dist/material/pbrblueprint.js +5 -1
  59. package/dist/material/pbrblueprint.js.map +1 -1
  60. package/dist/material/pbrmr.js +1 -1
  61. package/dist/material/pbrmr.js.map +1 -1
  62. package/dist/material/pbrsg.js +1 -1
  63. package/dist/material/pbrsg.js.map +1 -1
  64. package/dist/material/shader/helper.js +186 -11
  65. package/dist/material/shader/helper.js.map +1 -1
  66. package/dist/material/skin.js +2 -2
  67. package/dist/material/skin.js.map +1 -1
  68. package/dist/material/terrain-cm.js +5 -5
  69. package/dist/material/terrain-cm.js.map +1 -1
  70. package/dist/material/water.js +6 -4
  71. package/dist/material/water.js.map +1 -1
  72. package/dist/posteffect/bloom.js +54 -4
  73. package/dist/posteffect/bloom.js.map +1 -1
  74. package/dist/posteffect/compositor.js +41 -0
  75. package/dist/posteffect/compositor.js.map +1 -1
  76. package/dist/posteffect/posteffect.js +51 -0
  77. package/dist/posteffect/posteffect.js.map +1 -1
  78. package/dist/posteffect/sao.js +7 -6
  79. package/dist/posteffect/sao.js.map +1 -1
  80. package/dist/posteffect/skinsss.js +3 -3
  81. package/dist/posteffect/skinsss.js.map +1 -1
  82. package/dist/posteffect/ssgi.js +1196 -0
  83. package/dist/posteffect/ssgi.js.map +1 -0
  84. package/dist/posteffect/ssr.js +83 -45
  85. package/dist/posteffect/ssr.js.map +1 -1
  86. package/dist/posteffect/sss.js +137 -49
  87. package/dist/posteffect/sss.js.map +1 -1
  88. package/dist/posteffect/taa.js +5 -4
  89. package/dist/posteffect/taa.js.map +1 -1
  90. package/dist/posteffect/tonemap.js +15 -3
  91. package/dist/posteffect/tonemap.js.map +1 -1
  92. package/dist/render/abuffer_oit.js +2 -2
  93. package/dist/render/abuffer_oit.js.map +1 -1
  94. package/dist/render/cluster_light.js +12 -6
  95. package/dist/render/cluster_light.js.map +1 -1
  96. package/dist/render/drawable_mixin.js +8 -5
  97. package/dist/render/drawable_mixin.js.map +1 -1
  98. package/dist/render/dualdepthpeeling_oit.js +10 -5
  99. package/dist/render/dualdepthpeeling_oit.js.map +1 -1
  100. package/dist/render/envlight.js +298 -5
  101. package/dist/render/envlight.js.map +1 -1
  102. package/dist/render/gpu_picking.js +7 -5
  103. package/dist/render/gpu_picking.js.map +1 -1
  104. package/dist/render/hzb.js +28 -19
  105. package/dist/render/hzb.js.map +1 -1
  106. package/dist/render/lightpass.js +18 -4
  107. package/dist/render/lightpass.js.map +1 -1
  108. package/dist/render/render_queue.js +37 -4
  109. package/dist/render/render_queue.js.map +1 -1
  110. package/dist/render/renderer.js +8 -3
  111. package/dist/render/renderer.js.map +1 -1
  112. package/dist/render/rendergraph/blackboard.js +20 -48
  113. package/dist/render/rendergraph/blackboard.js.map +1 -1
  114. package/dist/render/rendergraph/device_pool_allocator.js +18 -58
  115. package/dist/render/rendergraph/device_pool_allocator.js.map +1 -1
  116. package/dist/render/rendergraph/executor.js +89 -115
  117. package/dist/render/rendergraph/executor.js.map +1 -1
  118. package/dist/render/rendergraph/forward_plus_builder.js +1003 -715
  119. package/dist/render/rendergraph/forward_plus_builder.js.map +1 -1
  120. package/dist/render/rendergraph/frame_graph_context.js +41 -0
  121. package/dist/render/rendergraph/frame_graph_context.js.map +1 -0
  122. package/dist/render/rendergraph/frame_resource_requirements.js +14 -0
  123. package/dist/render/rendergraph/frame_resource_requirements.js.map +1 -0
  124. package/dist/render/rendergraph/history_resource_manager.js +74 -140
  125. package/dist/render/rendergraph/history_resource_manager.js.map +1 -1
  126. package/dist/render/rendergraph/history_resources.js +7 -5
  127. package/dist/render/rendergraph/history_resources.js.map +1 -1
  128. package/dist/render/rendergraph/render_context.js +19 -0
  129. package/dist/render/rendergraph/render_context.js.map +1 -0
  130. package/dist/render/rendergraph/render_pipeline.js +315 -0
  131. package/dist/render/rendergraph/render_pipeline.js.map +1 -0
  132. package/dist/render/rendergraph/rendergraph.js +158 -141
  133. package/dist/render/rendergraph/rendergraph.js.map +1 -1
  134. package/dist/render/rendergraph/scene_render_context.js +267 -0
  135. package/dist/render/rendergraph/scene_render_context.js.map +1 -0
  136. package/dist/render/rendergraph/texture_affinity_cache.js +19 -0
  137. package/dist/render/rendergraph/texture_affinity_cache.js.map +1 -0
  138. package/dist/render/rendergraph/types.js +19 -31
  139. package/dist/render/rendergraph/types.js.map +1 -1
  140. package/dist/render/renderpass.js +3 -3
  141. package/dist/render/renderpass.js.map +1 -1
  142. package/dist/render/shadow_mask_pass.js +10 -6
  143. package/dist/render/shadow_mask_pass.js.map +1 -1
  144. package/dist/render/sky.js +197 -35
  145. package/dist/render/sky.js.map +1 -1
  146. package/dist/render/weightedblended_oit.js +4 -3
  147. package/dist/render/weightedblended_oit.js.map +1 -1
  148. package/dist/scene/basesprite.js +2 -0
  149. package/dist/scene/basesprite.js.map +1 -1
  150. package/dist/scene/batchgroup.js +10 -0
  151. package/dist/scene/batchgroup.js.map +1 -1
  152. package/dist/scene/environment.js +61 -2
  153. package/dist/scene/environment.js.map +1 -1
  154. package/dist/scene/light.js +178 -10
  155. package/dist/scene/light.js.map +1 -1
  156. package/dist/scene/meshdrawable.js +89 -2
  157. package/dist/scene/meshdrawable.js.map +1 -1
  158. package/dist/scene/msdftext.js +2 -0
  159. package/dist/scene/msdftext.js.map +1 -1
  160. package/dist/scene/msdftextsprite.js +2 -0
  161. package/dist/scene/msdftextsprite.js.map +1 -1
  162. package/dist/scene/particlesys.js +2 -0
  163. package/dist/scene/particlesys.js.map +1 -1
  164. package/dist/scene/scene.js +34 -1
  165. package/dist/scene/scene.js.map +1 -1
  166. package/dist/scene/terrain-cm/grass.js +2 -1
  167. package/dist/scene/terrain-cm/grass.js.map +1 -1
  168. package/dist/scene/terrain-cm/terrain-cm.js +2 -0
  169. package/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
  170. package/dist/scene/water.js +2 -0
  171. package/dist/scene/water.js.map +1 -1
  172. package/dist/shaders/atmosphere.js +5 -4
  173. package/dist/shaders/atmosphere.js.map +1 -1
  174. package/dist/shaders/fog.js +10 -3
  175. package/dist/shaders/fog.js.map +1 -1
  176. package/dist/shaders/shadow.js +96 -29
  177. package/dist/shaders/shadow.js.map +1 -1
  178. package/dist/shaders/ssgi.js +63 -0
  179. package/dist/shaders/ssgi.js.map +1 -0
  180. package/dist/shaders/ssgi_reprojection.js +118 -0
  181. package/dist/shaders/ssgi_reprojection.js.map +1 -0
  182. package/dist/shaders/ssr.js +322 -154
  183. package/dist/shaders/ssr.js.map +1 -1
  184. package/dist/shadow/esm.js +13 -8
  185. package/dist/shadow/esm.js.map +1 -1
  186. package/dist/shadow/pcf_opt.js +15 -12
  187. package/dist/shadow/pcf_opt.js.map +1 -1
  188. package/dist/shadow/pcf_pd.js +15 -12
  189. package/dist/shadow/pcf_pd.js.map +1 -1
  190. package/dist/shadow/pcss.js +17 -11
  191. package/dist/shadow/pcss.js.map +1 -1
  192. package/dist/shadow/shadow_impl.js +20 -2
  193. package/dist/shadow/shadow_impl.js.map +1 -1
  194. package/dist/shadow/shadowmapper.js +10 -3
  195. package/dist/shadow/shadowmapper.js.map +1 -1
  196. package/dist/shadow/ssm.js +16 -13
  197. package/dist/shadow/ssm.js.map +1 -1
  198. package/dist/shadow/vsm.js +10 -8
  199. package/dist/shadow/vsm.js.map +1 -1
  200. package/dist/utility/physical.js +74 -0
  201. package/dist/utility/physical.js.map +1 -0
  202. package/dist/utility/rendermipmap.js +2 -2
  203. package/dist/utility/rendermipmap.js.map +1 -1
  204. package/dist/utility/serialization/manager.js +3 -1
  205. package/dist/utility/serialization/manager.js.map +1 -1
  206. package/dist/utility/serialization/scene/animation.js +3 -1
  207. package/dist/utility/serialization/scene/animation.js.map +1 -1
  208. package/dist/utility/serialization/scene/batch.js +3 -1
  209. package/dist/utility/serialization/scene/batch.js.map +1 -1
  210. package/dist/utility/serialization/scene/camera.js +598 -2
  211. package/dist/utility/serialization/scene/camera.js.map +1 -1
  212. package/dist/utility/serialization/scene/light.js +180 -9
  213. package/dist/utility/serialization/scene/light.js.map +1 -1
  214. package/dist/utility/serialization/scene/material.js +43 -3
  215. package/dist/utility/serialization/scene/material.js.map +1 -1
  216. package/dist/utility/serialization/scene/mesh.js +3 -1
  217. package/dist/utility/serialization/scene/mesh.js.map +1 -1
  218. package/dist/utility/serialization/scene/node.js +3 -1
  219. package/dist/utility/serialization/scene/node.js.map +1 -1
  220. package/dist/utility/serialization/scene/particle.js +3 -1
  221. package/dist/utility/serialization/scene/particle.js.map +1 -1
  222. package/dist/utility/serialization/scene/primitive.js +2 -0
  223. package/dist/utility/serialization/scene/primitive.js.map +1 -1
  224. package/dist/utility/serialization/scene/scene.js +70 -0
  225. package/dist/utility/serialization/scene/scene.js.map +1 -1
  226. package/dist/utility/serialization/scene/sprite.js +3 -1
  227. package/dist/utility/serialization/scene/sprite.js.map +1 -1
  228. package/dist/utility/serialization/scene/terrain.js +3 -1
  229. package/dist/utility/serialization/scene/terrain.js.map +1 -1
  230. package/dist/utility/serialization/scene/text.js +3 -0
  231. package/dist/utility/serialization/scene/text.js.map +1 -1
  232. package/dist/utility/serialization/scene/water.js +3 -1
  233. package/dist/utility/serialization/scene/water.js.map +1 -1
  234. package/dist/values.js +2 -3
  235. package/dist/values.js.map +1 -1
  236. package/package.json +3 -3
  237. package/dist/animation/joint_dynamics/convex_collider.js +0 -320
  238. package/dist/animation/joint_dynamics/convex_collider.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"pbrblueprint.js","sources":["../../src/material/pbrblueprint.ts"],"sourcesContent":["import type { BindGroup, PBFunctionScope, PBInsideFunctionScope, PBShaderExp } from '@zephyr3d/device';\r\nimport { DRef, Vector4, type Clonable } from '@zephyr3d/base';\r\nimport { ShaderHelper } from './shader/helper';\r\nimport type { BluePrintUniformTexture, BluePrintUniformValue } from '../utility/blueprint/material/ir';\r\nimport { MaterialBlueprintIR } from '../utility/blueprint/material/ir';\r\nimport type { IGraphNode } from '../utility/blueprint/node';\r\nimport { PBRBlockNode, VertexBlockNode } from '../utility/blueprint/material/pbr';\r\nimport { PBRMetallicRoughnessMaterial } from './pbrmr';\r\nimport type { DrawContext } from '../render/drawable';\r\n\r\ntype BlueprintOutputMap = Partial<Record<PBRBlueprintOutputName, number | boolean | PBShaderExp>>;\r\ntype VertexBlueprintOutputName = 'Position' | 'Normal' | 'Tangent' | 'Color' | 'UV';\r\ntype VertexBlueprintOutputMap = Partial<Record<VertexBlueprintOutputName, number | boolean | PBShaderExp>>;\r\n\r\n/**\r\n * Physically-based rendering material driven by blueprint graphs, but shaded by the\r\n * @public\r\n */\r\nexport type PBRBlueprintOutputName =\r\n | 'BaseColor'\r\n | 'Metallic'\r\n | 'Roughness'\r\n | 'Specular'\r\n | 'Emissive'\r\n | 'Normal'\r\n | 'Tangent'\r\n | 'Opacity'\r\n | 'SpecularWeight'\r\n | 'AO';\r\n\r\nconst DEFAULT_OUTPUT_NAMES: readonly PBRBlueprintOutputName[] = [\r\n 'BaseColor',\r\n 'Metallic',\r\n 'Roughness',\r\n 'Specular',\r\n 'Emissive',\r\n 'Normal',\r\n 'Tangent',\r\n 'Opacity',\r\n 'SpecularWeight',\r\n 'AO'\r\n] as const;\r\n\r\n/**\r\n * Physically-based rendering material driven by blueprint graphs, but shaded by the\r\n * same PBR metallic/roughness backend used by {@link PBRMetallicRoughnessMaterial}.\r\n *\r\n * @remarks\r\n * The blueprint graph only produces surface inputs. Final direct/indirect lighting,\r\n * transmission, clearcoat, sheen, iridescence and anisotropic reflection still run\r\n * through the standard PBRM backend so imported GLTF materials and blueprint materials\r\n * stay on the same shading path.\r\n *\r\n * @public\r\n */\r\nexport class PBRBluePrintMaterial\r\n extends PBRMetallicRoughnessMaterial\r\n implements Clonable<PBRBluePrintMaterial>\r\n{\r\n /** @internal */\r\n private static readonly FEATURE_BLUEPRINT_VERTEX_COLOR = this.defineFeature();\r\n /** @internal */\r\n private static readonly FEATURE_BLUEPRINT_VERTEX_UV = this.defineFeature();\r\n /** @internal */\r\n private _irFrag: MaterialBlueprintIR;\r\n /** @internal */\r\n private _irVertex: MaterialBlueprintIR;\r\n /** @internal */\r\n private _uniformValues: BluePrintUniformValue[];\r\n /** @internal */\r\n private _uniformTextures: BluePrintUniformTexture[];\r\n /** @internal */\r\n private _connectedOutputs: Set<PBRBlueprintOutputName>;\r\n /** @internal */\r\n private _vertexUsesColor: boolean;\r\n /** @internal */\r\n private _vertexUsesUV: boolean;\r\n\r\n constructor(\r\n irFrag?: MaterialBlueprintIR,\r\n irVertex?: MaterialBlueprintIR,\r\n uniformValues?: BluePrintUniformValue[],\r\n uniformTextures?: BluePrintUniformTexture[]\r\n ) {\r\n super();\r\n this._irFrag =\r\n irFrag ??\r\n new MaterialBlueprintIR(\r\n {\r\n nodeMap: { '1': new PBRBlockNode() },\r\n roots: [1],\r\n order: [1],\r\n graph: { incoming: {}, outgoing: {} }\r\n },\r\n '',\r\n {\r\n nodes: [{ id: 1, title: '', locked: true, node: { ClassName: 'PBRBlockNode', Object: '' } }],\r\n links: []\r\n }\r\n );\r\n this._irVertex =\r\n irVertex ??\r\n new MaterialBlueprintIR(\r\n {\r\n nodeMap: { '1': new VertexBlockNode() },\r\n roots: [1],\r\n order: [1],\r\n graph: { incoming: {}, outgoing: {} }\r\n },\r\n '',\r\n {\r\n nodes: [{ id: 1, title: '', locked: true, node: { ClassName: 'VertexBlockNode', Object: '' } }],\r\n links: []\r\n }\r\n );\r\n this._uniformValues = uniformValues ?? [];\r\n this._uniformTextures = uniformTextures ?? [];\r\n this._connectedOutputs = new Set();\r\n this._vertexUsesColor = false;\r\n this._vertexUsesUV = false;\r\n this.syncBlueprintMetadata();\r\n }\r\n\r\n get fragmentIR() {\r\n return this._irFrag;\r\n }\r\n set fragmentIR(ir: MaterialBlueprintIR) {\r\n if (ir && ir !== this._irFrag) {\r\n this._irFrag = ir;\r\n this.syncBlueprintMetadata();\r\n this.clearCache();\r\n this.optionChanged(true);\r\n }\r\n }\r\n\r\n get vertexIR() {\r\n return this._irVertex;\r\n }\r\n set vertexIR(ir: MaterialBlueprintIR) {\r\n if (ir && ir !== this._irVertex) {\r\n this._irVertex = ir;\r\n this.syncBlueprintMetadata();\r\n this.clearCache();\r\n this.optionChanged(true);\r\n }\r\n }\r\n\r\n get uniformValues() {\r\n return this._uniformValues;\r\n }\r\n set uniformValues(val: BluePrintUniformValue[]) {\r\n this._uniformValues = (val ?? []).map((v) => ({ ...v }));\r\n this.uniformChanged();\r\n }\r\n\r\n get uniformTextures() {\r\n return this._uniformTextures;\r\n }\r\n set uniformTextures(val: BluePrintUniformTexture[]) {\r\n if (val !== this._uniformTextures) {\r\n const newUniforms = (val ?? []).map((v) => ({\r\n finalTexture: new DRef(v.finalTexture?.get() ?? null),\r\n finalSampler: v.finalSampler,\r\n inFragmentShader: v.inFragmentShader,\r\n inVertexShader: v.inVertexShader,\r\n magFilter: v.magFilter,\r\n minFilter: v.minFilter,\r\n mipFilter: v.mipFilter,\r\n name: v.name,\r\n params: v.params?.clone() ?? Vector4.zero(),\r\n sRGB: v.sRGB,\r\n texture: v.texture,\r\n type: v.type,\r\n wrapS: v.wrapS,\r\n wrapT: v.wrapT\r\n }));\r\n for (const u of this._uniformTextures) {\r\n u.finalTexture?.dispose();\r\n }\r\n this._uniformTextures = newUniforms;\r\n this.uniformChanged();\r\n }\r\n }\r\n\r\n hasConnectedOutput(name: PBRBlueprintOutputName) {\r\n return this._connectedOutputs.has(name);\r\n }\r\n\r\n clone() {\r\n const other = new PBRBluePrintMaterial(\r\n this._irFrag,\r\n this._irVertex,\r\n this._uniformValues,\r\n this._uniformTextures\r\n );\r\n other.copyFrom(this);\r\n return other;\r\n }\r\n\r\n copyFrom(other: this) {\r\n super.copyFrom(other);\r\n if (other instanceof PBRBluePrintMaterial) {\r\n this.fragmentIR = other.fragmentIR;\r\n this.vertexIR = other.vertexIR;\r\n this.uniformValues = other.uniformValues;\r\n this.uniformTextures = other.uniformTextures;\r\n }\r\n }\r\n\r\n vertexShader(scope: PBFunctionScope) {\r\n super.vertexShader(scope);\r\n const pb = scope.$builder;\r\n\r\n scope.zVertexColor = this.getBlueprintVertexColor(scope);\r\n scope.zVertexUV = this.getBlueprintVertexUV(scope);\r\n scope.zVertexNormal = (scope.$outputs.wNorm ?? pb.vec3(0, 0, 1)) as PBShaderExp;\r\n scope.zVertexTangent = (scope.$outputs.wTangent ?? pb.vec3(1, 0, 0)) as PBShaderExp;\r\n scope.zVertexBinormal = (scope.$outputs.wBinormal ?? pb.vec3(0, 1, 0)) as PBShaderExp;\r\n scope.zWorldPos = scope.$outputs.worldPos as PBShaderExp;\r\n if (this._vertexUsesColor && !scope.$outputs.zOutDiffuse) {\r\n scope.$outputs.zOutDiffuse = scope.zVertexColor;\r\n }\r\n if (this._vertexUsesUV) {\r\n scope.$outputs.zVertexUV = scope.zVertexUV;\r\n }\r\n\r\n for (const u of [...this._uniformValues, ...this._uniformTextures]) {\r\n if (u.inVertexShader) {\r\n // @ts-ignore dynamic shader type constructor\r\n pb.getGlobalScope()[u.name] = pb[u.type]().uniform(2);\r\n }\r\n }\r\n\r\n const outputs = this._irVertex.create(pb);\r\n if (!outputs) {\r\n return;\r\n }\r\n const vertexOut = this.toVertexOutputMap(outputs);\r\n const worldMatrix = ShaderHelper.getWorldMatrix(scope);\r\n\r\n if (vertexOut.Position) {\r\n scope.$l.oPos = vertexOut.Position as PBShaderExp;\r\n scope.$outputs.worldPos = pb.mul(worldMatrix, pb.vec4(scope.oPos, 1)).xyz;\r\n scope.zWorldPos = scope.$outputs.worldPos as PBShaderExp;\r\n scope.$l.csPos = pb.mul(\r\n ShaderHelper.getViewProjectionMatrix(scope),\r\n pb.vec4(scope.$outputs.worldPos, 1)\r\n );\r\n ShaderHelper.setClipSpacePosition(scope, scope.csPos);\r\n }\r\n if (vertexOut.Color) {\r\n scope.zVertexColor = this.toVec4(scope as unknown as PBInsideFunctionScope, vertexOut.Color, 1);\r\n if (scope.$outputs.zOutDiffuse) {\r\n scope.$outputs.zOutDiffuse = scope.zVertexColor;\r\n }\r\n }\r\n if (vertexOut.UV) {\r\n scope.zVertexUV = this.toVec2(scope as unknown as PBInsideFunctionScope, vertexOut.UV);\r\n if (this._vertexUsesUV) {\r\n scope.$outputs.zVertexUV = scope.zVertexUV;\r\n }\r\n }\r\n if (vertexOut.Normal) {\r\n scope.$l.oNorm = this.toVec3(scope as unknown as PBInsideFunctionScope, vertexOut.Normal);\r\n scope.$outputs.wNorm = pb.mul(ShaderHelper.getNormalMatrix(scope), pb.vec4(scope.oNorm, 0)).xyz;\r\n scope.zVertexNormal = scope.$outputs.wNorm as PBShaderExp;\r\n }\r\n if (vertexOut.Tangent) {\r\n const tangent = vertexOut.Tangent as PBShaderExp;\r\n scope.$l.oTangent =\r\n tangent.getTypeName() === 'vec4'\r\n ? tangent\r\n : pb.vec4(this.toVec3(scope as unknown as PBInsideFunctionScope, tangent), 1);\r\n scope.$outputs.wTangent = pb.mul(\r\n ShaderHelper.getNormalMatrix(scope),\r\n pb.vec4(scope.oTangent.xyz, 0)\r\n ).xyz;\r\n scope.$outputs.wBinormal = pb.mul(\r\n pb.cross(scope.$outputs.wNorm as PBShaderExp, scope.$outputs.wTangent as PBShaderExp),\r\n scope.oTangent.w\r\n );\r\n scope.zVertexTangent = scope.$outputs.wTangent as PBShaderExp;\r\n scope.zVertexBinormal = scope.$outputs.wBinormal as PBShaderExp;\r\n }\r\n for (const outputName of ['Output1', 'Output2', 'Output3', 'Output4']) {\r\n const output = outputs.find((output) => output.name === outputName)?.exp;\r\n if (output) {\r\n scope.$outputs[outputName] = output;\r\n }\r\n }\r\n }\r\n\r\n fragmentShader(scope: PBFunctionScope) {\r\n const pb = scope.$builder;\r\n if (this.needFragmentColorInput()) {\r\n for (const u of [...this._uniformValues, ...this._uniformTextures]) {\r\n if (u.inFragmentShader) {\r\n // @ts-ignore dynamic shader type constructor\r\n pb.getGlobalScope()[u.name] = pb[u.type]().uniform(2);\r\n }\r\n }\r\n scope.zVertexColor = scope.$inputs.zOutDiffuse ?? pb.vec4(1);\r\n scope.zVertexUV = scope.$inputs.zVertexUV ?? pb.vec2(0);\r\n scope.zVertexNormal = scope.$inputs.wNorm ?? pb.vec3(0, 0, 1);\r\n scope.zVertexTangent = scope.$inputs.wTangent ?? pb.vec3(1, 0, 0);\r\n scope.zVertexBinormal = scope.$inputs.wBinormal ?? pb.vec3(0, 1, 0);\r\n scope.zWorldPos = scope.$inputs.worldPos as PBShaderExp;\r\n }\r\n super.fragmentShader(scope);\r\n }\r\n\r\n applyUniformValues(bindGroup: BindGroup, ctx: DrawContext, pass: number) {\r\n super.applyUniformValues(bindGroup, ctx, pass);\r\n if (this.needFragmentColorInput(ctx)) {\r\n for (const u of this._uniformValues) {\r\n bindGroup.setValue(u.name, u.finalValue!);\r\n }\r\n for (const u of this._uniformTextures) {\r\n const texture = u.finalTexture?.get();\r\n if (texture) {\r\n bindGroup.setTexture(u.name, texture, u.finalSampler);\r\n }\r\n }\r\n }\r\n }\r\n\r\n protected createProgram(ctx: DrawContext, pass: number) {\r\n return super.createProgram(ctx, pass);\r\n }\r\n\r\n protected _createHash() {\r\n return `${super._createHash()}:${this._irFrag.hash}:${this._irVertex.hash}:${this._connectedOutputHash()}`;\r\n }\r\n\r\n protected onDispose() {\r\n super.onDispose();\r\n for (const u of this._uniformTextures) {\r\n u.finalTexture?.dispose();\r\n }\r\n }\r\n\r\n calculateAlbedoColor(scope: PBInsideFunctionScope, uv?: PBShaderExp) {\r\n const baseColor = this.getBlueprintOutput(scope, 'BaseColor');\r\n const opacity = this.getBlueprintOutput(scope, 'Opacity');\r\n if (baseColor !== undefined) {\r\n const pb = scope.$builder;\r\n return pb.vec4(this.toVec3(scope, baseColor), (opacity as PBShaderExp | number) ?? 1);\r\n }\r\n const albedo = super.calculateAlbedoColor(scope, uv);\r\n if (opacity !== undefined) {\r\n const pb = scope.$builder;\r\n return pb.vec4(albedo.rgb, opacity as PBShaderExp | number);\r\n }\r\n return albedo;\r\n }\r\n\r\n calculateMetallic(scope: PBInsideFunctionScope, albedo: PBShaderExp, normal: PBShaderExp) {\r\n const value = this.getBlueprintOutput(scope, 'Metallic');\r\n if (value !== undefined) {\r\n return this.toFloat(scope, value);\r\n }\r\n return super.calculateMetallic(scope, albedo, normal);\r\n }\r\n\r\n calculateRoughness(scope: PBInsideFunctionScope, albedo: PBShaderExp, normal: PBShaderExp) {\r\n const value = this.getBlueprintOutput(scope, 'Roughness');\r\n if (value !== undefined) {\r\n return this.toFloat(scope, value);\r\n }\r\n return super.calculateRoughness(scope, albedo, normal);\r\n }\r\n\r\n calculateSpecularFactor(scope: PBInsideFunctionScope, albedo: PBShaderExp, normal: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const base = super.calculateSpecularFactor(scope, albedo, normal);\r\n const specular = this.getBlueprintOutput(scope, 'Specular');\r\n const weight = this.getBlueprintOutput(scope, 'SpecularWeight');\r\n if (specular !== undefined || weight !== undefined) {\r\n return pb.vec4(\r\n specular !== undefined ? this.toVec3(scope, specular) : base.rgb,\r\n (weight as PBShaderExp | number | undefined) ?? base.a\r\n );\r\n }\r\n return base;\r\n }\r\n\r\n calculateEmissiveColor(scope: PBInsideFunctionScope) {\r\n const emissive = this.getBlueprintOutput(scope, 'Emissive');\r\n if (emissive !== undefined) {\r\n return this.toVec3(scope, emissive);\r\n }\r\n return super.calculateEmissiveColor(scope);\r\n }\r\n\r\n calculateNormalAndTBN(\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp,\r\n worldNormal?: PBShaderExp,\r\n worldTangent?: PBShaderExp,\r\n worldBinormal?: PBShaderExp\r\n ) {\r\n const outputNormal = this.getBlueprintOutput(scope, 'Normal');\r\n const outputTangent = this.getBlueprintOutput(scope, 'Tangent');\r\n if (outputNormal === undefined && outputTangent === undefined) {\r\n return super.calculateNormalAndTBN(scope, worldPos, worldNormal, worldTangent, worldBinormal);\r\n }\r\n const pb = scope.$builder;\r\n const NormalStruct = pb.defineStruct([pb.mat3('TBN'), pb.vec3('normal')]);\r\n const funcName = 'Z_calculateBlueprintNormalAndTBN';\r\n const that = this;\r\n pb.func(\r\n funcName,\r\n [\r\n pb.vec3('worldPos'),\r\n pb.vec3('worldNormal'),\r\n pb.vec3('worldTangent'),\r\n pb.vec3('worldBinormal'),\r\n pb.vec3('surfaceNormal'),\r\n pb.vec3('surfaceTangent')\r\n ],\r\n function () {\r\n this.$l.TBN = that.calculateTBN(\r\n this,\r\n this.worldPos,\r\n this.worldNormal,\r\n this.worldTangent,\r\n this.worldBinormal\r\n );\r\n this.$l.ng = this.TBN[2];\r\n this.$l.t = this.TBN[0];\r\n this.$l.b = this.TBN[1];\r\n this.$if(pb.greaterThan(pb.length(this.surfaceTangent), 0.0001), function () {\r\n this.$l.t_ = pb.normalize(this.surfaceTangent);\r\n this.t = pb.normalize(pb.sub(this.t_, pb.mul(this.ng, pb.dot(this.ng, this.t_))));\r\n this.b = pb.normalize(pb.cross(this.ng, this.t));\r\n });\r\n this.TBN = pb.mat3(this.t, this.b, this.ng);\r\n this.$l.surfaceNormalTS = this.surfaceNormal;\r\n this.$if(pb.lessThanEqual(pb.length(this.surfaceNormalTS), 0.0001), function () {\r\n this.surfaceNormalTS = pb.vec3(0, 0, 1);\r\n });\r\n this.$l.surfaceNormalWS = pb.normalize(pb.mul(this.TBN, this.surfaceNormalTS));\r\n this.$return(NormalStruct(this.TBN, this.surfaceNormalWS));\r\n }\r\n );\r\n return pb\r\n .getGlobalScope()\r\n [\r\n funcName\r\n ](worldPos, (worldNormal ?? scope.zVertexNormal) as PBShaderExp, (worldTangent ?? scope.zVertexTangent) as PBShaderExp, (worldBinormal ?? scope.zVertexBinormal) as PBShaderExp, outputNormal !== undefined ? this.toVec3(scope, outputNormal) : pb.vec3(0, 0, 1), outputTangent !== undefined ? this.toVec3(scope, outputTangent) : pb.vec3(0)) as PBShaderExp;\r\n }\r\n\r\n indirectLighting(\r\n scope: PBInsideFunctionScope,\r\n normal: PBShaderExp,\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 ao = this.getBlueprintOutput(scope, 'AO');\r\n if (ao === undefined) {\r\n super.indirectLighting(scope, normal, viewVec, commonData, outColor, outRoughness, outDiffuseColor);\r\n return;\r\n }\r\n const pb = scope.$builder;\r\n const funcName = `Z_applyBlueprintAO${outDiffuseColor ? '_D' : ''}`;\r\n pb.func(\r\n funcName,\r\n [\r\n pb.vec3('outColor').inout(),\r\n ...(outDiffuseColor ? [pb.vec3('outDiffuseColor').inout()] : []),\r\n pb.float('ao')\r\n ],\r\n function () {\r\n this.outColor = pb.mul(this.outColor, this.ao);\r\n if (outDiffuseColor) {\r\n this.outDiffuseColor = pb.mul(this.outDiffuseColor, this.ao);\r\n }\r\n }\r\n );\r\n super.indirectLighting(scope, normal, viewVec, commonData, outColor, outRoughness, outDiffuseColor);\r\n if (outDiffuseColor) {\r\n pb.getGlobalScope()[funcName](outColor, outDiffuseColor, ao as PBShaderExp | number);\r\n } else {\r\n pb.getGlobalScope()[funcName](outColor, ao as PBShaderExp | number);\r\n }\r\n }\r\n\r\n private syncBlueprintMetadata() {\r\n this._connectedOutputs = this.collectConnectedOutputs(this._irFrag, PBRBlockNode);\r\n const fragmentUsesColor = this._irFrag.behaviors.useVertexColor;\r\n const fragmentUsesUV = this._irFrag.behaviors.useVertexUV;\r\n const vertexUsesColor = this._irVertex.behaviors.useVertexColor;\r\n const vertexUsesUV = this._irVertex.behaviors.useVertexUV;\r\n this._vertexUsesColor = fragmentUsesColor || vertexUsesColor;\r\n this._vertexUsesUV = fragmentUsesUV || vertexUsesUV;\r\n this.useFeature(PBRBluePrintMaterial.FEATURE_BLUEPRINT_VERTEX_COLOR, this._vertexUsesColor);\r\n this.useFeature(PBRBluePrintMaterial.FEATURE_BLUEPRINT_VERTEX_UV, this._vertexUsesUV);\r\n }\r\n\r\n private collectConnectedOutputs<T extends IGraphNode>(\r\n ir: MaterialBlueprintIR,\r\n rootCtor: new (...args: any[]) => T\r\n ): Set<PBRBlueprintOutputName> {\r\n const outputs = new Set<PBRBlueprintOutputName>();\r\n for (const rootId of ir.DAG.roots) {\r\n const rootNode = ir.DAG.nodeMap[rootId];\r\n if (!(rootNode instanceof rootCtor)) {\r\n continue;\r\n }\r\n for (const input of rootNode.inputs) {\r\n if (input.inputNode) {\r\n outputs.add(input.name as PBRBlueprintOutputName);\r\n }\r\n }\r\n }\r\n return outputs;\r\n }\r\n\r\n private getBlueprintVertexColor(scope: PBFunctionScope): PBShaderExp {\r\n const pb = scope.$builder;\r\n if (this.vertexColor) {\r\n return this.getVertexColor(scope as unknown as PBInsideFunctionScope);\r\n }\r\n if (this._vertexUsesColor) {\r\n if (scope.$inputs.zDiffuse) {\r\n return scope.$inputs.zDiffuse as PBShaderExp;\r\n }\r\n if (scope.$getVertexAttrib('diffuse')) {\r\n return scope.$getVertexAttrib('diffuse') as PBShaderExp;\r\n }\r\n scope.$inputs.zDiffuse = pb.vec4().attrib('diffuse');\r\n return scope.$inputs.zDiffuse as PBShaderExp;\r\n }\r\n return pb.vec4(1);\r\n }\r\n\r\n private getBlueprintVertexUV(scope: PBFunctionScope): PBShaderExp {\r\n const pb = scope.$builder;\r\n if (this._vertexUsesUV) {\r\n if (scope.$inputs.zVertexUV) {\r\n return scope.$inputs.zVertexUV as PBShaderExp;\r\n }\r\n if (scope.$getVertexAttrib('texCoord0')) {\r\n return scope.$getVertexAttrib('texCoord0') as PBShaderExp;\r\n }\r\n scope.$inputs.zVertexUV = pb.vec2().attrib('texCoord0');\r\n return scope.$inputs.zVertexUV as PBShaderExp;\r\n }\r\n if (this.albedoTexture) {\r\n return (this.getAlbedoTexCoord(scope as unknown as PBInsideFunctionScope) ?? pb.vec2(0)) as PBShaderExp;\r\n }\r\n return pb.vec2(0);\r\n }\r\n\r\n private getBlueprintOutput(\r\n scope: PBInsideFunctionScope,\r\n name: PBRBlueprintOutputName\r\n ): number | boolean | PBShaderExp | undefined {\r\n if (!this._connectedOutputs.has(name)) {\r\n return undefined;\r\n }\r\n return this.getBlueprintOutputMap(scope)[name];\r\n }\r\n\r\n private getBlueprintOutputMap(scope: PBInsideFunctionScope): BlueprintOutputMap {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_GetPBRBlueprintOutputs';\r\n const that = this;\r\n const outputsStruct = pb.defineStruct(\r\n DEFAULT_OUTPUT_NAMES.map((name) => {\r\n switch (name) {\r\n case 'BaseColor':\r\n return pb.vec3(name);\r\n case 'Specular':\r\n case 'Emissive':\r\n case 'Normal':\r\n case 'Tangent':\r\n return pb.vec3(name);\r\n default:\r\n return pb.float(name);\r\n }\r\n })\r\n );\r\n if (!pb.getGlobalScope()[funcName]) {\r\n pb.func(\r\n funcName,\r\n [\r\n pb.vec3('worldPos'),\r\n pb.vec4('vertexColor'),\r\n pb.vec2('vertexUV'),\r\n pb.vec3('vertexNormal'),\r\n pb.vec3('vertexTangent'),\r\n pb.vec3('vertexBinormal')\r\n ],\r\n function () {\r\n this.zWorldPos = this.worldPos;\r\n this.zVertexColor = this.vertexColor;\r\n this.zVertexUV = this.vertexUV;\r\n this.zVertexNormal = this.vertexNormal;\r\n this.zVertexTangent = this.vertexTangent;\r\n this.zVertexBinormal = this.vertexBinormal;\r\n const outputs = that._irFrag.create(pb);\r\n let baseColor: number | PBShaderExp = pb.vec3(1);\r\n let metallic: number | PBShaderExp = 0;\r\n let roughness: number | PBShaderExp = 1;\r\n let specular: number | PBShaderExp = pb.vec3(1);\r\n let emissive: number | PBShaderExp = pb.vec3(0);\r\n let normal: number | PBShaderExp = pb.vec3(0);\r\n let tangent: number | PBShaderExp = pb.vec3(0);\r\n let opacity: number | PBShaderExp = 1;\r\n let specularWeight: number | PBShaderExp = 1;\r\n let ao: number | PBShaderExp = 1;\r\n if (outputs) {\r\n const map = that.toOutputMap(outputs);\r\n if (map.BaseColor !== undefined) {\r\n baseColor = that.toVec3(scope, map.BaseColor);\r\n }\r\n if (map.Metallic !== undefined) {\r\n metallic = map.Metallic as PBShaderExp | number;\r\n }\r\n if (map.Roughness !== undefined) {\r\n roughness = map.Roughness as PBShaderExp | number;\r\n }\r\n if (map.Specular !== undefined) {\r\n specular = that.toVec3(scope, map.Specular);\r\n }\r\n if (map.Emissive !== undefined) {\r\n emissive = that.toVec3(scope, map.Emissive);\r\n }\r\n if (map.Normal !== undefined) {\r\n normal = that.toVec3(scope, map.Normal);\r\n }\r\n if (map.Tangent !== undefined) {\r\n tangent = that.toVec3(scope, map.Tangent);\r\n }\r\n if (map.Opacity !== undefined) {\r\n opacity = map.Opacity as PBShaderExp | number;\r\n }\r\n if (map.SpecularWeight !== undefined) {\r\n specularWeight = map.SpecularWeight as PBShaderExp | number;\r\n }\r\n if (map.AO !== undefined) {\r\n ao = map.AO as PBShaderExp | number;\r\n }\r\n }\r\n this.$return(\r\n outputsStruct(\r\n baseColor,\r\n metallic,\r\n roughness,\r\n specular,\r\n emissive,\r\n normal,\r\n tangent,\r\n opacity,\r\n specularWeight,\r\n ao\r\n )\r\n );\r\n }\r\n );\r\n }\r\n const result = pb\r\n .getGlobalScope()\r\n [\r\n funcName\r\n ](this.getBlueprintWorldPos(scope), this.getBlueprintFragmentVertexColor(scope), this.getBlueprintFragmentVertexUV(scope), this.getBlueprintFragmentVertexNormal(scope), this.getBlueprintFragmentVertexTangent(scope), this.getBlueprintFragmentVertexBinormal(scope)) as PBShaderExp;\r\n const map: BlueprintOutputMap = {};\r\n for (const name of DEFAULT_OUTPUT_NAMES) {\r\n map[name] = result[name] as PBShaderExp;\r\n }\r\n return map;\r\n }\r\n\r\n private getBlueprintWorldPos(scope: PBInsideFunctionScope): PBShaderExp {\r\n const pb = scope.$builder;\r\n return (scope.$inputs.worldPos ?? scope.zWorldPos ?? pb.vec3(0)) as PBShaderExp;\r\n }\r\n\r\n private getBlueprintFragmentVertexColor(scope: PBInsideFunctionScope): PBShaderExp {\r\n const pb = scope.$builder;\r\n return (scope.$inputs.zOutDiffuse ?? scope.zVertexColor ?? pb.vec4(1)) as PBShaderExp;\r\n }\r\n\r\n private getBlueprintFragmentVertexUV(scope: PBInsideFunctionScope): PBShaderExp {\r\n const pb = scope.$builder;\r\n return (scope.$inputs.zVertexUV ?? scope.zVertexUV ?? pb.vec2(0)) as PBShaderExp;\r\n }\r\n\r\n private getBlueprintFragmentVertexNormal(scope: PBInsideFunctionScope): PBShaderExp {\r\n const pb = scope.$builder;\r\n return (scope.$inputs.wNorm ?? scope.zVertexNormal ?? pb.vec3(0, 0, 1)) as PBShaderExp;\r\n }\r\n\r\n private getBlueprintFragmentVertexTangent(scope: PBInsideFunctionScope): PBShaderExp {\r\n const pb = scope.$builder;\r\n return (scope.$inputs.wTangent ?? scope.zVertexTangent ?? pb.vec3(1, 0, 0)) as PBShaderExp;\r\n }\r\n\r\n private getBlueprintFragmentVertexBinormal(scope: PBInsideFunctionScope): PBShaderExp {\r\n const pb = scope.$builder;\r\n return (scope.$inputs.wBinormal ?? scope.zVertexBinormal ?? pb.vec3(0, 1, 0)) as PBShaderExp;\r\n }\r\n\r\n private toOutputMap(\r\n outputs: {\r\n name: string;\r\n exp: number | boolean | PBShaderExp;\r\n }[]\r\n ): BlueprintOutputMap {\r\n const map: BlueprintOutputMap = {};\r\n for (const output of outputs) {\r\n map[output.name as PBRBlueprintOutputName] = output.exp;\r\n }\r\n return map;\r\n }\r\n\r\n private toVertexOutputMap(\r\n outputs: {\r\n name: string;\r\n exp: number | boolean | PBShaderExp;\r\n }[]\r\n ): VertexBlueprintOutputMap {\r\n const map: VertexBlueprintOutputMap = {};\r\n for (const output of outputs) {\r\n map[output.name as VertexBlueprintOutputName] = output.exp;\r\n }\r\n return map;\r\n }\r\n\r\n private toFloat(scope: PBInsideFunctionScope, value: number | boolean | PBShaderExp): PBShaderExp {\r\n const pb = scope.$builder;\r\n if (typeof value === 'number') {\r\n return pb.float(value);\r\n }\r\n const exp = value as PBShaderExp;\r\n return exp.getTypeName() === 'float' ? exp : exp.x;\r\n }\r\n\r\n private toVec2(scope: PBInsideFunctionScope, value: number | boolean | PBShaderExp): PBShaderExp {\r\n const pb = scope.$builder;\r\n if (typeof value === 'number') {\r\n return pb.vec2(value);\r\n }\r\n const exp = value as PBShaderExp;\r\n const type = exp.getTypeName();\r\n if (type === 'float') {\r\n return pb.vec2(exp);\r\n }\r\n if (type === 'vec3' || type === 'vec4') {\r\n return exp.xy;\r\n }\r\n return exp;\r\n }\r\n\r\n private toVec3(scope: PBInsideFunctionScope, value: number | boolean | PBShaderExp): PBShaderExp {\r\n const pb = scope.$builder;\r\n if (typeof value === 'number') {\r\n return pb.vec3(value);\r\n }\r\n const exp = value as PBShaderExp;\r\n const type = exp.getTypeName();\r\n if (type === 'float') {\r\n return pb.vec3(exp);\r\n }\r\n if (type === 'vec2') {\r\n return pb.vec3(exp, 0);\r\n }\r\n if (type === 'vec4') {\r\n return exp.xyz;\r\n }\r\n return exp;\r\n }\r\n\r\n private toVec4(\r\n scope: PBInsideFunctionScope,\r\n value: number | boolean | PBShaderExp,\r\n alpha: number | PBShaderExp\r\n ): PBShaderExp {\r\n const pb = scope.$builder;\r\n if (typeof value === 'number') {\r\n return pb.vec4(value, value, value, alpha);\r\n }\r\n const exp = value as PBShaderExp;\r\n const type = exp.getTypeName();\r\n if (type === 'float') {\r\n return pb.vec4(pb.vec3(exp), alpha);\r\n }\r\n if (type === 'vec2') {\r\n return pb.vec4(exp, 0, alpha);\r\n }\r\n if (type === 'vec3') {\r\n return pb.vec4(exp, alpha);\r\n }\r\n return exp;\r\n }\r\n\r\n private _connectedOutputHash() {\r\n return DEFAULT_OUTPUT_NAMES.map((name) => (this._connectedOutputs.has(name) ? '1' : '0')).join('');\r\n }\r\n}\r\n"],"names":["DEFAULT_OUTPUT_NAMES","PBRBluePrintMaterial","PBRMetallicRoughnessMaterial","FEATURE_BLUEPRINT_VERTEX_COLOR","defineFeature","FEATURE_BLUEPRINT_VERTEX_UV","irFrag","irVertex","uniformValues","uniformTextures","_irFrag","MaterialBlueprintIR","nodeMap","PBRBlockNode","roots","order","graph","incoming","outgoing","nodes","id","title","locked","node","ClassName","Object","links","_irVertex","VertexBlockNode","_uniformValues","_uniformTextures","_connectedOutputs","Set","_vertexUsesColor","_vertexUsesUV","syncBlueprintMetadata","fragmentIR","ir","clearCache","optionChanged","vertexIR","val","map","v","uniformChanged","newUniforms","finalTexture","DRef","get","finalSampler","inFragmentShader","inVertexShader","magFilter","minFilter","mipFilter","name","params","clone","Vector4","zero","sRGB","texture","type","wrapS","wrapT","u","dispose","hasConnectedOutput","has","other","copyFrom","vertexShader","scope","pb","$builder","zVertexColor","getBlueprintVertexColor","zVertexUV","getBlueprintVertexUV","zVertexNormal","$outputs","wNorm","vec3","zVertexTangent","wTangent","zVertexBinormal","wBinormal","zWorldPos","worldPos","zOutDiffuse","getGlobalScope","uniform","outputs","create","vertexOut","toVertexOutputMap","worldMatrix","ShaderHelper","getWorldMatrix","Position","$l","oPos","mul","vec4","xyz","csPos","getViewProjectionMatrix","setClipSpacePosition","Color","toVec4","UV","toVec2","Normal","oNorm","toVec3","getNormalMatrix","Tangent","tangent","oTangent","getTypeName","cross","w","outputName","output","find","exp","fragmentShader","needFragmentColorInput","$inputs","vec2","applyUniformValues","bindGroup","ctx","pass","setValue","finalValue","setTexture","createProgram","_createHash","hash","_connectedOutputHash","onDispose","calculateAlbedoColor","uv","baseColor","getBlueprintOutput","opacity","undefined","albedo","rgb","calculateMetallic","normal","value","toFloat","calculateRoughness","calculateSpecularFactor","base","specular","weight","a","calculateEmissiveColor","emissive","calculateNormalAndTBN","worldNormal","worldTangent","worldBinormal","outputNormal","outputTangent","NormalStruct","defineStruct","mat3","funcName","that","func","TBN","calculateTBN","ng","t","b","$if","greaterThan","length","surfaceTangent","t_","normalize","sub","dot","surfaceNormalTS","surfaceNormal","lessThanEqual","surfaceNormalWS","$return","indirectLighting","viewVec","commonData","outColor","outRoughness","outDiffuseColor","ao","inout","float","collectConnectedOutputs","fragmentUsesColor","behaviors","useVertexColor","fragmentUsesUV","useVertexUV","vertexUsesColor","vertexUsesUV","useFeature","rootCtor","rootId","DAG","rootNode","input","inputs","inputNode","add","vertexColor","getVertexColor","zDiffuse","$getVertexAttrib","attrib","albedoTexture","getAlbedoTexCoord","getBlueprintOutputMap","outputsStruct","vertexUV","vertexNormal","vertexTangent","vertexBinormal","metallic","roughness","specularWeight","toOutputMap","BaseColor","Metallic","Roughness","Specular","Emissive","Opacity","SpecularWeight","AO","result","getBlueprintWorldPos","getBlueprintFragmentVertexColor","getBlueprintFragmentVertexUV","getBlueprintFragmentVertexNormal","getBlueprintFragmentVertexTangent","getBlueprintFragmentVertexBinormal","x","xy","alpha","join"],"mappings":"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"}
1
+ {"version":3,"file":"pbrblueprint.js","sources":["../../src/material/pbrblueprint.ts"],"sourcesContent":["import type { BindGroup, PBFunctionScope, PBInsideFunctionScope, PBShaderExp } from '@zephyr3d/device';\r\nimport { DRef, Vector4, type Clonable } from '@zephyr3d/base';\r\nimport { ShaderHelper } from './shader/helper';\r\nimport type { BluePrintUniformTexture, BluePrintUniformValue } from '../utility/blueprint/material/ir';\r\nimport { MaterialBlueprintIR } from '../utility/blueprint/material/ir';\r\nimport type { IGraphNode } from '../utility/blueprint/node';\r\nimport { PBRBlockNode, VertexBlockNode } from '../utility/blueprint/material/pbr';\r\nimport { PBRMetallicRoughnessMaterial } from './pbrmr';\r\nimport type { DrawContext } from '../render/drawable';\r\n\r\ntype BlueprintOutputMap = Partial<Record<PBRBlueprintOutputName, number | boolean | PBShaderExp>>;\r\ntype VertexBlueprintOutputName = 'Position' | 'Normal' | 'Tangent' | 'Color' | 'UV';\r\ntype VertexBlueprintOutputMap = Partial<Record<VertexBlueprintOutputName, number | boolean | PBShaderExp>>;\r\n\r\n/**\r\n * Physically-based rendering material driven by blueprint graphs, but shaded by the\r\n * @public\r\n */\r\nexport type PBRBlueprintOutputName =\r\n | 'BaseColor'\r\n | 'Metallic'\r\n | 'Roughness'\r\n | 'Specular'\r\n | 'Emissive'\r\n | 'Normal'\r\n | 'Tangent'\r\n | 'Opacity'\r\n | 'SpecularWeight'\r\n | 'AO';\r\n\r\nconst DEFAULT_OUTPUT_NAMES: readonly PBRBlueprintOutputName[] = [\r\n 'BaseColor',\r\n 'Metallic',\r\n 'Roughness',\r\n 'Specular',\r\n 'Emissive',\r\n 'Normal',\r\n 'Tangent',\r\n 'Opacity',\r\n 'SpecularWeight',\r\n 'AO'\r\n] as const;\r\n\r\n/**\r\n * Physically-based rendering material driven by blueprint graphs, but shaded by the\r\n * same PBR metallic/roughness backend used by {@link PBRMetallicRoughnessMaterial}.\r\n *\r\n * @remarks\r\n * The blueprint graph only produces surface inputs. Final direct/indirect lighting,\r\n * transmission, clearcoat, sheen, iridescence and anisotropic reflection still run\r\n * through the standard PBRM backend so imported GLTF materials and blueprint materials\r\n * stay on the same shading path.\r\n *\r\n * @public\r\n */\r\nexport class PBRBluePrintMaterial\r\n extends PBRMetallicRoughnessMaterial\r\n implements Clonable<PBRBluePrintMaterial>\r\n{\r\n /** @internal */\r\n private static readonly FEATURE_BLUEPRINT_VERTEX_COLOR = this.defineFeature();\r\n /** @internal */\r\n private static readonly FEATURE_BLUEPRINT_VERTEX_UV = this.defineFeature();\r\n /** @internal */\r\n private _irFrag: MaterialBlueprintIR;\r\n /** @internal */\r\n private _irVertex: MaterialBlueprintIR;\r\n /** @internal */\r\n private _uniformValues: BluePrintUniformValue[];\r\n /** @internal */\r\n private _uniformTextures: BluePrintUniformTexture[];\r\n /** @internal */\r\n private _connectedOutputs: Set<PBRBlueprintOutputName>;\r\n /** @internal */\r\n private _vertexUsesColor: boolean;\r\n /** @internal */\r\n private _vertexUsesUV: boolean;\r\n\r\n constructor(\r\n irFrag?: MaterialBlueprintIR,\r\n irVertex?: MaterialBlueprintIR,\r\n uniformValues?: BluePrintUniformValue[],\r\n uniformTextures?: BluePrintUniformTexture[]\r\n ) {\r\n super();\r\n this._irFrag =\r\n irFrag ??\r\n new MaterialBlueprintIR(\r\n {\r\n nodeMap: { '1': new PBRBlockNode() },\r\n roots: [1],\r\n order: [1],\r\n graph: { incoming: {}, outgoing: {} }\r\n },\r\n '',\r\n {\r\n nodes: [{ id: 1, title: '', locked: true, node: { ClassName: 'PBRBlockNode', Object: '' } }],\r\n links: []\r\n }\r\n );\r\n this._irVertex =\r\n irVertex ??\r\n new MaterialBlueprintIR(\r\n {\r\n nodeMap: { '1': new VertexBlockNode() },\r\n roots: [1],\r\n order: [1],\r\n graph: { incoming: {}, outgoing: {} }\r\n },\r\n '',\r\n {\r\n nodes: [{ id: 1, title: '', locked: true, node: { ClassName: 'VertexBlockNode', Object: '' } }],\r\n links: []\r\n }\r\n );\r\n this._uniformValues = uniformValues ?? [];\r\n this._uniformTextures = uniformTextures ?? [];\r\n this._connectedOutputs = new Set();\r\n this._vertexUsesColor = false;\r\n this._vertexUsesUV = false;\r\n this.syncBlueprintMetadata();\r\n }\r\n\r\n get fragmentIR() {\r\n return this._irFrag;\r\n }\r\n set fragmentIR(ir: MaterialBlueprintIR) {\r\n if (ir && ir !== this._irFrag) {\r\n this._irFrag = ir;\r\n this.syncBlueprintMetadata();\r\n this.clearCache();\r\n this.optionChanged(true);\r\n }\r\n }\r\n\r\n get vertexIR() {\r\n return this._irVertex;\r\n }\r\n set vertexIR(ir: MaterialBlueprintIR) {\r\n if (ir && ir !== this._irVertex) {\r\n this._irVertex = ir;\r\n this.syncBlueprintMetadata();\r\n this.clearCache();\r\n this.optionChanged(true);\r\n }\r\n }\r\n\r\n get uniformValues() {\r\n return this._uniformValues;\r\n }\r\n set uniformValues(val: BluePrintUniformValue[]) {\r\n this._uniformValues = (val ?? []).map((v) => ({ ...v }));\r\n this.uniformChanged();\r\n }\r\n\r\n get uniformTextures() {\r\n return this._uniformTextures;\r\n }\r\n set uniformTextures(val: BluePrintUniformTexture[]) {\r\n if (val !== this._uniformTextures) {\r\n const newUniforms = (val ?? []).map((v) => ({\r\n finalTexture: new DRef(v.finalTexture?.get() ?? null),\r\n finalSampler: v.finalSampler,\r\n inFragmentShader: v.inFragmentShader,\r\n inVertexShader: v.inVertexShader,\r\n magFilter: v.magFilter,\r\n minFilter: v.minFilter,\r\n mipFilter: v.mipFilter,\r\n name: v.name,\r\n params: v.params?.clone() ?? Vector4.zero(),\r\n sRGB: v.sRGB,\r\n texture: v.texture,\r\n type: v.type,\r\n wrapS: v.wrapS,\r\n wrapT: v.wrapT\r\n }));\r\n for (const u of this._uniformTextures) {\r\n u.finalTexture?.dispose();\r\n }\r\n this._uniformTextures = newUniforms;\r\n this.uniformChanged();\r\n }\r\n }\r\n\r\n hasConnectedOutput(name: PBRBlueprintOutputName) {\r\n return this._connectedOutputs.has(name);\r\n }\r\n\r\n clone() {\r\n const other = new PBRBluePrintMaterial(\r\n this._irFrag,\r\n this._irVertex,\r\n this._uniformValues,\r\n this._uniformTextures\r\n );\r\n other.copyFrom(this);\r\n return other;\r\n }\r\n\r\n copyFrom(other: this) {\r\n super.copyFrom(other);\r\n if (other instanceof PBRBluePrintMaterial) {\r\n this.fragmentIR = other.fragmentIR;\r\n this.vertexIR = other.vertexIR;\r\n this.uniformValues = other.uniformValues;\r\n this.uniformTextures = other.uniformTextures;\r\n }\r\n }\r\n\r\n vertexShader(scope: PBFunctionScope) {\r\n super.vertexShader(scope);\r\n const pb = scope.$builder;\r\n\r\n scope.zVertexColor = this.getBlueprintVertexColor(scope);\r\n scope.zVertexUV = this.getBlueprintVertexUV(scope);\r\n scope.zVertexNormal = (scope.$outputs.wNorm ?? pb.vec3(0, 0, 1)) as PBShaderExp;\r\n scope.zVertexTangent = (scope.$outputs.wTangent ?? pb.vec3(1, 0, 0)) as PBShaderExp;\r\n scope.zVertexBinormal = (scope.$outputs.wBinormal ?? pb.vec3(0, 1, 0)) as PBShaderExp;\r\n scope.zWorldPos = scope.$outputs.worldPos as PBShaderExp;\r\n if (this._vertexUsesColor && !scope.$outputs.zOutDiffuse) {\r\n scope.$outputs.zOutDiffuse = scope.zVertexColor;\r\n }\r\n if (this._vertexUsesUV) {\r\n scope.$outputs.zVertexUV = scope.zVertexUV;\r\n }\r\n\r\n for (const u of [...this._uniformValues, ...this._uniformTextures]) {\r\n if (u.inVertexShader) {\r\n // @ts-ignore dynamic shader type constructor\r\n pb.getGlobalScope()[u.name] = pb[u.type]().uniform(2);\r\n }\r\n }\r\n\r\n const outputs = this._irVertex.create(pb);\r\n if (!outputs) {\r\n return;\r\n }\r\n const vertexOut = this.toVertexOutputMap(outputs);\r\n const worldMatrix = ShaderHelper.getWorldMatrix(scope);\r\n\r\n if (vertexOut.Position) {\r\n scope.$l.oPos = vertexOut.Position as PBShaderExp;\r\n scope.$outputs.worldPos = pb.mul(worldMatrix, pb.vec4(scope.oPos, 1)).xyz;\r\n scope.zWorldPos = scope.$outputs.worldPos as PBShaderExp;\r\n scope.$l.csPos = pb.mul(\r\n ShaderHelper.getViewProjectionMatrix(scope),\r\n pb.vec4(scope.$outputs.worldPos, 1)\r\n );\r\n ShaderHelper.setClipSpacePosition(scope, scope.csPos);\r\n }\r\n if (vertexOut.Color) {\r\n scope.zVertexColor = this.toVec4(scope as unknown as PBInsideFunctionScope, vertexOut.Color, 1);\r\n if (scope.$outputs.zOutDiffuse) {\r\n scope.$outputs.zOutDiffuse = scope.zVertexColor;\r\n }\r\n }\r\n if (vertexOut.UV) {\r\n scope.zVertexUV = this.toVec2(scope as unknown as PBInsideFunctionScope, vertexOut.UV);\r\n if (this._vertexUsesUV) {\r\n scope.$outputs.zVertexUV = scope.zVertexUV;\r\n }\r\n }\r\n if (vertexOut.Normal) {\r\n scope.$l.oNorm = this.toVec3(scope as unknown as PBInsideFunctionScope, vertexOut.Normal);\r\n scope.$outputs.wNorm = pb.mul(ShaderHelper.getNormalMatrix(scope), pb.vec4(scope.oNorm, 0)).xyz;\r\n scope.zVertexNormal = scope.$outputs.wNorm as PBShaderExp;\r\n }\r\n if (vertexOut.Tangent) {\r\n const tangent = vertexOut.Tangent as PBShaderExp;\r\n scope.$l.oTangent =\r\n tangent.getTypeName() === 'vec4'\r\n ? tangent\r\n : pb.vec4(this.toVec3(scope as unknown as PBInsideFunctionScope, tangent), 1);\r\n scope.$outputs.wTangent = pb.mul(\r\n ShaderHelper.getNormalMatrix(scope),\r\n pb.vec4(scope.oTangent.xyz, 0)\r\n ).xyz;\r\n scope.$outputs.wBinormal = pb.mul(\r\n pb.cross(scope.$outputs.wNorm as PBShaderExp, scope.$outputs.wTangent as PBShaderExp),\r\n scope.oTangent.w\r\n );\r\n scope.zVertexTangent = scope.$outputs.wTangent as PBShaderExp;\r\n scope.zVertexBinormal = scope.$outputs.wBinormal as PBShaderExp;\r\n }\r\n for (const outputName of ['Output1', 'Output2', 'Output3', 'Output4']) {\r\n const output = outputs.find((output) => output.name === outputName)?.exp;\r\n if (output) {\r\n scope.$outputs[outputName] = output;\r\n }\r\n }\r\n }\r\n\r\n fragmentShader(scope: PBFunctionScope) {\r\n const pb = scope.$builder;\r\n if (this.needFragmentColorInput()) {\r\n for (const u of [...this._uniformValues, ...this._uniformTextures]) {\r\n if (u.inFragmentShader) {\r\n // @ts-ignore dynamic shader type constructor\r\n pb.getGlobalScope()[u.name] = pb[u.type]().uniform(2);\r\n }\r\n }\r\n scope.zVertexColor = scope.$inputs.zOutDiffuse ?? pb.vec4(1);\r\n scope.zVertexUV = scope.$inputs.zVertexUV ?? pb.vec2(0);\r\n scope.zVertexNormal = scope.$inputs.wNorm ?? pb.vec3(0, 0, 1);\r\n scope.zVertexTangent = scope.$inputs.wTangent ?? pb.vec3(1, 0, 0);\r\n scope.zVertexBinormal = scope.$inputs.wBinormal ?? pb.vec3(0, 1, 0);\r\n scope.zWorldPos = scope.$inputs.worldPos as PBShaderExp;\r\n }\r\n super.fragmentShader(scope);\r\n }\r\n\r\n applyUniformValues(bindGroup: BindGroup, ctx: DrawContext, pass: number) {\r\n super.applyUniformValues(bindGroup, ctx, pass);\r\n if (this.needFragmentColorInput(ctx)) {\r\n for (const u of this._uniformValues) {\r\n bindGroup.setValue(u.name, u.finalValue!);\r\n }\r\n for (const u of this._uniformTextures) {\r\n const texture = u.finalTexture?.get();\r\n if (texture) {\r\n bindGroup.setTexture(u.name, texture, u.finalSampler);\r\n }\r\n }\r\n }\r\n }\r\n\r\n protected createProgram(ctx: DrawContext, pass: number) {\r\n return super.createProgram(ctx, pass);\r\n }\r\n\r\n protected _createHash() {\r\n return `${super._createHash()}:${this._irFrag.hash}:${this._irVertex.hash}:${this._connectedOutputHash()}`;\r\n }\r\n\r\n protected onDispose() {\r\n super.onDispose();\r\n for (const u of this._uniformTextures) {\r\n u.finalTexture?.dispose();\r\n }\r\n }\r\n\r\n calculateAlbedoColor(scope: PBInsideFunctionScope, uv?: PBShaderExp) {\r\n const baseColor = this.getBlueprintOutput(scope, 'BaseColor');\r\n const opacity = this.getBlueprintOutput(scope, 'Opacity');\r\n if (baseColor !== undefined) {\r\n const pb = scope.$builder;\r\n return pb.vec4(this.toVec3(scope, baseColor), (opacity as PBShaderExp | number) ?? 1);\r\n }\r\n const albedo = super.calculateAlbedoColor(scope, uv);\r\n if (opacity !== undefined) {\r\n const pb = scope.$builder;\r\n return pb.vec4(albedo.rgb, opacity as PBShaderExp | number);\r\n }\r\n return albedo;\r\n }\r\n\r\n calculateMetallic(scope: PBInsideFunctionScope, albedo: PBShaderExp, normal: PBShaderExp) {\r\n const value = this.getBlueprintOutput(scope, 'Metallic');\r\n if (value !== undefined) {\r\n return this.toFloat(scope, value);\r\n }\r\n return super.calculateMetallic(scope, albedo, normal);\r\n }\r\n\r\n calculateRoughness(scope: PBInsideFunctionScope, albedo: PBShaderExp, normal: PBShaderExp) {\r\n const value = this.getBlueprintOutput(scope, 'Roughness');\r\n if (value !== undefined) {\r\n return this.toFloat(scope, value);\r\n }\r\n return super.calculateRoughness(scope, albedo, normal);\r\n }\r\n\r\n calculateSpecularFactor(scope: PBInsideFunctionScope, albedo: PBShaderExp, normal: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const base = super.calculateSpecularFactor(scope, albedo, normal);\r\n const specular = this.getBlueprintOutput(scope, 'Specular');\r\n const weight = this.getBlueprintOutput(scope, 'SpecularWeight');\r\n if (specular !== undefined || weight !== undefined) {\r\n return pb.vec4(\r\n specular !== undefined ? this.toVec3(scope, specular) : base.rgb,\r\n (weight as PBShaderExp | number | undefined) ?? base.a\r\n );\r\n }\r\n return base;\r\n }\r\n\r\n calculateEmissiveColor(scope: PBInsideFunctionScope) {\r\n const emissive = this.getBlueprintOutput(scope, 'Emissive');\r\n if (emissive !== undefined) {\r\n // This bypasses the base implementation, so it has to apply the camera pre-exposure itself.\r\n // A blueprint has no per-material exposure weight, so the emitter always follows exposure.\r\n // The graph output replaces emissiveColor * emissiveLuminance outright, so under physical\r\n // lighting it is a cd/m² luminance: emit hundreds to thousands, not the [0,1] of legacy.\r\n return scope.$builder.mul(\r\n this.toVec3(scope, emissive),\r\n ShaderHelper.getPreExposureUniform(scope)\r\n ) as PBShaderExp;\r\n }\r\n return super.calculateEmissiveColor(scope);\r\n }\r\n\r\n calculateNormalAndTBN(\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp,\r\n worldNormal?: PBShaderExp,\r\n worldTangent?: PBShaderExp,\r\n worldBinormal?: PBShaderExp\r\n ) {\r\n const outputNormal = this.getBlueprintOutput(scope, 'Normal');\r\n const outputTangent = this.getBlueprintOutput(scope, 'Tangent');\r\n if (outputNormal === undefined && outputTangent === undefined) {\r\n return super.calculateNormalAndTBN(scope, worldPos, worldNormal, worldTangent, worldBinormal);\r\n }\r\n const pb = scope.$builder;\r\n const NormalStruct = pb.defineStruct([pb.mat3('TBN'), pb.vec3('normal')]);\r\n const funcName = 'Z_calculateBlueprintNormalAndTBN';\r\n const that = this;\r\n pb.func(\r\n funcName,\r\n [\r\n pb.vec3('worldPos'),\r\n pb.vec3('worldNormal'),\r\n pb.vec3('worldTangent'),\r\n pb.vec3('worldBinormal'),\r\n pb.vec3('surfaceNormal'),\r\n pb.vec3('surfaceTangent')\r\n ],\r\n function () {\r\n this.$l.TBN = that.calculateTBN(\r\n this,\r\n this.worldPos,\r\n this.worldNormal,\r\n this.worldTangent,\r\n this.worldBinormal\r\n );\r\n this.$l.ng = this.TBN[2];\r\n this.$l.t = this.TBN[0];\r\n this.$l.b = this.TBN[1];\r\n this.$if(pb.greaterThan(pb.length(this.surfaceTangent), 0.0001), function () {\r\n this.$l.t_ = pb.normalize(this.surfaceTangent);\r\n this.t = pb.normalize(pb.sub(this.t_, pb.mul(this.ng, pb.dot(this.ng, this.t_))));\r\n this.b = pb.normalize(pb.cross(this.ng, this.t));\r\n });\r\n this.TBN = pb.mat3(this.t, this.b, this.ng);\r\n this.$l.surfaceNormalTS = this.surfaceNormal;\r\n this.$if(pb.lessThanEqual(pb.length(this.surfaceNormalTS), 0.0001), function () {\r\n this.surfaceNormalTS = pb.vec3(0, 0, 1);\r\n });\r\n this.$l.surfaceNormalWS = pb.normalize(pb.mul(this.TBN, this.surfaceNormalTS));\r\n this.$return(NormalStruct(this.TBN, this.surfaceNormalWS));\r\n }\r\n );\r\n return pb\r\n .getGlobalScope()\r\n [\r\n funcName\r\n ](worldPos, (worldNormal ?? scope.zVertexNormal) as PBShaderExp, (worldTangent ?? scope.zVertexTangent) as PBShaderExp, (worldBinormal ?? scope.zVertexBinormal) as PBShaderExp, outputNormal !== undefined ? this.toVec3(scope, outputNormal) : pb.vec3(0, 0, 1), outputTangent !== undefined ? this.toVec3(scope, outputTangent) : pb.vec3(0)) as PBShaderExp;\r\n }\r\n\r\n indirectLighting(\r\n scope: PBInsideFunctionScope,\r\n normal: PBShaderExp,\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 ao = this.getBlueprintOutput(scope, 'AO');\r\n if (ao === undefined) {\r\n super.indirectLighting(scope, normal, viewVec, commonData, outColor, outRoughness, outDiffuseColor);\r\n return;\r\n }\r\n const pb = scope.$builder;\r\n const funcName = `Z_applyBlueprintAO${outDiffuseColor ? '_D' : ''}`;\r\n pb.func(\r\n funcName,\r\n [\r\n pb.vec3('outColor').inout(),\r\n ...(outDiffuseColor ? [pb.vec3('outDiffuseColor').inout()] : []),\r\n pb.float('ao')\r\n ],\r\n function () {\r\n this.outColor = pb.mul(this.outColor, this.ao);\r\n if (outDiffuseColor) {\r\n this.outDiffuseColor = pb.mul(this.outDiffuseColor, this.ao);\r\n }\r\n }\r\n );\r\n super.indirectLighting(scope, normal, viewVec, commonData, outColor, outRoughness, outDiffuseColor);\r\n if (outDiffuseColor) {\r\n pb.getGlobalScope()[funcName](outColor, outDiffuseColor, ao as PBShaderExp | number);\r\n } else {\r\n pb.getGlobalScope()[funcName](outColor, ao as PBShaderExp | number);\r\n }\r\n }\r\n\r\n private syncBlueprintMetadata() {\r\n this._connectedOutputs = this.collectConnectedOutputs(this._irFrag, PBRBlockNode);\r\n const fragmentUsesColor = this._irFrag.behaviors.useVertexColor;\r\n const fragmentUsesUV = this._irFrag.behaviors.useVertexUV;\r\n const vertexUsesColor = this._irVertex.behaviors.useVertexColor;\r\n const vertexUsesUV = this._irVertex.behaviors.useVertexUV;\r\n this._vertexUsesColor = fragmentUsesColor || vertexUsesColor;\r\n this._vertexUsesUV = fragmentUsesUV || vertexUsesUV;\r\n this.useFeature(PBRBluePrintMaterial.FEATURE_BLUEPRINT_VERTEX_COLOR, this._vertexUsesColor);\r\n this.useFeature(PBRBluePrintMaterial.FEATURE_BLUEPRINT_VERTEX_UV, this._vertexUsesUV);\r\n }\r\n\r\n private collectConnectedOutputs<T extends IGraphNode>(\r\n ir: MaterialBlueprintIR,\r\n rootCtor: new (...args: any[]) => T\r\n ): Set<PBRBlueprintOutputName> {\r\n const outputs = new Set<PBRBlueprintOutputName>();\r\n for (const rootId of ir.DAG.roots) {\r\n const rootNode = ir.DAG.nodeMap[rootId];\r\n if (!(rootNode instanceof rootCtor)) {\r\n continue;\r\n }\r\n for (const input of rootNode.inputs) {\r\n if (input.inputNode) {\r\n outputs.add(input.name as PBRBlueprintOutputName);\r\n }\r\n }\r\n }\r\n return outputs;\r\n }\r\n\r\n private getBlueprintVertexColor(scope: PBFunctionScope): PBShaderExp {\r\n const pb = scope.$builder;\r\n if (this.vertexColor) {\r\n return this.getVertexColor(scope as unknown as PBInsideFunctionScope);\r\n }\r\n if (this._vertexUsesColor) {\r\n if (scope.$inputs.zDiffuse) {\r\n return scope.$inputs.zDiffuse as PBShaderExp;\r\n }\r\n if (scope.$getVertexAttrib('diffuse')) {\r\n return scope.$getVertexAttrib('diffuse') as PBShaderExp;\r\n }\r\n scope.$inputs.zDiffuse = pb.vec4().attrib('diffuse');\r\n return scope.$inputs.zDiffuse as PBShaderExp;\r\n }\r\n return pb.vec4(1);\r\n }\r\n\r\n private getBlueprintVertexUV(scope: PBFunctionScope): PBShaderExp {\r\n const pb = scope.$builder;\r\n if (this._vertexUsesUV) {\r\n if (scope.$inputs.zVertexUV) {\r\n return scope.$inputs.zVertexUV as PBShaderExp;\r\n }\r\n if (scope.$getVertexAttrib('texCoord0')) {\r\n return scope.$getVertexAttrib('texCoord0') as PBShaderExp;\r\n }\r\n scope.$inputs.zVertexUV = pb.vec2().attrib('texCoord0');\r\n return scope.$inputs.zVertexUV as PBShaderExp;\r\n }\r\n if (this.albedoTexture) {\r\n return (this.getAlbedoTexCoord(scope as unknown as PBInsideFunctionScope) ?? pb.vec2(0)) as PBShaderExp;\r\n }\r\n return pb.vec2(0);\r\n }\r\n\r\n private getBlueprintOutput(\r\n scope: PBInsideFunctionScope,\r\n name: PBRBlueprintOutputName\r\n ): number | boolean | PBShaderExp | undefined {\r\n if (!this._connectedOutputs.has(name)) {\r\n return undefined;\r\n }\r\n return this.getBlueprintOutputMap(scope)[name];\r\n }\r\n\r\n private getBlueprintOutputMap(scope: PBInsideFunctionScope): BlueprintOutputMap {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_GetPBRBlueprintOutputs';\r\n const that = this;\r\n const outputsStruct = pb.defineStruct(\r\n DEFAULT_OUTPUT_NAMES.map((name) => {\r\n switch (name) {\r\n case 'BaseColor':\r\n return pb.vec3(name);\r\n case 'Specular':\r\n case 'Emissive':\r\n case 'Normal':\r\n case 'Tangent':\r\n return pb.vec3(name);\r\n default:\r\n return pb.float(name);\r\n }\r\n })\r\n );\r\n if (!pb.getGlobalScope()[funcName]) {\r\n pb.func(\r\n funcName,\r\n [\r\n pb.vec3('worldPos'),\r\n pb.vec4('vertexColor'),\r\n pb.vec2('vertexUV'),\r\n pb.vec3('vertexNormal'),\r\n pb.vec3('vertexTangent'),\r\n pb.vec3('vertexBinormal')\r\n ],\r\n function () {\r\n this.zWorldPos = this.worldPos;\r\n this.zVertexColor = this.vertexColor;\r\n this.zVertexUV = this.vertexUV;\r\n this.zVertexNormal = this.vertexNormal;\r\n this.zVertexTangent = this.vertexTangent;\r\n this.zVertexBinormal = this.vertexBinormal;\r\n const outputs = that._irFrag.create(pb);\r\n let baseColor: number | PBShaderExp = pb.vec3(1);\r\n let metallic: number | PBShaderExp = 0;\r\n let roughness: number | PBShaderExp = 1;\r\n let specular: number | PBShaderExp = pb.vec3(1);\r\n let emissive: number | PBShaderExp = pb.vec3(0);\r\n let normal: number | PBShaderExp = pb.vec3(0);\r\n let tangent: number | PBShaderExp = pb.vec3(0);\r\n let opacity: number | PBShaderExp = 1;\r\n let specularWeight: number | PBShaderExp = 1;\r\n let ao: number | PBShaderExp = 1;\r\n if (outputs) {\r\n const map = that.toOutputMap(outputs);\r\n if (map.BaseColor !== undefined) {\r\n baseColor = that.toVec3(scope, map.BaseColor);\r\n }\r\n if (map.Metallic !== undefined) {\r\n metallic = map.Metallic as PBShaderExp | number;\r\n }\r\n if (map.Roughness !== undefined) {\r\n roughness = map.Roughness as PBShaderExp | number;\r\n }\r\n if (map.Specular !== undefined) {\r\n specular = that.toVec3(scope, map.Specular);\r\n }\r\n if (map.Emissive !== undefined) {\r\n emissive = that.toVec3(scope, map.Emissive);\r\n }\r\n if (map.Normal !== undefined) {\r\n normal = that.toVec3(scope, map.Normal);\r\n }\r\n if (map.Tangent !== undefined) {\r\n tangent = that.toVec3(scope, map.Tangent);\r\n }\r\n if (map.Opacity !== undefined) {\r\n opacity = map.Opacity as PBShaderExp | number;\r\n }\r\n if (map.SpecularWeight !== undefined) {\r\n specularWeight = map.SpecularWeight as PBShaderExp | number;\r\n }\r\n if (map.AO !== undefined) {\r\n ao = map.AO as PBShaderExp | number;\r\n }\r\n }\r\n this.$return(\r\n outputsStruct(\r\n baseColor,\r\n metallic,\r\n roughness,\r\n specular,\r\n emissive,\r\n normal,\r\n tangent,\r\n opacity,\r\n specularWeight,\r\n ao\r\n )\r\n );\r\n }\r\n );\r\n }\r\n const result = pb\r\n .getGlobalScope()\r\n [\r\n funcName\r\n ](this.getBlueprintWorldPos(scope), this.getBlueprintFragmentVertexColor(scope), this.getBlueprintFragmentVertexUV(scope), this.getBlueprintFragmentVertexNormal(scope), this.getBlueprintFragmentVertexTangent(scope), this.getBlueprintFragmentVertexBinormal(scope)) as PBShaderExp;\r\n const map: BlueprintOutputMap = {};\r\n for (const name of DEFAULT_OUTPUT_NAMES) {\r\n map[name] = result[name] as PBShaderExp;\r\n }\r\n return map;\r\n }\r\n\r\n private getBlueprintWorldPos(scope: PBInsideFunctionScope): PBShaderExp {\r\n const pb = scope.$builder;\r\n return (scope.$inputs.worldPos ?? scope.zWorldPos ?? pb.vec3(0)) as PBShaderExp;\r\n }\r\n\r\n private getBlueprintFragmentVertexColor(scope: PBInsideFunctionScope): PBShaderExp {\r\n const pb = scope.$builder;\r\n return (scope.$inputs.zOutDiffuse ?? scope.zVertexColor ?? pb.vec4(1)) as PBShaderExp;\r\n }\r\n\r\n private getBlueprintFragmentVertexUV(scope: PBInsideFunctionScope): PBShaderExp {\r\n const pb = scope.$builder;\r\n return (scope.$inputs.zVertexUV ?? scope.zVertexUV ?? pb.vec2(0)) as PBShaderExp;\r\n }\r\n\r\n private getBlueprintFragmentVertexNormal(scope: PBInsideFunctionScope): PBShaderExp {\r\n const pb = scope.$builder;\r\n return (scope.$inputs.wNorm ?? scope.zVertexNormal ?? pb.vec3(0, 0, 1)) as PBShaderExp;\r\n }\r\n\r\n private getBlueprintFragmentVertexTangent(scope: PBInsideFunctionScope): PBShaderExp {\r\n const pb = scope.$builder;\r\n return (scope.$inputs.wTangent ?? scope.zVertexTangent ?? pb.vec3(1, 0, 0)) as PBShaderExp;\r\n }\r\n\r\n private getBlueprintFragmentVertexBinormal(scope: PBInsideFunctionScope): PBShaderExp {\r\n const pb = scope.$builder;\r\n return (scope.$inputs.wBinormal ?? scope.zVertexBinormal ?? pb.vec3(0, 1, 0)) as PBShaderExp;\r\n }\r\n\r\n private toOutputMap(\r\n outputs: {\r\n name: string;\r\n exp: number | boolean | PBShaderExp;\r\n }[]\r\n ): BlueprintOutputMap {\r\n const map: BlueprintOutputMap = {};\r\n for (const output of outputs) {\r\n map[output.name as PBRBlueprintOutputName] = output.exp;\r\n }\r\n return map;\r\n }\r\n\r\n private toVertexOutputMap(\r\n outputs: {\r\n name: string;\r\n exp: number | boolean | PBShaderExp;\r\n }[]\r\n ): VertexBlueprintOutputMap {\r\n const map: VertexBlueprintOutputMap = {};\r\n for (const output of outputs) {\r\n map[output.name as VertexBlueprintOutputName] = output.exp;\r\n }\r\n return map;\r\n }\r\n\r\n private toFloat(scope: PBInsideFunctionScope, value: number | boolean | PBShaderExp): PBShaderExp {\r\n const pb = scope.$builder;\r\n if (typeof value === 'number') {\r\n return pb.float(value);\r\n }\r\n const exp = value as PBShaderExp;\r\n return exp.getTypeName() === 'float' ? exp : exp.x;\r\n }\r\n\r\n private toVec2(scope: PBInsideFunctionScope, value: number | boolean | PBShaderExp): PBShaderExp {\r\n const pb = scope.$builder;\r\n if (typeof value === 'number') {\r\n return pb.vec2(value);\r\n }\r\n const exp = value as PBShaderExp;\r\n const type = exp.getTypeName();\r\n if (type === 'float') {\r\n return pb.vec2(exp);\r\n }\r\n if (type === 'vec3' || type === 'vec4') {\r\n return exp.xy;\r\n }\r\n return exp;\r\n }\r\n\r\n private toVec3(scope: PBInsideFunctionScope, value: number | boolean | PBShaderExp): PBShaderExp {\r\n const pb = scope.$builder;\r\n if (typeof value === 'number') {\r\n return pb.vec3(value);\r\n }\r\n const exp = value as PBShaderExp;\r\n const type = exp.getTypeName();\r\n if (type === 'float') {\r\n return pb.vec3(exp);\r\n }\r\n if (type === 'vec2') {\r\n return pb.vec3(exp, 0);\r\n }\r\n if (type === 'vec4') {\r\n return exp.xyz;\r\n }\r\n return exp;\r\n }\r\n\r\n private toVec4(\r\n scope: PBInsideFunctionScope,\r\n value: number | boolean | PBShaderExp,\r\n alpha: number | PBShaderExp\r\n ): PBShaderExp {\r\n const pb = scope.$builder;\r\n if (typeof value === 'number') {\r\n return pb.vec4(value, value, value, alpha);\r\n }\r\n const exp = value as PBShaderExp;\r\n const type = exp.getTypeName();\r\n if (type === 'float') {\r\n return pb.vec4(pb.vec3(exp), alpha);\r\n }\r\n if (type === 'vec2') {\r\n return pb.vec4(exp, 0, alpha);\r\n }\r\n if (type === 'vec3') {\r\n return pb.vec4(exp, alpha);\r\n }\r\n return exp;\r\n }\r\n\r\n private _connectedOutputHash() {\r\n return DEFAULT_OUTPUT_NAMES.map((name) => (this._connectedOutputs.has(name) ? '1' : '0')).join('');\r\n }\r\n}\r\n"],"names":["DEFAULT_OUTPUT_NAMES","PBRBluePrintMaterial","PBRMetallicRoughnessMaterial","FEATURE_BLUEPRINT_VERTEX_COLOR","defineFeature","FEATURE_BLUEPRINT_VERTEX_UV","irFrag","irVertex","uniformValues","uniformTextures","_irFrag","MaterialBlueprintIR","nodeMap","PBRBlockNode","roots","order","graph","incoming","outgoing","nodes","id","title","locked","node","ClassName","Object","links","_irVertex","VertexBlockNode","_uniformValues","_uniformTextures","_connectedOutputs","Set","_vertexUsesColor","_vertexUsesUV","syncBlueprintMetadata","fragmentIR","ir","clearCache","optionChanged","vertexIR","val","map","v","uniformChanged","newUniforms","finalTexture","DRef","get","finalSampler","inFragmentShader","inVertexShader","magFilter","minFilter","mipFilter","name","params","clone","Vector4","zero","sRGB","texture","type","wrapS","wrapT","u","dispose","hasConnectedOutput","has","other","copyFrom","vertexShader","scope","pb","$builder","zVertexColor","getBlueprintVertexColor","zVertexUV","getBlueprintVertexUV","zVertexNormal","$outputs","wNorm","vec3","zVertexTangent","wTangent","zVertexBinormal","wBinormal","zWorldPos","worldPos","zOutDiffuse","getGlobalScope","uniform","outputs","create","vertexOut","toVertexOutputMap","worldMatrix","ShaderHelper","getWorldMatrix","Position","$l","oPos","mul","vec4","xyz","csPos","getViewProjectionMatrix","setClipSpacePosition","Color","toVec4","UV","toVec2","Normal","oNorm","toVec3","getNormalMatrix","Tangent","tangent","oTangent","getTypeName","cross","w","outputName","output","find","exp","fragmentShader","needFragmentColorInput","$inputs","vec2","applyUniformValues","bindGroup","ctx","pass","setValue","finalValue","setTexture","createProgram","_createHash","hash","_connectedOutputHash","onDispose","calculateAlbedoColor","uv","baseColor","getBlueprintOutput","opacity","undefined","albedo","rgb","calculateMetallic","normal","value","toFloat","calculateRoughness","calculateSpecularFactor","base","specular","weight","a","calculateEmissiveColor","emissive","getPreExposureUniform","calculateNormalAndTBN","worldNormal","worldTangent","worldBinormal","outputNormal","outputTangent","NormalStruct","defineStruct","mat3","funcName","that","func","TBN","calculateTBN","ng","t","b","$if","greaterThan","length","surfaceTangent","t_","normalize","sub","dot","surfaceNormalTS","surfaceNormal","lessThanEqual","surfaceNormalWS","$return","indirectLighting","viewVec","commonData","outColor","outRoughness","outDiffuseColor","ao","inout","float","collectConnectedOutputs","fragmentUsesColor","behaviors","useVertexColor","fragmentUsesUV","useVertexUV","vertexUsesColor","vertexUsesUV","useFeature","rootCtor","rootId","DAG","rootNode","input","inputs","inputNode","add","vertexColor","getVertexColor","zDiffuse","$getVertexAttrib","attrib","albedoTexture","getAlbedoTexCoord","getBlueprintOutputMap","outputsStruct","vertexUV","vertexNormal","vertexTangent","vertexBinormal","metallic","roughness","specularWeight","toOutputMap","BaseColor","Metallic","Roughness","Specular","Emissive","Opacity","SpecularWeight","AO","result","getBlueprintWorldPos","getBlueprintFragmentVertexColor","getBlueprintFragmentVertexUV","getBlueprintFragmentVertexNormal","getBlueprintFragmentVertexTangent","getBlueprintFragmentVertexBinormal","x","xy","alpha","join"],"mappings":"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"}
@@ -114,7 +114,7 @@ import { Vector3 } from '@zephyr3d/base';
114
114
  if (renderPassType === RENDER_PASS_TYPE_LIGHT) {
115
115
  scope.$l.normalInfo = this.calculateNormalAndTBN(scope, scope.$inputs.worldPos, scope.$inputs.wNorm, scope.$inputs.wTangent, scope.$inputs.wBinormal);
116
116
  scope.$l.viewVec = this.calculateViewVector(scope, scope.$inputs.worldPos);
117
- if (this.drawContext.materialFlags & MaterialVaryingFlags.SSR_STORE_ROUGHNESS) {
117
+ if (this.drawContext.materialFlags & (MaterialVaryingFlags.SCENE_STORE_ROUGHNESS | MaterialVaryingFlags.SCENE_STORE_NORMAL)) {
118
118
  scope.$l.outRoughness = pb.vec4();
119
119
  const writeSSSDiffuse = !!this._subsurfaceProfile && !!(this.drawContext.materialFlags & MaterialVaryingFlags.SSS_STORE_DIFFUSE);
120
120
  const writeSSSTransmission = !!this._subsurfaceProfile && !!(this.drawContext.materialFlags & MaterialVaryingFlags.SSS_STORE_TRANSMISSION);
@@ -1 +1 @@
1
- {"version":3,"file":"pbrmr.js","sources":["../../src/material/pbrmr.ts"],"sourcesContent":["import { MeshMaterial, applyMaterialMixins } from './meshmaterial';\r\nimport { mixinVertexColor } from './mixins/vertexcolor';\r\nimport type { BindGroup, PBFunctionScope, PBInsideFunctionScope, PBShaderExp } from '@zephyr3d/device';\r\nimport { mixinPBRMetallicRoughness } from './mixins/lightmodel/pbrmetallicroughness';\r\nimport { mixinTextureProps } from './mixins/texture';\r\nimport { ShaderHelper } from './shader/helper';\r\nimport { MaterialVaryingFlags, RENDER_PASS_TYPE_LIGHT } from '../values';\r\nimport type { Clonable } from '@zephyr3d/base';\r\nimport { Vector3 } from '@zephyr3d/base';\r\nimport type { DrawContext } from '../render';\r\nimport type { SubsurfaceProfile } from './subsurfaceprofile';\r\n\r\n/**\r\n * PBRMetallicRoughnessMaterial class\r\n * @public\r\n */\r\nexport class PBRMetallicRoughnessMaterial\r\n extends applyMaterialMixins(\r\n MeshMaterial,\r\n mixinPBRMetallicRoughness,\r\n mixinVertexColor,\r\n mixinTextureProps('subsurface')\r\n )\r\n implements Clonable<PBRMetallicRoughnessMaterial>\r\n{\r\n /** @internal */\r\n private static readonly FEATURE_VERTEX_NORMAL = this.defineFeature();\r\n /** @internal */\r\n private static readonly FEATURE_VERTEX_TANGENT = this.defineFeature();\r\n private readonly _subsurfaceProfileChanged: () => void;\r\n private _subsurfaceProfile: SubsurfaceProfile | null;\r\n /**\r\n * Creates an instance of PBRMetallicRoughnessMaterial class\r\n */\r\n constructor() {\r\n super();\r\n this._subsurfaceProfileChanged = () => this.uniformChanged();\r\n this._subsurfaceProfile = null;\r\n this.useFeature(PBRMetallicRoughnessMaterial.FEATURE_VERTEX_NORMAL, true);\r\n this.transmission = false;\r\n this.transmissionFactor = 0.2;\r\n this.thicknessFactor = 0.35;\r\n this.attenuationColor = new Vector3(1, 0.5, 0.4);\r\n this.attenuationDistance = 0.6;\r\n }\r\n clone() {\r\n const other = new PBRMetallicRoughnessMaterial();\r\n other.copyFrom(this);\r\n return other;\r\n }\r\n copyFrom(other: this) {\r\n super.copyFrom(other);\r\n this.vertexNormal = other.vertexNormal;\r\n this.vertexTangent = other.vertexTangent;\r\n this.subsurfaceProfile = other.subsurfaceProfile;\r\n }\r\n /** true if vertex normal attribute presents */\r\n get vertexNormal() {\r\n return this.featureUsed<boolean>(PBRMetallicRoughnessMaterial.FEATURE_VERTEX_NORMAL);\r\n }\r\n set vertexNormal(val) {\r\n this.useFeature(PBRMetallicRoughnessMaterial.FEATURE_VERTEX_NORMAL, !!val);\r\n }\r\n /** true if vertex normal attribute presents */\r\n get vertexTangent() {\r\n return this.featureUsed<boolean>(PBRMetallicRoughnessMaterial.FEATURE_VERTEX_TANGENT);\r\n }\r\n set vertexTangent(val) {\r\n this.useFeature(PBRMetallicRoughnessMaterial.FEATURE_VERTEX_TANGENT, !!val);\r\n }\r\n /** shared profile asset driving channel radius/falloff */\r\n get subsurfaceProfile() {\r\n return this._subsurfaceProfile;\r\n }\r\n set subsurfaceProfile(val: SubsurfaceProfile | null) {\r\n if (val !== this._subsurfaceProfile) {\r\n this._subsurfaceProfile?.removeChangeListener(this._subsurfaceProfileChanged);\r\n this._subsurfaceProfile = val ?? null;\r\n this._subsurfaceProfile?.addChangeListener(this._subsurfaceProfileChanged);\r\n this.optionChanged(true);\r\n }\r\n }\r\n private getSubsurfaceProfileId(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope.zSubsurfaceProfileId as PBShaderExp;\r\n }\r\n private getSubsurfaceProfileScale(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope.zSubsurfaceProfileScale as PBShaderExp;\r\n }\r\n private getSubsurfaceProfileStrength(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope.zSubsurfaceProfileStrength as PBShaderExp;\r\n }\r\n private getSubsurfaceProfilePreset(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope.zSubsurfaceProfilePreset as PBShaderExp;\r\n }\r\n vertexShader(scope: PBFunctionScope) {\r\n super.vertexShader(scope);\r\n const pb = scope.$builder;\r\n const worldMatrix = ShaderHelper.getWorldMatrix(scope);\r\n scope.$l.oPos = ShaderHelper.resolveVertexPosition(scope);\r\n scope.$outputs.worldPos = pb.mul(worldMatrix, pb.vec4(scope.oPos, 1)).xyz;\r\n scope.$l.csPos = pb.mul(ShaderHelper.getViewProjectionMatrix(scope), pb.vec4(scope.$outputs.worldPos, 1));\r\n ShaderHelper.setClipSpacePosition(scope, scope.csPos);\r\n const needsVolumeTransmissionRay =\r\n this.transmission ||\r\n (!!this._subsurfaceProfile &&\r\n this.drawContext.renderPass!.type === RENDER_PASS_TYPE_LIGHT &&\r\n !!(this.drawContext.materialFlags & MaterialVaryingFlags.SSS_STORE_TRANSMISSION));\r\n if (needsVolumeTransmissionRay) {\r\n scope.$outputs.screenUV = pb.add(pb.mul(pb.div(scope.csPos.xy, scope.csPos.w), 0.5), pb.vec2(0.5));\r\n scope.$outputs.modelScale = pb.vec3(\r\n pb.length(worldMatrix[0].xyz),\r\n pb.length(worldMatrix[1].xyz),\r\n pb.length(worldMatrix[2].xyz)\r\n );\r\n }\r\n if (this.vertexNormal) {\r\n scope.$l.oNorm = ShaderHelper.resolveVertexNormal(scope);\r\n scope.$outputs.wNorm = pb.mul(ShaderHelper.getNormalMatrix(scope), pb.vec4(scope.oNorm, 0)).xyz;\r\n if (this.vertexTangent) {\r\n scope.$l.oTangent = ShaderHelper.resolveVertexTangent(scope);\r\n scope.$outputs.wTangent = pb.mul(\r\n ShaderHelper.getNormalMatrix(scope),\r\n pb.vec4(scope.oTangent.xyz, 0)\r\n ).xyz;\r\n scope.$outputs.wBinormal = pb.mul(\r\n pb.cross(scope.$outputs.wNorm, scope.$outputs.wTangent),\r\n scope.oTangent.w\r\n );\r\n }\r\n }\r\n }\r\n fragmentShader(scope: PBFunctionScope) {\r\n super.fragmentShader(scope);\r\n const pb = scope.$builder;\r\n const renderPassType = this.drawContext.renderPass!.type;\r\n if (!!this._subsurfaceProfile && this.needFragmentColor() && renderPassType === RENDER_PASS_TYPE_LIGHT) {\r\n scope.zSubsurfaceProfileId = pb.float().uniform(2);\r\n scope.zSubsurfaceProfileScale = pb.float().uniform(2);\r\n scope.zSubsurfaceProfileStrength = pb.float().uniform(2);\r\n scope.zSubsurfaceProfilePreset = pb.float().uniform(2);\r\n }\r\n if (this.needFragmentColorInput()) {\r\n scope.$l.albedo = this.calculateAlbedoColor(scope);\r\n if (this.vertexColor) {\r\n scope.albedo = pb.mul(scope.albedo, this.getVertexColor(scope));\r\n }\r\n if (renderPassType === RENDER_PASS_TYPE_LIGHT) {\r\n scope.$l.normalInfo = this.calculateNormalAndTBN(\r\n scope,\r\n scope.$inputs.worldPos,\r\n scope.$inputs.wNorm,\r\n scope.$inputs.wTangent,\r\n scope.$inputs.wBinormal\r\n );\r\n scope.$l.viewVec = this.calculateViewVector(scope, scope.$inputs.worldPos);\r\n if (this.drawContext.materialFlags & MaterialVaryingFlags.SSR_STORE_ROUGHNESS) {\r\n scope.$l.outRoughness = pb.vec4();\r\n const writeSSSDiffuse =\r\n !!this._subsurfaceProfile &&\r\n !!(this.drawContext.materialFlags & MaterialVaryingFlags.SSS_STORE_DIFFUSE);\r\n const writeSSSTransmission =\r\n !!this._subsurfaceProfile &&\r\n !!(this.drawContext.materialFlags & MaterialVaryingFlags.SSS_STORE_TRANSMISSION);\r\n if (writeSSSDiffuse) {\r\n scope.$l.sssDiffuse = pb.vec4();\r\n }\r\n if (writeSSSTransmission) {\r\n scope.$l.sssTransmission = pb.vec4();\r\n }\r\n if (writeSSSDiffuse && writeSSSTransmission) {\r\n scope.$l.litColor = this.PBRLight(\r\n scope,\r\n scope.$inputs.worldPos,\r\n scope.normalInfo.normal,\r\n scope.viewVec,\r\n scope.albedo,\r\n scope.normalInfo.TBN,\r\n scope.outRoughness,\r\n scope.sssDiffuse,\r\n scope.sssTransmission\r\n );\r\n } else if (writeSSSDiffuse) {\r\n scope.$l.litColor = this.PBRLight(\r\n scope,\r\n scope.$inputs.worldPos,\r\n scope.normalInfo.normal,\r\n scope.viewVec,\r\n scope.albedo,\r\n scope.normalInfo.TBN,\r\n scope.outRoughness,\r\n scope.sssDiffuse\r\n );\r\n } else if (writeSSSTransmission) {\r\n scope.$l.litColor = this.PBRLight(\r\n scope,\r\n scope.$inputs.worldPos,\r\n scope.normalInfo.normal,\r\n scope.viewVec,\r\n scope.albedo,\r\n scope.normalInfo.TBN,\r\n scope.outRoughness,\r\n undefined,\r\n scope.sssTransmission\r\n );\r\n } else {\r\n scope.$l.litColor = this.PBRLight(\r\n scope,\r\n scope.$inputs.worldPos,\r\n scope.normalInfo.normal,\r\n scope.viewVec,\r\n scope.albedo,\r\n scope.normalInfo.TBN,\r\n scope.outRoughness\r\n );\r\n }\r\n const writeSSSProfile =\r\n !!this._subsurfaceProfile &&\r\n !!(this.drawContext.materialFlags & MaterialVaryingFlags.SSS_STORE_PROFILE);\r\n scope.$l.sssProfile = writeSSSProfile ? this.buildSubsurfaceProfile(scope) : pb.vec4(0);\r\n scope.$l.sssParams = writeSSSProfile ? (scope.sssParams ?? pb.vec4(0)) : pb.vec4(0);\r\n /*\r\n scope.outRoughness = pb.vec4(\r\n pb.add(pb.mul(scope.normalInfo.normal, 0.5), pb.vec3(0.5)),\r\n scope.outRoughness.a\r\n );\r\n */\r\n this.outputFragmentColor(\r\n scope,\r\n scope.$inputs.worldPos,\r\n pb.vec4(scope.litColor, scope.albedo.a),\r\n scope.outRoughness,\r\n pb.vec4(pb.add(pb.mul(scope.normalInfo.normal, 0.5), pb.vec3(0.5)), 1),\r\n scope.sssProfile,\r\n scope.sssParams,\r\n writeSSSDiffuse ? scope.sssDiffuse : undefined,\r\n writeSSSTransmission ? scope.sssTransmission : undefined,\r\n writeSSSProfile\r\n );\r\n } else {\r\n const writeSSSDiffuse =\r\n !!this._subsurfaceProfile &&\r\n !!(this.drawContext.materialFlags & MaterialVaryingFlags.SSS_STORE_DIFFUSE);\r\n const writeSSSTransmission =\r\n !!this._subsurfaceProfile &&\r\n !!(this.drawContext.materialFlags & MaterialVaryingFlags.SSS_STORE_TRANSMISSION);\r\n if (writeSSSDiffuse) {\r\n scope.$l.sssDiffuse = pb.vec4();\r\n }\r\n if (writeSSSTransmission) {\r\n scope.$l.sssTransmission = pb.vec4();\r\n }\r\n if (writeSSSDiffuse && writeSSSTransmission) {\r\n scope.$l.litColor = this.PBRLight(\r\n scope,\r\n scope.$inputs.worldPos,\r\n scope.normalInfo.normal,\r\n scope.viewVec,\r\n scope.albedo,\r\n scope.normalInfo.TBN,\r\n undefined,\r\n scope.sssDiffuse,\r\n scope.sssTransmission\r\n );\r\n } else if (writeSSSDiffuse) {\r\n scope.$l.litColor = this.PBRLight(\r\n scope,\r\n scope.$inputs.worldPos,\r\n scope.normalInfo.normal,\r\n scope.viewVec,\r\n scope.albedo,\r\n scope.normalInfo.TBN,\r\n undefined,\r\n scope.sssDiffuse\r\n );\r\n } else if (writeSSSTransmission) {\r\n scope.$l.litColor = this.PBRLight(\r\n scope,\r\n scope.$inputs.worldPos,\r\n scope.normalInfo.normal,\r\n scope.viewVec,\r\n scope.albedo,\r\n scope.normalInfo.TBN,\r\n undefined,\r\n undefined,\r\n scope.sssTransmission\r\n );\r\n } else {\r\n scope.$l.litColor = this.PBRLight(\r\n scope,\r\n scope.$inputs.worldPos,\r\n scope.normalInfo.normal,\r\n scope.viewVec,\r\n scope.albedo,\r\n scope.normalInfo.TBN\r\n );\r\n }\r\n const writeSSSProfile =\r\n !!this._subsurfaceProfile &&\r\n !!(this.drawContext.materialFlags & MaterialVaryingFlags.SSS_STORE_PROFILE);\r\n scope.$l.sssProfile = writeSSSProfile ? this.buildSubsurfaceProfile(scope) : pb.vec4(0);\r\n scope.$l.sssParams = writeSSSProfile ? (scope.sssParams ?? pb.vec4(0)) : pb.vec4(0);\r\n this.outputFragmentColor(\r\n scope,\r\n scope.$inputs.worldPos,\r\n pb.vec4(scope.litColor, scope.albedo.a),\r\n undefined,\r\n undefined,\r\n scope.sssProfile,\r\n scope.sssParams,\r\n writeSSSDiffuse ? scope.sssDiffuse : undefined,\r\n writeSSSTransmission ? scope.sssTransmission : undefined,\r\n writeSSSProfile\r\n );\r\n }\r\n } else {\r\n this.outputFragmentColor(scope, scope.$inputs.worldPos, scope.albedo);\r\n }\r\n } else {\r\n this.outputFragmentColor(scope, scope.$inputs.worldPos, null);\r\n }\r\n }\r\n applyUniformValues(bindGroup: BindGroup, ctx: DrawContext, pass: number) {\r\n super.applyUniformValues(bindGroup, ctx, pass);\r\n if (\r\n !!this._subsurfaceProfile &&\r\n this.needFragmentColor(ctx) &&\r\n ctx.renderPass!.type === RENDER_PASS_TYPE_LIGHT\r\n ) {\r\n const profile = this._subsurfaceProfile;\r\n bindGroup.setValue('zSubsurfaceProfileId', profile?.slot ?? 0);\r\n bindGroup.setValue('zSubsurfaceProfileScale', profile?.scale ?? 0);\r\n bindGroup.setValue('zSubsurfaceProfileStrength', profile?.strength ?? 0);\r\n bindGroup.setValue('zSubsurfaceProfilePreset', profile?.presetIndex ?? 0);\r\n }\r\n }\r\n protected _createHash() {\r\n return `${super._createHash()}:${this._subsurfaceProfile ? 1 : 0}`;\r\n }\r\n private buildSubsurfaceProfile(scope: PBInsideFunctionScope) {\r\n const pb = scope.$builder;\r\n const hasExplicitTransmissionAuthoring = !!(this.transmissionTexture || this.thicknessTexture);\r\n scope.$l.sssMask = pb.float(1);\r\n scope.$l.sssScatterSoftness = pb.float(0);\r\n scope.$l.sssTransmissionMask = pb.float(0);\r\n scope.$l.sssTransmissionAuthor = pb.float(1);\r\n scope.$l.sssThicknessScale = pb.clamp(\r\n pb.div(scope.zThicknessFactor ?? 0, pb.add(scope.zThicknessFactor ?? 0, 1)),\r\n 0,\r\n 1\r\n );\r\n scope.$l.sssThinAuthorMask = pb.sub(1, scope.sssThicknessScale);\r\n if (this.subsurfaceTexture) {\r\n scope.$l.sssTexel = this.sampleSubsurfaceTexture(scope);\r\n scope.sssMask = pb.clamp(scope.sssTexel.r, 0, 1);\r\n scope.sssScatterSoftness = pb.clamp(scope.sssTexel.g, 0, 1);\r\n }\r\n if (this.transmissionTexture) {\r\n scope.sssTransmissionAuthor = pb.mul(\r\n scope.sssTransmissionAuthor,\r\n pb.clamp(this.sampleTransmissionTexture(scope).r, 0, 1)\r\n );\r\n }\r\n if (this.thicknessTexture) {\r\n scope.$l.sssThicknessSample = pb.clamp(this.sampleThicknessTexture(scope).g, 0, 1);\r\n scope.sssThinAuthorMask = pb.clamp(\r\n pb.mix(\r\n pb.sub(1, scope.sssThicknessSample),\r\n pb.sub(1, pb.mul(scope.sssThicknessSample, scope.sssThicknessScale)),\r\n pb.add(0.35, pb.mul(scope.sssThicknessScale, 0.65))\r\n ),\r\n 0,\r\n 1\r\n );\r\n }\r\n scope.$l.sssAuthoredTransmissionMask = pb.clamp(\r\n pb.mul(scope.sssTransmissionAuthor, scope.sssThinAuthorMask),\r\n 0,\r\n 1\r\n );\r\n scope.sssTransmissionMask = pb.clamp(\r\n pb.max(scope.sssTransmissionMask, scope.sssAuthoredTransmissionMask),\r\n 0,\r\n 1\r\n );\r\n scope.$l.sssScatterStrengthMask = pb.clamp(\r\n pb.add(pb.mul(scope.sssMask, 0.82), pb.mul(scope.sssScatterSoftness, 0.38)),\r\n 0,\r\n 1\r\n );\r\n scope.$l.sssScatterWidthMask = pb.clamp(\r\n pb.max(scope.sssMask, pb.mul(scope.sssScatterSoftness, 0.9)),\r\n 0,\r\n 1\r\n );\r\n scope.$l.sssStrength = pb.mul(this.getSubsurfaceProfileStrength(scope), scope.sssScatterStrengthMask);\r\n scope.$l.sssWidthBase = pb.mul(this.getSubsurfaceProfileScale(scope), scope.sssScatterWidthMask);\r\n scope.$l.sssWidth = pb.clamp(pb.div(scope.sssWidthBase, pb.add(scope.sssWidthBase, 1)), 0, 0.999);\r\n if (!hasExplicitTransmissionAuthoring) {\r\n scope.$l.sssProfileFallbackMask = pb.clamp(\r\n pb.add(\r\n pb.mul(scope.sssMask, 0.12),\r\n pb.add(pb.mul(scope.sssStrength, 0.18), pb.mul(scope.sssWidth, 0.24))\r\n ),\r\n 0,\r\n 0.42\r\n );\r\n scope.sssTransmissionMask = pb.max(scope.sssTransmissionMask, scope.sssProfileFallbackMask);\r\n }\r\n scope.$l.sssSlotEncoded = pb.div(this.getSubsurfaceProfileId(scope), 255);\r\n scope.$l.sssPresetEncoded = pb.div(this.getSubsurfaceProfilePreset(scope), 255);\r\n scope.$l.sssParams = pb.vec4(\r\n scope.sssSlotEncoded,\r\n scope.sssWidth,\r\n scope.sssPresetEncoded,\r\n pb.add(0.75, pb.mul(scope.sssScatterSoftness, 0.25))\r\n );\r\n return pb.vec4(scope.sssStrength, scope.sssStrength, scope.sssStrength, scope.sssTransmissionMask);\r\n }\r\n}\r\n"],"names":["PBRMetallicRoughnessMaterial","applyMaterialMixins","MeshMaterial","mixinPBRMetallicRoughness","mixinVertexColor","mixinTextureProps","FEATURE_VERTEX_NORMAL","defineFeature","FEATURE_VERTEX_TANGENT","_subsurfaceProfileChanged","_subsurfaceProfile","uniformChanged","useFeature","transmission","transmissionFactor","thicknessFactor","attenuationColor","Vector3","attenuationDistance","clone","other","copyFrom","vertexNormal","vertexTangent","subsurfaceProfile","featureUsed","val","removeChangeListener","addChangeListener","optionChanged","getSubsurfaceProfileId","scope","zSubsurfaceProfileId","getSubsurfaceProfileScale","zSubsurfaceProfileScale","getSubsurfaceProfileStrength","zSubsurfaceProfileStrength","getSubsurfaceProfilePreset","zSubsurfaceProfilePreset","vertexShader","pb","$builder","worldMatrix","ShaderHelper","getWorldMatrix","$l","oPos","resolveVertexPosition","$outputs","worldPos","mul","vec4","xyz","csPos","getViewProjectionMatrix","setClipSpacePosition","needsVolumeTransmissionRay","drawContext","renderPass","type","RENDER_PASS_TYPE_LIGHT","materialFlags","MaterialVaryingFlags","SSS_STORE_TRANSMISSION","screenUV","add","div","xy","w","vec2","modelScale","vec3","length","oNorm","resolveVertexNormal","wNorm","getNormalMatrix","oTangent","resolveVertexTangent","wTangent","wBinormal","cross","fragmentShader","renderPassType","needFragmentColor","float","uniform","needFragmentColorInput","albedo","calculateAlbedoColor","vertexColor","getVertexColor","normalInfo","calculateNormalAndTBN","$inputs","viewVec","calculateViewVector","SSR_STORE_ROUGHNESS","outRoughness","writeSSSDiffuse","SSS_STORE_DIFFUSE","writeSSSTransmission","sssDiffuse","sssTransmission","litColor","PBRLight","normal","TBN","undefined","writeSSSProfile","SSS_STORE_PROFILE","sssProfile","buildSubsurfaceProfile","sssParams","outputFragmentColor","a","applyUniformValues","bindGroup","ctx","pass","profile","setValue","slot","scale","strength","presetIndex","_createHash","hasExplicitTransmissionAuthoring","transmissionTexture","thicknessTexture","sssMask","sssScatterSoftness","sssTransmissionMask","sssTransmissionAuthor","sssThicknessScale","clamp","zThicknessFactor","sssThinAuthorMask","sub","subsurfaceTexture","sssTexel","sampleSubsurfaceTexture","r","g","sampleTransmissionTexture","sssThicknessSample","sampleThicknessTexture","mix","sssAuthoredTransmissionMask","max","sssScatterStrengthMask","sssScatterWidthMask","sssStrength","sssWidthBase","sssWidth","sssProfileFallbackMask","sssSlotEncoded","sssPresetEncoded"],"mappings":"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"}
1
+ {"version":3,"file":"pbrmr.js","sources":["../../src/material/pbrmr.ts"],"sourcesContent":["import { MeshMaterial, applyMaterialMixins } from './meshmaterial';\r\nimport { mixinVertexColor } from './mixins/vertexcolor';\r\nimport type { BindGroup, PBFunctionScope, PBInsideFunctionScope, PBShaderExp } from '@zephyr3d/device';\r\nimport { mixinPBRMetallicRoughness } from './mixins/lightmodel/pbrmetallicroughness';\r\nimport { mixinTextureProps } from './mixins/texture';\r\nimport { ShaderHelper } from './shader/helper';\r\nimport { MaterialVaryingFlags, RENDER_PASS_TYPE_LIGHT } from '../values';\r\nimport type { Clonable } from '@zephyr3d/base';\r\nimport { Vector3 } from '@zephyr3d/base';\r\nimport type { DrawContext } from '../render';\r\nimport type { SubsurfaceProfile } from './subsurfaceprofile';\r\n\r\n/**\r\n * PBRMetallicRoughnessMaterial class\r\n * @public\r\n */\r\nexport class PBRMetallicRoughnessMaterial\r\n extends applyMaterialMixins(\r\n MeshMaterial,\r\n mixinPBRMetallicRoughness,\r\n mixinVertexColor,\r\n mixinTextureProps('subsurface')\r\n )\r\n implements Clonable<PBRMetallicRoughnessMaterial>\r\n{\r\n /** @internal */\r\n private static readonly FEATURE_VERTEX_NORMAL = this.defineFeature();\r\n /** @internal */\r\n private static readonly FEATURE_VERTEX_TANGENT = this.defineFeature();\r\n private readonly _subsurfaceProfileChanged: () => void;\r\n private _subsurfaceProfile: SubsurfaceProfile | null;\r\n /**\r\n * Creates an instance of PBRMetallicRoughnessMaterial class\r\n */\r\n constructor() {\r\n super();\r\n this._subsurfaceProfileChanged = () => this.uniformChanged();\r\n this._subsurfaceProfile = null;\r\n this.useFeature(PBRMetallicRoughnessMaterial.FEATURE_VERTEX_NORMAL, true);\r\n this.transmission = false;\r\n this.transmissionFactor = 0.2;\r\n this.thicknessFactor = 0.35;\r\n this.attenuationColor = new Vector3(1, 0.5, 0.4);\r\n this.attenuationDistance = 0.6;\r\n }\r\n clone() {\r\n const other = new PBRMetallicRoughnessMaterial();\r\n other.copyFrom(this);\r\n return other;\r\n }\r\n copyFrom(other: this) {\r\n super.copyFrom(other);\r\n this.vertexNormal = other.vertexNormal;\r\n this.vertexTangent = other.vertexTangent;\r\n this.subsurfaceProfile = other.subsurfaceProfile;\r\n }\r\n /** true if vertex normal attribute presents */\r\n get vertexNormal() {\r\n return this.featureUsed<boolean>(PBRMetallicRoughnessMaterial.FEATURE_VERTEX_NORMAL);\r\n }\r\n set vertexNormal(val) {\r\n this.useFeature(PBRMetallicRoughnessMaterial.FEATURE_VERTEX_NORMAL, !!val);\r\n }\r\n /** true if vertex normal attribute presents */\r\n get vertexTangent() {\r\n return this.featureUsed<boolean>(PBRMetallicRoughnessMaterial.FEATURE_VERTEX_TANGENT);\r\n }\r\n set vertexTangent(val) {\r\n this.useFeature(PBRMetallicRoughnessMaterial.FEATURE_VERTEX_TANGENT, !!val);\r\n }\r\n /** shared profile asset driving channel radius/falloff */\r\n get subsurfaceProfile() {\r\n return this._subsurfaceProfile;\r\n }\r\n set subsurfaceProfile(val: SubsurfaceProfile | null) {\r\n if (val !== this._subsurfaceProfile) {\r\n this._subsurfaceProfile?.removeChangeListener(this._subsurfaceProfileChanged);\r\n this._subsurfaceProfile = val ?? null;\r\n this._subsurfaceProfile?.addChangeListener(this._subsurfaceProfileChanged);\r\n this.optionChanged(true);\r\n }\r\n }\r\n private getSubsurfaceProfileId(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope.zSubsurfaceProfileId as PBShaderExp;\r\n }\r\n private getSubsurfaceProfileScale(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope.zSubsurfaceProfileScale as PBShaderExp;\r\n }\r\n private getSubsurfaceProfileStrength(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope.zSubsurfaceProfileStrength as PBShaderExp;\r\n }\r\n private getSubsurfaceProfilePreset(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope.zSubsurfaceProfilePreset as PBShaderExp;\r\n }\r\n vertexShader(scope: PBFunctionScope) {\r\n super.vertexShader(scope);\r\n const pb = scope.$builder;\r\n const worldMatrix = ShaderHelper.getWorldMatrix(scope);\r\n scope.$l.oPos = ShaderHelper.resolveVertexPosition(scope);\r\n scope.$outputs.worldPos = pb.mul(worldMatrix, pb.vec4(scope.oPos, 1)).xyz;\r\n scope.$l.csPos = pb.mul(ShaderHelper.getViewProjectionMatrix(scope), pb.vec4(scope.$outputs.worldPos, 1));\r\n ShaderHelper.setClipSpacePosition(scope, scope.csPos);\r\n const needsVolumeTransmissionRay =\r\n this.transmission ||\r\n (!!this._subsurfaceProfile &&\r\n this.drawContext.renderPass!.type === RENDER_PASS_TYPE_LIGHT &&\r\n !!(this.drawContext.materialFlags & MaterialVaryingFlags.SSS_STORE_TRANSMISSION));\r\n if (needsVolumeTransmissionRay) {\r\n scope.$outputs.screenUV = pb.add(pb.mul(pb.div(scope.csPos.xy, scope.csPos.w), 0.5), pb.vec2(0.5));\r\n scope.$outputs.modelScale = pb.vec3(\r\n pb.length(worldMatrix[0].xyz),\r\n pb.length(worldMatrix[1].xyz),\r\n pb.length(worldMatrix[2].xyz)\r\n );\r\n }\r\n if (this.vertexNormal) {\r\n scope.$l.oNorm = ShaderHelper.resolveVertexNormal(scope);\r\n scope.$outputs.wNorm = pb.mul(ShaderHelper.getNormalMatrix(scope), pb.vec4(scope.oNorm, 0)).xyz;\r\n if (this.vertexTangent) {\r\n scope.$l.oTangent = ShaderHelper.resolveVertexTangent(scope);\r\n scope.$outputs.wTangent = pb.mul(\r\n ShaderHelper.getNormalMatrix(scope),\r\n pb.vec4(scope.oTangent.xyz, 0)\r\n ).xyz;\r\n scope.$outputs.wBinormal = pb.mul(\r\n pb.cross(scope.$outputs.wNorm, scope.$outputs.wTangent),\r\n scope.oTangent.w\r\n );\r\n }\r\n }\r\n }\r\n fragmentShader(scope: PBFunctionScope) {\r\n super.fragmentShader(scope);\r\n const pb = scope.$builder;\r\n const renderPassType = this.drawContext.renderPass!.type;\r\n if (!!this._subsurfaceProfile && this.needFragmentColor() && renderPassType === RENDER_PASS_TYPE_LIGHT) {\r\n scope.zSubsurfaceProfileId = pb.float().uniform(2);\r\n scope.zSubsurfaceProfileScale = pb.float().uniform(2);\r\n scope.zSubsurfaceProfileStrength = pb.float().uniform(2);\r\n scope.zSubsurfaceProfilePreset = pb.float().uniform(2);\r\n }\r\n if (this.needFragmentColorInput()) {\r\n scope.$l.albedo = this.calculateAlbedoColor(scope);\r\n if (this.vertexColor) {\r\n scope.albedo = pb.mul(scope.albedo, this.getVertexColor(scope));\r\n }\r\n if (renderPassType === RENDER_PASS_TYPE_LIGHT) {\r\n scope.$l.normalInfo = this.calculateNormalAndTBN(\r\n scope,\r\n scope.$inputs.worldPos,\r\n scope.$inputs.wNorm,\r\n scope.$inputs.wTangent,\r\n scope.$inputs.wBinormal\r\n );\r\n scope.$l.viewVec = this.calculateViewVector(scope, scope.$inputs.worldPos);\r\n if (\r\n this.drawContext.materialFlags &\r\n (MaterialVaryingFlags.SCENE_STORE_ROUGHNESS | MaterialVaryingFlags.SCENE_STORE_NORMAL)\r\n ) {\r\n scope.$l.outRoughness = pb.vec4();\r\n const writeSSSDiffuse =\r\n !!this._subsurfaceProfile &&\r\n !!(this.drawContext.materialFlags & MaterialVaryingFlags.SSS_STORE_DIFFUSE);\r\n const writeSSSTransmission =\r\n !!this._subsurfaceProfile &&\r\n !!(this.drawContext.materialFlags & MaterialVaryingFlags.SSS_STORE_TRANSMISSION);\r\n if (writeSSSDiffuse) {\r\n scope.$l.sssDiffuse = pb.vec4();\r\n }\r\n if (writeSSSTransmission) {\r\n scope.$l.sssTransmission = pb.vec4();\r\n }\r\n if (writeSSSDiffuse && writeSSSTransmission) {\r\n scope.$l.litColor = this.PBRLight(\r\n scope,\r\n scope.$inputs.worldPos,\r\n scope.normalInfo.normal,\r\n scope.viewVec,\r\n scope.albedo,\r\n scope.normalInfo.TBN,\r\n scope.outRoughness,\r\n scope.sssDiffuse,\r\n scope.sssTransmission\r\n );\r\n } else if (writeSSSDiffuse) {\r\n scope.$l.litColor = this.PBRLight(\r\n scope,\r\n scope.$inputs.worldPos,\r\n scope.normalInfo.normal,\r\n scope.viewVec,\r\n scope.albedo,\r\n scope.normalInfo.TBN,\r\n scope.outRoughness,\r\n scope.sssDiffuse\r\n );\r\n } else if (writeSSSTransmission) {\r\n scope.$l.litColor = this.PBRLight(\r\n scope,\r\n scope.$inputs.worldPos,\r\n scope.normalInfo.normal,\r\n scope.viewVec,\r\n scope.albedo,\r\n scope.normalInfo.TBN,\r\n scope.outRoughness,\r\n undefined,\r\n scope.sssTransmission\r\n );\r\n } else {\r\n scope.$l.litColor = this.PBRLight(\r\n scope,\r\n scope.$inputs.worldPos,\r\n scope.normalInfo.normal,\r\n scope.viewVec,\r\n scope.albedo,\r\n scope.normalInfo.TBN,\r\n scope.outRoughness\r\n );\r\n }\r\n const writeSSSProfile =\r\n !!this._subsurfaceProfile &&\r\n !!(this.drawContext.materialFlags & MaterialVaryingFlags.SSS_STORE_PROFILE);\r\n scope.$l.sssProfile = writeSSSProfile ? this.buildSubsurfaceProfile(scope) : pb.vec4(0);\r\n scope.$l.sssParams = writeSSSProfile ? (scope.sssParams ?? pb.vec4(0)) : pb.vec4(0);\r\n /*\r\n scope.outRoughness = pb.vec4(\r\n pb.add(pb.mul(scope.normalInfo.normal, 0.5), pb.vec3(0.5)),\r\n scope.outRoughness.a\r\n );\r\n */\r\n this.outputFragmentColor(\r\n scope,\r\n scope.$inputs.worldPos,\r\n pb.vec4(scope.litColor, scope.albedo.a),\r\n scope.outRoughness,\r\n pb.vec4(pb.add(pb.mul(scope.normalInfo.normal, 0.5), pb.vec3(0.5)), 1),\r\n scope.sssProfile,\r\n scope.sssParams,\r\n writeSSSDiffuse ? scope.sssDiffuse : undefined,\r\n writeSSSTransmission ? scope.sssTransmission : undefined,\r\n writeSSSProfile\r\n );\r\n } else {\r\n const writeSSSDiffuse =\r\n !!this._subsurfaceProfile &&\r\n !!(this.drawContext.materialFlags & MaterialVaryingFlags.SSS_STORE_DIFFUSE);\r\n const writeSSSTransmission =\r\n !!this._subsurfaceProfile &&\r\n !!(this.drawContext.materialFlags & MaterialVaryingFlags.SSS_STORE_TRANSMISSION);\r\n if (writeSSSDiffuse) {\r\n scope.$l.sssDiffuse = pb.vec4();\r\n }\r\n if (writeSSSTransmission) {\r\n scope.$l.sssTransmission = pb.vec4();\r\n }\r\n if (writeSSSDiffuse && writeSSSTransmission) {\r\n scope.$l.litColor = this.PBRLight(\r\n scope,\r\n scope.$inputs.worldPos,\r\n scope.normalInfo.normal,\r\n scope.viewVec,\r\n scope.albedo,\r\n scope.normalInfo.TBN,\r\n undefined,\r\n scope.sssDiffuse,\r\n scope.sssTransmission\r\n );\r\n } else if (writeSSSDiffuse) {\r\n scope.$l.litColor = this.PBRLight(\r\n scope,\r\n scope.$inputs.worldPos,\r\n scope.normalInfo.normal,\r\n scope.viewVec,\r\n scope.albedo,\r\n scope.normalInfo.TBN,\r\n undefined,\r\n scope.sssDiffuse\r\n );\r\n } else if (writeSSSTransmission) {\r\n scope.$l.litColor = this.PBRLight(\r\n scope,\r\n scope.$inputs.worldPos,\r\n scope.normalInfo.normal,\r\n scope.viewVec,\r\n scope.albedo,\r\n scope.normalInfo.TBN,\r\n undefined,\r\n undefined,\r\n scope.sssTransmission\r\n );\r\n } else {\r\n scope.$l.litColor = this.PBRLight(\r\n scope,\r\n scope.$inputs.worldPos,\r\n scope.normalInfo.normal,\r\n scope.viewVec,\r\n scope.albedo,\r\n scope.normalInfo.TBN\r\n );\r\n }\r\n const writeSSSProfile =\r\n !!this._subsurfaceProfile &&\r\n !!(this.drawContext.materialFlags & MaterialVaryingFlags.SSS_STORE_PROFILE);\r\n scope.$l.sssProfile = writeSSSProfile ? this.buildSubsurfaceProfile(scope) : pb.vec4(0);\r\n scope.$l.sssParams = writeSSSProfile ? (scope.sssParams ?? pb.vec4(0)) : pb.vec4(0);\r\n this.outputFragmentColor(\r\n scope,\r\n scope.$inputs.worldPos,\r\n pb.vec4(scope.litColor, scope.albedo.a),\r\n undefined,\r\n undefined,\r\n scope.sssProfile,\r\n scope.sssParams,\r\n writeSSSDiffuse ? scope.sssDiffuse : undefined,\r\n writeSSSTransmission ? scope.sssTransmission : undefined,\r\n writeSSSProfile\r\n );\r\n }\r\n } else {\r\n this.outputFragmentColor(scope, scope.$inputs.worldPos, scope.albedo);\r\n }\r\n } else {\r\n this.outputFragmentColor(scope, scope.$inputs.worldPos, null);\r\n }\r\n }\r\n applyUniformValues(bindGroup: BindGroup, ctx: DrawContext, pass: number) {\r\n super.applyUniformValues(bindGroup, ctx, pass);\r\n if (\r\n !!this._subsurfaceProfile &&\r\n this.needFragmentColor(ctx) &&\r\n ctx.renderPass!.type === RENDER_PASS_TYPE_LIGHT\r\n ) {\r\n const profile = this._subsurfaceProfile;\r\n bindGroup.setValue('zSubsurfaceProfileId', profile?.slot ?? 0);\r\n bindGroup.setValue('zSubsurfaceProfileScale', profile?.scale ?? 0);\r\n bindGroup.setValue('zSubsurfaceProfileStrength', profile?.strength ?? 0);\r\n bindGroup.setValue('zSubsurfaceProfilePreset', profile?.presetIndex ?? 0);\r\n }\r\n }\r\n protected _createHash() {\r\n return `${super._createHash()}:${this._subsurfaceProfile ? 1 : 0}`;\r\n }\r\n private buildSubsurfaceProfile(scope: PBInsideFunctionScope) {\r\n const pb = scope.$builder;\r\n const hasExplicitTransmissionAuthoring = !!(this.transmissionTexture || this.thicknessTexture);\r\n scope.$l.sssMask = pb.float(1);\r\n scope.$l.sssScatterSoftness = pb.float(0);\r\n scope.$l.sssTransmissionMask = pb.float(0);\r\n scope.$l.sssTransmissionAuthor = pb.float(1);\r\n scope.$l.sssThicknessScale = pb.clamp(\r\n pb.div(scope.zThicknessFactor ?? 0, pb.add(scope.zThicknessFactor ?? 0, 1)),\r\n 0,\r\n 1\r\n );\r\n scope.$l.sssThinAuthorMask = pb.sub(1, scope.sssThicknessScale);\r\n if (this.subsurfaceTexture) {\r\n scope.$l.sssTexel = this.sampleSubsurfaceTexture(scope);\r\n scope.sssMask = pb.clamp(scope.sssTexel.r, 0, 1);\r\n scope.sssScatterSoftness = pb.clamp(scope.sssTexel.g, 0, 1);\r\n }\r\n if (this.transmissionTexture) {\r\n scope.sssTransmissionAuthor = pb.mul(\r\n scope.sssTransmissionAuthor,\r\n pb.clamp(this.sampleTransmissionTexture(scope).r, 0, 1)\r\n );\r\n }\r\n if (this.thicknessTexture) {\r\n scope.$l.sssThicknessSample = pb.clamp(this.sampleThicknessTexture(scope).g, 0, 1);\r\n scope.sssThinAuthorMask = pb.clamp(\r\n pb.mix(\r\n pb.sub(1, scope.sssThicknessSample),\r\n pb.sub(1, pb.mul(scope.sssThicknessSample, scope.sssThicknessScale)),\r\n pb.add(0.35, pb.mul(scope.sssThicknessScale, 0.65))\r\n ),\r\n 0,\r\n 1\r\n );\r\n }\r\n scope.$l.sssAuthoredTransmissionMask = pb.clamp(\r\n pb.mul(scope.sssTransmissionAuthor, scope.sssThinAuthorMask),\r\n 0,\r\n 1\r\n );\r\n scope.sssTransmissionMask = pb.clamp(\r\n pb.max(scope.sssTransmissionMask, scope.sssAuthoredTransmissionMask),\r\n 0,\r\n 1\r\n );\r\n scope.$l.sssScatterStrengthMask = pb.clamp(\r\n pb.add(pb.mul(scope.sssMask, 0.82), pb.mul(scope.sssScatterSoftness, 0.38)),\r\n 0,\r\n 1\r\n );\r\n scope.$l.sssScatterWidthMask = pb.clamp(\r\n pb.max(scope.sssMask, pb.mul(scope.sssScatterSoftness, 0.9)),\r\n 0,\r\n 1\r\n );\r\n scope.$l.sssStrength = pb.mul(this.getSubsurfaceProfileStrength(scope), scope.sssScatterStrengthMask);\r\n scope.$l.sssWidthBase = pb.mul(this.getSubsurfaceProfileScale(scope), scope.sssScatterWidthMask);\r\n scope.$l.sssWidth = pb.clamp(pb.div(scope.sssWidthBase, pb.add(scope.sssWidthBase, 1)), 0, 0.999);\r\n if (!hasExplicitTransmissionAuthoring) {\r\n scope.$l.sssProfileFallbackMask = pb.clamp(\r\n pb.add(\r\n pb.mul(scope.sssMask, 0.12),\r\n pb.add(pb.mul(scope.sssStrength, 0.18), pb.mul(scope.sssWidth, 0.24))\r\n ),\r\n 0,\r\n 0.42\r\n );\r\n scope.sssTransmissionMask = pb.max(scope.sssTransmissionMask, scope.sssProfileFallbackMask);\r\n }\r\n scope.$l.sssSlotEncoded = pb.div(this.getSubsurfaceProfileId(scope), 255);\r\n scope.$l.sssPresetEncoded = pb.div(this.getSubsurfaceProfilePreset(scope), 255);\r\n scope.$l.sssParams = pb.vec4(\r\n scope.sssSlotEncoded,\r\n scope.sssWidth,\r\n scope.sssPresetEncoded,\r\n pb.add(0.75, pb.mul(scope.sssScatterSoftness, 0.25))\r\n );\r\n return pb.vec4(scope.sssStrength, scope.sssStrength, scope.sssStrength, scope.sssTransmissionMask);\r\n }\r\n}\r\n"],"names":["PBRMetallicRoughnessMaterial","applyMaterialMixins","MeshMaterial","mixinPBRMetallicRoughness","mixinVertexColor","mixinTextureProps","FEATURE_VERTEX_NORMAL","defineFeature","FEATURE_VERTEX_TANGENT","_subsurfaceProfileChanged","_subsurfaceProfile","uniformChanged","useFeature","transmission","transmissionFactor","thicknessFactor","attenuationColor","Vector3","attenuationDistance","clone","other","copyFrom","vertexNormal","vertexTangent","subsurfaceProfile","featureUsed","val","removeChangeListener","addChangeListener","optionChanged","getSubsurfaceProfileId","scope","zSubsurfaceProfileId","getSubsurfaceProfileScale","zSubsurfaceProfileScale","getSubsurfaceProfileStrength","zSubsurfaceProfileStrength","getSubsurfaceProfilePreset","zSubsurfaceProfilePreset","vertexShader","pb","$builder","worldMatrix","ShaderHelper","getWorldMatrix","$l","oPos","resolveVertexPosition","$outputs","worldPos","mul","vec4","xyz","csPos","getViewProjectionMatrix","setClipSpacePosition","needsVolumeTransmissionRay","drawContext","renderPass","type","RENDER_PASS_TYPE_LIGHT","materialFlags","MaterialVaryingFlags","SSS_STORE_TRANSMISSION","screenUV","add","div","xy","w","vec2","modelScale","vec3","length","oNorm","resolveVertexNormal","wNorm","getNormalMatrix","oTangent","resolveVertexTangent","wTangent","wBinormal","cross","fragmentShader","renderPassType","needFragmentColor","float","uniform","needFragmentColorInput","albedo","calculateAlbedoColor","vertexColor","getVertexColor","normalInfo","calculateNormalAndTBN","$inputs","viewVec","calculateViewVector","SCENE_STORE_ROUGHNESS","SCENE_STORE_NORMAL","outRoughness","writeSSSDiffuse","SSS_STORE_DIFFUSE","writeSSSTransmission","sssDiffuse","sssTransmission","litColor","PBRLight","normal","TBN","undefined","writeSSSProfile","SSS_STORE_PROFILE","sssProfile","buildSubsurfaceProfile","sssParams","outputFragmentColor","a","applyUniformValues","bindGroup","ctx","pass","profile","setValue","slot","scale","strength","presetIndex","_createHash","hasExplicitTransmissionAuthoring","transmissionTexture","thicknessTexture","sssMask","sssScatterSoftness","sssTransmissionMask","sssTransmissionAuthor","sssThicknessScale","clamp","zThicknessFactor","sssThinAuthorMask","sub","subsurfaceTexture","sssTexel","sampleSubsurfaceTexture","r","g","sampleTransmissionTexture","sssThicknessSample","sampleThicknessTexture","mix","sssAuthoredTransmissionMask","max","sssScatterStrengthMask","sssScatterWidthMask","sssStrength","sssWidthBase","sssWidth","sssProfileFallbackMask","sssSlotEncoded","sssPresetEncoded"],"mappings":"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"}
@@ -71,7 +71,7 @@ import { RENDER_PASS_TYPE_LIGHT, MaterialVaryingFlags } from '../values.js';
71
71
  if (this.drawContext.renderPass.type === RENDER_PASS_TYPE_LIGHT) {
72
72
  scope.$l.normalInfo = this.calculateNormalAndTBN(scope, scope.$inputs.worldPos, scope.$inputs.wNorm, scope.$inputs.wTangent, scope.$inputs.wBinormal);
73
73
  scope.$l.viewVec = this.calculateViewVector(scope, scope.$inputs.worldPos);
74
- if (this.drawContext.materialFlags & MaterialVaryingFlags.SSR_STORE_ROUGHNESS) {
74
+ if (this.drawContext.materialFlags & (MaterialVaryingFlags.SCENE_STORE_ROUGHNESS | MaterialVaryingFlags.SCENE_STORE_NORMAL)) {
75
75
  scope.$l.outRoughness = pb.vec4();
76
76
  scope.$l.litColor = this.PBRLight(scope, scope.$inputs.worldPos, scope.normalInfo.normal, scope.viewVec, scope.albedo, scope.normalInfo.TBN, scope.outRoughness);
77
77
  /*
@@ -1 +1 @@
1
- {"version":3,"file":"pbrsg.js","sources":["../../src/material/pbrsg.ts"],"sourcesContent":["import { MeshMaterial, applyMaterialMixins } from './meshmaterial';\r\nimport { mixinVertexColor } from './mixins/vertexcolor';\r\nimport type { PBFunctionScope } from '@zephyr3d/device';\r\nimport { mixinPBRSpecularGlossness } from './mixins/lightmodel/pbrspecularglossness';\r\nimport { ShaderHelper } from './shader/helper';\r\nimport { MaterialVaryingFlags, RENDER_PASS_TYPE_LIGHT } from '../values';\r\nimport type { Clonable } from '@zephyr3d/base';\r\n\r\n/**\r\n * PBRSpecularGlossinessMaterial class\r\n * @public\r\n */\r\nexport class PBRSpecularGlossinessMaterial\r\n extends applyMaterialMixins(MeshMaterial, mixinPBRSpecularGlossness, mixinVertexColor)\r\n implements Clonable<PBRSpecularGlossinessMaterial>\r\n{\r\n /** @internal */\r\n private static readonly FEATURE_VERTEX_NORMAL = this.defineFeature();\r\n /** @internal */\r\n private static readonly FEATURE_VERTEX_TANGENT = this.defineFeature();\r\n /**\r\n * Creates an instance of PBRSpecularGlossinessMaterial class\r\n */\r\n constructor() {\r\n super();\r\n this.useFeature(PBRSpecularGlossinessMaterial.FEATURE_VERTEX_NORMAL, true);\r\n }\r\n clone() {\r\n const other = new PBRSpecularGlossinessMaterial();\r\n other.copyFrom(this);\r\n return other;\r\n }\r\n copyFrom(other: this) {\r\n super.copyFrom(other);\r\n this.vertexNormal = other.vertexNormal;\r\n this.vertexTangent = other.vertexTangent;\r\n }\r\n /** true if vertex normal attribute presents */\r\n get vertexNormal() {\r\n return this.featureUsed<boolean>(PBRSpecularGlossinessMaterial.FEATURE_VERTEX_NORMAL);\r\n }\r\n set vertexNormal(val) {\r\n this.useFeature(PBRSpecularGlossinessMaterial.FEATURE_VERTEX_NORMAL, !!val);\r\n }\r\n /** true if vertex normal attribute presents */\r\n get vertexTangent() {\r\n return this.featureUsed<boolean>(PBRSpecularGlossinessMaterial.FEATURE_VERTEX_TANGENT);\r\n }\r\n set vertexTangent(val) {\r\n this.useFeature(PBRSpecularGlossinessMaterial.FEATURE_VERTEX_TANGENT, !!val);\r\n }\r\n vertexShader(scope: PBFunctionScope) {\r\n super.vertexShader(scope);\r\n const pb = scope.$builder;\r\n const worldMatrix = ShaderHelper.getWorldMatrix(scope);\r\n scope.$l.oPos = ShaderHelper.resolveVertexPosition(scope);\r\n scope.$outputs.worldPos = pb.mul(worldMatrix, pb.vec4(scope.oPos, 1)).xyz;\r\n scope.$l.csPos = pb.mul(ShaderHelper.getViewProjectionMatrix(scope), pb.vec4(scope.$outputs.worldPos, 1));\r\n ShaderHelper.setClipSpacePosition(scope, scope.csPos);\r\n if (this.transmission) {\r\n scope.$outputs.screenUV = pb.add(pb.mul(pb.div(scope.csPos.xy, scope.csPos.w), 0.5), pb.vec2(0.5));\r\n scope.$outputs.modelScale = pb.vec3(\r\n pb.length(worldMatrix[0].xyz),\r\n pb.length(worldMatrix[1].xyz),\r\n pb.length(worldMatrix[2].xyz)\r\n );\r\n }\r\n if (this.vertexNormal) {\r\n scope.$l.oNorm = ShaderHelper.resolveVertexNormal(scope);\r\n scope.$outputs.wNorm = pb.mul(ShaderHelper.getNormalMatrix(scope), pb.vec4(scope.oNorm, 0)).xyz;\r\n if (this.vertexTangent) {\r\n scope.$l.oTangent = ShaderHelper.resolveVertexTangent(scope);\r\n scope.$outputs.wTangent = pb.mul(\r\n ShaderHelper.getNormalMatrix(scope),\r\n pb.vec4(scope.oTangent.xyz, 0)\r\n ).xyz;\r\n scope.$outputs.wBinormal = pb.mul(\r\n pb.cross(scope.$outputs.wNorm, scope.$outputs.wTangent),\r\n scope.oTangent.w\r\n );\r\n }\r\n }\r\n }\r\n fragmentShader(scope: PBFunctionScope) {\r\n super.fragmentShader(scope);\r\n const pb = scope.$builder;\r\n if (this.needFragmentColorInput()) {\r\n scope.$l.albedo = this.calculateAlbedoColor(scope);\r\n if (this.vertexColor) {\r\n scope.albedo = pb.mul(scope.albedo, this.getVertexColor(scope));\r\n }\r\n if (this.drawContext.renderPass!.type === RENDER_PASS_TYPE_LIGHT) {\r\n scope.$l.normalInfo = this.calculateNormalAndTBN(\r\n scope,\r\n scope.$inputs.worldPos,\r\n scope.$inputs.wNorm,\r\n scope.$inputs.wTangent,\r\n scope.$inputs.wBinormal\r\n );\r\n scope.$l.viewVec = this.calculateViewVector(scope, scope.$inputs.worldPos);\r\n if (this.drawContext.materialFlags & MaterialVaryingFlags.SSR_STORE_ROUGHNESS) {\r\n scope.$l.outRoughness = pb.vec4();\r\n scope.$l.litColor = this.PBRLight(\r\n scope,\r\n scope.$inputs.worldPos,\r\n scope.normalInfo.normal,\r\n scope.viewVec,\r\n scope.albedo,\r\n scope.normalInfo.TBN,\r\n scope.outRoughness\r\n );\r\n /*\r\n scope.outRoughness = pb.vec4(\r\n pb.add(pb.mul(scope.normalInfo.normal, 0.5), pb.vec3(0.5)),\r\n scope.outRoughness.a\r\n );\r\n */\r\n this.outputFragmentColor(\r\n scope,\r\n scope.$inputs.worldPos,\r\n pb.vec4(scope.litColor, scope.albedo.a),\r\n scope.outRoughness,\r\n pb.vec4(pb.add(pb.mul(scope.normalInfo.normal, 0.5), pb.vec3(0.5)), 1)\r\n );\r\n } else {\r\n scope.$l.litColor = this.PBRLight(\r\n scope,\r\n scope.$inputs.worldPos,\r\n scope.normalInfo.normal,\r\n scope.viewVec,\r\n scope.albedo,\r\n scope.normalInfo.TBN\r\n );\r\n this.outputFragmentColor(scope, scope.$inputs.worldPos, pb.vec4(scope.litColor, scope.albedo.a));\r\n }\r\n } else {\r\n this.outputFragmentColor(scope, scope.$inputs.worldPos, scope.albedo);\r\n }\r\n } else {\r\n this.outputFragmentColor(scope, scope.$inputs.worldPos, null);\r\n }\r\n }\r\n}\r\n"],"names":["PBRSpecularGlossinessMaterial","applyMaterialMixins","MeshMaterial","mixinPBRSpecularGlossness","mixinVertexColor","FEATURE_VERTEX_NORMAL","defineFeature","FEATURE_VERTEX_TANGENT","useFeature","clone","other","copyFrom","vertexNormal","vertexTangent","featureUsed","val","vertexShader","scope","pb","$builder","worldMatrix","ShaderHelper","getWorldMatrix","$l","oPos","resolveVertexPosition","$outputs","worldPos","mul","vec4","xyz","csPos","getViewProjectionMatrix","setClipSpacePosition","transmission","screenUV","add","div","xy","w","vec2","modelScale","vec3","length","oNorm","resolveVertexNormal","wNorm","getNormalMatrix","oTangent","resolveVertexTangent","wTangent","wBinormal","cross","fragmentShader","needFragmentColorInput","albedo","calculateAlbedoColor","vertexColor","getVertexColor","drawContext","renderPass","type","RENDER_PASS_TYPE_LIGHT","normalInfo","calculateNormalAndTBN","$inputs","viewVec","calculateViewVector","materialFlags","MaterialVaryingFlags","SSR_STORE_ROUGHNESS","outRoughness","litColor","PBRLight","normal","TBN","outputFragmentColor","a"],"mappings":"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"}
1
+ {"version":3,"file":"pbrsg.js","sources":["../../src/material/pbrsg.ts"],"sourcesContent":["import { MeshMaterial, applyMaterialMixins } from './meshmaterial';\r\nimport { mixinVertexColor } from './mixins/vertexcolor';\r\nimport type { PBFunctionScope } from '@zephyr3d/device';\r\nimport { mixinPBRSpecularGlossness } from './mixins/lightmodel/pbrspecularglossness';\r\nimport { ShaderHelper } from './shader/helper';\r\nimport { MaterialVaryingFlags, RENDER_PASS_TYPE_LIGHT } from '../values';\r\nimport type { Clonable } from '@zephyr3d/base';\r\n\r\n/**\r\n * PBRSpecularGlossinessMaterial class\r\n * @public\r\n */\r\nexport class PBRSpecularGlossinessMaterial\r\n extends applyMaterialMixins(MeshMaterial, mixinPBRSpecularGlossness, mixinVertexColor)\r\n implements Clonable<PBRSpecularGlossinessMaterial>\r\n{\r\n /** @internal */\r\n private static readonly FEATURE_VERTEX_NORMAL = this.defineFeature();\r\n /** @internal */\r\n private static readonly FEATURE_VERTEX_TANGENT = this.defineFeature();\r\n /**\r\n * Creates an instance of PBRSpecularGlossinessMaterial class\r\n */\r\n constructor() {\r\n super();\r\n this.useFeature(PBRSpecularGlossinessMaterial.FEATURE_VERTEX_NORMAL, true);\r\n }\r\n clone() {\r\n const other = new PBRSpecularGlossinessMaterial();\r\n other.copyFrom(this);\r\n return other;\r\n }\r\n copyFrom(other: this) {\r\n super.copyFrom(other);\r\n this.vertexNormal = other.vertexNormal;\r\n this.vertexTangent = other.vertexTangent;\r\n }\r\n /** true if vertex normal attribute presents */\r\n get vertexNormal() {\r\n return this.featureUsed<boolean>(PBRSpecularGlossinessMaterial.FEATURE_VERTEX_NORMAL);\r\n }\r\n set vertexNormal(val) {\r\n this.useFeature(PBRSpecularGlossinessMaterial.FEATURE_VERTEX_NORMAL, !!val);\r\n }\r\n /** true if vertex normal attribute presents */\r\n get vertexTangent() {\r\n return this.featureUsed<boolean>(PBRSpecularGlossinessMaterial.FEATURE_VERTEX_TANGENT);\r\n }\r\n set vertexTangent(val) {\r\n this.useFeature(PBRSpecularGlossinessMaterial.FEATURE_VERTEX_TANGENT, !!val);\r\n }\r\n vertexShader(scope: PBFunctionScope) {\r\n super.vertexShader(scope);\r\n const pb = scope.$builder;\r\n const worldMatrix = ShaderHelper.getWorldMatrix(scope);\r\n scope.$l.oPos = ShaderHelper.resolveVertexPosition(scope);\r\n scope.$outputs.worldPos = pb.mul(worldMatrix, pb.vec4(scope.oPos, 1)).xyz;\r\n scope.$l.csPos = pb.mul(ShaderHelper.getViewProjectionMatrix(scope), pb.vec4(scope.$outputs.worldPos, 1));\r\n ShaderHelper.setClipSpacePosition(scope, scope.csPos);\r\n if (this.transmission) {\r\n scope.$outputs.screenUV = pb.add(pb.mul(pb.div(scope.csPos.xy, scope.csPos.w), 0.5), pb.vec2(0.5));\r\n scope.$outputs.modelScale = pb.vec3(\r\n pb.length(worldMatrix[0].xyz),\r\n pb.length(worldMatrix[1].xyz),\r\n pb.length(worldMatrix[2].xyz)\r\n );\r\n }\r\n if (this.vertexNormal) {\r\n scope.$l.oNorm = ShaderHelper.resolveVertexNormal(scope);\r\n scope.$outputs.wNorm = pb.mul(ShaderHelper.getNormalMatrix(scope), pb.vec4(scope.oNorm, 0)).xyz;\r\n if (this.vertexTangent) {\r\n scope.$l.oTangent = ShaderHelper.resolveVertexTangent(scope);\r\n scope.$outputs.wTangent = pb.mul(\r\n ShaderHelper.getNormalMatrix(scope),\r\n pb.vec4(scope.oTangent.xyz, 0)\r\n ).xyz;\r\n scope.$outputs.wBinormal = pb.mul(\r\n pb.cross(scope.$outputs.wNorm, scope.$outputs.wTangent),\r\n scope.oTangent.w\r\n );\r\n }\r\n }\r\n }\r\n fragmentShader(scope: PBFunctionScope) {\r\n super.fragmentShader(scope);\r\n const pb = scope.$builder;\r\n if (this.needFragmentColorInput()) {\r\n scope.$l.albedo = this.calculateAlbedoColor(scope);\r\n if (this.vertexColor) {\r\n scope.albedo = pb.mul(scope.albedo, this.getVertexColor(scope));\r\n }\r\n if (this.drawContext.renderPass!.type === RENDER_PASS_TYPE_LIGHT) {\r\n scope.$l.normalInfo = this.calculateNormalAndTBN(\r\n scope,\r\n scope.$inputs.worldPos,\r\n scope.$inputs.wNorm,\r\n scope.$inputs.wTangent,\r\n scope.$inputs.wBinormal\r\n );\r\n scope.$l.viewVec = this.calculateViewVector(scope, scope.$inputs.worldPos);\r\n if (\r\n this.drawContext.materialFlags &\r\n (MaterialVaryingFlags.SCENE_STORE_ROUGHNESS | MaterialVaryingFlags.SCENE_STORE_NORMAL)\r\n ) {\r\n scope.$l.outRoughness = pb.vec4();\r\n scope.$l.litColor = this.PBRLight(\r\n scope,\r\n scope.$inputs.worldPos,\r\n scope.normalInfo.normal,\r\n scope.viewVec,\r\n scope.albedo,\r\n scope.normalInfo.TBN,\r\n scope.outRoughness\r\n );\r\n /*\r\n scope.outRoughness = pb.vec4(\r\n pb.add(pb.mul(scope.normalInfo.normal, 0.5), pb.vec3(0.5)),\r\n scope.outRoughness.a\r\n );\r\n */\r\n this.outputFragmentColor(\r\n scope,\r\n scope.$inputs.worldPos,\r\n pb.vec4(scope.litColor, scope.albedo.a),\r\n scope.outRoughness,\r\n pb.vec4(pb.add(pb.mul(scope.normalInfo.normal, 0.5), pb.vec3(0.5)), 1)\r\n );\r\n } else {\r\n scope.$l.litColor = this.PBRLight(\r\n scope,\r\n scope.$inputs.worldPos,\r\n scope.normalInfo.normal,\r\n scope.viewVec,\r\n scope.albedo,\r\n scope.normalInfo.TBN\r\n );\r\n this.outputFragmentColor(scope, scope.$inputs.worldPos, pb.vec4(scope.litColor, scope.albedo.a));\r\n }\r\n } else {\r\n this.outputFragmentColor(scope, scope.$inputs.worldPos, scope.albedo);\r\n }\r\n } else {\r\n this.outputFragmentColor(scope, scope.$inputs.worldPos, null);\r\n }\r\n }\r\n}\r\n"],"names":["PBRSpecularGlossinessMaterial","applyMaterialMixins","MeshMaterial","mixinPBRSpecularGlossness","mixinVertexColor","FEATURE_VERTEX_NORMAL","defineFeature","FEATURE_VERTEX_TANGENT","useFeature","clone","other","copyFrom","vertexNormal","vertexTangent","featureUsed","val","vertexShader","scope","pb","$builder","worldMatrix","ShaderHelper","getWorldMatrix","$l","oPos","resolveVertexPosition","$outputs","worldPos","mul","vec4","xyz","csPos","getViewProjectionMatrix","setClipSpacePosition","transmission","screenUV","add","div","xy","w","vec2","modelScale","vec3","length","oNorm","resolveVertexNormal","wNorm","getNormalMatrix","oTangent","resolveVertexTangent","wTangent","wBinormal","cross","fragmentShader","needFragmentColorInput","albedo","calculateAlbedoColor","vertexColor","getVertexColor","drawContext","renderPass","type","RENDER_PASS_TYPE_LIGHT","normalInfo","calculateNormalAndTBN","$inputs","viewVec","calculateViewVector","materialFlags","MaterialVaryingFlags","SCENE_STORE_ROUGHNESS","SCENE_STORE_NORMAL","outRoughness","litColor","PBRLight","normal","TBN","outputFragmentColor","a"],"mappings":"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"}