super-three 0.171.0 → 0.173.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/LICENSE +1 -1
- package/README.md +1 -1
- package/build/three.cjs +594 -427
- package/build/three.core.js +515 -81
- package/build/three.core.min.js +2 -2
- package/build/three.module.js +79 -350
- package/build/three.module.min.js +2 -2
- package/build/three.tsl.js +20 -7
- package/build/three.tsl.min.js +2 -2
- package/build/three.webgpu.js +29362 -3427
- package/build/three.webgpu.min.js +2 -2
- package/build/three.webgpu.nodes.js +29361 -3427
- package/build/three.webgpu.nodes.min.js +2 -2
- package/examples/jsm/Addons.js +0 -5
- package/examples/jsm/animation/CCDIKSolver.js +9 -7
- package/examples/jsm/capabilities/WebGPU.js +1 -1
- package/examples/jsm/controls/ArcballControls.js +48 -37
- 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 +34 -29
- package/examples/jsm/exporters/KTX2Exporter.js +1 -1
- package/examples/jsm/exporters/PLYExporter.js +2 -2
- package/examples/jsm/geometries/TextGeometry.js +1 -12
- package/examples/jsm/helpers/TextureHelperGPU.js +15 -5
- package/examples/jsm/helpers/VertexNormalsHelper.js +2 -0
- package/examples/jsm/interactive/InteractiveGroup.js +108 -51
- package/examples/jsm/libs/demuxer_mp4.js +109 -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 +4 -2
- package/examples/jsm/loaders/GLTFLoader.js +22 -4
- 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 -2
- 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/materials/MeshGouraudMaterial.js +2 -0
- package/examples/jsm/math/ConvexHull.js +1 -1
- package/examples/jsm/math/OBB.js +17 -0
- package/examples/jsm/misc/GPUComputationRenderer.js +6 -7
- package/examples/jsm/misc/ProgressiveLightMap.js +4 -3
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +14 -13
- package/examples/jsm/misc/Volume.js +27 -17
- package/examples/jsm/misc/VolumeSlice.js +7 -5
- 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 +29 -24
- package/examples/jsm/physics/JoltPhysics.js +7 -7
- package/examples/jsm/physics/RapierPhysics.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/OutputPass.js +2 -0
- 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/OutputShader.js +5 -1
- package/examples/jsm/shaders/SobelOperatorShader.js +1 -1
- package/examples/jsm/transpiler/GLSLDecoder.js +2 -2
- package/examples/jsm/transpiler/TSLEncoder.js +2 -0
- 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 +4 -0
- package/src/Three.Legacy.js +0 -21
- package/src/Three.TSL.js +18 -5
- 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/ArrayCamera.js +1 -0
- package/src/cameras/PerspectiveCamera.js +18 -2
- package/src/constants.js +6 -1
- package/src/core/BufferAttribute.js +4 -0
- package/src/core/EventDispatcher.js +8 -6
- 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/ImageUtils.js +1 -11
- 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/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 +476 -23
- package/src/materials/nodes/NodeMaterials.js +0 -1
- package/src/materials/nodes/PointsNodeMaterial.js +121 -10
- package/src/materials/nodes/ShadowNodeMaterial.js +29 -0
- package/src/materials/nodes/SpriteNodeMaterial.js +78 -20
- package/src/materials/nodes/VolumeNodeMaterial.js +80 -4
- package/src/materials/nodes/manager/NodeMaterialObserver.js +95 -0
- package/src/nodes/Nodes.js +5 -6
- package/src/nodes/TSL.js +6 -3
- package/src/nodes/accessors/AccessorsUtils.js +27 -0
- package/src/nodes/accessors/Arrays.js +47 -6
- package/src/nodes/accessors/BatchNode.js +42 -6
- 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 +113 -3
- 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/Lights.js +50 -1
- package/src/nodes/accessors/MaterialNode.js +306 -12
- 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 +65 -5
- package/src/nodes/accessors/Object3DNode.js +101 -1
- package/src/nodes/accessors/PointUVNode.js +26 -0
- package/src/nodes/accessors/Position.js +56 -7
- package/src/nodes/accessors/ReferenceBaseNode.js +186 -0
- package/src/nodes/accessors/ReferenceNode.js +201 -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 +209 -8
- package/src/nodes/accessors/StorageTextureNode.js +118 -0
- package/src/nodes/accessors/Tangent.js +38 -2
- package/src/nodes/accessors/Texture3DNode.js +91 -7
- package/src/nodes/accessors/TextureBicubic.js +12 -2
- package/src/nodes/accessors/TextureNode.js +316 -10
- package/src/nodes/accessors/TextureSizeNode.js +42 -0
- package/src/nodes/accessors/UV.js +10 -1
- package/src/nodes/accessors/UniformArrayNode.js +231 -25
- package/src/nodes/accessors/UserDataNode.js +46 -0
- package/src/nodes/accessors/VelocityNode.js +80 -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/ArrayNode.js +125 -0
- 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 +32 -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 +350 -12
- package/src/nodes/core/NodeAttribute.js +38 -0
- package/src/nodes/core/NodeBuilder.js +1166 -26
- 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 +152 -1
- package/src/nodes/core/NodeVar.js +47 -1
- package/src/nodes/core/NodeVarying.js +28 -0
- package/src/nodes/core/OutputStructNode.js +51 -10
- package/src/nodes/core/ParameterNode.js +28 -0
- package/src/nodes/core/PropertyNode.js +232 -0
- package/src/nodes/core/StackNode.js +98 -1
- package/src/nodes/core/StructNode.js +121 -0
- package/src/nodes/core/StructType.js +13 -0
- package/src/nodes/core/StructTypeNode.js +105 -6
- package/src/nodes/core/TempNode.js +31 -5
- package/src/nodes/core/UniformGroupNode.js +82 -7
- package/src/nodes/core/UniformNode.js +66 -0
- package/src/nodes/core/VarNode.js +146 -7
- package/src/nodes/core/VaryingNode.js +100 -3
- package/src/nodes/core/constants.js +36 -0
- package/src/nodes/display/BlendModes.js +88 -1
- 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 +300 -7
- package/src/nodes/display/PosterizeNode.js +33 -0
- package/src/nodes/display/RenderOutputNode.js +66 -1
- package/src/nodes/display/ScreenNode.js +96 -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 +110 -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 +174 -2
- package/src/nodes/gpgpu/BarrierNode.js +47 -0
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +134 -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 +241 -35
- package/src/nodes/lighting/SpotLightNode.js +43 -0
- package/src/nodes/math/ConditionalNode.js +78 -4
- package/src/nodes/math/Hash.js +9 -0
- package/src/nodes/math/MathNode.js +627 -11
- package/src/nodes/math/MathUtils.js +45 -1
- package/src/nodes/math/OperatorNode.js +329 -18
- 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 +2 -2
- package/src/nodes/procedural/Checker.js +9 -0
- package/src/nodes/shapes/Shapes.js +33 -0
- package/src/nodes/tsl/TSLBase.js +3 -2
- package/src/nodes/tsl/TSLCore.js +22 -2
- package/src/nodes/utils/ArrayElementNode.js +39 -3
- 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 +82 -2
- package/src/nodes/utils/MatcapUVNode.js +17 -0
- package/src/nodes/utils/MaxMipLevelNode.js +49 -0
- package/src/nodes/utils/MemberNode.js +68 -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 +54 -0
- package/src/nodes/utils/Timer.js +40 -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 +2 -3
- package/src/objects/ClippingGroup.js +49 -0
- package/src/objects/Line.js +6 -6
- package/src/renderers/WebGLRenderer.js +30 -4
- package/src/renderers/common/Animation.js +85 -0
- package/src/renderers/common/Attributes.js +36 -0
- package/src/renderers/common/Backend.js +502 -44
- package/src/renderers/common/Background.js +48 -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 +45 -6
- package/src/renderers/common/ClippingContext.js +108 -15
- package/src/renderers/common/Color4.js +40 -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 +91 -14
- package/src/renderers/common/IndirectStorageBufferAttribute.js +25 -2
- package/src/renderers/common/Info.js +78 -35
- package/src/renderers/common/Lighting.js +34 -6
- package/src/renderers/common/Pipeline.js +22 -0
- package/src/renderers/common/Pipelines.js +148 -5
- package/src/renderers/common/PostProcessing.js +99 -11
- 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 +39 -10
- package/src/renderers/common/RenderContext.js +201 -2
- package/src/renderers/common/RenderContexts.js +59 -6
- package/src/renderers/common/RenderList.js +178 -0
- package/src/renderers/common/RenderLists.js +40 -3
- package/src/renderers/common/RenderObject.js +400 -17
- package/src/renderers/common/RenderObjects.js +103 -7
- package/src/renderers/common/RenderPipeline.js +24 -0
- package/src/renderers/common/Renderer.js +1170 -86
- package/src/renderers/common/RendererUtils.js +193 -0
- package/src/renderers/common/SampledTexture.js +120 -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 +97 -7
- package/src/renderers/common/TimestampQueryPool.js +39 -0
- package/src/renderers/common/Uniform.js +225 -3
- package/src/renderers/common/UniformBuffer.js +19 -0
- package/src/renderers/common/UniformsGroup.js +141 -2
- package/src/renderers/common/XRManager.js +1193 -0
- package/src/renderers/common/XRRenderTarget.js +74 -0
- package/src/renderers/common/extras/PMREMGenerator.js +76 -10
- package/src/renderers/common/nodes/NodeBuilderState.js +99 -5
- package/src/renderers/common/nodes/NodeLibrary.js +89 -0
- package/src/renderers/common/nodes/NodeSampledTexture.js +90 -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 +243 -2
- 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 +352 -78
- 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/WebGLBackground.js +4 -0
- package/src/renderers/webgl-fallback/WebGLBackend.js +819 -116
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +347 -18
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +58 -1
- package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +28 -0
- package/src/renderers/webgl-fallback/utils/WebGLExtensions.js +45 -0
- package/src/renderers/webgl-fallback/utils/WebGLState.js +323 -11
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +168 -22
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +359 -0
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +43 -0
- package/src/renderers/webgpu/WebGPUBackend.js +578 -164
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +36 -0
- package/src/renderers/webgpu/WebGPURenderer.js +36 -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 +674 -52
- 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 +95 -14
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +94 -1
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +102 -3
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +98 -1
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +262 -18
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +274 -0
- package/src/renderers/webgpu/utils/WebGPUUtils.js +116 -4
- package/src/renderers/webxr/WebXRDepthSensing.js +1 -1
- package/src/renderers/webxr/WebXRManager.js +19 -2
- package/src/textures/Data3DTexture.js +2 -2
- package/src/textures/Texture.js +4 -0
- package/src/textures/VideoFrameTexture.js +35 -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/geometries/InstancedPointsGeometry.js +0 -176
- package/examples/jsm/libs/mmdparser.module.js +0 -11530
- package/examples/jsm/loaders/MMDLoader.js +0 -2298
- package/examples/jsm/objects/InstancedPoints.js +0 -19
- package/examples/jsm/shaders/MMDToonShader.js +0 -134
- package/src/materials/nodes/InstancedPointsNodeMaterial.js +0 -156
- package/src/nodes/accessors/InstancedPointsMaterialNode.js +0 -24
- 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
|
@@ -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;
|
|
@@ -1,6 +1,15 @@
|
|
|
1
1
|
import Node from '../core/Node.js';
|
|
2
2
|
import { float, addMethodChaining, nodeProxy } from '../tsl/TSLCore.js';
|
|
3
3
|
|
|
4
|
+
/** @module RemapNode **/
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* This node allows to remap a node value from one range into another. E.g a value of
|
|
8
|
+
* `0.4` in the range `[ 0.3, 0.5 ]` should be remapped into the normalized range `[ 0, 1 ]`.
|
|
9
|
+
* `RemapNode` takes care of that and converts the original value of `0.4` to `0.5`.
|
|
10
|
+
*
|
|
11
|
+
* @augments Node
|
|
12
|
+
*/
|
|
4
13
|
class RemapNode extends Node {
|
|
5
14
|
|
|
6
15
|
static get type() {
|
|
@@ -9,16 +18,63 @@ class RemapNode extends Node {
|
|
|
9
18
|
|
|
10
19
|
}
|
|
11
20
|
|
|
21
|
+
/**
|
|
22
|
+
* Constructs a new remap node.
|
|
23
|
+
*
|
|
24
|
+
* @param {Node} node - The node that should be remapped.
|
|
25
|
+
* @param {Node} inLowNode - The source or current lower bound of the range.
|
|
26
|
+
* @param {Node} inHighNode - The source or current upper bound of the range.
|
|
27
|
+
* @param {Node} [outLowNode=float(0)] - The target lower bound of the range.
|
|
28
|
+
* @param {Node} [outHighNode=float(1)] - The target upper bound of the range.
|
|
29
|
+
*/
|
|
12
30
|
constructor( node, inLowNode, inHighNode, outLowNode = float( 0 ), outHighNode = float( 1 ) ) {
|
|
13
31
|
|
|
14
32
|
super();
|
|
15
33
|
|
|
34
|
+
/**
|
|
35
|
+
* The node that should be remapped.
|
|
36
|
+
*
|
|
37
|
+
* @type {Node}
|
|
38
|
+
*/
|
|
16
39
|
this.node = node;
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* The source or current lower bound of the range.
|
|
43
|
+
*
|
|
44
|
+
* @type {Node}
|
|
45
|
+
*/
|
|
17
46
|
this.inLowNode = inLowNode;
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* The source or current upper bound of the range.
|
|
50
|
+
*
|
|
51
|
+
* @type {Node}
|
|
52
|
+
*/
|
|
18
53
|
this.inHighNode = inHighNode;
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* The target lower bound of the range.
|
|
57
|
+
*
|
|
58
|
+
* @type {Node}
|
|
59
|
+
* @default float(0)
|
|
60
|
+
*/
|
|
19
61
|
this.outLowNode = outLowNode;
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* The target upper bound of the range.
|
|
65
|
+
*
|
|
66
|
+
* @type {Node}
|
|
67
|
+
* @default float(1)
|
|
68
|
+
*/
|
|
20
69
|
this.outHighNode = outHighNode;
|
|
21
70
|
|
|
71
|
+
/**
|
|
72
|
+
* Whether the node value should be clamped before
|
|
73
|
+
* remapping it to the target range.
|
|
74
|
+
*
|
|
75
|
+
* @type {Boolean}
|
|
76
|
+
* @default true
|
|
77
|
+
*/
|
|
22
78
|
this.doClamp = true;
|
|
23
79
|
|
|
24
80
|
}
|
|
@@ -39,7 +95,30 @@ class RemapNode extends Node {
|
|
|
39
95
|
|
|
40
96
|
export default RemapNode;
|
|
41
97
|
|
|
98
|
+
/**
|
|
99
|
+
* TSL function for creating a remap node.
|
|
100
|
+
*
|
|
101
|
+
* @function
|
|
102
|
+
* @param {Node} node - The node that should be remapped.
|
|
103
|
+
* @param {Node} inLowNode - The source or current lower bound of the range.
|
|
104
|
+
* @param {Node} inHighNode - The source or current upper bound of the range.
|
|
105
|
+
* @param {Node} [outLowNode=float(0)] - The target lower bound of the range.
|
|
106
|
+
* @param {Node} [outHighNode=float(1)] - The target upper bound of the range.
|
|
107
|
+
* @returns {RemapNode}
|
|
108
|
+
*/
|
|
42
109
|
export const remap = /*@__PURE__*/ nodeProxy( RemapNode, null, null, { doClamp: false } );
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* TSL function for creating a remap node, but with enabled clamping.
|
|
113
|
+
*
|
|
114
|
+
* @function
|
|
115
|
+
* @param {Node} node - The node that should be remapped.
|
|
116
|
+
* @param {Node} inLowNode - The source or current lower bound of the range.
|
|
117
|
+
* @param {Node} inHighNode - The source or current upper bound of the range.
|
|
118
|
+
* @param {Node} [outLowNode=float(0)] - The target lower bound of the range.
|
|
119
|
+
* @param {Node} [outHighNode=float(1)] - The target upper bound of the range.
|
|
120
|
+
* @returns {RemapNode}
|
|
121
|
+
*/
|
|
43
122
|
export const remapClamp = /*@__PURE__*/ nodeProxy( RemapNode );
|
|
44
123
|
|
|
45
124
|
addMethodChaining( 'remap', remap );
|
|
@@ -2,6 +2,13 @@ import TempNode from '../core/TempNode.js';
|
|
|
2
2
|
import { nodeProxy, vec4, mat2, mat4 } from '../tsl/TSLBase.js';
|
|
3
3
|
import { cos, sin } from '../math/MathNode.js';
|
|
4
4
|
|
|
5
|
+
/** @module RotateNode **/
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Applies a rotation to the given position node.
|
|
9
|
+
*
|
|
10
|
+
* @augments TempNode
|
|
11
|
+
*/
|
|
5
12
|
class RotateNode extends TempNode {
|
|
6
13
|
|
|
7
14
|
static get type() {
|
|
@@ -10,15 +17,40 @@ class RotateNode extends TempNode {
|
|
|
10
17
|
|
|
11
18
|
}
|
|
12
19
|
|
|
20
|
+
/**
|
|
21
|
+
* Constructs a new rotate node.
|
|
22
|
+
*
|
|
23
|
+
* @param {Node} positionNode - The position node.
|
|
24
|
+
* @param {Node} rotationNode - Represents the rotation that is applied to the position node. Depending
|
|
25
|
+
* on whether the position data are 2D or 3D, the rotation is expressed a single float value or an Euler value.
|
|
26
|
+
*/
|
|
13
27
|
constructor( positionNode, rotationNode ) {
|
|
14
28
|
|
|
15
29
|
super();
|
|
16
30
|
|
|
31
|
+
/**
|
|
32
|
+
* The position node.
|
|
33
|
+
*
|
|
34
|
+
* @type {Node}
|
|
35
|
+
*/
|
|
17
36
|
this.positionNode = positionNode;
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Represents the rotation that is applied to the position node.
|
|
40
|
+
* Depending on whether the position data are 2D or 3D, the rotation is expressed a single float value or an Euler value.
|
|
41
|
+
*
|
|
42
|
+
* @type {Node}
|
|
43
|
+
*/
|
|
18
44
|
this.rotationNode = rotationNode;
|
|
19
45
|
|
|
20
46
|
}
|
|
21
47
|
|
|
48
|
+
/**
|
|
49
|
+
* The type of the {@link RotateNode#positionNode} defines the node's type.
|
|
50
|
+
*
|
|
51
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
52
|
+
* @return {String} The node's type.
|
|
53
|
+
*/
|
|
22
54
|
getNodeType( builder ) {
|
|
23
55
|
|
|
24
56
|
return this.positionNode.getNodeType( builder );
|
|
@@ -60,4 +92,13 @@ class RotateNode extends TempNode {
|
|
|
60
92
|
|
|
61
93
|
export default RotateNode;
|
|
62
94
|
|
|
95
|
+
/**
|
|
96
|
+
* TSL function for creating a rotate node.
|
|
97
|
+
*
|
|
98
|
+
* @function
|
|
99
|
+
* @param {Node} positionNode - The position node.
|
|
100
|
+
* @param {Node} rotationNode - Represents the rotation that is applied to the position node. Depending
|
|
101
|
+
* on whether the position data are 2D or 3D, the rotation is expressed a single float value or an Euler value.
|
|
102
|
+
* @returns {RotateNode}
|
|
103
|
+
*/
|
|
63
104
|
export const rotate = /*@__PURE__*/ nodeProxy( RotateNode );
|