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
|
@@ -4,6 +4,31 @@ import { addMethodChaining, nodeObject } from '../tsl/TSLCore.js';
|
|
|
4
4
|
import { NoColorSpace, NoToneMapping } from '../../constants.js';
|
|
5
5
|
import { ColorManagement } from '../../math/ColorManagement.js';
|
|
6
6
|
|
|
7
|
+
/** @module RenderOutputNode **/
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Normally, tone mapping and color conversion happens automatically
|
|
11
|
+
* before outputting pixel too the default (screen) framebuffer. In certain
|
|
12
|
+
* post processing setups this happens to late because certain effects
|
|
13
|
+
* require e.g. sRGB input. For such scenarios, `RenderOutputNode` can be used
|
|
14
|
+
* to apply tone mapping and color space conversion at an arbitrary point
|
|
15
|
+
* in the effect chain.
|
|
16
|
+
*
|
|
17
|
+
* When applying tone mapping and color space conversion manually with this node,
|
|
18
|
+
* you have to set {@link PostProcessing#outputColorTransform} to `false`.
|
|
19
|
+
*
|
|
20
|
+
* ```js
|
|
21
|
+
* const postProcessing = new PostProcessing( renderer );
|
|
22
|
+
* postProcessing.outputColorTransform = false;
|
|
23
|
+
*
|
|
24
|
+
* const scenePass = pass( scene, camera );
|
|
25
|
+
* const outputPass = renderOutput( scenePass );
|
|
26
|
+
*
|
|
27
|
+
* postProcessing.outputNode = outputPass;
|
|
28
|
+
* ```
|
|
29
|
+
*
|
|
30
|
+
* @augments TempNode
|
|
31
|
+
*/
|
|
7
32
|
class RenderOutputNode extends TempNode {
|
|
8
33
|
|
|
9
34
|
static get type() {
|
|
@@ -12,15 +37,46 @@ class RenderOutputNode extends TempNode {
|
|
|
12
37
|
|
|
13
38
|
}
|
|
14
39
|
|
|
40
|
+
/**
|
|
41
|
+
* Constructs a new render output node.
|
|
42
|
+
*
|
|
43
|
+
* @param {Node} colorNode - The color node to process.
|
|
44
|
+
* @param {Number} toneMapping - The tone mapping type.
|
|
45
|
+
* @param {String} outputColorSpace - The output color space.
|
|
46
|
+
*/
|
|
15
47
|
constructor( colorNode, toneMapping, outputColorSpace ) {
|
|
16
48
|
|
|
17
49
|
super( 'vec4' );
|
|
18
50
|
|
|
51
|
+
/**
|
|
52
|
+
* The color node to process.
|
|
53
|
+
*
|
|
54
|
+
* @type {Node}
|
|
55
|
+
*/
|
|
19
56
|
this.colorNode = colorNode;
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* The tone mapping type.
|
|
60
|
+
*
|
|
61
|
+
* @type {Number?}
|
|
62
|
+
*/
|
|
20
63
|
this.toneMapping = toneMapping;
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* The output color space.
|
|
67
|
+
*
|
|
68
|
+
* @type {String?}
|
|
69
|
+
*/
|
|
21
70
|
this.outputColorSpace = outputColorSpace;
|
|
22
71
|
|
|
23
|
-
|
|
72
|
+
/**
|
|
73
|
+
* This flag can be used for type testing.
|
|
74
|
+
*
|
|
75
|
+
* @type {Boolean}
|
|
76
|
+
* @readonly
|
|
77
|
+
* @default true
|
|
78
|
+
*/
|
|
79
|
+
this.isRenderOutputNode = true;
|
|
24
80
|
|
|
25
81
|
}
|
|
26
82
|
|
|
@@ -55,6 +111,15 @@ class RenderOutputNode extends TempNode {
|
|
|
55
111
|
|
|
56
112
|
export default RenderOutputNode;
|
|
57
113
|
|
|
114
|
+
/**
|
|
115
|
+
* TSL function for creating a posterize node.
|
|
116
|
+
*
|
|
117
|
+
* @function
|
|
118
|
+
* @param {Node} color - The color node to process.
|
|
119
|
+
* @param {Number?} [toneMapping=null] - The tone mapping type.
|
|
120
|
+
* @param {String?} [outputColorSpace=null] - The output color space.
|
|
121
|
+
* @returns {RenderOutputNode}
|
|
122
|
+
*/
|
|
58
123
|
export const renderOutput = ( color, toneMapping = null, outputColorSpace = null ) => nodeObject( new RenderOutputNode( nodeObject( color ), toneMapping, outputColorSpace ) );
|
|
59
124
|
|
|
60
125
|
addMethodChaining( 'renderOutput', renderOutput );
|
|
@@ -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,19 +190,62 @@ 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
|
|
158
245
|
|
|
246
|
+
/**
|
|
247
|
+
* @deprecated since r169. Use {@link screenSize} instead.
|
|
248
|
+
*/
|
|
159
249
|
export const viewportResolution = /*@__PURE__*/ ( Fn( () => { // @deprecated, r169
|
|
160
250
|
|
|
161
251
|
console.warn( 'TSL.ViewportNode: "viewportResolution" is deprecated. Use "screenSize" instead.' );
|
|
@@ -164,6 +254,9 @@ export const viewportResolution = /*@__PURE__*/ ( Fn( () => { // @deprecated, r1
|
|
|
164
254
|
|
|
165
255
|
}, 'vec2' ).once() )();
|
|
166
256
|
|
|
257
|
+
/**
|
|
258
|
+
* @deprecated since r168. Use {@link screenUV} instead.
|
|
259
|
+
*/
|
|
167
260
|
export const viewportTopLeft = /*@__PURE__*/ ( Fn( () => { // @deprecated, r168
|
|
168
261
|
|
|
169
262
|
console.warn( 'TSL.ViewportNode: "viewportTopLeft" is deprecated. Use "screenUV" instead.' );
|
|
@@ -172,6 +265,9 @@ export const viewportTopLeft = /*@__PURE__*/ ( Fn( () => { // @deprecated, r168
|
|
|
172
265
|
|
|
173
266
|
}, 'vec2' ).once() )();
|
|
174
267
|
|
|
268
|
+
/**
|
|
269
|
+
* @deprecated since r168. Use `screenUV.flipY()` instead.
|
|
270
|
+
*/
|
|
175
271
|
export const viewportBottomLeft = /*@__PURE__*/ ( Fn( () => { // @deprecated, r168
|
|
176
272
|
|
|
177
273
|
console.warn( 'TSL.ViewportNode: "viewportBottomLeft" is deprecated. Use "screenUV.flipY()" instead.' );
|
|
@@ -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 ) ) );
|