super-three 0.165.0 → 0.167.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/build/three.cjs +706 -383
- package/build/three.module.js +702 -384
- package/build/three.module.min.js +1 -1
- package/build/three.webgpu.js +76086 -0
- package/build/three.webgpu.min.js +6 -0
- package/examples/jsm/Addons.js +2 -1
- package/examples/jsm/csm/CSMShader.js +4 -4
- package/examples/jsm/exporters/GLTFExporter.js +7 -3
- package/examples/jsm/geometries/TeapotGeometry.js +1 -1
- package/examples/jsm/helpers/ViewHelper.js +51 -2
- package/examples/jsm/libs/tween.module.js +64 -75
- package/examples/jsm/lights/RectAreaLightTexturesLib.js +91 -0
- package/examples/jsm/lights/RectAreaLightUniformsLib.js +8 -63
- package/examples/jsm/lines/webgpu/Line2.js +20 -0
- package/examples/jsm/lines/webgpu/LineSegments2.js +376 -0
- package/examples/jsm/loaders/FBXLoader.js +23 -45
- package/examples/jsm/loaders/GLTFLoader.js +10 -4
- package/examples/jsm/loaders/MaterialXLoader.js +2 -9
- package/examples/jsm/loaders/USDZLoader.js +124 -76
- package/examples/jsm/loaders/UltraHDRLoader.js +583 -0
- package/examples/jsm/loaders/VTKLoader.js +76 -3
- package/examples/jsm/misc/GPUComputationRenderer.js +9 -19
- package/examples/jsm/modifiers/SimplifyModifier.js +2 -1
- package/examples/jsm/objects/InstancedPoints.js +2 -2
- package/examples/jsm/postprocessing/RenderTransitionPass.js +13 -38
- package/examples/jsm/postprocessing/SSAOPass.js +6 -9
- package/examples/jsm/postprocessing/UnrealBloomPass.js +4 -4
- package/examples/jsm/shaders/ColorifyShader.js +1 -2
- package/examples/jsm/shaders/FXAAShader.js +0 -2
- package/examples/jsm/shaders/GTAOShader.js +1 -1
- package/examples/jsm/shaders/LuminosityHighPassShader.js +1 -3
- package/examples/jsm/transpiler/GLSLDecoder.js +46 -4
- package/examples/jsm/transpiler/TSLEncoder.js +17 -15
- package/package.json +7 -6
- package/src/Three.WebGPU.js +194 -0
- package/src/Three.js +2 -0
- package/src/constants.js +4 -1
- package/src/core/Object3D.js +22 -22
- package/src/extras/TextureUtils.js +210 -0
- package/src/lights/Light.js +1 -0
- package/src/lights/LightShadow.js +5 -0
- package/{examples/jsm/lights → src/lights/webgpu}/IESSpotLight.js +1 -1
- package/src/loaders/ObjectLoader.js +33 -2
- package/src/materials/Material.js +13 -4
- package/src/math/Box2.js +4 -4
- package/src/math/Box3.js +6 -6
- package/src/math/ColorManagement.js +10 -0
- package/src/math/Matrix2.js +54 -0
- package/src/math/Vector4.js +13 -0
- package/{examples/jsm → src}/nodes/Nodes.js +30 -12
- package/{examples/jsm → src}/nodes/accessors/BatchNode.js +28 -10
- package/{examples/jsm → src}/nodes/accessors/BufferAttributeNode.js +36 -1
- package/src/nodes/accessors/CameraNode.js +19 -0
- package/{examples/jsm → src}/nodes/accessors/CubeTextureNode.js +22 -5
- package/src/nodes/accessors/InstanceNode.js +140 -0
- package/{examples/jsm → src}/nodes/accessors/MaterialNode.js +22 -2
- package/{examples/jsm → src}/nodes/accessors/ModelNode.js +2 -1
- package/{examples/jsm → src}/nodes/accessors/MorphNode.js +24 -20
- package/{examples/jsm → src}/nodes/accessors/NormalNode.js +1 -1
- package/{examples/jsm → src}/nodes/accessors/Object3DNode.js +1 -1
- package/{examples/jsm → src}/nodes/accessors/ReferenceNode.js +1 -1
- package/{examples/jsm → src}/nodes/accessors/ReflectVectorNode.js +4 -0
- package/{examples/jsm → src}/nodes/accessors/StorageBufferNode.js +50 -1
- package/{examples/jsm → src}/nodes/accessors/StorageTextureNode.js +12 -3
- package/{examples/jsm → src}/nodes/accessors/TextureNode.js +55 -18
- package/{examples/jsm → src}/nodes/accessors/UniformsNode.js +7 -1
- package/{examples/jsm → src}/nodes/accessors/VertexColorNode.js +2 -1
- package/{examples/jsm → src}/nodes/code/ScriptableNode.js +14 -0
- package/{examples/jsm → src}/nodes/code/ScriptableValueNode.js +2 -1
- package/{examples/jsm → src}/nodes/core/AttributeNode.js +20 -6
- package/{examples/jsm → src}/nodes/core/CacheNode.js +7 -10
- package/{examples/jsm → src}/nodes/core/IndexNode.js +6 -0
- package/{examples/jsm → src}/nodes/core/LightingModel.js +2 -2
- package/src/nodes/core/MRTNode.js +76 -0
- package/{examples/jsm → src}/nodes/core/Node.js +18 -12
- package/{examples/jsm → src}/nodes/core/NodeBuilder.js +175 -37
- package/src/nodes/core/NodeCache.js +36 -0
- package/{examples/jsm → src}/nodes/core/NodeFrame.js +42 -0
- package/{examples/jsm → src}/nodes/core/NodeFunction.js +2 -2
- package/{examples/jsm → src}/nodes/core/NodeUniform.js +1 -2
- package/{examples/jsm → src}/nodes/core/NodeUtils.js +6 -1
- package/{examples/jsm → src}/nodes/core/PropertyNode.js +1 -0
- package/{examples/jsm → src}/nodes/core/TempNode.js +2 -2
- package/{examples/jsm → src}/nodes/core/UniformGroupNode.js +20 -0
- package/{examples/jsm → src}/nodes/core/UniformNode.js +10 -1
- package/{examples/jsm → src}/nodes/core/VarNode.js +2 -6
- package/{examples/jsm → src}/nodes/core/VaryingNode.js +8 -0
- package/{examples/jsm → src}/nodes/display/AfterImageNode.js +19 -27
- package/{examples/jsm → src}/nodes/display/AnamorphicNode.js +18 -21
- package/src/nodes/display/BloomNode.js +333 -0
- package/{examples/jsm → src}/nodes/display/ColorAdjustmentNode.js +7 -2
- package/{examples/jsm → src}/nodes/display/ColorSpaceNode.js +1 -1
- package/src/nodes/display/DenoiseNode.js +198 -0
- package/src/nodes/display/DepthOfFieldNode.js +119 -0
- package/src/nodes/display/DotScreenNode.js +75 -0
- package/src/nodes/display/FXAANode.js +327 -0
- package/src/nodes/display/FilmNode.js +52 -0
- package/{examples/jsm → src}/nodes/display/FrontFacingNode.js +2 -1
- package/src/nodes/display/GTAONode.js +324 -0
- package/{examples/jsm → src}/nodes/display/GaussianBlurNode.js +34 -17
- package/src/nodes/display/Lut3DNode.js +53 -0
- package/{examples/jsm → src}/nodes/display/NormalMapNode.js +1 -1
- package/src/nodes/display/PassNode.js +291 -0
- package/src/nodes/display/PixelationPassNode.js +201 -0
- package/src/nodes/display/RGBShiftNode.js +49 -0
- package/src/nodes/display/RenderOutputNode.js +56 -0
- package/src/nodes/display/SobelOperatorNode.js +121 -0
- package/{examples/jsm → src}/nodes/display/ToneMappingNode.js +44 -5
- package/src/nodes/display/TransitionNode.js +76 -0
- package/{examples/jsm → src}/nodes/display/ViewportDepthNode.js +39 -16
- package/{examples/jsm → src}/nodes/display/ViewportDepthTextureNode.js +2 -1
- package/{examples/jsm → src}/nodes/display/ViewportNode.js +2 -1
- package/{examples/jsm → src}/nodes/display/ViewportSharedTextureNode.js +2 -1
- package/{examples/jsm → src}/nodes/display/ViewportTextureNode.js +5 -2
- package/src/nodes/functions/BSDF/LTC.js +131 -0
- package/src/nodes/functions/BasicLightingModel.js +78 -0
- package/{examples/jsm → src}/nodes/functions/PhongLightingModel.js +5 -3
- package/{examples/jsm → src}/nodes/functions/PhysicalLightingModel.js +42 -1
- package/{examples/jsm → src}/nodes/functions/ToonLightingModel.js +3 -1
- package/{examples/jsm → src}/nodes/geometry/RangeNode.js +19 -6
- package/{examples/jsm → src}/nodes/lighting/AONode.js +1 -4
- package/{examples/jsm → src}/nodes/lighting/AmbientLightNode.js +1 -1
- package/src/nodes/lighting/AnalyticLightNode.js +333 -0
- package/src/nodes/lighting/BasicEnvironmentNode.js +26 -0
- package/src/nodes/lighting/BasicLightMapNode.js +29 -0
- package/{examples/jsm → src}/nodes/lighting/DirectionalLightNode.js +2 -3
- package/{examples/jsm → src}/nodes/lighting/EnvironmentNode.js +5 -4
- package/{examples/jsm → src}/nodes/lighting/HemisphereLightNode.js +2 -1
- package/{examples/jsm → src}/nodes/lighting/IESSpotLightNode.js +1 -1
- package/{examples/jsm → src}/nodes/lighting/LightingNode.js +2 -0
- package/{examples/jsm → src}/nodes/lighting/LightsNode.js +1 -3
- package/{examples/jsm → src}/nodes/lighting/PointLightNode.js +2 -3
- package/src/nodes/lighting/RectAreaLightNode.js +97 -0
- package/{examples/jsm → src}/nodes/lighting/SpotLightNode.js +2 -3
- package/{examples/jsm → src}/nodes/loaders/NodeLoader.js +3 -1
- package/{examples/jsm → src}/nodes/loaders/NodeMaterialLoader.js +2 -1
- package/{examples/jsm → src}/nodes/loaders/NodeObjectLoader.js +2 -1
- package/{examples/jsm → src}/nodes/materials/InstancedPointsNodeMaterial.js +3 -3
- package/{examples/jsm → src}/nodes/materials/Line2NodeMaterial.js +3 -3
- package/{examples/jsm → src}/nodes/materials/LineBasicNodeMaterial.js +3 -3
- package/{examples/jsm → src}/nodes/materials/LineDashedNodeMaterial.js +4 -3
- package/src/nodes/materials/MeshBasicNodeMaterial.js +73 -0
- package/{examples/jsm → src}/nodes/materials/MeshLambertNodeMaterial.js +12 -3
- package/{examples/jsm → src}/nodes/materials/MeshMatcapNodeMaterial.js +6 -5
- package/{examples/jsm → src}/nodes/materials/MeshNormalNodeMaterial.js +5 -3
- package/{examples/jsm → src}/nodes/materials/MeshPhongNodeMaterial.js +11 -3
- package/{examples/jsm → src}/nodes/materials/MeshPhysicalNodeMaterial.js +5 -4
- package/{examples/jsm → src}/nodes/materials/MeshStandardNodeMaterial.js +14 -3
- package/{examples/jsm → src}/nodes/materials/MeshToonNodeMaterial.js +3 -3
- package/{examples/jsm → src}/nodes/materials/NodeMaterial.js +85 -20
- package/{examples/jsm → src}/nodes/materials/PointsNodeMaterial.js +3 -3
- package/{examples/jsm → src}/nodes/materials/ShadowNodeMaterial.js +3 -3
- package/{examples/jsm → src}/nodes/materials/SpriteNodeMaterial.js +3 -3
- package/{examples/jsm → src}/nodes/materialx/lib/mx_hsv.js +9 -17
- package/{examples/jsm → src}/nodes/materialx/lib/mx_noise.js +474 -577
- package/{examples/jsm → src}/nodes/materialx/lib/mx_transform_color.js +2 -8
- package/{examples/jsm → src}/nodes/math/CondNode.js +13 -6
- package/{examples/jsm → src}/nodes/math/MathNode.js +14 -1
- package/{examples/jsm → src}/nodes/math/OperatorNode.js +6 -6
- package/{examples/jsm → src}/nodes/parsers/GLSLNodeFunction.js +7 -7
- package/{examples/jsm → src}/nodes/pmrem/PMREMNode.js +2 -1
- package/{examples/jsm → src}/nodes/shadernode/ShaderNode.js +2 -0
- package/{examples/jsm → src}/nodes/utils/DiscardNode.js +1 -0
- package/{examples/jsm → src}/nodes/utils/FunctionOverloadingNode.js +2 -0
- package/{examples/jsm → src}/nodes/utils/LoopNode.js +7 -6
- package/{examples/jsm → src}/nodes/utils/MaxMipLevelNode.js +8 -2
- package/src/nodes/utils/RTTNode.js +130 -0
- package/{examples/jsm → src}/nodes/utils/ReflectorNode.js +9 -1
- package/src/objects/BatchedMesh.js +168 -188
- package/src/objects/InstancedMesh.js +1 -1
- package/src/renderers/WebGLRenderer.js +38 -25
- package/{examples/jsm → src}/renderers/common/Attributes.js +2 -1
- package/{examples/jsm → src}/renderers/common/Backend.js +30 -27
- package/{examples/jsm → src}/renderers/common/Background.js +9 -3
- package/src/renderers/common/BindGroup.js +16 -0
- package/{examples/jsm → src}/renderers/common/Bindings.js +38 -23
- package/{examples/jsm → src}/renderers/common/ClippingContext.js +4 -2
- package/{examples/jsm → src}/renderers/common/Color4.js +1 -1
- package/{examples/jsm → src}/renderers/common/CubeRenderTarget.js +7 -1
- package/{examples/jsm → src}/renderers/common/Geometries.js +37 -5
- package/{examples/jsm → src}/renderers/common/Info.js +34 -6
- package/src/renderers/common/PostProcessing.js +87 -0
- package/{examples/jsm/objects → src/renderers/common}/QuadMesh.js +6 -3
- package/{examples/jsm → src}/renderers/common/RenderContext.js +1 -1
- package/{examples/jsm → src}/renderers/common/RenderContexts.js +1 -1
- package/{examples/jsm → src}/renderers/common/RenderObject.js +44 -11
- package/{examples/jsm → src}/renderers/common/Renderer.js +84 -32
- package/{examples/jsm → src}/renderers/common/SampledTexture.js +2 -2
- package/{examples/jsm → src}/renderers/common/StorageBufferAttribute.js +1 -1
- package/{examples/jsm → src}/renderers/common/StorageInstancedBufferAttribute.js +1 -1
- package/{examples/jsm → src}/renderers/common/StorageTexture.js +2 -1
- package/{examples/jsm → src}/renderers/common/Textures.js +6 -2
- package/{examples/jsm → src}/renderers/common/Uniform.js +9 -4
- package/{examples/jsm → src}/renderers/common/UniformsGroup.js +69 -31
- package/{examples/jsm → src}/renderers/common/extras/PMREMGenerator.js +13 -12
- package/src/renderers/common/nodes/NodeBuilderState.js +58 -0
- package/{examples/jsm → src}/renderers/common/nodes/NodeSampledTexture.js +6 -5
- package/{examples/jsm → src}/renderers/common/nodes/NodeSampler.js +2 -1
- package/{examples/jsm → src}/renderers/common/nodes/NodeStorageBuffer.js +5 -1
- package/{examples/jsm → src}/renderers/common/nodes/NodeUniform.js +3 -3
- package/{examples/jsm → src}/renderers/common/nodes/NodeUniformBuffer.js +2 -1
- package/{examples/jsm → src}/renderers/common/nodes/NodeUniformsGroup.js +2 -8
- package/{examples/jsm → src}/renderers/common/nodes/Nodes.js +37 -16
- package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +16 -1
- package/src/renderers/shaders/ShaderChunk/batching_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/colorspace_pars_fragment.glsl.js +0 -9
- package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -10
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +3 -3
- package/src/renderers/shaders/ShaderChunk/packing.glsl.js +45 -13
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +7 -4
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_vertex.glsl.js +3 -0
- package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +3 -3
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +8 -0
- package/src/renderers/shaders/UniformsLib.js +3 -0
- package/src/renderers/webgl/WebGLAttributes.js +2 -2
- package/src/renderers/webgl/WebGLBufferRenderer.js +6 -19
- package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +6 -18
- package/src/renderers/webgl/WebGLLights.js +6 -0
- package/src/renderers/webgl/WebGLProgram.js +26 -0
- package/src/renderers/webgl/WebGLPrograms.js +1 -1
- package/src/renderers/webgl/WebGLTextures.js +14 -53
- package/src/renderers/webgl/WebGLUniforms.js +12 -2
- package/src/renderers/webgl/WebGLUniformsGroups.js +7 -7
- package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/WebGLBackend.js +156 -54
- package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/nodes/GLSLNodeBuilder.js +178 -43
- package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLAttributeUtils.js +2 -2
- package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLConstants.js +1 -0
- package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLExtensions.js +2 -0
- package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLState.js +1 -1
- package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLTextureUtils.js +34 -2
- package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLUtils.js +1 -1
- package/{examples/jsm → src}/renderers/webgpu/WebGPUBackend.js +164 -76
- package/{examples/jsm → src}/renderers/webgpu/WebGPURenderer.js +2 -2
- package/{examples/jsm → src}/renderers/webgpu/nodes/WGSLNodeBuilder.js +194 -56
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +159 -0
- package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUAttributeUtils.js +2 -1
- package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUBindingUtils.js +20 -13
- package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUConstants.js +3 -1
- package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUPipelineUtils.js +28 -21
- package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUTextureUtils.js +40 -23
- package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUUtils.js +24 -3
- package/src/renderers/webxr/WebXRDepthSensing.js +6 -0
- package/src/renderers/webxr/WebXRManager.js +6 -0
- package/src/textures/CompressedArrayTexture.js +1 -1
- package/examples/jsm/nodes/accessors/CameraNode.js +0 -12
- package/examples/jsm/nodes/accessors/InstanceNode.js +0 -94
- package/examples/jsm/nodes/core/NodeCache.js +0 -26
- package/examples/jsm/nodes/display/PassNode.js +0 -201
- package/examples/jsm/nodes/lighting/AnalyticLightNode.js +0 -256
- package/examples/jsm/nodes/materials/MeshBasicNodeMaterial.js +0 -28
- package/examples/jsm/renderers/common/PostProcessing.js +0 -33
- package/examples/jsm/renderers/common/nodes/NodeBuilderState.js +0 -44
- package/examples/jsm/renderers/webgpu/nodes/WGSLNodeFunction.js +0 -104
- /package/{examples/jsm → src}/nodes/accessors/AccessorsUtils.js +0 -0
- /package/{examples/jsm → src}/nodes/accessors/BitangentNode.js +0 -0
- /package/{examples/jsm → src}/nodes/accessors/BufferNode.js +0 -0
- /package/{examples/jsm → src}/nodes/accessors/ClippingNode.js +0 -0
- /package/{examples/jsm → src}/nodes/accessors/InstancedPointsMaterialNode.js +0 -0
- /package/{examples/jsm → src}/nodes/accessors/MaterialReferenceNode.js +0 -0
- /package/{examples/jsm → src}/nodes/accessors/ModelViewProjectionNode.js +0 -0
- /package/{examples/jsm → src}/nodes/accessors/PointUVNode.js +0 -0
- /package/{examples/jsm → src}/nodes/accessors/PositionNode.js +0 -0
- /package/{examples/jsm → src}/nodes/accessors/RendererReferenceNode.js +0 -0
- /package/{examples/jsm → src}/nodes/accessors/SceneNode.js +0 -0
- /package/{examples/jsm → src}/nodes/accessors/SkinningNode.js +0 -0
- /package/{examples/jsm → src}/nodes/accessors/TangentNode.js +0 -0
- /package/{examples/jsm → src}/nodes/accessors/Texture3DNode.js +0 -0
- /package/{examples/jsm → src}/nodes/accessors/TextureBicubicNode.js +0 -0
- /package/{examples/jsm → src}/nodes/accessors/TextureSizeNode.js +0 -0
- /package/{examples/jsm → src}/nodes/accessors/UVNode.js +0 -0
- /package/{examples/jsm → src}/nodes/accessors/UserDataNode.js +0 -0
- /package/{examples/jsm → src}/nodes/code/CodeNode.js +0 -0
- /package/{examples/jsm → src}/nodes/code/ExpressionNode.js +0 -0
- /package/{examples/jsm → src}/nodes/code/FunctionCallNode.js +0 -0
- /package/{examples/jsm → src}/nodes/code/FunctionNode.js +0 -0
- /package/{examples/jsm → src}/nodes/core/AssignNode.js +0 -0
- /package/{examples/jsm → src}/nodes/core/BypassNode.js +0 -0
- /package/{examples/jsm → src}/nodes/core/ConstNode.js +0 -0
- /package/{examples/jsm → src}/nodes/core/ContextNode.js +0 -0
- /package/{examples/jsm → src}/nodes/core/InputNode.js +0 -0
- /package/{examples/jsm → src}/nodes/core/NodeAttribute.js +0 -0
- /package/{examples/jsm → src}/nodes/core/NodeCode.js +0 -0
- /package/{examples/jsm → src}/nodes/core/NodeFunctionInput.js +0 -0
- /package/{examples/jsm → src}/nodes/core/NodeKeywords.js +0 -0
- /package/{examples/jsm → src}/nodes/core/NodeParser.js +0 -0
- /package/{examples/jsm → src}/nodes/core/NodeVar.js +0 -0
- /package/{examples/jsm → src}/nodes/core/NodeVarying.js +0 -0
- /package/{examples/jsm → src}/nodes/core/OutputStructNode.js +0 -0
- /package/{examples/jsm → src}/nodes/core/ParameterNode.js +0 -0
- /package/{examples/jsm → src}/nodes/core/StackNode.js +0 -0
- /package/{examples/jsm → src}/nodes/core/StructTypeNode.js +0 -0
- /package/{examples/jsm → src}/nodes/core/UniformGroup.js +0 -0
- /package/{examples/jsm → src}/nodes/core/constants.js +0 -0
- /package/{examples/jsm → src}/nodes/display/BlendModeNode.js +0 -0
- /package/{examples/jsm → src}/nodes/display/BumpMapNode.js +0 -0
- /package/{examples/jsm → src}/nodes/display/PosterizeNode.js +0 -0
- /package/{examples/jsm → src}/nodes/fog/FogExp2Node.js +0 -0
- /package/{examples/jsm → src}/nodes/fog/FogNode.js +0 -0
- /package/{examples/jsm → src}/nodes/fog/FogRangeNode.js +0 -0
- /package/{examples/jsm → src}/nodes/functions/BSDF/BRDF_GGX.js +0 -0
- /package/{examples/jsm → src}/nodes/functions/BSDF/BRDF_Lambert.js +0 -0
- /package/{examples/jsm → src}/nodes/functions/BSDF/BRDF_Sheen.js +0 -0
- /package/{examples/jsm → src}/nodes/functions/BSDF/DFGApprox.js +0 -0
- /package/{examples/jsm → src}/nodes/functions/BSDF/D_GGX.js +0 -0
- /package/{examples/jsm → src}/nodes/functions/BSDF/D_GGX_Anisotropic.js +0 -0
- /package/{examples/jsm → src}/nodes/functions/BSDF/EnvironmentBRDF.js +0 -0
- /package/{examples/jsm → src}/nodes/functions/BSDF/F_Schlick.js +0 -0
- /package/{examples/jsm → src}/nodes/functions/BSDF/Schlick_to_F0.js +0 -0
- /package/{examples/jsm → src}/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +0 -0
- /package/{examples/jsm → src}/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +0 -0
- /package/{examples/jsm → src}/nodes/functions/ShadowMaskModel.js +0 -0
- /package/{examples/jsm → src}/nodes/functions/material/getGeometryRoughness.js +0 -0
- /package/{examples/jsm → src}/nodes/functions/material/getRoughness.js +0 -0
- /package/{examples/jsm → src}/nodes/gpgpu/ComputeNode.js +0 -0
- /package/{examples/jsm → src}/nodes/lighting/IrradianceNode.js +0 -0
- /package/{examples/jsm → src}/nodes/lighting/LightNode.js +0 -0
- /package/{examples/jsm → src}/nodes/lighting/LightUtils.js +0 -0
- /package/{examples/jsm → src}/nodes/lighting/LightingContextNode.js +0 -0
- /package/{examples/jsm → src}/nodes/materials/Materials.js +0 -0
- /package/{examples/jsm → src}/nodes/materials/MeshSSSNodeMaterial.js +0 -0
- /package/{examples/jsm → src}/nodes/materials/VolumeNodeMaterial.js +0 -0
- /package/{examples/jsm → src}/nodes/materialx/DISCLAIMER.md +0 -0
- /package/{examples/jsm → src}/nodes/materialx/MaterialXNodes.js +0 -0
- /package/{examples/jsm → src}/nodes/math/HashNode.js +0 -0
- /package/{examples/jsm → src}/nodes/math/MathUtils.js +0 -0
- /package/{examples/jsm → src}/nodes/math/TriNoise3D.js +0 -0
- /package/{examples/jsm → src}/nodes/parsers/GLSLNodeParser.js +0 -0
- /package/{examples/jsm → src}/nodes/pmrem/PMREMUtils.js +0 -0
- /package/{examples/jsm → src}/nodes/procedural/CheckerNode.js +0 -0
- /package/{examples/jsm → src}/nodes/utils/ArrayElementNode.js +0 -0
- /package/{examples/jsm → src}/nodes/utils/ConvertNode.js +0 -0
- /package/{examples/jsm → src}/nodes/utils/EquirectUVNode.js +0 -0
- /package/{examples/jsm → src}/nodes/utils/JoinNode.js +0 -0
- /package/{examples/jsm → src}/nodes/utils/MatcapUVNode.js +0 -0
- /package/{examples/jsm → src}/nodes/utils/OscNode.js +0 -0
- /package/{examples/jsm → src}/nodes/utils/PackingNode.js +0 -0
- /package/{examples/jsm → src}/nodes/utils/RemapNode.js +0 -0
- /package/{examples/jsm → src}/nodes/utils/RotateNode.js +0 -0
- /package/{examples/jsm → src}/nodes/utils/RotateUVNode.js +0 -0
- /package/{examples/jsm → src}/nodes/utils/SetNode.js +0 -0
- /package/{examples/jsm → src}/nodes/utils/SplitNode.js +0 -0
- /package/{examples/jsm → src}/nodes/utils/SpriteSheetUVNode.js +0 -0
- /package/{examples/jsm → src}/nodes/utils/StorageArrayElementNode.js +0 -0
- /package/{examples/jsm → src}/nodes/utils/TimerNode.js +0 -0
- /package/{examples/jsm → src}/nodes/utils/TriplanarTexturesNode.js +0 -0
- /package/{examples/jsm → src}/renderers/common/Animation.js +0 -0
- /package/{examples/jsm → src}/renderers/common/Binding.js +0 -0
- /package/{examples/jsm → src}/renderers/common/Buffer.js +0 -0
- /package/{examples/jsm → src}/renderers/common/BufferUtils.js +0 -0
- /package/{examples/jsm → src}/renderers/common/ChainMap.js +0 -0
- /package/{examples/jsm → src}/renderers/common/ComputePipeline.js +0 -0
- /package/{examples/jsm → src}/renderers/common/Constants.js +0 -0
- /package/{examples/jsm → src}/renderers/common/DataMap.js +0 -0
- /package/{examples/jsm → src}/renderers/common/Pipeline.js +0 -0
- /package/{examples/jsm → src}/renderers/common/Pipelines.js +0 -0
- /package/{examples/jsm → src}/renderers/common/ProgrammableStage.js +0 -0
- /package/{examples/jsm → src}/renderers/common/RenderBundle.js +0 -0
- /package/{examples/jsm → src}/renderers/common/RenderBundles.js +0 -0
- /package/{examples/jsm → src}/renderers/common/RenderList.js +0 -0
- /package/{examples/jsm → src}/renderers/common/RenderLists.js +0 -0
- /package/{examples/jsm → src}/renderers/common/RenderObjects.js +0 -0
- /package/{examples/jsm → src}/renderers/common/RenderPipeline.js +0 -0
- /package/{examples/jsm → src}/renderers/common/Sampler.js +0 -0
- /package/{examples/jsm → src}/renderers/common/StorageBuffer.js +0 -0
- /package/{examples/jsm → src}/renderers/common/UniformBuffer.js +0 -0
- /package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/WebGLBufferRenderer.js +0 -0
- /package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLCapabilities.js +0 -0
- /package/{examples/jsm → src}/renderers/webgpu/nodes/WGSLNodeParser.js +0 -0
- /package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUTexturePassUtils.js +0 -0
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
import { NoColorSpace, FloatType } from 'three';
|
|
2
|
-
|
|
3
1
|
import NodeUniformsGroup from '../../common/nodes/NodeUniformsGroup.js';
|
|
4
2
|
|
|
5
3
|
import NodeSampler from '../../common/nodes/NodeSampler.js';
|
|
@@ -13,8 +11,9 @@ import { NodeBuilder, CodeNode } from '../../../nodes/Nodes.js';
|
|
|
13
11
|
import { getFormat } from '../utils/WebGPUTextureUtils.js';
|
|
14
12
|
|
|
15
13
|
import WGSLNodeParser from './WGSLNodeParser.js';
|
|
16
|
-
import { GPUStorageTextureAccess } from '../utils/WebGPUConstants.js';
|
|
14
|
+
import { GPUBufferBindingType, GPUStorageTextureAccess } from '../utils/WebGPUConstants.js';
|
|
17
15
|
|
|
16
|
+
import { NoColorSpace, FloatType } from '../../../constants.js';
|
|
18
17
|
|
|
19
18
|
// GPUShaderStage is not defined in browsers not supporting WebGPU
|
|
20
19
|
const GPUShaderStage = self.GPUShaderStage;
|
|
@@ -27,6 +26,7 @@ const gpuShaderStageLib = {
|
|
|
27
26
|
|
|
28
27
|
const supports = {
|
|
29
28
|
instance: true,
|
|
29
|
+
swizzleAssign: false,
|
|
30
30
|
storageBuffer: true
|
|
31
31
|
};
|
|
32
32
|
|
|
@@ -126,20 +126,45 @@ fn threejs_repeatWrapping( uv : vec2<f32>, dimension : vec2<u32> ) -> vec2<u32>
|
|
|
126
126
|
|
|
127
127
|
return ( ( uvScaled % dimension ) + dimension ) % dimension;
|
|
128
128
|
|
|
129
|
+
}
|
|
130
|
+
` ),
|
|
131
|
+
biquadraticTexture: new CodeNode( `
|
|
132
|
+
fn threejs_biquadraticTexture( map : texture_2d<f32>, coord : vec2f, level : i32 ) -> vec4f {
|
|
133
|
+
|
|
134
|
+
let res = vec2f( textureDimensions( map, level ) );
|
|
135
|
+
|
|
136
|
+
let uvScaled = coord * res;
|
|
137
|
+
let uvWrapping = ( ( uvScaled % res ) + res ) % res;
|
|
138
|
+
|
|
139
|
+
// https://www.shadertoy.com/view/WtyXRy
|
|
140
|
+
|
|
141
|
+
let uv = uvWrapping - 0.5;
|
|
142
|
+
let iuv = floor( uv );
|
|
143
|
+
let f = fract( uv );
|
|
144
|
+
|
|
145
|
+
let rg1 = textureLoad( map, vec2i( iuv + vec2( 0.5, 0.5 ) ), level );
|
|
146
|
+
let rg2 = textureLoad( map, vec2i( iuv + vec2( 1.5, 0.5 ) ), level );
|
|
147
|
+
let rg3 = textureLoad( map, vec2i( iuv + vec2( 0.5, 1.5 ) ), level );
|
|
148
|
+
let rg4 = textureLoad( map, vec2i( iuv + vec2( 1.5, 1.5 ) ), level );
|
|
149
|
+
|
|
150
|
+
return mix( mix( rg1, rg2, f.x ), mix( rg3, rg4, f.x ), f.y );
|
|
151
|
+
|
|
129
152
|
}
|
|
130
153
|
` )
|
|
131
154
|
};
|
|
132
155
|
|
|
133
156
|
class WGSLNodeBuilder extends NodeBuilder {
|
|
134
157
|
|
|
135
|
-
constructor( object, renderer
|
|
158
|
+
constructor( object, renderer ) {
|
|
136
159
|
|
|
137
|
-
super( object, renderer, new WGSLNodeParser()
|
|
160
|
+
super( object, renderer, new WGSLNodeParser() );
|
|
138
161
|
|
|
139
162
|
this.uniformGroups = {};
|
|
140
163
|
|
|
141
164
|
this.builtins = {};
|
|
142
165
|
|
|
166
|
+
this.directives = {};
|
|
167
|
+
|
|
143
168
|
}
|
|
144
169
|
|
|
145
170
|
needsColorSpaceToLinear( texture ) {
|
|
@@ -162,9 +187,13 @@ class WGSLNodeBuilder extends NodeBuilder {
|
|
|
162
187
|
|
|
163
188
|
}
|
|
164
189
|
|
|
190
|
+
} else if ( this.isFilteredTexture( texture ) ) {
|
|
191
|
+
|
|
192
|
+
return this.generateFilteredTexture( texture, textureProperty, uvSnippet );
|
|
193
|
+
|
|
165
194
|
} else {
|
|
166
195
|
|
|
167
|
-
return this.generateTextureLod( texture, textureProperty, uvSnippet );
|
|
196
|
+
return this.generateTextureLod( texture, textureProperty, uvSnippet, '0' );
|
|
168
197
|
|
|
169
198
|
}
|
|
170
199
|
|
|
@@ -190,6 +219,10 @@ class WGSLNodeBuilder extends NodeBuilder {
|
|
|
190
219
|
|
|
191
220
|
return `textureSampleLevel( ${ textureProperty }, ${ textureProperty }_sampler, ${ uvSnippet }, ${ levelSnippet } )`;
|
|
192
221
|
|
|
222
|
+
} else if ( this.isFilteredTexture( texture ) ) {
|
|
223
|
+
|
|
224
|
+
return this.generateFilteredTexture( texture, textureProperty, uvSnippet, levelSnippet );
|
|
225
|
+
|
|
193
226
|
} else {
|
|
194
227
|
|
|
195
228
|
return this.generateTextureLod( texture, textureProperty, uvSnippet, levelSnippet );
|
|
@@ -198,11 +231,19 @@ class WGSLNodeBuilder extends NodeBuilder {
|
|
|
198
231
|
|
|
199
232
|
}
|
|
200
233
|
|
|
234
|
+
generateFilteredTexture( texture, textureProperty, uvSnippet, levelSnippet = '0' ) {
|
|
235
|
+
|
|
236
|
+
this._include( 'biquadraticTexture' );
|
|
237
|
+
|
|
238
|
+
return `threejs_biquadraticTexture( ${ textureProperty }, ${ uvSnippet }, i32( ${ levelSnippet } ) )`;
|
|
239
|
+
|
|
240
|
+
}
|
|
241
|
+
|
|
201
242
|
generateTextureLod( texture, textureProperty, uvSnippet, levelSnippet = '0' ) {
|
|
202
243
|
|
|
203
244
|
this._include( 'repeatWrapping' );
|
|
204
245
|
|
|
205
|
-
const dimension = `textureDimensions( ${ textureProperty }, 0 )`;
|
|
246
|
+
const dimension = texture.isMultisampleRenderTargetTexture === true ? `textureDimensions( ${ textureProperty } )` : `textureDimensions( ${ textureProperty }, 0 )`;
|
|
206
247
|
|
|
207
248
|
return `textureLoad( ${ textureProperty }, threejs_repeatWrapping( ${ uvSnippet }, ${ dimension } ), i32( ${ levelSnippet } ) )`;
|
|
208
249
|
|
|
@@ -230,7 +271,7 @@ class WGSLNodeBuilder extends NodeBuilder {
|
|
|
230
271
|
|
|
231
272
|
isUnfilterable( texture ) {
|
|
232
273
|
|
|
233
|
-
return this.getComponentTypeFromTexture( texture ) !== 'float' || ( texture.isDataTexture === true && texture.type === FloatType );
|
|
274
|
+
return this.getComponentTypeFromTexture( texture ) !== 'float' || ( texture.isDataTexture === true && texture.type === FloatType ) || texture.isMultisampleRenderTargetTexture === true;
|
|
234
275
|
|
|
235
276
|
}
|
|
236
277
|
|
|
@@ -303,6 +344,20 @@ class WGSLNodeBuilder extends NodeBuilder {
|
|
|
303
344
|
|
|
304
345
|
}
|
|
305
346
|
|
|
347
|
+
generateTextureBias( texture, textureProperty, uvSnippet, biasSnippet, depthSnippet, shaderStage = this.shaderStage ) {
|
|
348
|
+
|
|
349
|
+
if ( shaderStage === 'fragment' ) {
|
|
350
|
+
|
|
351
|
+
return `textureSampleBias( ${ textureProperty }, ${ textureProperty }_sampler, ${ uvSnippet }, ${ biasSnippet } )`;
|
|
352
|
+
|
|
353
|
+
} else {
|
|
354
|
+
|
|
355
|
+
console.error( `WebGPURenderer: THREE.TextureNode.biasNode does not support ${ shaderStage } shader.` );
|
|
356
|
+
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
}
|
|
360
|
+
|
|
306
361
|
getPropertyName( node, shaderStage = this.shaderStage ) {
|
|
307
362
|
|
|
308
363
|
if ( node.isNodeVarying === true && node.needsInterpolation === true ) {
|
|
@@ -372,30 +427,38 @@ class WGSLNodeBuilder extends NodeBuilder {
|
|
|
372
427
|
|
|
373
428
|
switch ( node.access ) {
|
|
374
429
|
|
|
375
|
-
case GPUStorageTextureAccess.ReadOnly:
|
|
430
|
+
case GPUStorageTextureAccess.ReadOnly:
|
|
376
431
|
|
|
377
432
|
return 'read';
|
|
378
433
|
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
case GPUStorageTextureAccess.WriteOnly: {
|
|
434
|
+
case GPUStorageTextureAccess.WriteOnly:
|
|
382
435
|
|
|
383
436
|
return 'write';
|
|
384
437
|
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
default: {
|
|
438
|
+
default:
|
|
388
439
|
|
|
389
440
|
return 'read_write';
|
|
390
441
|
|
|
391
|
-
}
|
|
392
|
-
|
|
393
442
|
}
|
|
394
443
|
|
|
395
444
|
} else {
|
|
396
445
|
|
|
397
|
-
|
|
398
|
-
|
|
446
|
+
switch ( node.access ) {
|
|
447
|
+
|
|
448
|
+
case GPUBufferBindingType.Storage:
|
|
449
|
+
|
|
450
|
+
return 'read_write';
|
|
451
|
+
|
|
452
|
+
|
|
453
|
+
case GPUBufferBindingType.ReadOnlyStorage:
|
|
454
|
+
|
|
455
|
+
return 'read';
|
|
456
|
+
|
|
457
|
+
default:
|
|
458
|
+
|
|
459
|
+
return 'write';
|
|
460
|
+
|
|
461
|
+
}
|
|
399
462
|
|
|
400
463
|
}
|
|
401
464
|
|
|
@@ -410,7 +473,10 @@ class WGSLNodeBuilder extends NodeBuilder {
|
|
|
410
473
|
|
|
411
474
|
let uniformGPU;
|
|
412
475
|
|
|
413
|
-
const
|
|
476
|
+
const group = node.groupNode;
|
|
477
|
+
const groupName = group.name;
|
|
478
|
+
|
|
479
|
+
const bindings = this.getBindGroupArray( groupName, shaderStage );
|
|
414
480
|
|
|
415
481
|
if ( type === 'texture' || type === 'cubeTexture' || type === 'storageTexture' || type === 'texture3D' ) {
|
|
416
482
|
|
|
@@ -418,15 +484,15 @@ class WGSLNodeBuilder extends NodeBuilder {
|
|
|
418
484
|
|
|
419
485
|
if ( type === 'texture' || type === 'storageTexture' ) {
|
|
420
486
|
|
|
421
|
-
texture = new NodeSampledTexture( uniformNode.name, uniformNode.node, node.access ? node.access : null );
|
|
487
|
+
texture = new NodeSampledTexture( uniformNode.name, uniformNode.node, group, node.access ? node.access : null );
|
|
422
488
|
|
|
423
489
|
} else if ( type === 'cubeTexture' ) {
|
|
424
490
|
|
|
425
|
-
texture = new NodeSampledCubeTexture( uniformNode.name, uniformNode.node, node.access ? node.access : null );
|
|
491
|
+
texture = new NodeSampledCubeTexture( uniformNode.name, uniformNode.node, group, node.access ? node.access : null );
|
|
426
492
|
|
|
427
493
|
} else if ( type === 'texture3D' ) {
|
|
428
494
|
|
|
429
|
-
texture = new NodeSampledTexture3D( uniformNode.name, uniformNode.node, node.access ? node.access : null );
|
|
495
|
+
texture = new NodeSampledTexture3D( uniformNode.name, uniformNode.node, group, node.access ? node.access : null );
|
|
430
496
|
|
|
431
497
|
}
|
|
432
498
|
|
|
@@ -435,7 +501,7 @@ class WGSLNodeBuilder extends NodeBuilder {
|
|
|
435
501
|
|
|
436
502
|
if ( shaderStage === 'fragment' && this.isUnfilterable( node.value ) === false && texture.store === false ) {
|
|
437
503
|
|
|
438
|
-
const sampler = new NodeSampler( `${uniformNode.name}_sampler`, uniformNode.node );
|
|
504
|
+
const sampler = new NodeSampler( `${uniformNode.name}_sampler`, uniformNode.node, group );
|
|
439
505
|
sampler.setVisibility( gpuShaderStageLib[ shaderStage ] );
|
|
440
506
|
|
|
441
507
|
bindings.push( sampler, texture );
|
|
@@ -453,7 +519,7 @@ class WGSLNodeBuilder extends NodeBuilder {
|
|
|
453
519
|
} else if ( type === 'buffer' || type === 'storageBuffer' ) {
|
|
454
520
|
|
|
455
521
|
const bufferClass = type === 'storageBuffer' ? NodeStorageBuffer : NodeUniformBuffer;
|
|
456
|
-
const buffer = new bufferClass( node );
|
|
522
|
+
const buffer = new bufferClass( node, group );
|
|
457
523
|
buffer.setVisibility( gpuShaderStageLib[ shaderStage ] );
|
|
458
524
|
|
|
459
525
|
bindings.push( buffer );
|
|
@@ -462,9 +528,6 @@ class WGSLNodeBuilder extends NodeBuilder {
|
|
|
462
528
|
|
|
463
529
|
} else {
|
|
464
530
|
|
|
465
|
-
const group = node.groupNode;
|
|
466
|
-
const groupName = group.name;
|
|
467
|
-
|
|
468
531
|
const uniformsStage = this.uniformGroups[ shaderStage ] || ( this.uniformGroups[ shaderStage ] = {} );
|
|
469
532
|
|
|
470
533
|
let uniformsGroup = uniformsStage[ groupName ];
|
|
@@ -488,24 +551,12 @@ class WGSLNodeBuilder extends NodeBuilder {
|
|
|
488
551
|
|
|
489
552
|
nodeData.uniformGPU = uniformGPU;
|
|
490
553
|
|
|
491
|
-
if ( shaderStage === 'vertex' ) {
|
|
492
|
-
|
|
493
|
-
this.bindingsOffset[ 'fragment' ] = bindings.length;
|
|
494
|
-
|
|
495
|
-
}
|
|
496
|
-
|
|
497
554
|
}
|
|
498
555
|
|
|
499
556
|
return uniformNode;
|
|
500
557
|
|
|
501
558
|
}
|
|
502
559
|
|
|
503
|
-
isReference( type ) {
|
|
504
|
-
|
|
505
|
-
return super.isReference( type ) || type === 'texture_2d' || type === 'texture_cube' || type === 'texture_depth_2d' || type === 'texture_storage_2d' || type === 'texture_3d';
|
|
506
|
-
|
|
507
|
-
}
|
|
508
|
-
|
|
509
560
|
getBuiltin( name, property, type, shaderStage = this.shaderStage ) {
|
|
510
561
|
|
|
511
562
|
const map = this.builtins[ shaderStage ] || ( this.builtins[ shaderStage ] = new Map() );
|
|
@@ -576,6 +627,12 @@ ${ flowData.code }
|
|
|
576
627
|
|
|
577
628
|
}
|
|
578
629
|
|
|
630
|
+
getDrawIndex() {
|
|
631
|
+
|
|
632
|
+
return null;
|
|
633
|
+
|
|
634
|
+
}
|
|
635
|
+
|
|
579
636
|
getFrontFacing() {
|
|
580
637
|
|
|
581
638
|
return this.getBuiltin( 'front_facing', 'isFront', 'bool' );
|
|
@@ -600,6 +657,50 @@ ${ flowData.code }
|
|
|
600
657
|
|
|
601
658
|
}
|
|
602
659
|
|
|
660
|
+
enableDirective( name, shaderStage = this.shaderStage ) {
|
|
661
|
+
|
|
662
|
+
const stage = this.directives[ shaderStage ] || ( this.directives[ shaderStage ] = [] );
|
|
663
|
+
stage.push( name );
|
|
664
|
+
|
|
665
|
+
}
|
|
666
|
+
|
|
667
|
+
getDirectives( shaderStage ) {
|
|
668
|
+
|
|
669
|
+
const snippets = [];
|
|
670
|
+
const directives = this.directives[ shaderStage ];
|
|
671
|
+
|
|
672
|
+
if ( directives !== undefined ) {
|
|
673
|
+
|
|
674
|
+
for ( const directive of directives ) {
|
|
675
|
+
|
|
676
|
+
snippets.push( `enable ${directive}` );
|
|
677
|
+
|
|
678
|
+
}
|
|
679
|
+
|
|
680
|
+
}
|
|
681
|
+
|
|
682
|
+
return snippets.join( '\n' );
|
|
683
|
+
|
|
684
|
+
}
|
|
685
|
+
|
|
686
|
+
enableClipDistances() {
|
|
687
|
+
|
|
688
|
+
this.enableDirective( 'clip_distances' );
|
|
689
|
+
|
|
690
|
+
}
|
|
691
|
+
|
|
692
|
+
enableShaderF16() {
|
|
693
|
+
|
|
694
|
+
this.enableDirective( 'f16' );
|
|
695
|
+
|
|
696
|
+
}
|
|
697
|
+
|
|
698
|
+
enableDualSourceBlending() {
|
|
699
|
+
|
|
700
|
+
this.enableDirective( 'dual_source_blending' );
|
|
701
|
+
|
|
702
|
+
}
|
|
703
|
+
|
|
603
704
|
getBuiltins( shaderStage ) {
|
|
604
705
|
|
|
605
706
|
const snippets = [];
|
|
@@ -626,6 +727,9 @@ ${ flowData.code }
|
|
|
626
727
|
if ( shaderStage === 'compute' ) {
|
|
627
728
|
|
|
628
729
|
this.getBuiltin( 'global_invocation_id', 'id', 'vec3<u32>', 'attribute' );
|
|
730
|
+
this.getBuiltin( 'workgroup_id', 'workgroupId', 'vec3<u32>', 'attribute' );
|
|
731
|
+
this.getBuiltin( 'local_invocation_id', 'localId', 'vec3<u32>', 'attribute' );
|
|
732
|
+
this.getBuiltin( 'num_workgroups', 'numWorkgroups', 'vec3<u32>', 'attribute' );
|
|
629
733
|
|
|
630
734
|
}
|
|
631
735
|
|
|
@@ -687,9 +791,10 @@ ${ flowData.code }
|
|
|
687
791
|
snippet += this.getStructMembers( struct );
|
|
688
792
|
snippet += '\n}';
|
|
689
793
|
|
|
794
|
+
|
|
690
795
|
snippets.push( snippet );
|
|
691
796
|
|
|
692
|
-
snippets.push( `\nvar<private> output : ${ name };\n\n`);
|
|
797
|
+
snippets.push( `\nvar<private> output : ${ name };\n\n` );
|
|
693
798
|
|
|
694
799
|
}
|
|
695
800
|
|
|
@@ -783,10 +888,11 @@ ${ flowData.code }
|
|
|
783
888
|
const structSnippets = [];
|
|
784
889
|
const uniformGroups = {};
|
|
785
890
|
|
|
786
|
-
let index = this.bindingsOffset[ shaderStage ];
|
|
787
|
-
|
|
788
891
|
for ( const uniform of uniforms ) {
|
|
789
892
|
|
|
893
|
+
const groundName = uniform.groupNode.name;
|
|
894
|
+
const uniformIndexes = this.bindingsIndexes[ groundName ];
|
|
895
|
+
|
|
790
896
|
if ( uniform.type === 'texture' || uniform.type === 'cubeTexture' || uniform.type === 'storageTexture' || uniform.type === 'texture3D' ) {
|
|
791
897
|
|
|
792
898
|
const texture = uniform.node.value;
|
|
@@ -795,11 +901,11 @@ ${ flowData.code }
|
|
|
795
901
|
|
|
796
902
|
if ( texture.isDepthTexture === true && texture.compareFunction !== null ) {
|
|
797
903
|
|
|
798
|
-
bindingSnippets.push( `@binding( ${
|
|
904
|
+
bindingSnippets.push( `@binding( ${ uniformIndexes.binding ++ } ) @group( ${ uniformIndexes.group } ) var ${ uniform.name }_sampler : sampler_comparison;` );
|
|
799
905
|
|
|
800
906
|
} else {
|
|
801
907
|
|
|
802
|
-
bindingSnippets.push( `@binding( ${
|
|
908
|
+
bindingSnippets.push( `@binding( ${ uniformIndexes.binding ++ } ) @group( ${ uniformIndexes.group } ) var ${ uniform.name }_sampler : sampler;` );
|
|
803
909
|
|
|
804
910
|
}
|
|
805
911
|
|
|
@@ -807,6 +913,14 @@ ${ flowData.code }
|
|
|
807
913
|
|
|
808
914
|
let textureType;
|
|
809
915
|
|
|
916
|
+
let multisampled = '';
|
|
917
|
+
|
|
918
|
+
if ( texture.isMultisampleRenderTargetTexture === true ) {
|
|
919
|
+
|
|
920
|
+
multisampled = '_multisampled';
|
|
921
|
+
|
|
922
|
+
}
|
|
923
|
+
|
|
810
924
|
if ( texture.isCubeTexture === true ) {
|
|
811
925
|
|
|
812
926
|
textureType = 'texture_cube<f32>';
|
|
@@ -817,7 +931,7 @@ ${ flowData.code }
|
|
|
817
931
|
|
|
818
932
|
} else if ( texture.isDepthTexture === true ) {
|
|
819
933
|
|
|
820
|
-
textureType =
|
|
934
|
+
textureType = `texture_depth${multisampled}_2d`;
|
|
821
935
|
|
|
822
936
|
} else if ( texture.isVideoTexture === true ) {
|
|
823
937
|
|
|
@@ -832,17 +946,17 @@ ${ flowData.code }
|
|
|
832
946
|
const format = getFormat( texture );
|
|
833
947
|
const access = this.getStorageAccess( uniform.node );
|
|
834
948
|
|
|
835
|
-
textureType = `texture_storage_2d<${ format }, ${access}>`;
|
|
949
|
+
textureType = `texture_storage_2d<${ format }, ${ access }>`;
|
|
836
950
|
|
|
837
951
|
} else {
|
|
838
952
|
|
|
839
953
|
const componentPrefix = this.getComponentTypeFromTexture( texture ).charAt( 0 );
|
|
840
954
|
|
|
841
|
-
textureType = `
|
|
955
|
+
textureType = `texture${multisampled}_2d<${ componentPrefix }32>`;
|
|
842
956
|
|
|
843
957
|
}
|
|
844
958
|
|
|
845
|
-
bindingSnippets.push( `@binding( ${
|
|
959
|
+
bindingSnippets.push( `@binding( ${ uniformIndexes.binding ++ } ) @group( ${ uniformIndexes.group } ) var ${ uniform.name } : ${ textureType };` );
|
|
846
960
|
|
|
847
961
|
} else if ( uniform.type === 'buffer' || uniform.type === 'storageBuffer' ) {
|
|
848
962
|
|
|
@@ -851,10 +965,10 @@ ${ flowData.code }
|
|
|
851
965
|
const bufferCount = bufferNode.bufferCount;
|
|
852
966
|
|
|
853
967
|
const bufferCountSnippet = bufferCount > 0 ? ', ' + bufferCount : '';
|
|
854
|
-
const bufferSnippet = `\t${uniform.name} : array< ${bufferType}${bufferCountSnippet} >\n`;
|
|
855
|
-
const bufferAccessMode = bufferNode.isStorageBufferNode ?
|
|
968
|
+
const bufferSnippet = `\t${ uniform.name } : array< ${ bufferType }${ bufferCountSnippet } >\n`;
|
|
969
|
+
const bufferAccessMode = bufferNode.isStorageBufferNode ? `storage, ${ this.getStorageAccess( bufferNode ) }` : 'uniform';
|
|
856
970
|
|
|
857
|
-
bufferSnippets.push( this._getWGSLStructBinding( 'NodeBuffer_' + bufferNode.id, bufferSnippet, bufferAccessMode,
|
|
971
|
+
bufferSnippets.push( this._getWGSLStructBinding( 'NodeBuffer_' + bufferNode.id, bufferSnippet, bufferAccessMode, uniformIndexes.binding ++, uniformIndexes.group ) );
|
|
858
972
|
|
|
859
973
|
} else {
|
|
860
974
|
|
|
@@ -862,7 +976,8 @@ ${ flowData.code }
|
|
|
862
976
|
const groupName = uniform.groupNode.name;
|
|
863
977
|
|
|
864
978
|
const group = uniformGroups[ groupName ] || ( uniformGroups[ groupName ] = {
|
|
865
|
-
index:
|
|
979
|
+
index: uniformIndexes.binding ++,
|
|
980
|
+
id: uniformIndexes.group,
|
|
866
981
|
snippets: []
|
|
867
982
|
} );
|
|
868
983
|
|
|
@@ -876,7 +991,7 @@ ${ flowData.code }
|
|
|
876
991
|
|
|
877
992
|
const group = uniformGroups[ name ];
|
|
878
993
|
|
|
879
|
-
structSnippets.push( this._getWGSLStructBinding( name, group.snippets.join( ',\n' ), 'uniform', group.index ) );
|
|
994
|
+
structSnippets.push( this._getWGSLStructBinding( name, group.snippets.join( ',\n' ), 'uniform', group.index, group.id ) );
|
|
880
995
|
|
|
881
996
|
}
|
|
882
997
|
|
|
@@ -901,6 +1016,7 @@ ${ flowData.code }
|
|
|
901
1016
|
stageData.structs = this.getStructs( shaderStage );
|
|
902
1017
|
stageData.vars = this.getVars( shaderStage );
|
|
903
1018
|
stageData.codes = this.getCodes( shaderStage );
|
|
1019
|
+
stageData.directives = this.getDirectives( shaderStage );
|
|
904
1020
|
|
|
905
1021
|
//
|
|
906
1022
|
|
|
@@ -968,6 +1084,7 @@ ${ flowData.code }
|
|
|
968
1084
|
|
|
969
1085
|
stageData.flow = flow;
|
|
970
1086
|
|
|
1087
|
+
|
|
971
1088
|
}
|
|
972
1089
|
|
|
973
1090
|
if ( this.material !== null ) {
|
|
@@ -1011,7 +1128,21 @@ ${ flowData.code }
|
|
|
1011
1128
|
|
|
1012
1129
|
isAvailable( name ) {
|
|
1013
1130
|
|
|
1014
|
-
|
|
1131
|
+
let result = supports[ name ];
|
|
1132
|
+
|
|
1133
|
+
if ( result === undefined ) {
|
|
1134
|
+
|
|
1135
|
+
if ( name === 'float32Filterable' ) {
|
|
1136
|
+
|
|
1137
|
+
result = this.renderer.hasFeature( 'float32-filterable' );
|
|
1138
|
+
|
|
1139
|
+
}
|
|
1140
|
+
|
|
1141
|
+
supports[ name ] = result;
|
|
1142
|
+
|
|
1143
|
+
}
|
|
1144
|
+
|
|
1145
|
+
return result;
|
|
1015
1146
|
|
|
1016
1147
|
}
|
|
1017
1148
|
|
|
@@ -1045,6 +1176,8 @@ ${ flowData.code }
|
|
|
1045
1176
|
_getWGSLVertexCode( shaderData ) {
|
|
1046
1177
|
|
|
1047
1178
|
return `${ this.getSignature() }
|
|
1179
|
+
// directives
|
|
1180
|
+
${shaderData.directives};
|
|
1048
1181
|
|
|
1049
1182
|
// uniforms
|
|
1050
1183
|
${shaderData.uniforms}
|
|
@@ -1076,6 +1209,8 @@ fn main( ${shaderData.attributes} ) -> VaryingsStruct {
|
|
|
1076
1209
|
|
|
1077
1210
|
return `${ this.getSignature() }
|
|
1078
1211
|
|
|
1212
|
+
diagnostic( off, derivative_uniformity );
|
|
1213
|
+
|
|
1079
1214
|
// uniforms
|
|
1080
1215
|
${shaderData.uniforms}
|
|
1081
1216
|
|
|
@@ -1102,6 +1237,9 @@ fn main( ${shaderData.varyings} ) -> ${shaderData.returnType} {
|
|
|
1102
1237
|
_getWGSLComputeCode( shaderData, workgroupSize ) {
|
|
1103
1238
|
|
|
1104
1239
|
return `${ this.getSignature() }
|
|
1240
|
+
// directives
|
|
1241
|
+
${shaderData.directives}
|
|
1242
|
+
|
|
1105
1243
|
// system
|
|
1106
1244
|
var<private> instanceIndex : u32;
|
|
1107
1245
|
|
|
@@ -1115,7 +1253,7 @@ ${shaderData.codes}
|
|
|
1115
1253
|
fn main( ${shaderData.attributes} ) {
|
|
1116
1254
|
|
|
1117
1255
|
// system
|
|
1118
|
-
instanceIndex = id.x;
|
|
1256
|
+
instanceIndex = id.x + id.y * numWorkgroups.x * u32(${workgroupSize}) + id.z * numWorkgroups.x * numWorkgroups.y * u32(${workgroupSize});
|
|
1119
1257
|
|
|
1120
1258
|
// vars
|
|
1121
1259
|
${shaderData.vars}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
import NodeFunction from '../../../nodes/core/NodeFunction.js';
|
|
2
|
+
import NodeFunctionInput from '../../../nodes/core/NodeFunctionInput.js';
|
|
3
|
+
|
|
4
|
+
const declarationRegexp = /^[fn]*\s*([a-z_0-9]+)?\s*\(([\s\S]*?)\)\s*[\-\>]*\s*([a-z_0-9]+(?:<[\s\S]+?>)?)/i;
|
|
5
|
+
const propertiesRegexp = /([a-z_0-9]+)\s*:\s*([a-z_0-9]+(?:<[\s\S]+?>)?)/ig;
|
|
6
|
+
|
|
7
|
+
const wgslTypeLib = {
|
|
8
|
+
'f32': 'float',
|
|
9
|
+
'i32': 'int',
|
|
10
|
+
'u32': 'uint',
|
|
11
|
+
'bool': 'bool',
|
|
12
|
+
|
|
13
|
+
'vec2<f32>': 'vec2',
|
|
14
|
+
'vec2<i32>': 'ivec2',
|
|
15
|
+
'vec2<u32>': 'uvec2',
|
|
16
|
+
'vec2<bool>': 'bvec2',
|
|
17
|
+
|
|
18
|
+
'vec2f': 'vec2',
|
|
19
|
+
'vec2i': 'ivec2',
|
|
20
|
+
'vec2u': 'uvec2',
|
|
21
|
+
'vec2b': 'bvec2',
|
|
22
|
+
|
|
23
|
+
'vec3<f32>': 'vec3',
|
|
24
|
+
'vec3<i32>': 'ivec3',
|
|
25
|
+
'vec3<u32>': 'uvec3',
|
|
26
|
+
'vec3<bool>': 'bvec3',
|
|
27
|
+
|
|
28
|
+
'vec3f': 'vec3',
|
|
29
|
+
'vec3i': 'ivec3',
|
|
30
|
+
'vec3u': 'uvec3',
|
|
31
|
+
'vec3b': 'bvec3',
|
|
32
|
+
|
|
33
|
+
'vec4<f32>': 'vec4',
|
|
34
|
+
'vec4<i32>': 'ivec4',
|
|
35
|
+
'vec4<u32>': 'uvec4',
|
|
36
|
+
'vec4<bool>': 'bvec4',
|
|
37
|
+
|
|
38
|
+
'vec4f': 'vec4',
|
|
39
|
+
'vec4i': 'ivec4',
|
|
40
|
+
'vec4u': 'uvec4',
|
|
41
|
+
'vec4b': 'bvec4',
|
|
42
|
+
|
|
43
|
+
'mat2x2<f32>': 'mat2',
|
|
44
|
+
'mat2x2f': 'mat2',
|
|
45
|
+
|
|
46
|
+
'mat3x3<f32>': 'mat3',
|
|
47
|
+
'mat3x3f': 'mat3',
|
|
48
|
+
|
|
49
|
+
'mat4x4<f32>': 'mat4',
|
|
50
|
+
'mat4x4f': 'mat4',
|
|
51
|
+
|
|
52
|
+
'sampler': 'sampler',
|
|
53
|
+
|
|
54
|
+
'texture_1d': 'texture',
|
|
55
|
+
|
|
56
|
+
'texture_2d': 'texture',
|
|
57
|
+
'texture_2d_array': 'texture',
|
|
58
|
+
'texture_multisampled_2d': 'cubeTexture',
|
|
59
|
+
|
|
60
|
+
'texture_depth_2d': 'depthTexture',
|
|
61
|
+
|
|
62
|
+
'texture_3d': 'texture3D',
|
|
63
|
+
|
|
64
|
+
'texture_cube': 'cubeTexture',
|
|
65
|
+
'texture_cube_array': 'cubeTexture',
|
|
66
|
+
|
|
67
|
+
'texture_storage_1d': 'storageTexture',
|
|
68
|
+
'texture_storage_2d': 'storageTexture',
|
|
69
|
+
'texture_storage_2d_array': 'storageTexture',
|
|
70
|
+
'texture_storage_3d': 'storageTexture'
|
|
71
|
+
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
const parse = ( source ) => {
|
|
75
|
+
|
|
76
|
+
source = source.trim();
|
|
77
|
+
|
|
78
|
+
const declaration = source.match( declarationRegexp );
|
|
79
|
+
|
|
80
|
+
if ( declaration !== null && declaration.length === 4 ) {
|
|
81
|
+
|
|
82
|
+
const inputsCode = declaration[ 2 ];
|
|
83
|
+
const propsMatches = [];
|
|
84
|
+
let match = null;
|
|
85
|
+
|
|
86
|
+
while ( ( match = propertiesRegexp.exec( inputsCode ) ) !== null ) {
|
|
87
|
+
|
|
88
|
+
propsMatches.push( { name: match[ 1 ], type: match[ 2 ] } );
|
|
89
|
+
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
// Process matches to correctly pair names and types
|
|
93
|
+
const inputs = [];
|
|
94
|
+
for ( let i = 0; i < propsMatches.length; i ++ ) {
|
|
95
|
+
|
|
96
|
+
const { name, type } = propsMatches[ i ];
|
|
97
|
+
|
|
98
|
+
let resolvedType = type;
|
|
99
|
+
|
|
100
|
+
if ( resolvedType.startsWith( 'texture' ) ) {
|
|
101
|
+
|
|
102
|
+
resolvedType = type.split( '<' )[ 0 ];
|
|
103
|
+
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
resolvedType = wgslTypeLib[ resolvedType ] || resolvedType;
|
|
107
|
+
|
|
108
|
+
inputs.push( new NodeFunctionInput( resolvedType, name ) );
|
|
109
|
+
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
const blockCode = source.substring( declaration[ 0 ].length );
|
|
113
|
+
const outputType = declaration[ 3 ] || 'void';
|
|
114
|
+
|
|
115
|
+
const name = declaration[ 1 ] !== undefined ? declaration[ 1 ] : '';
|
|
116
|
+
const type = wgslTypeLib[ outputType ] || outputType;
|
|
117
|
+
|
|
118
|
+
return {
|
|
119
|
+
type,
|
|
120
|
+
inputs,
|
|
121
|
+
name,
|
|
122
|
+
inputsCode,
|
|
123
|
+
blockCode,
|
|
124
|
+
outputType
|
|
125
|
+
};
|
|
126
|
+
|
|
127
|
+
} else {
|
|
128
|
+
|
|
129
|
+
throw new Error( 'FunctionNode: Function is not a WGSL code.' );
|
|
130
|
+
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
};
|
|
134
|
+
|
|
135
|
+
class WGSLNodeFunction extends NodeFunction {
|
|
136
|
+
|
|
137
|
+
constructor( source ) {
|
|
138
|
+
|
|
139
|
+
const { type, inputs, name, inputsCode, blockCode, outputType } = parse( source );
|
|
140
|
+
|
|
141
|
+
super( type, inputs, name );
|
|
142
|
+
|
|
143
|
+
this.inputsCode = inputsCode;
|
|
144
|
+
this.blockCode = blockCode;
|
|
145
|
+
this.outputType = outputType;
|
|
146
|
+
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
getCode( name = this.name ) {
|
|
150
|
+
|
|
151
|
+
const outputType = this.outputType !== 'void' ? '-> ' + this.outputType : '';
|
|
152
|
+
|
|
153
|
+
return `fn ${ name } ( ${ this.inputsCode.trim() } ) ${ outputType }` + this.blockCode;
|
|
154
|
+
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
export default WGSLNodeFunction;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { Float16BufferAttribute } from 'three';
|
|
2
1
|
import { GPUInputStepMode } from './WebGPUConstants.js';
|
|
3
2
|
|
|
3
|
+
import { Float16BufferAttribute } from '../../../core/BufferAttribute.js';
|
|
4
|
+
|
|
4
5
|
const typedArraysToVertexFormatPrefix = new Map( [
|
|
5
6
|
[ Int8Array, [ 'sint8', 'snorm8' ]],
|
|
6
7
|
[ Uint8Array, [ 'uint8', 'unorm8' ]],
|