@babylonjs/core 7.6.0 → 7.6.2
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/Animations/animation.js +7 -5
- package/Animations/animation.js.map +1 -1
- package/Bones/bone.js +1 -1
- package/Bones/bone.js.map +1 -1
- package/Cameras/camera.js +1 -1
- package/Cameras/camera.js.map +1 -1
- package/Debug/debugLayer.d.ts +4 -0
- package/Debug/debugLayer.js.map +1 -1
- package/Engines/Native/nativeInterfaces.d.ts +2 -0
- package/Engines/Native/nativeInterfaces.js.map +1 -1
- package/Engines/Processors/iShaderProcessor.d.ts +3 -1
- package/Engines/Processors/iShaderProcessor.js.map +1 -1
- package/Engines/Processors/shaderProcessor.js +2 -2
- package/Engines/Processors/shaderProcessor.js.map +1 -1
- package/Engines/WebGPU/webgpuCacheRenderPipeline.js +1 -2
- package/Engines/WebGPU/webgpuCacheRenderPipeline.js.map +1 -1
- package/Engines/WebGPU/webgpuShaderProcessor.d.ts +0 -1
- package/Engines/WebGPU/webgpuShaderProcessor.js +0 -1
- package/Engines/WebGPU/webgpuShaderProcessor.js.map +1 -1
- package/Engines/WebGPU/webgpuShaderProcessorsGLSL.js +2 -1
- package/Engines/WebGPU/webgpuShaderProcessorsGLSL.js.map +1 -1
- package/Engines/WebGPU/webgpuShaderProcessorsWGSL.d.ts +10 -1
- package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js +45 -15
- package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js.map +1 -1
- package/Engines/abstractEngine.js +7 -3
- package/Engines/abstractEngine.js.map +1 -1
- package/Engines/constants.d.ts +4 -0
- package/Engines/constants.js +4 -0
- package/Engines/constants.js.map +1 -1
- package/Engines/engine.common.js +2 -2
- package/Engines/engine.common.js.map +1 -1
- package/Engines/engine.js +5 -2
- package/Engines/engine.js.map +1 -1
- package/Engines/nativeEngine.d.ts +7 -2
- package/Engines/nativeEngine.js +25 -3
- package/Engines/nativeEngine.js.map +1 -1
- package/Engines/webgpuEngine.js +5 -9
- package/Engines/webgpuEngine.js.map +1 -1
- package/Lights/Shadows/cascadedShadowGenerator.js +4 -4
- package/Lights/Shadows/cascadedShadowGenerator.js.map +1 -1
- package/Lights/Shadows/shadowGenerator.js +11 -5
- package/Lights/Shadows/shadowGenerator.js.map +1 -1
- package/Lights/light.js +1 -1
- package/Lights/light.js.map +1 -1
- package/Lights/spotLight.js +1 -1
- package/Lights/spotLight.js.map +1 -1
- package/Materials/Node/Blocks/Dual/fogBlock.js +20 -3
- package/Materials/Node/Blocks/Dual/fogBlock.js.map +1 -1
- package/Materials/Node/Blocks/Dual/imageSourceBlock.d.ts +1 -1
- package/Materials/Node/Blocks/Dual/imageSourceBlock.js +10 -4
- package/Materials/Node/Blocks/Dual/imageSourceBlock.js.map +1 -1
- package/Materials/Node/Blocks/Dual/lightBlock.d.ts +1 -0
- package/Materials/Node/Blocks/Dual/lightBlock.js +35 -27
- package/Materials/Node/Blocks/Dual/lightBlock.js.map +1 -1
- package/Materials/Node/Blocks/Dual/textureBlock.d.ts +1 -2
- package/Materials/Node/Blocks/Dual/textureBlock.js +13 -20
- package/Materials/Node/Blocks/Dual/textureBlock.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/discardBlock.js +1 -1
- package/Materials/Node/Blocks/Fragment/discardBlock.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/fragCoordBlock.js +3 -1
- package/Materials/Node/Blocks/Fragment/fragCoordBlock.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/fragDepthBlock.js +6 -4
- package/Materials/Node/Blocks/Fragment/fragDepthBlock.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/frontFacingBlock.js +4 -1
- package/Materials/Node/Blocks/Fragment/frontFacingBlock.js.map +1 -1
- package/Materials/Node/Blocks/Input/inputBlock.js +1 -1
- package/Materials/Node/Blocks/Input/inputBlock.js.map +1 -1
- package/Materials/Node/Blocks/Vertex/instancesBlock.js +11 -2
- package/Materials/Node/Blocks/Vertex/instancesBlock.js.map +1 -1
- package/Materials/Node/Blocks/biPlanarBlock.d.ts +2 -0
- package/Materials/Node/Blocks/biPlanarBlock.js +48 -23
- package/Materials/Node/Blocks/biPlanarBlock.js.map +1 -1
- package/Materials/Node/Blocks/clampBlock.js +4 -1
- package/Materials/Node/Blocks/clampBlock.js.map +1 -1
- package/Materials/Node/Blocks/cloudBlock.js +32 -17
- package/Materials/Node/Blocks/cloudBlock.js.map +1 -1
- package/Materials/Node/Blocks/conditionalBlock.js +9 -9
- package/Materials/Node/Blocks/conditionalBlock.js.map +1 -1
- package/Materials/Node/Blocks/curveBlock.js +12 -12
- package/Materials/Node/Blocks/curveBlock.js.map +1 -1
- package/Materials/Node/Blocks/matrixBuilderBlock.js +3 -1
- package/Materials/Node/Blocks/matrixBuilderBlock.js.map +1 -1
- package/Materials/Node/Blocks/matrixTransposeBlock.js +1 -1
- package/Materials/Node/Blocks/matrixTransposeBlock.js.map +1 -1
- package/Materials/Node/Blocks/normalBlendBlock.js +2 -2
- package/Materials/Node/Blocks/normalBlendBlock.js.map +1 -1
- package/Materials/Node/Blocks/simplexPerlin3DBlock.js +14 -6
- package/Materials/Node/Blocks/simplexPerlin3DBlock.js.map +1 -1
- package/Materials/Node/Blocks/transformBlock.js +1 -1
- package/Materials/Node/Blocks/transformBlock.js.map +1 -1
- package/Materials/Node/Blocks/triPlanarBlock.d.ts +2 -0
- package/Materials/Node/Blocks/triPlanarBlock.js +33 -14
- package/Materials/Node/Blocks/triPlanarBlock.js.map +1 -1
- package/Materials/Node/Blocks/trigonometryBlock.d.ts +3 -1
- package/Materials/Node/Blocks/trigonometryBlock.js +6 -0
- package/Materials/Node/Blocks/trigonometryBlock.js.map +1 -1
- package/Materials/Node/Blocks/worleyNoise3DBlock.js +17 -8
- package/Materials/Node/Blocks/worleyNoise3DBlock.js.map +1 -1
- package/Materials/Node/nodeMaterial.d.ts +8 -3
- package/Materials/Node/nodeMaterial.js +15 -24
- package/Materials/Node/nodeMaterial.js.map +1 -1
- package/Materials/Node/nodeMaterialBlock.d.ts +1 -1
- package/Materials/Node/nodeMaterialBlock.js +1 -1
- package/Materials/Node/nodeMaterialBlock.js.map +1 -1
- package/Materials/Node/nodeMaterialBuildState.d.ts +10 -5
- package/Materials/Node/nodeMaterialBuildState.js +45 -18
- package/Materials/Node/nodeMaterialBuildState.js.map +1 -1
- package/Materials/materialHelper.functions.js +3 -3
- package/Materials/materialHelper.functions.js.map +1 -1
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.js +8 -2
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.js.map +1 -1
- package/Meshes/mesh.js +7 -7
- package/Meshes/mesh.js.map +1 -1
- package/Meshes/transformNode.js +1 -1
- package/Meshes/transformNode.js.map +1 -1
- package/Physics/v2/Plugins/havokPlugin.js +12 -4
- package/Physics/v2/Plugins/havokPlugin.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.js +3 -0
- package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.js.map +1 -1
- package/Rendering/fluidRenderer/fluidRenderingTargetRenderer.d.ts +7 -0
- package/Rendering/fluidRenderer/fluidRenderingTargetRenderer.js +18 -0
- package/Rendering/fluidRenderer/fluidRenderingTargetRenderer.js.map +1 -1
- package/Rendering/prePassRenderer.js +3 -0
- package/Rendering/prePassRenderer.js.map +1 -1
- package/Shaders/ShadersInclude/lightFragment.js +29 -29
- package/Shaders/ShadersInclude/lightFragment.js.map +1 -1
- package/Shaders/ShadersInclude/lightFragmentDeclaration.js +8 -8
- package/Shaders/ShadersInclude/lightFragmentDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/lightUboDeclaration.js +8 -8
- package/Shaders/ShadersInclude/lightUboDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/shadowsFragmentFunctions.js +1 -1
- package/Shaders/ShadersInclude/shadowsFragmentFunctions.js.map +1 -1
- package/Shaders/fluidRenderingRender.fragment.js +12 -3
- package/Shaders/fluidRenderingRender.fragment.js.map +1 -1
- package/Shaders/gaussianSplatting.vertex.js +2 -2
- package/Shaders/gaussianSplatting.vertex.js.map +1 -1
- package/Shaders/sprites.fragment.d.ts +2 -0
- package/Shaders/sprites.fragment.js +8 -1
- package/Shaders/sprites.fragment.js.map +1 -1
- package/Shaders/sprites.vertex.d.ts +2 -0
- package/Shaders/sprites.vertex.js +4 -0
- package/Shaders/sprites.vertex.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/fogFragmentDeclaration.d.ts +5 -0
- package/ShadersWGSL/ShadersInclude/fogFragmentDeclaration.js +24 -0
- package/ShadersWGSL/ShadersInclude/fogFragmentDeclaration.js.map +1 -0
- package/ShadersWGSL/ShadersInclude/lightFragment.d.ts +5 -0
- package/ShadersWGSL/ShadersInclude/lightFragment.js +279 -0
- package/ShadersWGSL/ShadersInclude/lightFragment.js.map +1 -0
- package/ShadersWGSL/ShadersInclude/lightUboDeclaration.d.ts +5 -0
- package/ShadersWGSL/ShadersInclude/lightUboDeclaration.js +70 -0
- package/ShadersWGSL/ShadersInclude/lightUboDeclaration.js.map +1 -0
- package/ShadersWGSL/ShadersInclude/lightVxUboDeclaration.d.ts +5 -0
- package/ShadersWGSL/ShadersInclude/lightVxUboDeclaration.js +33 -0
- package/ShadersWGSL/ShadersInclude/lightVxUboDeclaration.js.map +1 -0
- package/ShadersWGSL/ShadersInclude/lightsFragmentFunctions.d.ts +5 -0
- package/ShadersWGSL/ShadersInclude/lightsFragmentFunctions.js +57 -0
- package/ShadersWGSL/ShadersInclude/lightsFragmentFunctions.js.map +1 -0
- package/ShadersWGSL/ShadersInclude/morphTargetsVertex.js +1 -1
- package/ShadersWGSL/ShadersInclude/morphTargetsVertex.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/shadowsFragmentFunctions.d.ts +5 -0
- package/ShadersWGSL/ShadersInclude/shadowsFragmentFunctions.js +307 -0
- package/ShadersWGSL/ShadersInclude/shadowsFragmentFunctions.js.map +1 -0
- package/ShadersWGSL/ShadersInclude/shadowsVertex.d.ts +5 -0
- package/ShadersWGSL/ShadersInclude/shadowsVertex.js +53 -0
- package/ShadersWGSL/ShadersInclude/shadowsVertex.js.map +1 -0
- package/Sprites/spriteManager.d.ts +3 -0
- package/Sprites/spriteManager.js +11 -0
- package/Sprites/spriteManager.js.map +1 -1
- package/Sprites/spriteRenderer.d.ts +11 -3
- package/Sprites/spriteRenderer.js +49 -32
- package/Sprites/spriteRenderer.js.map +1 -1
- package/node.d.ts +2 -1
- package/node.js +5 -1
- package/node.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"matrixBuilderBlock.js","sourceRoot":"","sources":["../../../../../../dev/core/src/Materials/Node/Blocks/matrixBuilderBlock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,qCAAqC,EAAE,MAAM,gDAAgD,CAAC;AAEvG,OAAO,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAC;AAE7E,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"matrixBuilderBlock.js","sourceRoot":"","sources":["../../../../../../dev/core/src/Materials/Node/Blocks/matrixBuilderBlock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,qCAAqC,EAAE,MAAM,gDAAgD,CAAC;AAEvG,OAAO,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAC;AAE7E,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,gCAAsC;AAE/D;;GAEG;AACH,MAAM,OAAO,kBAAmB,SAAQ,iBAAiB;IACrD;;;OAGG;IACH,YAAmB,IAAY;QAC3B,KAAK,CAAC,IAAI,EAAE,wBAAwB,CAAC,OAAO,CAAC,CAAC;QAE9C,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,qCAAqC,CAAC,OAAO,CAAC,CAAC;QAC1E,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,qCAAqC,CAAC,OAAO,CAAC,CAAC;QAC1E,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,qCAAqC,CAAC,OAAO,CAAC,CAAC;QAC1E,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,qCAAqC,CAAC,OAAO,CAAC,CAAC;QAC1E,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,qCAAqC,CAAC,MAAM,CAAC,CAAC;IAChF,CAAC;IAED;;;OAGG;IACa,YAAY;QACxB,OAAO,eAAe,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,IAAW,IAAI;QACX,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,IAAW,IAAI;QACX,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,IAAW,IAAI;QACX,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,IAAW,IAAI;QACX,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,IAAW,MAAM;QACb,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC;IAEe,aAAa;QACzB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YACxB,MAAM,SAAS,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;YACzC,SAAS,CAAC,KAAK,GAAG,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAC1C,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACzC;QAED,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YACxB,MAAM,SAAS,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;YACzC,SAAS,CAAC,KAAK,GAAG,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAC1C,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACzC;QAED,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YACxB,MAAM,SAAS,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;YACzC,SAAS,CAAC,KAAK,GAAG,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAC1C,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACzC;QAED,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YACxB,MAAM,SAAS,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;YACzC,SAAS,CAAC,KAAK,GAAG,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAC1C,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACzC;IACL,CAAC;IAEkB,WAAW,CAAC,KAA6B;QACxD,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAEzB,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAChC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACvB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACvB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACvB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QAEvB,MAAM,IAAI,GAAG,KAAK,CAAC,cAAc,KAAK,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC;QAE/E,KAAK,CAAC,iBAAiB;YACnB,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC;gBAC5B,MAAM,IAAI,IAAI,IAAI,CAAC,sBAAsB,KAAK,IAAI,CAAC,sBAAsB,KAAK,IAAI,CAAC,sBAAsB,KAAK,IAAI,CAAC,sBAAsB,MAAM,CAAC;QAEpJ,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ;AAED,aAAa,CAAC,uBAAuB,EAAE,kBAAkB,CAAC,CAAC","sourcesContent":["import { NodeMaterialBlock } from \"../nodeMaterialBlock\";\r\nimport { NodeMaterialBlockConnectionPointTypes } from \"../Enums/nodeMaterialBlockConnectionPointTypes\";\r\nimport type { NodeMaterialBuildState } from \"../nodeMaterialBuildState\";\r\nimport { NodeMaterialBlockTargets } from \"../Enums/nodeMaterialBlockTargets\";\r\nimport type { NodeMaterialConnectionPoint } from \"../nodeMaterialBlockConnectionPoint\";\r\nimport { RegisterClass } from \"../../../Misc/typeStore\";\r\nimport { InputBlock } from \"./Input/inputBlock\";\r\nimport { Vector4 } from \"../../../Maths/math.vector\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\n\r\n/**\r\n * Block used to build a matrix from 4 Vector4\r\n */\r\nexport class MatrixBuilderBlock extends NodeMaterialBlock {\r\n /**\r\n * Creates a new MatrixBuilder\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name, NodeMaterialBlockTargets.Neutral);\r\n\r\n this.registerInput(\"row0\", NodeMaterialBlockConnectionPointTypes.Vector4);\r\n this.registerInput(\"row1\", NodeMaterialBlockConnectionPointTypes.Vector4);\r\n this.registerInput(\"row2\", NodeMaterialBlockConnectionPointTypes.Vector4);\r\n this.registerInput(\"row3\", NodeMaterialBlockConnectionPointTypes.Vector4);\r\n this.registerOutput(\"output\", NodeMaterialBlockConnectionPointTypes.Matrix);\r\n }\r\n\r\n /**\r\n * Gets the current class name\r\n * @returns the class name\r\n */\r\n public override getClassName() {\r\n return \"MatrixBuilder\";\r\n }\r\n\r\n /**\r\n * Gets the row0 vector\r\n */\r\n public get row0(): NodeMaterialConnectionPoint {\r\n return this._inputs[0];\r\n }\r\n\r\n /**\r\n * Gets the row1 vector\r\n */\r\n public get row1(): NodeMaterialConnectionPoint {\r\n return this._inputs[1];\r\n }\r\n\r\n /**\r\n * Gets the row2 vector\r\n */\r\n public get row2(): NodeMaterialConnectionPoint {\r\n return this._inputs[2];\r\n }\r\n\r\n /**\r\n * Gets the row3 vector\r\n */\r\n public get row3(): NodeMaterialConnectionPoint {\r\n return this._inputs[3];\r\n }\r\n\r\n /**\r\n * Gets the output component\r\n */\r\n public get output(): NodeMaterialConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n public override autoConfigure() {\r\n if (!this.row0.isConnected) {\r\n const row0Input = new InputBlock(\"row0\");\r\n row0Input.value = new Vector4(1, 0, 0, 0);\r\n row0Input.output.connectTo(this.row0);\r\n }\r\n\r\n if (!this.row1.isConnected) {\r\n const row1Input = new InputBlock(\"row1\");\r\n row1Input.value = new Vector4(0, 1, 0, 0);\r\n row1Input.output.connectTo(this.row1);\r\n }\r\n\r\n if (!this.row2.isConnected) {\r\n const row2Input = new InputBlock(\"row2\");\r\n row2Input.value = new Vector4(0, 0, 1, 0);\r\n row2Input.output.connectTo(this.row2);\r\n }\r\n\r\n if (!this.row3.isConnected) {\r\n const row3Input = new InputBlock(\"row3\");\r\n row3Input.value = new Vector4(0, 0, 0, 1);\r\n row3Input.output.connectTo(this.row3);\r\n }\r\n }\r\n\r\n protected override _buildBlock(state: NodeMaterialBuildState) {\r\n super._buildBlock(state);\r\n\r\n const output = this._outputs[0];\r\n const row0 = this.row0;\r\n const row1 = this.row1;\r\n const row2 = this.row2;\r\n const row3 = this.row3;\r\n\r\n const mat4 = state.shaderLanguage === ShaderLanguage.WGSL ? \"mat4x4f\" : \"mat4\";\r\n\r\n state.compilationString +=\r\n state._declareOutput(output) +\r\n ` = ${mat4}(${row0.associatedVariableName}, ${row1.associatedVariableName}, ${row2.associatedVariableName}, ${row3.associatedVariableName});\\n`;\r\n\r\n return this;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.MatrixBuilder\", MatrixBuilderBlock);\r\n"]}
|
|
@@ -38,7 +38,7 @@ export class MatrixTransposeBlock extends NodeMaterialBlock {
|
|
|
38
38
|
super._buildBlock(state);
|
|
39
39
|
const output = this.output;
|
|
40
40
|
const input = this.input;
|
|
41
|
-
state.compilationString += state._declareOutput(output) +
|
|
41
|
+
state.compilationString += state._declareOutput(output) + ` = transpose(${input.associatedVariableName});\n`;
|
|
42
42
|
return this;
|
|
43
43
|
}
|
|
44
44
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"matrixTransposeBlock.js","sourceRoot":"","sources":["../../../../../../dev/core/src/Materials/Node/Blocks/matrixTransposeBlock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,qCAAqC,EAAE,MAAM,gDAAgD,CAAC;AAEvG,OAAO,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAC;AAE7E,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAExD;;GAEG;AACH,MAAM,OAAO,oBAAqB,SAAQ,iBAAiB;IACvD;;;OAGG;IACH,YAAmB,IAAY;QAC3B,KAAK,CAAC,IAAI,EAAE,wBAAwB,CAAC,OAAO,CAAC,CAAC;QAE9C,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,qCAAqC,CAAC,MAAM,CAAC,CAAC;QAC1E,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,qCAAqC,CAAC,MAAM,CAAC,CAAC;IAChF,CAAC;IAED;;;OAGG;IACa,YAAY;QACxB,OAAO,sBAAsB,CAAC;IAClC,CAAC;IAED;;OAEG;IACH,IAAW,KAAK;QACZ,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,IAAW,MAAM;QACb,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC;IAEkB,WAAW,CAAC,KAA6B;QACxD,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAEzB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QAEzB,KAAK,CAAC,iBAAiB,IAAI,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,GAAG,
|
|
1
|
+
{"version":3,"file":"matrixTransposeBlock.js","sourceRoot":"","sources":["../../../../../../dev/core/src/Materials/Node/Blocks/matrixTransposeBlock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,qCAAqC,EAAE,MAAM,gDAAgD,CAAC;AAEvG,OAAO,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAC;AAE7E,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAExD;;GAEG;AACH,MAAM,OAAO,oBAAqB,SAAQ,iBAAiB;IACvD;;;OAGG;IACH,YAAmB,IAAY;QAC3B,KAAK,CAAC,IAAI,EAAE,wBAAwB,CAAC,OAAO,CAAC,CAAC;QAE9C,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,qCAAqC,CAAC,MAAM,CAAC,CAAC;QAC1E,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,qCAAqC,CAAC,MAAM,CAAC,CAAC;IAChF,CAAC;IAED;;;OAGG;IACa,YAAY;QACxB,OAAO,sBAAsB,CAAC;IAClC,CAAC;IAED;;OAEG;IACH,IAAW,KAAK;QACZ,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,IAAW,MAAM;QACb,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC;IAEkB,WAAW,CAAC,KAA6B;QACxD,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAEzB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QAEzB,KAAK,CAAC,iBAAiB,IAAI,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,GAAG,gBAAgB,KAAK,CAAC,sBAAsB,MAAM,CAAC;QAE7G,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ;AAED,aAAa,CAAC,8BAA8B,EAAE,oBAAoB,CAAC,CAAC","sourcesContent":["import { NodeMaterialBlock } from \"../nodeMaterialBlock\";\r\nimport { NodeMaterialBlockConnectionPointTypes } from \"../Enums/nodeMaterialBlockConnectionPointTypes\";\r\nimport type { NodeMaterialBuildState } from \"../nodeMaterialBuildState\";\r\nimport { NodeMaterialBlockTargets } from \"../Enums/nodeMaterialBlockTargets\";\r\nimport type { NodeMaterialConnectionPoint } from \"../nodeMaterialBlockConnectionPoint\";\r\nimport { RegisterClass } from \"../../../Misc/typeStore\";\r\n\r\n/**\r\n * Block used to transpose a matrix\r\n */\r\nexport class MatrixTransposeBlock extends NodeMaterialBlock {\r\n /**\r\n * Creates a new MatrixTransposeBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name, NodeMaterialBlockTargets.Neutral);\r\n\r\n this.registerInput(\"input\", NodeMaterialBlockConnectionPointTypes.Matrix);\r\n this.registerOutput(\"output\", NodeMaterialBlockConnectionPointTypes.Matrix);\r\n }\r\n\r\n /**\r\n * Gets the current class name\r\n * @returns the class name\r\n */\r\n public override getClassName() {\r\n return \"MatrixTransposeBlock\";\r\n }\r\n\r\n /**\r\n * Gets the input matrix\r\n */\r\n public get input(): NodeMaterialConnectionPoint {\r\n return this._inputs[0];\r\n }\r\n\r\n /**\r\n * Gets the output component\r\n */\r\n public get output(): NodeMaterialConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n protected override _buildBlock(state: NodeMaterialBuildState) {\r\n super._buildBlock(state);\r\n\r\n const output = this.output;\r\n const input = this.input;\r\n\r\n state.compilationString += state._declareOutput(output) + ` = transpose(${input.associatedVariableName});\\n`;\r\n\r\n return this;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.MatrixTransposeBlock\", MatrixTransposeBlock);\r\n"]}
|
|
@@ -56,8 +56,8 @@ export class NormalBlendBlock extends NodeMaterialBlock {
|
|
|
56
56
|
const input1 = this._inputs[1];
|
|
57
57
|
const stepR = state._getFreeVariableName("stepR");
|
|
58
58
|
const stepG = state._getFreeVariableName("stepG");
|
|
59
|
-
state.compilationString +=
|
|
60
|
-
state.compilationString +=
|
|
59
|
+
state.compilationString += `${state._declareLocalVar(stepR, NodeMaterialBlockConnectionPointTypes.Float)} = step(0.5, ${input0.associatedVariableName}.r);\n`;
|
|
60
|
+
state.compilationString += `${state._declareLocalVar(stepG, NodeMaterialBlockConnectionPointTypes.Float)} = step(0.5, ${input0.associatedVariableName}.g);\n`;
|
|
61
61
|
state.compilationString += state._declareOutput(output) + `;\n`;
|
|
62
62
|
state.compilationString += `${output.associatedVariableName}.r = (1.0 - ${stepR}) * ${input0.associatedVariableName}.r * ${input1.associatedVariableName}.r * 2.0 + ${stepR} * (1.0 - (1.0 - ${input0.associatedVariableName}.r) * (1.0 - ${input1.associatedVariableName}.r) * 2.0);\n`;
|
|
63
63
|
state.compilationString += `${output.associatedVariableName}.g = (1.0 - ${stepG}) * ${input0.associatedVariableName}.g * ${input1.associatedVariableName}.g * 2.0 + ${stepG} * (1.0 - (1.0 - ${input0.associatedVariableName}.g) * (1.0 - ${input1.associatedVariableName}.g) * 2.0);\n`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"normalBlendBlock.js","sourceRoot":"","sources":["../../../../../../dev/core/src/Materials/Node/Blocks/normalBlendBlock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,qCAAqC,EAAE,MAAM,gDAAgD,CAAC;AAGvG,OAAO,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD;;GAEG;AACH,MAAM,OAAO,gBAAiB,SAAQ,iBAAiB;IACnD;;;OAGG;IACH,YAAmB,IAAY;QAC3B,KAAK,CAAC,IAAI,EAAE,wBAAwB,CAAC,OAAO,CAAC,CAAC;QAE9C,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,qCAAqC,CAAC,UAAU,CAAC,CAAC;QACnF,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,qCAAqC,CAAC,UAAU,CAAC,CAAC;QACnF,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,qCAAqC,CAAC,OAAO,CAAC,CAAC;QAE7E,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,0CAA0C,CACtD,qCAAqC,CAAC,MAAM;YACxC,qCAAqC,CAAC,MAAM;YAC5C,qCAAqC,CAAC,OAAO;YAC7C,qCAAqC,CAAC,OAAO,CACpD,CAAC;QAEF,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,0CAA0C,CACtD,qCAAqC,CAAC,MAAM;YACxC,qCAAqC,CAAC,MAAM;YAC5C,qCAAqC,CAAC,OAAO;YAC7C,qCAAqC,CAAC,OAAO,CACpD,CAAC;IACN,CAAC;IAED;;;OAGG;IACa,YAAY;QACxB,OAAO,kBAAkB,CAAC;IAC9B,CAAC;IAED;;OAEG;IACH,IAAW,UAAU;QACjB,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,IAAW,UAAU;QACjB,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,IAAW,MAAM;QACb,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC;IAEkB,WAAW,CAAC,KAA6B;QACxD,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAEzB,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAChC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC/B,MAAM,KAAK,GAAG,KAAK,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;QAClD,MAAM,KAAK,GAAG,KAAK,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;QAElD,KAAK,CAAC,iBAAiB,IAAI,
|
|
1
|
+
{"version":3,"file":"normalBlendBlock.js","sourceRoot":"","sources":["../../../../../../dev/core/src/Materials/Node/Blocks/normalBlendBlock.ts"],"names":[],"mappings":"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","sourcesContent":["import { NodeMaterialBlock } from \"../nodeMaterialBlock\";\r\nimport { NodeMaterialBlockConnectionPointTypes } from \"../Enums/nodeMaterialBlockConnectionPointTypes\";\r\nimport type { NodeMaterialBuildState } from \"../nodeMaterialBuildState\";\r\nimport type { NodeMaterialConnectionPoint } from \"../nodeMaterialBlockConnectionPoint\";\r\nimport { NodeMaterialBlockTargets } from \"../Enums/nodeMaterialBlockTargets\";\r\nimport { RegisterClass } from \"../../../Misc/typeStore\";\r\n/**\r\n * Block used to blend normals\r\n */\r\nexport class NormalBlendBlock extends NodeMaterialBlock {\r\n /**\r\n * Creates a new NormalBlendBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name, NodeMaterialBlockTargets.Neutral);\r\n\r\n this.registerInput(\"normalMap0\", NodeMaterialBlockConnectionPointTypes.AutoDetect);\r\n this.registerInput(\"normalMap1\", NodeMaterialBlockConnectionPointTypes.AutoDetect);\r\n this.registerOutput(\"output\", NodeMaterialBlockConnectionPointTypes.Vector3);\r\n\r\n this._inputs[0].addExcludedConnectionPointFromAllowedTypes(\r\n NodeMaterialBlockConnectionPointTypes.Color3 |\r\n NodeMaterialBlockConnectionPointTypes.Color4 |\r\n NodeMaterialBlockConnectionPointTypes.Vector3 |\r\n NodeMaterialBlockConnectionPointTypes.Vector4\r\n );\r\n\r\n this._inputs[1].addExcludedConnectionPointFromAllowedTypes(\r\n NodeMaterialBlockConnectionPointTypes.Color3 |\r\n NodeMaterialBlockConnectionPointTypes.Color4 |\r\n NodeMaterialBlockConnectionPointTypes.Vector3 |\r\n NodeMaterialBlockConnectionPointTypes.Vector4\r\n );\r\n }\r\n\r\n /**\r\n * Gets the current class name\r\n * @returns the class name\r\n */\r\n public override getClassName() {\r\n return \"NormalBlendBlock\";\r\n }\r\n\r\n /**\r\n * Gets the first input component\r\n */\r\n public get normalMap0(): NodeMaterialConnectionPoint {\r\n return this._inputs[0];\r\n }\r\n\r\n /**\r\n * Gets the second input component\r\n */\r\n public get normalMap1(): NodeMaterialConnectionPoint {\r\n return this._inputs[1];\r\n }\r\n\r\n /**\r\n * Gets the output component\r\n */\r\n public get output(): NodeMaterialConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n protected override _buildBlock(state: NodeMaterialBuildState) {\r\n super._buildBlock(state);\r\n\r\n const output = this._outputs[0];\r\n const input0 = this._inputs[0];\r\n const input1 = this._inputs[1];\r\n const stepR = state._getFreeVariableName(\"stepR\");\r\n const stepG = state._getFreeVariableName(\"stepG\");\r\n\r\n state.compilationString += `${state._declareLocalVar(stepR, NodeMaterialBlockConnectionPointTypes.Float)} = step(0.5, ${input0.associatedVariableName}.r);\\n`;\r\n state.compilationString += `${state._declareLocalVar(stepG, NodeMaterialBlockConnectionPointTypes.Float)} = step(0.5, ${input0.associatedVariableName}.g);\\n`;\r\n state.compilationString += state._declareOutput(output) + `;\\n`;\r\n state.compilationString += `${output.associatedVariableName}.r = (1.0 - ${stepR}) * ${input0.associatedVariableName}.r * ${input1.associatedVariableName}.r * 2.0 + ${stepR} * (1.0 - (1.0 - ${input0.associatedVariableName}.r) * (1.0 - ${input1.associatedVariableName}.r) * 2.0);\\n`;\r\n state.compilationString += `${output.associatedVariableName}.g = (1.0 - ${stepG}) * ${input0.associatedVariableName}.g * ${input1.associatedVariableName}.g * 2.0 + ${stepG} * (1.0 - (1.0 - ${input0.associatedVariableName}.g) * (1.0 - ${input1.associatedVariableName}.g) * 2.0);\\n`;\r\n state.compilationString += `${output.associatedVariableName}.b = ${input0.associatedVariableName}.b * ${input1.associatedVariableName}.b;\\n`;\r\n\r\n return this;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.NormalBlendBlock\", NormalBlendBlock);\r\n"]}
|
|
@@ -2,6 +2,7 @@ import { NodeMaterialBlock } from "../nodeMaterialBlock.js";
|
|
|
2
2
|
import { NodeMaterialBlockConnectionPointTypes } from "../Enums/nodeMaterialBlockConnectionPointTypes.js";
|
|
3
3
|
import { NodeMaterialBlockTargets } from "../Enums/nodeMaterialBlockTargets.js";
|
|
4
4
|
import { RegisterClass } from "../../../Misc/typeStore.js";
|
|
5
|
+
import { ShaderLanguage } from "../../../Materials/shaderLanguage.js";
|
|
5
6
|
/**
|
|
6
7
|
* block used to Generate a Simplex Perlin 3d Noise Pattern
|
|
7
8
|
*/
|
|
@@ -75,8 +76,9 @@ export class SimplexPerlin3DBlock extends NodeMaterialBlock {
|
|
|
75
76
|
functionString += `const float UNSKEWFACTOR = 1.0/6.0;\n`;
|
|
76
77
|
functionString += `const float SIMPLEX_CORNER_POS = 0.5;\n`;
|
|
77
78
|
functionString += `const float SIMPLEX_TETRAHADRON_HEIGHT = 0.70710678118654752440084436210485;\n`;
|
|
78
|
-
functionString += `float SimplexPerlin3D( vec3
|
|
79
|
-
functionString += ` P
|
|
79
|
+
functionString += `float SimplexPerlin3D( vec3 source ){\n`;
|
|
80
|
+
functionString += ` vec3 P = source;\n`;
|
|
81
|
+
functionString += ` P.x = [P.x == 0. && P.y == 0. && P.z == 0. ? 0.00001 : P.x];\n`;
|
|
80
82
|
functionString += ` P *= SIMPLEX_TETRAHADRON_HEIGHT;\n`;
|
|
81
83
|
functionString += ` vec3 Pi = floor( P + dot( P, vec3( SKEWFACTOR) ) );`;
|
|
82
84
|
functionString += ` vec3 x0 = P - Pi + dot(Pi, vec3( UNSKEWFACTOR ) );\n`;
|
|
@@ -90,7 +92,7 @@ export class SimplexPerlin3DBlock extends NodeMaterialBlock {
|
|
|
90
92
|
functionString += ` vec4 v1234_x = vec4( x0.x, x1.x, x2.x, x3.x );\n`;
|
|
91
93
|
functionString += ` vec4 v1234_y = vec4( x0.y, x1.y, x2.y, x3.y );\n`;
|
|
92
94
|
functionString += ` vec4 v1234_z = vec4( x0.z, x1.z, x2.z, x3.z );\n`;
|
|
93
|
-
functionString += ` Pi
|
|
95
|
+
functionString += ` Pi = Pi.xyz - floor(Pi.xyz * ( 1.0 / 69.0 )) * 69.0;\n`;
|
|
94
96
|
functionString += ` vec3 Pi_inc1 = step( Pi, vec3( 69.0 - 1.5 ) ) * ( Pi + 1.0 );\n`;
|
|
95
97
|
functionString += ` vec4 Pt = vec4( Pi.xy, Pi_inc1.xy ) + vec2( 50.0, 161.0 ).xyxy;\n`;
|
|
96
98
|
functionString += ` Pt *= Pt;\n`;
|
|
@@ -100,18 +102,24 @@ export class SimplexPerlin3DBlock extends NodeMaterialBlock {
|
|
|
100
102
|
functionString += ` const vec3 ZINC = vec3( 48.500388, 65.294118, 63.934599 );\n`;
|
|
101
103
|
functionString += ` vec3 lowz_mods = vec3( 1.0 / ( SOMELARGEFLOATS.xyz + Pi.zzz * ZINC.xyz ) );\n`;
|
|
102
104
|
functionString += ` vec3 highz_mods = vec3( 1.0 / ( SOMELARGEFLOATS.xyz + Pi_inc1.zzz * ZINC.xyz ) );\n`;
|
|
103
|
-
functionString += ` Pi_1 = ( Pi_1.z < 0.5 ) ? lowz_mods : highz_mods;\n`;
|
|
104
|
-
functionString += ` Pi_2 = ( Pi_2.z < 0.5 ) ? lowz_mods : highz_mods;\n`;
|
|
105
|
+
functionString += ` Pi_1 = [( Pi_1.z < 0.5 ) ? lowz_mods : highz_mods];\n`;
|
|
106
|
+
functionString += ` Pi_2 = [( Pi_2.z < 0.5 ) ? lowz_mods : highz_mods];\n`;
|
|
105
107
|
functionString += ` vec4 hash_0 = fract( Pt * vec4( lowz_mods.x, Pi_1.x, Pi_2.x, highz_mods.x ) ) - 0.49999;\n`;
|
|
106
108
|
functionString += ` vec4 hash_1 = fract( Pt * vec4( lowz_mods.y, Pi_1.y, Pi_2.y, highz_mods.y ) ) - 0.49999;\n`;
|
|
107
109
|
functionString += ` vec4 hash_2 = fract( Pt * vec4( lowz_mods.z, Pi_1.z, Pi_2.z, highz_mods.z ) ) - 0.49999;\n`;
|
|
108
110
|
functionString += ` vec4 grad_results = inversesqrt( hash_0 * hash_0 + hash_1 * hash_1 + hash_2 * hash_2 ) * ( hash_0 * v1234_x + hash_1 * v1234_y + hash_2 * v1234_z );\n`;
|
|
109
111
|
functionString += ` const float FINAL_NORMALIZATION = 37.837227241611314102871574478976;\n`;
|
|
110
112
|
functionString += ` vec4 kernel_weights = v1234_x * v1234_x + v1234_y * v1234_y + v1234_z * v1234_z;\n`;
|
|
111
|
-
functionString += ` kernel_weights = max(0.5 - kernel_weights, 0.
|
|
113
|
+
functionString += ` kernel_weights = max(0.5 - kernel_weights, vec4(0.));\n`;
|
|
112
114
|
functionString += ` kernel_weights = kernel_weights*kernel_weights*kernel_weights;\n`;
|
|
113
115
|
functionString += ` return dot( kernel_weights, grad_results ) * FINAL_NORMALIZATION;\n`;
|
|
114
116
|
functionString += `}\n`;
|
|
117
|
+
if (state.shaderLanguage === ShaderLanguage.WGSL) {
|
|
118
|
+
functionString = state._babylonSLtoWGSL(functionString);
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
functionString = state._babylonSLtoGLSL(functionString);
|
|
122
|
+
}
|
|
115
123
|
state._emitFunction("SimplexPerlin3D", functionString, "// SimplexPerlin3D");
|
|
116
124
|
state.compilationString += state._declareOutput(this._outputs[0]) + ` = SimplexPerlin3D(${this.seed.associatedVariableName});\n`;
|
|
117
125
|
return this;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"simplexPerlin3DBlock.js","sourceRoot":"","sources":["../../../../../../dev/core/src/Materials/Node/Blocks/simplexPerlin3DBlock.ts"],"names":[],"mappings":"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","sourcesContent":["import { NodeMaterialBlock } from \"../nodeMaterialBlock\";\r\nimport { NodeMaterialBlockConnectionPointTypes } from \"../Enums/nodeMaterialBlockConnectionPointTypes\";\r\nimport type { NodeMaterialBuildState } from \"../nodeMaterialBuildState\";\r\nimport type { NodeMaterialConnectionPoint } from \"../nodeMaterialBlockConnectionPoint\";\r\nimport { NodeMaterialBlockTargets } from \"../Enums/nodeMaterialBlockTargets\";\r\nimport { RegisterClass } from \"../../../Misc/typeStore\";\r\n/**\r\n * block used to Generate a Simplex Perlin 3d Noise Pattern\r\n */\r\n//\r\n// Wombat\r\n// An efficient texture-free GLSL procedural noise library\r\n// Source: https://github.com/BrianSharpe/Wombat\r\n// Derived from: https://github.com/BrianSharpe/GPU-Noise-Lib\r\n//\r\n// I'm not one for copyrights. Use the code however you wish.\r\n// All I ask is that credit be given back to the blog or myself when appropriate.\r\n// And also to let me know if you come up with any changes, improvements, thoughts or interesting uses for this stuff. :)\r\n// Thanks!\r\n//\r\n// Brian Sharpe\r\n// brisharpe CIRCLE_A yahoo DOT com\r\n// http://briansharpe.wordpress.com\r\n// https://github.com/BrianSharpe\r\n//\r\n//\r\n// This is a modified version of Stefan Gustavson's and Ian McEwan's work at http://github.com/ashima/webgl-noise\r\n// Modifications are...\r\n// - faster random number generation\r\n// - analytical final normalization\r\n// - space scaled can have an approx feature size of 1.0\r\n// - filter kernel changed to fix discontinuities at tetrahedron boundaries\r\n//\r\n// Converted to BJS by Pryme8\r\n//\r\n// Simplex Perlin Noise 3D\r\n// Return value range of -1.0->1.0\r\n//\r\nexport class SimplexPerlin3DBlock extends NodeMaterialBlock {\r\n /**\r\n * Creates a new SimplexPerlin3DBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name, NodeMaterialBlockTargets.Neutral);\r\n this.registerInput(\"seed\", NodeMaterialBlockConnectionPointTypes.Vector3);\r\n this.registerOutput(\"output\", NodeMaterialBlockConnectionPointTypes.Float);\r\n }\r\n\r\n /**\r\n * Gets the current class name\r\n * @returns the class name\r\n */\r\n public override getClassName() {\r\n return \"SimplexPerlin3DBlock\";\r\n }\r\n\r\n /**\r\n * Gets the seed operand input component\r\n */\r\n public get seed(): NodeMaterialConnectionPoint {\r\n return this._inputs[0];\r\n }\r\n\r\n /**\r\n * Gets the output component\r\n */\r\n public get output(): NodeMaterialConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n protected override _buildBlock(state: NodeMaterialBuildState) {\r\n super._buildBlock(state);\r\n\r\n if (!this.seed.isConnected) {\r\n return;\r\n }\r\n\r\n if (!this._outputs[0].hasEndpoints) {\r\n return;\r\n }\r\n\r\n let functionString = `const float SKEWFACTOR = 1.0/3.0;\\n`;\r\n functionString += `const float UNSKEWFACTOR = 1.0/6.0;\\n`;\r\n functionString += `const float SIMPLEX_CORNER_POS = 0.5;\\n`;\r\n functionString += `const float SIMPLEX_TETRAHADRON_HEIGHT = 0.70710678118654752440084436210485;\\n`;\r\n functionString += `float SimplexPerlin3D( vec3 P ){\\n`;\r\n functionString += ` P.x = P == vec3(0., 0., 0.) ? 0.00001 : P.x;\\n`;\r\n functionString += ` P *= SIMPLEX_TETRAHADRON_HEIGHT;\\n`;\r\n functionString += ` vec3 Pi = floor( P + dot( P, vec3( SKEWFACTOR) ) );`;\r\n functionString += ` vec3 x0 = P - Pi + dot(Pi, vec3( UNSKEWFACTOR ) );\\n`;\r\n functionString += ` vec3 g = step(x0.yzx, x0.xyz);\\n`;\r\n functionString += ` vec3 l = 1.0 - g;\\n`;\r\n functionString += ` vec3 Pi_1 = min( g.xyz, l.zxy );\\n`;\r\n functionString += ` vec3 Pi_2 = max( g.xyz, l.zxy );\\n`;\r\n functionString += ` vec3 x1 = x0 - Pi_1 + UNSKEWFACTOR;\\n`;\r\n functionString += ` vec3 x2 = x0 - Pi_2 + SKEWFACTOR;\\n`;\r\n functionString += ` vec3 x3 = x0 - SIMPLEX_CORNER_POS;\\n`;\r\n functionString += ` vec4 v1234_x = vec4( x0.x, x1.x, x2.x, x3.x );\\n`;\r\n functionString += ` vec4 v1234_y = vec4( x0.y, x1.y, x2.y, x3.y );\\n`;\r\n functionString += ` vec4 v1234_z = vec4( x0.z, x1.z, x2.z, x3.z );\\n`;\r\n functionString += ` Pi.xyz = Pi.xyz - floor(Pi.xyz * ( 1.0 / 69.0 )) * 69.0;\\n`;\r\n functionString += ` vec3 Pi_inc1 = step( Pi, vec3( 69.0 - 1.5 ) ) * ( Pi + 1.0 );\\n`;\r\n functionString += ` vec4 Pt = vec4( Pi.xy, Pi_inc1.xy ) + vec2( 50.0, 161.0 ).xyxy;\\n`;\r\n functionString += ` Pt *= Pt;\\n`;\r\n functionString += ` vec4 V1xy_V2xy = mix( Pt.xyxy, Pt.zwzw, vec4( Pi_1.xy, Pi_2.xy ) );\\n`;\r\n functionString += ` Pt = vec4( Pt.x, V1xy_V2xy.xz, Pt.z ) * vec4( Pt.y, V1xy_V2xy.yw, Pt.w );\\n`;\r\n functionString += ` const vec3 SOMELARGEFLOATS = vec3( 635.298681, 682.357502, 668.926525 );\\n`;\r\n functionString += ` const vec3 ZINC = vec3( 48.500388, 65.294118, 63.934599 );\\n`;\r\n functionString += ` vec3 lowz_mods = vec3( 1.0 / ( SOMELARGEFLOATS.xyz + Pi.zzz * ZINC.xyz ) );\\n`;\r\n functionString += ` vec3 highz_mods = vec3( 1.0 / ( SOMELARGEFLOATS.xyz + Pi_inc1.zzz * ZINC.xyz ) );\\n`;\r\n functionString += ` Pi_1 = ( Pi_1.z < 0.5 ) ? lowz_mods : highz_mods;\\n`;\r\n functionString += ` Pi_2 = ( Pi_2.z < 0.5 ) ? lowz_mods : highz_mods;\\n`;\r\n functionString += ` vec4 hash_0 = fract( Pt * vec4( lowz_mods.x, Pi_1.x, Pi_2.x, highz_mods.x ) ) - 0.49999;\\n`;\r\n functionString += ` vec4 hash_1 = fract( Pt * vec4( lowz_mods.y, Pi_1.y, Pi_2.y, highz_mods.y ) ) - 0.49999;\\n`;\r\n functionString += ` vec4 hash_2 = fract( Pt * vec4( lowz_mods.z, Pi_1.z, Pi_2.z, highz_mods.z ) ) - 0.49999;\\n`;\r\n functionString += ` vec4 grad_results = inversesqrt( hash_0 * hash_0 + hash_1 * hash_1 + hash_2 * hash_2 ) * ( hash_0 * v1234_x + hash_1 * v1234_y + hash_2 * v1234_z );\\n`;\r\n functionString += ` const float FINAL_NORMALIZATION = 37.837227241611314102871574478976;\\n`;\r\n functionString += ` vec4 kernel_weights = v1234_x * v1234_x + v1234_y * v1234_y + v1234_z * v1234_z;\\n`;\r\n functionString += ` kernel_weights = max(0.5 - kernel_weights, 0.0);\\n`;\r\n functionString += ` kernel_weights = kernel_weights*kernel_weights*kernel_weights;\\n`;\r\n functionString += ` return dot( kernel_weights, grad_results ) * FINAL_NORMALIZATION;\\n`;\r\n functionString += `}\\n`;\r\n\r\n state._emitFunction(\"SimplexPerlin3D\", functionString, \"// SimplexPerlin3D\");\r\n state.compilationString += state._declareOutput(this._outputs[0]) + ` = SimplexPerlin3D(${this.seed.associatedVariableName});\\n`;\r\n\r\n return this;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.SimplexPerlin3DBlock\", SimplexPerlin3DBlock);\r\n"]}
|
|
1
|
+
{"version":3,"file":"simplexPerlin3DBlock.js","sourceRoot":"","sources":["../../../../../../dev/core/src/Materials/Node/Blocks/simplexPerlin3DBlock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,qCAAqC,EAAE,MAAM,gDAAgD,CAAC;AAGvG,OAAO,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AACnE;;GAEG;AACH,EAAE;AACF,UAAU;AACV,2DAA2D;AAC3D,iDAAiD;AACjD,8DAA8D;AAC9D,EAAE;AACF,+DAA+D;AAC/D,kFAAkF;AAClF,0HAA0H;AAC1H,WAAW;AACX,EAAE;AACF,gBAAgB;AAChB,oCAAoC;AACpC,oCAAoC;AACpC,kCAAkC;AAClC,EAAE;AACF,EAAE;AACF,kHAAkH;AAClH,wBAAwB;AACxB,qCAAqC;AACrC,oCAAoC;AACpC,yDAAyD;AACzD,4EAA4E;AAC5E,EAAE;AACF,8BAA8B;AAC9B,EAAE;AACF,2BAA2B;AAC3B,mCAAmC;AACnC,EAAE;AACF,MAAM,OAAO,oBAAqB,SAAQ,iBAAiB;IACvD;;;OAGG;IACH,YAAmB,IAAY;QAC3B,KAAK,CAAC,IAAI,EAAE,wBAAwB,CAAC,OAAO,CAAC,CAAC;QAC9C,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,qCAAqC,CAAC,OAAO,CAAC,CAAC;QAC1E,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,qCAAqC,CAAC,KAAK,CAAC,CAAC;IAC/E,CAAC;IAED;;;OAGG;IACa,YAAY;QACxB,OAAO,sBAAsB,CAAC;IAClC,CAAC;IAED;;OAEG;IACH,IAAW,IAAI;QACX,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,IAAW,MAAM;QACb,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC;IAEkB,WAAW,CAAC,KAA6B;QACxD,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAEzB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YACxB,OAAO;SACV;QAED,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,YAAY,EAAE;YAChC,OAAO;SACV;QAED,IAAI,cAAc,GAAG,qCAAqC,CAAC;QAC3D,cAAc,IAAI,uCAAuC,CAAC;QAC1D,cAAc,IAAI,yCAAyC,CAAC;QAC5D,cAAc,IAAI,gFAAgF,CAAC;QACnG,cAAc,IAAI,yCAAyC,CAAC;QAC5D,cAAc,IAAI,wBAAwB,CAAC;QAC3C,cAAc,IAAI,oEAAoE,CAAC;QACvF,cAAc,IAAI,wCAAwC,CAAC;QAC3D,cAAc,IAAI,yDAAyD,CAAC;QAC5E,cAAc,IAAI,0DAA0D,CAAC;QAC7E,cAAc,IAAI,sCAAsC,CAAC;QACzD,cAAc,IAAI,yBAAyB,CAAC;QAC5C,cAAc,IAAI,wCAAwC,CAAC;QAC3D,cAAc,IAAI,wCAAwC,CAAC;QAC3D,cAAc,IAAI,2CAA2C,CAAC;QAC9D,cAAc,IAAI,yCAAyC,CAAC;QAC5D,cAAc,IAAI,0CAA0C,CAAC;QAC7D,cAAc,IAAI,sDAAsD,CAAC;QACzE,cAAc,IAAI,sDAAsD,CAAC;QACzE,cAAc,IAAI,sDAAsD,CAAC;QACzE,cAAc,IAAI,4DAA4D,CAAC;QAC/E,cAAc,IAAI,qEAAqE,CAAC;QACxF,cAAc,IAAI,uEAAuE,CAAC;QAC1F,cAAc,IAAI,iBAAiB,CAAC;QACpC,cAAc,IAAI,2EAA2E,CAAC;QAC9F,cAAc,IAAI,iFAAiF,CAAC;QACpG,cAAc,IAAI,gFAAgF,CAAC;QACnG,cAAc,IAAI,kEAAkE,CAAC;QACrF,cAAc,IAAI,mFAAmF,CAAC;QACtG,cAAc,IAAI,yFAAyF,CAAC;QAC5G,cAAc,IAAI,2DAA2D,CAAC;QAC9E,cAAc,IAAI,2DAA2D,CAAC;QAC9E,cAAc,IAAI,gGAAgG,CAAC;QACnH,cAAc,IAAI,gGAAgG,CAAC;QACnH,cAAc,IAAI,gGAAgG,CAAC;QACnH,cAAc,IAAI,4JAA4J,CAAC;QAC/K,cAAc,IAAI,4EAA4E,CAAC;QAC/F,cAAc,IAAI,wFAAwF,CAAC;QAC3G,cAAc,IAAI,6DAA6D,CAAC;QAChF,cAAc,IAAI,sEAAsE,CAAC;QACzF,cAAc,IAAI,yEAAyE,CAAC;QAC5F,cAAc,IAAI,KAAK,CAAC;QAExB,IAAI,KAAK,CAAC,cAAc,KAAK,cAAc,CAAC,IAAI,EAAE;YAC9C,cAAc,GAAG,KAAK,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC;SAC3D;aAAM;YACH,cAAc,GAAG,KAAK,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC;SAC3D;QAED,KAAK,CAAC,aAAa,CAAC,iBAAiB,EAAE,cAAc,EAAE,oBAAoB,CAAC,CAAC;QAC7E,KAAK,CAAC,iBAAiB,IAAI,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,sBAAsB,IAAI,CAAC,IAAI,CAAC,sBAAsB,MAAM,CAAC;QAEjI,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ;AAED,aAAa,CAAC,8BAA8B,EAAE,oBAAoB,CAAC,CAAC","sourcesContent":["import { NodeMaterialBlock } from \"../nodeMaterialBlock\";\r\nimport { NodeMaterialBlockConnectionPointTypes } from \"../Enums/nodeMaterialBlockConnectionPointTypes\";\r\nimport type { NodeMaterialBuildState } from \"../nodeMaterialBuildState\";\r\nimport type { NodeMaterialConnectionPoint } from \"../nodeMaterialBlockConnectionPoint\";\r\nimport { NodeMaterialBlockTargets } from \"../Enums/nodeMaterialBlockTargets\";\r\nimport { RegisterClass } from \"../../../Misc/typeStore\";\r\nimport { ShaderLanguage } from \"../../../Materials/shaderLanguage\";\r\n/**\r\n * block used to Generate a Simplex Perlin 3d Noise Pattern\r\n */\r\n//\r\n// Wombat\r\n// An efficient texture-free GLSL procedural noise library\r\n// Source: https://github.com/BrianSharpe/Wombat\r\n// Derived from: https://github.com/BrianSharpe/GPU-Noise-Lib\r\n//\r\n// I'm not one for copyrights. Use the code however you wish.\r\n// All I ask is that credit be given back to the blog or myself when appropriate.\r\n// And also to let me know if you come up with any changes, improvements, thoughts or interesting uses for this stuff. :)\r\n// Thanks!\r\n//\r\n// Brian Sharpe\r\n// brisharpe CIRCLE_A yahoo DOT com\r\n// http://briansharpe.wordpress.com\r\n// https://github.com/BrianSharpe\r\n//\r\n//\r\n// This is a modified version of Stefan Gustavson's and Ian McEwan's work at http://github.com/ashima/webgl-noise\r\n// Modifications are...\r\n// - faster random number generation\r\n// - analytical final normalization\r\n// - space scaled can have an approx feature size of 1.0\r\n// - filter kernel changed to fix discontinuities at tetrahedron boundaries\r\n//\r\n// Converted to BJS by Pryme8\r\n//\r\n// Simplex Perlin Noise 3D\r\n// Return value range of -1.0->1.0\r\n//\r\nexport class SimplexPerlin3DBlock extends NodeMaterialBlock {\r\n /**\r\n * Creates a new SimplexPerlin3DBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name, NodeMaterialBlockTargets.Neutral);\r\n this.registerInput(\"seed\", NodeMaterialBlockConnectionPointTypes.Vector3);\r\n this.registerOutput(\"output\", NodeMaterialBlockConnectionPointTypes.Float);\r\n }\r\n\r\n /**\r\n * Gets the current class name\r\n * @returns the class name\r\n */\r\n public override getClassName() {\r\n return \"SimplexPerlin3DBlock\";\r\n }\r\n\r\n /**\r\n * Gets the seed operand input component\r\n */\r\n public get seed(): NodeMaterialConnectionPoint {\r\n return this._inputs[0];\r\n }\r\n\r\n /**\r\n * Gets the output component\r\n */\r\n public get output(): NodeMaterialConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n protected override _buildBlock(state: NodeMaterialBuildState) {\r\n super._buildBlock(state);\r\n\r\n if (!this.seed.isConnected) {\r\n return;\r\n }\r\n\r\n if (!this._outputs[0].hasEndpoints) {\r\n return;\r\n }\r\n\r\n let functionString = `const float SKEWFACTOR = 1.0/3.0;\\n`;\r\n functionString += `const float UNSKEWFACTOR = 1.0/6.0;\\n`;\r\n functionString += `const float SIMPLEX_CORNER_POS = 0.5;\\n`;\r\n functionString += `const float SIMPLEX_TETRAHADRON_HEIGHT = 0.70710678118654752440084436210485;\\n`;\r\n functionString += `float SimplexPerlin3D( vec3 source ){\\n`;\r\n functionString += ` vec3 P = source;\\n`;\r\n functionString += ` P.x = [P.x == 0. && P.y == 0. && P.z == 0. ? 0.00001 : P.x];\\n`;\r\n functionString += ` P *= SIMPLEX_TETRAHADRON_HEIGHT;\\n`;\r\n functionString += ` vec3 Pi = floor( P + dot( P, vec3( SKEWFACTOR) ) );`;\r\n functionString += ` vec3 x0 = P - Pi + dot(Pi, vec3( UNSKEWFACTOR ) );\\n`;\r\n functionString += ` vec3 g = step(x0.yzx, x0.xyz);\\n`;\r\n functionString += ` vec3 l = 1.0 - g;\\n`;\r\n functionString += ` vec3 Pi_1 = min( g.xyz, l.zxy );\\n`;\r\n functionString += ` vec3 Pi_2 = max( g.xyz, l.zxy );\\n`;\r\n functionString += ` vec3 x1 = x0 - Pi_1 + UNSKEWFACTOR;\\n`;\r\n functionString += ` vec3 x2 = x0 - Pi_2 + SKEWFACTOR;\\n`;\r\n functionString += ` vec3 x3 = x0 - SIMPLEX_CORNER_POS;\\n`;\r\n functionString += ` vec4 v1234_x = vec4( x0.x, x1.x, x2.x, x3.x );\\n`;\r\n functionString += ` vec4 v1234_y = vec4( x0.y, x1.y, x2.y, x3.y );\\n`;\r\n functionString += ` vec4 v1234_z = vec4( x0.z, x1.z, x2.z, x3.z );\\n`;\r\n functionString += ` Pi = Pi.xyz - floor(Pi.xyz * ( 1.0 / 69.0 )) * 69.0;\\n`;\r\n functionString += ` vec3 Pi_inc1 = step( Pi, vec3( 69.0 - 1.5 ) ) * ( Pi + 1.0 );\\n`;\r\n functionString += ` vec4 Pt = vec4( Pi.xy, Pi_inc1.xy ) + vec2( 50.0, 161.0 ).xyxy;\\n`;\r\n functionString += ` Pt *= Pt;\\n`;\r\n functionString += ` vec4 V1xy_V2xy = mix( Pt.xyxy, Pt.zwzw, vec4( Pi_1.xy, Pi_2.xy ) );\\n`;\r\n functionString += ` Pt = vec4( Pt.x, V1xy_V2xy.xz, Pt.z ) * vec4( Pt.y, V1xy_V2xy.yw, Pt.w );\\n`;\r\n functionString += ` const vec3 SOMELARGEFLOATS = vec3( 635.298681, 682.357502, 668.926525 );\\n`;\r\n functionString += ` const vec3 ZINC = vec3( 48.500388, 65.294118, 63.934599 );\\n`;\r\n functionString += ` vec3 lowz_mods = vec3( 1.0 / ( SOMELARGEFLOATS.xyz + Pi.zzz * ZINC.xyz ) );\\n`;\r\n functionString += ` vec3 highz_mods = vec3( 1.0 / ( SOMELARGEFLOATS.xyz + Pi_inc1.zzz * ZINC.xyz ) );\\n`;\r\n functionString += ` Pi_1 = [( Pi_1.z < 0.5 ) ? lowz_mods : highz_mods];\\n`;\r\n functionString += ` Pi_2 = [( Pi_2.z < 0.5 ) ? lowz_mods : highz_mods];\\n`;\r\n functionString += ` vec4 hash_0 = fract( Pt * vec4( lowz_mods.x, Pi_1.x, Pi_2.x, highz_mods.x ) ) - 0.49999;\\n`;\r\n functionString += ` vec4 hash_1 = fract( Pt * vec4( lowz_mods.y, Pi_1.y, Pi_2.y, highz_mods.y ) ) - 0.49999;\\n`;\r\n functionString += ` vec4 hash_2 = fract( Pt * vec4( lowz_mods.z, Pi_1.z, Pi_2.z, highz_mods.z ) ) - 0.49999;\\n`;\r\n functionString += ` vec4 grad_results = inversesqrt( hash_0 * hash_0 + hash_1 * hash_1 + hash_2 * hash_2 ) * ( hash_0 * v1234_x + hash_1 * v1234_y + hash_2 * v1234_z );\\n`;\r\n functionString += ` const float FINAL_NORMALIZATION = 37.837227241611314102871574478976;\\n`;\r\n functionString += ` vec4 kernel_weights = v1234_x * v1234_x + v1234_y * v1234_y + v1234_z * v1234_z;\\n`;\r\n functionString += ` kernel_weights = max(0.5 - kernel_weights, vec4(0.));\\n`;\r\n functionString += ` kernel_weights = kernel_weights*kernel_weights*kernel_weights;\\n`;\r\n functionString += ` return dot( kernel_weights, grad_results ) * FINAL_NORMALIZATION;\\n`;\r\n functionString += `}\\n`;\r\n\r\n if (state.shaderLanguage === ShaderLanguage.WGSL) {\r\n functionString = state._babylonSLtoWGSL(functionString);\r\n } else {\r\n functionString = state._babylonSLtoGLSL(functionString);\r\n }\r\n\r\n state._emitFunction(\"SimplexPerlin3D\", functionString, \"// SimplexPerlin3D\");\r\n state.compilationString += state._declareOutput(this._outputs[0]) + ` = SimplexPerlin3D(${this.seed.associatedVariableName});\\n`;\r\n\r\n return this;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.SimplexPerlin3DBlock\", SimplexPerlin3DBlock);\r\n"]}
|
|
@@ -80,7 +80,7 @@ export class TransformBlock extends NodeMaterialBlock {
|
|
|
80
80
|
state.sharedData.blocksWithDefines.push(this);
|
|
81
81
|
const transformName = state._getFreeVariableName(`${transform.associatedVariableName}_NUS`);
|
|
82
82
|
if (state.shaderLanguage === ShaderLanguage.WGSL) {
|
|
83
|
-
state.compilationString += `
|
|
83
|
+
state.compilationString += `var ${transformName}: mat3x3f = mat3x3f(${transform.associatedVariableName}[0].xyz, ${transform.associatedVariableName}[1].xyz, ${transform.associatedVariableName}[2].xyz);\n`;
|
|
84
84
|
}
|
|
85
85
|
else {
|
|
86
86
|
state.compilationString += `mat3 ${transformName} = mat3(${transform.associatedVariableName});\n`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transformBlock.js","sourceRoot":"","sources":["../../../../../../dev/core/src/Materials/Node/Blocks/transformBlock.ts"],"names":[],"mappings":"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","sourcesContent":["import { NodeMaterialBlock } from \"../nodeMaterialBlock\";\r\nimport { NodeMaterialBlockConnectionPointTypes } from \"../Enums/nodeMaterialBlockConnectionPointTypes\";\r\nimport type { NodeMaterialBuildState } from \"../nodeMaterialBuildState\";\r\nimport { NodeMaterialBlockTargets } from \"../Enums/nodeMaterialBlockTargets\";\r\nimport type { NodeMaterialConnectionPoint } from \"../nodeMaterialBlockConnectionPoint\";\r\nimport { RegisterClass } from \"../../../Misc/typeStore\";\r\nimport type { Scene } from \"../../../scene\";\r\nimport type { InputBlock } from \"./Input/inputBlock\";\r\nimport type { AbstractMesh } from \"../../../Meshes/abstractMesh\";\r\nimport type { NodeMaterial, NodeMaterialDefines } from \"../nodeMaterial\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\n\r\n/**\r\n * Block used to transform a vector (2, 3 or 4) with a matrix. It will generate a Vector4\r\n */\r\nexport class TransformBlock extends NodeMaterialBlock {\r\n /**\r\n * Defines the value to use to complement W value to transform it to a Vector4\r\n */\r\n public complementW = 1;\r\n\r\n /**\r\n * Defines the value to use to complement z value to transform it to a Vector4\r\n */\r\n public complementZ = 0;\r\n\r\n /**\r\n * Creates a new TransformBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name, NodeMaterialBlockTargets.Neutral);\r\n\r\n this.target = NodeMaterialBlockTargets.Vertex;\r\n\r\n this.registerInput(\"vector\", NodeMaterialBlockConnectionPointTypes.AutoDetect);\r\n this.registerInput(\"transform\", NodeMaterialBlockConnectionPointTypes.Matrix);\r\n this.registerOutput(\"output\", NodeMaterialBlockConnectionPointTypes.Vector4);\r\n this.registerOutput(\"xyz\", NodeMaterialBlockConnectionPointTypes.Vector3);\r\n\r\n this._inputs[0].onConnectionObservable.add((other) => {\r\n if (other.ownerBlock.isInput) {\r\n const otherAsInput = other.ownerBlock as InputBlock;\r\n\r\n if (otherAsInput.name === \"normal\" || otherAsInput.name === \"tangent\") {\r\n this.complementW = 0;\r\n }\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Gets the current class name\r\n * @returns the class name\r\n */\r\n public override getClassName() {\r\n return \"TransformBlock\";\r\n }\r\n\r\n /**\r\n * Gets the vector input\r\n */\r\n public get vector(): NodeMaterialConnectionPoint {\r\n return this._inputs[0];\r\n }\r\n\r\n /**\r\n * Gets the output component\r\n */\r\n public get output(): NodeMaterialConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n /**\r\n * Gets the xyz output component\r\n */\r\n public get xyz(): NodeMaterialConnectionPoint {\r\n return this._outputs[1];\r\n }\r\n\r\n /**\r\n * Gets the matrix transform input\r\n */\r\n public get transform(): NodeMaterialConnectionPoint {\r\n return this._inputs[1];\r\n }\r\n\r\n protected override _buildBlock(state: NodeMaterialBuildState) {\r\n super._buildBlock(state);\r\n\r\n const vector = this.vector;\r\n const transform = this.transform;\r\n\r\n const vec4 = state._getShaderType(NodeMaterialBlockConnectionPointTypes.Vector4);\r\n const vec3 = state._getShaderType(NodeMaterialBlockConnectionPointTypes.Vector3);\r\n\r\n if (vector.connectedPoint) {\r\n // None uniform scaling case.\r\n if (this.complementW === 0) {\r\n const comments = `//${this.name}`;\r\n state._emitFunctionFromInclude(\"helperFunctions\", comments);\r\n state.sharedData.blocksWithDefines.push(this);\r\n\r\n const transformName = state._getFreeVariableName(`${transform.associatedVariableName}_NUS`);\r\n if (state.shaderLanguage === ShaderLanguage.WGSL) {\r\n state.compilationString += `let ${transformName}: mat3x3f = mat3x3f(${transform.associatedVariableName}[0].xyz, ${transform.associatedVariableName}[1].xyz, ${transform.associatedVariableName}[2].xyz);\\n`;\r\n } else {\r\n state.compilationString += `mat3 ${transformName} = mat3(${transform.associatedVariableName});\\n`;\r\n }\r\n state.compilationString += `#ifdef NONUNIFORMSCALING\\n`;\r\n state.compilationString += `${transformName} = transposeMat3(inverseMat3(${transformName}));\\n`;\r\n state.compilationString += `#endif\\n`;\r\n switch (vector.connectedPoint.type) {\r\n case NodeMaterialBlockConnectionPointTypes.Vector2:\r\n state.compilationString +=\r\n state._declareOutput(this.output) +\r\n ` = ${vec4}(${transformName} * ${vec3}(${vector.associatedVariableName}, ${this._writeFloat(this.complementZ)}), ${this._writeFloat(this.complementW)});\\n`;\r\n break;\r\n case NodeMaterialBlockConnectionPointTypes.Vector3:\r\n case NodeMaterialBlockConnectionPointTypes.Color3:\r\n state.compilationString +=\r\n state._declareOutput(this.output) + ` = ${vec4}(${transformName} * ${vector.associatedVariableName}, ${this._writeFloat(this.complementW)});\\n`;\r\n break;\r\n default:\r\n state.compilationString +=\r\n state._declareOutput(this.output) + ` = ${vec4}(${transformName} * ${vector.associatedVariableName}.xyz, ${this._writeFloat(this.complementW)});\\n`;\r\n break;\r\n }\r\n } else {\r\n const transformName = transform.associatedVariableName;\r\n switch (vector.connectedPoint.type) {\r\n case NodeMaterialBlockConnectionPointTypes.Vector2:\r\n state.compilationString +=\r\n state._declareOutput(this.output) +\r\n ` = ${transformName} * ${vec4}(${vector.associatedVariableName}, ${this._writeFloat(this.complementZ)}, ${this._writeFloat(this.complementW)});\\n`;\r\n break;\r\n case NodeMaterialBlockConnectionPointTypes.Vector3:\r\n case NodeMaterialBlockConnectionPointTypes.Color3:\r\n state.compilationString +=\r\n state._declareOutput(this.output) + ` = ${transformName} * ${vec4}(${vector.associatedVariableName}, ${this._writeFloat(this.complementW)});\\n`;\r\n break;\r\n default:\r\n state.compilationString += state._declareOutput(this.output) + ` = ${transformName} * ${vector.associatedVariableName};\\n`;\r\n break;\r\n }\r\n }\r\n\r\n if (this.xyz.hasEndpoints) {\r\n state.compilationString += state._declareOutput(this.xyz) + ` = ${this.output.associatedVariableName}.xyz;\\n`;\r\n }\r\n }\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Update defines for shader compilation\r\n * @param mesh defines the mesh to be rendered\r\n * @param nodeMaterial defines the node material requesting the update\r\n * @param defines defines the material defines to update\r\n */\r\n public override prepareDefines(mesh: AbstractMesh, nodeMaterial: NodeMaterial, defines: NodeMaterialDefines) {\r\n // Do nothing\r\n if (mesh.nonUniformScaling) {\r\n defines.setValue(\"NONUNIFORMSCALING\", true);\r\n }\r\n }\r\n\r\n public override serialize(): any {\r\n const serializationObject = super.serialize();\r\n\r\n serializationObject.complementZ = this.complementZ;\r\n serializationObject.complementW = this.complementW;\r\n\r\n return serializationObject;\r\n }\r\n\r\n public override _deserialize(serializationObject: any, scene: Scene, rootUrl: string) {\r\n super._deserialize(serializationObject, scene, rootUrl);\r\n\r\n this.complementZ = serializationObject.complementZ !== undefined ? serializationObject.complementZ : 0.0;\r\n this.complementW = serializationObject.complementW !== undefined ? serializationObject.complementW : 1.0;\r\n }\r\n\r\n protected override _dumpPropertiesCode() {\r\n let codeString = super._dumpPropertiesCode() + `${this._codeVariableName}.complementZ = ${this.complementZ};\\n`;\r\n\r\n codeString += `${this._codeVariableName}.complementW = ${this.complementW};\\n`;\r\n\r\n return codeString;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.TransformBlock\", TransformBlock);\r\n"]}
|
|
1
|
+
{"version":3,"file":"transformBlock.js","sourceRoot":"","sources":["../../../../../../dev/core/src/Materials/Node/Blocks/transformBlock.ts"],"names":[],"mappings":"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","sourcesContent":["import { NodeMaterialBlock } from \"../nodeMaterialBlock\";\r\nimport { NodeMaterialBlockConnectionPointTypes } from \"../Enums/nodeMaterialBlockConnectionPointTypes\";\r\nimport type { NodeMaterialBuildState } from \"../nodeMaterialBuildState\";\r\nimport { NodeMaterialBlockTargets } from \"../Enums/nodeMaterialBlockTargets\";\r\nimport type { NodeMaterialConnectionPoint } from \"../nodeMaterialBlockConnectionPoint\";\r\nimport { RegisterClass } from \"../../../Misc/typeStore\";\r\nimport type { Scene } from \"../../../scene\";\r\nimport type { InputBlock } from \"./Input/inputBlock\";\r\nimport type { AbstractMesh } from \"../../../Meshes/abstractMesh\";\r\nimport type { NodeMaterial, NodeMaterialDefines } from \"../nodeMaterial\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\n\r\n/**\r\n * Block used to transform a vector (2, 3 or 4) with a matrix. It will generate a Vector4\r\n */\r\nexport class TransformBlock extends NodeMaterialBlock {\r\n /**\r\n * Defines the value to use to complement W value to transform it to a Vector4\r\n */\r\n public complementW = 1;\r\n\r\n /**\r\n * Defines the value to use to complement z value to transform it to a Vector4\r\n */\r\n public complementZ = 0;\r\n\r\n /**\r\n * Creates a new TransformBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name, NodeMaterialBlockTargets.Neutral);\r\n\r\n this.target = NodeMaterialBlockTargets.Vertex;\r\n\r\n this.registerInput(\"vector\", NodeMaterialBlockConnectionPointTypes.AutoDetect);\r\n this.registerInput(\"transform\", NodeMaterialBlockConnectionPointTypes.Matrix);\r\n this.registerOutput(\"output\", NodeMaterialBlockConnectionPointTypes.Vector4);\r\n this.registerOutput(\"xyz\", NodeMaterialBlockConnectionPointTypes.Vector3);\r\n\r\n this._inputs[0].onConnectionObservable.add((other) => {\r\n if (other.ownerBlock.isInput) {\r\n const otherAsInput = other.ownerBlock as InputBlock;\r\n\r\n if (otherAsInput.name === \"normal\" || otherAsInput.name === \"tangent\") {\r\n this.complementW = 0;\r\n }\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Gets the current class name\r\n * @returns the class name\r\n */\r\n public override getClassName() {\r\n return \"TransformBlock\";\r\n }\r\n\r\n /**\r\n * Gets the vector input\r\n */\r\n public get vector(): NodeMaterialConnectionPoint {\r\n return this._inputs[0];\r\n }\r\n\r\n /**\r\n * Gets the output component\r\n */\r\n public get output(): NodeMaterialConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n /**\r\n * Gets the xyz output component\r\n */\r\n public get xyz(): NodeMaterialConnectionPoint {\r\n return this._outputs[1];\r\n }\r\n\r\n /**\r\n * Gets the matrix transform input\r\n */\r\n public get transform(): NodeMaterialConnectionPoint {\r\n return this._inputs[1];\r\n }\r\n\r\n protected override _buildBlock(state: NodeMaterialBuildState) {\r\n super._buildBlock(state);\r\n\r\n const vector = this.vector;\r\n const transform = this.transform;\r\n\r\n const vec4 = state._getShaderType(NodeMaterialBlockConnectionPointTypes.Vector4);\r\n const vec3 = state._getShaderType(NodeMaterialBlockConnectionPointTypes.Vector3);\r\n\r\n if (vector.connectedPoint) {\r\n // None uniform scaling case.\r\n if (this.complementW === 0) {\r\n const comments = `//${this.name}`;\r\n state._emitFunctionFromInclude(\"helperFunctions\", comments);\r\n state.sharedData.blocksWithDefines.push(this);\r\n\r\n const transformName = state._getFreeVariableName(`${transform.associatedVariableName}_NUS`);\r\n if (state.shaderLanguage === ShaderLanguage.WGSL) {\r\n state.compilationString += `var ${transformName}: mat3x3f = mat3x3f(${transform.associatedVariableName}[0].xyz, ${transform.associatedVariableName}[1].xyz, ${transform.associatedVariableName}[2].xyz);\\n`;\r\n } else {\r\n state.compilationString += `mat3 ${transformName} = mat3(${transform.associatedVariableName});\\n`;\r\n }\r\n state.compilationString += `#ifdef NONUNIFORMSCALING\\n`;\r\n state.compilationString += `${transformName} = transposeMat3(inverseMat3(${transformName}));\\n`;\r\n state.compilationString += `#endif\\n`;\r\n switch (vector.connectedPoint.type) {\r\n case NodeMaterialBlockConnectionPointTypes.Vector2:\r\n state.compilationString +=\r\n state._declareOutput(this.output) +\r\n ` = ${vec4}(${transformName} * ${vec3}(${vector.associatedVariableName}, ${this._writeFloat(this.complementZ)}), ${this._writeFloat(this.complementW)});\\n`;\r\n break;\r\n case NodeMaterialBlockConnectionPointTypes.Vector3:\r\n case NodeMaterialBlockConnectionPointTypes.Color3:\r\n state.compilationString +=\r\n state._declareOutput(this.output) + ` = ${vec4}(${transformName} * ${vector.associatedVariableName}, ${this._writeFloat(this.complementW)});\\n`;\r\n break;\r\n default:\r\n state.compilationString +=\r\n state._declareOutput(this.output) + ` = ${vec4}(${transformName} * ${vector.associatedVariableName}.xyz, ${this._writeFloat(this.complementW)});\\n`;\r\n break;\r\n }\r\n } else {\r\n const transformName = transform.associatedVariableName;\r\n switch (vector.connectedPoint.type) {\r\n case NodeMaterialBlockConnectionPointTypes.Vector2:\r\n state.compilationString +=\r\n state._declareOutput(this.output) +\r\n ` = ${transformName} * ${vec4}(${vector.associatedVariableName}, ${this._writeFloat(this.complementZ)}, ${this._writeFloat(this.complementW)});\\n`;\r\n break;\r\n case NodeMaterialBlockConnectionPointTypes.Vector3:\r\n case NodeMaterialBlockConnectionPointTypes.Color3:\r\n state.compilationString +=\r\n state._declareOutput(this.output) + ` = ${transformName} * ${vec4}(${vector.associatedVariableName}, ${this._writeFloat(this.complementW)});\\n`;\r\n break;\r\n default:\r\n state.compilationString += state._declareOutput(this.output) + ` = ${transformName} * ${vector.associatedVariableName};\\n`;\r\n break;\r\n }\r\n }\r\n\r\n if (this.xyz.hasEndpoints) {\r\n state.compilationString += state._declareOutput(this.xyz) + ` = ${this.output.associatedVariableName}.xyz;\\n`;\r\n }\r\n }\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Update defines for shader compilation\r\n * @param mesh defines the mesh to be rendered\r\n * @param nodeMaterial defines the node material requesting the update\r\n * @param defines defines the material defines to update\r\n */\r\n public override prepareDefines(mesh: AbstractMesh, nodeMaterial: NodeMaterial, defines: NodeMaterialDefines) {\r\n // Do nothing\r\n if (mesh.nonUniformScaling) {\r\n defines.setValue(\"NONUNIFORMSCALING\", true);\r\n }\r\n }\r\n\r\n public override serialize(): any {\r\n const serializationObject = super.serialize();\r\n\r\n serializationObject.complementZ = this.complementZ;\r\n serializationObject.complementW = this.complementW;\r\n\r\n return serializationObject;\r\n }\r\n\r\n public override _deserialize(serializationObject: any, scene: Scene, rootUrl: string) {\r\n super._deserialize(serializationObject, scene, rootUrl);\r\n\r\n this.complementZ = serializationObject.complementZ !== undefined ? serializationObject.complementZ : 0.0;\r\n this.complementW = serializationObject.complementW !== undefined ? serializationObject.complementW : 1.0;\r\n }\r\n\r\n protected override _dumpPropertiesCode() {\r\n let codeString = super._dumpPropertiesCode() + `${this._codeVariableName}.complementZ = ${this.complementZ};\\n`;\r\n\r\n codeString += `${this._codeVariableName}.complementW = ${this.complementW};\\n`;\r\n\r\n return codeString;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.TransformBlock\", TransformBlock);\r\n"]}
|
|
@@ -137,6 +137,8 @@ export declare class TriPlanarBlock extends NodeMaterialBlock {
|
|
|
137
137
|
prepareDefines(mesh: AbstractMesh, nodeMaterial: NodeMaterial, defines: NodeMaterialDefines): void;
|
|
138
138
|
isReady(): boolean;
|
|
139
139
|
bind(effect: Effect): void;
|
|
140
|
+
private _samplerFunc;
|
|
141
|
+
private _generateTextureSample;
|
|
140
142
|
protected _generateTextureLookup(state: NodeMaterialBuildState): void;
|
|
141
143
|
private _generateConversionCode;
|
|
142
144
|
private _writeOutput;
|
|
@@ -12,6 +12,7 @@ import { ImageSourceBlock } from "./Dual/imageSourceBlock.js";
|
|
|
12
12
|
import { NodeMaterialConnectionPointCustomObject } from "../nodeMaterialConnectionPointCustomObject.js";
|
|
13
13
|
import { EngineStore } from "../../../Engines/engineStore.js";
|
|
14
14
|
import { editableInPropertyPage, PropertyTypeForEdition } from "../../../Decorators/nodeDecorator.js";
|
|
15
|
+
import { ShaderLanguage } from "../../shaderLanguage.js";
|
|
15
16
|
/**
|
|
16
17
|
* Block used to read a texture with triplanar mapping (see "boxmap" in https://iquilezles.org/articles/biplanar/)
|
|
17
18
|
*/
|
|
@@ -272,6 +273,18 @@ export class TriPlanarBlock extends NodeMaterialBlock {
|
|
|
272
273
|
effect.setTexture(this._samplerName, this.texture);
|
|
273
274
|
}
|
|
274
275
|
}
|
|
276
|
+
_samplerFunc(state) {
|
|
277
|
+
if (state.shaderLanguage === ShaderLanguage.WGSL) {
|
|
278
|
+
return "textureSample";
|
|
279
|
+
}
|
|
280
|
+
return "texture2D";
|
|
281
|
+
}
|
|
282
|
+
_generateTextureSample(textureName, uv, state) {
|
|
283
|
+
if (state.shaderLanguage === ShaderLanguage.WGSL) {
|
|
284
|
+
return `${this._samplerFunc(state)}(${textureName},${textureName + `Sampler`}, ${uv})`;
|
|
285
|
+
}
|
|
286
|
+
return `${this._samplerFunc(state)}(${textureName}, ${uv})`;
|
|
287
|
+
}
|
|
275
288
|
_generateTextureLookup(state) {
|
|
276
289
|
const samplerName = this.samplerName;
|
|
277
290
|
const samplerYName = this.samplerYName ?? samplerName;
|
|
@@ -286,11 +299,11 @@ export class TriPlanarBlock extends NodeMaterialBlock {
|
|
|
286
299
|
const uvy = state._getFreeVariableName("uvy");
|
|
287
300
|
const uvz = state._getFreeVariableName("uvz");
|
|
288
301
|
state.compilationString += `
|
|
289
|
-
|
|
302
|
+
${state._declareLocalVar(n, NodeMaterialBlockConnectionPointTypes.Vector3)} = ${this.normal.associatedVariableName}.xyz;
|
|
290
303
|
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
304
|
+
${state._declareLocalVar(uvx, NodeMaterialBlockConnectionPointTypes.Vector2)} = ${this.position.associatedVariableName}.yz;
|
|
305
|
+
${state._declareLocalVar(uvy, NodeMaterialBlockConnectionPointTypes.Vector2)} = ${this.position.associatedVariableName}.zx;
|
|
306
|
+
${state._declareLocalVar(uvz, NodeMaterialBlockConnectionPointTypes.Vector2)} = ${this.position.associatedVariableName}.xy;
|
|
294
307
|
`;
|
|
295
308
|
if (this.projectAsCube) {
|
|
296
309
|
state.compilationString += `
|
|
@@ -307,29 +320,35 @@ export class TriPlanarBlock extends NodeMaterialBlock {
|
|
|
307
320
|
}
|
|
308
321
|
`;
|
|
309
322
|
}
|
|
323
|
+
const suffix = state.shaderLanguage === ShaderLanguage.WGSL ? "f" : "";
|
|
310
324
|
state.compilationString += `
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
325
|
+
${state._declareLocalVar(x, NodeMaterialBlockConnectionPointTypes.Vector4)} = ${this._generateTextureSample(samplerName, uvx, state)};
|
|
326
|
+
${state._declareLocalVar(y, NodeMaterialBlockConnectionPointTypes.Vector4)} = ${this._generateTextureSample(samplerYName, uvy, state)};
|
|
327
|
+
${state._declareLocalVar(z, NodeMaterialBlockConnectionPointTypes.Vector4)} = ${this._generateTextureSample(samplerZName, uvz, state)};
|
|
314
328
|
|
|
315
329
|
// blend weights
|
|
316
|
-
|
|
330
|
+
${state._declareLocalVar(w, NodeMaterialBlockConnectionPointTypes.Vector3)} = pow(abs(${n}), vec3${suffix}(${sharpness}));
|
|
317
331
|
|
|
318
332
|
// blend and return
|
|
319
|
-
|
|
333
|
+
${state._declareLocalVar(this._tempTextureRead, NodeMaterialBlockConnectionPointTypes.Vector4)} = (${x}*${w}.x + ${y}*${w}.y + ${z}*${w}.z) / (${w}.x + ${w}.y + ${w}.z);
|
|
320
334
|
`;
|
|
321
335
|
}
|
|
322
336
|
_generateConversionCode(state, output, swizzle) {
|
|
337
|
+
let vecSpecifier = "";
|
|
338
|
+
if (state.shaderLanguage === ShaderLanguage.WGSL &&
|
|
339
|
+
(output.type === NodeMaterialBlockConnectionPointTypes.Vector3 || output.type === NodeMaterialBlockConnectionPointTypes.Color3)) {
|
|
340
|
+
vecSpecifier = "Vec3";
|
|
341
|
+
}
|
|
323
342
|
if (swizzle !== "a") {
|
|
324
343
|
// no conversion if the output is "a" (alpha)
|
|
325
344
|
if (!this.texture || !this.texture.gammaSpace) {
|
|
326
345
|
state.compilationString += `#ifdef ${this._linearDefineName}
|
|
327
|
-
${output.associatedVariableName} = toGammaSpace(${output.associatedVariableName});
|
|
346
|
+
${output.associatedVariableName} = toGammaSpace${vecSpecifier}(${output.associatedVariableName});
|
|
328
347
|
#endif
|
|
329
348
|
`;
|
|
330
349
|
}
|
|
331
350
|
state.compilationString += `#ifdef ${this._gammaDefineName}
|
|
332
|
-
${output.associatedVariableName} = toLinearSpace(${output.associatedVariableName});
|
|
351
|
+
${output.associatedVariableName} = toLinearSpace${vecSpecifier}(${output.associatedVariableName});
|
|
333
352
|
#endif
|
|
334
353
|
`;
|
|
335
354
|
}
|
|
@@ -337,7 +356,7 @@ export class TriPlanarBlock extends NodeMaterialBlock {
|
|
|
337
356
|
_writeOutput(state, output, swizzle) {
|
|
338
357
|
let complement = "";
|
|
339
358
|
if (!this.disableLevelMultiplication) {
|
|
340
|
-
complement = ` * ${this._textureInfoName}`;
|
|
359
|
+
complement = ` * ${state.shaderLanguage === ShaderLanguage.WGSL ? "uniforms." : ""}${this._textureInfoName}`;
|
|
341
360
|
}
|
|
342
361
|
state.compilationString += `${state._declareOutput(output)} = ${this._tempTextureRead}.${swizzle}${complement};\n`;
|
|
343
362
|
this._generateConversionCode(state, output, swizzle);
|
|
@@ -351,12 +370,12 @@ export class TriPlanarBlock extends NodeMaterialBlock {
|
|
|
351
370
|
this._imageSource = null;
|
|
352
371
|
}
|
|
353
372
|
this._textureInfoName = state._getFreeVariableName("textureInfoName");
|
|
354
|
-
this.level.associatedVariableName = this._textureInfoName;
|
|
373
|
+
this.level.associatedVariableName = (state.shaderLanguage === ShaderLanguage.WGSL ? "uniforms." : "") + this._textureInfoName;
|
|
355
374
|
this._tempTextureRead = state._getFreeVariableName("tempTextureRead");
|
|
356
375
|
this._linearDefineName = state._getFreeDefineName("ISLINEAR");
|
|
357
376
|
this._gammaDefineName = state._getFreeDefineName("ISGAMMA");
|
|
358
377
|
if (!this._imageSource) {
|
|
359
|
-
this._samplerName = state._getFreeVariableName(this.name + "
|
|
378
|
+
this._samplerName = state._getFreeVariableName(this.name + "Texture");
|
|
360
379
|
state._emit2DSampler(this._samplerName);
|
|
361
380
|
}
|
|
362
381
|
// Declarations
|