super-three 0.133.4 → 0.136.1
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/LICENSE +1 -1
- package/build/three.js +2285 -1983
- package/build/three.min.js +1 -1
- package/build/three.module.js +5983 -5358
- 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 +2 -4
- package/examples/js/cameras/CinematicCamera.js +2 -7
- 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/MMDExporter.js +1 -1
- package/examples/js/exporters/USDZExporter.js +45 -26
- package/examples/js/geometries/ConvexGeometry.js +1 -1
- 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/BasisTextureLoader.js +1 -0
- package/examples/js/loaders/ColladaLoader.js +61 -4
- package/examples/js/loaders/EXRLoader.js +201 -272
- package/examples/js/loaders/FBXLoader.js +4 -5
- package/examples/js/loaders/GLTFLoader.js +98 -35
- package/examples/js/loaders/HDRCubeTextureLoader.js +0 -10
- package/examples/js/loaders/KTX2Loader.js +23 -2
- package/examples/js/loaders/KTXLoader.js +1 -1
- package/examples/js/loaders/LDrawLoader.js +1169 -901
- package/examples/js/loaders/LUT3dlLoader.js +19 -10
- package/examples/js/loaders/LUTCubeLoader.js +5 -4
- 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 +8 -22
- package/examples/js/loaders/RGBMLoader.js +56 -6
- package/examples/js/loaders/SVGLoader.js +12 -6
- package/examples/js/loaders/TDSLoader.js +237 -271
- package/examples/js/loaders/VOXLoader.js +1 -0
- package/examples/js/loaders/VRMLLoader.js +11 -22
- package/examples/js/loaders/lwo/LWO2Parser.js +1 -0
- package/examples/js/loaders/lwo/LWO3Parser.js +4 -2
- package/examples/js/math/ConvexHull.js +7 -13
- package/examples/js/math/ImprovedNoise.js +1 -1
- package/examples/js/misc/GPUComputationRenderer.js +3 -1
- package/examples/js/misc/Volume.js +2 -2
- package/examples/js/modifiers/CurveModifier.js +8 -7
- package/examples/js/modifiers/EdgeSplitModifier.js +1 -1
- package/examples/js/modifiers/SimplifyModifier.js +1 -1
- package/examples/js/objects/Lensflare.js +2 -10
- package/examples/js/objects/MarchingCubes.js +42 -128
- package/examples/js/objects/Reflector.js +8 -13
- package/examples/js/objects/ReflectorForSSRPass.js +0 -10
- package/examples/js/objects/Refractor.js +8 -13
- package/examples/js/objects/Sky.js +1 -1
- package/examples/js/objects/Water.js +3 -15
- package/examples/js/objects/Water2.js +4 -7
- package/examples/js/postprocessing/GlitchPass.js +6 -5
- package/examples/js/postprocessing/SMAAPass.js +2 -9
- package/examples/js/postprocessing/SSAOPass.js +10 -21
- package/examples/js/postprocessing/SavePass.js +1 -5
- 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/DigitalGlitch.js +3 -3
- 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/MMDToonShader.js +0 -1
- package/examples/js/shaders/SSAOShader.js +1 -1
- 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/jsm/animation/CCDIKSolver.js +0 -1
- package/examples/jsm/animation/MMDPhysics.js +1 -3
- package/examples/jsm/cameras/CinematicCamera.js +2 -5
- package/examples/jsm/{WebGL.js → capabilities/WebGL.js} +2 -2
- package/examples/jsm/{renderers/webgpu → capabilities}/WebGPU.js +1 -1
- 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 +169 -99
- package/examples/jsm/exporters/MMDExporter.js +1 -1
- package/examples/jsm/exporters/USDZExporter.js +47 -26
- package/examples/jsm/geometries/ConvexGeometry.js +1 -1
- 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/BasisTextureLoader.js +7 -0
- package/examples/jsm/loaders/ColladaLoader.js +61 -4
- package/examples/jsm/loaders/EXRLoader.js +200 -306
- package/examples/jsm/loaders/FBXLoader.js +4 -5
- package/examples/jsm/loaders/GLTFLoader.js +102 -40
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +1 -17
- package/examples/jsm/loaders/KTX2Loader.js +30 -2
- package/examples/jsm/loaders/KTXLoader.js +1 -1
- package/examples/jsm/loaders/LDrawLoader.js +1159 -898
- package/examples/jsm/loaders/LUT3dlLoader.js +19 -12
- package/examples/jsm/loaders/LUTCubeLoader.js +5 -5
- 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 +7 -28
- package/examples/jsm/loaders/RGBMLoader.js +62 -8
- package/examples/jsm/loaders/SVGLoader.js +15 -7
- package/examples/jsm/loaders/TDSLoader.js +236 -275
- package/examples/jsm/loaders/VOXLoader.js +1 -0
- package/examples/jsm/loaders/VRMLLoader.js +11 -23
- package/examples/jsm/loaders/lwo/LWO2Parser.js +1 -0
- package/examples/jsm/loaders/lwo/LWO3Parser.js +2 -2
- package/examples/jsm/math/ConvexHull.js +7 -13
- package/examples/jsm/math/ImprovedNoise.js +1 -1
- package/examples/jsm/misc/GPUComputationRenderer.js +3 -1
- package/examples/jsm/misc/Volume.js +2 -2
- package/examples/jsm/modifiers/CurveModifier.js +9 -8
- package/examples/jsm/modifiers/EdgeSplitModifier.js +1 -1
- package/examples/jsm/modifiers/SimplifyModifier.js +1 -1
- package/examples/jsm/node-editor/NodeEditor.js +455 -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 +5 -177
- package/examples/jsm/objects/Lensflare.js +5 -16
- package/examples/jsm/objects/MarchingCubes.js +46 -152
- package/examples/jsm/objects/Reflector.js +8 -16
- package/examples/jsm/objects/ReflectorForSSRPass.js +0 -12
- package/examples/jsm/objects/Refractor.js +8 -16
- package/examples/jsm/objects/Sky.js +1 -1
- package/examples/jsm/objects/Water.js +3 -18
- 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 +10 -7
- 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 +3 -12
- package/examples/jsm/postprocessing/SSAARenderPass.js +1 -1
- package/examples/jsm/postprocessing/SSAOPass.js +15 -26
- package/examples/jsm/postprocessing/SSRPass.js +1 -1
- package/examples/jsm/postprocessing/SSRrPass.js +1 -1
- package/examples/jsm/postprocessing/SavePass.js +2 -4
- 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 +17 -13
- package/examples/jsm/renderers/nodes/ShaderNode.js +229 -49
- 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 +43 -63
- 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 +13 -10
- 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 +91 -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/WebGPUObjects.js +1 -1
- 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 +13 -31
- package/examples/jsm/renderers/webgpu/WebGPUTextureUtils.js +61 -28
- package/examples/jsm/renderers/webgpu/WebGPUTextures.js +35 -29
- package/examples/jsm/renderers/webgpu/constants.js +2 -2
- package/examples/jsm/renderers/webgpu/nodes/WebGPUNodeBuilder.js +459 -95
- package/examples/jsm/renderers/webgpu/nodes/WebGPUNodes.js +1 -1
- package/examples/jsm/shaders/ConvolutionShader.js +0 -1
- package/examples/jsm/shaders/DigitalGlitch.js +3 -3
- 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/MMDToonShader.js +0 -1
- package/examples/jsm/shaders/SSAOShader.js +1 -1
- 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/LDrawUtils.js +195 -0
- package/examples/jsm/utils/WorkerPool.js +11 -11
- package/examples/jsm/webxr/OculusHandPointerModel.js +6 -6
- package/examples/jsm/webxr/VRButton.js +24 -0
- package/examples/jsm/webxr/XREstimatedLight.js +2 -0
- package/package.json +27 -18
- package/src/Three.Legacy.js +18 -0
- package/src/Three.js +1 -3
- package/src/animation/AnimationMixer.js +1 -0
- package/src/cameras/CubeCamera.js +2 -0
- package/src/cameras/StereoCamera.js +8 -7
- package/src/constants.js +3 -23
- package/src/core/Layers.js +7 -1
- package/src/core/Object3D.js +3 -1
- package/src/extras/ImageUtils.js +63 -0
- package/src/extras/PMREMGenerator.js +49 -185
- 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 +8 -5
- package/src/loaders/ObjectLoader.js +2 -0
- package/src/materials/Material.js +8 -8
- package/src/materials/MeshPhysicalMaterial.js +20 -14
- package/src/math/Color.js +1 -39
- package/src/math/MathUtils.js +5 -16
- package/src/math/Quaternion.js +1 -1
- package/src/math/Ray.js +2 -2
- package/src/math/Sphere.js +10 -1
- package/src/objects/Skeleton.js +1 -0
- package/src/renderers/WebGLCubeRenderTarget.js +0 -2
- package/src/renderers/WebGLMultisampleRenderTarget.js +7 -1
- package/src/renderers/WebGLRenderer.js +106 -199
- 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/emissivemap_fragment.glsl.js +0 -2
- package/src/renderers/shaders/ShaderChunk/encodings_pars_fragment.glsl.js +0 -78
- package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +0 -1
- package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +0 -2
- package/src/renderers/shaders/ShaderChunk/gradientmap_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/lightmap_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.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/map_fragment.glsl.js +10 -3
- package/src/renderers/shaders/ShaderChunk/map_particle_fragment.glsl.js +1 -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 +9 -8
- package/src/renderers/shaders/ShaderLib/background.glsl.js +1 -3
- package/src/renderers/shaders/ShaderLib/equirect.glsl.js +1 -3
- package/src/renderers/shaders/ShaderLib/meshbasic.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/meshmatcap.glsl.js +1 -2
- 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 +8 -6
- package/src/renderers/shaders/UniformsLib.js +1 -2
- package/src/renderers/webgl/WebGLCapabilities.js +0 -2
- package/src/renderers/webgl/WebGLCubeMaps.js +0 -4
- package/src/renderers/webgl/WebGLCubeUVMaps.js +29 -16
- package/src/renderers/webgl/WebGLExtensions.js +1 -0
- package/src/renderers/webgl/WebGLMaterials.js +27 -15
- package/src/renderers/webgl/WebGLMorphtargets.js +13 -0
- package/src/renderers/webgl/WebGLProgram.js +12 -37
- package/src/renderers/webgl/WebGLPrograms.js +192 -70
- 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 +157 -17
- package/src/renderers/webgl/WebGLTextures.js +442 -83
- package/src/renderers/webgl/WebGLUniforms.js +45 -1
- package/src/renderers/webgl/WebGLUtils.js +86 -28
- 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 +8 -1
- package/src/textures/VideoTexture.js +1 -3
- package/examples/js/WebGL.js +0 -90
- package/examples/js/controls/DeviceOrientationControls.js +0 -147
- package/examples/js/libs/dat.gui.min.js +0 -14
- package/examples/js/utils/RoughnessMipmapper.js +0 -278
- 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/examples/jsm/utils/RoughnessMipmapper.js +0 -300
- package/src/extras/objects/ImmediateRenderObject.js +0 -31
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
// core
|
|
2
|
+
import PropertyNode from './core/PropertyNode.js';
|
|
3
|
+
import VarNode from './core/VarNode.js';
|
|
4
|
+
|
|
1
5
|
// inputs
|
|
2
6
|
import ColorNode from './inputs/ColorNode.js';
|
|
3
7
|
import FloatNode from './inputs/FloatNode.js';
|
|
@@ -5,11 +9,18 @@ import Vector2Node from './inputs/Vector2Node.js';
|
|
|
5
9
|
import Vector3Node from './inputs/Vector3Node.js';
|
|
6
10
|
import Vector4Node from './inputs/Vector4Node.js';
|
|
7
11
|
|
|
12
|
+
// accessors
|
|
13
|
+
import PositionNode from './accessors/PositionNode.js';
|
|
14
|
+
import NormalNode from './accessors/NormalNode.js';
|
|
15
|
+
|
|
8
16
|
// math
|
|
9
|
-
import MathNode from './math/MathNode.js';
|
|
10
17
|
import OperatorNode from './math/OperatorNode.js';
|
|
18
|
+
import CondNode from './math/CondNode.js';
|
|
19
|
+
import MathNode from './math/MathNode.js';
|
|
11
20
|
|
|
12
21
|
// utils
|
|
22
|
+
import ArrayElementNode from './utils/ArrayElementNode.js';
|
|
23
|
+
import ConvertNode from './utils/ConvertNode.js';
|
|
13
24
|
import JoinNode from './utils/JoinNode.js';
|
|
14
25
|
import SplitNode from './utils/SplitNode.js';
|
|
15
26
|
|
|
@@ -18,17 +29,35 @@ import { Vector2, Vector3, Vector4, Color } from 'three';
|
|
|
18
29
|
|
|
19
30
|
const NodeHandler = {
|
|
20
31
|
|
|
21
|
-
|
|
32
|
+
construct( NodeClosure, params ) {
|
|
33
|
+
|
|
34
|
+
const inputs = params.shift();
|
|
35
|
+
|
|
36
|
+
return NodeClosure( ShaderNodeObjects( inputs ), ...params );
|
|
22
37
|
|
|
23
|
-
|
|
38
|
+
},
|
|
39
|
+
|
|
40
|
+
get: function ( node, prop ) {
|
|
24
41
|
|
|
25
42
|
if ( typeof prop === 'string' && node[ prop ] === undefined ) {
|
|
26
43
|
|
|
27
|
-
|
|
44
|
+
if ( /^[xyzwrgbastpq]{1,4}$/.test( prop ) === true ) {
|
|
28
45
|
|
|
29
|
-
|
|
46
|
+
// accessing properties ( swizzle )
|
|
30
47
|
|
|
31
|
-
|
|
48
|
+
prop = prop
|
|
49
|
+
.replace( /r|s/g, 'x' )
|
|
50
|
+
.replace( /g|t/g, 'y' )
|
|
51
|
+
.replace( /b|p/g, 'z' )
|
|
52
|
+
.replace( /a|q/g, 'w' );
|
|
53
|
+
|
|
54
|
+
return ShaderNodeObject( new SplitNode( node, prop ) );
|
|
55
|
+
|
|
56
|
+
} else if ( /^\d+$/.test( prop ) === true ) {
|
|
57
|
+
|
|
58
|
+
// accessing array
|
|
59
|
+
|
|
60
|
+
return ShaderNodeObject( new ArrayElementNode( node, new FloatNode( Number( prop ) ).setConst( true ) ) );
|
|
32
61
|
|
|
33
62
|
}
|
|
34
63
|
|
|
@@ -40,7 +69,9 @@ const NodeHandler = {
|
|
|
40
69
|
|
|
41
70
|
};
|
|
42
71
|
|
|
43
|
-
|
|
72
|
+
const nodeObjects = new WeakMap();
|
|
73
|
+
|
|
74
|
+
const ShaderNodeObject = ( obj ) => {
|
|
44
75
|
|
|
45
76
|
const type = typeof obj;
|
|
46
77
|
|
|
@@ -52,16 +83,17 @@ export const ShaderNodeObject = ( obj ) => {
|
|
|
52
83
|
|
|
53
84
|
if ( obj.isNode === true ) {
|
|
54
85
|
|
|
55
|
-
|
|
86
|
+
let nodeObject = nodeObjects.get( obj );
|
|
56
87
|
|
|
57
|
-
if (
|
|
88
|
+
if ( nodeObject === undefined ) {
|
|
58
89
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
return new Proxy( node, NodeHandler );
|
|
90
|
+
nodeObject = new Proxy( obj, NodeHandler );
|
|
91
|
+
nodeObjects.set( obj, nodeObject );
|
|
62
92
|
|
|
63
93
|
}
|
|
64
94
|
|
|
95
|
+
return nodeObject;
|
|
96
|
+
|
|
65
97
|
}
|
|
66
98
|
|
|
67
99
|
}
|
|
@@ -70,7 +102,19 @@ export const ShaderNodeObject = ( obj ) => {
|
|
|
70
102
|
|
|
71
103
|
};
|
|
72
104
|
|
|
73
|
-
|
|
105
|
+
const ShaderNodeObjects = ( objects ) => {
|
|
106
|
+
|
|
107
|
+
for ( const name in objects ) {
|
|
108
|
+
|
|
109
|
+
objects[ name ] = ShaderNodeObject( objects[ name ] );
|
|
110
|
+
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
return objects;
|
|
114
|
+
|
|
115
|
+
};
|
|
116
|
+
|
|
117
|
+
const ShaderNodeArray = ( array ) => {
|
|
74
118
|
|
|
75
119
|
const len = array.length;
|
|
76
120
|
|
|
@@ -84,29 +128,57 @@ export const ShaderNodeArray = ( array ) => {
|
|
|
84
128
|
|
|
85
129
|
};
|
|
86
130
|
|
|
87
|
-
|
|
131
|
+
const ShaderNodeProxy = ( NodeClass, scope = null, factor = null ) => {
|
|
88
132
|
|
|
89
|
-
|
|
133
|
+
if ( scope === null ) {
|
|
90
134
|
|
|
91
|
-
|
|
135
|
+
return ( ...params ) => {
|
|
92
136
|
|
|
93
|
-
|
|
137
|
+
return ShaderNodeObject( new NodeClass( ...ShaderNodeArray( params ) ) );
|
|
94
138
|
|
|
95
|
-
|
|
139
|
+
};
|
|
140
|
+
|
|
141
|
+
} else if ( factor === null ) {
|
|
142
|
+
|
|
143
|
+
return ( ...params ) => {
|
|
144
|
+
|
|
145
|
+
return ShaderNodeObject( new NodeClass( scope, ...ShaderNodeArray( params ) ) );
|
|
146
|
+
|
|
147
|
+
};
|
|
148
|
+
|
|
149
|
+
} else {
|
|
150
|
+
|
|
151
|
+
factor = ShaderNodeObject( factor );
|
|
152
|
+
|
|
153
|
+
return ( ...params ) => {
|
|
154
|
+
|
|
155
|
+
return ShaderNodeObject( new NodeClass( scope, ...ShaderNodeArray( params ), factor ) );
|
|
156
|
+
|
|
157
|
+
};
|
|
158
|
+
|
|
159
|
+
}
|
|
96
160
|
|
|
97
161
|
};
|
|
98
162
|
|
|
99
|
-
|
|
163
|
+
const ShaderNodeScript = function ( jsFunc ) {
|
|
100
164
|
|
|
101
|
-
return
|
|
165
|
+
return ( inputs, builder ) => {
|
|
166
|
+
|
|
167
|
+
ShaderNodeObjects( inputs );
|
|
168
|
+
|
|
169
|
+
return ShaderNodeObject( jsFunc( inputs, builder ) );
|
|
170
|
+
|
|
171
|
+
};
|
|
102
172
|
|
|
103
173
|
};
|
|
104
174
|
|
|
175
|
+
export const ShaderNode = new Proxy( ShaderNodeScript, NodeHandler );
|
|
176
|
+
|
|
105
177
|
//
|
|
106
178
|
// Node Material Shader Syntax
|
|
107
179
|
//
|
|
108
180
|
|
|
109
|
-
export const uniform =
|
|
181
|
+
export const uniform = new ShaderNode( ( inputNode ) => {
|
|
110
182
|
|
|
111
183
|
inputNode.setConst( false );
|
|
112
184
|
|
|
@@ -114,80 +186,188 @@ export const uniform = ShaderNodeScript( ( inputNode ) => {
|
|
|
114
186
|
|
|
115
187
|
} );
|
|
116
188
|
|
|
189
|
+
export const nodeObject = ( val ) => {
|
|
190
|
+
|
|
191
|
+
return ShaderNodeObject( val );
|
|
192
|
+
|
|
193
|
+
};
|
|
194
|
+
|
|
117
195
|
export const float = ( val ) => {
|
|
118
196
|
|
|
119
|
-
return
|
|
197
|
+
return nodeObject( new FloatNode( val ).setConst( true ) );
|
|
120
198
|
|
|
121
199
|
};
|
|
122
200
|
|
|
123
201
|
export const color = ( ...params ) => {
|
|
124
202
|
|
|
125
|
-
return
|
|
203
|
+
return nodeObject( new ColorNode( new Color( ...params ) ).setConst( true ) );
|
|
126
204
|
|
|
127
205
|
};
|
|
128
206
|
|
|
129
207
|
export const join = ( ...params ) => {
|
|
130
208
|
|
|
131
|
-
return
|
|
209
|
+
return nodeObject( new JoinNode( ShaderNodeArray( params ) ) );
|
|
132
210
|
|
|
133
211
|
};
|
|
134
212
|
|
|
135
|
-
export const
|
|
213
|
+
export const cond = ( ...params ) => {
|
|
136
214
|
|
|
137
|
-
return
|
|
215
|
+
return nodeObject( new CondNode( ...ShaderNodeArray( params ) ) );
|
|
138
216
|
|
|
139
217
|
};
|
|
140
218
|
|
|
141
|
-
export const
|
|
219
|
+
export const vec2 = ( ...params ) => {
|
|
142
220
|
|
|
143
|
-
|
|
221
|
+
if ( params[ 0 ]?.isNode === true ) {
|
|
144
222
|
|
|
145
|
-
|
|
223
|
+
return nodeObject( new ConvertNode( params[ 0 ], 'vec2' ) );
|
|
146
224
|
|
|
147
|
-
|
|
225
|
+
} else {
|
|
148
226
|
|
|
149
|
-
|
|
227
|
+
// Providing one scalar value: This value is used for all components
|
|
150
228
|
|
|
151
|
-
|
|
229
|
+
if ( params.length === 1 ) {
|
|
152
230
|
|
|
153
|
-
|
|
231
|
+
params[ 1 ] = params[ 0 ];
|
|
154
232
|
|
|
155
|
-
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
return nodeObject( new Vector2Node( new Vector2( ...params ) ).setConst( true ) );
|
|
236
|
+
|
|
237
|
+
}
|
|
156
238
|
|
|
157
239
|
};
|
|
158
240
|
|
|
159
|
-
export const
|
|
241
|
+
export const vec3 = ( ...params ) => {
|
|
160
242
|
|
|
161
|
-
|
|
243
|
+
if ( params[ 0 ]?.isNode === true ) {
|
|
162
244
|
|
|
163
|
-
|
|
245
|
+
return nodeObject( new ConvertNode( params[ 0 ], 'vec3' ) );
|
|
164
246
|
|
|
165
|
-
|
|
247
|
+
} else {
|
|
166
248
|
|
|
167
|
-
|
|
249
|
+
// Providing one scalar value: This value is used for all components
|
|
168
250
|
|
|
169
|
-
|
|
251
|
+
if ( params.length === 1 ) {
|
|
170
252
|
|
|
171
|
-
|
|
253
|
+
params[ 1 ] = params[ 2 ] = params[ 0 ];
|
|
254
|
+
|
|
255
|
+
}
|
|
172
256
|
|
|
173
|
-
|
|
257
|
+
return nodeObject( new Vector3Node( new Vector3( ...params ) ).setConst( true ) );
|
|
258
|
+
|
|
259
|
+
}
|
|
174
260
|
|
|
175
261
|
};
|
|
176
262
|
|
|
177
|
-
export const
|
|
263
|
+
export const vec4 = ( ...params ) => {
|
|
178
264
|
|
|
179
|
-
|
|
265
|
+
if ( params[ 0 ]?.isNode === true ) {
|
|
180
266
|
|
|
181
|
-
|
|
267
|
+
return nodeObject( new ConvertNode( params[ 0 ], 'vec4' ) );
|
|
182
268
|
|
|
183
|
-
|
|
269
|
+
} else {
|
|
184
270
|
|
|
185
|
-
|
|
271
|
+
// Providing one scalar value: This value is used for all components
|
|
272
|
+
|
|
273
|
+
if ( params.length === 1 ) {
|
|
274
|
+
|
|
275
|
+
params[ 1 ] = params[ 2 ] = params[ 3 ] = params[ 0 ];
|
|
276
|
+
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
return nodeObject( new Vector4Node( new Vector4( ...params ) ).setConst( true ) );
|
|
280
|
+
|
|
281
|
+
}
|
|
186
282
|
|
|
187
283
|
};
|
|
188
284
|
|
|
189
|
-
export const
|
|
285
|
+
export const addTo = ( varNode, ...params ) => {
|
|
190
286
|
|
|
191
|
-
|
|
287
|
+
varNode.node = add( varNode.node, ...ShaderNodeArray( params ) );
|
|
288
|
+
|
|
289
|
+
return nodeObject( varNode );
|
|
192
290
|
|
|
193
291
|
};
|
|
292
|
+
|
|
293
|
+
export const add = ShaderNodeProxy( OperatorNode, '+' );
|
|
294
|
+
export const sub = ShaderNodeProxy( OperatorNode, '-' );
|
|
295
|
+
export const mul = ShaderNodeProxy( OperatorNode, '*' );
|
|
296
|
+
export const div = ShaderNodeProxy( OperatorNode, '/' );
|
|
297
|
+
export const equal = ShaderNodeProxy( OperatorNode, '==' );
|
|
298
|
+
export const assign = ShaderNodeProxy( OperatorNode, '=' );
|
|
299
|
+
export const greaterThan = ShaderNodeProxy( OperatorNode, '>' );
|
|
300
|
+
export const lessThanEqual = ShaderNodeProxy( OperatorNode, '<=' );
|
|
301
|
+
export const and = ShaderNodeProxy( OperatorNode, '&&' );
|
|
302
|
+
|
|
303
|
+
export const element = ShaderNodeProxy( ArrayElementNode );
|
|
304
|
+
|
|
305
|
+
export const normalGeometry = new NormalNode( NormalNode.GEOMETRY );
|
|
306
|
+
export const normalLocal = new NormalNode( NormalNode.LOCAL );
|
|
307
|
+
export const normalWorld = new NormalNode( NormalNode.WORLD );
|
|
308
|
+
export const normalView = new NormalNode( NormalNode.VIEW );
|
|
309
|
+
export const transformedNormalView = new VarNode( new NormalNode( NormalNode.VIEW ), 'TransformedNormalView', 'vec3' );
|
|
310
|
+
|
|
311
|
+
export const positionLocal = new PositionNode( PositionNode.LOCAL );
|
|
312
|
+
export const positionWorld = new PositionNode( PositionNode.WORLD );
|
|
313
|
+
export const positionView = new PositionNode( PositionNode.VIEW );
|
|
314
|
+
export const positionViewDirection = new PositionNode( PositionNode.VIEW_DIRECTION );
|
|
315
|
+
|
|
316
|
+
export const PI = float( 3.141592653589793 );
|
|
317
|
+
export const PI2 = float( 6.283185307179586 );
|
|
318
|
+
export const PI_HALF = float( 1.5707963267948966 );
|
|
319
|
+
export const RECIPROCAL_PI = float( 0.3183098861837907 );
|
|
320
|
+
export const RECIPROCAL_PI2 = float( 0.15915494309189535 );
|
|
321
|
+
export const EPSILON = float( 1e-6 );
|
|
322
|
+
|
|
323
|
+
export const diffuseColor = new PropertyNode( 'DiffuseColor', 'vec4' );
|
|
324
|
+
export const roughness = new PropertyNode( 'Roughness', 'float' );
|
|
325
|
+
export const metalness = new PropertyNode( 'Metalness', 'float' );
|
|
326
|
+
export const alphaTest = new PropertyNode( 'AlphaTest', 'float' );
|
|
327
|
+
export const specularColor = new PropertyNode( 'SpecularColor', 'color' );
|
|
328
|
+
|
|
329
|
+
export const abs = ShaderNodeProxy( MathNode, 'abs' );
|
|
330
|
+
export const acos = ShaderNodeProxy( MathNode, 'acos' );
|
|
331
|
+
export const asin = ShaderNodeProxy( MathNode, 'asin' );
|
|
332
|
+
export const atan = ShaderNodeProxy( MathNode, 'atan' );
|
|
333
|
+
export const ceil = ShaderNodeProxy( MathNode, 'ceil' );
|
|
334
|
+
export const clamp = ShaderNodeProxy( MathNode, 'clamp' );
|
|
335
|
+
export const cos = ShaderNodeProxy( MathNode, 'cos' );
|
|
336
|
+
export const cross = ShaderNodeProxy( MathNode, 'cross' );
|
|
337
|
+
export const degrees = ShaderNodeProxy( MathNode, 'degrees' );
|
|
338
|
+
export const dFdx = ShaderNodeProxy( MathNode, 'dFdx' );
|
|
339
|
+
export const dFdy = ShaderNodeProxy( MathNode, 'dFdy' );
|
|
340
|
+
export const distance = ShaderNodeProxy( MathNode, 'distance' );
|
|
341
|
+
export const dot = ShaderNodeProxy( MathNode, 'dot' );
|
|
342
|
+
export const exp = ShaderNodeProxy( MathNode, 'exp' );
|
|
343
|
+
export const exp2 = ShaderNodeProxy( MathNode, 'exp2' );
|
|
344
|
+
export const faceforward = ShaderNodeProxy( MathNode, 'faceforward' );
|
|
345
|
+
export const floor = ShaderNodeProxy( MathNode, 'floor' );
|
|
346
|
+
export const fract = ShaderNodeProxy( MathNode, 'fract' );
|
|
347
|
+
export const invert = ShaderNodeProxy( MathNode, 'invert' );
|
|
348
|
+
export const inversesqrt = ShaderNodeProxy( MathNode, 'inversesqrt' );
|
|
349
|
+
export const length = ShaderNodeProxy( MathNode, 'length' );
|
|
350
|
+
export const log = ShaderNodeProxy( MathNode, 'log' );
|
|
351
|
+
export const log2 = ShaderNodeProxy( MathNode, 'log2' );
|
|
352
|
+
export const max = ShaderNodeProxy( MathNode, 'max' );
|
|
353
|
+
export const min = ShaderNodeProxy( MathNode, 'min' );
|
|
354
|
+
export const mix = ShaderNodeProxy( MathNode, 'mix' );
|
|
355
|
+
export const mod = ShaderNodeProxy( MathNode, 'mod' );
|
|
356
|
+
export const negate = ShaderNodeProxy( MathNode, 'negate' );
|
|
357
|
+
export const normalize = ShaderNodeProxy( MathNode, 'normalize' );
|
|
358
|
+
export const pow = ShaderNodeProxy( MathNode, 'pow' );
|
|
359
|
+
export const pow2 = ShaderNodeProxy( MathNode, 'pow', 2 );
|
|
360
|
+
export const pow3 = ShaderNodeProxy( MathNode, 'pow', 3 );
|
|
361
|
+
export const pow4 = ShaderNodeProxy( MathNode, 'pow', 4 );
|
|
362
|
+
export const radians = ShaderNodeProxy( MathNode, 'radians' );
|
|
363
|
+
export const reflect = ShaderNodeProxy( MathNode, 'reflect' );
|
|
364
|
+
export const refract = ShaderNodeProxy( MathNode, 'refract' );
|
|
365
|
+
export const round = ShaderNodeProxy( MathNode, 'round' );
|
|
366
|
+
export const saturate = ShaderNodeProxy( MathNode, 'saturate' );
|
|
367
|
+
export const sign = ShaderNodeProxy( MathNode, 'sign' );
|
|
368
|
+
export const sin = ShaderNodeProxy( MathNode, 'sin' );
|
|
369
|
+
export const smoothstep = ShaderNodeProxy( MathNode, 'smoothstep' );
|
|
370
|
+
export const sqrt = ShaderNodeProxy( MathNode, 'sqrt' );
|
|
371
|
+
export const step = ShaderNodeProxy( MathNode, 'step' );
|
|
372
|
+
export const tan = ShaderNodeProxy( MathNode, 'tan' );
|
|
373
|
+
export const transformDirection = ShaderNodeProxy( MathNode, 'transformDirection' );
|
|
@@ -22,7 +22,7 @@ class MaterialNode extends Node {
|
|
|
22
22
|
getNodeType( builder ) {
|
|
23
23
|
|
|
24
24
|
const scope = this.scope;
|
|
25
|
-
const material = builder.
|
|
25
|
+
const material = builder.context.material;
|
|
26
26
|
|
|
27
27
|
if ( scope === MaterialNode.COLOR ) {
|
|
28
28
|
|
|
@@ -46,7 +46,7 @@ class MaterialNode extends Node {
|
|
|
46
46
|
|
|
47
47
|
generate( builder, output ) {
|
|
48
48
|
|
|
49
|
-
const material = builder.
|
|
49
|
+
const material = builder.context.material;
|
|
50
50
|
const scope = this.scope;
|
|
51
51
|
|
|
52
52
|
let node = null;
|
|
@@ -85,15 +85,15 @@ class MaterialNode extends Node {
|
|
|
85
85
|
|
|
86
86
|
} else if ( scope === MaterialNode.SPECULAR ) {
|
|
87
87
|
|
|
88
|
-
const
|
|
88
|
+
const specularColorNode = new MaterialReferenceNode( 'specularColor', 'color' );
|
|
89
89
|
|
|
90
|
-
if ( material.
|
|
90
|
+
if ( material.specularColorMap !== null && material.specularColorMap !== undefined && material.specularColorMap.isTexture === true ) {
|
|
91
91
|
|
|
92
|
-
node = new OperatorNode( '*',
|
|
92
|
+
node = new OperatorNode( '*', specularColorNode, new MaterialReferenceNode( 'specularColorMap', 'texture' ) );
|
|
93
93
|
|
|
94
94
|
} else {
|
|
95
95
|
|
|
96
|
-
node =
|
|
96
|
+
node = specularColorNode;
|
|
97
97
|
|
|
98
98
|
}
|
|
99
99
|
|
|
@@ -12,16 +12,16 @@ class ModelViewProjectionNode extends Node {
|
|
|
12
12
|
|
|
13
13
|
this.position = position;
|
|
14
14
|
|
|
15
|
-
this._mvpMatrix = new OperatorNode( '*', new CameraNode( CameraNode.PROJECTION_MATRIX ), new ModelNode( ModelNode.VIEW_MATRIX ) );
|
|
16
|
-
|
|
17
15
|
}
|
|
18
16
|
|
|
19
17
|
generate( builder ) {
|
|
20
18
|
|
|
21
|
-
const
|
|
22
|
-
|
|
19
|
+
const position = this.position;
|
|
20
|
+
|
|
21
|
+
const mvpMatrix = new OperatorNode( '*', new CameraNode( CameraNode.PROJECTION_MATRIX ), new ModelNode( ModelNode.VIEW_MATRIX ) );
|
|
22
|
+
const mvpNode = new OperatorNode( '*', mvpMatrix, position );
|
|
23
23
|
|
|
24
|
-
return
|
|
24
|
+
return mvpNode.build( builder );
|
|
25
25
|
|
|
26
26
|
}
|
|
27
27
|
|
|
@@ -5,10 +5,10 @@ import ModelNode from '../accessors/ModelNode.js';
|
|
|
5
5
|
import CameraNode from '../accessors/CameraNode.js';
|
|
6
6
|
import OperatorNode from '../math/OperatorNode.js';
|
|
7
7
|
import MathNode from '../math/MathNode.js';
|
|
8
|
-
import { inverseTransformDirection } from '../functions/MathFunctions.js';
|
|
9
8
|
|
|
10
9
|
class NormalNode extends Node {
|
|
11
10
|
|
|
11
|
+
static GEOMETRY = 'geometry';
|
|
12
12
|
static LOCAL = 'local';
|
|
13
13
|
static WORLD = 'world';
|
|
14
14
|
static VIEW = 'view';
|
|
@@ -21,16 +21,26 @@ class NormalNode extends Node {
|
|
|
21
21
|
|
|
22
22
|
}
|
|
23
23
|
|
|
24
|
+
getHash( /*builder*/ ) {
|
|
25
|
+
|
|
26
|
+
return `normal-${this.scope}`;
|
|
27
|
+
|
|
28
|
+
}
|
|
29
|
+
|
|
24
30
|
generate( builder ) {
|
|
25
31
|
|
|
26
32
|
const scope = this.scope;
|
|
27
33
|
|
|
28
34
|
let outputNode = null;
|
|
29
35
|
|
|
30
|
-
if ( scope === NormalNode.
|
|
36
|
+
if ( scope === NormalNode.GEOMETRY ) {
|
|
31
37
|
|
|
32
38
|
outputNode = new AttributeNode( 'normal', 'vec3' );
|
|
33
39
|
|
|
40
|
+
} else if ( scope === NormalNode.LOCAL ) {
|
|
41
|
+
|
|
42
|
+
outputNode = new VaryNode( new NormalNode( NormalNode.GEOMETRY ) );
|
|
43
|
+
|
|
34
44
|
} else if ( scope === NormalNode.VIEW ) {
|
|
35
45
|
|
|
36
46
|
const vertexNormalNode = new OperatorNode( '*', new ModelNode( ModelNode.NORMAL_MATRIX ), new NormalNode( NormalNode.LOCAL ) );
|
|
@@ -38,7 +48,8 @@ class NormalNode extends Node {
|
|
|
38
48
|
|
|
39
49
|
} else if ( scope === NormalNode.WORLD ) {
|
|
40
50
|
|
|
41
|
-
|
|
51
|
+
// To use INVERSE_TRANSFORM_DIRECTION only inverse the param order like this: MathNode( ..., Vector, Matrix );
|
|
52
|
+
const vertexNormalNode = new MathNode( MathNode.TRANSFORM_DIRECTION, new NormalNode( NormalNode.VIEW ), new CameraNode( CameraNode.VIEW_MATRIX ) );
|
|
42
53
|
outputNode = new MathNode( MathNode.NORMALIZE, new VaryNode( vertexNormalNode ) );
|
|
43
54
|
|
|
44
55
|
}
|
|
@@ -6,11 +6,9 @@ class PointUVNode extends Node {
|
|
|
6
6
|
|
|
7
7
|
super( 'vec2' );
|
|
8
8
|
|
|
9
|
-
Object.defineProperty( this, 'isPointUVNode', { value: true } );
|
|
10
|
-
|
|
11
9
|
}
|
|
12
10
|
|
|
13
|
-
generate( builder ) {
|
|
11
|
+
generate( /*builder*/ ) {
|
|
14
12
|
|
|
15
13
|
return 'vec2( gl_PointCoord.x, 1.0 - gl_PointCoord.y )';
|
|
16
14
|
|
|
@@ -18,4 +16,6 @@ class PointUVNode extends Node {
|
|
|
18
16
|
|
|
19
17
|
}
|
|
20
18
|
|
|
19
|
+
PointUVNode.prototype.isPointUVNode = true;
|
|
20
|
+
|
|
21
21
|
export default PointUVNode;
|
|
@@ -4,10 +4,10 @@ import VaryNode from '../core/VaryNode.js';
|
|
|
4
4
|
import ModelNode from '../accessors/ModelNode.js';
|
|
5
5
|
import MathNode from '../math/MathNode.js';
|
|
6
6
|
import OperatorNode from '../math/OperatorNode.js';
|
|
7
|
-
import { transformDirection } from '../functions/MathFunctions.js';
|
|
8
7
|
|
|
9
8
|
class PositionNode extends Node {
|
|
10
9
|
|
|
10
|
+
static GEOMETRY = 'geometry';
|
|
11
11
|
static LOCAL = 'local';
|
|
12
12
|
static WORLD = 'world';
|
|
13
13
|
static VIEW = 'view';
|
|
@@ -21,19 +21,29 @@ class PositionNode extends Node {
|
|
|
21
21
|
|
|
22
22
|
}
|
|
23
23
|
|
|
24
|
+
getHash( /*builder*/ ) {
|
|
25
|
+
|
|
26
|
+
return `position-${this.scope}`;
|
|
27
|
+
|
|
28
|
+
}
|
|
29
|
+
|
|
24
30
|
generate( builder ) {
|
|
25
31
|
|
|
26
32
|
const scope = this.scope;
|
|
27
33
|
|
|
28
34
|
let outputNode = null;
|
|
29
35
|
|
|
30
|
-
if ( scope === PositionNode.
|
|
31
|
-
|
|
36
|
+
if ( scope === PositionNode.GEOMETRY ) {
|
|
37
|
+
|
|
32
38
|
outputNode = new AttributeNode( 'position', 'vec3' );
|
|
33
|
-
|
|
39
|
+
|
|
40
|
+
} else if ( scope === PositionNode.LOCAL ) {
|
|
41
|
+
|
|
42
|
+
outputNode = new VaryNode( new PositionNode( PositionNode.GEOMETRY ) );
|
|
43
|
+
|
|
34
44
|
} else if ( scope === PositionNode.WORLD ) {
|
|
35
45
|
|
|
36
|
-
const vertexPositionNode =
|
|
46
|
+
const vertexPositionNode = new MathNode( MathNode.TRANSFORM_DIRECTION, new ModelNode( ModelNode.WORLD_MATRIX ), new PositionNode( PositionNode.LOCAL ) );
|
|
37
47
|
outputNode = new VaryNode( vertexPositionNode );
|
|
38
48
|
|
|
39
49
|
} else if ( scope === PositionNode.VIEW ) {
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import Node from '../core/Node.js';
|
|
2
|
+
import AttributeNode from '../core/AttributeNode.js';
|
|
3
|
+
import PositionNode from '../accessors/PositionNode.js';
|
|
4
|
+
import NormalNode from '../accessors/NormalNode.js';
|
|
5
|
+
import Matrix4Node from '../inputs/Matrix4Node.js';
|
|
6
|
+
import BufferNode from '../inputs/BufferNode.js';
|
|
7
|
+
|
|
8
|
+
import { ShaderNode, assign, element, add, mul, transformDirection } from '../ShaderNode.js';
|
|
9
|
+
|
|
10
|
+
import { NodeUpdateType } from '../core/constants.js';
|
|
11
|
+
|
|
12
|
+
const Skinning = new ShaderNode( ( inputs, builder ) => {
|
|
13
|
+
|
|
14
|
+
const { position, normal, index, weight, bindMatrix, bindMatrixInverse, boneMatrices } = inputs;
|
|
15
|
+
|
|
16
|
+
const boneMatX = element( boneMatrices, index.x );
|
|
17
|
+
const boneMatY = element( boneMatrices, index.y );
|
|
18
|
+
const boneMatZ = element( boneMatrices, index.z );
|
|
19
|
+
const boneMatW = element( boneMatrices, index.w );
|
|
20
|
+
|
|
21
|
+
// POSITION
|
|
22
|
+
|
|
23
|
+
const skinVertex = mul( bindMatrix, position );
|
|
24
|
+
|
|
25
|
+
const skinned = add(
|
|
26
|
+
mul( mul( boneMatX, skinVertex ), weight.x ),
|
|
27
|
+
mul( mul( boneMatY, skinVertex ), weight.y ),
|
|
28
|
+
mul( mul( boneMatZ, skinVertex ), weight.z ),
|
|
29
|
+
mul( mul( boneMatW, skinVertex ), weight.w )
|
|
30
|
+
);
|
|
31
|
+
|
|
32
|
+
const skinPosition = mul( bindMatrixInverse, skinned ).xyz;
|
|
33
|
+
|
|
34
|
+
// NORMAL
|
|
35
|
+
|
|
36
|
+
let skinMatrix = add(
|
|
37
|
+
mul( weight.x, boneMatX ),
|
|
38
|
+
mul( weight.y, boneMatY ),
|
|
39
|
+
mul( weight.z, boneMatZ ),
|
|
40
|
+
mul( weight.w, boneMatW )
|
|
41
|
+
);
|
|
42
|
+
|
|
43
|
+
skinMatrix = mul( mul( bindMatrixInverse, skinMatrix ), bindMatrix );
|
|
44
|
+
|
|
45
|
+
const skinNormal = transformDirection( skinMatrix, normal ).xyz;
|
|
46
|
+
|
|
47
|
+
// ASSIGNS
|
|
48
|
+
|
|
49
|
+
assign( position, skinPosition ).build( builder );
|
|
50
|
+
assign( normal, skinNormal ).build( builder );
|
|
51
|
+
|
|
52
|
+
} );
|
|
53
|
+
|
|
54
|
+
class SkinningNode extends Node {
|
|
55
|
+
|
|
56
|
+
constructor( skinnedMesh ) {
|
|
57
|
+
|
|
58
|
+
super( 'void' );
|
|
59
|
+
|
|
60
|
+
this.skinnedMesh = skinnedMesh;
|
|
61
|
+
|
|
62
|
+
this.updateType = NodeUpdateType.Object;
|
|
63
|
+
|
|
64
|
+
//
|
|
65
|
+
|
|
66
|
+
this.skinIndexNode = new AttributeNode( 'skinIndex', 'uvec4' );
|
|
67
|
+
this.skinWeightNode = new AttributeNode( 'skinWeight', 'vec4' );
|
|
68
|
+
|
|
69
|
+
this.bindMatrixNode = new Matrix4Node( skinnedMesh.bindMatrix );
|
|
70
|
+
this.bindMatrixInverseNode = new Matrix4Node( skinnedMesh.bindMatrixInverse );
|
|
71
|
+
this.boneMatricesNode = new BufferNode( skinnedMesh.skeleton.boneMatrices, 'mat4', skinnedMesh.skeleton.bones.length );
|
|
72
|
+
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
generate( builder ) {
|
|
76
|
+
|
|
77
|
+
// inout nodes
|
|
78
|
+
const position = new PositionNode( PositionNode.LOCAL );
|
|
79
|
+
const normal = new NormalNode( NormalNode.LOCAL );
|
|
80
|
+
|
|
81
|
+
const index = this.skinIndexNode;
|
|
82
|
+
const weight = this.skinWeightNode;
|
|
83
|
+
const bindMatrix = this.bindMatrixNode;
|
|
84
|
+
const bindMatrixInverse = this.bindMatrixInverseNode;
|
|
85
|
+
const boneMatrices = this.boneMatricesNode;
|
|
86
|
+
|
|
87
|
+
Skinning( {
|
|
88
|
+
position,
|
|
89
|
+
normal,
|
|
90
|
+
index,
|
|
91
|
+
weight,
|
|
92
|
+
bindMatrix,
|
|
93
|
+
bindMatrixInverse,
|
|
94
|
+
boneMatrices
|
|
95
|
+
}, builder );
|
|
96
|
+
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
update() {
|
|
100
|
+
|
|
101
|
+
this.skinnedMesh.skeleton.update();
|
|
102
|
+
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
export default SkinningNode;
|