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
|
@@ -81,10 +81,10 @@ class OutlinePass extends Pass {
|
|
|
81
81
|
const MAX_EDGE_THICKNESS = 4;
|
|
82
82
|
const MAX_EDGE_GLOW = 4;
|
|
83
83
|
|
|
84
|
-
this.separableBlurMaterial1 = this.
|
|
84
|
+
this.separableBlurMaterial1 = this.getSeparableBlurMaterial( MAX_EDGE_THICKNESS );
|
|
85
85
|
this.separableBlurMaterial1.uniforms[ 'texSize' ].value.set( resx, resy );
|
|
86
86
|
this.separableBlurMaterial1.uniforms[ 'kernelRadius' ].value = 1;
|
|
87
|
-
this.separableBlurMaterial2 = this.
|
|
87
|
+
this.separableBlurMaterial2 = this.getSeparableBlurMaterial( MAX_EDGE_GLOW );
|
|
88
88
|
this.separableBlurMaterial2.uniforms[ 'texSize' ].value.set( Math.round( resx / 2 ), Math.round( resy / 2 ) );
|
|
89
89
|
this.separableBlurMaterial2.uniforms[ 'kernelRadius' ].value = MAX_EDGE_GLOW;
|
|
90
90
|
|
|
@@ -241,7 +241,7 @@ class OutlinePass extends Pass {
|
|
|
241
241
|
|
|
242
242
|
} else if ( object.isPoints || object.isLine ) {
|
|
243
243
|
|
|
244
|
-
// the
|
|
244
|
+
// the visibility of points and lines is always set to false in order to
|
|
245
245
|
// not affect the outline computation
|
|
246
246
|
|
|
247
247
|
if ( bVisible === true ) {
|
|
@@ -521,7 +521,7 @@ class OutlinePass extends Pass {
|
|
|
521
521
|
|
|
522
522
|
}
|
|
523
523
|
|
|
524
|
-
|
|
524
|
+
getSeparableBlurMaterial( maxRadius ) {
|
|
525
525
|
|
|
526
526
|
return new ShaderMaterial( {
|
|
527
527
|
|
|
@@ -8,6 +8,7 @@ import {
|
|
|
8
8
|
AgXToneMapping,
|
|
9
9
|
ACESFilmicToneMapping,
|
|
10
10
|
NeutralToneMapping,
|
|
11
|
+
CustomToneMapping,
|
|
11
12
|
SRGBTransfer
|
|
12
13
|
} from 'three';
|
|
13
14
|
import { Pass, FullScreenQuad } from './Pass.js';
|
|
@@ -63,6 +64,7 @@ class OutputPass extends Pass {
|
|
|
63
64
|
else if ( this._toneMapping === ACESFilmicToneMapping ) this.material.defines.ACES_FILMIC_TONE_MAPPING = '';
|
|
64
65
|
else if ( this._toneMapping === AgXToneMapping ) this.material.defines.AGX_TONE_MAPPING = '';
|
|
65
66
|
else if ( this._toneMapping === NeutralToneMapping ) this.material.defines.NEUTRAL_TONE_MAPPING = '';
|
|
67
|
+
else if ( this._toneMapping === CustomToneMapping ) this.material.defines.CUSTOM_TONE_MAPPING = '';
|
|
66
68
|
|
|
67
69
|
this.material.needsUpdate = true;
|
|
68
70
|
|
|
@@ -19,8 +19,7 @@ import {
|
|
|
19
19
|
} from 'three';
|
|
20
20
|
import { Pass, FullScreenQuad } from './Pass.js';
|
|
21
21
|
import { SAOShader } from '../shaders/SAOShader.js';
|
|
22
|
-
import { DepthLimitedBlurShader } from '../shaders/DepthLimitedBlurShader.js';
|
|
23
|
-
import { BlurShaderUtils } from '../shaders/DepthLimitedBlurShader.js';
|
|
22
|
+
import { BlurShaderUtils, DepthLimitedBlurShader } from '../shaders/DepthLimitedBlurShader.js';
|
|
24
23
|
import { CopyShader } from '../shaders/CopyShader.js';
|
|
25
24
|
|
|
26
25
|
/**
|
|
@@ -8,9 +8,7 @@ import {
|
|
|
8
8
|
WebGLRenderTarget
|
|
9
9
|
} from 'three';
|
|
10
10
|
import { Pass, FullScreenQuad } from './Pass.js';
|
|
11
|
-
import { SMAAEdgesShader } from '../shaders/SMAAShader.js';
|
|
12
|
-
import { SMAAWeightsShader } from '../shaders/SMAAShader.js';
|
|
13
|
-
import { SMAABlendShader } from '../shaders/SMAAShader.js';
|
|
11
|
+
import { SMAABlendShader, SMAAEdgesShader, SMAAWeightsShader } from '../shaders/SMAAShader.js';
|
|
14
12
|
|
|
15
13
|
class SMAAPass extends Pass {
|
|
16
14
|
|
|
@@ -24,9 +24,7 @@ import {
|
|
|
24
24
|
} from 'three';
|
|
25
25
|
import { Pass, FullScreenQuad } from './Pass.js';
|
|
26
26
|
import { SimplexNoise } from '../math/SimplexNoise.js';
|
|
27
|
-
import { SSAOShader } from '../shaders/SSAOShader.js';
|
|
28
|
-
import { SSAOBlurShader } from '../shaders/SSAOShader.js';
|
|
29
|
-
import { SSAODepthShader } from '../shaders/SSAOShader.js';
|
|
27
|
+
import { SSAOBlurShader, SSAODepthShader, SSAOShader } from '../shaders/SSAOShader.js';
|
|
30
28
|
import { CopyShader } from '../shaders/CopyShader.js';
|
|
31
29
|
|
|
32
30
|
class SSAOPass extends Pass {
|
|
@@ -169,7 +167,7 @@ class SSAOPass extends Pass {
|
|
|
169
167
|
this.copyMaterial.dispose();
|
|
170
168
|
this.depthRenderMaterial.dispose();
|
|
171
169
|
|
|
172
|
-
//
|
|
170
|
+
// dispose full screen quad
|
|
173
171
|
|
|
174
172
|
this.fsQuad.dispose();
|
|
175
173
|
|
|
@@ -16,9 +16,7 @@ import {
|
|
|
16
16
|
HalfFloatType,
|
|
17
17
|
} from 'three';
|
|
18
18
|
import { Pass, FullScreenQuad } from './Pass.js';
|
|
19
|
-
import { SSRShader } from '../shaders/SSRShader.js';
|
|
20
|
-
import { SSRBlurShader } from '../shaders/SSRShader.js';
|
|
21
|
-
import { SSRDepthShader } from '../shaders/SSRShader.js';
|
|
19
|
+
import { SSRBlurShader, SSRDepthShader, SSRShader } from '../shaders/SSRShader.js';
|
|
22
20
|
import { CopyShader } from '../shaders/CopyShader.js';
|
|
23
21
|
|
|
24
22
|
class SSRPass extends Pass {
|
|
@@ -337,7 +335,7 @@ class SSRPass extends Pass {
|
|
|
337
335
|
this.copyMaterial.dispose();
|
|
338
336
|
this.depthRenderMaterial.dispose();
|
|
339
337
|
|
|
340
|
-
//
|
|
338
|
+
// dispose full screen quad
|
|
341
339
|
|
|
342
340
|
this.fsQuad.dispose();
|
|
343
341
|
|
|
@@ -92,7 +92,7 @@ class UnrealBloomPass extends Pass {
|
|
|
92
92
|
|
|
93
93
|
for ( let i = 0; i < this.nMips; i ++ ) {
|
|
94
94
|
|
|
95
|
-
this.separableBlurMaterials.push( this.
|
|
95
|
+
this.separableBlurMaterials.push( this.getSeparableBlurMaterial( kernelSizeArray[ i ] ) );
|
|
96
96
|
|
|
97
97
|
this.separableBlurMaterials[ i ].uniforms[ 'invSize' ].value = new Vector2( 1 / resx, 1 / resy );
|
|
98
98
|
|
|
@@ -296,7 +296,7 @@ class UnrealBloomPass extends Pass {
|
|
|
296
296
|
|
|
297
297
|
}
|
|
298
298
|
|
|
299
|
-
|
|
299
|
+
getSeparableBlurMaterial( kernelRadius ) {
|
|
300
300
|
|
|
301
301
|
const coefficients = [];
|
|
302
302
|
|
|
@@ -8,10 +8,12 @@ import {
|
|
|
8
8
|
SRGBColorSpace,
|
|
9
9
|
Vector3
|
|
10
10
|
} from 'three';
|
|
11
|
-
import {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
11
|
+
import {
|
|
12
|
+
Projector,
|
|
13
|
+
RenderableFace,
|
|
14
|
+
RenderableLine,
|
|
15
|
+
RenderableSprite
|
|
16
|
+
} from '../renderers/Projector.js';
|
|
15
17
|
|
|
16
18
|
class SVGObject extends Object3D {
|
|
17
19
|
|
|
@@ -104,7 +104,7 @@ const BokehShader = {
|
|
|
104
104
|
|
|
105
105
|
float vignout = 1.3; // vignetting outer border
|
|
106
106
|
float vignin = 0.0; // vignetting inner border
|
|
107
|
-
float vignfade = 22.0; // f-stops till
|
|
107
|
+
float vignfade = 22.0; // f-stops till vignette fades
|
|
108
108
|
|
|
109
109
|
uniform bool shaderFocus;
|
|
110
110
|
// disable if you use external focalDepth value
|
|
@@ -12,7 +12,7 @@ import {
|
|
|
12
12
|
* sample count to produce a blur filter with large support.
|
|
13
13
|
*
|
|
14
14
|
* My implementation performs 3 passes, similar to the implementation from Sousa. I found
|
|
15
|
-
* just 6 samples per pass produced
|
|
15
|
+
* just 6 samples per pass produced acceptable results. The blur is applied three times,
|
|
16
16
|
* with decreasing filter support. The result is equivalent to a single pass with
|
|
17
17
|
* 6*6*6 = 216 samples.
|
|
18
18
|
*
|
|
@@ -136,12 +136,12 @@ const GodRaysGenerateShader = {
|
|
|
136
136
|
// - see http://code.google.com/p/chromium/issues/detail?id=153105
|
|
137
137
|
|
|
138
138
|
/*
|
|
139
|
-
// Unrolling
|
|
139
|
+
// Unrolling didn't do much on my hardware (ATI Mobility Radeon 3450),
|
|
140
140
|
// so i've just left the loop
|
|
141
141
|
|
|
142
142
|
"for ( float i = 0.0; i < TAPS_PER_PASS; i += 1.0 ) {",
|
|
143
143
|
|
|
144
|
-
// Accumulate samples, making sure we
|
|
144
|
+
// Accumulate samples, making sure we don't walk past the light source.
|
|
145
145
|
|
|
146
146
|
// The check for uv.y < 1 would not be necessary with "border" UV wrap
|
|
147
147
|
// mode, with a black border color. I don't think this is currently
|
|
@@ -28,7 +28,7 @@ const OutputShader = {
|
|
|
28
28
|
}`,
|
|
29
29
|
|
|
30
30
|
fragmentShader: /* glsl */`
|
|
31
|
-
|
|
31
|
+
|
|
32
32
|
precision highp float;
|
|
33
33
|
|
|
34
34
|
uniform sampler2D tDiffuse;
|
|
@@ -68,6 +68,10 @@ const OutputShader = {
|
|
|
68
68
|
|
|
69
69
|
gl_FragColor.rgb = NeutralToneMapping( gl_FragColor.rgb );
|
|
70
70
|
|
|
71
|
+
#elif defined( CUSTOM_TONE_MAPPING )
|
|
72
|
+
|
|
73
|
+
gl_FragColor.rgb = CustomToneMapping( gl_FragColor.rgb );
|
|
74
|
+
|
|
71
75
|
#endif
|
|
72
76
|
|
|
73
77
|
// color space
|
|
@@ -79,7 +79,7 @@ const SobelOperatorShader = {
|
|
|
79
79
|
Gy[0][1] * tx0y1 + Gy[1][1] * tx1y1 + Gy[2][1] * tx2y1 +
|
|
80
80
|
Gy[0][2] * tx0y2 + Gy[1][2] * tx1y2 + Gy[2][2] * tx2y2;
|
|
81
81
|
|
|
82
|
-
//
|
|
82
|
+
// magnitude of the total gradient
|
|
83
83
|
|
|
84
84
|
float G = sqrt( ( valueGx * valueGx ) + ( valueGy * valueGy ) );
|
|
85
85
|
|
|
@@ -461,11 +461,11 @@ class GLSLDecoder {
|
|
|
461
461
|
const isHex = /^(0x)/.test( firstToken.str );
|
|
462
462
|
|
|
463
463
|
if ( isHex ) type = 'int';
|
|
464
|
-
else if ( /u$/.test( firstToken.str ) ) type = 'uint';
|
|
464
|
+
else if ( /u$|U$/.test( firstToken.str ) ) type = 'uint';
|
|
465
465
|
else if ( /f|e|\./.test( firstToken.str ) ) type = 'float';
|
|
466
466
|
else type = 'int';
|
|
467
467
|
|
|
468
|
-
let str = firstToken.str.replace( /u|i$/, '' );
|
|
468
|
+
let str = firstToken.str.replace( /u|U|i$/, '' );
|
|
469
469
|
|
|
470
470
|
if ( isHex === false ) {
|
|
471
471
|
|
|
@@ -1,11 +1,18 @@
|
|
|
1
|
-
import { RenderTarget, Vector2, QuadMesh, NodeMaterial,
|
|
1
|
+
import { RenderTarget, Vector2, QuadMesh, NodeMaterial, RendererUtils, TempNode, NodeUpdateType } from 'three/webgpu';
|
|
2
2
|
import { nodeObject, Fn, float, vec4, uv, texture, passTexture, uniform, sign, max, convertToTexture } from 'three/tsl';
|
|
3
3
|
|
|
4
|
+
/** @module AfterImageNode **/
|
|
5
|
+
|
|
4
6
|
const _size = /*@__PURE__*/ new Vector2();
|
|
5
7
|
const _quadMeshComp = /*@__PURE__*/ new QuadMesh();
|
|
6
8
|
|
|
7
9
|
let _rendererState;
|
|
8
10
|
|
|
11
|
+
/**
|
|
12
|
+
* Post processing node for creating an after image effect.
|
|
13
|
+
*
|
|
14
|
+
* @augments TempNode
|
|
15
|
+
*/
|
|
9
16
|
class AfterImageNode extends TempNode {
|
|
10
17
|
|
|
11
18
|
static get type() {
|
|
@@ -14,32 +21,91 @@ class AfterImageNode extends TempNode {
|
|
|
14
21
|
|
|
15
22
|
}
|
|
16
23
|
|
|
24
|
+
/**
|
|
25
|
+
* Constructs a new after image node.
|
|
26
|
+
*
|
|
27
|
+
* @param {TextureNode} textureNode - The texture node that represents the input of the effect.
|
|
28
|
+
* @param {Number} [damp=0.96] - The damping intensity. A higher value means a stronger after image effect.
|
|
29
|
+
*/
|
|
17
30
|
constructor( textureNode, damp = 0.96 ) {
|
|
18
31
|
|
|
19
32
|
super( 'vec4' );
|
|
20
33
|
|
|
34
|
+
/**
|
|
35
|
+
* The texture node that represents the input of the effect.
|
|
36
|
+
*
|
|
37
|
+
* @type {TextureNode}
|
|
38
|
+
*/
|
|
21
39
|
this.textureNode = textureNode;
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* The texture represents the pervious frame.
|
|
43
|
+
*
|
|
44
|
+
* @type {TextureNode}
|
|
45
|
+
*/
|
|
22
46
|
this.textureNodeOld = texture();
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* The damping intensity as a uniform node.
|
|
50
|
+
*
|
|
51
|
+
* @type {UniformNode<float>}
|
|
52
|
+
*/
|
|
23
53
|
this.damp = uniform( damp );
|
|
24
54
|
|
|
55
|
+
/**
|
|
56
|
+
* The render target used for compositing the effect.
|
|
57
|
+
*
|
|
58
|
+
* @private
|
|
59
|
+
* @type {RenderTarget}
|
|
60
|
+
*/
|
|
25
61
|
this._compRT = new RenderTarget( 1, 1, { depthBuffer: false } );
|
|
26
62
|
this._compRT.texture.name = 'AfterImageNode.comp';
|
|
27
63
|
|
|
64
|
+
/**
|
|
65
|
+
* The render target that represents the previous frame.
|
|
66
|
+
*
|
|
67
|
+
* @private
|
|
68
|
+
* @type {RenderTarget}
|
|
69
|
+
*/
|
|
28
70
|
this._oldRT = new RenderTarget( 1, 1, { depthBuffer: false } );
|
|
29
71
|
this._oldRT.texture.name = 'AfterImageNode.old';
|
|
30
72
|
|
|
73
|
+
/**
|
|
74
|
+
* The result of the effect is represented as a separate texture node.
|
|
75
|
+
*
|
|
76
|
+
* @private
|
|
77
|
+
* @type {PassTextureNode}
|
|
78
|
+
*/
|
|
31
79
|
this._textureNode = passTexture( this, this._compRT.texture );
|
|
32
80
|
|
|
81
|
+
/**
|
|
82
|
+
* The `updateBeforeType` is set to `NodeUpdateType.FRAME` since the node renders
|
|
83
|
+
* its effect once per frame in `updateBefore()`.
|
|
84
|
+
*
|
|
85
|
+
* @type {String}
|
|
86
|
+
* @default 'frame'
|
|
87
|
+
*/
|
|
33
88
|
this.updateBeforeType = NodeUpdateType.FRAME;
|
|
34
89
|
|
|
35
90
|
}
|
|
36
91
|
|
|
92
|
+
/**
|
|
93
|
+
* Returns the result of the effect as a texture node.
|
|
94
|
+
*
|
|
95
|
+
* @return {PassTextureNode} A texture node that represents the result of the effect.
|
|
96
|
+
*/
|
|
37
97
|
getTextureNode() {
|
|
38
98
|
|
|
39
99
|
return this._textureNode;
|
|
40
100
|
|
|
41
101
|
}
|
|
42
102
|
|
|
103
|
+
/**
|
|
104
|
+
* Sets the size of the effect.
|
|
105
|
+
*
|
|
106
|
+
* @param {Number} width - The width of the effect.
|
|
107
|
+
* @param {Number} height - The height of the effect.
|
|
108
|
+
*/
|
|
43
109
|
setSize( width, height ) {
|
|
44
110
|
|
|
45
111
|
this._compRT.setSize( width, height );
|
|
@@ -47,11 +113,16 @@ class AfterImageNode extends TempNode {
|
|
|
47
113
|
|
|
48
114
|
}
|
|
49
115
|
|
|
116
|
+
/**
|
|
117
|
+
* This method is used to render the effect once per frame.
|
|
118
|
+
*
|
|
119
|
+
* @param {NodeFrame} frame - The current node frame.
|
|
120
|
+
*/
|
|
50
121
|
updateBefore( frame ) {
|
|
51
122
|
|
|
52
123
|
const { renderer } = frame;
|
|
53
124
|
|
|
54
|
-
_rendererState =
|
|
125
|
+
_rendererState = RendererUtils.resetRendererState( renderer, _rendererState );
|
|
55
126
|
|
|
56
127
|
//
|
|
57
128
|
|
|
@@ -86,10 +157,16 @@ class AfterImageNode extends TempNode {
|
|
|
86
157
|
|
|
87
158
|
textureNode.value = currentTexture;
|
|
88
159
|
|
|
89
|
-
|
|
160
|
+
RendererUtils.restoreRendererState( renderer, _rendererState );
|
|
90
161
|
|
|
91
162
|
}
|
|
92
163
|
|
|
164
|
+
/**
|
|
165
|
+
* This method is used to setup the effect's TSL code.
|
|
166
|
+
*
|
|
167
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
168
|
+
* @return {PassTextureNode}
|
|
169
|
+
*/
|
|
93
170
|
setup( builder ) {
|
|
94
171
|
|
|
95
172
|
const textureNode = this.textureNode;
|
|
@@ -101,7 +178,7 @@ class AfterImageNode extends TempNode {
|
|
|
101
178
|
|
|
102
179
|
textureNodeOld.uvNode = uvNode;
|
|
103
180
|
|
|
104
|
-
const sampleTexture = ( uv ) => textureNode.
|
|
181
|
+
const sampleTexture = ( uv ) => textureNode.sample( uv );
|
|
105
182
|
|
|
106
183
|
const when_gt = Fn( ( [ x_immutable, y_immutable ] ) => {
|
|
107
184
|
|
|
@@ -141,6 +218,10 @@ class AfterImageNode extends TempNode {
|
|
|
141
218
|
|
|
142
219
|
}
|
|
143
220
|
|
|
221
|
+
/**
|
|
222
|
+
* Frees internal resources. This method should be called
|
|
223
|
+
* when the effect is no longer required.
|
|
224
|
+
*/
|
|
144
225
|
dispose() {
|
|
145
226
|
|
|
146
227
|
this._compRT.dispose();
|
|
@@ -150,6 +231,14 @@ class AfterImageNode extends TempNode {
|
|
|
150
231
|
|
|
151
232
|
}
|
|
152
233
|
|
|
234
|
+
/**
|
|
235
|
+
* TSL function for creating an after image node for post processing.
|
|
236
|
+
*
|
|
237
|
+
* @function
|
|
238
|
+
* @param {Node<vec4>} node - The node that represents the input of the effect.
|
|
239
|
+
* @param {Number} [damp=0.96] - The damping intensity. A higher value means a stronger after image effect.
|
|
240
|
+
* @returns {AfterImageNode}
|
|
241
|
+
*/
|
|
153
242
|
export const afterImage = ( node, damp ) => nodeObject( new AfterImageNode( convertToTexture( node ), damp ) );
|
|
154
243
|
|
|
155
244
|
export default AfterImageNode;
|
|
@@ -2,6 +2,13 @@ import { Matrix3, NodeMaterial } from 'three/webgpu';
|
|
|
2
2
|
import { clamp, nodeObject, Fn, vec4, uv, uniform, max } from 'three/tsl';
|
|
3
3
|
import StereoCompositePassNode from './StereoCompositePassNode.js';
|
|
4
4
|
|
|
5
|
+
/** @module AnaglyphPassNode **/
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* A render pass node that creates an anaglyph effect.
|
|
9
|
+
*
|
|
10
|
+
* @augments StereoCompositePassNode
|
|
11
|
+
*/
|
|
5
12
|
class AnaglyphPassNode extends StereoCompositePassNode {
|
|
6
13
|
|
|
7
14
|
static get type() {
|
|
@@ -10,20 +17,43 @@ class AnaglyphPassNode extends StereoCompositePassNode {
|
|
|
10
17
|
|
|
11
18
|
}
|
|
12
19
|
|
|
20
|
+
/**
|
|
21
|
+
* Constructs a new anaglyph pass node.
|
|
22
|
+
*
|
|
23
|
+
* @param {Scene} scene - The scene to render.
|
|
24
|
+
* @param {Camera} camera - The camera to render the scene with.
|
|
25
|
+
*/
|
|
13
26
|
constructor( scene, camera ) {
|
|
14
27
|
|
|
15
28
|
super( scene, camera );
|
|
16
29
|
|
|
30
|
+
/**
|
|
31
|
+
* This flag can be used for type testing.
|
|
32
|
+
*
|
|
33
|
+
* @type {Boolean}
|
|
34
|
+
* @readonly
|
|
35
|
+
* @default true
|
|
36
|
+
*/
|
|
17
37
|
this.isAnaglyphPassNode = true;
|
|
18
38
|
|
|
19
39
|
// Dubois matrices from https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.7.6968&rep=rep1&type=pdf#page=4
|
|
20
40
|
|
|
41
|
+
/**
|
|
42
|
+
* Color matrix node for the left eye.
|
|
43
|
+
*
|
|
44
|
+
* @type {UniformNode<mat3>}
|
|
45
|
+
*/
|
|
21
46
|
this._colorMatrixLeft = uniform( new Matrix3().fromArray( [
|
|
22
47
|
0.456100, - 0.0400822, - 0.0152161,
|
|
23
48
|
0.500484, - 0.0378246, - 0.0205971,
|
|
24
49
|
0.176381, - 0.0157589, - 0.00546856
|
|
25
50
|
] ) );
|
|
26
51
|
|
|
52
|
+
/**
|
|
53
|
+
* Color matrix node for the right eye.
|
|
54
|
+
*
|
|
55
|
+
* @type {UniformNode<mat3>}
|
|
56
|
+
*/
|
|
27
57
|
this._colorMatrixRight = uniform( new Matrix3().fromArray( [
|
|
28
58
|
- 0.0434706, 0.378476, - 0.0721527,
|
|
29
59
|
- 0.0879388, 0.73364, - 0.112961,
|
|
@@ -32,14 +62,20 @@ class AnaglyphPassNode extends StereoCompositePassNode {
|
|
|
32
62
|
|
|
33
63
|
}
|
|
34
64
|
|
|
65
|
+
/**
|
|
66
|
+
* This method is used to setup the effect's TSL code.
|
|
67
|
+
*
|
|
68
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
69
|
+
* @return {PassTextureNode}
|
|
70
|
+
*/
|
|
35
71
|
setup( builder ) {
|
|
36
72
|
|
|
37
73
|
const uvNode = uv();
|
|
38
74
|
|
|
39
75
|
const anaglyph = Fn( () => {
|
|
40
76
|
|
|
41
|
-
const colorL = this._mapLeft.
|
|
42
|
-
const colorR = this._mapRight.
|
|
77
|
+
const colorL = this._mapLeft.sample( uvNode );
|
|
78
|
+
const colorR = this._mapRight.sample( uvNode );
|
|
43
79
|
|
|
44
80
|
const color = clamp( this._colorMatrixLeft.mul( colorL.rgb ).add( this._colorMatrixRight.mul( colorR.rgb ) ) );
|
|
45
81
|
|
|
@@ -60,4 +96,12 @@ class AnaglyphPassNode extends StereoCompositePassNode {
|
|
|
60
96
|
|
|
61
97
|
export default AnaglyphPassNode;
|
|
62
98
|
|
|
99
|
+
/**
|
|
100
|
+
* TSL function for creating an anaglyph pass node.
|
|
101
|
+
*
|
|
102
|
+
* @function
|
|
103
|
+
* @param {Scene} scene - The scene to render.
|
|
104
|
+
* @param {Camera} camera - The camera to render the scene with.
|
|
105
|
+
* @returns {AnaglyphPassNode}
|
|
106
|
+
*/
|
|
63
107
|
export const anaglyphPass = ( scene, camera ) => nodeObject( new AnaglyphPassNode( scene, camera ) );
|