super-three 0.171.0 → 0.172.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/build/three.cjs +157 -49
- package/build/three.core.js +104 -42
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +53 -8
- package/build/three.module.min.js +1 -1
- package/build/three.tsl.js +10 -5
- package/build/three.tsl.min.js +1 -1
- package/build/three.webgpu.js +21191 -1008
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +21189 -1008
- package/build/three.webgpu.nodes.min.js +1 -1
- package/examples/jsm/Addons.js +0 -5
- package/examples/jsm/animation/CCDIKSolver.js +3 -2
- package/examples/jsm/controls/ArcballControls.js +28 -19
- package/examples/jsm/controls/OrbitControls.js +5 -4
- package/examples/jsm/csm/CSMShadowNode.js +16 -11
- package/examples/jsm/curves/NURBSCurve.js +1 -1
- package/examples/jsm/curves/NURBSUtils.js +3 -0
- package/examples/jsm/effects/OutlineEffect.js +1 -1
- package/examples/jsm/exporters/GLTFExporter.js +11 -7
- package/examples/jsm/exporters/KTX2Exporter.js +1 -1
- package/examples/jsm/exporters/PLYExporter.js +2 -2
- package/examples/jsm/helpers/TextureHelperGPU.js +15 -5
- package/examples/jsm/helpers/VertexNormalsHelper.js +2 -0
- package/examples/jsm/lights/LightProbeGenerator.js +3 -3
- package/examples/jsm/lines/webgpu/LineSegments2.js +15 -6
- package/examples/jsm/loaders/3MFLoader.js +6 -3
- package/examples/jsm/loaders/BVHLoader.js +1 -1
- package/examples/jsm/loaders/ColladaLoader.js +5 -5
- package/examples/jsm/loaders/DDSLoader.js +42 -0
- package/examples/jsm/loaders/GCodeLoader.js +1 -1
- package/examples/jsm/loaders/GLTFLoader.js +22 -2
- package/examples/jsm/loaders/KTX2Loader.js +6 -1
- package/examples/jsm/loaders/KTXLoader.js +4 -4
- package/examples/jsm/loaders/LDrawLoader.js +1 -1
- package/examples/jsm/loaders/LottieLoader.js +1 -1
- package/examples/jsm/loaders/MTLLoader.js +1 -0
- package/examples/jsm/loaders/NRRDLoader.js +1 -1
- package/examples/jsm/loaders/PLYLoader.js +7 -7
- package/examples/jsm/loaders/PVRLoader.js +1 -1
- package/examples/jsm/loaders/SVGLoader.js +2 -2
- package/examples/jsm/loaders/TDSLoader.js +1 -1
- package/examples/jsm/loaders/VRMLLoader.js +7 -7
- package/examples/jsm/loaders/lwo/IFFParser.js +4 -4
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +1 -1
- package/examples/jsm/math/ConvexHull.js +1 -1
- package/examples/jsm/math/OBB.js +17 -0
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +10 -10
- package/examples/jsm/misc/Volume.js +20 -12
- package/examples/jsm/misc/VolumeSlice.js +2 -2
- package/examples/jsm/modifiers/CurveModifier.js +10 -8
- package/examples/jsm/modifiers/CurveModifierGPU.js +9 -7
- package/examples/jsm/modifiers/SimplifyModifier.js +2 -2
- package/examples/jsm/objects/GroundedSkybox.js +4 -4
- package/examples/jsm/objects/Sky.js +2 -2
- package/examples/jsm/objects/SkyMesh.js +3 -3
- package/examples/jsm/objects/Water2.js +1 -1
- package/examples/jsm/objects/Water2Mesh.js +2 -2
- package/examples/jsm/objects/WaterMesh.js +4 -4
- package/examples/jsm/postprocessing/BloomPass.js +2 -2
- package/examples/jsm/postprocessing/EffectComposer.js +1 -2
- package/examples/jsm/postprocessing/OutlinePass.js +4 -4
- package/examples/jsm/postprocessing/SAOPass.js +1 -2
- package/examples/jsm/postprocessing/SMAAPass.js +1 -3
- package/examples/jsm/postprocessing/SSAOPass.js +2 -4
- package/examples/jsm/postprocessing/SSRPass.js +2 -4
- package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -2
- package/examples/jsm/renderers/SVGRenderer.js +6 -4
- package/examples/jsm/shaders/BokehShader2.js +1 -1
- package/examples/jsm/shaders/GodRaysShader.js +3 -3
- package/examples/jsm/shaders/SobelOperatorShader.js +1 -1
- package/examples/jsm/tsl/display/AfterImageNode.js +93 -4
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +46 -2
- package/examples/jsm/tsl/display/AnamorphicNode.js +118 -5
- package/examples/jsm/tsl/display/BleachBypass.js +10 -0
- package/examples/jsm/tsl/display/BloomNode.js +233 -26
- package/examples/jsm/tsl/display/DenoiseNode.js +141 -25
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +80 -1
- package/examples/jsm/tsl/display/DotScreenNode.js +50 -5
- package/examples/jsm/tsl/display/FXAANode.js +52 -3
- package/examples/jsm/tsl/display/FilmNode.js +47 -1
- package/examples/jsm/tsl/display/GTAONode.js +210 -14
- package/examples/jsm/tsl/display/GaussianBlurNode.js +152 -8
- package/examples/jsm/tsl/display/LensflareNode.js +131 -13
- package/examples/jsm/tsl/display/Lut3DNode.js +55 -1
- package/examples/jsm/tsl/display/MotionBlur.js +12 -2
- package/examples/jsm/tsl/display/OutlineNode.js +343 -26
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +36 -2
- package/examples/jsm/tsl/display/PixelationPassNode.js +142 -9
- package/examples/jsm/tsl/display/RGBShiftNode.js +49 -2
- package/examples/jsm/tsl/display/SMAANode.js +187 -46
- package/examples/jsm/tsl/display/SSAAPassNode.js +110 -25
- package/examples/jsm/tsl/display/SSRNode.js +194 -21
- package/examples/jsm/tsl/display/Sepia.js +9 -0
- package/examples/jsm/tsl/display/SobelOperatorNode.js +54 -4
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +79 -3
- package/examples/jsm/tsl/display/StereoPassNode.js +41 -3
- package/examples/jsm/tsl/display/TRAAPassNode.js +116 -21
- package/examples/jsm/tsl/display/TransitionNode.js +71 -6
- package/examples/jsm/tsl/display/hashBlur.js +14 -3
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +40 -34
- package/examples/jsm/utils/BufferGeometryUtils.js +1 -1
- package/examples/jsm/utils/CameraUtils.js +4 -1
- package/examples/jsm/utils/GeometryUtils.js +22 -19
- package/examples/jsm/utils/SceneUtils.js +2 -2
- package/examples/jsm/webxr/XRControllerModelFactory.js +6 -1
- package/examples/jsm/webxr/XREstimatedLight.js +1 -1
- package/package.json +8 -3
- package/src/Three.Core.js +2 -0
- package/src/Three.Legacy.js +0 -21
- package/src/Three.TSL.js +9 -4
- package/src/Three.WebGPU.Nodes.js +2 -2
- package/src/Three.WebGPU.js +2 -2
- package/src/animation/PropertyBinding.js +2 -2
- package/src/cameras/PerspectiveCamera.js +18 -2
- package/src/constants.js +1 -1
- package/src/core/RenderTarget.js +18 -0
- package/src/core/RenderTarget3D.js +22 -0
- package/src/core/RenderTargetArray.js +22 -0
- package/src/extras/Earcut.js +1 -1
- package/src/extras/PMREMGenerator.js +20 -0
- package/src/extras/TextureUtils.js +6 -0
- package/src/helpers/CameraHelper.js +16 -13
- package/src/loaders/nodes/NodeLoader.js +59 -0
- package/src/loaders/nodes/NodeMaterialLoader.js +45 -0
- package/src/loaders/nodes/NodeObjectLoader.js +61 -0
- package/src/materials/nodes/InstancedPointsNodeMaterial.js +72 -19
- package/src/materials/nodes/Line2NodeMaterial.js +128 -34
- package/src/materials/nodes/LineBasicNodeMaterial.js +17 -2
- package/src/materials/nodes/LineDashedNodeMaterial.js +78 -5
- package/src/materials/nodes/MeshBasicNodeMaterial.js +56 -0
- package/src/materials/nodes/MeshLambertNodeMaterial.js +35 -0
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +22 -2
- package/src/materials/nodes/MeshNormalNodeMaterial.js +21 -2
- package/src/materials/nodes/MeshPhongNodeMaterial.js +64 -1
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +269 -0
- package/src/materials/nodes/MeshSSSNodeMaterial.js +97 -6
- package/src/materials/nodes/MeshStandardNodeMaterial.js +78 -0
- package/src/materials/nodes/MeshToonNodeMaterial.js +28 -0
- package/src/materials/nodes/NodeMaterial.js +474 -21
- package/src/materials/nodes/PointsNodeMaterial.js +22 -13
- package/src/materials/nodes/ShadowNodeMaterial.js +29 -0
- package/src/materials/nodes/SpriteNodeMaterial.js +77 -19
- package/src/materials/nodes/VolumeNodeMaterial.js +80 -4
- package/src/materials/nodes/manager/NodeMaterialObserver.js +87 -0
- package/src/nodes/Nodes.js +1 -6
- package/src/nodes/TSL.js +2 -3
- package/src/nodes/accessors/AccessorsUtils.js +27 -0
- package/src/nodes/accessors/Arrays.js +24 -5
- package/src/nodes/accessors/BatchNode.js +39 -3
- package/src/nodes/accessors/Bitangent.js +37 -0
- package/src/nodes/accessors/BufferAttributeNode.js +178 -5
- package/src/nodes/accessors/BufferNode.js +63 -0
- package/src/nodes/accessors/BuiltinNode.js +38 -0
- package/src/nodes/accessors/Camera.js +49 -0
- package/src/nodes/accessors/ClippingNode.js +71 -2
- package/src/nodes/accessors/CubeTextureNode.js +64 -0
- package/src/nodes/accessors/InstanceNode.js +85 -2
- package/src/nodes/accessors/InstancedMeshNode.js +28 -3
- package/src/nodes/accessors/InstancedPointsMaterialNode.js +13 -0
- package/src/nodes/accessors/Lights.js +50 -1
- package/src/nodes/accessors/MaterialNode.js +302 -8
- package/src/nodes/accessors/MaterialProperties.js +7 -0
- package/src/nodes/accessors/MaterialReferenceNode.js +53 -13
- package/src/nodes/accessors/ModelNode.js +100 -5
- package/src/nodes/accessors/ModelViewProjectionNode.js +10 -38
- package/src/nodes/accessors/MorphNode.js +48 -4
- package/src/nodes/accessors/Normal.js +59 -3
- package/src/nodes/accessors/Object3DNode.js +102 -1
- package/src/nodes/accessors/PointUVNode.js +26 -0
- package/src/nodes/accessors/Position.js +53 -4
- package/src/nodes/accessors/ReferenceBaseNode.js +188 -0
- package/src/nodes/accessors/ReferenceNode.js +202 -2
- package/src/nodes/accessors/ReflectVector.js +24 -0
- package/src/nodes/accessors/RendererReferenceNode.js +46 -1
- package/src/nodes/accessors/SceneNode.js +54 -0
- package/src/nodes/accessors/SkinningNode.js +127 -1
- package/src/nodes/accessors/StorageBufferNode.js +168 -4
- package/src/nodes/accessors/StorageTextureNode.js +118 -0
- package/src/nodes/accessors/Tangent.js +36 -0
- package/src/nodes/accessors/Texture3DNode.js +89 -5
- package/src/nodes/accessors/TextureBicubic.js +12 -2
- package/src/nodes/accessors/TextureNode.js +309 -10
- package/src/nodes/accessors/TextureSizeNode.js +42 -0
- package/src/nodes/accessors/UV.js +10 -1
- package/src/nodes/accessors/UniformArrayNode.js +223 -23
- package/src/nodes/accessors/UserDataNode.js +46 -0
- package/src/nodes/accessors/VelocityNode.js +82 -0
- package/src/nodes/accessors/VertexColorNode.js +39 -2
- package/src/nodes/code/CodeNode.js +95 -1
- package/src/nodes/code/ExpressionNode.js +28 -0
- package/src/nodes/code/FunctionCallNode.js +37 -0
- package/src/nodes/code/FunctionNode.js +45 -0
- package/src/nodes/code/ScriptableNode.js +223 -1
- package/src/nodes/code/ScriptableValueNode.js +85 -1
- package/src/nodes/core/AssignNode.js +48 -2
- package/src/nodes/core/AttributeNode.js +43 -0
- package/src/nodes/core/BypassNode.js +47 -2
- package/src/nodes/core/CacheNode.js +53 -2
- package/src/nodes/core/ConstNode.js +24 -0
- package/src/nodes/core/ContextNode.js +65 -0
- package/src/nodes/core/IndexNode.js +68 -7
- package/src/nodes/core/InputNode.js +48 -0
- package/src/nodes/core/LightingModel.js +60 -0
- package/src/nodes/core/MRTNode.js +66 -0
- package/src/nodes/core/Node.js +337 -12
- package/src/nodes/core/NodeAttribute.js +38 -0
- package/src/nodes/core/NodeBuilder.js +945 -15
- package/src/nodes/core/NodeCache.js +41 -2
- package/src/nodes/core/NodeCode.js +31 -0
- package/src/nodes/core/NodeFrame.js +123 -2
- package/src/nodes/core/NodeFunction.js +46 -0
- package/src/nodes/core/NodeFunctionInput.js +44 -0
- package/src/nodes/core/NodeParser.js +11 -0
- package/src/nodes/core/NodeUniform.js +52 -0
- package/src/nodes/core/NodeUtils.js +141 -0
- package/src/nodes/core/NodeVar.js +30 -0
- package/src/nodes/core/NodeVarying.js +28 -0
- package/src/nodes/core/OutputStructNode.js +33 -2
- package/src/nodes/core/ParameterNode.js +28 -0
- package/src/nodes/core/PropertyNode.js +232 -0
- package/src/nodes/core/StackNode.js +78 -0
- package/src/nodes/core/StructTypeNode.js +39 -1
- package/src/nodes/core/TempNode.js +30 -4
- package/src/nodes/core/UniformGroupNode.js +82 -7
- package/src/nodes/core/UniformNode.js +66 -0
- package/src/nodes/core/VarNode.js +52 -0
- package/src/nodes/core/VaryingNode.js +83 -2
- package/src/nodes/core/constants.js +36 -0
- package/src/nodes/display/BumpMapNode.js +37 -0
- package/src/nodes/display/ColorAdjustment.js +53 -11
- package/src/nodes/display/ColorSpaceFunctions.js +16 -0
- package/src/nodes/display/ColorSpaceNode.js +82 -0
- package/src/nodes/display/FrontFacingNode.js +29 -0
- package/src/nodes/display/NormalMapNode.js +43 -0
- package/src/nodes/display/PassNode.js +298 -7
- package/src/nodes/display/PosterizeNode.js +33 -0
- package/src/nodes/display/RenderOutputNode.js +66 -1
- package/src/nodes/display/ScreenNode.js +87 -0
- package/src/nodes/display/ToneMappingFunctions.js +58 -10
- package/src/nodes/display/ToneMappingNode.js +55 -2
- package/src/nodes/display/ToonOutlinePassNode.js +73 -0
- package/src/nodes/display/ViewportDepthNode.js +122 -8
- package/src/nodes/display/ViewportDepthTextureNode.js +23 -0
- package/src/nodes/display/ViewportSharedTextureNode.js +23 -0
- package/src/nodes/display/ViewportTextureNode.js +57 -0
- package/src/nodes/fog/Fog.js +93 -0
- package/src/nodes/functions/BasicLightingModel.js +24 -0
- package/src/nodes/functions/PhongLightingModel.js +34 -2
- package/src/nodes/functions/PhysicalLightingModel.js +167 -8
- package/src/nodes/functions/ShadowMaskModel.js +23 -0
- package/src/nodes/functions/ToonLightingModel.js +20 -0
- package/src/nodes/functions/material/getAlphaHashThreshold.js +1 -3
- package/src/nodes/functions/material/getParallaxCorrectNormal.js +16 -1
- package/src/nodes/geometry/RangeNode.js +54 -2
- package/src/nodes/gpgpu/AtomicFunctionNode.js +157 -1
- package/src/nodes/gpgpu/BarrierNode.js +47 -0
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +126 -0
- package/src/nodes/gpgpu/ComputeNode.js +106 -2
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +115 -6
- package/src/nodes/lighting/AONode.js +18 -0
- package/src/nodes/lighting/AmbientLightNode.js +10 -0
- package/src/nodes/lighting/AnalyticLightNode.js +97 -2
- package/src/nodes/lighting/BasicEnvironmentNode.js +19 -0
- package/src/nodes/lighting/BasicLightMapNode.js +17 -0
- package/src/nodes/lighting/DirectionalLightNode.js +10 -0
- package/src/nodes/lighting/EnvironmentNode.js +18 -0
- package/src/nodes/lighting/HemisphereLightNode.js +31 -0
- package/src/nodes/lighting/IESSpotLightNode.js +11 -0
- package/src/nodes/lighting/IrradianceNode.js +17 -0
- package/src/nodes/lighting/LightProbeNode.js +20 -0
- package/src/nodes/lighting/LightUtils.js +12 -0
- package/src/nodes/lighting/LightingContextNode.js +48 -0
- package/src/nodes/lighting/LightingNode.js +15 -6
- package/src/nodes/lighting/LightsNode.js +132 -1
- package/src/nodes/lighting/PointLightNode.js +32 -1
- package/src/nodes/lighting/PointShadowNode.js +54 -1
- package/src/nodes/lighting/RectAreaLightNode.js +44 -6
- package/src/nodes/lighting/ShadowBaseNode.js +93 -0
- package/src/nodes/lighting/ShadowNode.js +240 -34
- package/src/nodes/lighting/SpotLightNode.js +43 -0
- package/src/nodes/math/ConditionalNode.js +70 -3
- package/src/nodes/math/Hash.js +9 -0
- package/src/nodes/math/MathNode.js +614 -11
- package/src/nodes/math/MathUtils.js +45 -1
- package/src/nodes/math/OperatorNode.js +233 -0
- package/src/nodes/math/TriNoise3D.js +18 -7
- package/src/nodes/parsers/GLSLNodeFunction.js +16 -0
- package/src/nodes/parsers/GLSLNodeParser.js +11 -0
- package/src/nodes/pmrem/PMREMNode.js +133 -0
- package/src/nodes/pmrem/PMREMUtils.js +1 -1
- package/src/nodes/procedural/Checker.js +9 -0
- package/src/nodes/tsl/TSLBase.js +2 -2
- package/src/nodes/utils/ArrayElementNode.js +38 -2
- package/src/nodes/utils/ConvertNode.js +31 -0
- package/src/nodes/utils/CubeMapNode.js +78 -0
- package/src/nodes/utils/Discard.js +16 -0
- package/src/nodes/utils/EquirectUVNode.js +31 -1
- package/src/nodes/utils/FlipNode.js +38 -0
- package/src/nodes/utils/FunctionOverloadingNode.js +53 -1
- package/src/nodes/utils/JoinNode.js +25 -0
- package/src/nodes/utils/LoopNode.js +74 -1
- package/src/nodes/utils/MatcapUVNode.js +17 -0
- package/src/nodes/utils/MaxMipLevelNode.js +49 -0
- package/src/nodes/utils/Oscillators.js +33 -0
- package/src/nodes/utils/Packing.js +17 -0
- package/src/nodes/utils/PostProcessingUtils.js +28 -23
- package/src/nodes/utils/RTTNode.js +123 -2
- package/src/nodes/utils/ReflectorNode.js +174 -4
- package/src/nodes/utils/RemapNode.js +79 -0
- package/src/nodes/utils/RotateNode.js +41 -0
- package/src/nodes/utils/SetNode.js +44 -1
- package/src/nodes/utils/SplitNode.js +55 -3
- package/src/nodes/utils/SpriteSheetUVNode.js +46 -0
- package/src/nodes/utils/SpriteUtils.js +17 -0
- package/src/nodes/utils/StorageArrayElementNode.js +40 -0
- package/src/nodes/utils/Timer.js +19 -0
- package/src/nodes/utils/TriplanarTexturesNode.js +84 -0
- package/src/nodes/utils/UVUtils.js +20 -0
- package/src/nodes/utils/ViewportUtils.js +13 -0
- package/src/objects/BatchedMesh.js +1 -2
- package/src/objects/ClippingGroup.js +49 -0
- package/src/renderers/WebGLRenderer.js +23 -4
- package/src/renderers/common/Animation.js +63 -0
- package/src/renderers/common/Attributes.js +36 -0
- package/src/renderers/common/Backend.js +467 -52
- package/src/renderers/common/Background.js +34 -1
- package/src/renderers/common/BindGroup.js +43 -0
- package/src/renderers/common/Binding.js +35 -0
- package/src/renderers/common/Bindings.js +93 -1
- package/src/renderers/common/Buffer.js +49 -0
- package/src/renderers/common/BufferUtils.js +27 -0
- package/src/renderers/common/BundleGroup.js +57 -0
- package/src/renderers/common/ChainMap.js +38 -1
- package/src/renderers/common/ClippingContext.js +107 -14
- package/src/renderers/common/Color4.js +36 -0
- package/src/renderers/common/ComputePipeline.js +24 -0
- package/src/renderers/common/CubeRenderTarget.js +13 -0
- package/src/renderers/common/DataMap.js +37 -1
- package/src/renderers/common/Geometries.js +98 -0
- package/src/renderers/common/IndirectStorageBufferAttribute.js +25 -2
- package/src/renderers/common/Info.js +87 -0
- package/src/renderers/common/Lighting.js +26 -0
- package/src/renderers/common/Pipeline.js +22 -0
- package/src/renderers/common/Pipelines.js +148 -5
- package/src/renderers/common/PostProcessing.js +75 -3
- package/src/renderers/common/ProgrammableStage.js +60 -2
- package/src/renderers/common/QuadMesh.js +54 -5
- package/src/renderers/common/RenderBundle.js +14 -8
- package/src/renderers/common/RenderBundles.js +33 -10
- package/src/renderers/common/RenderContext.js +169 -4
- package/src/renderers/common/RenderContexts.js +42 -2
- package/src/renderers/common/RenderList.js +178 -0
- package/src/renderers/common/RenderLists.js +31 -0
- package/src/renderers/common/RenderObject.js +328 -4
- package/src/renderers/common/RenderObjects.js +101 -7
- package/src/renderers/common/RenderPipeline.js +24 -0
- package/src/renderers/common/Renderer.js +1096 -31
- package/src/renderers/common/RendererUtils.js +193 -0
- package/src/renderers/common/SampledTexture.js +121 -0
- package/src/renderers/common/Sampler.js +30 -0
- package/src/renderers/common/StorageBuffer.js +24 -0
- package/src/renderers/common/StorageBufferAttribute.js +31 -2
- package/src/renderers/common/StorageInstancedBufferAttribute.js +31 -2
- package/src/renderers/common/StorageTexture.js +38 -0
- package/src/renderers/common/Textures.js +83 -0
- package/src/renderers/common/Uniform.js +188 -2
- package/src/renderers/common/UniformBuffer.js +19 -0
- package/src/renderers/common/UniformsGroup.js +139 -2
- package/src/renderers/common/extras/PMREMGenerator.js +24 -3
- package/src/renderers/common/nodes/NodeBuilderState.js +95 -1
- package/src/renderers/common/nodes/NodeLibrary.js +89 -0
- package/src/renderers/common/nodes/NodeSampledTexture.js +91 -2
- package/src/renderers/common/nodes/NodeSampler.js +28 -0
- package/src/renderers/common/nodes/NodeStorageBuffer.js +35 -0
- package/src/renderers/common/nodes/NodeUniform.js +189 -0
- package/src/renderers/common/nodes/NodeUniformBuffer.js +29 -0
- package/src/renderers/common/nodes/NodeUniformsGroup.js +31 -18
- package/src/renderers/common/nodes/Nodes.js +327 -60
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +7 -7
- package/src/renderers/webgl-fallback/WebGLBackend.js +547 -29
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +0 -1
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +1 -1
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +1 -1
- package/src/renderers/webgpu/WebGPUBackend.js +480 -49
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +34 -0
- package/src/renderers/webgpu/WebGPURenderer.js +35 -0
- package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +20 -8
- package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +21 -8
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +59 -11
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +17 -0
- package/src/renderers/webgpu/nodes/WGSLNodeParser.js +11 -0
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +10 -8
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +9 -1
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +5 -9
- package/src/renderers/webgpu/utils/WebGPUUtils.js +30 -0
- package/src/renderers/webxr/WebXRDepthSensing.js +1 -1
- package/src/renderers/webxr/WebXRManager.js +7 -1
- package/src/textures/Data3DTexture.js +2 -2
- package/src/textures/Texture.js +4 -0
- package/examples/jsm/animation/MMDAnimationHelper.js +0 -1209
- package/examples/jsm/animation/MMDPhysics.js +0 -1408
- package/examples/jsm/exporters/MMDExporter.js +0 -223
- package/examples/jsm/libs/mmdparser.module.js +0 -11530
- package/examples/jsm/loaders/MMDLoader.js +0 -2298
- package/examples/jsm/shaders/MMDToonShader.js +0 -134
- package/src/nodes/core/UniformGroup.js +0 -13
- package/src/nodes/fog/FogExp2Node.js +0 -35
- package/src/nodes/fog/FogNode.js +0 -50
- package/src/nodes/fog/FogRangeNode.js +0 -36
- package/src/renderers/common/PostProcessingUtils.js +0 -86
|
@@ -2,6 +2,18 @@ import UniformNode from '../core/UniformNode.js';
|
|
|
2
2
|
import { NodeUpdateType } from '../core/constants.js';
|
|
3
3
|
import { nodeProxy } from '../tsl/TSLBase.js';
|
|
4
4
|
|
|
5
|
+
/** @module MatcapUVNode **/
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* A special type of uniform node that computes the
|
|
9
|
+
* maximum mipmap level for a given texture node.
|
|
10
|
+
*
|
|
11
|
+
* ```js
|
|
12
|
+
* const level = maxMipLevel( textureNode );
|
|
13
|
+
* ```
|
|
14
|
+
*
|
|
15
|
+
* @augments module:UniformNode~UniformNode
|
|
16
|
+
*/
|
|
5
17
|
class MaxMipLevelNode extends UniformNode {
|
|
6
18
|
|
|
7
19
|
static get type() {
|
|
@@ -10,22 +22,52 @@ class MaxMipLevelNode extends UniformNode {
|
|
|
10
22
|
|
|
11
23
|
}
|
|
12
24
|
|
|
25
|
+
/**
|
|
26
|
+
* Constructs a new max mip level node.
|
|
27
|
+
*
|
|
28
|
+
* @param {TextureNode} textureNode - The texture node to compute the max mip level for.
|
|
29
|
+
*/
|
|
13
30
|
constructor( textureNode ) {
|
|
14
31
|
|
|
15
32
|
super( 0 );
|
|
16
33
|
|
|
34
|
+
/**
|
|
35
|
+
* The texture node to compute the max mip level for.
|
|
36
|
+
*
|
|
37
|
+
* @private
|
|
38
|
+
* @type {TextureNode}
|
|
39
|
+
*/
|
|
17
40
|
this._textureNode = textureNode;
|
|
18
41
|
|
|
42
|
+
/**
|
|
43
|
+
* The `updateType` is set to `NodeUpdateType.FRAME` since the node updates
|
|
44
|
+
* the texture once per frame in its {@link MaxMipLevelNode#update} method.
|
|
45
|
+
*
|
|
46
|
+
* @type {String}
|
|
47
|
+
* @default 'frame'
|
|
48
|
+
*/
|
|
19
49
|
this.updateType = NodeUpdateType.FRAME;
|
|
20
50
|
|
|
21
51
|
}
|
|
22
52
|
|
|
53
|
+
/**
|
|
54
|
+
* The texture node to compute the max mip level for.
|
|
55
|
+
*
|
|
56
|
+
* @readonly
|
|
57
|
+
* @type {TextureNode}
|
|
58
|
+
*/
|
|
23
59
|
get textureNode() {
|
|
24
60
|
|
|
25
61
|
return this._textureNode;
|
|
26
62
|
|
|
27
63
|
}
|
|
28
64
|
|
|
65
|
+
/**
|
|
66
|
+
* The texture.
|
|
67
|
+
*
|
|
68
|
+
* @readonly
|
|
69
|
+
* @type {Texture}
|
|
70
|
+
*/
|
|
29
71
|
get texture() {
|
|
30
72
|
|
|
31
73
|
return this._textureNode.value;
|
|
@@ -52,4 +94,11 @@ class MaxMipLevelNode extends UniformNode {
|
|
|
52
94
|
|
|
53
95
|
export default MaxMipLevelNode;
|
|
54
96
|
|
|
97
|
+
/**
|
|
98
|
+
* TSL function for creating a max mip level node.
|
|
99
|
+
*
|
|
100
|
+
* @function
|
|
101
|
+
* @param {TextureNode} textureNode - The texture node to compute the max mip level for.
|
|
102
|
+
* @returns {MaxMipLevelNode}
|
|
103
|
+
*/
|
|
55
104
|
export const maxMipLevel = /*@__PURE__*/ nodeProxy( MaxMipLevelNode );
|
|
@@ -1,6 +1,39 @@
|
|
|
1
1
|
import { time } from './Timer.js';
|
|
2
2
|
|
|
3
|
+
/** @module Oscillators **/
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Generates a sine wave oscillation based on a timer.
|
|
7
|
+
*
|
|
8
|
+
* @method
|
|
9
|
+
* @param {Node<float>} t - The timer to generate the oscillation with.
|
|
10
|
+
* @return {Node<float>} The oscillation node.
|
|
11
|
+
*/
|
|
3
12
|
export const oscSine = ( t = time ) => t.add( 0.75 ).mul( Math.PI * 2 ).sin().mul( 0.5 ).add( 0.5 );
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Generates a square wave oscillation based on a timer.
|
|
16
|
+
*
|
|
17
|
+
* @method
|
|
18
|
+
* @param {Node<float>} t - The timer to generate the oscillation with.
|
|
19
|
+
* @return {Node<float>} The oscillation node.
|
|
20
|
+
*/
|
|
4
21
|
export const oscSquare = ( t = time ) => t.fract().round();
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Generates a triangle wave oscillation based on a timer.
|
|
25
|
+
*
|
|
26
|
+
* @method
|
|
27
|
+
* @param {Node<float>} t - The timer to generate the oscillation with.
|
|
28
|
+
* @return {Node<float>} The oscillation node.
|
|
29
|
+
*/
|
|
5
30
|
export const oscTriangle = ( t = time ) => t.add( 0.5 ).fract().mul( 2 ).sub( 1 ).abs();
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Generates a sawtooth wave oscillation based on a timer.
|
|
34
|
+
*
|
|
35
|
+
* @method
|
|
36
|
+
* @param {Node<float>} t - The timer to generate the oscillation with.
|
|
37
|
+
* @return {Node<float>} The oscillation node.
|
|
38
|
+
*/
|
|
6
39
|
export const oscSawtooth = ( t = time ) => t.fract();
|
|
@@ -1,4 +1,21 @@
|
|
|
1
1
|
import { nodeObject } from '../tsl/TSLBase.js';
|
|
2
2
|
|
|
3
|
+
/** @module Packing **/
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Packs a direction vector into a color value.
|
|
7
|
+
*
|
|
8
|
+
* @method
|
|
9
|
+
* @param {Node<vec3>} node - The direction to pack.
|
|
10
|
+
* @return {Node<vec3>} The color.
|
|
11
|
+
*/
|
|
3
12
|
export const directionToColor = ( node ) => nodeObject( node ).mul( 0.5 ).add( 0.5 );
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Unpacks a color value into a direction vector.
|
|
16
|
+
*
|
|
17
|
+
* @method
|
|
18
|
+
* @param {Node<vec3>} node - The color to unpack.
|
|
19
|
+
* @return {Node<vec3>} The direction.
|
|
20
|
+
*/
|
|
4
21
|
export const colorToDirection = ( node ) => nodeObject( node ).mul( 2.0 ).sub( 1 );
|
|
@@ -3,15 +3,18 @@ import { textureSize } from '../accessors/TextureSizeNode.js';
|
|
|
3
3
|
import { textureLoad } from '../accessors/TextureNode.js';
|
|
4
4
|
import { WebGPUCoordinateSystem } from '../../constants.js';
|
|
5
5
|
|
|
6
|
+
/** @module PostProcessingUtils **/
|
|
7
|
+
|
|
6
8
|
/**
|
|
7
|
-
* Computes a position in view space based on a fragment's screen position expressed as uv coordinates, the fragments
|
|
8
|
-
* depth value and the camera's inverse projection matrix.
|
|
9
|
-
*
|
|
10
|
-
* @
|
|
11
|
-
* @param {
|
|
12
|
-
* @param {
|
|
13
|
-
* @
|
|
14
|
-
|
|
9
|
+
* Computes a position in view space based on a fragment's screen position expressed as uv coordinates, the fragments
|
|
10
|
+
* depth value and the camera's inverse projection matrix.
|
|
11
|
+
*
|
|
12
|
+
* @method
|
|
13
|
+
* @param {Node<vec2>} screenPosition - The fragment's screen position expressed as uv coordinates.
|
|
14
|
+
* @param {Node<float>} depth - The fragment's depth value.
|
|
15
|
+
* @param {Node<mat4>} projectionMatrixInverse - The camera's inverse projection matrix.
|
|
16
|
+
* @return {Node<vec3>} The fragments position in view space.
|
|
17
|
+
*/
|
|
15
18
|
export const getViewPosition = /*@__PURE__*/ Fn( ( [ screenPosition, depth, projectionMatrixInverse ], builder ) => {
|
|
16
19
|
|
|
17
20
|
let clipSpacePosition;
|
|
@@ -34,13 +37,14 @@ export const getViewPosition = /*@__PURE__*/ Fn( ( [ screenPosition, depth, proj
|
|
|
34
37
|
} );
|
|
35
38
|
|
|
36
39
|
/**
|
|
37
|
-
* Computes a screen position expressed as uv coordinates based on a fragment's position in view space
|
|
38
|
-
* and the camera's projection matrix
|
|
39
|
-
*
|
|
40
|
-
* @
|
|
41
|
-
* @param {
|
|
42
|
-
* @
|
|
43
|
-
|
|
40
|
+
* Computes a screen position expressed as uv coordinates based on a fragment's position in view space
|
|
41
|
+
* and the camera's projection matrix
|
|
42
|
+
*
|
|
43
|
+
* @method
|
|
44
|
+
* @param {Node<vec3>} viewPosition - The fragments position in view space.
|
|
45
|
+
* @param {Node<mat4>} projectionMatrix - The camera's projection matrix.
|
|
46
|
+
* @return {Node<vec2>} The fragment's screen position expressed as uv coordinates.
|
|
47
|
+
*/
|
|
44
48
|
export const getScreenPosition = /*@__PURE__*/ Fn( ( [ viewPosition, projectionMatrix ] ) => {
|
|
45
49
|
|
|
46
50
|
const sampleClipPos = projectionMatrix.mul( vec4( viewPosition, 1.0 ) );
|
|
@@ -50,14 +54,15 @@ export const getScreenPosition = /*@__PURE__*/ Fn( ( [ viewPosition, projectionM
|
|
|
50
54
|
} );
|
|
51
55
|
|
|
52
56
|
/**
|
|
53
|
-
* Computes a normal vector based on depth data. Can be used as a fallback when no normal render
|
|
54
|
-
* target is available or if flat surface normals are required.
|
|
55
|
-
*
|
|
56
|
-
* @
|
|
57
|
-
* @param {
|
|
58
|
-
* @param {
|
|
59
|
-
* @
|
|
60
|
-
|
|
57
|
+
* Computes a normal vector based on depth data. Can be used as a fallback when no normal render
|
|
58
|
+
* target is available or if flat surface normals are required.
|
|
59
|
+
*
|
|
60
|
+
* @method
|
|
61
|
+
* @param {Node<vec2>} uv - The texture coordinate.
|
|
62
|
+
* @param {DepthTexture} depthTexture - The depth texture.
|
|
63
|
+
* @param {Node<mat4>} projectionMatrixInverse - The camera's inverse projection matrix.
|
|
64
|
+
* @return {Node<vec3>} The computed normal vector.
|
|
65
|
+
*/
|
|
61
66
|
export const getNormalFromDepth = /*@__PURE__*/ Fn( ( [ uv, depthTexture, projectionMatrixInverse ] ) => {
|
|
62
67
|
|
|
63
68
|
const size = textureSize( textureLoad( depthTexture ) );
|
|
@@ -9,8 +9,18 @@ import { RenderTarget } from '../../core/RenderTarget.js';
|
|
|
9
9
|
import { Vector2 } from '../../math/Vector2.js';
|
|
10
10
|
import { HalfFloatType } from '../../constants.js';
|
|
11
11
|
|
|
12
|
+
/** @module RTTNode **/
|
|
13
|
+
|
|
12
14
|
const _size = /*@__PURE__*/ new Vector2();
|
|
13
15
|
|
|
16
|
+
/**
|
|
17
|
+
* `RTTNode` takes another node and uses it with a `QuadMesh` to render into a texture (RTT).
|
|
18
|
+
* This module is especially relevant in context of post processing where certain nodes require
|
|
19
|
+
* texture input for their effects. With the helper function `convertToTexture()` which is based
|
|
20
|
+
* on this module, the node system can automatically ensure texture input if required.
|
|
21
|
+
*
|
|
22
|
+
* @augments module:TextureNode~TextureNode
|
|
23
|
+
*/
|
|
14
24
|
class RTTNode extends TextureNode {
|
|
15
25
|
|
|
16
26
|
static get type() {
|
|
@@ -19,30 +29,110 @@ class RTTNode extends TextureNode {
|
|
|
19
29
|
|
|
20
30
|
}
|
|
21
31
|
|
|
32
|
+
/**
|
|
33
|
+
* Constructs a new RTT node.
|
|
34
|
+
*
|
|
35
|
+
* @param {Node} node - The node to render a texture with.
|
|
36
|
+
* @param {Number?} [width=null] - The width of the internal render target. If not width is applied, the render target is automatically resized.
|
|
37
|
+
* @param {Number?} [height=null] - The height of the internal render target.
|
|
38
|
+
* @param {Object} [options={type:HalfFloatType}] - The options for the internal render target.
|
|
39
|
+
*/
|
|
22
40
|
constructor( node, width = null, height = null, options = { type: HalfFloatType } ) {
|
|
23
41
|
|
|
24
42
|
const renderTarget = new RenderTarget( width, height, options );
|
|
25
43
|
|
|
26
44
|
super( renderTarget.texture, uv() );
|
|
27
45
|
|
|
46
|
+
/**
|
|
47
|
+
* The node to render a texture with.
|
|
48
|
+
*
|
|
49
|
+
* @type {Node}
|
|
50
|
+
*/
|
|
28
51
|
this.node = node;
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* The width of the internal render target.
|
|
55
|
+
* If not width is applied, the render target is automatically resized.
|
|
56
|
+
*
|
|
57
|
+
* @type {Number?}
|
|
58
|
+
* @default null
|
|
59
|
+
*/
|
|
29
60
|
this.width = width;
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* The height of the internal render target.
|
|
64
|
+
*
|
|
65
|
+
* @type {Number?}
|
|
66
|
+
* @default null
|
|
67
|
+
*/
|
|
30
68
|
this.height = height;
|
|
31
69
|
|
|
70
|
+
/**
|
|
71
|
+
* The pixel ratio
|
|
72
|
+
*
|
|
73
|
+
* @type {Number}
|
|
74
|
+
* @default 1
|
|
75
|
+
*/
|
|
76
|
+
this.pixelRatio = 1;
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* The render target
|
|
80
|
+
*
|
|
81
|
+
* @type {RenderTarget}
|
|
82
|
+
*/
|
|
32
83
|
this.renderTarget = renderTarget;
|
|
33
84
|
|
|
85
|
+
/**
|
|
86
|
+
* Whether the texture requires an update or not.
|
|
87
|
+
*
|
|
88
|
+
* @type {Boolean}
|
|
89
|
+
* @default true
|
|
90
|
+
*/
|
|
34
91
|
this.textureNeedsUpdate = true;
|
|
35
|
-
this.autoUpdate = true;
|
|
36
92
|
|
|
37
|
-
|
|
93
|
+
/**
|
|
94
|
+
* Whether the texture should automatically be updated or not.
|
|
95
|
+
*
|
|
96
|
+
* @type {Boolean}
|
|
97
|
+
* @default true
|
|
98
|
+
*/
|
|
99
|
+
this.autoUpdate = true;
|
|
38
100
|
|
|
101
|
+
/**
|
|
102
|
+
* The node which is used with the quad mesh for RTT.
|
|
103
|
+
*
|
|
104
|
+
* @private
|
|
105
|
+
* @type {Node}
|
|
106
|
+
* @default null
|
|
107
|
+
*/
|
|
39
108
|
this._rttNode = null;
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* The internal quad mesh for RTT.
|
|
112
|
+
*
|
|
113
|
+
* @private
|
|
114
|
+
* @type {QuadMesh}
|
|
115
|
+
*/
|
|
40
116
|
this._quadMesh = new QuadMesh( new NodeMaterial() );
|
|
41
117
|
|
|
118
|
+
/**
|
|
119
|
+
* The `updateBeforeType` is set to `NodeUpdateType.RENDER` since the node updates
|
|
120
|
+
* the texture once per render in its {@link RTTNode#updateBefore} method.
|
|
121
|
+
*
|
|
122
|
+
* @type {String}
|
|
123
|
+
* @default 'render'
|
|
124
|
+
*/
|
|
42
125
|
this.updateBeforeType = NodeUpdateType.RENDER;
|
|
43
126
|
|
|
44
127
|
}
|
|
45
128
|
|
|
129
|
+
/**
|
|
130
|
+
* Whether the internal render target should automatically be resized or not.
|
|
131
|
+
*
|
|
132
|
+
* @type {Boolean}
|
|
133
|
+
* @readonly
|
|
134
|
+
* @default true
|
|
135
|
+
*/
|
|
46
136
|
get autoSize() {
|
|
47
137
|
|
|
48
138
|
return this.width === null;
|
|
@@ -59,6 +149,12 @@ class RTTNode extends TextureNode {
|
|
|
59
149
|
|
|
60
150
|
}
|
|
61
151
|
|
|
152
|
+
/**
|
|
153
|
+
* Sets the size of the internal render target
|
|
154
|
+
*
|
|
155
|
+
* @param {Number} width - The width to set.
|
|
156
|
+
* @param {Number} height - The width to set.
|
|
157
|
+
*/
|
|
62
158
|
setSize( width, height ) {
|
|
63
159
|
|
|
64
160
|
this.width = width;
|
|
@@ -73,6 +169,11 @@ class RTTNode extends TextureNode {
|
|
|
73
169
|
|
|
74
170
|
}
|
|
75
171
|
|
|
172
|
+
/**
|
|
173
|
+
* Sets the pixel ratio. This will also resize the render target.
|
|
174
|
+
*
|
|
175
|
+
* @param {Number} pixelRatio - The pixel ratio to set.
|
|
176
|
+
*/
|
|
76
177
|
setPixelRatio( pixelRatio ) {
|
|
77
178
|
|
|
78
179
|
this.pixelRatio = pixelRatio;
|
|
@@ -129,8 +230,28 @@ class RTTNode extends TextureNode {
|
|
|
129
230
|
|
|
130
231
|
export default RTTNode;
|
|
131
232
|
|
|
233
|
+
/**
|
|
234
|
+
* TSL function for creating a RTT node.
|
|
235
|
+
*
|
|
236
|
+
* @function
|
|
237
|
+
* @param {Node} node - The node to render a texture with.
|
|
238
|
+
* @param {Number?} [width=null] - The width of the internal render target. If not width is applied, the render target is automatically resized.
|
|
239
|
+
* @param {Number?} [height=null] - The height of the internal render target.
|
|
240
|
+
* @param {Object} [options={type:HalfFloatType}] - The options for the internal render target.
|
|
241
|
+
* @returns {RTTNode}
|
|
242
|
+
*/
|
|
132
243
|
export const rtt = ( node, ...params ) => nodeObject( new RTTNode( nodeObject( node ), ...params ) );
|
|
133
244
|
|
|
245
|
+
/**
|
|
246
|
+
* TSL function for converting nodes to textures nodes.
|
|
247
|
+
*
|
|
248
|
+
* @function
|
|
249
|
+
* @param {Node} node - The node to render a texture with.
|
|
250
|
+
* @param {Number?} [width=null] - The width of the internal render target. If not width is applied, the render target is automatically resized.
|
|
251
|
+
* @param {Number?} [height=null] - The height of the internal render target.
|
|
252
|
+
* @param {Object} [options={type:HalfFloatType}] - The options for the internal render target.
|
|
253
|
+
* @returns {RTTNode}
|
|
254
|
+
*/
|
|
134
255
|
export const convertToTexture = ( node, ...params ) => {
|
|
135
256
|
|
|
136
257
|
if ( node.isTextureNode ) return node;
|
|
@@ -14,6 +14,8 @@ import { Matrix4 } from '../../math/Matrix4.js';
|
|
|
14
14
|
import { RenderTarget } from '../../core/RenderTarget.js';
|
|
15
15
|
import { DepthTexture } from '../../textures/DepthTexture.js';
|
|
16
16
|
|
|
17
|
+
/** @module ReflectorNode **/
|
|
18
|
+
|
|
17
19
|
const _reflectorPlane = new Plane();
|
|
18
20
|
const _normal = new Vector3();
|
|
19
21
|
const _reflectorWorldPosition = new Vector3();
|
|
@@ -35,6 +37,19 @@ _defaultRT.depthTexture = new DepthTexture( 1, 1 );
|
|
|
35
37
|
|
|
36
38
|
let _inReflector = false;
|
|
37
39
|
|
|
40
|
+
/**
|
|
41
|
+
* This node can be used to implement mirror-like flat reflective surfaces.
|
|
42
|
+
*
|
|
43
|
+
* ```js
|
|
44
|
+
* const groundReflector = reflector();
|
|
45
|
+
* material.colorNode = groundReflector;
|
|
46
|
+
*
|
|
47
|
+
* const plane = new Mesh( geometry, material );
|
|
48
|
+
* plane.add( groundReflector.target );
|
|
49
|
+
* ```
|
|
50
|
+
*
|
|
51
|
+
* @augments module:TextureNode~TextureNode
|
|
52
|
+
*/
|
|
38
53
|
class ReflectorNode extends TextureNode {
|
|
39
54
|
|
|
40
55
|
static get type() {
|
|
@@ -43,29 +58,72 @@ class ReflectorNode extends TextureNode {
|
|
|
43
58
|
|
|
44
59
|
}
|
|
45
60
|
|
|
61
|
+
/**
|
|
62
|
+
* Constructs a new reflector node.
|
|
63
|
+
*
|
|
64
|
+
* @param {Object} [parameters={}] - An object holding configuration parameters.
|
|
65
|
+
* @param {Object3D} [parameters.target=new Object3D()] - The 3D object the reflector is linked to.
|
|
66
|
+
* @param {Number} [parameters.resolution=1] - The resolution scale.
|
|
67
|
+
* @param {Boolean} [parameters.generateMipmaps=false] - Whether mipmaps should be generated or not.
|
|
68
|
+
* @param {Boolean} [parameters.bounces=true] - Whether reflectors can render other reflector nodes or not.
|
|
69
|
+
* @param {Boolean} [parameters.depth=false] - Whether depth data should be generated or not.
|
|
70
|
+
* @param {TextureNode} [parameters.defaultTexture] - The default texture node.
|
|
71
|
+
* @param {ReflectorBaseNode} [parameters.reflector] - The reflector base node.
|
|
72
|
+
*/
|
|
46
73
|
constructor( parameters = {} ) {
|
|
47
74
|
|
|
48
75
|
super( parameters.defaultTexture || _defaultRT.texture, _defaultUV );
|
|
49
76
|
|
|
77
|
+
/**
|
|
78
|
+
* A reference to the internal reflector base node which holds the actual implementation.
|
|
79
|
+
*
|
|
80
|
+
* @private
|
|
81
|
+
* @type {ReflectorBaseNode?}
|
|
82
|
+
* @default null
|
|
83
|
+
*/
|
|
50
84
|
this._reflectorBaseNode = parameters.reflector || new ReflectorBaseNode( this, parameters );
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* A reference to the internal depth node.
|
|
88
|
+
*
|
|
89
|
+
* @private
|
|
90
|
+
* @type {Node?}
|
|
91
|
+
* @default null
|
|
92
|
+
*/
|
|
51
93
|
this._depthNode = null;
|
|
52
94
|
|
|
53
95
|
this.setUpdateMatrix( false );
|
|
54
96
|
|
|
55
97
|
}
|
|
56
98
|
|
|
99
|
+
/**
|
|
100
|
+
* A reference to the internal reflector node.
|
|
101
|
+
*
|
|
102
|
+
* @type {ReflectorBaseNode}
|
|
103
|
+
*/
|
|
57
104
|
get reflector() {
|
|
58
105
|
|
|
59
106
|
return this._reflectorBaseNode;
|
|
60
107
|
|
|
61
108
|
}
|
|
62
109
|
|
|
110
|
+
/**
|
|
111
|
+
* A reference to 3D object the reflector is linked to.
|
|
112
|
+
*
|
|
113
|
+
* @type {Object3D}
|
|
114
|
+
*/
|
|
63
115
|
get target() {
|
|
64
116
|
|
|
65
117
|
return this._reflectorBaseNode.target;
|
|
66
118
|
|
|
67
119
|
}
|
|
68
120
|
|
|
121
|
+
/**
|
|
122
|
+
* Returns a node representing the mirror's depth. That can be used
|
|
123
|
+
* to implement more advanced reflection effects like distance attenuation.
|
|
124
|
+
*
|
|
125
|
+
* @return {Node} The depth node.
|
|
126
|
+
*/
|
|
69
127
|
getDepthNode() {
|
|
70
128
|
|
|
71
129
|
if ( this._depthNode === null ) {
|
|
@@ -107,7 +165,15 @@ class ReflectorNode extends TextureNode {
|
|
|
107
165
|
|
|
108
166
|
}
|
|
109
167
|
|
|
110
|
-
|
|
168
|
+
/**
|
|
169
|
+
* Holds the actual implementation of the reflector.
|
|
170
|
+
*
|
|
171
|
+
* TODO: Explain why `ReflectorBaseNode`. Originally the entire logic was implemented
|
|
172
|
+
* in `ReflectorNode`, see #29619.
|
|
173
|
+
*
|
|
174
|
+
* @private
|
|
175
|
+
* @augments Node
|
|
176
|
+
*/
|
|
111
177
|
class ReflectorBaseNode extends Node {
|
|
112
178
|
|
|
113
179
|
static get type() {
|
|
@@ -116,6 +182,17 @@ class ReflectorBaseNode extends Node {
|
|
|
116
182
|
|
|
117
183
|
}
|
|
118
184
|
|
|
185
|
+
/**
|
|
186
|
+
* Constructs a new reflector base node.
|
|
187
|
+
*
|
|
188
|
+
* @param {TextureNode} textureNode - Represents the rendered reflections as a texture node.
|
|
189
|
+
* @param {Object} [parameters={}] - An object holding configuration parameters.
|
|
190
|
+
* @param {Object3D} [parameters.target=new Object3D()] - The 3D object the reflector is linked to.
|
|
191
|
+
* @param {Number} [parameters.resolution=1] - The resolution scale.
|
|
192
|
+
* @param {Boolean} [parameters.generateMipmaps=false] - Whether mipmaps should be generated or not.
|
|
193
|
+
* @param {Boolean} [parameters.bounces=true] - Whether reflectors can render other reflector nodes or not.
|
|
194
|
+
* @param {Boolean} [parameters.depth=false] - Whether depth data should be generated or not.
|
|
195
|
+
*/
|
|
119
196
|
constructor( textureNode, parameters = {} ) {
|
|
120
197
|
|
|
121
198
|
super();
|
|
@@ -128,23 +205,85 @@ class ReflectorBaseNode extends Node {
|
|
|
128
205
|
depth = false
|
|
129
206
|
} = parameters;
|
|
130
207
|
|
|
131
|
-
|
|
132
|
-
|
|
208
|
+
/**
|
|
209
|
+
* Represents the rendered reflections as a texture node.
|
|
210
|
+
*
|
|
211
|
+
* @type {TextureNode}
|
|
212
|
+
*/
|
|
133
213
|
this.textureNode = textureNode;
|
|
134
214
|
|
|
215
|
+
/**
|
|
216
|
+
* The 3D object the reflector is linked to.
|
|
217
|
+
*
|
|
218
|
+
* @type {Object3D}
|
|
219
|
+
* @default {new Object3D()}
|
|
220
|
+
*/
|
|
135
221
|
this.target = target;
|
|
222
|
+
|
|
223
|
+
/**
|
|
224
|
+
* The resolution scale.
|
|
225
|
+
*
|
|
226
|
+
* @type {Number}
|
|
227
|
+
* @default {1}
|
|
228
|
+
*/
|
|
136
229
|
this.resolution = resolution;
|
|
230
|
+
|
|
231
|
+
/**
|
|
232
|
+
* Whether mipmaps should be generated or not.
|
|
233
|
+
*
|
|
234
|
+
* @type {Boolean}
|
|
235
|
+
* @default {false}
|
|
236
|
+
*/
|
|
137
237
|
this.generateMipmaps = generateMipmaps;
|
|
238
|
+
|
|
239
|
+
/**
|
|
240
|
+
* Whether reflectors can render other reflector nodes or not.
|
|
241
|
+
*
|
|
242
|
+
* @type {Boolean}
|
|
243
|
+
* @default {true}
|
|
244
|
+
*/
|
|
138
245
|
this.bounces = bounces;
|
|
246
|
+
|
|
247
|
+
/**
|
|
248
|
+
* Whether depth data should be generated or not.
|
|
249
|
+
*
|
|
250
|
+
* @type {Boolean}
|
|
251
|
+
* @default {false}
|
|
252
|
+
*/
|
|
139
253
|
this.depth = depth;
|
|
140
254
|
|
|
255
|
+
/**
|
|
256
|
+
* The `updateBeforeType` is set to `NodeUpdateType.RENDER` when {@link ReflectorBaseNode#bounces}
|
|
257
|
+
* is `true`. Otherwise it's `NodeUpdateType.FRAME`.
|
|
258
|
+
*
|
|
259
|
+
* @type {String}
|
|
260
|
+
* @default 'render'
|
|
261
|
+
*/
|
|
141
262
|
this.updateBeforeType = bounces ? NodeUpdateType.RENDER : NodeUpdateType.FRAME;
|
|
142
263
|
|
|
264
|
+
/**
|
|
265
|
+
* Weak map for managing virtual cameras.
|
|
266
|
+
*
|
|
267
|
+
* @type {WeakMap<Camera, Camera>}
|
|
268
|
+
*/
|
|
143
269
|
this.virtualCameras = new WeakMap();
|
|
270
|
+
|
|
271
|
+
/**
|
|
272
|
+
* Weak map for managing render targets.
|
|
273
|
+
*
|
|
274
|
+
* @type {WeakMap<Camera, RenderTarget>}
|
|
275
|
+
*/
|
|
144
276
|
this.renderTargets = new WeakMap();
|
|
145
277
|
|
|
146
278
|
}
|
|
147
279
|
|
|
280
|
+
/**
|
|
281
|
+
* Updates the resolution of the internal render target.
|
|
282
|
+
*
|
|
283
|
+
* @private
|
|
284
|
+
* @param {RenderTarget} renderTarget - The render target to resize.
|
|
285
|
+
* @param {Renderer} renderer - The renderer that is used to determine the new size.
|
|
286
|
+
*/
|
|
148
287
|
_updateResolution( renderTarget, renderer ) {
|
|
149
288
|
|
|
150
289
|
const resolution = this.resolution;
|
|
@@ -163,6 +302,13 @@ class ReflectorBaseNode extends Node {
|
|
|
163
302
|
|
|
164
303
|
}
|
|
165
304
|
|
|
305
|
+
/**
|
|
306
|
+
* Returns a virtual camera for the given camera. The virtual camera is used to
|
|
307
|
+
* render the scene from the reflector's view so correct reflections can be produced.
|
|
308
|
+
*
|
|
309
|
+
* @param {Camera} camera - The scene's camera.
|
|
310
|
+
* @return {Camera} The corresponding virtual camera.
|
|
311
|
+
*/
|
|
166
312
|
getVirtualCamera( camera ) {
|
|
167
313
|
|
|
168
314
|
let virtualCamera = this.virtualCameras.get( camera );
|
|
@@ -179,6 +325,13 @@ class ReflectorBaseNode extends Node {
|
|
|
179
325
|
|
|
180
326
|
}
|
|
181
327
|
|
|
328
|
+
/**
|
|
329
|
+
* Returns a render target for the given camera. The reflections are rendered
|
|
330
|
+
* into this render target.
|
|
331
|
+
*
|
|
332
|
+
* @param {Camera} camera - The scene's camera.
|
|
333
|
+
* @return {RenderTarget} The render target.
|
|
334
|
+
*/
|
|
182
335
|
getRenderTarget( camera ) {
|
|
183
336
|
|
|
184
337
|
let renderTarget = this.renderTargets.get( camera );
|
|
@@ -210,7 +363,7 @@ class ReflectorBaseNode extends Node {
|
|
|
210
363
|
|
|
211
364
|
updateBefore( frame ) {
|
|
212
365
|
|
|
213
|
-
if ( this.bounces === false && _inReflector ) return;
|
|
366
|
+
if ( this.bounces === false && _inReflector ) return false;
|
|
214
367
|
|
|
215
368
|
_inReflector = true;
|
|
216
369
|
|
|
@@ -307,14 +460,17 @@ class ReflectorBaseNode extends Node {
|
|
|
307
460
|
|
|
308
461
|
const currentRenderTarget = renderer.getRenderTarget();
|
|
309
462
|
const currentMRT = renderer.getMRT();
|
|
463
|
+
const currentAutoClear = renderer.autoClear;
|
|
310
464
|
|
|
311
465
|
renderer.setMRT( null );
|
|
312
466
|
renderer.setRenderTarget( renderTarget );
|
|
467
|
+
renderer.autoClear = true;
|
|
313
468
|
|
|
314
469
|
renderer.render( scene, virtualCamera );
|
|
315
470
|
|
|
316
471
|
renderer.setMRT( currentMRT );
|
|
317
472
|
renderer.setRenderTarget( currentRenderTarget );
|
|
473
|
+
renderer.autoClear = currentAutoClear;
|
|
318
474
|
|
|
319
475
|
material.visible = true;
|
|
320
476
|
|
|
@@ -324,6 +480,20 @@ class ReflectorBaseNode extends Node {
|
|
|
324
480
|
|
|
325
481
|
}
|
|
326
482
|
|
|
483
|
+
/**
|
|
484
|
+
* TSL function for creating a reflector node.
|
|
485
|
+
*
|
|
486
|
+
* @function
|
|
487
|
+
* @param {Object} [parameters={}] - An object holding configuration parameters.
|
|
488
|
+
* @param {Object3D} [parameters.target=new Object3D()] - The 3D object the reflector is linked to.
|
|
489
|
+
* @param {Number} [parameters.resolution=1] - The resolution scale.
|
|
490
|
+
* @param {Boolean} [parameters.generateMipmaps=false] - Whether mipmaps should be generated or not.
|
|
491
|
+
* @param {Boolean} [parameters.bounces=true] - Whether reflectors can render other reflector nodes or not.
|
|
492
|
+
* @param {Boolean} [parameters.depth=false] - Whether depth data should be generated or not.
|
|
493
|
+
* @param {TextureNode} [parameters.defaultTexture] - The default texture node.
|
|
494
|
+
* @param {ReflectorBaseNode} [parameters.reflector] - The reflector base node.
|
|
495
|
+
* @returns {ReflectorNode}
|
|
496
|
+
*/
|
|
327
497
|
export const reflector = ( parameters ) => nodeObject( new ReflectorNode( parameters ) );
|
|
328
498
|
|
|
329
499
|
export default ReflectorNode;
|