super-three 0.133.3 → 0.136.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.js +1059 -783
- package/build/three.min.js +1 -1
- package/build/three.module.js +1424 -895
- package/examples/fonts/open-sans/open-sans-v15-cyrillic-ext_greek_greek-ext_cyrillic_latin_latin-ext_vietnamese-regular.woff +0 -0
- package/examples/fonts/open-sans/open-sans-v15-cyrillic-ext_greek_greek-ext_cyrillic_latin_latin-ext_vietnamese-regular.woff2 +0 -0
- package/examples/fonts/open-sans/open-sans.css +9 -0
- package/examples/fonts/tabler-icons/fonts/tabler-icons.eot +0 -0
- package/examples/fonts/tabler-icons/fonts/tabler-icons.svg +3966 -0
- package/examples/fonts/tabler-icons/fonts/tabler-icons.ttf +0 -0
- package/examples/fonts/tabler-icons/fonts/tabler-icons.woff +0 -0
- package/examples/fonts/tabler-icons/fonts/tabler-icons.woff2 +0 -0
- package/examples/fonts/tabler-icons/tabler-icons.min.css +4 -0
- package/examples/js/animation/CCDIKSolver.js +0 -1
- package/examples/js/animation/MMDPhysics.js +1 -3
- package/examples/js/controls/ArcballControls.js +99 -72
- package/examples/js/controls/DragControls.js +7 -0
- package/examples/js/controls/OrbitControls.js +5 -36
- package/examples/js/controls/TrackballControls.js +3 -2
- package/examples/js/controls/TransformControls.js +24 -1
- package/examples/js/csm/CSM.js +2 -2
- package/examples/js/csm/CSMFrustum.js +133 -0
- package/examples/js/curves/CurveExtras.js +0 -2
- package/examples/js/effects/AsciiEffect.js +2 -9
- package/examples/js/exporters/GLTFExporter.js +148 -64
- package/examples/js/exporters/USDZExporter.js +45 -26
- package/examples/js/geometries/TeapotGeometry.js +0 -1
- package/examples/js/interactive/SelectionBox.js +2 -0
- package/examples/js/interactive/SelectionHelper.js +22 -7
- package/examples/js/lights/RectAreaLightUniformsLib.js +4 -0
- package/examples/js/lines/LineMaterial.js +58 -20
- package/examples/js/lines/LineSegments2.js +29 -24
- package/examples/js/loaders/3DMLoader.js +24 -11
- package/examples/js/loaders/3MFLoader.js +2 -2
- package/examples/js/loaders/AMFLoader.js +0 -2
- package/examples/js/loaders/ColladaLoader.js +61 -4
- package/examples/js/loaders/EXRLoader.js +185 -262
- package/examples/js/loaders/FBXLoader.js +4 -5
- package/examples/js/loaders/GLTFLoader.js +96 -33
- package/examples/js/loaders/HDRCubeTextureLoader.js +0 -8
- package/examples/js/loaders/KTX2Loader.js +23 -2
- package/examples/js/loaders/KTXLoader.js +1 -1
- package/examples/js/loaders/LDrawLoader.js +26 -30
- package/examples/js/loaders/LUT3dlLoader.js +2 -0
- package/examples/js/loaders/LUTCubeLoader.js +2 -0
- package/examples/js/loaders/LWOLoader.js +8 -6
- package/examples/js/loaders/LogLuvLoader.js +766 -0
- package/examples/js/loaders/MMDLoader.js +0 -1
- package/examples/js/loaders/NRRDLoader.js +9 -2
- package/examples/js/loaders/OBJLoader.js +0 -2
- package/examples/js/loaders/PLYLoader.js +33 -8
- package/examples/js/loaders/RGBELoader.js +2 -16
- package/examples/js/loaders/RGBMLoader.js +55 -5
- package/examples/js/loaders/SVGLoader.js +9 -5
- package/examples/js/loaders/TDSLoader.js +237 -271
- package/examples/js/loaders/VOXLoader.js +1 -0
- package/examples/js/loaders/VRMLLoader.js +2 -1
- package/examples/js/loaders/lwo/LWO2Parser.js +1 -0
- package/examples/js/loaders/lwo/LWO3Parser.js +4 -2
- package/examples/js/math/ImprovedNoise.js +1 -1
- package/examples/js/misc/GPUComputationRenderer.js +3 -1
- package/examples/js/objects/Lensflare.js +2 -10
- package/examples/js/objects/MarchingCubes.js +42 -128
- package/examples/js/objects/Reflector.js +7 -0
- package/examples/js/objects/Refractor.js +7 -0
- package/examples/js/objects/Sky.js +1 -1
- package/examples/js/objects/Water.js +2 -2
- package/examples/js/objects/Water2.js +4 -7
- package/examples/js/postprocessing/GlitchPass.js +3 -1
- package/examples/js/postprocessing/SSAOPass.js +1 -0
- package/examples/js/renderers/CSS2DRenderer.js +4 -4
- package/examples/js/renderers/CSS3DRenderer.js +4 -4
- package/examples/js/shaders/ConvolutionShader.js +0 -1
- package/examples/js/shaders/FXAAShader.js +1 -1
- package/examples/js/shaders/FilmShader.js +1 -1
- package/examples/js/shaders/GammaCorrectionShader.js +1 -1
- package/examples/js/shaders/HorizontalBlurShader.js +1 -2
- package/examples/js/shaders/SSRShader.js +1 -1
- package/examples/js/shaders/SSRrShader.js +1 -1
- package/examples/js/shaders/VerticalBlurShader.js +1 -2
- package/examples/js/utils/GeometryUtils.js +1 -1
- package/examples/js/utils/RoughnessMipmapper.js +18 -28
- package/examples/jsm/animation/CCDIKSolver.js +0 -1
- package/examples/jsm/animation/MMDPhysics.js +0 -2
- package/examples/jsm/controls/ArcballControls.js +80 -77
- package/examples/jsm/controls/DragControls.js +7 -0
- package/examples/jsm/controls/OrbitControls.js +9 -51
- package/examples/jsm/controls/TrackballControls.js +1 -1
- package/examples/jsm/controls/TransformControls.js +24 -1
- package/examples/jsm/csm/CSM.js +3 -3
- package/examples/jsm/csm/{Frustum.js → CSMFrustum.js} +3 -3
- package/examples/jsm/curves/CurveExtras.js +0 -2
- package/examples/jsm/effects/AsciiEffect.js +2 -9
- package/examples/jsm/exporters/GLTFExporter.js +161 -75
- package/examples/jsm/exporters/USDZExporter.js +47 -26
- package/examples/jsm/geometries/TeapotGeometry.js +0 -1
- package/examples/jsm/interactive/SelectionBox.js +1 -0
- package/examples/jsm/interactive/SelectionHelper.js +19 -7
- package/examples/jsm/libs/flow.module.js +3338 -0
- package/examples/jsm/libs/lil-gui.module.min.js +8 -0
- package/examples/jsm/libs/rhino3dm/rhino3dm.wasm +0 -0
- package/examples/jsm/lights/RectAreaLightUniformsLib.js +7 -0
- package/examples/jsm/lines/LineMaterial.js +59 -23
- package/examples/jsm/lines/LineSegments2.js +22 -18
- package/examples/jsm/loaders/3DMLoader.js +18 -12
- package/examples/jsm/loaders/3MFLoader.js +2 -2
- package/examples/jsm/loaders/AMFLoader.js +0 -2
- package/examples/jsm/loaders/ColladaLoader.js +61 -4
- package/examples/jsm/loaders/EXRLoader.js +184 -293
- package/examples/jsm/loaders/FBXLoader.js +4 -5
- package/examples/jsm/loaders/GLTFLoader.js +101 -37
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +1 -14
- package/examples/jsm/loaders/KTX2Loader.js +30 -2
- package/examples/jsm/loaders/KTXLoader.js +1 -1
- package/examples/jsm/loaders/LDrawLoader.js +23 -24
- package/examples/jsm/loaders/LUT3dlLoader.js +2 -0
- package/examples/jsm/loaders/LUTCubeLoader.js +2 -0
- package/examples/jsm/loaders/LWOLoader.js +8 -6
- package/examples/jsm/loaders/LogLuvLoader.js +606 -0
- package/examples/jsm/loaders/MMDLoader.js +0 -1
- package/examples/jsm/loaders/NRRDLoader.js +10 -2
- package/examples/jsm/loaders/OBJLoader.js +0 -2
- package/examples/jsm/loaders/PLYLoader.js +34 -8
- package/examples/jsm/loaders/RGBELoader.js +0 -20
- package/examples/jsm/loaders/RGBMLoader.js +61 -7
- package/examples/jsm/loaders/SVGLoader.js +9 -6
- package/examples/jsm/loaders/TDSLoader.js +236 -275
- package/examples/jsm/loaders/VOXLoader.js +1 -0
- package/examples/jsm/loaders/VRMLLoader.js +2 -1
- package/examples/jsm/loaders/lwo/LWO2Parser.js +1 -0
- package/examples/jsm/loaders/lwo/LWO3Parser.js +2 -2
- package/examples/jsm/math/ImprovedNoise.js +1 -1
- package/examples/jsm/misc/GPUComputationRenderer.js +3 -1
- package/examples/jsm/node-editor/NodeEditor.js +456 -0
- package/examples/jsm/node-editor/accessors/NormalEditor.js +30 -0
- package/examples/jsm/node-editor/accessors/PositionEditor.js +30 -0
- package/examples/jsm/node-editor/accessors/UVEditor.js +26 -0
- package/examples/jsm/node-editor/display/BlendEditor.js +43 -0
- package/examples/jsm/node-editor/examples/animate-uv.json +1 -0
- package/examples/jsm/node-editor/examples/fake-top-light.json +1 -0
- package/examples/jsm/node-editor/examples/oscillator-color.json +1 -0
- package/examples/jsm/node-editor/examples/rim.json +1 -0
- package/examples/jsm/node-editor/inputs/ColorEditor.js +91 -0
- package/examples/jsm/node-editor/inputs/FloatEditor.js +24 -0
- package/examples/jsm/node-editor/inputs/SliderEditor.js +68 -0
- package/examples/jsm/node-editor/inputs/Vector2Editor.js +28 -0
- package/examples/jsm/node-editor/inputs/Vector3Editor.js +30 -0
- package/examples/jsm/node-editor/inputs/Vector4Editor.js +37 -0
- package/examples/jsm/node-editor/materials/StandardMaterialEditor.js +108 -0
- package/examples/jsm/node-editor/math/DotEditor.js +36 -0
- package/examples/jsm/node-editor/math/InvertEditor.js +38 -0
- package/examples/jsm/node-editor/math/LimiterEditor.js +48 -0
- package/examples/jsm/node-editor/math/NormalizeEditor.js +26 -0
- package/examples/jsm/node-editor/math/OperatorEditor.js +50 -0
- package/examples/jsm/node-editor/math/PowerEditor.js +34 -0
- package/examples/jsm/node-editor/math/TrigonometryEditor.js +39 -0
- package/examples/jsm/node-editor/procedural/CheckerEditor.js +26 -0
- package/examples/jsm/node-editor/utils/OscillatorEditor.js +42 -0
- package/examples/jsm/node-editor/utils/TimerEditor.js +57 -0
- package/examples/jsm/nodes/core/NodeBuilder.js +2 -2
- package/examples/jsm/nodes/materials/StandardNodeMaterial.js +1 -1
- package/examples/jsm/nodes/materials/nodes/StandardNode.js +7 -6
- package/examples/jsm/nodes/math/MathNode.js +12 -0
- package/examples/jsm/nodes/misc/BumpMapNode.js +1 -1
- package/examples/jsm/nodes/misc/TextureCubeUVNode.js +1 -4
- package/examples/jsm/nodes/utils/ColorSpaceNode.js +1 -164
- package/examples/jsm/objects/Lensflare.js +3 -14
- package/examples/jsm/objects/MarchingCubes.js +46 -152
- package/examples/jsm/objects/Reflector.js +7 -0
- package/examples/jsm/objects/Refractor.js +7 -0
- package/examples/jsm/objects/Sky.js +1 -1
- package/examples/jsm/objects/Water.js +2 -2
- package/examples/jsm/objects/Water2.js +4 -8
- package/examples/jsm/postprocessing/AdaptiveToneMappingPass.js +1 -1
- package/examples/jsm/postprocessing/AfterimagePass.js +1 -1
- package/examples/jsm/postprocessing/BloomPass.js +1 -1
- package/examples/jsm/postprocessing/BokehPass.js +1 -1
- package/examples/jsm/postprocessing/ClearPass.js +1 -1
- package/examples/jsm/postprocessing/CubeTexturePass.js +1 -1
- package/examples/jsm/postprocessing/DotScreenPass.js +1 -1
- package/examples/jsm/postprocessing/EffectComposer.js +3 -3
- package/examples/jsm/postprocessing/FilmPass.js +1 -1
- package/examples/jsm/postprocessing/GlitchPass.js +4 -2
- package/examples/jsm/postprocessing/HalftonePass.js +1 -1
- package/examples/jsm/postprocessing/MaskPass.js +1 -1
- package/examples/jsm/postprocessing/OutlinePass.js +1 -1
- package/examples/jsm/postprocessing/RenderPass.js +1 -1
- package/examples/jsm/postprocessing/SAOPass.js +2 -2
- package/examples/jsm/postprocessing/SMAAPass.js +1 -1
- package/examples/jsm/postprocessing/SSAARenderPass.js +1 -1
- package/examples/jsm/postprocessing/SSAOPass.js +2 -1
- package/examples/jsm/postprocessing/SSRPass.js +1 -1
- package/examples/jsm/postprocessing/SSRrPass.js +1 -1
- package/examples/jsm/postprocessing/SavePass.js +1 -1
- package/examples/jsm/postprocessing/ShaderPass.js +1 -1
- package/examples/jsm/postprocessing/TAARenderPass.js +1 -1
- package/examples/jsm/postprocessing/TexturePass.js +1 -1
- package/examples/jsm/postprocessing/UnrealBloomPass.js +1 -1
- package/examples/jsm/renderers/CSS2DRenderer.js +5 -4
- package/examples/jsm/renderers/CSS3DRenderer.js +5 -4
- package/examples/jsm/renderers/nodes/Nodes.js +15 -13
- package/examples/jsm/renderers/nodes/ShaderNode.js +194 -41
- package/examples/jsm/renderers/nodes/accessors/MaterialNode.js +6 -6
- package/examples/jsm/renderers/nodes/accessors/ModelViewProjectionNode.js +5 -5
- package/examples/jsm/renderers/nodes/accessors/NormalNode.js +14 -3
- package/examples/jsm/renderers/nodes/accessors/PointUVNode.js +3 -3
- package/examples/jsm/renderers/nodes/accessors/PositionNode.js +15 -5
- package/examples/jsm/renderers/nodes/accessors/SkinningNode.js +107 -0
- package/examples/jsm/renderers/nodes/accessors/UVNode.js +7 -5
- package/examples/jsm/renderers/nodes/core/ArrayInputNode.js +3 -3
- package/examples/jsm/renderers/nodes/core/AttributeNode.js +6 -0
- package/examples/jsm/renderers/nodes/core/BypassNode.js +38 -0
- package/examples/jsm/renderers/nodes/core/CodeNode.js +3 -3
- package/examples/jsm/renderers/nodes/core/ContextNode.js +4 -19
- package/examples/jsm/renderers/nodes/core/ExpressionNode.js +13 -2
- package/examples/jsm/renderers/nodes/core/FunctionNode.js +19 -132
- package/examples/jsm/renderers/nodes/core/InputNode.js +13 -3
- package/examples/jsm/renderers/nodes/core/Node.js +32 -10
- package/examples/jsm/renderers/nodes/core/NodeBuilder.js +146 -128
- package/examples/jsm/renderers/nodes/core/NodeFunction.js +22 -0
- package/examples/jsm/renderers/nodes/core/NodeFunctionInput.js +4 -4
- package/examples/jsm/renderers/nodes/core/NodeKeywords.js +18 -179
- package/examples/jsm/renderers/nodes/core/NodeParser.js +11 -0
- package/examples/jsm/renderers/nodes/core/NodeVar.js +2 -2
- package/examples/jsm/renderers/nodes/core/PropertyNode.js +14 -2
- package/examples/jsm/renderers/nodes/core/TempNode.js +10 -13
- package/examples/jsm/renderers/nodes/core/VarNode.js +12 -7
- package/examples/jsm/renderers/nodes/core/VaryNode.js +23 -8
- package/examples/jsm/renderers/nodes/core/constants.js +2 -0
- package/examples/jsm/renderers/nodes/display/ColorSpaceNode.js +60 -43
- package/examples/jsm/renderers/nodes/display/NormalMapNode.js +21 -22
- package/examples/jsm/renderers/nodes/functions/BSDFs.js +64 -101
- package/examples/jsm/renderers/nodes/functions/PhysicalMaterialFunctions.js +27 -0
- package/examples/jsm/renderers/nodes/inputs/BufferNode.js +25 -0
- package/examples/jsm/renderers/nodes/inputs/IntNode.js +17 -0
- package/examples/jsm/renderers/nodes/inputs/TextureNode.js +10 -2
- package/examples/jsm/renderers/nodes/lights/LightContextNode.js +20 -14
- package/examples/jsm/renderers/nodes/lights/LightNode.js +32 -36
- package/examples/jsm/renderers/nodes/math/CondNode.js +60 -0
- package/examples/jsm/renderers/nodes/math/MathNode.js +90 -37
- package/examples/jsm/renderers/nodes/math/OperatorNode.js +124 -31
- package/examples/jsm/renderers/nodes/parsers/GLSLNodeFunction.js +137 -0
- package/examples/jsm/renderers/nodes/parsers/GLSLNodeParser.js +14 -0
- package/examples/jsm/renderers/nodes/parsers/WGSLNodeFunction.js +89 -0
- package/examples/jsm/renderers/nodes/parsers/WGSLNodeParser.js +14 -0
- package/examples/jsm/renderers/nodes/procedural/CheckerNode.js +7 -9
- package/examples/jsm/renderers/nodes/utils/ArrayElementNode.js +31 -0
- package/examples/jsm/renderers/nodes/utils/ConvertNode.js +33 -0
- package/examples/jsm/renderers/nodes/utils/JoinNode.js +7 -7
- package/examples/jsm/renderers/nodes/utils/OscNode.js +58 -0
- package/examples/jsm/renderers/nodes/utils/SplitNode.js +18 -8
- package/examples/jsm/renderers/nodes/utils/SpriteSheetUVNode.js +7 -7
- package/examples/jsm/renderers/nodes/utils/TimerNode.js +1 -1
- package/examples/jsm/renderers/webgl/nodes/SlotNode.js +22 -0
- package/examples/jsm/renderers/webgl/nodes/WebGLNodeBuilder.js +192 -95
- package/examples/jsm/renderers/webgl/nodes/WebGLNodes.js +2 -2
- package/examples/jsm/renderers/webgl/nodes/WebGLPhysicalContextNode.js +2 -2
- package/examples/jsm/renderers/webgpu/WebGPUBackground.js +1 -1
- package/examples/jsm/renderers/webgpu/WebGPUBindings.js +10 -9
- package/examples/jsm/renderers/webgpu/WebGPUComputePipelines.js +2 -4
- package/examples/jsm/renderers/webgpu/WebGPUProgrammableStage.js +2 -4
- package/examples/jsm/renderers/webgpu/WebGPURenderPipeline.js +15 -23
- package/examples/jsm/renderers/webgpu/WebGPURenderPipelines.js +44 -65
- package/examples/jsm/renderers/webgpu/WebGPURenderer.js +12 -28
- package/examples/jsm/renderers/webgpu/WebGPUTextureUtils.js +61 -28
- package/examples/jsm/renderers/webgpu/WebGPUTextures.js +34 -27
- package/examples/jsm/renderers/webgpu/constants.js +2 -2
- package/examples/jsm/renderers/webgpu/nodes/WebGPUNodeBuilder.js +453 -95
- package/examples/jsm/renderers/webgpu/nodes/WebGPUNodes.js +1 -1
- package/examples/jsm/shaders/ConvolutionShader.js +0 -1
- package/examples/jsm/shaders/FXAAShader.js +1 -1
- package/examples/jsm/shaders/FilmShader.js +1 -1
- package/examples/jsm/shaders/GammaCorrectionShader.js +1 -1
- package/examples/jsm/shaders/HorizontalBlurShader.js +1 -2
- package/examples/jsm/shaders/SSRShader.js +1 -1
- package/examples/jsm/shaders/SSRrShader.js +1 -1
- package/examples/jsm/shaders/VerticalBlurShader.js +1 -2
- package/examples/jsm/utils/GeometryUtils.js +1 -1
- package/examples/jsm/utils/RoughnessMipmapper.js +19 -31
- package/examples/jsm/utils/WorkerPool.js +11 -11
- package/examples/jsm/webxr/OculusHandPointerModel.js +6 -6
- package/package.json +24 -18
- package/src/Three.Legacy.js +18 -0
- package/src/Three.js +1 -3
- package/src/cameras/StereoCamera.js +8 -7
- package/src/constants.js +1 -8
- package/src/core/Layers.js +7 -1
- package/src/core/Object3D.js +3 -1
- package/src/extras/PMREMGenerator.js +23 -109
- package/src/extras/core/Interpolations.js +1 -1
- package/src/geometries/LatheGeometry.js +70 -47
- package/src/helpers/CameraHelper.js +1 -1
- package/src/loaders/FileLoader.js +98 -144
- package/src/loaders/ImageLoader.js +9 -4
- package/src/loaders/LoaderUtils.js +26 -0
- package/src/loaders/MaterialLoader.js +7 -4
- package/src/loaders/ObjectLoader.js +2 -0
- package/src/materials/Material.js +4 -4
- package/src/materials/MeshPhysicalMaterial.js +20 -14
- package/src/math/Color.js +0 -38
- package/src/math/MathUtils.js +5 -16
- package/src/math/Ray.js +2 -2
- package/src/math/Sphere.js +10 -1
- package/src/objects/Skeleton.js +1 -0
- package/src/renderers/WebGLMultisampleRenderTarget.js +7 -1
- package/src/renderers/WebGLRenderer.js +105 -132
- package/src/renderers/shaders/ShaderChunk/bsdfs.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/bumpmap_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js +2 -24
- package/src/renderers/shaders/ShaderChunk/encodings_pars_fragment.glsl.js +0 -74
- package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +0 -1
- package/src/renderers/shaders/ShaderChunk/gradientmap_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +19 -6
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +28 -2
- package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +23 -5
- package/src/renderers/shaders/ShaderLib/vsm.glsl.js +2 -1
- package/src/renderers/shaders/ShaderLib.js +6 -4
- package/src/renderers/shaders/UniformsLib.js +1 -2
- package/src/renderers/webgl/WebGLCapabilities.js +0 -2
- package/src/renderers/webgl/WebGLExtensions.js +1 -0
- package/src/renderers/webgl/WebGLMaterials.js +27 -15
- package/src/renderers/webgl/WebGLMorphtargets.js +1 -0
- package/src/renderers/webgl/WebGLProgram.js +11 -24
- package/src/renderers/webgl/WebGLPrograms.js +194 -33
- package/src/renderers/webgl/WebGLRenderLists.js +4 -14
- package/src/renderers/webgl/WebGLShaderCache.js +120 -0
- package/src/renderers/webgl/WebGLShadowMap.js +14 -5
- package/src/renderers/webgl/WebGLState.js +76 -17
- package/src/renderers/webgl/WebGLTextures.js +367 -61
- package/src/renderers/webgl/WebGLUniforms.js +45 -1
- package/src/renderers/webxr/WebXRManager.js +77 -109
- package/src/scenes/Scene.js +1 -1
- package/src/textures/DataTexture.js +0 -2
- package/src/textures/DataTexture2DArray.js +0 -2
- package/src/textures/DataTexture3D.js +0 -2
- package/src/textures/FramebufferTexture.js +25 -0
- package/src/textures/Texture.js +6 -0
- package/examples/js/controls/DeviceOrientationControls.js +0 -147
- package/examples/js/libs/dat.gui.min.js +0 -14
- package/examples/jsm/controls/DeviceOrientationControls.js +0 -153
- package/examples/jsm/libs/dat.gui.module.js +0 -3575
- package/examples/jsm/libs/glslang.js +0 -78
- package/examples/jsm/libs/glslang.wasm +0 -0
- package/examples/jsm/renderers/nodes/consts/MathConsts.js +0 -7
- package/examples/jsm/renderers/nodes/core/ConstNode.js +0 -39
- package/examples/jsm/renderers/nodes/core/NodeSlot.js +0 -13
- package/examples/jsm/renderers/nodes/core/StructNode.js +0 -80
- package/examples/jsm/renderers/nodes/core/StructVarNode.js +0 -75
- package/examples/jsm/renderers/nodes/functions/EncodingFunctions.js +0 -99
- package/examples/jsm/renderers/nodes/functions/MathFunctions.js +0 -47
- package/examples/jsm/renderers/webgpu/nodes/ShaderLib.js +0 -152
- package/src/extras/objects/ImmediateRenderObject.js +0 -31
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { LinearEncoding } from 'three';
|
|
2
|
+
|
|
1
3
|
import WebGPUNodeUniformsGroup from './WebGPUNodeUniformsGroup.js';
|
|
2
4
|
import {
|
|
3
5
|
FloatNodeUniform, Vector2NodeUniform, Vector3NodeUniform, Vector4NodeUniform,
|
|
@@ -6,64 +8,108 @@ import {
|
|
|
6
8
|
import WebGPUNodeSampler from './WebGPUNodeSampler.js';
|
|
7
9
|
import { WebGPUNodeSampledTexture } from './WebGPUNodeSampledTexture.js';
|
|
8
10
|
|
|
11
|
+
import WebGPUUniformBuffer from '../WebGPUUniformBuffer.js';
|
|
9
12
|
import { getVectorLength, getStrideLength } from '../WebGPUBufferUtils.js';
|
|
10
13
|
|
|
11
|
-
import NodeSlot from '../../nodes/core/NodeSlot.js';
|
|
12
14
|
import VarNode from '../../nodes/core/VarNode.js';
|
|
15
|
+
import CodeNode from '../../nodes/core/CodeNode.js';
|
|
16
|
+
import BypassNode from '../../nodes/core/BypassNode.js';
|
|
17
|
+
import ExpressionNode from '../../nodes/core/ExpressionNode.js';
|
|
13
18
|
import NodeBuilder from '../../nodes/core/NodeBuilder.js';
|
|
14
19
|
import MaterialNode from '../../nodes/accessors/MaterialNode.js';
|
|
20
|
+
import PositionNode from '../../nodes/accessors/PositionNode.js';
|
|
15
21
|
import NormalNode from '../../nodes/accessors/NormalNode.js';
|
|
16
22
|
import ModelViewProjectionNode from '../../nodes/accessors/ModelViewProjectionNode.js';
|
|
23
|
+
import SkinningNode from '../../nodes/accessors/SkinningNode.js';
|
|
24
|
+
import ColorSpaceNode from '../../nodes/display/ColorSpaceNode.js';
|
|
17
25
|
import LightContextNode from '../../nodes/lights/LightContextNode.js';
|
|
18
|
-
import
|
|
19
|
-
|
|
20
|
-
|
|
26
|
+
import OperatorNode from '../../nodes/math/OperatorNode.js';
|
|
27
|
+
import WGSLNodeParser from '../../nodes/parsers/WGSLNodeParser.js';
|
|
28
|
+
import { vec4 } from '../../nodes/ShaderNode.js';
|
|
29
|
+
import { getRoughness } from '../../nodes/functions/PhysicalMaterialFunctions.js';
|
|
30
|
+
|
|
31
|
+
const wgslTypeLib = {
|
|
32
|
+
float: 'f32',
|
|
33
|
+
int: 'i32',
|
|
34
|
+
vec2: 'vec2<f32>',
|
|
35
|
+
vec3: 'vec3<f32>',
|
|
36
|
+
vec4: 'vec4<f32>',
|
|
37
|
+
uvec4: 'vec4<u32>',
|
|
38
|
+
bvec3: 'vec3<bool>',
|
|
39
|
+
mat3: 'mat3x3<f32>',
|
|
40
|
+
mat4: 'mat4x4<f32>'
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
const wgslMethods = {
|
|
44
|
+
dFdx: 'dpdx',
|
|
45
|
+
dFdy: 'dpdy'
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
const wgslPolyfill = {
|
|
49
|
+
lessThanEqual: new CodeNode( `
|
|
50
|
+
fn lessThanEqual( a : vec3<f32>, b : vec3<f32> ) -> vec3<bool> {
|
|
51
|
+
|
|
52
|
+
return vec3<bool>( a.x <= b.x, a.y <= b.y, a.z <= b.z );
|
|
21
53
|
|
|
22
|
-
|
|
54
|
+
}
|
|
55
|
+
` ),
|
|
56
|
+
mod: new CodeNode( `
|
|
57
|
+
fn mod( x : f32, y : f32 ) -> f32 {
|
|
23
58
|
|
|
24
|
-
|
|
59
|
+
return x - y * floor( x / y );
|
|
25
60
|
|
|
26
|
-
|
|
61
|
+
}
|
|
62
|
+
` ),
|
|
63
|
+
repeatWrapping: new CodeNode( `
|
|
64
|
+
fn repeatWrapping( uv : vec2<f32>, dimension : vec2<i32> ) -> vec2<i32> {
|
|
27
65
|
|
|
28
|
-
|
|
29
|
-
this.bindingsOffset = { vertex: 0, fragment: 0 };
|
|
66
|
+
let uvScaled = vec2<i32>( uv * vec2<f32>( dimension ) );
|
|
30
67
|
|
|
31
|
-
|
|
68
|
+
return ( ( uvScaled % dimension ) + dimension ) % dimension;
|
|
32
69
|
|
|
33
|
-
|
|
70
|
+
}
|
|
71
|
+
` ),
|
|
72
|
+
inversesqrt: new CodeNode( `
|
|
73
|
+
fn inversesqrt( x : f32 ) -> f32 {
|
|
34
74
|
|
|
35
|
-
|
|
75
|
+
return 1.0 / sqrt( x );
|
|
36
76
|
|
|
37
|
-
|
|
77
|
+
}
|
|
78
|
+
` )
|
|
79
|
+
};
|
|
38
80
|
|
|
39
|
-
|
|
81
|
+
class WebGPUNodeBuilder extends NodeBuilder {
|
|
40
82
|
|
|
41
|
-
|
|
83
|
+
constructor( object, renderer, lightNode = null ) {
|
|
42
84
|
|
|
43
|
-
|
|
85
|
+
super( object, renderer, new WGSLNodeParser() );
|
|
44
86
|
|
|
45
|
-
|
|
87
|
+
this.lightNode = lightNode;
|
|
46
88
|
|
|
47
|
-
|
|
89
|
+
this.bindings = { vertex: [], fragment: [] };
|
|
90
|
+
this.bindingsOffset = { vertex: 0, fragment: 0 };
|
|
48
91
|
|
|
49
|
-
|
|
92
|
+
this.uniformsGroup = {};
|
|
50
93
|
|
|
51
|
-
|
|
94
|
+
this._parseObject();
|
|
52
95
|
|
|
53
|
-
|
|
96
|
+
}
|
|
54
97
|
|
|
55
|
-
|
|
98
|
+
_parseObject() {
|
|
56
99
|
|
|
57
|
-
|
|
100
|
+
const object = this.object;
|
|
101
|
+
const material = this.material;
|
|
58
102
|
|
|
59
103
|
// parse inputs
|
|
60
104
|
|
|
61
105
|
if ( material.isMeshStandardMaterial || material.isMeshBasicMaterial || material.isPointsMaterial || material.isLineBasicMaterial ) {
|
|
62
106
|
|
|
63
|
-
const mvpNode = new ModelViewProjectionNode();
|
|
64
|
-
|
|
65
107
|
let lightNode = material.lightNode;
|
|
66
108
|
|
|
109
|
+
// VERTEX STAGE
|
|
110
|
+
|
|
111
|
+
let vertex = new PositionNode( PositionNode.GEOMETRY );
|
|
112
|
+
|
|
67
113
|
if ( lightNode === null && this.lightNode && this.lightNode.hasLights === true ) {
|
|
68
114
|
|
|
69
115
|
lightNode = this.lightNode;
|
|
@@ -72,64 +118,124 @@ class WebGPUNodeBuilder extends NodeBuilder {
|
|
|
72
118
|
|
|
73
119
|
if ( material.positionNode && material.positionNode.isNode ) {
|
|
74
120
|
|
|
75
|
-
|
|
121
|
+
const assignPositionNode = new OperatorNode( '=', new PositionNode( PositionNode.LOCAL ), material.positionNode );
|
|
122
|
+
|
|
123
|
+
vertex = new BypassNode( vertex, assignPositionNode );
|
|
76
124
|
|
|
77
125
|
}
|
|
78
126
|
|
|
79
|
-
|
|
127
|
+
if ( object.isSkinnedMesh === true ) {
|
|
80
128
|
|
|
81
|
-
|
|
129
|
+
vertex = new BypassNode( vertex, new SkinningNode( object ) );
|
|
82
130
|
|
|
83
|
-
|
|
131
|
+
}
|
|
84
132
|
|
|
85
|
-
|
|
133
|
+
this.context.vertex = vertex;
|
|
86
134
|
|
|
87
|
-
|
|
135
|
+
this.addFlow( 'vertex', new VarNode( new ModelViewProjectionNode(), 'MVP', 'vec4' ) );
|
|
88
136
|
|
|
89
|
-
|
|
137
|
+
// COLOR
|
|
138
|
+
|
|
139
|
+
let colorNode = null;
|
|
90
140
|
|
|
91
141
|
if ( material.colorNode && material.colorNode.isNode ) {
|
|
92
142
|
|
|
93
|
-
|
|
143
|
+
colorNode = material.colorNode;
|
|
94
144
|
|
|
95
145
|
} else {
|
|
96
146
|
|
|
97
|
-
|
|
147
|
+
colorNode = new MaterialNode( MaterialNode.COLOR );
|
|
98
148
|
|
|
99
149
|
}
|
|
100
150
|
|
|
151
|
+
colorNode = this.addFlow( 'fragment', new VarNode( colorNode, 'Color', 'vec4' ) );
|
|
152
|
+
|
|
153
|
+
this.addFlow( 'fragment', new VarNode( colorNode, 'DiffuseColor', 'vec4' ) );
|
|
154
|
+
|
|
155
|
+
// OPACITY
|
|
156
|
+
|
|
157
|
+
let opacityNode = null;
|
|
158
|
+
|
|
101
159
|
if ( material.opacityNode && material.opacityNode.isNode ) {
|
|
102
160
|
|
|
103
|
-
|
|
161
|
+
opacityNode = material.opacityNode;
|
|
104
162
|
|
|
105
163
|
} else {
|
|
106
164
|
|
|
107
|
-
|
|
165
|
+
opacityNode = new VarNode( new MaterialNode( MaterialNode.OPACITY ) );
|
|
166
|
+
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
this.addFlow( 'fragment', new VarNode( opacityNode, 'OPACITY', 'float' ) );
|
|
170
|
+
|
|
171
|
+
this.addFlow( 'fragment', new ExpressionNode( 'DiffuseColor.a = DiffuseColor.a * OPACITY;' ) );
|
|
172
|
+
|
|
173
|
+
// ALPHA TEST
|
|
174
|
+
|
|
175
|
+
let alphaTest = null;
|
|
176
|
+
|
|
177
|
+
if ( material.alphaTestNode && material.alphaTestNode.isNode ) {
|
|
178
|
+
|
|
179
|
+
alphaTest = material.alphaTestNode;
|
|
180
|
+
|
|
181
|
+
} else if ( material.alphaTest > 0 ) {
|
|
182
|
+
|
|
183
|
+
alphaTest = new MaterialNode( MaterialNode.ALPHA_TEST );
|
|
184
|
+
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
if ( alphaTest !== null ) {
|
|
188
|
+
|
|
189
|
+
this.addFlow( 'fragment', new VarNode( alphaTest, 'AlphaTest', 'float' ) );
|
|
190
|
+
|
|
191
|
+
this.addFlow( 'fragment', new ExpressionNode( 'if ( DiffuseColor.a <= AlphaTest ) { discard; }' ) );
|
|
108
192
|
|
|
109
193
|
}
|
|
110
194
|
|
|
111
195
|
if ( material.isMeshStandardMaterial ) {
|
|
112
196
|
|
|
197
|
+
// METALNESS
|
|
198
|
+
|
|
199
|
+
let metalnessNode = null;
|
|
200
|
+
|
|
113
201
|
if ( material.metalnessNode && material.metalnessNode.isNode ) {
|
|
114
202
|
|
|
115
|
-
|
|
203
|
+
metalnessNode = material.metalnessNode;
|
|
116
204
|
|
|
117
205
|
} else {
|
|
118
206
|
|
|
119
|
-
|
|
207
|
+
metalnessNode = new MaterialNode( MaterialNode.METALNESS );
|
|
120
208
|
|
|
121
209
|
}
|
|
122
210
|
|
|
211
|
+
this.addFlow( 'fragment', new VarNode( metalnessNode, 'Metalness', 'float' ) );
|
|
212
|
+
|
|
213
|
+
this.addFlow( 'fragment', new ExpressionNode( 'DiffuseColor = vec4<f32>( DiffuseColor.rgb * ( 1.0 - Metalness ), DiffuseColor.a );' ) );
|
|
214
|
+
|
|
215
|
+
// ROUGHNESS
|
|
216
|
+
|
|
217
|
+
let roughnessNode = null;
|
|
218
|
+
|
|
123
219
|
if ( material.roughnessNode && material.roughnessNode.isNode ) {
|
|
124
220
|
|
|
125
|
-
|
|
221
|
+
roughnessNode = material.roughnessNode;
|
|
126
222
|
|
|
127
223
|
} else {
|
|
128
224
|
|
|
129
|
-
|
|
225
|
+
roughnessNode = new MaterialNode( MaterialNode.ROUGHNESS );
|
|
130
226
|
|
|
131
227
|
}
|
|
132
228
|
|
|
229
|
+
roughnessNode = getRoughness( { roughness: roughnessNode } );
|
|
230
|
+
|
|
231
|
+
this.addFlow( 'fragment', new VarNode( roughnessNode, 'Roughness', 'float' ) );
|
|
232
|
+
|
|
233
|
+
// SPECULAR_TINT
|
|
234
|
+
|
|
235
|
+
this.addFlow( 'fragment', new VarNode( new ExpressionNode( 'mix( vec3<f32>( 0.04 ), Color.rgb, Metalness )', 'vec3' ), 'SpecularColor', 'color' ) );
|
|
236
|
+
|
|
237
|
+
// NORMAL_VIEW
|
|
238
|
+
|
|
133
239
|
let normalNode = null;
|
|
134
240
|
|
|
135
241
|
if ( material.normalNode && material.normalNode.isNode ) {
|
|
@@ -142,61 +248,80 @@ class WebGPUNodeBuilder extends NodeBuilder {
|
|
|
142
248
|
|
|
143
249
|
}
|
|
144
250
|
|
|
145
|
-
this.
|
|
251
|
+
this.addFlow( 'fragment', new VarNode( normalNode, 'TransformedNormalView', 'vec3' ) );
|
|
146
252
|
|
|
147
|
-
}
|
|
253
|
+
}
|
|
148
254
|
|
|
149
|
-
|
|
255
|
+
// LIGHT
|
|
150
256
|
|
|
151
|
-
|
|
257
|
+
let outputNode = colorNode;
|
|
152
258
|
|
|
153
|
-
|
|
259
|
+
if ( lightNode && lightNode.isNode ) {
|
|
154
260
|
|
|
155
|
-
|
|
261
|
+
const lightContextNode = new LightContextNode( lightNode );
|
|
156
262
|
|
|
157
|
-
|
|
263
|
+
outputNode = this.addFlow( 'fragment', new VarNode( lightContextNode, 'Light', 'vec3' ) );
|
|
158
264
|
|
|
159
|
-
|
|
265
|
+
}
|
|
160
266
|
|
|
161
|
-
|
|
267
|
+
// RESULT
|
|
162
268
|
|
|
163
|
-
|
|
269
|
+
const outputEncoding = this.renderer.outputEncoding;
|
|
164
270
|
|
|
165
|
-
|
|
271
|
+
if ( outputEncoding !== LinearEncoding ) {
|
|
166
272
|
|
|
167
|
-
|
|
273
|
+
outputNode = new ColorSpaceNode( ColorSpaceNode.LINEAR_TO_LINEAR, vec4( outputNode ) );
|
|
274
|
+
outputNode.fromEncoding( outputEncoding );
|
|
168
275
|
|
|
169
276
|
}
|
|
170
277
|
|
|
171
|
-
|
|
278
|
+
this.addFlow( 'fragment', new VarNode( outputNode, 'Output', 'vec4' ) );
|
|
172
279
|
|
|
173
|
-
|
|
280
|
+
}
|
|
174
281
|
|
|
175
|
-
|
|
282
|
+
}
|
|
176
283
|
|
|
177
|
-
|
|
284
|
+
addFlowCode( code ) {
|
|
285
|
+
|
|
286
|
+
if ( ! /;\s*$/.test( code ) ) {
|
|
287
|
+
|
|
288
|
+
code += ';';
|
|
178
289
|
|
|
179
290
|
}
|
|
180
291
|
|
|
292
|
+
super.addFlowCode( code + '\n\t' );
|
|
293
|
+
|
|
181
294
|
}
|
|
182
295
|
|
|
183
|
-
getTexture( textureProperty, uvSnippet, biasSnippet =
|
|
296
|
+
getTexture( textureProperty, uvSnippet, biasSnippet, shaderStage = this.shaderStage ) {
|
|
184
297
|
|
|
185
|
-
if (
|
|
298
|
+
if ( shaderStage === 'fragment' ) {
|
|
186
299
|
|
|
187
|
-
return `
|
|
300
|
+
return `textureSample( ${textureProperty}, ${textureProperty}_sampler, ${uvSnippet} )`;
|
|
188
301
|
|
|
189
302
|
} else {
|
|
190
303
|
|
|
191
|
-
|
|
304
|
+
this._include( 'repeatWrapping' );
|
|
305
|
+
|
|
306
|
+
const dimension = `textureDimensions( ${textureProperty}, 0 )`;
|
|
307
|
+
|
|
308
|
+
return `textureLoad( ${textureProperty}, repeatWrapping( ${uvSnippet}, ${dimension} ), 0 )`;
|
|
192
309
|
|
|
193
310
|
}
|
|
194
311
|
|
|
195
312
|
}
|
|
196
313
|
|
|
197
|
-
getPropertyName( node ) {
|
|
314
|
+
getPropertyName( node, shaderStage = this.shaderStage ) {
|
|
315
|
+
|
|
316
|
+
if ( node.isNodeVary === true ) {
|
|
198
317
|
|
|
199
|
-
|
|
318
|
+
if ( shaderStage === 'vertex' ) {
|
|
319
|
+
|
|
320
|
+
return `NodeVarys.${ node.name }`;
|
|
321
|
+
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
} else if ( node.isNodeUniform === true ) {
|
|
200
325
|
|
|
201
326
|
const name = node.name;
|
|
202
327
|
const type = node.type;
|
|
@@ -205,9 +330,13 @@ class WebGPUNodeBuilder extends NodeBuilder {
|
|
|
205
330
|
|
|
206
331
|
return name;
|
|
207
332
|
|
|
333
|
+
} else if ( type === 'buffer' ) {
|
|
334
|
+
|
|
335
|
+
return `NodeBuffer.${name}`;
|
|
336
|
+
|
|
208
337
|
} else {
|
|
209
338
|
|
|
210
|
-
return `
|
|
339
|
+
return `NodeUniforms.${name}`;
|
|
211
340
|
|
|
212
341
|
}
|
|
213
342
|
|
|
@@ -245,9 +374,33 @@ class WebGPUNodeBuilder extends NodeBuilder {
|
|
|
245
374
|
const lastBinding = bindings[ bindings.length - 1 ];
|
|
246
375
|
const index = lastBinding && lastBinding.isUniformsGroup ? bindings.length - 1 : bindings.length;
|
|
247
376
|
|
|
248
|
-
|
|
377
|
+
if ( shaderStage === 'fragment' ) {
|
|
249
378
|
|
|
250
|
-
|
|
379
|
+
bindings.splice( index, 0, sampler, texture );
|
|
380
|
+
|
|
381
|
+
uniformGPU = [ sampler, texture ];
|
|
382
|
+
|
|
383
|
+
} else {
|
|
384
|
+
|
|
385
|
+
bindings.splice( index, 0, texture );
|
|
386
|
+
|
|
387
|
+
uniformGPU = [ texture ];
|
|
388
|
+
|
|
389
|
+
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
|
|
393
|
+
} else if ( type === 'buffer' ) {
|
|
394
|
+
|
|
395
|
+
const buffer = new WebGPUUniformBuffer( 'NodeBuffer', node.value );
|
|
396
|
+
|
|
397
|
+
// add first textures in sequence and group for last
|
|
398
|
+
const lastBinding = bindings[ bindings.length - 1 ];
|
|
399
|
+
const index = lastBinding && lastBinding.isUniformsGroup ? bindings.length - 1 : bindings.length;
|
|
400
|
+
|
|
401
|
+
bindings.splice( index, 0, buffer );
|
|
402
|
+
|
|
403
|
+
uniformGPU = buffer;
|
|
251
404
|
|
|
252
405
|
} else {
|
|
253
406
|
|
|
@@ -267,7 +420,7 @@ class WebGPUNodeBuilder extends NodeBuilder {
|
|
|
267
420
|
|
|
268
421
|
uniformGPU = [];
|
|
269
422
|
|
|
270
|
-
for ( const inputNode of node.
|
|
423
|
+
for ( const inputNode of node.nodes ) {
|
|
271
424
|
|
|
272
425
|
const uniformNodeGPU = this._getNodeUniform( inputNode, type );
|
|
273
426
|
|
|
@@ -312,15 +465,49 @@ class WebGPUNodeBuilder extends NodeBuilder {
|
|
|
312
465
|
if ( shaderStage === 'vertex' ) {
|
|
313
466
|
|
|
314
467
|
const attributes = this.attributes;
|
|
468
|
+
const length = attributes.length;
|
|
315
469
|
|
|
316
|
-
|
|
470
|
+
snippet += '\n';
|
|
471
|
+
|
|
472
|
+
for ( let index = 0; index < length; index ++ ) {
|
|
317
473
|
|
|
318
474
|
const attribute = attributes[ index ];
|
|
475
|
+
const name = attribute.name;
|
|
476
|
+
const type = this.getType( attribute.type );
|
|
477
|
+
|
|
478
|
+
snippet += `\t[[ location( ${index} ) ]] ${ name } : ${ type }`;
|
|
479
|
+
|
|
480
|
+
if ( index + 1 < length ) {
|
|
319
481
|
|
|
320
|
-
|
|
482
|
+
snippet += ',\n';
|
|
483
|
+
|
|
484
|
+
}
|
|
321
485
|
|
|
322
486
|
}
|
|
323
487
|
|
|
488
|
+
snippet += '\n';
|
|
489
|
+
|
|
490
|
+
}
|
|
491
|
+
|
|
492
|
+
return snippet;
|
|
493
|
+
|
|
494
|
+
}
|
|
495
|
+
|
|
496
|
+
getVars( shaderStage ) {
|
|
497
|
+
|
|
498
|
+
let snippet = '';
|
|
499
|
+
|
|
500
|
+
const vars = this.vars[ shaderStage ];
|
|
501
|
+
|
|
502
|
+
for ( let index = 0; index < vars.length; index ++ ) {
|
|
503
|
+
|
|
504
|
+
const variable = vars[ index ];
|
|
505
|
+
|
|
506
|
+
const name = variable.name;
|
|
507
|
+
const type = this.getType( variable.type );
|
|
508
|
+
|
|
509
|
+
snippet += `var ${name} : ${type}; `;
|
|
510
|
+
|
|
324
511
|
}
|
|
325
512
|
|
|
326
513
|
return snippet;
|
|
@@ -331,15 +518,43 @@ class WebGPUNodeBuilder extends NodeBuilder {
|
|
|
331
518
|
|
|
332
519
|
let snippet = '';
|
|
333
520
|
|
|
334
|
-
|
|
521
|
+
if ( shaderStage === 'vertex' ) {
|
|
522
|
+
|
|
523
|
+
snippet += '\t[[ builtin( position ) ]] Vertex: vec4<f32>;\n';
|
|
524
|
+
|
|
525
|
+
const varys = this.varys;
|
|
526
|
+
|
|
527
|
+
for ( let index = 0; index < varys.length; index ++ ) {
|
|
528
|
+
|
|
529
|
+
const vary = varys[ index ];
|
|
530
|
+
|
|
531
|
+
snippet += `\t[[ location( ${index} ) ]] ${ vary.name } : ${ this.getType( vary.type ) };\n`;
|
|
532
|
+
|
|
533
|
+
}
|
|
534
|
+
|
|
535
|
+
snippet = this._getWGSLStruct( 'NodeVarysStruct', snippet );
|
|
536
|
+
|
|
537
|
+
} else if ( shaderStage === 'fragment' ) {
|
|
335
538
|
|
|
336
|
-
|
|
539
|
+
const varys = this.varys;
|
|
337
540
|
|
|
338
|
-
|
|
541
|
+
snippet += '\n';
|
|
339
542
|
|
|
340
|
-
|
|
543
|
+
for ( let index = 0; index < varys.length; index ++ ) {
|
|
341
544
|
|
|
342
|
-
|
|
545
|
+
const vary = varys[ index ];
|
|
546
|
+
|
|
547
|
+
snippet += `\t[[ location( ${index} ) ]] ${ vary.name } : ${ this.getType( vary.type ) }`;
|
|
548
|
+
|
|
549
|
+
if ( index + 1 < varys.length ) {
|
|
550
|
+
|
|
551
|
+
snippet += ',\n';
|
|
552
|
+
|
|
553
|
+
}
|
|
554
|
+
|
|
555
|
+
}
|
|
556
|
+
|
|
557
|
+
snippet += '\n';
|
|
343
558
|
|
|
344
559
|
}
|
|
345
560
|
|
|
@@ -360,12 +575,27 @@ class WebGPUNodeBuilder extends NodeBuilder {
|
|
|
360
575
|
|
|
361
576
|
if ( uniform.type === 'texture' ) {
|
|
362
577
|
|
|
363
|
-
|
|
364
|
-
|
|
578
|
+
if ( shaderStage === 'fragment' ) {
|
|
579
|
+
|
|
580
|
+
snippet += `[[ group( 0 ), binding( ${index ++} ) ]] var ${uniform.name}_sampler : sampler; `;
|
|
581
|
+
|
|
582
|
+
}
|
|
583
|
+
|
|
584
|
+
snippet += `[[ group( 0 ), binding( ${index ++} ) ]] var ${uniform.name} : texture_2d<f32>; `;
|
|
585
|
+
|
|
586
|
+
} else if ( uniform.type === 'buffer' ) {
|
|
587
|
+
|
|
588
|
+
const bufferNode = uniform.node;
|
|
589
|
+
const bufferType = this.getType( bufferNode.bufferType );
|
|
590
|
+
const bufferCount = bufferNode.bufferCount;
|
|
591
|
+
|
|
592
|
+
const bufferSnippet = `\t${uniform.name} : array< ${bufferType}, ${bufferCount} >;\n`;
|
|
593
|
+
|
|
594
|
+
snippet += this._getWGSLUniforms( 'NodeBuffer', bufferSnippet, index ++ ) + '\n\n';
|
|
365
595
|
|
|
366
596
|
} else {
|
|
367
597
|
|
|
368
|
-
const vectorType = this.getVectorType( uniform.type );
|
|
598
|
+
const vectorType = this.getType( this.getVectorType( uniform.type ) );
|
|
369
599
|
|
|
370
600
|
if ( Array.isArray( uniform.value ) === true ) {
|
|
371
601
|
|
|
@@ -375,7 +605,7 @@ class WebGPUNodeBuilder extends NodeBuilder {
|
|
|
375
605
|
|
|
376
606
|
} else {
|
|
377
607
|
|
|
378
|
-
groupSnippet +=
|
|
608
|
+
groupSnippet += `\t${uniform.name} : ${ vectorType};\n`;
|
|
379
609
|
|
|
380
610
|
}
|
|
381
611
|
|
|
@@ -385,7 +615,7 @@ class WebGPUNodeBuilder extends NodeBuilder {
|
|
|
385
615
|
|
|
386
616
|
if ( groupSnippet ) {
|
|
387
617
|
|
|
388
|
-
snippet +=
|
|
618
|
+
snippet += this._getWGSLUniforms( 'NodeUniforms', groupSnippet, index ++ );
|
|
389
619
|
|
|
390
620
|
}
|
|
391
621
|
|
|
@@ -393,39 +623,91 @@ class WebGPUNodeBuilder extends NodeBuilder {
|
|
|
393
623
|
|
|
394
624
|
}
|
|
395
625
|
|
|
396
|
-
|
|
626
|
+
buildCode() {
|
|
397
627
|
|
|
398
|
-
const
|
|
628
|
+
const shadersData = { fragment: {}, vertex: {} };
|
|
399
629
|
|
|
400
|
-
for ( const shaderStage
|
|
630
|
+
for ( const shaderStage in shadersData ) {
|
|
401
631
|
|
|
402
|
-
|
|
632
|
+
let flow = '// code\n';
|
|
633
|
+
flow += `\t${ this.flowCode[ shaderStage ] }`;
|
|
634
|
+
flow += '\n';
|
|
403
635
|
|
|
404
|
-
|
|
636
|
+
const flowNodes = this.flowNodes[ shaderStage ];
|
|
637
|
+
const mainNode = flowNodes[ flowNodes.length - 1 ];
|
|
405
638
|
|
|
406
|
-
|
|
639
|
+
for ( const node of flowNodes ) {
|
|
640
|
+
|
|
641
|
+
const flowSlotData = this.getFlowData( shaderStage, node );
|
|
642
|
+
const slotName = node.name;
|
|
643
|
+
|
|
644
|
+
if ( slotName ) {
|
|
645
|
+
|
|
646
|
+
if ( flow.length > 0 ) flow += '\n';
|
|
647
|
+
|
|
648
|
+
flow += `\t// FLOW -> ${ slotName }\n\t`;
|
|
649
|
+
|
|
650
|
+
}
|
|
651
|
+
|
|
652
|
+
flow += `${ flowSlotData.code }\n\t`;
|
|
653
|
+
|
|
654
|
+
if ( node === mainNode ) {
|
|
655
|
+
|
|
656
|
+
flow += '// FLOW RESULT\n\t';
|
|
657
|
+
|
|
658
|
+
if ( shaderStage === 'vertex' ) {
|
|
407
659
|
|
|
408
|
-
|
|
660
|
+
flow += 'NodeVarys.Vertex = ';
|
|
409
661
|
|
|
410
|
-
|
|
411
|
-
this.fragmentShader = this._composeShaderCode( this.nativeShader.fragmentShader, this.fragmentShader );
|
|
662
|
+
} else if ( shaderStage === 'fragment' ) {
|
|
412
663
|
|
|
413
|
-
|
|
664
|
+
flow += 'return ';
|
|
665
|
+
|
|
666
|
+
}
|
|
667
|
+
|
|
668
|
+
flow += `${ flowSlotData.result };`;
|
|
669
|
+
|
|
670
|
+
}
|
|
671
|
+
|
|
672
|
+
}
|
|
673
|
+
|
|
674
|
+
const stageData = shadersData[ shaderStage ];
|
|
675
|
+
|
|
676
|
+
stageData.uniforms = this.getUniforms( shaderStage );
|
|
677
|
+
stageData.attributes = this.getAttributes( shaderStage );
|
|
678
|
+
stageData.varys = this.getVarys( shaderStage );
|
|
679
|
+
stageData.vars = this.getVars( shaderStage );
|
|
680
|
+
stageData.codes = this.getCodes( shaderStage );
|
|
681
|
+
stageData.flow = flow;
|
|
682
|
+
|
|
683
|
+
}
|
|
684
|
+
|
|
685
|
+
this.vertexShader = this._getWGSLVertexCode( shadersData.vertex );
|
|
686
|
+
this.fragmentShader = this._getWGSLFragmentCode( shadersData.fragment );
|
|
414
687
|
|
|
415
688
|
}
|
|
416
689
|
|
|
417
|
-
|
|
690
|
+
getMethod( method ) {
|
|
418
691
|
|
|
419
|
-
|
|
420
|
-
const versionStrIndex = code.indexOf( '\n' );
|
|
692
|
+
if ( wgslPolyfill[ method ] !== undefined ) {
|
|
421
693
|
|
|
422
|
-
|
|
694
|
+
this._include( method );
|
|
423
695
|
|
|
424
|
-
|
|
696
|
+
}
|
|
425
697
|
|
|
426
|
-
|
|
698
|
+
return wgslMethods[ method ] || method;
|
|
427
699
|
|
|
428
|
-
|
|
700
|
+
}
|
|
701
|
+
|
|
702
|
+
getType( type ) {
|
|
703
|
+
|
|
704
|
+
return wgslTypeLib[ type ] || type;
|
|
705
|
+
|
|
706
|
+
}
|
|
707
|
+
|
|
708
|
+
_include( name ) {
|
|
709
|
+
|
|
710
|
+
wgslPolyfill[ name ].build( this );
|
|
429
711
|
|
|
430
712
|
}
|
|
431
713
|
|
|
@@ -443,6 +725,82 @@ class WebGPUNodeBuilder extends NodeBuilder {
|
|
|
443
725
|
|
|
444
726
|
}
|
|
445
727
|
|
|
728
|
+
_getWGSLVertexCode( shaderData ) {
|
|
729
|
+
|
|
730
|
+
return `${ this.getSignature() }
|
|
731
|
+
|
|
732
|
+
// uniforms
|
|
733
|
+
${shaderData.uniforms}
|
|
734
|
+
|
|
735
|
+
// varys
|
|
736
|
+
${shaderData.varys}
|
|
737
|
+
|
|
738
|
+
// codes
|
|
739
|
+
${shaderData.codes}
|
|
740
|
+
|
|
741
|
+
[[ stage( vertex ) ]]
|
|
742
|
+
fn main( ${shaderData.attributes} ) -> NodeVarysStruct {
|
|
743
|
+
|
|
744
|
+
// system
|
|
745
|
+
var NodeVarys: NodeVarysStruct;
|
|
746
|
+
|
|
747
|
+
// vars
|
|
748
|
+
${shaderData.vars}
|
|
749
|
+
|
|
750
|
+
// flow
|
|
751
|
+
${shaderData.flow}
|
|
752
|
+
|
|
753
|
+
return NodeVarys;
|
|
754
|
+
|
|
755
|
+
}
|
|
756
|
+
`;
|
|
757
|
+
|
|
758
|
+
}
|
|
759
|
+
|
|
760
|
+
_getWGSLFragmentCode( shaderData ) {
|
|
761
|
+
|
|
762
|
+
return `${ this.getSignature() }
|
|
763
|
+
|
|
764
|
+
// uniforms
|
|
765
|
+
${shaderData.uniforms}
|
|
766
|
+
|
|
767
|
+
// codes
|
|
768
|
+
${shaderData.codes}
|
|
769
|
+
|
|
770
|
+
[[ stage( fragment ) ]]
|
|
771
|
+
fn main( ${shaderData.varys} ) -> [[ location( 0 ) ]] vec4<f32> {
|
|
772
|
+
|
|
773
|
+
// vars
|
|
774
|
+
${shaderData.vars}
|
|
775
|
+
|
|
776
|
+
// flow
|
|
777
|
+
${shaderData.flow}
|
|
778
|
+
|
|
779
|
+
}
|
|
780
|
+
`;
|
|
781
|
+
|
|
782
|
+
}
|
|
783
|
+
|
|
784
|
+
_getWGSLStruct( name, vars ) {
|
|
785
|
+
|
|
786
|
+
return `
|
|
787
|
+
struct ${name} {
|
|
788
|
+
\n${vars}
|
|
789
|
+
};`;
|
|
790
|
+
|
|
791
|
+
}
|
|
792
|
+
|
|
793
|
+
_getWGSLUniforms( name, vars, binding = 0, group = 0 ) {
|
|
794
|
+
|
|
795
|
+
const structName = name + 'Struct';
|
|
796
|
+
const structSnippet = this._getWGSLStruct( structName, vars );
|
|
797
|
+
|
|
798
|
+
return `${structSnippet}
|
|
799
|
+
[[ binding( ${binding} ), group( ${group} ) ]]
|
|
800
|
+
var<uniform> ${name} : ${structName};`;
|
|
801
|
+
|
|
802
|
+
}
|
|
803
|
+
|
|
446
804
|
}
|
|
447
805
|
|
|
448
806
|
export default WebGPUNodeBuilder;
|