super-three 0.170.1 → 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
|
@@ -10,8 +10,15 @@ import { Vector2 } from '../../math/Vector2.js';
|
|
|
10
10
|
import { DepthTexture } from '../../textures/DepthTexture.js';
|
|
11
11
|
import { RenderTarget } from '../../core/RenderTarget.js';
|
|
12
12
|
|
|
13
|
+
/** @module PassNode **/
|
|
14
|
+
|
|
13
15
|
const _size = /*@__PURE__*/ new Vector2();
|
|
14
16
|
|
|
17
|
+
/**
|
|
18
|
+
* Represents the texture of a pass node.
|
|
19
|
+
*
|
|
20
|
+
* @augments module:TextureNode~TextureNode
|
|
21
|
+
*/
|
|
15
22
|
class PassTextureNode extends TextureNode {
|
|
16
23
|
|
|
17
24
|
static get type() {
|
|
@@ -20,10 +27,21 @@ class PassTextureNode extends TextureNode {
|
|
|
20
27
|
|
|
21
28
|
}
|
|
22
29
|
|
|
30
|
+
/**
|
|
31
|
+
* Constructs a new pass texture node.
|
|
32
|
+
*
|
|
33
|
+
* @param {PassNode} passNode - The pass node.
|
|
34
|
+
* @param {Texture} texture - The output texture.
|
|
35
|
+
*/
|
|
23
36
|
constructor( passNode, texture ) {
|
|
24
37
|
|
|
25
38
|
super( texture );
|
|
26
39
|
|
|
40
|
+
/**
|
|
41
|
+
* A reference to the pass node.
|
|
42
|
+
*
|
|
43
|
+
* @type {PassNode}
|
|
44
|
+
*/
|
|
27
45
|
this.passNode = passNode;
|
|
28
46
|
|
|
29
47
|
this.setUpdateMatrix( false );
|
|
@@ -46,6 +64,12 @@ class PassTextureNode extends TextureNode {
|
|
|
46
64
|
|
|
47
65
|
}
|
|
48
66
|
|
|
67
|
+
/**
|
|
68
|
+
* An extension of `PassTextureNode` which allows to manage more than one
|
|
69
|
+
* internal texture. Relevant for the `getPreviousTexture()` related API.
|
|
70
|
+
*
|
|
71
|
+
* @augments module:PassTextureNode~PassTextureNode
|
|
72
|
+
*/
|
|
49
73
|
class PassMultipleTextureNode extends PassTextureNode {
|
|
50
74
|
|
|
51
75
|
static get type() {
|
|
@@ -54,15 +78,40 @@ class PassMultipleTextureNode extends PassTextureNode {
|
|
|
54
78
|
|
|
55
79
|
}
|
|
56
80
|
|
|
81
|
+
/**
|
|
82
|
+
* Constructs a new pass texture node.
|
|
83
|
+
*
|
|
84
|
+
* @param {PassNode} passNode - The pass node.
|
|
85
|
+
* @param {String} textureName - The output texture name.
|
|
86
|
+
* @param {Boolean} [previousTexture=false] - Whether previous frame data should be used or not.
|
|
87
|
+
*/
|
|
57
88
|
constructor( passNode, textureName, previousTexture = false ) {
|
|
58
89
|
|
|
90
|
+
// null is passed to the super call since this class does not
|
|
91
|
+
// use an external texture for rendering pass data into. Instead
|
|
92
|
+
// the texture is managed by the pass node itself
|
|
93
|
+
|
|
59
94
|
super( passNode, null );
|
|
60
95
|
|
|
96
|
+
/**
|
|
97
|
+
* The output texture name.
|
|
98
|
+
*
|
|
99
|
+
* @type {String}
|
|
100
|
+
*/
|
|
61
101
|
this.textureName = textureName;
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* Whether previous frame data should be used or not.
|
|
105
|
+
*
|
|
106
|
+
* @type {Boolean}
|
|
107
|
+
*/
|
|
62
108
|
this.previousTexture = previousTexture;
|
|
63
109
|
|
|
64
110
|
}
|
|
65
111
|
|
|
112
|
+
/**
|
|
113
|
+
* Updates the texture reference of this node.
|
|
114
|
+
*/
|
|
66
115
|
updateTexture() {
|
|
67
116
|
|
|
68
117
|
this.value = this.previousTexture ? this.passNode.getPreviousTexture( this.textureName ) : this.passNode.getTexture( this.textureName );
|
|
@@ -85,6 +134,21 @@ class PassMultipleTextureNode extends PassTextureNode {
|
|
|
85
134
|
|
|
86
135
|
}
|
|
87
136
|
|
|
137
|
+
/**
|
|
138
|
+
* Represents a render pass (sometimes called beauty pass) in context of post processing.
|
|
139
|
+
* This pass produces a render for the given scene and camera and can provide multiple outputs
|
|
140
|
+
* via MRT for further processing.
|
|
141
|
+
*
|
|
142
|
+
* ```js
|
|
143
|
+
* const postProcessing = new PostProcessing( renderer );
|
|
144
|
+
*
|
|
145
|
+
* const scenePass = pass( scene, camera );
|
|
146
|
+
*
|
|
147
|
+
* postProcessing.outputNode = scenePass;
|
|
148
|
+
* ```
|
|
149
|
+
*
|
|
150
|
+
* @augments TempNode
|
|
151
|
+
*/
|
|
88
152
|
class PassNode extends TempNode {
|
|
89
153
|
|
|
90
154
|
static get type() {
|
|
@@ -93,17 +157,69 @@ class PassNode extends TempNode {
|
|
|
93
157
|
|
|
94
158
|
}
|
|
95
159
|
|
|
160
|
+
/**
|
|
161
|
+
* Constructs a new pass node.
|
|
162
|
+
*
|
|
163
|
+
* @param {('color'|'depth')} scope - The scope of the pass. The scope determines whether the node outputs color or depth.
|
|
164
|
+
* @param {Scene} scene - A reference to the scene.
|
|
165
|
+
* @param {Camera} camera - A reference to the camera.
|
|
166
|
+
* @param {Object} options - Options for the internal render target.
|
|
167
|
+
*/
|
|
96
168
|
constructor( scope, scene, camera, options = {} ) {
|
|
97
169
|
|
|
98
170
|
super( 'vec4' );
|
|
99
171
|
|
|
172
|
+
/**
|
|
173
|
+
* The scope of the pass. The scope determines whether the node outputs color or depth.
|
|
174
|
+
*
|
|
175
|
+
* @type {('color'|'depth')}
|
|
176
|
+
*/
|
|
100
177
|
this.scope = scope;
|
|
178
|
+
|
|
179
|
+
/**
|
|
180
|
+
* A reference to the scene.
|
|
181
|
+
*
|
|
182
|
+
* @type {Scene}
|
|
183
|
+
*/
|
|
101
184
|
this.scene = scene;
|
|
185
|
+
|
|
186
|
+
/**
|
|
187
|
+
* A reference to the camera.
|
|
188
|
+
*
|
|
189
|
+
* @type {Camera}
|
|
190
|
+
*/
|
|
102
191
|
this.camera = camera;
|
|
192
|
+
|
|
193
|
+
/**
|
|
194
|
+
* Options for the internal render target.
|
|
195
|
+
*
|
|
196
|
+
* @type {Object}
|
|
197
|
+
*/
|
|
103
198
|
this.options = options;
|
|
104
199
|
|
|
200
|
+
/**
|
|
201
|
+
* The pass's pixel ratio. Will be kept automatically kept in sync with the renderer's pixel ratio.
|
|
202
|
+
*
|
|
203
|
+
* @private
|
|
204
|
+
* @type {Number}
|
|
205
|
+
* @default 1
|
|
206
|
+
*/
|
|
105
207
|
this._pixelRatio = 1;
|
|
208
|
+
|
|
209
|
+
/**
|
|
210
|
+
* The pass's pixel width. Will be kept automatically kept in sync with the renderer's width.
|
|
211
|
+
* @private
|
|
212
|
+
* @type {Number}
|
|
213
|
+
* @default 1
|
|
214
|
+
*/
|
|
106
215
|
this._width = 1;
|
|
216
|
+
|
|
217
|
+
/**
|
|
218
|
+
* The pass's pixel height. Will be kept automatically kept in sync with the renderer's height.
|
|
219
|
+
* @private
|
|
220
|
+
* @type {Number}
|
|
221
|
+
* @default 1
|
|
222
|
+
*/
|
|
107
223
|
this._height = 1;
|
|
108
224
|
|
|
109
225
|
const depthTexture = new DepthTexture();
|
|
@@ -115,31 +231,117 @@ class PassNode extends TempNode {
|
|
|
115
231
|
renderTarget.texture.name = 'output';
|
|
116
232
|
renderTarget.depthTexture = depthTexture;
|
|
117
233
|
|
|
234
|
+
/**
|
|
235
|
+
* The pass's render target.
|
|
236
|
+
*
|
|
237
|
+
* @type {RenderTarget}
|
|
238
|
+
*/
|
|
118
239
|
this.renderTarget = renderTarget;
|
|
119
240
|
|
|
120
|
-
|
|
121
|
-
|
|
241
|
+
/**
|
|
242
|
+
* A dictionary holding the internal result textures.
|
|
243
|
+
*
|
|
244
|
+
* @private
|
|
245
|
+
* @type {Object<String, Texture>}
|
|
246
|
+
*/
|
|
122
247
|
this._textures = {
|
|
123
248
|
output: renderTarget.texture,
|
|
124
249
|
depth: depthTexture
|
|
125
250
|
};
|
|
126
251
|
|
|
252
|
+
/**
|
|
253
|
+
* A dictionary holding the internal texture nodes.
|
|
254
|
+
*
|
|
255
|
+
* @private
|
|
256
|
+
* @type {Object<String, TextureNode>}
|
|
257
|
+
*/
|
|
127
258
|
this._textureNodes = {};
|
|
259
|
+
|
|
260
|
+
/**
|
|
261
|
+
* A dictionary holding the internal depth nodes.
|
|
262
|
+
*
|
|
263
|
+
* @private
|
|
264
|
+
* @type {Object}
|
|
265
|
+
*/
|
|
128
266
|
this._linearDepthNodes = {};
|
|
267
|
+
|
|
268
|
+
/**
|
|
269
|
+
* A dictionary holding the internal viewZ nodes.
|
|
270
|
+
*
|
|
271
|
+
* @private
|
|
272
|
+
* @type {Object}
|
|
273
|
+
*/
|
|
129
274
|
this._viewZNodes = {};
|
|
130
275
|
|
|
276
|
+
/**
|
|
277
|
+
* A dictionary holding the texture data of the previous frame.
|
|
278
|
+
* Used for computing velocity/motion vectors.
|
|
279
|
+
*
|
|
280
|
+
* @private
|
|
281
|
+
* @type {Object<String, Texture>}
|
|
282
|
+
*/
|
|
131
283
|
this._previousTextures = {};
|
|
284
|
+
|
|
285
|
+
/**
|
|
286
|
+
* A dictionary holding the texture nodes of the previous frame.
|
|
287
|
+
* Used for computing velocity/motion vectors.
|
|
288
|
+
*
|
|
289
|
+
* @private
|
|
290
|
+
* @type {Object<String, TextureNode>}
|
|
291
|
+
*/
|
|
132
292
|
this._previousTextureNodes = {};
|
|
133
293
|
|
|
294
|
+
/**
|
|
295
|
+
* The `near` property of the camera as a uniform.
|
|
296
|
+
*
|
|
297
|
+
* @private
|
|
298
|
+
* @type {UniformNode}
|
|
299
|
+
*/
|
|
134
300
|
this._cameraNear = uniform( 0 );
|
|
301
|
+
|
|
302
|
+
/**
|
|
303
|
+
* The `far` property of the camera as a uniform.
|
|
304
|
+
*
|
|
305
|
+
* @private
|
|
306
|
+
* @type {UniformNode}
|
|
307
|
+
*/
|
|
135
308
|
this._cameraFar = uniform( 0 );
|
|
136
309
|
|
|
310
|
+
/**
|
|
311
|
+
* A MRT node configuring the MRT settings.
|
|
312
|
+
*
|
|
313
|
+
* @private
|
|
314
|
+
* @type {MRTNode?}
|
|
315
|
+
* @default null
|
|
316
|
+
*/
|
|
137
317
|
this._mrt = null;
|
|
138
318
|
|
|
319
|
+
/**
|
|
320
|
+
* This flag can be used for type testing.
|
|
321
|
+
*
|
|
322
|
+
* @type {Boolean}
|
|
323
|
+
* @readonly
|
|
324
|
+
* @default true
|
|
325
|
+
*/
|
|
139
326
|
this.isPassNode = true;
|
|
140
327
|
|
|
328
|
+
/**
|
|
329
|
+
* The `updateBeforeType` is set to `NodeUpdateType.FRAME` since the node renders the
|
|
330
|
+
* scene once per frame in its {@link PassNode#updateBefore} method.
|
|
331
|
+
*
|
|
332
|
+
* @type {String}
|
|
333
|
+
* @default 'frame'
|
|
334
|
+
*/
|
|
335
|
+
this.updateBeforeType = NodeUpdateType.FRAME;
|
|
336
|
+
|
|
141
337
|
}
|
|
142
338
|
|
|
339
|
+
/**
|
|
340
|
+
* Sets the given MRT node to setup MRT for this pass.
|
|
341
|
+
*
|
|
342
|
+
* @param {MRTNode} mrt - The MRT object.
|
|
343
|
+
* @return {PassNode} A reference to this pass.
|
|
344
|
+
*/
|
|
143
345
|
setMRT( mrt ) {
|
|
144
346
|
|
|
145
347
|
this._mrt = mrt;
|
|
@@ -148,18 +350,34 @@ class PassNode extends TempNode {
|
|
|
148
350
|
|
|
149
351
|
}
|
|
150
352
|
|
|
353
|
+
/**
|
|
354
|
+
* Returns the current MRT node.
|
|
355
|
+
*
|
|
356
|
+
* @return {MRTNode} The current MRT node.
|
|
357
|
+
*/
|
|
151
358
|
getMRT() {
|
|
152
359
|
|
|
153
360
|
return this._mrt;
|
|
154
361
|
|
|
155
362
|
}
|
|
156
363
|
|
|
364
|
+
/**
|
|
365
|
+
* The method is overwritten so it always returns `true`.
|
|
366
|
+
*
|
|
367
|
+
* @return {Boolean} Whether this node is global or not.
|
|
368
|
+
*/
|
|
157
369
|
isGlobal() {
|
|
158
370
|
|
|
159
371
|
return true;
|
|
160
372
|
|
|
161
373
|
}
|
|
162
374
|
|
|
375
|
+
/**
|
|
376
|
+
* Returns the texture for the given output name.
|
|
377
|
+
*
|
|
378
|
+
* @param {String} name - The output name to get the texture for.
|
|
379
|
+
* @return {Texture} The texture.
|
|
380
|
+
*/
|
|
163
381
|
getTexture( name ) {
|
|
164
382
|
|
|
165
383
|
let texture = this._textures[ name ];
|
|
@@ -169,7 +387,6 @@ class PassNode extends TempNode {
|
|
|
169
387
|
const refTexture = this.renderTarget.texture;
|
|
170
388
|
|
|
171
389
|
texture = refTexture.clone();
|
|
172
|
-
texture.isRenderTargetTexture = true;
|
|
173
390
|
texture.name = name;
|
|
174
391
|
|
|
175
392
|
this._textures[ name ] = texture;
|
|
@@ -182,6 +399,12 @@ class PassNode extends TempNode {
|
|
|
182
399
|
|
|
183
400
|
}
|
|
184
401
|
|
|
402
|
+
/**
|
|
403
|
+
* Returns the texture holding the data of the previous frame for the given output name.
|
|
404
|
+
*
|
|
405
|
+
* @param {String} name - The output name to get the texture for.
|
|
406
|
+
* @return {Texture} The texture holding the data of the previous frame.
|
|
407
|
+
*/
|
|
185
408
|
getPreviousTexture( name ) {
|
|
186
409
|
|
|
187
410
|
let texture = this._previousTextures[ name ];
|
|
@@ -189,7 +412,6 @@ class PassNode extends TempNode {
|
|
|
189
412
|
if ( texture === undefined ) {
|
|
190
413
|
|
|
191
414
|
texture = this.getTexture( name ).clone();
|
|
192
|
-
texture.isRenderTargetTexture = true;
|
|
193
415
|
|
|
194
416
|
this._previousTextures[ name ] = texture;
|
|
195
417
|
|
|
@@ -199,6 +421,11 @@ class PassNode extends TempNode {
|
|
|
199
421
|
|
|
200
422
|
}
|
|
201
423
|
|
|
424
|
+
/**
|
|
425
|
+
* Switches current and previous textures for the given output name.
|
|
426
|
+
*
|
|
427
|
+
* @param {String} name - The output name.
|
|
428
|
+
*/
|
|
202
429
|
toggleTexture( name ) {
|
|
203
430
|
|
|
204
431
|
const prevTexture = this._previousTextures[ name ];
|
|
@@ -220,6 +447,12 @@ class PassNode extends TempNode {
|
|
|
220
447
|
|
|
221
448
|
}
|
|
222
449
|
|
|
450
|
+
/**
|
|
451
|
+
* Returns the texture node for the given output name.
|
|
452
|
+
*
|
|
453
|
+
* @param {String} [name='output'] - The output name to get the texture node for.
|
|
454
|
+
* @return {TextureNode} The texture node.
|
|
455
|
+
*/
|
|
223
456
|
getTextureNode( name = 'output' ) {
|
|
224
457
|
|
|
225
458
|
let textureNode = this._textureNodes[ name ];
|
|
@@ -236,6 +469,12 @@ class PassNode extends TempNode {
|
|
|
236
469
|
|
|
237
470
|
}
|
|
238
471
|
|
|
472
|
+
/**
|
|
473
|
+
* Returns the previous texture node for the given output name.
|
|
474
|
+
*
|
|
475
|
+
* @param {String} [name='output'] - The output name to get the previous texture node for.
|
|
476
|
+
* @return {TextureNode} The previous texture node.
|
|
477
|
+
*/
|
|
239
478
|
getPreviousTextureNode( name = 'output' ) {
|
|
240
479
|
|
|
241
480
|
let textureNode = this._previousTextureNodes[ name ];
|
|
@@ -254,6 +493,12 @@ class PassNode extends TempNode {
|
|
|
254
493
|
|
|
255
494
|
}
|
|
256
495
|
|
|
496
|
+
/**
|
|
497
|
+
* Returns a viewZ node of this pass.
|
|
498
|
+
*
|
|
499
|
+
* @param {String} [name='depth'] - The output name to get the viewZ node for. In most cases the default `'depth'` can be used however the parameter exists for custom depth outputs.
|
|
500
|
+
* @return {Node} The viewZ node.
|
|
501
|
+
*/
|
|
257
502
|
getViewZNode( name = 'depth' ) {
|
|
258
503
|
|
|
259
504
|
let viewZNode = this._viewZNodes[ name ];
|
|
@@ -271,6 +516,12 @@ class PassNode extends TempNode {
|
|
|
271
516
|
|
|
272
517
|
}
|
|
273
518
|
|
|
519
|
+
/**
|
|
520
|
+
* Returns a linear depth node of this pass.
|
|
521
|
+
*
|
|
522
|
+
* @param {String} [name='depth'] - The output name to get the linear depth node for. In most cases the default `'depth'` can be used however the parameter exists for custom depth outputs.
|
|
523
|
+
* @return {Node} The linear depth node.
|
|
524
|
+
*/
|
|
274
525
|
getLinearDepthNode( name = 'depth' ) {
|
|
275
526
|
|
|
276
527
|
let linearDepthNode = this._linearDepthNodes[ name ];
|
|
@@ -302,8 +553,6 @@ class PassNode extends TempNode {
|
|
|
302
553
|
|
|
303
554
|
}
|
|
304
555
|
|
|
305
|
-
this.renderTarget.depthTexture.isMultisampleRenderTargetTexture = this.renderTarget.samples > 1;
|
|
306
|
-
|
|
307
556
|
return this.scope === PassNode.COLOR ? this.getTextureNode() : this.getLinearDepthNode();
|
|
308
557
|
|
|
309
558
|
}
|
|
@@ -341,6 +590,12 @@ class PassNode extends TempNode {
|
|
|
341
590
|
|
|
342
591
|
}
|
|
343
592
|
|
|
593
|
+
/**
|
|
594
|
+
* Sets the size of the pass's render target. Honors the pixel ratio.
|
|
595
|
+
*
|
|
596
|
+
* @param {Number} width - The width to set.
|
|
597
|
+
* @param {Number} height - The height to set.
|
|
598
|
+
*/
|
|
344
599
|
setSize( width, height ) {
|
|
345
600
|
|
|
346
601
|
this._width = width;
|
|
@@ -353,6 +608,11 @@ class PassNode extends TempNode {
|
|
|
353
608
|
|
|
354
609
|
}
|
|
355
610
|
|
|
611
|
+
/**
|
|
612
|
+
* Sets the pixel ratio the pass's render target and updates the size.
|
|
613
|
+
*
|
|
614
|
+
* @param {Number} pixelRatio - The pixel ratio to set.
|
|
615
|
+
*/
|
|
356
616
|
setPixelRatio( pixelRatio ) {
|
|
357
617
|
|
|
358
618
|
this._pixelRatio = pixelRatio;
|
|
@@ -361,6 +621,9 @@ class PassNode extends TempNode {
|
|
|
361
621
|
|
|
362
622
|
}
|
|
363
623
|
|
|
624
|
+
/**
|
|
625
|
+
* Frees internal resources. Should be called when the node is no longer in use.
|
|
626
|
+
*/
|
|
364
627
|
dispose() {
|
|
365
628
|
|
|
366
629
|
this.renderTarget.dispose();
|
|
@@ -375,6 +638,34 @@ PassNode.DEPTH = 'depth';
|
|
|
375
638
|
|
|
376
639
|
export default PassNode;
|
|
377
640
|
|
|
641
|
+
/**
|
|
642
|
+
* TSL function for creating a pass node.
|
|
643
|
+
*
|
|
644
|
+
* @function
|
|
645
|
+
* @param {Scene} scene - A reference to the scene.
|
|
646
|
+
* @param {Camera} camera - A reference to the camera.
|
|
647
|
+
* @param {Object} options - Options for the internal render target.
|
|
648
|
+
* @returns {PassNode}
|
|
649
|
+
*/
|
|
378
650
|
export const pass = ( scene, camera, options ) => nodeObject( new PassNode( PassNode.COLOR, scene, camera, options ) );
|
|
651
|
+
|
|
652
|
+
/**
|
|
653
|
+
* TSL function for creating a pass texture node.
|
|
654
|
+
*
|
|
655
|
+
* @function
|
|
656
|
+
* @param {PassNode} pass - The pass node.
|
|
657
|
+
* @param {Texture} texture - The output texture.
|
|
658
|
+
* @returns {PassTextureNode}
|
|
659
|
+
*/
|
|
379
660
|
export const passTexture = ( pass, texture ) => nodeObject( new PassTextureNode( pass, texture ) );
|
|
380
|
-
|
|
661
|
+
|
|
662
|
+
/**
|
|
663
|
+
* TSL function for creating a depth pass node.
|
|
664
|
+
*
|
|
665
|
+
* @function
|
|
666
|
+
* @param {Scene} scene - A reference to the scene.
|
|
667
|
+
* @param {Camera} camera - A reference to the camera.
|
|
668
|
+
* @param {Object} options - Options for the internal render target.
|
|
669
|
+
* @returns {PassNode}
|
|
670
|
+
*/
|
|
671
|
+
export const depthPass = ( scene, camera, options ) => nodeObject( new PassNode( PassNode.DEPTH, scene, camera, options ) );
|
|
@@ -1,6 +1,14 @@
|
|
|
1
1
|
import TempNode from '../core/TempNode.js';
|
|
2
2
|
import { nodeProxy } from '../tsl/TSLBase.js';
|
|
3
3
|
|
|
4
|
+
/** @module PosterizeNode **/
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Represents a posterize effect which reduces the number of colors
|
|
8
|
+
* in an image, resulting in a more blocky and stylized appearance.
|
|
9
|
+
*
|
|
10
|
+
* @augments TempNode
|
|
11
|
+
*/
|
|
4
12
|
class PosterizeNode extends TempNode {
|
|
5
13
|
|
|
6
14
|
static get type() {
|
|
@@ -9,11 +17,28 @@ class PosterizeNode extends TempNode {
|
|
|
9
17
|
|
|
10
18
|
}
|
|
11
19
|
|
|
20
|
+
/**
|
|
21
|
+
* Constructs a new posterize node.
|
|
22
|
+
*
|
|
23
|
+
* @param {Node} sourceNode - The input color.
|
|
24
|
+
* @param {Node} stepsNode - Controls the intensity of the posterization effect. A lower number results in a more blocky appearance.
|
|
25
|
+
*/
|
|
12
26
|
constructor( sourceNode, stepsNode ) {
|
|
13
27
|
|
|
14
28
|
super();
|
|
15
29
|
|
|
30
|
+
/**
|
|
31
|
+
* The input color.
|
|
32
|
+
*
|
|
33
|
+
* @type {Node}
|
|
34
|
+
*/
|
|
16
35
|
this.sourceNode = sourceNode;
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Controls the intensity of the posterization effect. A lower number results in a more blocky appearance.
|
|
39
|
+
*
|
|
40
|
+
* @type {Node}
|
|
41
|
+
*/
|
|
17
42
|
this.stepsNode = stepsNode;
|
|
18
43
|
|
|
19
44
|
}
|
|
@@ -30,4 +55,12 @@ class PosterizeNode extends TempNode {
|
|
|
30
55
|
|
|
31
56
|
export default PosterizeNode;
|
|
32
57
|
|
|
58
|
+
/**
|
|
59
|
+
* TSL function for creating a posterize node.
|
|
60
|
+
*
|
|
61
|
+
* @function
|
|
62
|
+
* @param {Node} sourceNode - The input color.
|
|
63
|
+
* @param {Node} stepsNode - Controls the intensity of the posterization effect. A lower number results in a more blocky appearance.
|
|
64
|
+
* @returns {PosterizeNode}
|
|
65
|
+
*/
|
|
33
66
|
export const posterize = /*@__PURE__*/ nodeProxy( PosterizeNode );
|
|
@@ -4,6 +4,31 @@ import { addMethodChaining, nodeObject } from '../tsl/TSLCore.js';
|
|
|
4
4
|
import { NoColorSpace, NoToneMapping } from '../../constants.js';
|
|
5
5
|
import { ColorManagement } from '../../math/ColorManagement.js';
|
|
6
6
|
|
|
7
|
+
/** @module RenderOutputNode **/
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Normally, tone mapping and color conversion happens automatically
|
|
11
|
+
* before outputting pixel too the default (screen) framebuffer. In certain
|
|
12
|
+
* post processing setups this happens to late because certain effects
|
|
13
|
+
* require e.g. sRGB input. For such scenarios, `RenderOutputNode` can be used
|
|
14
|
+
* to apply tone mapping and color space conversion at an arbitrary point
|
|
15
|
+
* in the effect chain.
|
|
16
|
+
*
|
|
17
|
+
* When applying tone mapping and color space conversion manually with this node,
|
|
18
|
+
* you have to set {@link PostProcessing#outputColorTransform} to `false`.
|
|
19
|
+
*
|
|
20
|
+
* ```js
|
|
21
|
+
* const postProcessing = new PostProcessing( renderer );
|
|
22
|
+
* postProcessing.outputColorTransform = false;
|
|
23
|
+
*
|
|
24
|
+
* const scenePass = pass( scene, camera );
|
|
25
|
+
* const outputPass = renderOutput( scenePass );
|
|
26
|
+
*
|
|
27
|
+
* postProcessing.outputNode = outputPass;
|
|
28
|
+
* ```
|
|
29
|
+
*
|
|
30
|
+
* @augments TempNode
|
|
31
|
+
*/
|
|
7
32
|
class RenderOutputNode extends TempNode {
|
|
8
33
|
|
|
9
34
|
static get type() {
|
|
@@ -12,15 +37,46 @@ class RenderOutputNode extends TempNode {
|
|
|
12
37
|
|
|
13
38
|
}
|
|
14
39
|
|
|
40
|
+
/**
|
|
41
|
+
* Constructs a new render output node.
|
|
42
|
+
*
|
|
43
|
+
* @param {Node} colorNode - The color node to process.
|
|
44
|
+
* @param {Number} toneMapping - The tone mapping type.
|
|
45
|
+
* @param {String} outputColorSpace - The output color space.
|
|
46
|
+
*/
|
|
15
47
|
constructor( colorNode, toneMapping, outputColorSpace ) {
|
|
16
48
|
|
|
17
49
|
super( 'vec4' );
|
|
18
50
|
|
|
51
|
+
/**
|
|
52
|
+
* The color node to process.
|
|
53
|
+
*
|
|
54
|
+
* @type {Node}
|
|
55
|
+
*/
|
|
19
56
|
this.colorNode = colorNode;
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* The tone mapping type.
|
|
60
|
+
*
|
|
61
|
+
* @type {Number?}
|
|
62
|
+
*/
|
|
20
63
|
this.toneMapping = toneMapping;
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* The output color space.
|
|
67
|
+
*
|
|
68
|
+
* @type {String?}
|
|
69
|
+
*/
|
|
21
70
|
this.outputColorSpace = outputColorSpace;
|
|
22
71
|
|
|
23
|
-
|
|
72
|
+
/**
|
|
73
|
+
* This flag can be used for type testing.
|
|
74
|
+
*
|
|
75
|
+
* @type {Boolean}
|
|
76
|
+
* @readonly
|
|
77
|
+
* @default true
|
|
78
|
+
*/
|
|
79
|
+
this.isRenderOutputNode = true;
|
|
24
80
|
|
|
25
81
|
}
|
|
26
82
|
|
|
@@ -55,6 +111,15 @@ class RenderOutputNode extends TempNode {
|
|
|
55
111
|
|
|
56
112
|
export default RenderOutputNode;
|
|
57
113
|
|
|
114
|
+
/**
|
|
115
|
+
* TSL function for creating a posterize node.
|
|
116
|
+
*
|
|
117
|
+
* @function
|
|
118
|
+
* @param {Node} color - The color node to process.
|
|
119
|
+
* @param {Number?} [toneMapping=null] - The tone mapping type.
|
|
120
|
+
* @param {String?} [outputColorSpace=null] - The output color space.
|
|
121
|
+
* @returns {RenderOutputNode}
|
|
122
|
+
*/
|
|
58
123
|
export const renderOutput = ( color, toneMapping = null, outputColorSpace = null ) => nodeObject( new RenderOutputNode( nodeObject( color ), toneMapping, outputColorSpace ) );
|
|
59
124
|
|
|
60
125
|
addMethodChaining( 'renderOutput', renderOutput );
|