super-three 0.171.0 → 0.172.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/build/three.cjs +157 -49
- package/build/three.core.js +104 -42
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +53 -8
- package/build/three.module.min.js +1 -1
- package/build/three.tsl.js +10 -5
- package/build/three.tsl.min.js +1 -1
- package/build/three.webgpu.js +21191 -1008
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +21189 -1008
- package/build/three.webgpu.nodes.min.js +1 -1
- package/examples/jsm/Addons.js +0 -5
- package/examples/jsm/animation/CCDIKSolver.js +3 -2
- package/examples/jsm/controls/ArcballControls.js +28 -19
- package/examples/jsm/controls/OrbitControls.js +5 -4
- package/examples/jsm/csm/CSMShadowNode.js +16 -11
- package/examples/jsm/curves/NURBSCurve.js +1 -1
- package/examples/jsm/curves/NURBSUtils.js +3 -0
- package/examples/jsm/effects/OutlineEffect.js +1 -1
- package/examples/jsm/exporters/GLTFExporter.js +11 -7
- package/examples/jsm/exporters/KTX2Exporter.js +1 -1
- package/examples/jsm/exporters/PLYExporter.js +2 -2
- package/examples/jsm/helpers/TextureHelperGPU.js +15 -5
- package/examples/jsm/helpers/VertexNormalsHelper.js +2 -0
- package/examples/jsm/lights/LightProbeGenerator.js +3 -3
- package/examples/jsm/lines/webgpu/LineSegments2.js +15 -6
- package/examples/jsm/loaders/3MFLoader.js +6 -3
- package/examples/jsm/loaders/BVHLoader.js +1 -1
- package/examples/jsm/loaders/ColladaLoader.js +5 -5
- package/examples/jsm/loaders/DDSLoader.js +42 -0
- package/examples/jsm/loaders/GCodeLoader.js +1 -1
- package/examples/jsm/loaders/GLTFLoader.js +22 -2
- package/examples/jsm/loaders/KTX2Loader.js +6 -1
- package/examples/jsm/loaders/KTXLoader.js +4 -4
- package/examples/jsm/loaders/LDrawLoader.js +1 -1
- package/examples/jsm/loaders/LottieLoader.js +1 -1
- package/examples/jsm/loaders/MTLLoader.js +1 -0
- package/examples/jsm/loaders/NRRDLoader.js +1 -1
- package/examples/jsm/loaders/PLYLoader.js +7 -7
- package/examples/jsm/loaders/PVRLoader.js +1 -1
- package/examples/jsm/loaders/SVGLoader.js +2 -2
- package/examples/jsm/loaders/TDSLoader.js +1 -1
- package/examples/jsm/loaders/VRMLLoader.js +7 -7
- package/examples/jsm/loaders/lwo/IFFParser.js +4 -4
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +1 -1
- package/examples/jsm/math/ConvexHull.js +1 -1
- package/examples/jsm/math/OBB.js +17 -0
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +10 -10
- package/examples/jsm/misc/Volume.js +20 -12
- package/examples/jsm/misc/VolumeSlice.js +2 -2
- package/examples/jsm/modifiers/CurveModifier.js +10 -8
- package/examples/jsm/modifiers/CurveModifierGPU.js +9 -7
- package/examples/jsm/modifiers/SimplifyModifier.js +2 -2
- package/examples/jsm/objects/GroundedSkybox.js +4 -4
- package/examples/jsm/objects/Sky.js +2 -2
- package/examples/jsm/objects/SkyMesh.js +3 -3
- package/examples/jsm/objects/Water2.js +1 -1
- package/examples/jsm/objects/Water2Mesh.js +2 -2
- package/examples/jsm/objects/WaterMesh.js +4 -4
- package/examples/jsm/postprocessing/BloomPass.js +2 -2
- package/examples/jsm/postprocessing/EffectComposer.js +1 -2
- package/examples/jsm/postprocessing/OutlinePass.js +4 -4
- package/examples/jsm/postprocessing/SAOPass.js +1 -2
- package/examples/jsm/postprocessing/SMAAPass.js +1 -3
- package/examples/jsm/postprocessing/SSAOPass.js +2 -4
- package/examples/jsm/postprocessing/SSRPass.js +2 -4
- package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -2
- package/examples/jsm/renderers/SVGRenderer.js +6 -4
- package/examples/jsm/shaders/BokehShader2.js +1 -1
- package/examples/jsm/shaders/GodRaysShader.js +3 -3
- package/examples/jsm/shaders/SobelOperatorShader.js +1 -1
- package/examples/jsm/tsl/display/AfterImageNode.js +93 -4
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +46 -2
- package/examples/jsm/tsl/display/AnamorphicNode.js +118 -5
- package/examples/jsm/tsl/display/BleachBypass.js +10 -0
- package/examples/jsm/tsl/display/BloomNode.js +233 -26
- package/examples/jsm/tsl/display/DenoiseNode.js +141 -25
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +80 -1
- package/examples/jsm/tsl/display/DotScreenNode.js +50 -5
- package/examples/jsm/tsl/display/FXAANode.js +52 -3
- package/examples/jsm/tsl/display/FilmNode.js +47 -1
- package/examples/jsm/tsl/display/GTAONode.js +210 -14
- package/examples/jsm/tsl/display/GaussianBlurNode.js +152 -8
- package/examples/jsm/tsl/display/LensflareNode.js +131 -13
- package/examples/jsm/tsl/display/Lut3DNode.js +55 -1
- package/examples/jsm/tsl/display/MotionBlur.js +12 -2
- package/examples/jsm/tsl/display/OutlineNode.js +343 -26
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +36 -2
- package/examples/jsm/tsl/display/PixelationPassNode.js +142 -9
- package/examples/jsm/tsl/display/RGBShiftNode.js +49 -2
- package/examples/jsm/tsl/display/SMAANode.js +187 -46
- package/examples/jsm/tsl/display/SSAAPassNode.js +110 -25
- package/examples/jsm/tsl/display/SSRNode.js +194 -21
- package/examples/jsm/tsl/display/Sepia.js +9 -0
- package/examples/jsm/tsl/display/SobelOperatorNode.js +54 -4
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +79 -3
- package/examples/jsm/tsl/display/StereoPassNode.js +41 -3
- package/examples/jsm/tsl/display/TRAAPassNode.js +116 -21
- package/examples/jsm/tsl/display/TransitionNode.js +71 -6
- package/examples/jsm/tsl/display/hashBlur.js +14 -3
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +40 -34
- package/examples/jsm/utils/BufferGeometryUtils.js +1 -1
- package/examples/jsm/utils/CameraUtils.js +4 -1
- package/examples/jsm/utils/GeometryUtils.js +22 -19
- package/examples/jsm/utils/SceneUtils.js +2 -2
- package/examples/jsm/webxr/XRControllerModelFactory.js +6 -1
- package/examples/jsm/webxr/XREstimatedLight.js +1 -1
- package/package.json +8 -3
- package/src/Three.Core.js +2 -0
- package/src/Three.Legacy.js +0 -21
- package/src/Three.TSL.js +9 -4
- package/src/Three.WebGPU.Nodes.js +2 -2
- package/src/Three.WebGPU.js +2 -2
- package/src/animation/PropertyBinding.js +2 -2
- package/src/cameras/PerspectiveCamera.js +18 -2
- package/src/constants.js +1 -1
- package/src/core/RenderTarget.js +18 -0
- package/src/core/RenderTarget3D.js +22 -0
- package/src/core/RenderTargetArray.js +22 -0
- package/src/extras/Earcut.js +1 -1
- package/src/extras/PMREMGenerator.js +20 -0
- package/src/extras/TextureUtils.js +6 -0
- package/src/helpers/CameraHelper.js +16 -13
- package/src/loaders/nodes/NodeLoader.js +59 -0
- package/src/loaders/nodes/NodeMaterialLoader.js +45 -0
- package/src/loaders/nodes/NodeObjectLoader.js +61 -0
- package/src/materials/nodes/InstancedPointsNodeMaterial.js +72 -19
- package/src/materials/nodes/Line2NodeMaterial.js +128 -34
- package/src/materials/nodes/LineBasicNodeMaterial.js +17 -2
- package/src/materials/nodes/LineDashedNodeMaterial.js +78 -5
- package/src/materials/nodes/MeshBasicNodeMaterial.js +56 -0
- package/src/materials/nodes/MeshLambertNodeMaterial.js +35 -0
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +22 -2
- package/src/materials/nodes/MeshNormalNodeMaterial.js +21 -2
- package/src/materials/nodes/MeshPhongNodeMaterial.js +64 -1
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +269 -0
- package/src/materials/nodes/MeshSSSNodeMaterial.js +97 -6
- package/src/materials/nodes/MeshStandardNodeMaterial.js +78 -0
- package/src/materials/nodes/MeshToonNodeMaterial.js +28 -0
- package/src/materials/nodes/NodeMaterial.js +474 -21
- package/src/materials/nodes/PointsNodeMaterial.js +22 -13
- package/src/materials/nodes/ShadowNodeMaterial.js +29 -0
- package/src/materials/nodes/SpriteNodeMaterial.js +77 -19
- package/src/materials/nodes/VolumeNodeMaterial.js +80 -4
- package/src/materials/nodes/manager/NodeMaterialObserver.js +87 -0
- package/src/nodes/Nodes.js +1 -6
- package/src/nodes/TSL.js +2 -3
- package/src/nodes/accessors/AccessorsUtils.js +27 -0
- package/src/nodes/accessors/Arrays.js +24 -5
- package/src/nodes/accessors/BatchNode.js +39 -3
- package/src/nodes/accessors/Bitangent.js +37 -0
- package/src/nodes/accessors/BufferAttributeNode.js +178 -5
- package/src/nodes/accessors/BufferNode.js +63 -0
- package/src/nodes/accessors/BuiltinNode.js +38 -0
- package/src/nodes/accessors/Camera.js +49 -0
- package/src/nodes/accessors/ClippingNode.js +71 -2
- package/src/nodes/accessors/CubeTextureNode.js +64 -0
- package/src/nodes/accessors/InstanceNode.js +85 -2
- package/src/nodes/accessors/InstancedMeshNode.js +28 -3
- package/src/nodes/accessors/InstancedPointsMaterialNode.js +13 -0
- package/src/nodes/accessors/Lights.js +50 -1
- package/src/nodes/accessors/MaterialNode.js +302 -8
- package/src/nodes/accessors/MaterialProperties.js +7 -0
- package/src/nodes/accessors/MaterialReferenceNode.js +53 -13
- package/src/nodes/accessors/ModelNode.js +100 -5
- package/src/nodes/accessors/ModelViewProjectionNode.js +10 -38
- package/src/nodes/accessors/MorphNode.js +48 -4
- package/src/nodes/accessors/Normal.js +59 -3
- package/src/nodes/accessors/Object3DNode.js +102 -1
- package/src/nodes/accessors/PointUVNode.js +26 -0
- package/src/nodes/accessors/Position.js +53 -4
- package/src/nodes/accessors/ReferenceBaseNode.js +188 -0
- package/src/nodes/accessors/ReferenceNode.js +202 -2
- package/src/nodes/accessors/ReflectVector.js +24 -0
- package/src/nodes/accessors/RendererReferenceNode.js +46 -1
- package/src/nodes/accessors/SceneNode.js +54 -0
- package/src/nodes/accessors/SkinningNode.js +127 -1
- package/src/nodes/accessors/StorageBufferNode.js +168 -4
- package/src/nodes/accessors/StorageTextureNode.js +118 -0
- package/src/nodes/accessors/Tangent.js +36 -0
- package/src/nodes/accessors/Texture3DNode.js +89 -5
- package/src/nodes/accessors/TextureBicubic.js +12 -2
- package/src/nodes/accessors/TextureNode.js +309 -10
- package/src/nodes/accessors/TextureSizeNode.js +42 -0
- package/src/nodes/accessors/UV.js +10 -1
- package/src/nodes/accessors/UniformArrayNode.js +223 -23
- package/src/nodes/accessors/UserDataNode.js +46 -0
- package/src/nodes/accessors/VelocityNode.js +82 -0
- package/src/nodes/accessors/VertexColorNode.js +39 -2
- package/src/nodes/code/CodeNode.js +95 -1
- package/src/nodes/code/ExpressionNode.js +28 -0
- package/src/nodes/code/FunctionCallNode.js +37 -0
- package/src/nodes/code/FunctionNode.js +45 -0
- package/src/nodes/code/ScriptableNode.js +223 -1
- package/src/nodes/code/ScriptableValueNode.js +85 -1
- package/src/nodes/core/AssignNode.js +48 -2
- package/src/nodes/core/AttributeNode.js +43 -0
- package/src/nodes/core/BypassNode.js +47 -2
- package/src/nodes/core/CacheNode.js +53 -2
- package/src/nodes/core/ConstNode.js +24 -0
- package/src/nodes/core/ContextNode.js +65 -0
- package/src/nodes/core/IndexNode.js +68 -7
- package/src/nodes/core/InputNode.js +48 -0
- package/src/nodes/core/LightingModel.js +60 -0
- package/src/nodes/core/MRTNode.js +66 -0
- package/src/nodes/core/Node.js +337 -12
- package/src/nodes/core/NodeAttribute.js +38 -0
- package/src/nodes/core/NodeBuilder.js +945 -15
- package/src/nodes/core/NodeCache.js +41 -2
- package/src/nodes/core/NodeCode.js +31 -0
- package/src/nodes/core/NodeFrame.js +123 -2
- package/src/nodes/core/NodeFunction.js +46 -0
- package/src/nodes/core/NodeFunctionInput.js +44 -0
- package/src/nodes/core/NodeParser.js +11 -0
- package/src/nodes/core/NodeUniform.js +52 -0
- package/src/nodes/core/NodeUtils.js +141 -0
- package/src/nodes/core/NodeVar.js +30 -0
- package/src/nodes/core/NodeVarying.js +28 -0
- package/src/nodes/core/OutputStructNode.js +33 -2
- package/src/nodes/core/ParameterNode.js +28 -0
- package/src/nodes/core/PropertyNode.js +232 -0
- package/src/nodes/core/StackNode.js +78 -0
- package/src/nodes/core/StructTypeNode.js +39 -1
- package/src/nodes/core/TempNode.js +30 -4
- package/src/nodes/core/UniformGroupNode.js +82 -7
- package/src/nodes/core/UniformNode.js +66 -0
- package/src/nodes/core/VarNode.js +52 -0
- package/src/nodes/core/VaryingNode.js +83 -2
- package/src/nodes/core/constants.js +36 -0
- package/src/nodes/display/BumpMapNode.js +37 -0
- package/src/nodes/display/ColorAdjustment.js +53 -11
- package/src/nodes/display/ColorSpaceFunctions.js +16 -0
- package/src/nodes/display/ColorSpaceNode.js +82 -0
- package/src/nodes/display/FrontFacingNode.js +29 -0
- package/src/nodes/display/NormalMapNode.js +43 -0
- package/src/nodes/display/PassNode.js +298 -7
- package/src/nodes/display/PosterizeNode.js +33 -0
- package/src/nodes/display/RenderOutputNode.js +66 -1
- package/src/nodes/display/ScreenNode.js +87 -0
- package/src/nodes/display/ToneMappingFunctions.js +58 -10
- package/src/nodes/display/ToneMappingNode.js +55 -2
- package/src/nodes/display/ToonOutlinePassNode.js +73 -0
- package/src/nodes/display/ViewportDepthNode.js +122 -8
- package/src/nodes/display/ViewportDepthTextureNode.js +23 -0
- package/src/nodes/display/ViewportSharedTextureNode.js +23 -0
- package/src/nodes/display/ViewportTextureNode.js +57 -0
- package/src/nodes/fog/Fog.js +93 -0
- package/src/nodes/functions/BasicLightingModel.js +24 -0
- package/src/nodes/functions/PhongLightingModel.js +34 -2
- package/src/nodes/functions/PhysicalLightingModel.js +167 -8
- package/src/nodes/functions/ShadowMaskModel.js +23 -0
- package/src/nodes/functions/ToonLightingModel.js +20 -0
- package/src/nodes/functions/material/getAlphaHashThreshold.js +1 -3
- package/src/nodes/functions/material/getParallaxCorrectNormal.js +16 -1
- package/src/nodes/geometry/RangeNode.js +54 -2
- package/src/nodes/gpgpu/AtomicFunctionNode.js +157 -1
- package/src/nodes/gpgpu/BarrierNode.js +47 -0
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +126 -0
- package/src/nodes/gpgpu/ComputeNode.js +106 -2
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +115 -6
- package/src/nodes/lighting/AONode.js +18 -0
- package/src/nodes/lighting/AmbientLightNode.js +10 -0
- package/src/nodes/lighting/AnalyticLightNode.js +97 -2
- package/src/nodes/lighting/BasicEnvironmentNode.js +19 -0
- package/src/nodes/lighting/BasicLightMapNode.js +17 -0
- package/src/nodes/lighting/DirectionalLightNode.js +10 -0
- package/src/nodes/lighting/EnvironmentNode.js +18 -0
- package/src/nodes/lighting/HemisphereLightNode.js +31 -0
- package/src/nodes/lighting/IESSpotLightNode.js +11 -0
- package/src/nodes/lighting/IrradianceNode.js +17 -0
- package/src/nodes/lighting/LightProbeNode.js +20 -0
- package/src/nodes/lighting/LightUtils.js +12 -0
- package/src/nodes/lighting/LightingContextNode.js +48 -0
- package/src/nodes/lighting/LightingNode.js +15 -6
- package/src/nodes/lighting/LightsNode.js +132 -1
- package/src/nodes/lighting/PointLightNode.js +32 -1
- package/src/nodes/lighting/PointShadowNode.js +54 -1
- package/src/nodes/lighting/RectAreaLightNode.js +44 -6
- package/src/nodes/lighting/ShadowBaseNode.js +93 -0
- package/src/nodes/lighting/ShadowNode.js +240 -34
- package/src/nodes/lighting/SpotLightNode.js +43 -0
- package/src/nodes/math/ConditionalNode.js +70 -3
- package/src/nodes/math/Hash.js +9 -0
- package/src/nodes/math/MathNode.js +614 -11
- package/src/nodes/math/MathUtils.js +45 -1
- package/src/nodes/math/OperatorNode.js +233 -0
- package/src/nodes/math/TriNoise3D.js +18 -7
- package/src/nodes/parsers/GLSLNodeFunction.js +16 -0
- package/src/nodes/parsers/GLSLNodeParser.js +11 -0
- package/src/nodes/pmrem/PMREMNode.js +133 -0
- package/src/nodes/pmrem/PMREMUtils.js +1 -1
- package/src/nodes/procedural/Checker.js +9 -0
- package/src/nodes/tsl/TSLBase.js +2 -2
- package/src/nodes/utils/ArrayElementNode.js +38 -2
- package/src/nodes/utils/ConvertNode.js +31 -0
- package/src/nodes/utils/CubeMapNode.js +78 -0
- package/src/nodes/utils/Discard.js +16 -0
- package/src/nodes/utils/EquirectUVNode.js +31 -1
- package/src/nodes/utils/FlipNode.js +38 -0
- package/src/nodes/utils/FunctionOverloadingNode.js +53 -1
- package/src/nodes/utils/JoinNode.js +25 -0
- package/src/nodes/utils/LoopNode.js +74 -1
- package/src/nodes/utils/MatcapUVNode.js +17 -0
- package/src/nodes/utils/MaxMipLevelNode.js +49 -0
- package/src/nodes/utils/Oscillators.js +33 -0
- package/src/nodes/utils/Packing.js +17 -0
- package/src/nodes/utils/PostProcessingUtils.js +28 -23
- package/src/nodes/utils/RTTNode.js +123 -2
- package/src/nodes/utils/ReflectorNode.js +174 -4
- package/src/nodes/utils/RemapNode.js +79 -0
- package/src/nodes/utils/RotateNode.js +41 -0
- package/src/nodes/utils/SetNode.js +44 -1
- package/src/nodes/utils/SplitNode.js +55 -3
- package/src/nodes/utils/SpriteSheetUVNode.js +46 -0
- package/src/nodes/utils/SpriteUtils.js +17 -0
- package/src/nodes/utils/StorageArrayElementNode.js +40 -0
- package/src/nodes/utils/Timer.js +19 -0
- package/src/nodes/utils/TriplanarTexturesNode.js +84 -0
- package/src/nodes/utils/UVUtils.js +20 -0
- package/src/nodes/utils/ViewportUtils.js +13 -0
- package/src/objects/BatchedMesh.js +1 -2
- package/src/objects/ClippingGroup.js +49 -0
- package/src/renderers/WebGLRenderer.js +23 -4
- package/src/renderers/common/Animation.js +63 -0
- package/src/renderers/common/Attributes.js +36 -0
- package/src/renderers/common/Backend.js +467 -52
- package/src/renderers/common/Background.js +34 -1
- package/src/renderers/common/BindGroup.js +43 -0
- package/src/renderers/common/Binding.js +35 -0
- package/src/renderers/common/Bindings.js +93 -1
- package/src/renderers/common/Buffer.js +49 -0
- package/src/renderers/common/BufferUtils.js +27 -0
- package/src/renderers/common/BundleGroup.js +57 -0
- package/src/renderers/common/ChainMap.js +38 -1
- package/src/renderers/common/ClippingContext.js +107 -14
- package/src/renderers/common/Color4.js +36 -0
- package/src/renderers/common/ComputePipeline.js +24 -0
- package/src/renderers/common/CubeRenderTarget.js +13 -0
- package/src/renderers/common/DataMap.js +37 -1
- package/src/renderers/common/Geometries.js +98 -0
- package/src/renderers/common/IndirectStorageBufferAttribute.js +25 -2
- package/src/renderers/common/Info.js +87 -0
- package/src/renderers/common/Lighting.js +26 -0
- package/src/renderers/common/Pipeline.js +22 -0
- package/src/renderers/common/Pipelines.js +148 -5
- package/src/renderers/common/PostProcessing.js +75 -3
- package/src/renderers/common/ProgrammableStage.js +60 -2
- package/src/renderers/common/QuadMesh.js +54 -5
- package/src/renderers/common/RenderBundle.js +14 -8
- package/src/renderers/common/RenderBundles.js +33 -10
- package/src/renderers/common/RenderContext.js +169 -4
- package/src/renderers/common/RenderContexts.js +42 -2
- package/src/renderers/common/RenderList.js +178 -0
- package/src/renderers/common/RenderLists.js +31 -0
- package/src/renderers/common/RenderObject.js +328 -4
- package/src/renderers/common/RenderObjects.js +101 -7
- package/src/renderers/common/RenderPipeline.js +24 -0
- package/src/renderers/common/Renderer.js +1096 -31
- package/src/renderers/common/RendererUtils.js +193 -0
- package/src/renderers/common/SampledTexture.js +121 -0
- package/src/renderers/common/Sampler.js +30 -0
- package/src/renderers/common/StorageBuffer.js +24 -0
- package/src/renderers/common/StorageBufferAttribute.js +31 -2
- package/src/renderers/common/StorageInstancedBufferAttribute.js +31 -2
- package/src/renderers/common/StorageTexture.js +38 -0
- package/src/renderers/common/Textures.js +83 -0
- package/src/renderers/common/Uniform.js +188 -2
- package/src/renderers/common/UniformBuffer.js +19 -0
- package/src/renderers/common/UniformsGroup.js +139 -2
- package/src/renderers/common/extras/PMREMGenerator.js +24 -3
- package/src/renderers/common/nodes/NodeBuilderState.js +95 -1
- package/src/renderers/common/nodes/NodeLibrary.js +89 -0
- package/src/renderers/common/nodes/NodeSampledTexture.js +91 -2
- package/src/renderers/common/nodes/NodeSampler.js +28 -0
- package/src/renderers/common/nodes/NodeStorageBuffer.js +35 -0
- package/src/renderers/common/nodes/NodeUniform.js +189 -0
- package/src/renderers/common/nodes/NodeUniformBuffer.js +29 -0
- package/src/renderers/common/nodes/NodeUniformsGroup.js +31 -18
- package/src/renderers/common/nodes/Nodes.js +327 -60
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +7 -7
- package/src/renderers/webgl-fallback/WebGLBackend.js +547 -29
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +0 -1
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +1 -1
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +1 -1
- package/src/renderers/webgpu/WebGPUBackend.js +480 -49
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +34 -0
- package/src/renderers/webgpu/WebGPURenderer.js +35 -0
- package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +20 -8
- package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +21 -8
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +59 -11
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +17 -0
- package/src/renderers/webgpu/nodes/WGSLNodeParser.js +11 -0
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +10 -8
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +9 -1
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +5 -9
- package/src/renderers/webgpu/utils/WebGPUUtils.js +30 -0
- package/src/renderers/webxr/WebXRDepthSensing.js +1 -1
- package/src/renderers/webxr/WebXRManager.js +7 -1
- package/src/textures/Data3DTexture.js +2 -2
- package/src/textures/Texture.js +4 -0
- package/examples/jsm/animation/MMDAnimationHelper.js +0 -1209
- package/examples/jsm/animation/MMDPhysics.js +0 -1408
- package/examples/jsm/exporters/MMDExporter.js +0 -223
- package/examples/jsm/libs/mmdparser.module.js +0 -11530
- package/examples/jsm/loaders/MMDLoader.js +0 -2298
- package/examples/jsm/shaders/MMDToonShader.js +0 -134
- package/src/nodes/core/UniformGroup.js +0 -13
- package/src/nodes/fog/FogExp2Node.js +0 -35
- package/src/nodes/fog/FogNode.js +0 -50
- package/src/nodes/fog/FogRangeNode.js +0 -36
- package/src/renderers/common/PostProcessingUtils.js +0 -86
|
@@ -6,8 +6,17 @@ import { Fn, nodeImmutable, vec2 } from '../tsl/TSLBase.js';
|
|
|
6
6
|
import { Vector2 } from '../../math/Vector2.js';
|
|
7
7
|
import { Vector4 } from '../../math/Vector4.js';
|
|
8
8
|
|
|
9
|
+
/** @module ScreenNode **/
|
|
10
|
+
|
|
9
11
|
let screenSizeVec, viewportVec;
|
|
10
12
|
|
|
13
|
+
/**
|
|
14
|
+
* This node provides a collection of screen related metrics.
|
|
15
|
+
* Depending on {@link module:ScreenNode~ScreenNode#scope}, the nodes can represent
|
|
16
|
+
* resolution or viewport data as well as fragment or uv coordinates.
|
|
17
|
+
*
|
|
18
|
+
* @augments Node
|
|
19
|
+
*/
|
|
11
20
|
class ScreenNode extends Node {
|
|
12
21
|
|
|
13
22
|
static get type() {
|
|
@@ -16,16 +25,43 @@ class ScreenNode extends Node {
|
|
|
16
25
|
|
|
17
26
|
}
|
|
18
27
|
|
|
28
|
+
/**
|
|
29
|
+
* Constructs a new screen node.
|
|
30
|
+
*
|
|
31
|
+
* @param {('coordinate'|'viewport'|'size'|'uv')} scope - The node's scope.
|
|
32
|
+
*/
|
|
19
33
|
constructor( scope ) {
|
|
20
34
|
|
|
21
35
|
super();
|
|
22
36
|
|
|
37
|
+
/**
|
|
38
|
+
* The node represents different metric depending on which scope is selected.
|
|
39
|
+
*
|
|
40
|
+
* - `ScreenNode.COORDINATE`: Window-relative coordinates of the current fragment according to WebGPU standards.
|
|
41
|
+
* - `ScreenNode.VIEWPORT`: The current viewport defined as a four-dimensional vector.
|
|
42
|
+
* - `ScreenNode.SIZE`: The dimensions of the current bound framebuffer.
|
|
43
|
+
* - `ScreenNode.UV`: Normalized coordinates.
|
|
44
|
+
*
|
|
45
|
+
* @type {('coordinate'|'viewport'|'size'|'uv')}
|
|
46
|
+
*/
|
|
23
47
|
this.scope = scope;
|
|
24
48
|
|
|
49
|
+
/**
|
|
50
|
+
* This flag can be used for type testing.
|
|
51
|
+
*
|
|
52
|
+
* @type {Boolean}
|
|
53
|
+
* @readonly
|
|
54
|
+
* @default true
|
|
55
|
+
*/
|
|
25
56
|
this.isViewportNode = true;
|
|
26
57
|
|
|
27
58
|
}
|
|
28
59
|
|
|
60
|
+
/**
|
|
61
|
+
* This method is overwritten since the node type depends on the selected scope.
|
|
62
|
+
*
|
|
63
|
+
* @return {('vec2'|'vec4')} The node type.
|
|
64
|
+
*/
|
|
29
65
|
getNodeType() {
|
|
30
66
|
|
|
31
67
|
if ( this.scope === ScreenNode.VIEWPORT ) return 'vec4';
|
|
@@ -33,6 +69,11 @@ class ScreenNode extends Node {
|
|
|
33
69
|
|
|
34
70
|
}
|
|
35
71
|
|
|
72
|
+
/**
|
|
73
|
+
* This method is overwritten since the node's update type depends on the selected scope.
|
|
74
|
+
*
|
|
75
|
+
* @return {NodeUpdateType} The update type.
|
|
76
|
+
*/
|
|
36
77
|
getUpdateType() {
|
|
37
78
|
|
|
38
79
|
let updateType = NodeUpdateType.NONE;
|
|
@@ -49,6 +90,12 @@ class ScreenNode extends Node {
|
|
|
49
90
|
|
|
50
91
|
}
|
|
51
92
|
|
|
93
|
+
/**
|
|
94
|
+
* `ScreenNode` implements {@link Node#update} to retrieve viewport and size information
|
|
95
|
+
* from the current renderer.
|
|
96
|
+
*
|
|
97
|
+
* @param {NodeFrame} frame - A reference to the current node frame.
|
|
98
|
+
*/
|
|
52
99
|
update( { renderer } ) {
|
|
53
100
|
|
|
54
101
|
const renderTarget = renderer.getRenderTarget();
|
|
@@ -143,15 +190,55 @@ export default ScreenNode;
|
|
|
143
190
|
|
|
144
191
|
// Screen
|
|
145
192
|
|
|
193
|
+
/**
|
|
194
|
+
* TSL object that represents normalized screen coordinates, unitless in `[0, 1]`.
|
|
195
|
+
*
|
|
196
|
+
* @type {ScreenNode<vec2>}
|
|
197
|
+
*/
|
|
146
198
|
export const screenUV = /*@__PURE__*/ nodeImmutable( ScreenNode, ScreenNode.UV );
|
|
199
|
+
|
|
200
|
+
/**
|
|
201
|
+
* TSL object that represents the screen resolution in physical pixel units.
|
|
202
|
+
*
|
|
203
|
+
* @type {ScreenNode<vec2>}
|
|
204
|
+
*/
|
|
147
205
|
export const screenSize = /*@__PURE__*/ nodeImmutable( ScreenNode, ScreenNode.SIZE );
|
|
206
|
+
|
|
207
|
+
/**
|
|
208
|
+
* TSL object that represents the current `x`/`y` pixel position on the screen in physical pixel units.
|
|
209
|
+
*
|
|
210
|
+
* @type {ScreenNode<vec2>}
|
|
211
|
+
*/
|
|
148
212
|
export const screenCoordinate = /*@__PURE__*/ nodeImmutable( ScreenNode, ScreenNode.COORDINATE );
|
|
149
213
|
|
|
150
214
|
// Viewport
|
|
151
215
|
|
|
216
|
+
/**
|
|
217
|
+
* TSL object that represents the viewport rectangle as `x`, `y`, `width` and `height` in physical pixel units.
|
|
218
|
+
*
|
|
219
|
+
* @type {ScreenNode<vec4>}
|
|
220
|
+
*/
|
|
152
221
|
export const viewport = /*@__PURE__*/ nodeImmutable( ScreenNode, ScreenNode.VIEWPORT );
|
|
222
|
+
|
|
223
|
+
/**
|
|
224
|
+
* TSL object that represents the viewport resolution in physical pixel units.
|
|
225
|
+
*
|
|
226
|
+
* @type {ScreenNode<vec2>}
|
|
227
|
+
*/
|
|
153
228
|
export const viewportSize = viewport.zw;
|
|
229
|
+
|
|
230
|
+
/**
|
|
231
|
+
* TSL object that represents the current `x`/`y` pixel position on the viewport in physical pixel units.
|
|
232
|
+
*
|
|
233
|
+
* @type {ScreenNode<vec2>}
|
|
234
|
+
*/
|
|
154
235
|
export const viewportCoordinate = /*@__PURE__*/ screenCoordinate.sub( viewport.xy );
|
|
236
|
+
|
|
237
|
+
/**
|
|
238
|
+
* TSL object that represents normalized viewport coordinates, unitless in `[0, 1]`.
|
|
239
|
+
*
|
|
240
|
+
* @type {ScreenNode<vec2>}
|
|
241
|
+
*/
|
|
155
242
|
export const viewportUV = /*@__PURE__*/ viewportCoordinate.div( viewportSize );
|
|
156
243
|
|
|
157
244
|
// Deprecated
|
|
@@ -3,8 +3,16 @@ import { select } from '../math/ConditionalNode.js';
|
|
|
3
3
|
import { clamp, log2, max, min, pow, mix } from '../math/MathNode.js';
|
|
4
4
|
import { mul, sub, div } from '../math/OperatorNode.js';
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
/** @module ToneMappingFunctions **/
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Linear tone mapping, exposure only.
|
|
10
|
+
*
|
|
11
|
+
* @method
|
|
12
|
+
* @param {Node<vec3>} color - The color that should be tone mapped.
|
|
13
|
+
* @param {Node<float>} exposure - The exposure.
|
|
14
|
+
* @return {Node<vec3>} The tone mapped color.
|
|
15
|
+
*/
|
|
8
16
|
export const linearToneMapping = /*@__PURE__*/ Fn( ( [ color, exposure ] ) => {
|
|
9
17
|
|
|
10
18
|
return color.mul( exposure ).clamp();
|
|
@@ -18,8 +26,16 @@ export const linearToneMapping = /*@__PURE__*/ Fn( ( [ color, exposure ] ) => {
|
|
|
18
26
|
]
|
|
19
27
|
} );
|
|
20
28
|
|
|
21
|
-
|
|
22
|
-
|
|
29
|
+
/**
|
|
30
|
+
* Reinhard tone mapping.
|
|
31
|
+
*
|
|
32
|
+
* Reference: {@link https://www.cs.utah.edu/docs/techreports/2002/pdf/UUCS-02-001.pdf}
|
|
33
|
+
*
|
|
34
|
+
* @method
|
|
35
|
+
* @param {Node<vec3>} color - The color that should be tone mapped.
|
|
36
|
+
* @param {Node<float>} exposure - The exposure.
|
|
37
|
+
* @return {Node<vec3>} The tone mapped color.
|
|
38
|
+
*/
|
|
23
39
|
export const reinhardToneMapping = /*@__PURE__*/ Fn( ( [ color, exposure ] ) => {
|
|
24
40
|
|
|
25
41
|
color = color.mul( exposure );
|
|
@@ -35,8 +51,16 @@ export const reinhardToneMapping = /*@__PURE__*/ Fn( ( [ color, exposure ] ) =>
|
|
|
35
51
|
]
|
|
36
52
|
} );
|
|
37
53
|
|
|
38
|
-
|
|
39
|
-
|
|
54
|
+
/**
|
|
55
|
+
* Cineon tone mapping.
|
|
56
|
+
*
|
|
57
|
+
* Reference: {@link http://filmicworlds.com/blog/filmic-tonemapping-operators/}
|
|
58
|
+
*
|
|
59
|
+
* @method
|
|
60
|
+
* @param {Node<vec3>} color - The color that should be tone mapped.
|
|
61
|
+
* @param {Node<float>} exposure - The exposure.
|
|
62
|
+
* @return {Node<vec3>} The tone mapped color.
|
|
63
|
+
*/
|
|
40
64
|
export const cineonToneMapping = /*@__PURE__*/ Fn( ( [ color, exposure ] ) => {
|
|
41
65
|
|
|
42
66
|
// filmic operator by Jim Hejl and Richard Burgess-Dawson
|
|
@@ -68,8 +92,16 @@ const RRTAndODTFit = /*@__PURE__*/ Fn( ( [ color ] ) => {
|
|
|
68
92
|
|
|
69
93
|
} );
|
|
70
94
|
|
|
71
|
-
|
|
72
|
-
|
|
95
|
+
/**
|
|
96
|
+
* ACESFilmic tone mapping.
|
|
97
|
+
*
|
|
98
|
+
* Reference: {@link https://github.com/selfshadow/ltc_code/blob/master/webgl/shaders/ltc/ltc_blit.fs}
|
|
99
|
+
*
|
|
100
|
+
* @method
|
|
101
|
+
* @param {Node<vec3>} color - The color that should be tone mapped.
|
|
102
|
+
* @param {Node<float>} exposure - The exposure.
|
|
103
|
+
* @return {Node<vec3>} The tone mapped color.
|
|
104
|
+
*/
|
|
73
105
|
export const acesFilmicToneMapping = /*@__PURE__*/ Fn( ( [ color, exposure ] ) => {
|
|
74
106
|
|
|
75
107
|
// sRGB => XYZ => D65_2_D60 => AP1 => RRT_SAT
|
|
@@ -120,6 +152,14 @@ const agxDefaultContrastApprox = /*@__PURE__*/ Fn( ( [ x_immutable ] ) => {
|
|
|
120
152
|
|
|
121
153
|
} );
|
|
122
154
|
|
|
155
|
+
/**
|
|
156
|
+
* AgX tone mapping.
|
|
157
|
+
*
|
|
158
|
+
* @method
|
|
159
|
+
* @param {Node<vec3>} color - The color that should be tone mapped.
|
|
160
|
+
* @param {Node<float>} exposure - The exposure.
|
|
161
|
+
* @return {Node<vec3>} The tone mapped color.
|
|
162
|
+
*/
|
|
123
163
|
export const agxToneMapping = /*@__PURE__*/ Fn( ( [ color, exposure ] ) => {
|
|
124
164
|
|
|
125
165
|
const colortone = vec3( color ).toVar();
|
|
@@ -151,8 +191,16 @@ export const agxToneMapping = /*@__PURE__*/ Fn( ( [ color, exposure ] ) => {
|
|
|
151
191
|
]
|
|
152
192
|
} );
|
|
153
193
|
|
|
154
|
-
|
|
155
|
-
|
|
194
|
+
/**
|
|
195
|
+
* Neutral tone mapping.
|
|
196
|
+
*
|
|
197
|
+
* Reference: {@link https://modelviewer.dev/examples/tone-mapping}
|
|
198
|
+
*
|
|
199
|
+
* @method
|
|
200
|
+
* @param {Node<vec3>} color - The color that should be tone mapped.
|
|
201
|
+
* @param {Node<float>} exposure - The exposure.
|
|
202
|
+
* @return {Node<vec3>} The tone mapped color.
|
|
203
|
+
*/
|
|
156
204
|
export const neutralToneMapping = /*@__PURE__*/ Fn( ( [ color, exposure ] ) => {
|
|
157
205
|
|
|
158
206
|
const StartCompression = float( 0.8 - 0.04 );
|
|
@@ -5,6 +5,13 @@ import { rendererReference } from '../accessors/RendererReferenceNode.js';
|
|
|
5
5
|
import { NoToneMapping } from '../../constants.js';
|
|
6
6
|
import { hash } from '../core/NodeUtils.js';
|
|
7
7
|
|
|
8
|
+
/** @module ToneMappingNode **/
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* This node represents a tone mapping operation.
|
|
12
|
+
*
|
|
13
|
+
* @augments TempNode
|
|
14
|
+
*/
|
|
8
15
|
class ToneMappingNode extends TempNode {
|
|
9
16
|
|
|
10
17
|
static get type() {
|
|
@@ -13,20 +20,51 @@ class ToneMappingNode extends TempNode {
|
|
|
13
20
|
|
|
14
21
|
}
|
|
15
22
|
|
|
23
|
+
/**
|
|
24
|
+
* Constructs a new tone mapping node.
|
|
25
|
+
*
|
|
26
|
+
* @param {Number} toneMapping - The tone mapping type.
|
|
27
|
+
* @param {Node} exposureNode - The tone mapping exposure.
|
|
28
|
+
* @param {Node} [colorNode=null] - The color node to process.
|
|
29
|
+
*/
|
|
16
30
|
constructor( toneMapping, exposureNode = toneMappingExposure, colorNode = null ) {
|
|
17
31
|
|
|
18
32
|
super( 'vec3' );
|
|
19
33
|
|
|
34
|
+
/**
|
|
35
|
+
* The tone mapping type.
|
|
36
|
+
*
|
|
37
|
+
* @type {Number}
|
|
38
|
+
*/
|
|
20
39
|
this.toneMapping = toneMapping;
|
|
21
40
|
|
|
41
|
+
/**
|
|
42
|
+
* The tone mapping exposure.
|
|
43
|
+
*
|
|
44
|
+
* @type {Node}
|
|
45
|
+
* @default null
|
|
46
|
+
*/
|
|
22
47
|
this.exposureNode = exposureNode;
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Represents the color to process.
|
|
51
|
+
*
|
|
52
|
+
* @type {Node?}
|
|
53
|
+
* @default null
|
|
54
|
+
*/
|
|
23
55
|
this.colorNode = colorNode;
|
|
24
56
|
|
|
25
57
|
}
|
|
26
58
|
|
|
27
|
-
|
|
59
|
+
/**
|
|
60
|
+
* Overwrites the default `customCacheKey()` implementation by including the tone
|
|
61
|
+
* mapping type into the cache key.
|
|
62
|
+
*
|
|
63
|
+
* @return {Number} The hash.
|
|
64
|
+
*/
|
|
65
|
+
customCacheKey() {
|
|
28
66
|
|
|
29
|
-
return hash(
|
|
67
|
+
return hash( this.toneMapping );
|
|
30
68
|
|
|
31
69
|
}
|
|
32
70
|
|
|
@@ -61,7 +99,22 @@ class ToneMappingNode extends TempNode {
|
|
|
61
99
|
|
|
62
100
|
export default ToneMappingNode;
|
|
63
101
|
|
|
102
|
+
/**
|
|
103
|
+
* TSL function for creating a tone mapping node.
|
|
104
|
+
*
|
|
105
|
+
* @function
|
|
106
|
+
* @param {Number} mapping - The tone mapping type.
|
|
107
|
+
* @param {Node<float> | Number} exposure - The tone mapping exposure.
|
|
108
|
+
* @param {Node<vec3> | Color} color - The color node to process.
|
|
109
|
+
* @returns {ToneMappingNode<vec3>}
|
|
110
|
+
*/
|
|
64
111
|
export const toneMapping = ( mapping, exposure, color ) => nodeObject( new ToneMappingNode( mapping, nodeObject( exposure ), nodeObject( color ) ) );
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* TSL object that represents the global tone mapping exposure of the renderer.
|
|
115
|
+
*
|
|
116
|
+
* @type {RendererReferenceNode<vec3>}
|
|
117
|
+
*/
|
|
65
118
|
export const toneMappingExposure = /*@__PURE__*/ rendererReference( 'toneMappingExposure', 'float' );
|
|
66
119
|
|
|
67
120
|
addMethodChaining( 'toneMapping', ( color, mapping, exposure ) => toneMapping( mapping, exposure, color ) );
|
|
@@ -8,6 +8,22 @@ import { normalLocal } from '../../nodes/accessors/Normal.js';
|
|
|
8
8
|
import { BackSide } from '../../constants.js';
|
|
9
9
|
import PassNode from './PassNode.js';
|
|
10
10
|
|
|
11
|
+
/** @module ToonOutlinePassNode **/
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Represents a render pass for producing a toon outline effect on compatible objects.
|
|
15
|
+
* Only 3D objects with materials of type `MeshToonMaterial` and `MeshToonNodeMaterial`
|
|
16
|
+
* will receive the outline.
|
|
17
|
+
*
|
|
18
|
+
* ```js
|
|
19
|
+
* const postProcessing = new PostProcessing( renderer );
|
|
20
|
+
*
|
|
21
|
+
* const scenePass = toonOutlinePass( scene, camera );
|
|
22
|
+
*
|
|
23
|
+
* postProcessing.outputNode = scenePass;
|
|
24
|
+
* ```
|
|
25
|
+
* @augments PassNode
|
|
26
|
+
*/
|
|
11
27
|
class ToonOutlinePassNode extends PassNode {
|
|
12
28
|
|
|
13
29
|
static get type() {
|
|
@@ -16,14 +32,46 @@ class ToonOutlinePassNode extends PassNode {
|
|
|
16
32
|
|
|
17
33
|
}
|
|
18
34
|
|
|
35
|
+
/**
|
|
36
|
+
* Constructs a new outline pass node.
|
|
37
|
+
*
|
|
38
|
+
* @param {Scene} scene - A reference to the scene.
|
|
39
|
+
* @param {Camera} camera - A reference to the camera.
|
|
40
|
+
* @param {Node} colorNode - Defines the outline's color.
|
|
41
|
+
* @param {Node} thicknessNode - Defines the outline's thickness.
|
|
42
|
+
* @param {Node} alphaNode - Defines the outline's alpha.
|
|
43
|
+
*/
|
|
19
44
|
constructor( scene, camera, colorNode, thicknessNode, alphaNode ) {
|
|
20
45
|
|
|
21
46
|
super( PassNode.COLOR, scene, camera );
|
|
22
47
|
|
|
48
|
+
/**
|
|
49
|
+
* Defines the outline's color.
|
|
50
|
+
*
|
|
51
|
+
* @type {Node}
|
|
52
|
+
*/
|
|
23
53
|
this.colorNode = colorNode;
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Defines the outline's thickness.
|
|
57
|
+
*
|
|
58
|
+
* @type {Node}
|
|
59
|
+
*/
|
|
24
60
|
this.thicknessNode = thicknessNode;
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Defines the outline's alpha.
|
|
64
|
+
*
|
|
65
|
+
* @type {Node}
|
|
66
|
+
*/
|
|
25
67
|
this.alphaNode = alphaNode;
|
|
26
68
|
|
|
69
|
+
/**
|
|
70
|
+
* An internal material cache.
|
|
71
|
+
*
|
|
72
|
+
* @private
|
|
73
|
+
* @type {WeakMap<Material, NodeMaterial>}
|
|
74
|
+
*/
|
|
27
75
|
this._materialCache = new WeakMap();
|
|
28
76
|
|
|
29
77
|
}
|
|
@@ -61,6 +109,12 @@ class ToonOutlinePassNode extends PassNode {
|
|
|
61
109
|
|
|
62
110
|
}
|
|
63
111
|
|
|
112
|
+
/**
|
|
113
|
+
* Creates the material used for outline rendering.
|
|
114
|
+
*
|
|
115
|
+
* @private
|
|
116
|
+
* @return {NodeMaterial} The outline material.
|
|
117
|
+
*/
|
|
64
118
|
_createMaterial() {
|
|
65
119
|
|
|
66
120
|
const material = new NodeMaterial();
|
|
@@ -88,6 +142,14 @@ class ToonOutlinePassNode extends PassNode {
|
|
|
88
142
|
|
|
89
143
|
}
|
|
90
144
|
|
|
145
|
+
/**
|
|
146
|
+
* For the given toon material, this method returns a corresponding
|
|
147
|
+
* outline material.
|
|
148
|
+
*
|
|
149
|
+
* @private
|
|
150
|
+
* @param {(MeshToonMaterial|MeshToonNodeMaterial)} originalMaterial - The toon material.
|
|
151
|
+
* @return {NodeMaterial} The outline material.
|
|
152
|
+
*/
|
|
91
153
|
_getOutlineMaterial( originalMaterial ) {
|
|
92
154
|
|
|
93
155
|
let outlineMaterial = this._materialCache.get( originalMaterial );
|
|
@@ -108,4 +170,15 @@ class ToonOutlinePassNode extends PassNode {
|
|
|
108
170
|
|
|
109
171
|
export default ToonOutlinePassNode;
|
|
110
172
|
|
|
173
|
+
/**
|
|
174
|
+
* TSL function for creating a toon outline pass node.
|
|
175
|
+
*
|
|
176
|
+
* @function
|
|
177
|
+
* @param {Scene} scene - A reference to the scene.
|
|
178
|
+
* @param {Camera} camera - A reference to the camera.
|
|
179
|
+
* @param {Color} color - Defines the outline's color.
|
|
180
|
+
* @param {Number} [thickness=0.003] - Defines the outline's thickness.
|
|
181
|
+
* @param {Number} [alpha=1] - Defines the outline's alpha.
|
|
182
|
+
* @returns {ToonOutlinePassNode}
|
|
183
|
+
*/
|
|
111
184
|
export const toonOutlinePass = ( scene, camera, color = new Color( 0, 0, 0 ), thickness = 0.003, alpha = 1 ) => nodeObject( new ToonOutlinePassNode( scene, camera, nodeObject( color ), nodeObject( thickness ), nodeObject( alpha ) ) );
|
|
@@ -4,6 +4,15 @@ import { cameraNear, cameraFar } from '../accessors/Camera.js';
|
|
|
4
4
|
import { positionView } from '../accessors/Position.js';
|
|
5
5
|
import { viewportDepthTexture } from './ViewportDepthTextureNode.js';
|
|
6
6
|
|
|
7
|
+
/** @module ViewportDepthNode **/
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* This node offers a collection of features in context of the depth logic in the fragment shader.
|
|
11
|
+
* Depending on {@link ViewportDepthNode#scope}, it can be used to define a depth value for the current
|
|
12
|
+
* fragment or for depth evaluation purposes.
|
|
13
|
+
*
|
|
14
|
+
* @augments Node
|
|
15
|
+
*/
|
|
7
16
|
class ViewportDepthNode extends Node {
|
|
8
17
|
|
|
9
18
|
static get type() {
|
|
@@ -12,13 +21,44 @@ class ViewportDepthNode extends Node {
|
|
|
12
21
|
|
|
13
22
|
}
|
|
14
23
|
|
|
24
|
+
/**
|
|
25
|
+
* Constructs a new viewport depth node.
|
|
26
|
+
*
|
|
27
|
+
* @param {('depth'|'depthBase'|'linearDepth')} scope - The node's scope.
|
|
28
|
+
* @param {Node?} [valueNode=null] - The value node.
|
|
29
|
+
*/
|
|
15
30
|
constructor( scope, valueNode = null ) {
|
|
16
31
|
|
|
17
32
|
super( 'float' );
|
|
18
33
|
|
|
34
|
+
/**
|
|
35
|
+
* The node behaves differently depending on which scope is selected.
|
|
36
|
+
*
|
|
37
|
+
* - `ViewportDepthNode.DEPTH_BASE`: Allows to define a value for the current fragment's depth.
|
|
38
|
+
* - `ViewportDepthNode.DEPTH`: Represents the depth value for the current fragment (`valueNode` is ignored).
|
|
39
|
+
* - `ViewportDepthNode.LINEAR_DEPTH`: Represents the linear (orthographic) depth value of the current fragment.
|
|
40
|
+
* If a `valueNode` is set, the scope can be used to convert perspective depth data to linear data.
|
|
41
|
+
*
|
|
42
|
+
* @type {('depth'|'depthBase'|'linearDepth')}
|
|
43
|
+
*/
|
|
19
44
|
this.scope = scope;
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Can be used to define a custom depth value.
|
|
48
|
+
* The property is ignored in the `ViewportDepthNode.DEPTH` scope.
|
|
49
|
+
*
|
|
50
|
+
* @type {Node?}
|
|
51
|
+
* @default null
|
|
52
|
+
*/
|
|
20
53
|
this.valueNode = valueNode;
|
|
21
54
|
|
|
55
|
+
/**
|
|
56
|
+
* This flag can be used for type testing.
|
|
57
|
+
*
|
|
58
|
+
* @type {Boolean}
|
|
59
|
+
* @readonly
|
|
60
|
+
* @default true
|
|
61
|
+
*/
|
|
22
62
|
this.isViewportDepthNode = true;
|
|
23
63
|
|
|
24
64
|
}
|
|
@@ -102,21 +142,61 @@ export default ViewportDepthNode;
|
|
|
102
142
|
|
|
103
143
|
// NOTE: viewZ, the z-coordinate in camera space, is negative for points in front of the camera
|
|
104
144
|
|
|
105
|
-
|
|
145
|
+
/**
|
|
146
|
+
* TSL function for converting a viewZ value to an orthographic depth value.
|
|
147
|
+
*
|
|
148
|
+
* @function
|
|
149
|
+
* @param {Node<float>} viewZ - The viewZ node.
|
|
150
|
+
* @param {Node<float>} near - The camera's near value.
|
|
151
|
+
* @param {Node<float>} far - The camera's far value.
|
|
152
|
+
* @returns {Node<float>}
|
|
153
|
+
*/
|
|
106
154
|
export const viewZToOrthographicDepth = ( viewZ, near, far ) => viewZ.add( near ).div( near.sub( far ) );
|
|
107
155
|
|
|
108
|
-
|
|
156
|
+
/**
|
|
157
|
+
* TSL function for converting an orthographic depth value to a viewZ value.
|
|
158
|
+
*
|
|
159
|
+
* @function
|
|
160
|
+
* @param {Node<float>} depth - The orthographic depth.
|
|
161
|
+
* @param {Node<float>} near - The camera's near value.
|
|
162
|
+
* @param {Node<float>} far - The camera's far value.
|
|
163
|
+
* @returns {Node<float>}
|
|
164
|
+
*/
|
|
109
165
|
export const orthographicDepthToViewZ = ( depth, near, far ) => near.sub( far ).mul( depth ).sub( near );
|
|
110
166
|
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
167
|
+
/**
|
|
168
|
+
* TSL function for converting a viewZ value to a perspective depth value.
|
|
169
|
+
*
|
|
170
|
+
* Note: {link https://twitter.com/gonnavis/status/1377183786949959682}.
|
|
171
|
+
*
|
|
172
|
+
* @function
|
|
173
|
+
* @param {Node<float>} viewZ - The viewZ node.
|
|
174
|
+
* @param {Node<float>} near - The camera's near value.
|
|
175
|
+
* @param {Node<float>} far - The camera's far value.
|
|
176
|
+
* @returns {Node<float>}
|
|
177
|
+
*/
|
|
114
178
|
export const viewZToPerspectiveDepth = ( viewZ, near, far ) => near.add( viewZ ).mul( far ).div( far.sub( near ).mul( viewZ ) );
|
|
115
179
|
|
|
116
|
-
|
|
180
|
+
/**
|
|
181
|
+
* TSL function for converting a perspective depth value to a viewZ value.
|
|
182
|
+
*
|
|
183
|
+
* @function
|
|
184
|
+
* @param {Node<float>} depth - The perspective depth.
|
|
185
|
+
* @param {Node<float>} near - The camera's near value.
|
|
186
|
+
* @param {Node<float>} far - The camera's far value.
|
|
187
|
+
* @returns {Node<float>}
|
|
188
|
+
*/
|
|
117
189
|
export const perspectiveDepthToViewZ = ( depth, near, far ) => near.mul( far ).div( far.sub( near ).mul( depth ).sub( far ) );
|
|
118
190
|
|
|
119
|
-
|
|
191
|
+
/**
|
|
192
|
+
* TSL function for converting a viewZ value to a logarithmic depth value.
|
|
193
|
+
*
|
|
194
|
+
* @function
|
|
195
|
+
* @param {Node<float>} viewZ - The viewZ node.
|
|
196
|
+
* @param {Node<float>} near - The camera's near value.
|
|
197
|
+
* @param {Node<float>} far - The camera's far value.
|
|
198
|
+
* @returns {Node<float>}
|
|
199
|
+
*/
|
|
120
200
|
export const viewZToLogarithmicDepth = ( viewZ, near, far ) => {
|
|
121
201
|
|
|
122
202
|
// NOTE: viewZ must be negative--see explanation at the end of this comment block.
|
|
@@ -152,7 +232,15 @@ export const viewZToLogarithmicDepth = ( viewZ, near, far ) => {
|
|
|
152
232
|
|
|
153
233
|
};
|
|
154
234
|
|
|
155
|
-
|
|
235
|
+
/**
|
|
236
|
+
* TSL function for converting a logarithmic depth value to a viewZ value.
|
|
237
|
+
*
|
|
238
|
+
* @function
|
|
239
|
+
* @param {Node<float>} depth - The logarithmic depth.
|
|
240
|
+
* @param {Node<float>} near - The camera's near value.
|
|
241
|
+
* @param {Node<float>} far - The camera's far value.
|
|
242
|
+
* @returns {Node<float>}
|
|
243
|
+
*/
|
|
156
244
|
export const logarithmicDepthToViewZ = ( depth, near, far ) => {
|
|
157
245
|
|
|
158
246
|
// NOTE: we add a 'negate()' call to the return value here to maintain consistency with
|
|
@@ -163,10 +251,36 @@ export const logarithmicDepthToViewZ = ( depth, near, far ) => {
|
|
|
163
251
|
|
|
164
252
|
};
|
|
165
253
|
|
|
254
|
+
/**
|
|
255
|
+
* TSL function for defining a value for the current fragment's depth.
|
|
256
|
+
*
|
|
257
|
+
* @function
|
|
258
|
+
* @param {Node<float>} value - The depth value to set.
|
|
259
|
+
* @returns {ViewportDepthNode<float>}
|
|
260
|
+
*/
|
|
166
261
|
const depthBase = /*@__PURE__*/ nodeProxy( ViewportDepthNode, ViewportDepthNode.DEPTH_BASE );
|
|
167
262
|
|
|
263
|
+
/**
|
|
264
|
+
* TSL object that represents the depth value for the current fragment.
|
|
265
|
+
*
|
|
266
|
+
* @type {ViewportDepthNode}
|
|
267
|
+
*/
|
|
168
268
|
export const depth = /*@__PURE__*/ nodeImmutable( ViewportDepthNode, ViewportDepthNode.DEPTH );
|
|
269
|
+
|
|
270
|
+
/**
|
|
271
|
+
* TSL function for converting a perspective depth value to linear depth.
|
|
272
|
+
*
|
|
273
|
+
* @function
|
|
274
|
+
* @param {Node<float>} value - The perspective depth.
|
|
275
|
+
* @returns {ViewportDepthNode<float>}
|
|
276
|
+
*/
|
|
169
277
|
export const linearDepth = /*@__PURE__*/ nodeProxy( ViewportDepthNode, ViewportDepthNode.LINEAR_DEPTH );
|
|
278
|
+
|
|
279
|
+
/**
|
|
280
|
+
* TSL object that represents the linear (orthographic) depth value of the current fragment
|
|
281
|
+
*
|
|
282
|
+
* @type {ViewportDepthNode}
|
|
283
|
+
*/
|
|
170
284
|
export const viewportLinearDepth = /*@__PURE__*/ linearDepth( viewportDepthTexture() );
|
|
171
285
|
|
|
172
286
|
depth.assign = ( value ) => depthBase( value );
|
|
@@ -4,8 +4,17 @@ import { screenUV } from './ScreenNode.js';
|
|
|
4
4
|
|
|
5
5
|
import { DepthTexture } from '../../textures/DepthTexture.js';
|
|
6
6
|
|
|
7
|
+
/** @module ViewportDepthTextureNode **/
|
|
8
|
+
|
|
7
9
|
let sharedDepthbuffer = null;
|
|
8
10
|
|
|
11
|
+
/**
|
|
12
|
+
* Represents the depth of the current viewport as a texture. This module
|
|
13
|
+
* can be used in combination with viewport texture to achieve effects
|
|
14
|
+
* that require depth evaluation.
|
|
15
|
+
*
|
|
16
|
+
* @augments module:ViewportTextureNode~ViewportTextureNode
|
|
17
|
+
*/
|
|
9
18
|
class ViewportDepthTextureNode extends ViewportTextureNode {
|
|
10
19
|
|
|
11
20
|
static get type() {
|
|
@@ -14,6 +23,12 @@ class ViewportDepthTextureNode extends ViewportTextureNode {
|
|
|
14
23
|
|
|
15
24
|
}
|
|
16
25
|
|
|
26
|
+
/**
|
|
27
|
+
* Constructs a new viewport depth texture node.
|
|
28
|
+
*
|
|
29
|
+
* @param {Node} [uvNode=screenUV] - The uv node.
|
|
30
|
+
* @param {Node?} [levelNode=null] - The level node.
|
|
31
|
+
*/
|
|
17
32
|
constructor( uvNode = screenUV, levelNode = null ) {
|
|
18
33
|
|
|
19
34
|
if ( sharedDepthbuffer === null ) {
|
|
@@ -30,4 +45,12 @@ class ViewportDepthTextureNode extends ViewportTextureNode {
|
|
|
30
45
|
|
|
31
46
|
export default ViewportDepthTextureNode;
|
|
32
47
|
|
|
48
|
+
/**
|
|
49
|
+
* TSL function for a viewport depth texture node.
|
|
50
|
+
*
|
|
51
|
+
* @function
|
|
52
|
+
* @param {Node} [uvNode=screenUV] - The uv node.
|
|
53
|
+
* @param {Node?} [levelNode=null] - The level node.
|
|
54
|
+
* @returns {ViewportDepthTextureNode}
|
|
55
|
+
*/
|
|
33
56
|
export const viewportDepthTexture = /*@__PURE__*/ nodeProxy( ViewportDepthTextureNode );
|