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
|
@@ -5,46 +5,45 @@ import MathNode from '../math/MathNode.js';
|
|
|
5
5
|
import OperatorNode from '../math/OperatorNode.js';
|
|
6
6
|
import FloatNode from '../inputs/FloatNode.js';
|
|
7
7
|
import TempNode from '../core/TempNode.js';
|
|
8
|
-
import FunctionNode from '../core/FunctionNode.js';
|
|
9
8
|
import ModelNode from '../accessors/ModelNode.js';
|
|
9
|
+
import { ShaderNode, cond, add, mul, dFdx, dFdy, cross, max, dot, normalize, inversesqrt, equal } from '../ShaderNode.js';
|
|
10
10
|
|
|
11
11
|
import { TangentSpaceNormalMap, ObjectSpaceNormalMap } from 'three';
|
|
12
12
|
|
|
13
13
|
// Normal Mapping Without Precomputed Tangents
|
|
14
14
|
// http://www.thetenthplanet.de/archives/1180
|
|
15
15
|
|
|
16
|
-
|
|
17
|
-
vec3 ( vec3 eye_pos, vec3 surf_norm, vec3 mapN, float faceDirection, const in vec2 uv ) {
|
|
16
|
+
const perturbNormal2ArbNode = new ShaderNode( ( inputs ) => {
|
|
18
17
|
|
|
19
|
-
|
|
18
|
+
const { eye_pos, surf_norm, mapN, faceDirection, uv } = inputs;
|
|
20
19
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
20
|
+
const q0 = dFdx( eye_pos.xyz );
|
|
21
|
+
const q1 = dFdy( eye_pos.xyz );
|
|
22
|
+
const st0 = dFdx( uv.st );
|
|
23
|
+
const st1 = dFdy( uv.st );
|
|
25
24
|
|
|
26
|
-
|
|
25
|
+
const N = surf_norm; // normalized
|
|
27
26
|
|
|
28
|
-
|
|
29
|
-
|
|
27
|
+
const q1perp = cross( q1, N );
|
|
28
|
+
const q0perp = cross( N, q0 );
|
|
30
29
|
|
|
31
|
-
|
|
32
|
-
|
|
30
|
+
const T = add( mul( q1perp, st0.x ), mul( q0perp, st1.x ) );
|
|
31
|
+
const B = add( mul( q1perp, st0.y ), mul( q0perp, st1.y ) );
|
|
33
32
|
|
|
34
|
-
|
|
35
|
-
|
|
33
|
+
const det = max( dot( T, T ), dot( B, B ) );
|
|
34
|
+
const scale = cond( equal( det, 0 ), 0, mul( faceDirection, inversesqrt( det ) ) );
|
|
36
35
|
|
|
37
|
-
return normalize( T
|
|
36
|
+
return normalize( add( mul( T, mul( mapN.x, scale ) ), mul( B, mul( mapN.y, scale ) ), mul( N, mapN.z ) ) );
|
|
38
37
|
|
|
39
|
-
}
|
|
38
|
+
} );
|
|
40
39
|
|
|
41
40
|
class NormalMapNode extends TempNode {
|
|
42
41
|
|
|
43
|
-
constructor(
|
|
42
|
+
constructor( node ) {
|
|
44
43
|
|
|
45
44
|
super( 'vec3' );
|
|
46
45
|
|
|
47
|
-
this.
|
|
46
|
+
this.node = node;
|
|
48
47
|
|
|
49
48
|
this.normalMapType = TangentSpaceNormalMap;
|
|
50
49
|
|
|
@@ -56,7 +55,7 @@ class NormalMapNode extends TempNode {
|
|
|
56
55
|
|
|
57
56
|
const normalMapType = this.normalMapType;
|
|
58
57
|
|
|
59
|
-
const normalOP = new OperatorNode( '*', this.
|
|
58
|
+
const normalOP = new OperatorNode( '*', this.node, new FloatNode( 2.0 ).setConst( true ) );
|
|
60
59
|
const normalMap = new OperatorNode( '-', normalOP, new FloatNode( 1.0 ).setConst( true ) );
|
|
61
60
|
|
|
62
61
|
if ( normalMapType === ObjectSpaceNormalMap ) {
|
|
@@ -69,7 +68,7 @@ class NormalMapNode extends TempNode {
|
|
|
69
68
|
|
|
70
69
|
} else if ( normalMapType === TangentSpaceNormalMap ) {
|
|
71
70
|
|
|
72
|
-
const perturbNormal2ArbCall =
|
|
71
|
+
const perturbNormal2ArbCall = perturbNormal2ArbNode( {
|
|
73
72
|
eye_pos: new PositionNode( PositionNode.VIEW ),
|
|
74
73
|
surf_norm: new NormalNode( NormalNode.VIEW ),
|
|
75
74
|
mapN: normalMap,
|
|
@@ -78,7 +77,7 @@ class NormalMapNode extends TempNode {
|
|
|
78
77
|
} );
|
|
79
78
|
|
|
80
79
|
return perturbNormal2ArbCall.build( builder, type );
|
|
81
|
-
|
|
80
|
+
|
|
82
81
|
}
|
|
83
82
|
|
|
84
83
|
}
|
|
@@ -1,68 +1,43 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
1
|
+
import { ShaderNode,
|
|
2
|
+
add, addTo, sub, mul, div, saturate, dot, pow, pow2, exp2, normalize, max, sqrt, negate,
|
|
3
|
+
cond, greaterThan, and,
|
|
4
|
+
transformedNormalView, positionViewDirection,
|
|
5
|
+
diffuseColor, specularColor, roughness,
|
|
6
|
+
PI, RECIPROCAL_PI, EPSILON
|
|
7
|
+
} from '../ShaderNode.js';
|
|
3
8
|
|
|
4
|
-
export const F_Schlick = new
|
|
5
|
-
|
|
9
|
+
export const F_Schlick = new ShaderNode( ( inputs ) => {
|
|
10
|
+
|
|
11
|
+
const { f0, f90, dotVH } = inputs;
|
|
6
12
|
|
|
7
13
|
// Original approximation by Christophe Schlick '94
|
|
8
14
|
// float fresnel = pow( 1.0 - dotVH, 5.0 );
|
|
9
15
|
|
|
10
16
|
// Optimized variant (presented by Epic at SIGGRAPH '13)
|
|
11
17
|
// https://cdn2.unrealengine.com/Resources/files/2013SiggraphPresentationsNotes-26915738.pdf
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
return ( f90 - f0 ) * fresnel + f0;
|
|
15
|
-
|
|
16
|
-
}` ); // validated
|
|
17
|
-
|
|
18
|
-
export const G_BlinnPhong_Implicit = new FunctionNode( `
|
|
19
|
-
float G_BlinnPhong_Implicit() {
|
|
20
|
-
|
|
21
|
-
// ( const in float dotNL, const in float dotNV )
|
|
22
|
-
// geometry term is (n dot l)(n dot v) / 4(n dot l)(n dot v)
|
|
23
|
-
|
|
24
|
-
return 0.25;
|
|
25
|
-
|
|
26
|
-
}` ); // validated
|
|
27
|
-
|
|
28
|
-
export const BRDF_Lambert = new FunctionNode( `
|
|
29
|
-
vec3 BRDF_Lambert( const in vec3 diffuseColor ) {
|
|
30
|
-
|
|
31
|
-
return RECIPROCAL_PI * diffuseColor;
|
|
32
|
-
|
|
33
|
-
}` ); // validated
|
|
18
|
+
const fresnel = exp2( mul( sub( mul( - 5.55473, dotVH ), 6.98316 ), dotVH ) );
|
|
34
19
|
|
|
35
|
-
|
|
36
|
-
float getDistanceAttenuation( float lightDistance, float cutoffDistance, float decayExponent ) {
|
|
20
|
+
return add( mul( f0, sub( 1.0, fresnel ) ), mul( f90, fresnel ) );
|
|
37
21
|
|
|
38
|
-
|
|
22
|
+
} ); // validated
|
|
39
23
|
|
|
40
|
-
|
|
41
|
-
// page 32, equation 26: E[window1]
|
|
42
|
-
// https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf
|
|
43
|
-
float distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );
|
|
24
|
+
export const BRDF_Lambert = new ShaderNode( ( inputs ) => {
|
|
44
25
|
|
|
45
|
-
|
|
26
|
+
return mul( RECIPROCAL_PI, inputs.diffuseColor ); // punctual light
|
|
46
27
|
|
|
47
|
-
|
|
28
|
+
} ); // validated
|
|
48
29
|
|
|
49
|
-
|
|
30
|
+
export const getDistanceAttenuation = new ShaderNode( ( inputs ) => {
|
|
50
31
|
|
|
51
|
-
|
|
32
|
+
const { lightDistance, cutoffDistance, decayExponent } = inputs;
|
|
52
33
|
|
|
53
|
-
|
|
34
|
+
return cond(
|
|
35
|
+
and( greaterThan( cutoffDistance, 0 ), greaterThan( decayExponent, 0 ) ),
|
|
36
|
+
pow( saturate( add( div( negate( lightDistance ), cutoffDistance ), 1.0 ) ), decayExponent ),
|
|
37
|
+
1.0
|
|
38
|
+
);
|
|
54
39
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
return pow( saturate( -lightDistance / cutoffDistance + 1.0 ), decayExponent );
|
|
58
|
-
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
return 1.0;
|
|
62
|
-
|
|
63
|
-
#endif
|
|
64
|
-
|
|
65
|
-
}` ).setIncludes( [ pow2 ] );
|
|
40
|
+
} ); // validated
|
|
66
41
|
|
|
67
42
|
//
|
|
68
43
|
// STANDARD
|
|
@@ -70,90 +45,78 @@ float getDistanceAttenuation( float lightDistance, float cutoffDistance, float d
|
|
|
70
45
|
|
|
71
46
|
// Moving Frostbite to Physically Based Rendering 3.0 - page 12, listing 2
|
|
72
47
|
// https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf
|
|
73
|
-
export const V_GGX_SmithCorrelated = new
|
|
74
|
-
float V_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {
|
|
48
|
+
export const V_GGX_SmithCorrelated = new ShaderNode( ( inputs ) => {
|
|
75
49
|
|
|
76
|
-
|
|
50
|
+
const { alpha, dotNL, dotNV } = inputs;
|
|
77
51
|
|
|
78
|
-
|
|
79
|
-
float gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );
|
|
52
|
+
const a2 = pow2( alpha );
|
|
80
53
|
|
|
81
|
-
|
|
54
|
+
const gv = mul( dotNL, sqrt( add( a2, mul( sub( 1.0, a2 ), pow2( dotNV ) ) ) ) );
|
|
55
|
+
const gl = mul( dotNV, sqrt( add( a2, mul( sub( 1.0, a2 ), pow2( dotNL ) ) ) ) );
|
|
82
56
|
|
|
83
|
-
|
|
57
|
+
return div( 0.5, max( add( gv, gl ), EPSILON ) );
|
|
58
|
+
|
|
59
|
+
} ); // validated
|
|
84
60
|
|
|
85
61
|
// Microfacet Models for Refraction through Rough Surfaces - equation (33)
|
|
86
62
|
// http://graphicrants.blogspot.com/2013/08/specular-brdf-reference.html
|
|
87
63
|
// alpha is "roughness squared" in Disney’s reparameterization
|
|
88
|
-
export const D_GGX = new
|
|
89
|
-
float D_GGX( const in float alpha, const in float dotNH ) {
|
|
90
|
-
|
|
91
|
-
float a2 = pow2( alpha );
|
|
64
|
+
export const D_GGX = new ShaderNode( ( inputs ) => {
|
|
92
65
|
|
|
93
|
-
|
|
66
|
+
const { alpha, dotNH } = inputs;
|
|
94
67
|
|
|
95
|
-
|
|
68
|
+
const a2 = pow2( alpha );
|
|
96
69
|
|
|
97
|
-
|
|
70
|
+
const denom = add( mul( pow2( dotNH ), sub( a2, 1.0 ) ), 1.0 ); // avoid alpha = 0 with dotNH = 1
|
|
98
71
|
|
|
99
|
-
|
|
100
|
-
export const BRDF_Specular_GGX = new FunctionNode( `
|
|
101
|
-
vec3 BRDF_Specular_GGX( vec3 lightDirection, const in vec3 f0, const in float f90, const in float roughness ) {
|
|
72
|
+
return mul( RECIPROCAL_PI, div( a2, pow2( denom ) ) );
|
|
102
73
|
|
|
103
|
-
|
|
74
|
+
} ); // validated
|
|
104
75
|
|
|
105
|
-
vec3 halfDir = normalize( lightDirection + PositionViewDirection );
|
|
106
76
|
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
float dotNH = saturate( dot( TransformedNormalView, halfDir ) );
|
|
110
|
-
float dotVH = saturate( dot( PositionViewDirection, halfDir ) );
|
|
111
|
-
|
|
112
|
-
vec3 F = F_Schlick( f0, f90, dotVH );
|
|
77
|
+
// GGX Distribution, Schlick Fresnel, GGX_SmithCorrelated Visibility
|
|
78
|
+
export const BRDF_GGX = new ShaderNode( ( inputs ) => {
|
|
113
79
|
|
|
114
|
-
|
|
80
|
+
const { lightDirection, f0, f90, roughness } = inputs;
|
|
115
81
|
|
|
116
|
-
|
|
82
|
+
const alpha = pow2( roughness ); // UE4's roughness
|
|
117
83
|
|
|
118
|
-
|
|
84
|
+
const halfDir = normalize( add( lightDirection, positionViewDirection ) );
|
|
119
85
|
|
|
120
|
-
|
|
86
|
+
const dotNL = saturate( dot( transformedNormalView, lightDirection ) );
|
|
87
|
+
const dotNV = saturate( dot( transformedNormalView, positionViewDirection ) );
|
|
88
|
+
const dotNH = saturate( dot( transformedNormalView, halfDir ) );
|
|
89
|
+
const dotVH = saturate( dot( positionViewDirection, halfDir ) );
|
|
121
90
|
|
|
122
|
-
|
|
123
|
-
void RE_Direct_Physical( inout ReflectedLight reflectedLight, vec3 lightDirection, vec3 lightColor ) {
|
|
91
|
+
const F = F_Schlick( { f0, f90, dotVH } );
|
|
124
92
|
|
|
125
|
-
|
|
126
|
-
vec3 irradiance = dotNL * lightColor;
|
|
93
|
+
const V = V_GGX_SmithCorrelated( { alpha, dotNL, dotNV } );
|
|
127
94
|
|
|
128
|
-
|
|
95
|
+
const D = D_GGX( { alpha, dotNH } );
|
|
129
96
|
|
|
130
|
-
|
|
97
|
+
return mul( F, mul( V, D ) );
|
|
131
98
|
|
|
132
|
-
|
|
99
|
+
} ); // validated
|
|
133
100
|
|
|
134
|
-
|
|
101
|
+
export const RE_Direct_Physical = new ShaderNode( ( inputs ) => {
|
|
135
102
|
|
|
136
|
-
|
|
103
|
+
const { lightDirection, lightColor, directDiffuse, directSpecular } = inputs;
|
|
137
104
|
|
|
138
|
-
|
|
105
|
+
const dotNL = saturate( dot( transformedNormalView, lightDirection ) );
|
|
106
|
+
let irradiance = mul( dotNL, lightColor );
|
|
139
107
|
|
|
140
|
-
|
|
141
|
-
void ( inout ReflectedLight reflectedLight, vec3 lightDirection, vec3 lightColor ) {
|
|
108
|
+
irradiance = mul( irradiance, PI ); // punctual light
|
|
142
109
|
|
|
143
|
-
|
|
110
|
+
addTo( directDiffuse, mul( irradiance, BRDF_Lambert( { diffuseColor } ) ) );
|
|
144
111
|
|
|
145
|
-
|
|
112
|
+
addTo( directSpecular, mul( irradiance, BRDF_GGX( { lightDirection, f0: specularColor, f90: 1, roughness } ) ) );
|
|
146
113
|
|
|
147
|
-
|
|
114
|
+
} );
|
|
148
115
|
|
|
149
|
-
|
|
150
|
-
export const getSpecularMIPLevel = new FunctionNode( `
|
|
151
|
-
float ( const in float roughness, const in float maxMIPLevelScalar ) {
|
|
116
|
+
export const PhysicalLightingModel = new ShaderNode( ( inputs/*, builder*/ ) => {
|
|
152
117
|
|
|
153
|
-
|
|
154
|
-
float desiredMIPLevel = maxMIPLevelScalar + log2( sigma );
|
|
118
|
+
// PHYSICALLY_CORRECT_LIGHTS <-> builder.renderer.physicallyCorrectLights === true
|
|
155
119
|
|
|
156
|
-
|
|
157
|
-
return clamp( desiredMIPLevel, 0.0, maxMIPLevelScalar );
|
|
120
|
+
RE_Direct_Physical( inputs );
|
|
158
121
|
|
|
159
|
-
}
|
|
122
|
+
} );
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { ShaderNode,
|
|
2
|
+
add, max, min, abs, dFdx, dFdy,
|
|
3
|
+
normalGeometry
|
|
4
|
+
} from '../ShaderNode.js';
|
|
5
|
+
|
|
6
|
+
export const getGeometryRoughness = new ShaderNode( () => {
|
|
7
|
+
|
|
8
|
+
const dxy = max( abs( dFdx( normalGeometry ) ), abs( dFdy( normalGeometry ) ) );
|
|
9
|
+
const geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );
|
|
10
|
+
|
|
11
|
+
return geometryRoughness;
|
|
12
|
+
|
|
13
|
+
} );
|
|
14
|
+
|
|
15
|
+
export const getRoughness = new ShaderNode( ( inputs ) => {
|
|
16
|
+
|
|
17
|
+
const { roughness } = inputs;
|
|
18
|
+
|
|
19
|
+
const geometryRoughness = getGeometryRoughness();
|
|
20
|
+
|
|
21
|
+
let roughnessFactor = max( roughness, 0.0525 ); // 0.0525 corresponds to the base mip of a 256 cubemap.
|
|
22
|
+
roughnessFactor = add( roughnessFactor, geometryRoughness );
|
|
23
|
+
roughnessFactor = min( roughnessFactor, 1.0 );
|
|
24
|
+
|
|
25
|
+
return roughnessFactor;
|
|
26
|
+
|
|
27
|
+
} );
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import InputNode from '../core/InputNode.js';
|
|
2
|
+
|
|
3
|
+
class BufferNode extends InputNode {
|
|
4
|
+
|
|
5
|
+
constructor( value, bufferType, bufferCount = 0 ) {
|
|
6
|
+
|
|
7
|
+
super( 'buffer' );
|
|
8
|
+
|
|
9
|
+
this.value = value;
|
|
10
|
+
this.bufferType = bufferType;
|
|
11
|
+
this.bufferCount = bufferCount;
|
|
12
|
+
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
getNodeType( /* builder */ ) {
|
|
16
|
+
|
|
17
|
+
return this.bufferType;
|
|
18
|
+
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
BufferNode.prototype.isBufferNode = true;
|
|
24
|
+
|
|
25
|
+
export default BufferNode;
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import InputNode from '../core/InputNode.js';
|
|
2
2
|
import ExpressionNode from '../core/ExpressionNode.js';
|
|
3
3
|
import UVNode from '../accessors/UVNode.js';
|
|
4
|
-
import ColorSpaceNode from '../display/ColorSpaceNode.js';
|
|
5
4
|
|
|
6
5
|
class TextureNode extends InputNode {
|
|
7
6
|
|
|
@@ -17,6 +16,14 @@ class TextureNode extends InputNode {
|
|
|
17
16
|
|
|
18
17
|
generate( builder, output ) {
|
|
19
18
|
|
|
19
|
+
const texture = this.value;
|
|
20
|
+
|
|
21
|
+
if ( ! texture || texture.isTexture !== true ) {
|
|
22
|
+
|
|
23
|
+
throw new Error( 'TextureNode: Need a three.js texture.' );
|
|
24
|
+
|
|
25
|
+
}
|
|
26
|
+
|
|
20
27
|
const type = this.getNodeType( builder );
|
|
21
28
|
|
|
22
29
|
const textureProperty = super.generate( builder, type );
|
|
@@ -33,9 +40,9 @@ class TextureNode extends InputNode {
|
|
|
33
40
|
|
|
34
41
|
const nodeData = builder.getDataFromNode( this );
|
|
35
42
|
|
|
36
|
-
let
|
|
43
|
+
let snippet = nodeData.snippet;
|
|
37
44
|
|
|
38
|
-
if (
|
|
45
|
+
if ( snippet === undefined ) {
|
|
39
46
|
|
|
40
47
|
const uvSnippet = this.uv.build( builder, 'vec2' );
|
|
41
48
|
const bias = this.bias;
|
|
@@ -48,17 +55,13 @@ class TextureNode extends InputNode {
|
|
|
48
55
|
|
|
49
56
|
}
|
|
50
57
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
colorSpace = new ColorSpaceNode();
|
|
54
|
-
colorSpace.input = new ExpressionNode( textureCallSnippet, 'vec4' );
|
|
55
|
-
colorSpace.fromDecoding( builder.getTextureEncodingFromMap( this.value ) );
|
|
58
|
+
snippet = builder.getTexture( textureProperty, uvSnippet, biasSnippet );
|
|
56
59
|
|
|
57
|
-
nodeData.
|
|
60
|
+
nodeData.snippet = snippet;
|
|
58
61
|
|
|
59
62
|
}
|
|
60
63
|
|
|
61
|
-
return
|
|
64
|
+
return builder.format( snippet, 'vec4', output );
|
|
62
65
|
|
|
63
66
|
}
|
|
64
67
|
|
|
@@ -1,23 +1,24 @@
|
|
|
1
1
|
import ContextNode from '../core/ContextNode.js';
|
|
2
|
-
import
|
|
2
|
+
import VarNode from '../core/VarNode.js';
|
|
3
|
+
import Vector3Node from '../inputs/Vector3Node.js';
|
|
4
|
+
import OperatorNode from '../math/OperatorNode.js';
|
|
3
5
|
import { PhysicalLightingModel } from '../functions/BSDFs.js';
|
|
4
6
|
|
|
5
|
-
const reflectedLightStruct = new StructNode( {
|
|
6
|
-
directDiffuse: 'vec3',
|
|
7
|
-
directSpecular: 'vec3'
|
|
8
|
-
}, 'ReflectedLight' );
|
|
9
|
-
|
|
10
7
|
class LightContextNode extends ContextNode {
|
|
11
8
|
|
|
12
9
|
constructor( node ) {
|
|
13
10
|
|
|
14
|
-
super( node
|
|
11
|
+
super( node );
|
|
15
12
|
|
|
16
13
|
}
|
|
17
14
|
|
|
18
|
-
|
|
15
|
+
getNodeType( /*builder*/ ) {
|
|
19
16
|
|
|
20
|
-
|
|
17
|
+
return 'vec3';
|
|
18
|
+
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
generate( builder ) {
|
|
21
22
|
|
|
22
23
|
const material = builder.material;
|
|
23
24
|
|
|
@@ -29,22 +30,27 @@ class LightContextNode extends ContextNode {
|
|
|
29
30
|
|
|
30
31
|
}
|
|
31
32
|
|
|
32
|
-
const
|
|
33
|
-
const
|
|
33
|
+
const directDiffuse = new VarNode( new Vector3Node(), 'DirectDiffuse', 'vec3' );
|
|
34
|
+
const directSpecular = new VarNode( new Vector3Node(), 'DirectSpecular', 'vec3' );
|
|
34
35
|
|
|
35
|
-
this.
|
|
36
|
+
this.context.directDiffuse = directDiffuse;
|
|
37
|
+
this.context.directSpecular = directSpecular;
|
|
36
38
|
|
|
37
39
|
if ( lightingModel !== null ) {
|
|
38
40
|
|
|
39
|
-
this.
|
|
41
|
+
this.context.lightingModel = lightingModel;
|
|
40
42
|
|
|
41
43
|
}
|
|
42
44
|
|
|
43
45
|
// add code
|
|
44
46
|
|
|
47
|
+
const type = this.getNodeType( builder );
|
|
48
|
+
|
|
45
49
|
super.generate( builder, type );
|
|
46
50
|
|
|
47
|
-
|
|
51
|
+
const totalLight = new OperatorNode( '+', directDiffuse, directSpecular );
|
|
52
|
+
|
|
53
|
+
return totalLight.build( builder, type );
|
|
48
54
|
|
|
49
55
|
}
|
|
50
56
|
|
|
@@ -20,61 +20,57 @@ class LightNode extends Node {
|
|
|
20
20
|
|
|
21
21
|
this.light = light;
|
|
22
22
|
|
|
23
|
-
this.
|
|
23
|
+
this.colorNode = new ColorNode( new Color() );
|
|
24
24
|
|
|
25
|
-
this.
|
|
26
|
-
this.
|
|
27
|
-
|
|
28
|
-
this.lightPositionView = new Object3DNode( Object3DNode.VIEW_POSITION );
|
|
29
|
-
this.positionView = new PositionNode( PositionNode.VIEW );
|
|
30
|
-
|
|
31
|
-
this.lVector = new OperatorNode( '-', this.lightPositionView, this.positionView );
|
|
32
|
-
|
|
33
|
-
this.lightDirection = new MathNode( MathNode.NORMALIZE, this.lVector );
|
|
34
|
-
|
|
35
|
-
this.lightDistance = new MathNode( MathNode.LENGTH, this.lVector );
|
|
36
|
-
|
|
37
|
-
this.lightAttenuation = getDistanceAttenuation.call( {
|
|
38
|
-
lightDistance: this.lightDistance,
|
|
39
|
-
cutoffDistance: this.lightCutoffDistance,
|
|
40
|
-
decayExponent: this.lightDecayExponent
|
|
41
|
-
} );
|
|
42
|
-
|
|
43
|
-
this.lightColor = new OperatorNode( '*', this.color, this.lightAttenuation );
|
|
25
|
+
this.lightCutoffDistanceNode = new FloatNode( 0 );
|
|
26
|
+
this.lightDecayExponentNode = new FloatNode( 0 );
|
|
44
27
|
|
|
45
28
|
}
|
|
46
29
|
|
|
47
30
|
update( /* frame */ ) {
|
|
48
31
|
|
|
49
|
-
this.
|
|
50
|
-
this.
|
|
51
|
-
this.
|
|
32
|
+
this.colorNode.value.copy( this.light.color ).multiplyScalar( this.light.intensity );
|
|
33
|
+
this.lightCutoffDistanceNode.value = this.light.distance;
|
|
34
|
+
this.lightDecayExponentNode.value = this.light.decay;
|
|
52
35
|
|
|
53
36
|
}
|
|
54
37
|
|
|
55
38
|
generate( builder ) {
|
|
56
39
|
|
|
57
|
-
const
|
|
40
|
+
const lightPositionView = new Object3DNode( Object3DNode.VIEW_POSITION );
|
|
41
|
+
const positionView = new PositionNode( PositionNode.VIEW );
|
|
58
42
|
|
|
59
|
-
|
|
43
|
+
const lVector = new OperatorNode( '-', lightPositionView, positionView );
|
|
60
44
|
|
|
61
|
-
const
|
|
45
|
+
const lightDirection = new MathNode( MathNode.NORMALIZE, lVector );
|
|
62
46
|
|
|
63
|
-
|
|
47
|
+
const lightDistance = new MathNode( MathNode.LENGTH, lVector );
|
|
64
48
|
|
|
65
|
-
|
|
49
|
+
const lightAttenuation = getDistanceAttenuation( {
|
|
50
|
+
lightDistance,
|
|
51
|
+
cutoffDistance: this.lightCutoffDistanceNode,
|
|
52
|
+
decayExponent: this.lightDecayExponentNode
|
|
53
|
+
} );
|
|
66
54
|
|
|
67
|
-
|
|
68
|
-
lightDirection: this.lightDirection,
|
|
69
|
-
lightColor: this.lightColor,
|
|
70
|
-
reflectedLight: reflectedLightStructNode
|
|
71
|
-
} );
|
|
55
|
+
const lightColor = new OperatorNode( '*', this.colorNode, lightAttenuation );
|
|
72
56
|
|
|
73
|
-
|
|
57
|
+
lightPositionView.object3d = this.light;
|
|
74
58
|
|
|
75
|
-
|
|
59
|
+
const lightingModelFunction = builder.context.lightingModel;
|
|
60
|
+
|
|
61
|
+
if ( lightingModelFunction !== undefined ) {
|
|
76
62
|
|
|
77
|
-
|
|
63
|
+
const directDiffuse = builder.context.directDiffuse;
|
|
64
|
+
const directSpecular = builder.context.directSpecular;
|
|
65
|
+
|
|
66
|
+
lightingModelFunction( {
|
|
67
|
+
lightDirection,
|
|
68
|
+
lightColor,
|
|
69
|
+
directDiffuse,
|
|
70
|
+
directSpecular
|
|
71
|
+
}, builder );
|
|
72
|
+
|
|
73
|
+
}
|
|
78
74
|
|
|
79
75
|
}
|
|
80
76
|
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import Node from '../core/Node.js';
|
|
2
|
+
import PropertyNode from '../core/PropertyNode.js';
|
|
3
|
+
import ContextNode from '../core/ContextNode.js';
|
|
4
|
+
|
|
5
|
+
class CondNode extends Node {
|
|
6
|
+
|
|
7
|
+
constructor( node, ifNode, elseNode ) {
|
|
8
|
+
|
|
9
|
+
super();
|
|
10
|
+
|
|
11
|
+
this.node = node;
|
|
12
|
+
|
|
13
|
+
this.ifNode = ifNode;
|
|
14
|
+
this.elseNode = elseNode;
|
|
15
|
+
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
getNodeType( builder ) {
|
|
19
|
+
|
|
20
|
+
const ifType = this.ifNode.getNodeType( builder );
|
|
21
|
+
const elseType = this.elseNode.getNodeType( builder );
|
|
22
|
+
|
|
23
|
+
if ( builder.getTypeLength( elseType ) > builder.getTypeLength( ifType ) ) {
|
|
24
|
+
|
|
25
|
+
return elseType;
|
|
26
|
+
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
return ifType;
|
|
30
|
+
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
generate( builder ) {
|
|
34
|
+
|
|
35
|
+
const type = this.getNodeType( builder );
|
|
36
|
+
|
|
37
|
+
const context = { temp: false };
|
|
38
|
+
const nodeProperty = new PropertyNode( null, type ).build( builder );
|
|
39
|
+
|
|
40
|
+
const nodeSnippet = new ContextNode( this.node/*, context*/ ).build( builder, 'bool' ),
|
|
41
|
+
ifSnippet = new ContextNode( this.ifNode, context ).build( builder, type ),
|
|
42
|
+
elseSnippet = new ContextNode( this.elseNode, context ).build( builder, type );
|
|
43
|
+
|
|
44
|
+
builder.addFlowCode( `if ( ${nodeSnippet} ) {
|
|
45
|
+
|
|
46
|
+
\t\t${nodeProperty} = ${ifSnippet};
|
|
47
|
+
|
|
48
|
+
\t} else {
|
|
49
|
+
|
|
50
|
+
\t\t${nodeProperty} = ${elseSnippet};
|
|
51
|
+
|
|
52
|
+
\t}` );
|
|
53
|
+
|
|
54
|
+
return nodeProperty;
|
|
55
|
+
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export default CondNode;
|