@zephyr3d/scene 0.8.1 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/animation/animationset.js +563 -128
- package/dist/animation/animationset.js.map +1 -1
- package/dist/animation/cloth/gpu_cloth_system.js +2516 -0
- package/dist/animation/cloth/gpu_cloth_system.js.map +1 -0
- package/dist/animation/fixed_geometry_cache_track.js +138 -0
- package/dist/animation/fixed_geometry_cache_track.js.map +1 -0
- package/dist/animation/geometry_cache_utils.js +120 -0
- package/dist/animation/geometry_cache_utils.js.map +1 -0
- package/dist/animation/ik_modifier.js +9 -1
- package/dist/animation/ik_modifier.js.map +1 -1
- package/dist/animation/joint_dynamics/collision.js +469 -0
- package/dist/animation/joint_dynamics/collision.js.map +1 -0
- package/dist/animation/joint_dynamics/constraints.js +329 -0
- package/dist/animation/joint_dynamics/constraints.js.map +1 -0
- package/dist/animation/joint_dynamics/controller.js +699 -0
- package/dist/animation/joint_dynamics/controller.js.map +1 -0
- package/dist/animation/joint_dynamics/joint_dynamics_system.js +393 -0
- package/dist/animation/joint_dynamics/joint_dynamics_system.js.map +1 -0
- package/dist/animation/joint_dynamics/solver.js +794 -0
- package/dist/animation/joint_dynamics/solver.js.map +1 -0
- package/dist/animation/joint_dynamics/types.js +19 -0
- package/dist/animation/joint_dynamics/types.js.map +1 -0
- package/dist/animation/joint_dynamics/vrm_spring_bone.js +46 -0
- package/dist/animation/joint_dynamics/vrm_spring_bone.js.map +1 -0
- package/dist/animation/joint_dynamics_modifier.js +51 -0
- package/dist/animation/joint_dynamics_modifier.js.map +1 -0
- package/dist/animation/pca_geometry_cache_track.js +222 -0
- package/dist/animation/pca_geometry_cache_track.js.map +1 -0
- package/dist/animation/skeleton.js +1907 -3
- package/dist/animation/skeleton.js.map +1 -1
- package/dist/animation/skeleton_modifier.js +3 -5
- package/dist/animation/skeleton_modifier.js.map +1 -1
- package/dist/animation/spring/multi_chain_spring_system.js +2 -0
- package/dist/animation/spring/multi_chain_spring_system.js.map +1 -1
- package/dist/animation/spring/spring_chain.js +3 -2
- package/dist/animation/spring/spring_chain.js.map +1 -1
- package/dist/animation/spring/spring_collider.js +35 -5
- package/dist/animation/spring/spring_collider.js.map +1 -1
- package/dist/animation/spring/spring_particle.js +1 -0
- package/dist/animation/spring/spring_particle.js.map +1 -1
- package/dist/animation/spring/spring_system.js +325 -28
- package/dist/animation/spring/spring_system.js.map +1 -1
- package/dist/animation/spring2/collision.js +469 -0
- package/dist/animation/spring2/collision.js.map +1 -0
- package/dist/animation/spring2/constraints.js +329 -0
- package/dist/animation/spring2/constraints.js.map +1 -0
- package/dist/animation/spring2/controller.js +434 -0
- package/dist/animation/spring2/controller.js.map +1 -0
- package/dist/animation/spring2/math.js +16 -0
- package/dist/animation/spring2/math.js.map +1 -0
- package/dist/animation/spring2/solver.js +624 -0
- package/dist/animation/spring2/solver.js.map +1 -0
- package/dist/animation/spring2/spring_system.js +118 -0
- package/dist/animation/spring2/spring_system.js.map +1 -0
- package/dist/animation/spring2/types.js +19 -0
- package/dist/animation/spring2/types.js.map +1 -0
- package/dist/animation/spring_modifier.js +17 -1
- package/dist/animation/spring_modifier.js.map +1 -1
- package/dist/app/engine.js +42 -15
- package/dist/app/engine.js.map +1 -1
- package/dist/app/runtimescript.js +132 -1
- package/dist/app/runtimescript.js.map +1 -1
- package/dist/app/screen.js +3 -3
- package/dist/app/screen.js.map +1 -1
- package/dist/app/scriptingsystem.js +69 -37
- package/dist/app/scriptingsystem.js.map +1 -1
- package/dist/app/scriptregistry.js +157 -146
- package/dist/app/scriptregistry.js.map +1 -1
- package/dist/asset/assetmanager.js +2 -1
- package/dist/asset/assetmanager.js.map +1 -1
- package/dist/asset/loaders/zabc/zabc_loader.js +570 -0
- package/dist/asset/loaders/zabc/zabc_loader.js.map +1 -0
- package/dist/asset/model.js +192 -0
- package/dist/asset/model.js.map +1 -1
- package/dist/camera/base.js +26 -7
- package/dist/camera/base.js.map +1 -1
- package/dist/camera/camera.js +146 -24
- package/dist/camera/camera.js.map +1 -1
- package/dist/camera/fps.js +2 -2
- package/dist/camera/fps.js.map +1 -1
- package/dist/camera/orbit.js +2 -2
- package/dist/camera/orbit.js.map +1 -1
- package/dist/index.d.ts +11701 -8506
- package/dist/index.js +29 -8
- package/dist/index.js.map +1 -1
- package/dist/material/lambert.js +1 -1
- package/dist/material/lambert.js.map +1 -1
- package/dist/material/material.js +9 -3
- package/dist/material/material.js.map +1 -1
- package/dist/material/meshmaterial.js +54 -7
- package/dist/material/meshmaterial.js.map +1 -1
- package/dist/material/mixins/lightmodel/blinnphong.js +17 -7
- package/dist/material/mixins/lightmodel/blinnphong.js.map +1 -1
- package/dist/material/mixins/lightmodel/lambert.js +7 -2
- package/dist/material/mixins/lightmodel/lambert.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrblueprintmixin.js +108 -16
- package/dist/material/mixins/lightmodel/pbrblueprintmixin.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +222 -14
- package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrspecularglossness.js +24 -12
- package/dist/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -1
- package/dist/material/mixins/lit.js +11 -8
- package/dist/material/mixins/lit.js.map +1 -1
- package/dist/material/mixins/pbr/common.js +72 -5
- package/dist/material/mixins/pbr/common.js.map +1 -1
- package/dist/material/pbrblueprint.js +148 -1
- package/dist/material/pbrblueprint.js.map +1 -1
- package/dist/material/pbrmr.js +125 -2
- package/dist/material/pbrmr.js.map +1 -1
- package/dist/material/shader/helper.js +10 -4
- package/dist/material/shader/helper.js.map +1 -1
- package/dist/material/water.js +2 -2
- package/dist/material/water.js.map +1 -1
- package/dist/posteffect/coloradjust.js +145 -0
- package/dist/posteffect/coloradjust.js.map +1 -0
- package/dist/posteffect/taa.js +68 -32
- package/dist/posteffect/taa.js.map +1 -1
- package/dist/render/cluster_light.js +17 -12
- package/dist/render/cluster_light.js.map +1 -1
- package/dist/render/deferredlightpass.js +510 -0
- package/dist/render/deferredlightpass.js.map +1 -0
- package/dist/render/deferredshadowlightpass.js +428 -0
- package/dist/render/deferredshadowlightpass.js.map +1 -0
- package/dist/render/drawable.js.map +1 -1
- package/dist/render/drawable_mixin.js +21 -12
- package/dist/render/drawable_mixin.js.map +1 -1
- package/dist/render/envlight.js +20 -22
- package/dist/render/envlight.js.map +1 -1
- package/dist/render/gbufferpass.js +50 -0
- package/dist/render/gbufferpass.js.map +1 -0
- package/dist/render/lightpass.js +1 -2
- package/dist/render/lightpass.js.map +1 -1
- package/dist/render/primitive.js +1 -1
- package/dist/render/primitive.js.map +1 -1
- package/dist/render/render_queue.js +3 -2
- package/dist/render/render_queue.js.map +1 -1
- package/dist/render/renderer.js +5 -358
- package/dist/render/renderer.js.map +1 -1
- package/dist/render/rendergraph/executor.js +15 -12
- package/dist/render/rendergraph/executor.js.map +1 -1
- package/dist/render/rendergraph/forward_plus_builder.js +144 -88
- package/dist/render/rendergraph/forward_plus_builder.js.map +1 -1
- package/dist/render/rendergraph/history_resource_manager.js +178 -0
- package/dist/render/rendergraph/history_resource_manager.js.map +1 -0
- package/dist/render/rendergraph/rendergraph.js +12 -1
- package/dist/render/rendergraph/rendergraph.js.map +1 -1
- package/dist/render/rendergraph/types.js +2 -2
- package/dist/render/rendergraph/types.js.map +1 -1
- package/dist/render/sky.js +26 -9
- package/dist/render/sky.js.map +1 -1
- package/dist/scene/basesprite.js +4 -3
- package/dist/scene/basesprite.js.map +1 -1
- package/dist/scene/batchgroup.js +4 -4
- package/dist/scene/environment.js +7 -4
- package/dist/scene/environment.js.map +1 -1
- package/dist/scene/light.js +184 -18
- package/dist/scene/light.js.map +1 -1
- package/dist/scene/mesh.js +30 -0
- package/dist/scene/mesh.js.map +1 -1
- package/dist/scene/particlesys.js +3 -2
- package/dist/scene/particlesys.js.map +1 -1
- package/dist/scene/raycast_visitor.js +29 -3
- package/dist/scene/raycast_visitor.js.map +1 -1
- package/dist/scene/scene.js +86 -19
- package/dist/scene/scene.js.map +1 -1
- package/dist/scene/scene_node.js +87 -31
- package/dist/scene/scene_node.js.map +1 -1
- package/dist/scene/script_attachment.js +59 -0
- package/dist/scene/script_attachment.js.map +1 -0
- package/dist/scene/terrain-cm/grass.js +3 -2
- package/dist/scene/terrain-cm/grass.js.map +1 -1
- package/dist/scene/terrain-cm/terrain-cm.js +4 -3
- package/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
- package/dist/scene/water.js +3 -2
- package/dist/scene/water.js.map +1 -1
- package/dist/shaders/shadow.js +2 -2
- package/dist/shaders/shadow.js.map +1 -1
- package/dist/shadow/shadowmapper.js +74 -4
- package/dist/shadow/shadowmapper.js.map +1 -1
- package/dist/shapes/box.js +163 -0
- package/dist/shapes/box.js.map +1 -1
- package/dist/shapes/capsule.js +216 -0
- package/dist/shapes/capsule.js.map +1 -0
- package/dist/shapes/cylinder.js +91 -0
- package/dist/shapes/cylinder.js.map +1 -1
- package/dist/shapes/plane.js +32 -0
- package/dist/shapes/plane.js.map +1 -1
- package/dist/shapes/tetrahedron.js +211 -0
- package/dist/shapes/tetrahedron.js.map +1 -1
- package/dist/shapes/torus.js +173 -0
- package/dist/shapes/torus.js.map +1 -1
- package/dist/utility/blueprint/common/math.js +111 -1
- package/dist/utility/blueprint/common/math.js.map +1 -1
- package/dist/utility/blueprint/material/inputs.js +235 -1
- package/dist/utility/blueprint/material/inputs.js.map +1 -1
- package/dist/utility/blueprint/material/ir.js +154 -10
- package/dist/utility/blueprint/material/ir.js.map +1 -1
- package/dist/utility/blueprint/material/texture.js +273 -19
- package/dist/utility/blueprint/material/texture.js.map +1 -1
- package/dist/utility/serialization/json.js +12 -2
- package/dist/utility/serialization/json.js.map +1 -1
- package/dist/utility/serialization/manager.js +30 -11
- package/dist/utility/serialization/manager.js.map +1 -1
- package/dist/utility/serialization/scene/animation.js +250 -7
- package/dist/utility/serialization/scene/animation.js.map +1 -1
- package/dist/utility/serialization/scene/batch.js +4 -2
- package/dist/utility/serialization/scene/batch.js.map +1 -1
- package/dist/utility/serialization/scene/camera.js +154 -2
- package/dist/utility/serialization/scene/camera.js.map +1 -1
- package/dist/utility/serialization/scene/cloth_script.js +834 -0
- package/dist/utility/serialization/scene/cloth_script.js.map +1 -0
- package/dist/utility/serialization/scene/common.js +7 -0
- package/dist/utility/serialization/scene/common.js.map +1 -1
- package/dist/utility/serialization/scene/light.js +120 -4
- package/dist/utility/serialization/scene/light.js.map +1 -1
- package/dist/utility/serialization/scene/material.js +453 -1
- package/dist/utility/serialization/scene/material.js.map +1 -1
- package/dist/utility/serialization/scene/mesh.js +4 -2
- package/dist/utility/serialization/scene/mesh.js.map +1 -1
- package/dist/utility/serialization/scene/node.js +298 -10
- package/dist/utility/serialization/scene/node.js.map +1 -1
- package/dist/utility/serialization/scene/particle.js +4 -2
- package/dist/utility/serialization/scene/particle.js.map +1 -1
- package/dist/utility/serialization/scene/primitive.js +100 -3
- package/dist/utility/serialization/scene/primitive.js.map +1 -1
- package/dist/utility/serialization/scene/scene.js +130 -3
- package/dist/utility/serialization/scene/scene.js.map +1 -1
- package/dist/utility/serialization/scene/script.js +66 -0
- package/dist/utility/serialization/scene/script.js.map +1 -0
- package/dist/utility/serialization/scene/spring_script.js +596 -0
- package/dist/utility/serialization/scene/spring_script.js.map +1 -0
- package/dist/utility/serialization/scene/sprite.js +5 -3
- package/dist/utility/serialization/scene/sprite.js.map +1 -1
- package/dist/utility/serialization/scene/terrain.js +4 -2
- package/dist/utility/serialization/scene/terrain.js.map +1 -1
- package/dist/utility/serialization/scene/water.js +4 -2
- package/dist/utility/serialization/scene/water.js.map +1 -1
- package/dist/utility/serialization/types.js.map +1 -1
- package/dist/values.js +5 -1
- package/dist/values.js.map +1 -1
- package/package.json +3 -3
|
@@ -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 { PBFunctionScope } from '@zephyr3d/device';\r\nimport { mixinPBRMetallicRoughness } from './mixins/lightmodel/pbrmetallicroughness';\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 * PBRMetallicRoughnessMaterial class\r\n * @public\r\n */\r\nexport class PBRMetallicRoughnessMaterial\r\n extends applyMaterialMixins(MeshMaterial, mixinPBRMetallicRoughness, mixinVertexColor)\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 /**\r\n * Creates an instance of PBRMetallicRoughnessMaterial class\r\n */\r\n constructor() {\r\n super();\r\n this.useFeature(PBRMetallicRoughnessMaterial.FEATURE_VERTEX_NORMAL, true);\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 }\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 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.needFragmentColor()) {\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":["PBRMetallicRoughnessMaterial","applyMaterialMixins","MeshMaterial","mixinPBRMetallicRoughness","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","needFragmentColor","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":"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, Immutable } from '@zephyr3d/base';\r\nimport { Vector3 } from '@zephyr3d/base';\r\nimport type { DrawContext } from '../render';\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 /** @internal */\r\n private static readonly FEATURE_SUBSURFACE_SCATTERING = this.defineFeature();\r\n /** @internal */\r\n private static readonly SUBSURFACE_COLOR_UNIFORM = this.defineInstanceUniform(\r\n 'subsurfaceColor',\r\n 'rgb',\r\n 'SubsurfaceColor'\r\n );\r\n /** @internal */\r\n private static readonly SUBSURFACE_SCALE_UNIFORM = this.defineInstanceUniform(\r\n 'subsurfaceScale',\r\n 'float',\r\n 'SubsurfaceScale'\r\n );\r\n /** @internal */\r\n private static readonly SUBSURFACE_POWER_UNIFORM = this.defineInstanceUniform(\r\n 'subsurfacePower',\r\n 'float',\r\n 'SubsurfacePower'\r\n );\r\n /** @internal */\r\n private static readonly SUBSURFACE_INTENSITY_UNIFORM = this.defineInstanceUniform(\r\n 'subsurfaceIntensity',\r\n 'float',\r\n 'SubsurfaceIntensity'\r\n );\r\n private readonly _subsurfaceColor: Vector3;\r\n private _subsurfaceScale: number;\r\n private _subsurfacePower: number;\r\n private _subsurfaceIntensity: number;\r\n /**\r\n * Creates an instance of PBRMetallicRoughnessMaterial class\r\n */\r\n constructor() {\r\n super();\r\n this._subsurfaceColor = new Vector3(1, 0.3, 0.2);\r\n this._subsurfaceScale = 0.5;\r\n this._subsurfacePower = 1.5;\r\n this._subsurfaceIntensity = 0.5;\r\n this.useFeature(PBRMetallicRoughnessMaterial.FEATURE_VERTEX_NORMAL, true);\r\n this.useFeature(PBRMetallicRoughnessMaterial.FEATURE_SUBSURFACE_SCATTERING, false);\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.subsurfaceScattering = other.subsurfaceScattering;\r\n this.subsurfaceColor = other.subsurfaceColor;\r\n this.subsurfaceScale = other.subsurfaceScale;\r\n this.subsurfacePower = other.subsurfacePower;\r\n this.subsurfaceIntensity = other.subsurfaceIntensity;\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 /** true if subsurface scattering is enabled */\r\n get subsurfaceScattering() {\r\n return this.featureUsed<boolean>(PBRMetallicRoughnessMaterial.FEATURE_SUBSURFACE_SCATTERING);\r\n }\r\n set subsurfaceScattering(val) {\r\n this.useFeature(PBRMetallicRoughnessMaterial.FEATURE_SUBSURFACE_SCATTERING, !!val);\r\n }\r\n /** subsurface scattering color tint */\r\n get subsurfaceColor(): Immutable<Vector3> {\r\n return this._subsurfaceColor;\r\n }\r\n set subsurfaceColor(val: Immutable<Vector3>) {\r\n if (!val.equalsTo(this._subsurfaceColor)) {\r\n this._subsurfaceColor.set(val);\r\n this.uniformChanged();\r\n }\r\n }\r\n /** wrap factor for the scattering profile */\r\n get subsurfaceScale() {\r\n return this._subsurfaceScale;\r\n }\r\n set subsurfaceScale(val: number) {\r\n if (val !== this._subsurfaceScale) {\r\n this._subsurfaceScale = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n /** profile exponent for the scattering profile */\r\n get subsurfacePower() {\r\n return this._subsurfacePower;\r\n }\r\n set subsurfacePower(val: number) {\r\n if (val !== this._subsurfacePower) {\r\n this._subsurfacePower = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n /** final intensity of scattering contribution */\r\n get subsurfaceIntensity() {\r\n return this._subsurfaceIntensity;\r\n }\r\n set subsurfaceIntensity(val: number) {\r\n if (val !== this._subsurfaceIntensity) {\r\n this._subsurfaceIntensity = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n private getSubsurfaceColor(scope: PBInsideFunctionScope): PBShaderExp {\r\n const instancing = !!(this.drawContext.materialFlags & MaterialVaryingFlags.INSTANCING);\r\n return (instancing ? scope.$inputs.zSubsurfaceColor : scope.zSubsurfaceColor) as PBShaderExp;\r\n }\r\n private getSubsurfaceScale(scope: PBInsideFunctionScope): PBShaderExp {\r\n const instancing = !!(this.drawContext.materialFlags & MaterialVaryingFlags.INSTANCING);\r\n return (instancing ? scope.$inputs.zSubsurfaceScale : scope.zSubsurfaceScale) as PBShaderExp;\r\n }\r\n private getSubsurfacePower(scope: PBInsideFunctionScope): PBShaderExp {\r\n const instancing = !!(this.drawContext.materialFlags & MaterialVaryingFlags.INSTANCING);\r\n return (instancing ? scope.$inputs.zSubsurfacePower : scope.zSubsurfacePower) as PBShaderExp;\r\n }\r\n private getSubsurfaceIntensity(scope: PBInsideFunctionScope): PBShaderExp {\r\n const instancing = !!(this.drawContext.materialFlags & MaterialVaryingFlags.INSTANCING);\r\n return (instancing ? scope.$inputs.zSubsurfaceIntensity : scope.zSubsurfaceIntensity) 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 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 if (\r\n this.subsurfaceScattering &&\r\n this.needFragmentColor() &&\r\n this.drawContext.materialFlags & MaterialVaryingFlags.INSTANCING\r\n ) {\r\n scope.$outputs.zSubsurfaceColor = this.getInstancedUniform(\r\n scope,\r\n PBRMetallicRoughnessMaterial.SUBSURFACE_COLOR_UNIFORM\r\n );\r\n scope.$outputs.zSubsurfaceScale = this.getInstancedUniform(\r\n scope,\r\n PBRMetallicRoughnessMaterial.SUBSURFACE_SCALE_UNIFORM\r\n );\r\n scope.$outputs.zSubsurfacePower = this.getInstancedUniform(\r\n scope,\r\n PBRMetallicRoughnessMaterial.SUBSURFACE_POWER_UNIFORM\r\n );\r\n scope.$outputs.zSubsurfaceIntensity = this.getInstancedUniform(\r\n scope,\r\n PBRMetallicRoughnessMaterial.SUBSURFACE_INTENSITY_UNIFORM\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 (\r\n this.subsurfaceScattering &&\r\n this.needFragmentColor() &&\r\n this.drawContext.renderPass!.type === RENDER_PASS_TYPE_LIGHT &&\r\n !(this.drawContext.materialFlags & MaterialVaryingFlags.INSTANCING)\r\n ) {\r\n scope.zSubsurfaceColor = pb.vec3().uniform(2);\r\n scope.zSubsurfaceScale = pb.float().uniform(2);\r\n scope.zSubsurfacePower = pb.float().uniform(2);\r\n scope.zSubsurfaceIntensity = pb.float().uniform(2);\r\n }\r\n if (this.needFragmentColor()) {\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 if (this.subsurfaceScattering) {\r\n scope.$l.NoV = pb.clamp(pb.dot(scope.normalInfo.normal, scope.viewVec), 0, 1);\r\n scope.$l.wrapNdotV = pb.clamp(\r\n pb.div(\r\n pb.add(pb.sub(1, scope.NoV), this.getSubsurfaceScale(scope)),\r\n pb.add(1, this.getSubsurfaceScale(scope))\r\n ),\r\n 0,\r\n 1\r\n );\r\n scope.$l.sssFactor = pb.mul(\r\n pb.pow(scope.wrapNdotV, this.getSubsurfacePower(scope)),\r\n this.getSubsurfaceIntensity(scope)\r\n );\r\n if (this.subsurfaceTexture) {\r\n scope.sssFactor = pb.mul(scope.sssFactor, this.sampleSubsurfaceTexture(scope).r);\r\n }\r\n scope.litColor = pb.add(\r\n scope.litColor,\r\n pb.mul(scope.albedo.rgb, this.getSubsurfaceColor(scope), scope.sssFactor)\r\n );\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 if (this.subsurfaceScattering) {\r\n scope.$l.NoV = pb.clamp(pb.dot(scope.normalInfo.normal, scope.viewVec), 0, 1);\r\n scope.$l.wrapNdotV = pb.clamp(\r\n pb.div(\r\n pb.add(pb.sub(1, scope.NoV), this.getSubsurfaceScale(scope)),\r\n pb.add(1, this.getSubsurfaceScale(scope))\r\n ),\r\n 0,\r\n 1\r\n );\r\n scope.$l.sssFactor = pb.mul(\r\n pb.pow(scope.wrapNdotV, this.getSubsurfacePower(scope)),\r\n this.getSubsurfaceIntensity(scope)\r\n );\r\n if (this.subsurfaceTexture) {\r\n scope.sssFactor = pb.mul(scope.sssFactor, this.sampleSubsurfaceTexture(scope).r);\r\n }\r\n scope.litColor = pb.add(\r\n scope.litColor,\r\n pb.mul(scope.albedo.rgb, this.getSubsurfaceColor(scope), scope.sssFactor)\r\n );\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 applyUniformValues(bindGroup: BindGroup, ctx: DrawContext, pass: number) {\r\n super.applyUniformValues(bindGroup, ctx, pass);\r\n if (\r\n this.subsurfaceScattering &&\r\n this.needFragmentColor(ctx) &&\r\n ctx.renderPass!.type === RENDER_PASS_TYPE_LIGHT &&\r\n !(ctx.materialFlags & MaterialVaryingFlags.INSTANCING)\r\n ) {\r\n bindGroup.setValue('zSubsurfaceColor', this._subsurfaceColor);\r\n bindGroup.setValue('zSubsurfaceScale', this._subsurfaceScale);\r\n bindGroup.setValue('zSubsurfacePower', this._subsurfacePower);\r\n bindGroup.setValue('zSubsurfaceIntensity', this._subsurfaceIntensity);\r\n }\r\n }\r\n}\r\n"],"names":["PBRMetallicRoughnessMaterial","applyMaterialMixins","MeshMaterial","mixinPBRMetallicRoughness","mixinVertexColor","mixinTextureProps","FEATURE_VERTEX_NORMAL","defineFeature","FEATURE_VERTEX_TANGENT","FEATURE_SUBSURFACE_SCATTERING","SUBSURFACE_COLOR_UNIFORM","defineInstanceUniform","SUBSURFACE_SCALE_UNIFORM","SUBSURFACE_POWER_UNIFORM","SUBSURFACE_INTENSITY_UNIFORM","_subsurfaceColor","_subsurfaceScale","_subsurfacePower","_subsurfaceIntensity","Vector3","useFeature","transmission","transmissionFactor","thicknessFactor","attenuationColor","attenuationDistance","clone","other","copyFrom","vertexNormal","vertexTangent","subsurfaceScattering","subsurfaceColor","subsurfaceScale","subsurfacePower","subsurfaceIntensity","featureUsed","val","equalsTo","set","uniformChanged","getSubsurfaceColor","scope","instancing","drawContext","materialFlags","MaterialVaryingFlags","INSTANCING","$inputs","zSubsurfaceColor","getSubsurfaceScale","zSubsurfaceScale","getSubsurfacePower","zSubsurfacePower","getSubsurfaceIntensity","zSubsurfaceIntensity","vertexShader","pb","$builder","worldMatrix","ShaderHelper","getWorldMatrix","$l","oPos","resolveVertexPosition","$outputs","worldPos","mul","vec4","xyz","csPos","getViewProjectionMatrix","setClipSpacePosition","screenUV","add","div","xy","w","vec2","modelScale","vec3","length","oNorm","resolveVertexNormal","wNorm","getNormalMatrix","oTangent","resolveVertexTangent","wTangent","wBinormal","cross","needFragmentColor","getInstancedUniform","fragmentShader","renderPass","type","RENDER_PASS_TYPE_LIGHT","uniform","float","albedo","calculateAlbedoColor","vertexColor","getVertexColor","normalInfo","calculateNormalAndTBN","viewVec","calculateViewVector","SSR_STORE_ROUGHNESS","outRoughness","litColor","PBRLight","normal","TBN","NoV","clamp","dot","wrapNdotV","sub","sssFactor","pow","subsurfaceTexture","sampleSubsurfaceTexture","r","rgb","outputFragmentColor","a","applyUniformValues","bindGroup","ctx","pass","setValue"],"mappings":"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"}
|
|
@@ -50,6 +50,7 @@ const UNIFORM_NAME_MORPH_INFO = 'Z_UniformMorphInfo';
|
|
|
50
50
|
positionAndRange: new Vector4(),
|
|
51
51
|
directionAndCutoff: new Vector4(),
|
|
52
52
|
diffuseAndIntensity: new Vector4(),
|
|
53
|
+
extraParams: new Vector4(),
|
|
53
54
|
cascadeDistances: new Vector4(),
|
|
54
55
|
depthBiasValues: new Vector4(),
|
|
55
56
|
shadowCameraParams: new Vector4(),
|
|
@@ -200,6 +201,7 @@ const UNIFORM_NAME_MORPH_INFO = 'Z_UniformMorphInfo';
|
|
|
200
201
|
pb.vec4('positionAndRange'),
|
|
201
202
|
pb.vec4('directionAndCutoff'),
|
|
202
203
|
pb.vec4('diffuseAndIntensity'),
|
|
204
|
+
pb.vec4('extraParams'),
|
|
203
205
|
pb.vec4('cascadeDistances'),
|
|
204
206
|
pb.vec4('depthBiasValues'),
|
|
205
207
|
pb.vec4('shadowCameraParams'),
|
|
@@ -216,7 +218,7 @@ const UNIFORM_NAME_MORPH_INFO = 'Z_UniformMorphInfo';
|
|
|
216
218
|
scope.camera = cameraStruct().uniform(0);
|
|
217
219
|
scope.light = lightStruct().uniform(0);
|
|
218
220
|
if (useClusteredLighting) {
|
|
219
|
-
scope[UNIFORM_NAME_LIGHT_BUFFER] = pb.vec4[(MAX_CLUSTERED_LIGHTS + 1) *
|
|
221
|
+
scope[UNIFORM_NAME_LIGHT_BUFFER] = pb.vec4[(MAX_CLUSTERED_LIGHTS + 1) * 4]().uniformBuffer(0);
|
|
220
222
|
scope[UNIFORM_NAME_LIGHT_INDEX_TEXTURE] = (pb.getDevice().type === 'webgl' ? pb.tex2D() : pb.utex2D()).uniform(0);
|
|
221
223
|
}
|
|
222
224
|
scope[UNIFORM_NAME_BAKED_SKY_MAP] = pb.texCube().uniform(0);
|
|
@@ -726,6 +728,7 @@ const UNIFORM_NAME_MORPH_INFO = 'Z_UniformMorphInfo';
|
|
|
726
728
|
this._lightUniformShadow.positionAndRange.set(light.positionAndRange);
|
|
727
729
|
this._lightUniformShadow.directionAndCutoff.set(light.directionAndCutoff);
|
|
728
730
|
this._lightUniformShadow.diffuseAndIntensity.set(light.diffuseAndIntensity);
|
|
731
|
+
this._lightUniformShadow.extraParams.set(light.extraParams);
|
|
729
732
|
this._lightUniformShadow.cascadeDistances.set(shadowMapParams.cascadeDistances);
|
|
730
733
|
this._lightUniformShadow.depthBiasValues.set(shadowMapParams.depthBiasValues[0]);
|
|
731
734
|
this._lightUniformShadow.shadowCameraParams.set(shadowMapParams.cameraParams);
|
|
@@ -997,13 +1000,16 @@ const UNIFORM_NAME_MORPH_INFO = 'Z_UniformMorphInfo';
|
|
|
997
1000
|
}
|
|
998
1001
|
}
|
|
999
1002
|
/** @internal */ static getLightPositionAndRange(scope, lightIndex) {
|
|
1000
|
-
return scope[UNIFORM_NAME_LIGHT_BUFFER].at(scope.$builder.mul(lightIndex,
|
|
1003
|
+
return scope[UNIFORM_NAME_LIGHT_BUFFER].at(scope.$builder.mul(lightIndex, 4));
|
|
1001
1004
|
}
|
|
1002
1005
|
/** @internal */ static getLightDirectionAndCutoff(scope, lightIndex) {
|
|
1003
|
-
return scope[UNIFORM_NAME_LIGHT_BUFFER].at(scope.$builder.add(scope.$builder.mul(lightIndex,
|
|
1006
|
+
return scope[UNIFORM_NAME_LIGHT_BUFFER].at(scope.$builder.add(scope.$builder.mul(lightIndex, 4), 1));
|
|
1004
1007
|
}
|
|
1005
1008
|
/** @internal */ static getLightColorAndIntensity(scope, lightIndex) {
|
|
1006
|
-
return scope[UNIFORM_NAME_LIGHT_BUFFER].at(scope.$builder.add(scope.$builder.mul(lightIndex,
|
|
1009
|
+
return scope[UNIFORM_NAME_LIGHT_BUFFER].at(scope.$builder.add(scope.$builder.mul(lightIndex, 4), 2));
|
|
1010
|
+
}
|
|
1011
|
+
/** @internal */ static getLightExtra(scope, lightIndex) {
|
|
1012
|
+
return scope[UNIFORM_NAME_LIGHT_BUFFER].at(scope.$builder.add(scope.$builder.mul(lightIndex, 4), 3));
|
|
1007
1013
|
}
|
|
1008
1014
|
/**
|
|
1009
1015
|
* Sets the clip space position in vertex shader
|