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
|
@@ -20,6 +20,7 @@ import {
|
|
|
20
20
|
* Make a new DataTexture to store the descriptions of the curves.
|
|
21
21
|
*
|
|
22
22
|
* @param { number } numberOfCurves the number of curves needed to be described by this texture.
|
|
23
|
+
* @returns { DataTexture }
|
|
23
24
|
*/
|
|
24
25
|
export function initSplineTexture( numberOfCurves = 1 ) {
|
|
25
26
|
|
|
@@ -93,7 +94,8 @@ function setTextureValue( texture, index, x, y, z, o ) {
|
|
|
93
94
|
/**
|
|
94
95
|
* Create a new set of uniforms for describing the curve modifier
|
|
95
96
|
*
|
|
96
|
-
* @param { DataTexture }
|
|
97
|
+
* @param { DataTexture } splineTexture which holds the curve description
|
|
98
|
+
* @returns { Object } The uniforms object to be used in the shader
|
|
97
99
|
*/
|
|
98
100
|
export function getUniforms( splineTexture ) {
|
|
99
101
|
|
|
@@ -137,10 +139,10 @@ export function modifyShader( material, uniforms, numberOfCurves = 1 ) {
|
|
|
137
139
|
// chunk import moved in front of modified shader below
|
|
138
140
|
.replace( '#include <beginnormal_vertex>', '' )
|
|
139
141
|
|
|
140
|
-
// vec3 transformedNormal declaration
|
|
142
|
+
// vec3 transformedNormal declaration overridden below
|
|
141
143
|
.replace( '#include <defaultnormal_vertex>', '' )
|
|
142
144
|
|
|
143
|
-
// vec3 transformed declaration
|
|
145
|
+
// vec3 transformed declaration overridden below
|
|
144
146
|
.replace( '#include <begin_vertex>', '' )
|
|
145
147
|
|
|
146
148
|
// shader override
|
|
@@ -196,7 +198,7 @@ vec3 transformedNormal = normalMatrix * (basis * objectNormal);
|
|
|
196
198
|
}
|
|
197
199
|
|
|
198
200
|
/**
|
|
199
|
-
* A helper class for making meshes bend
|
|
201
|
+
* A helper class for making meshes bend around curves
|
|
200
202
|
*/
|
|
201
203
|
export class Flow {
|
|
202
204
|
|
|
@@ -207,8 +209,8 @@ export class Flow {
|
|
|
207
209
|
constructor( mesh, numberOfCurves = 1 ) {
|
|
208
210
|
|
|
209
211
|
const obj3D = mesh.clone();
|
|
210
|
-
const
|
|
211
|
-
const uniforms = getUniforms(
|
|
212
|
+
const splineTexture = initSplineTexture( numberOfCurves );
|
|
213
|
+
const uniforms = getUniforms( splineTexture );
|
|
212
214
|
obj3D.traverse( function ( child ) {
|
|
213
215
|
|
|
214
216
|
if (
|
|
@@ -245,7 +247,7 @@ export class Flow {
|
|
|
245
247
|
this.curveLengthArray = new Array( numberOfCurves );
|
|
246
248
|
|
|
247
249
|
this.object3D = obj3D;
|
|
248
|
-
this.
|
|
250
|
+
this.splineTexture = splineTexture;
|
|
249
251
|
this.uniforms = uniforms;
|
|
250
252
|
|
|
251
253
|
}
|
|
@@ -257,7 +259,7 @@ export class Flow {
|
|
|
257
259
|
this.uniforms.spineLength.value = curveLength;
|
|
258
260
|
this.curveLengthArray[ index ] = curveLength;
|
|
259
261
|
this.curveArray[ index ] = curve;
|
|
260
|
-
updateSplineTexture( this.
|
|
262
|
+
updateSplineTexture( this.splineTexture, curve, index );
|
|
261
263
|
|
|
262
264
|
}
|
|
263
265
|
|
|
@@ -19,7 +19,8 @@ import { modelWorldMatrix, normalLocal, vec2, vec3, vec4, mat3, varyingProperty,
|
|
|
19
19
|
/**
|
|
20
20
|
* Make a new DataTexture to store the descriptions of the curves.
|
|
21
21
|
*
|
|
22
|
-
* @param { number } numberOfCurves the number of curves needed to be described by this texture.
|
|
22
|
+
* @param { number } [numberOfCurves=1] the number of curves needed to be described by this texture.
|
|
23
|
+
* @returns { DataTexture } The new DataTexture
|
|
23
24
|
*/
|
|
24
25
|
export function initSplineTexture( numberOfCurves = 1 ) {
|
|
25
26
|
|
|
@@ -94,7 +95,8 @@ function setTextureValue( texture, index, x, y, z, o ) {
|
|
|
94
95
|
/**
|
|
95
96
|
* Create a new set of uniforms for describing the curve modifier
|
|
96
97
|
*
|
|
97
|
-
* @param { DataTexture }
|
|
98
|
+
* @param { DataTexture } splineTexture which holds the curve description
|
|
99
|
+
* @returns { Object } The uniforms object
|
|
98
100
|
*/
|
|
99
101
|
export function getUniforms( splineTexture ) {
|
|
100
102
|
|
|
@@ -155,7 +157,7 @@ export function modifyShader( material, uniforms, numberOfCurves ) {
|
|
|
155
157
|
}
|
|
156
158
|
|
|
157
159
|
/**
|
|
158
|
-
* A helper class for making meshes bend
|
|
160
|
+
* A helper class for making meshes bend around curves
|
|
159
161
|
*/
|
|
160
162
|
export class Flow {
|
|
161
163
|
|
|
@@ -166,8 +168,8 @@ export class Flow {
|
|
|
166
168
|
constructor( mesh, numberOfCurves = 1 ) {
|
|
167
169
|
|
|
168
170
|
const obj3D = mesh.clone();
|
|
169
|
-
const
|
|
170
|
-
const uniforms = getUniforms(
|
|
171
|
+
const splineTexture = initSplineTexture( numberOfCurves );
|
|
172
|
+
const uniforms = getUniforms( splineTexture );
|
|
171
173
|
|
|
172
174
|
obj3D.traverse( function ( child ) {
|
|
173
175
|
|
|
@@ -205,7 +207,7 @@ export class Flow {
|
|
|
205
207
|
this.curveLengthArray = new Array( numberOfCurves );
|
|
206
208
|
|
|
207
209
|
this.object3D = obj3D;
|
|
208
|
-
this.
|
|
210
|
+
this.splineTexture = splineTexture;
|
|
209
211
|
this.uniforms = uniforms;
|
|
210
212
|
|
|
211
213
|
}
|
|
@@ -220,7 +222,7 @@ export class Flow {
|
|
|
220
222
|
this.curveLengthArray[ index ] = curveLength;
|
|
221
223
|
this.curveArray[ index ] = curve;
|
|
222
224
|
|
|
223
|
-
updateSplineTexture( this.
|
|
225
|
+
updateSplineTexture( this.splineTexture, curve, index );
|
|
224
226
|
|
|
225
227
|
}
|
|
226
228
|
|
|
@@ -29,7 +29,7 @@ class SimplifyModifier {
|
|
|
29
29
|
delete geometry.morphAttributes.normal;
|
|
30
30
|
const attributes = geometry.attributes;
|
|
31
31
|
|
|
32
|
-
// this modifier can only process indexed and non-indexed
|
|
32
|
+
// this modifier can only process indexed and non-indexed geometries with at least a position attribute
|
|
33
33
|
|
|
34
34
|
for ( const name in attributes ) {
|
|
35
35
|
|
|
@@ -584,7 +584,7 @@ class Vertex {
|
|
|
584
584
|
|
|
585
585
|
// these will be computed in computeEdgeCostAtVertex()
|
|
586
586
|
this.collapseCost = 0; // cost of collapsing this vertex, the less the better. aka objdist
|
|
587
|
-
this.collapseNeighbor = null; // best
|
|
587
|
+
this.collapseNeighbor = null; // best candidate for collapsing
|
|
588
588
|
|
|
589
589
|
}
|
|
590
590
|
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { Mesh, MeshBasicMaterial, SphereGeometry, Vector3 } from 'three';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
* A ground-projected skybox. The height is how far the camera that took the photo was above the ground -
|
|
5
|
-
* a larger value will magnify the downward part of the image. By default the object is centered at the camera,
|
|
6
|
-
* so it is often helpful to set skybox.position.y = height to put the ground at the origin. Set the radius
|
|
4
|
+
* A ground-projected skybox. The height is how far the camera that took the photo was above the ground -
|
|
5
|
+
* a larger value will magnify the downward part of the image. By default the object is centered at the camera,
|
|
6
|
+
* so it is often helpful to set skybox.position.y = height to put the ground at the origin. Set the radius
|
|
7
7
|
* large enough to ensure your user's camera stays inside.
|
|
8
8
|
*/
|
|
9
9
|
|
|
@@ -18,7 +18,7 @@ class GroundedSkybox extends Mesh {
|
|
|
18
18
|
}
|
|
19
19
|
|
|
20
20
|
const geometry = new SphereGeometry( radius, 2 * resolution, resolution );
|
|
21
|
-
geometry.scale( 1, 1, -1 );
|
|
21
|
+
geometry.scale( 1, 1, - 1 );
|
|
22
22
|
|
|
23
23
|
const pos = geometry.getAttribute( 'position' );
|
|
24
24
|
const tmp = new Vector3();
|
|
@@ -77,7 +77,7 @@ Sky.SkyShader = {
|
|
|
77
77
|
|
|
78
78
|
// wavelength of used primaries, according to preetham
|
|
79
79
|
const vec3 lambda = vec3( 680E-9, 550E-9, 450E-9 );
|
|
80
|
-
// this pre-
|
|
80
|
+
// this pre-calculation replaces older TotalRayleigh(vec3 lambda) function:
|
|
81
81
|
// (8.0 * pow(pi, 3.0) * pow(pow(n, 2.0) - 1.0, 2.0) * (6.0 + 3.0 * pn)) / (3.0 * N * pow(lambda, vec3(4.0)) * (6.0 - 7.0 * pn))
|
|
82
82
|
const vec3 totalRayleigh = vec3( 5.804542996261093E-6, 1.3562911419845635E-5, 3.0265902468824876E-5 );
|
|
83
83
|
|
|
@@ -120,7 +120,7 @@ Sky.SkyShader = {
|
|
|
120
120
|
|
|
121
121
|
float rayleighCoefficient = rayleigh - ( 1.0 * ( 1.0 - vSunfade ) );
|
|
122
122
|
|
|
123
|
-
// extinction (
|
|
123
|
+
// extinction (absorption + out scattering)
|
|
124
124
|
// rayleigh coefficients
|
|
125
125
|
vBetaR = totalRayleigh * rayleighCoefficient;
|
|
126
126
|
|
|
@@ -47,7 +47,7 @@ class SkyMesh extends Mesh {
|
|
|
47
47
|
|
|
48
48
|
// wavelength of used primaries, according to preetham
|
|
49
49
|
// const lambda = vec3( 680E-9, 550E-9, 450E-9 );
|
|
50
|
-
// this pre-
|
|
50
|
+
// this pre-calculation replaces older TotalRayleigh(vec3 lambda) function:
|
|
51
51
|
// (8.0 * pow(pi, 3.0) * pow(pow(n, 2.0) - 1.0, 2.0) * (6.0 + 3.0 * pn)) / (3.0 * N * pow(lambda, vec3(4.0)) * (6.0 - 7.0 * pn))
|
|
52
52
|
const totalRayleigh = vec3( 5.804542996261093E-6, 1.3562911419845635E-5, 3.0265902468824876E-5 );
|
|
53
53
|
|
|
@@ -85,7 +85,7 @@ class SkyMesh extends Mesh {
|
|
|
85
85
|
|
|
86
86
|
const rayleighCoefficient = this.rayleigh.sub( float( 1.0 ).mul( float( 1.0 ).sub( vSunfade ) ) );
|
|
87
87
|
|
|
88
|
-
// extinction (
|
|
88
|
+
// extinction (absorption + out scattering)
|
|
89
89
|
// rayleigh coefficients
|
|
90
90
|
varyingProperty( 'vec3', 'vBetaR' ).assign( totalRayleigh.mul( rayleighCoefficient ) );
|
|
91
91
|
|
|
@@ -98,7 +98,7 @@ class SkyMesh extends Mesh {
|
|
|
98
98
|
|
|
99
99
|
// position
|
|
100
100
|
|
|
101
|
-
const position = modelViewProjection
|
|
101
|
+
const position = modelViewProjection;
|
|
102
102
|
position.z.assign( position.w ); // set z to camera.far
|
|
103
103
|
|
|
104
104
|
return position;
|
|
@@ -132,7 +132,7 @@ class Water extends Mesh {
|
|
|
132
132
|
this.material.uniforms[ 'reflectivity' ].value = reflectivity;
|
|
133
133
|
this.material.uniforms[ 'textureMatrix' ].value = textureMatrix;
|
|
134
134
|
|
|
135
|
-
//
|
|
135
|
+
// initial values
|
|
136
136
|
|
|
137
137
|
this.material.uniforms[ 'config' ].value.x = 0; // flowMapOffset0
|
|
138
138
|
this.material.uniforms[ 'config' ].value.y = halfCycle; // flowMapOffset1
|
|
@@ -122,8 +122,8 @@ class WaterNode extends TempNode {
|
|
|
122
122
|
const normalUv0 = uvs.mul( this.scale ).add( flow.mul( flowMapOffset0 ) );
|
|
123
123
|
const normalUv1 = uvs.mul( this.scale ).add( flow.mul( flowMapOffset1 ) );
|
|
124
124
|
|
|
125
|
-
const normalColor0 = this.normalMap0.
|
|
126
|
-
const normalColor1 = this.normalMap1.
|
|
125
|
+
const normalColor0 = this.normalMap0.sample( normalUv0 );
|
|
126
|
+
const normalColor1 = this.normalMap1.sample( normalUv1 );
|
|
127
127
|
|
|
128
128
|
// linear interpolate to get the final normal color
|
|
129
129
|
const flowLerp = abs( halfCycle.sub( flowMapOffset0 ) ).div( halfCycle );
|
|
@@ -47,10 +47,10 @@ class WaterMesh extends Mesh {
|
|
|
47
47
|
const uv2 = add( div( uv, vec2( 8907.0, 9803.0 ) ), vec2( div( offset, 101 ), div( offset, 97 ) ) ).toVar();
|
|
48
48
|
const uv3 = sub( div( uv, vec2( 1091.0, 1027.0 ) ), vec2( div( offset, 109 ), div( offset, - 113 ) ) ).toVar();
|
|
49
49
|
|
|
50
|
-
const sample0 = this.waterNormals.
|
|
51
|
-
const sample1 = this.waterNormals.
|
|
52
|
-
const sample2 = this.waterNormals.
|
|
53
|
-
const sample3 = this.waterNormals.
|
|
50
|
+
const sample0 = this.waterNormals.sample( uv0 );
|
|
51
|
+
const sample1 = this.waterNormals.sample( uv1 );
|
|
52
|
+
const sample2 = this.waterNormals.sample( uv2 );
|
|
53
|
+
const sample3 = this.waterNormals.sample( uv3 );
|
|
54
54
|
|
|
55
55
|
const noise = sample0.add( sample1 ).add( sample2 ).add( sample3 );
|
|
56
56
|
|
|
@@ -71,7 +71,7 @@ class BloomPass extends Pass {
|
|
|
71
71
|
|
|
72
72
|
if ( maskActive ) renderer.state.buffers.stencil.setTest( false );
|
|
73
73
|
|
|
74
|
-
// Render quad with
|
|
74
|
+
// Render quad with blurred scene into texture (convolution pass 1)
|
|
75
75
|
|
|
76
76
|
this.fsQuad.material = this.materialConvolution;
|
|
77
77
|
|
|
@@ -83,7 +83,7 @@ class BloomPass extends Pass {
|
|
|
83
83
|
this.fsQuad.render( renderer );
|
|
84
84
|
|
|
85
85
|
|
|
86
|
-
// Render quad with
|
|
86
|
+
// Render quad with blurred scene into texture (convolution pass 2)
|
|
87
87
|
|
|
88
88
|
this.convolutionUniforms[ 'tDiffuse' ].value = this.renderTargetX.texture;
|
|
89
89
|
this.convolutionUniforms[ 'uImageIncrement' ].value = BloomPass.blurY;
|
|
@@ -7,8 +7,7 @@ import {
|
|
|
7
7
|
} from 'three';
|
|
8
8
|
import { CopyShader } from '../shaders/CopyShader.js';
|
|
9
9
|
import { ShaderPass } from './ShaderPass.js';
|
|
10
|
-
import { MaskPass } from './MaskPass.js';
|
|
11
|
-
import { ClearMaskPass } from './MaskPass.js';
|
|
10
|
+
import { ClearMaskPass, MaskPass } from './MaskPass.js';
|
|
12
11
|
|
|
13
12
|
class EffectComposer {
|
|
14
13
|
|
|
@@ -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
|
|
|
@@ -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
|
|
@@ -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
|
|
|
@@ -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;
|