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
|
@@ -3,6 +3,13 @@ import { nodeImmutable, float } from '../tsl/TSLBase.js';
|
|
|
3
3
|
|
|
4
4
|
import { BackSide, WebGLCoordinateSystem } from '../../constants.js';
|
|
5
5
|
|
|
6
|
+
/** @module FrontFacingNode **/
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* This node can be used to evaluate whether a primitive is front or back facing.
|
|
10
|
+
*
|
|
11
|
+
* @augments Node
|
|
12
|
+
*/
|
|
6
13
|
class FrontFacingNode extends Node {
|
|
7
14
|
|
|
8
15
|
static get type() {
|
|
@@ -11,10 +18,20 @@ class FrontFacingNode extends Node {
|
|
|
11
18
|
|
|
12
19
|
}
|
|
13
20
|
|
|
21
|
+
/**
|
|
22
|
+
* Constructs a new front facing node.
|
|
23
|
+
*/
|
|
14
24
|
constructor() {
|
|
15
25
|
|
|
16
26
|
super( 'bool' );
|
|
17
27
|
|
|
28
|
+
/**
|
|
29
|
+
* This flag can be used for type testing.
|
|
30
|
+
*
|
|
31
|
+
* @type {Boolean}
|
|
32
|
+
* @readonly
|
|
33
|
+
* @default true
|
|
34
|
+
*/
|
|
18
35
|
this.isFrontFacingNode = true;
|
|
19
36
|
|
|
20
37
|
}
|
|
@@ -41,5 +58,17 @@ class FrontFacingNode extends Node {
|
|
|
41
58
|
|
|
42
59
|
export default FrontFacingNode;
|
|
43
60
|
|
|
61
|
+
/**
|
|
62
|
+
* TSL object that represents whether a primitive is front or back facing
|
|
63
|
+
*
|
|
64
|
+
* @type {FrontFacingNode<bool>}
|
|
65
|
+
*/
|
|
44
66
|
export const frontFacing = /*@__PURE__*/ nodeImmutable( FrontFacingNode );
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* TSL object that represents the front facing status as a number instead of a bool.
|
|
70
|
+
* `1` means front facing, `-1` means back facing.
|
|
71
|
+
*
|
|
72
|
+
* @type {Node<float>}
|
|
73
|
+
*/
|
|
45
74
|
export const faceDirection = /*@__PURE__*/ float( frontFacing ).mul( 2.0 ).sub( 1.0 );
|
|
@@ -10,6 +10,8 @@ import { Fn, nodeProxy, vec3 } from '../tsl/TSLBase.js';
|
|
|
10
10
|
|
|
11
11
|
import { TangentSpaceNormalMap, ObjectSpaceNormalMap } from '../../constants.js';
|
|
12
12
|
|
|
13
|
+
/** @module NormalMapNode **/
|
|
14
|
+
|
|
13
15
|
// Normal Mapping Without Precomputed Tangents
|
|
14
16
|
// http://www.thetenthplanet.de/archives/1180
|
|
15
17
|
|
|
@@ -37,6 +39,15 @@ const perturbNormal2Arb = /*@__PURE__*/ Fn( ( inputs ) => {
|
|
|
37
39
|
|
|
38
40
|
} );
|
|
39
41
|
|
|
42
|
+
/**
|
|
43
|
+
* This class can be used for applying normals maps to materials.
|
|
44
|
+
*
|
|
45
|
+
* ```js
|
|
46
|
+
* material.normalNode = normalMap( texture( normalTex ) );
|
|
47
|
+
* ```
|
|
48
|
+
*
|
|
49
|
+
* @augments TempNode
|
|
50
|
+
*/
|
|
40
51
|
class NormalMapNode extends TempNode {
|
|
41
52
|
|
|
42
53
|
static get type() {
|
|
@@ -45,13 +56,37 @@ class NormalMapNode extends TempNode {
|
|
|
45
56
|
|
|
46
57
|
}
|
|
47
58
|
|
|
59
|
+
/**
|
|
60
|
+
* Constructs a new normal map node.
|
|
61
|
+
*
|
|
62
|
+
* @param {Node<vec3>} node - Represents the normal map data.
|
|
63
|
+
* @param {Node<vec2>?} [scaleNode=null] - Controls the intensity of the effect.
|
|
64
|
+
*/
|
|
48
65
|
constructor( node, scaleNode = null ) {
|
|
49
66
|
|
|
50
67
|
super( 'vec3' );
|
|
51
68
|
|
|
69
|
+
/**
|
|
70
|
+
* Represents the normal map data.
|
|
71
|
+
*
|
|
72
|
+
* @type {Node<vec3>}
|
|
73
|
+
*/
|
|
52
74
|
this.node = node;
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Controls the intensity of the effect.
|
|
78
|
+
*
|
|
79
|
+
* @type {Node<vec2>?}
|
|
80
|
+
* @default null
|
|
81
|
+
*/
|
|
53
82
|
this.scaleNode = scaleNode;
|
|
54
83
|
|
|
84
|
+
/**
|
|
85
|
+
* The normal map type.
|
|
86
|
+
*
|
|
87
|
+
* @type {(TangentSpaceNormalMap|ObjectSpaceNormalMap)}
|
|
88
|
+
* @default TangentSpaceNormalMap
|
|
89
|
+
*/
|
|
55
90
|
this.normalMapType = TangentSpaceNormalMap;
|
|
56
91
|
|
|
57
92
|
}
|
|
@@ -103,4 +138,12 @@ class NormalMapNode extends TempNode {
|
|
|
103
138
|
|
|
104
139
|
export default NormalMapNode;
|
|
105
140
|
|
|
141
|
+
/**
|
|
142
|
+
* TSL function for creating a normal map node.
|
|
143
|
+
*
|
|
144
|
+
* @function
|
|
145
|
+
* @param {Node<vec3>} node - Represents the normal map data.
|
|
146
|
+
* @param {Node<vec2>?} [scaleNode=null] - Controls the intensity of the effect.
|
|
147
|
+
* @returns {NormalMapNode}
|
|
148
|
+
*/
|
|
106
149
|
export const normalMap = /*@__PURE__*/ nodeProxy( NormalMapNode );
|
|
@@ -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 ];
|
|
@@ -295,14 +546,14 @@ class PassNode extends TempNode {
|
|
|
295
546
|
|
|
296
547
|
this.renderTarget.samples = this.options.samples === undefined ? renderer.samples : this.options.samples;
|
|
297
548
|
|
|
298
|
-
// Disable MSAA for WebGL backend for now
|
|
549
|
+
// TODO: Disable MSAA for WebGL backend for now
|
|
299
550
|
if ( renderer.backend.isWebGLBackend === true ) {
|
|
300
551
|
|
|
301
552
|
this.renderTarget.samples = 0;
|
|
302
553
|
|
|
303
554
|
}
|
|
304
555
|
|
|
305
|
-
this.renderTarget.
|
|
556
|
+
this.renderTarget.texture.type = renderer.getColorBufferType();
|
|
306
557
|
|
|
307
558
|
return this.scope === PassNode.COLOR ? this.getTextureNode() : this.getLinearDepthNode();
|
|
308
559
|
|
|
@@ -341,6 +592,12 @@ class PassNode extends TempNode {
|
|
|
341
592
|
|
|
342
593
|
}
|
|
343
594
|
|
|
595
|
+
/**
|
|
596
|
+
* Sets the size of the pass's render target. Honors the pixel ratio.
|
|
597
|
+
*
|
|
598
|
+
* @param {Number} width - The width to set.
|
|
599
|
+
* @param {Number} height - The height to set.
|
|
600
|
+
*/
|
|
344
601
|
setSize( width, height ) {
|
|
345
602
|
|
|
346
603
|
this._width = width;
|
|
@@ -353,6 +610,11 @@ class PassNode extends TempNode {
|
|
|
353
610
|
|
|
354
611
|
}
|
|
355
612
|
|
|
613
|
+
/**
|
|
614
|
+
* Sets the pixel ratio the pass's render target and updates the size.
|
|
615
|
+
*
|
|
616
|
+
* @param {Number} pixelRatio - The pixel ratio to set.
|
|
617
|
+
*/
|
|
356
618
|
setPixelRatio( pixelRatio ) {
|
|
357
619
|
|
|
358
620
|
this._pixelRatio = pixelRatio;
|
|
@@ -361,6 +623,9 @@ class PassNode extends TempNode {
|
|
|
361
623
|
|
|
362
624
|
}
|
|
363
625
|
|
|
626
|
+
/**
|
|
627
|
+
* Frees internal resources. Should be called when the node is no longer in use.
|
|
628
|
+
*/
|
|
364
629
|
dispose() {
|
|
365
630
|
|
|
366
631
|
this.renderTarget.dispose();
|
|
@@ -375,6 +640,34 @@ PassNode.DEPTH = 'depth';
|
|
|
375
640
|
|
|
376
641
|
export default PassNode;
|
|
377
642
|
|
|
643
|
+
/**
|
|
644
|
+
* TSL function for creating a pass node.
|
|
645
|
+
*
|
|
646
|
+
* @function
|
|
647
|
+
* @param {Scene} scene - A reference to the scene.
|
|
648
|
+
* @param {Camera} camera - A reference to the camera.
|
|
649
|
+
* @param {Object} options - Options for the internal render target.
|
|
650
|
+
* @returns {PassNode}
|
|
651
|
+
*/
|
|
378
652
|
export const pass = ( scene, camera, options ) => nodeObject( new PassNode( PassNode.COLOR, scene, camera, options ) );
|
|
653
|
+
|
|
654
|
+
/**
|
|
655
|
+
* TSL function for creating a pass texture node.
|
|
656
|
+
*
|
|
657
|
+
* @function
|
|
658
|
+
* @param {PassNode} pass - The pass node.
|
|
659
|
+
* @param {Texture} texture - The output texture.
|
|
660
|
+
* @returns {PassTextureNode}
|
|
661
|
+
*/
|
|
379
662
|
export const passTexture = ( pass, texture ) => nodeObject( new PassTextureNode( pass, texture ) );
|
|
380
|
-
|
|
663
|
+
|
|
664
|
+
/**
|
|
665
|
+
* TSL function for creating a depth pass node.
|
|
666
|
+
*
|
|
667
|
+
* @function
|
|
668
|
+
* @param {Scene} scene - A reference to the scene.
|
|
669
|
+
* @param {Camera} camera - A reference to the camera.
|
|
670
|
+
* @param {Object} options - Options for the internal render target.
|
|
671
|
+
* @returns {PassNode}
|
|
672
|
+
*/
|
|
673
|
+
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 );
|