@plastic-software/three 0.179.0 → 0.181.1
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/build/three.cjs +1108 -591
- package/build/three.core.js +616 -345
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +488 -250
- package/build/three.module.min.js +1 -1
- package/build/three.tsl.js +37 -6
- package/build/three.tsl.min.js +1 -1
- package/build/three.webgpu.js +6576 -2152
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +6575 -2151
- package/build/three.webgpu.nodes.min.js +1 -1
- package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
- package/examples/fonts/MPLUSRounded1c/OFL.txt +91 -0
- package/examples/jsm/Addons.js +1 -1
- package/examples/jsm/animation/CCDIKSolver.js +1 -1
- package/examples/jsm/controls/ArcballControls.js +8 -8
- package/examples/jsm/controls/DragControls.js +7 -57
- package/examples/jsm/controls/FirstPersonControls.js +3 -3
- package/examples/jsm/controls/FlyControls.js +1 -1
- package/examples/jsm/controls/OrbitControls.js +2 -2
- package/examples/jsm/controls/PointerLockControls.js +2 -10
- package/examples/jsm/controls/TrackballControls.js +1 -1
- package/examples/jsm/controls/TransformControls.js +1 -1
- package/examples/jsm/effects/AsciiEffect.js +8 -8
- package/examples/jsm/exporters/DRACOExporter.js +2 -2
- package/examples/jsm/exporters/EXRExporter.js +1 -1
- package/examples/jsm/exporters/GLTFExporter.js +33 -25
- package/examples/jsm/exporters/KTX2Exporter.js +4 -2
- package/examples/jsm/exporters/PLYExporter.js +1 -1
- package/examples/jsm/exporters/USDZExporter.js +9 -2
- package/examples/jsm/geometries/DecalGeometry.js +2 -2
- package/examples/jsm/geometries/ParametricGeometry.js +1 -1
- package/examples/jsm/geometries/TeapotGeometry.js +2 -2
- package/examples/jsm/geometries/TextGeometry.js +3 -2
- package/examples/jsm/gpgpu/BitonicSort.js +715 -0
- package/examples/jsm/helpers/ViewHelper.js +43 -5
- package/examples/jsm/inspector/Inspector.js +427 -0
- package/examples/jsm/inspector/RendererInspector.js +415 -0
- package/examples/jsm/inspector/tabs/Console.js +204 -0
- package/examples/jsm/inspector/tabs/Parameters.js +332 -0
- package/examples/jsm/inspector/tabs/Performance.js +268 -0
- package/examples/jsm/inspector/tabs/Viewer.js +166 -0
- package/examples/jsm/inspector/ui/Graph.js +95 -0
- package/examples/jsm/inspector/ui/Item.js +170 -0
- package/examples/jsm/inspector/ui/List.js +75 -0
- package/examples/jsm/inspector/ui/Profiler.js +170 -0
- package/examples/jsm/inspector/ui/Style.js +654 -0
- package/examples/jsm/inspector/ui/Tab.js +46 -0
- package/examples/jsm/inspector/ui/Values.js +423 -0
- package/examples/jsm/inspector/ui/utils.js +56 -0
- package/examples/jsm/interactive/HTMLMesh.js +6 -10
- package/examples/jsm/interactive/InteractiveGroup.js +1 -1
- package/examples/jsm/interactive/SelectionBox.js +30 -0
- package/examples/jsm/libs/ktx-parse.module.js +1 -1
- package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -1
- package/examples/jsm/lines/Line2.js +3 -3
- package/examples/jsm/lines/LineGeometry.js +1 -1
- package/examples/jsm/lines/LineSegments2.js +2 -2
- package/examples/jsm/lines/Wireframe.js +2 -2
- package/examples/jsm/lines/WireframeGeometry2.js +1 -1
- package/examples/jsm/lines/webgpu/LineSegments2.js +1 -1
- package/examples/jsm/lines/webgpu/Wireframe.js +1 -1
- package/examples/jsm/loaders/3MFLoader.js +1 -1
- package/examples/jsm/loaders/ColladaLoader.js +3 -3
- package/examples/jsm/loaders/DDSLoader.js +1 -1
- package/examples/jsm/loaders/DRACOLoader.js +73 -22
- package/examples/jsm/loaders/EXRLoader.js +5 -5
- package/examples/jsm/loaders/FBXLoader.js +2 -2
- package/examples/jsm/loaders/FontLoader.js +23 -5
- package/examples/jsm/loaders/GLTFLoader.js +14 -8
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +5 -5
- package/examples/jsm/loaders/HDRLoader.js +486 -0
- package/examples/jsm/loaders/KTX2Loader.js +136 -49
- package/examples/jsm/loaders/KTXLoader.js +2 -2
- package/examples/jsm/loaders/LDrawLoader.js +1 -1
- package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
- package/examples/jsm/loaders/LUTCubeLoader.js +1 -1
- package/examples/jsm/loaders/LWOLoader.js +2 -2
- package/examples/jsm/loaders/MaterialXLoader.js +22 -5
- package/examples/jsm/loaders/OBJLoader.js +1 -1
- package/examples/jsm/loaders/PDBLoader.js +1 -1
- package/examples/jsm/loaders/RGBELoader.js +7 -473
- package/examples/jsm/loaders/SVGLoader.js +2 -2
- package/examples/jsm/loaders/TTFLoader.js +4 -4
- package/examples/jsm/loaders/UltraHDRLoader.js +2 -2
- package/examples/jsm/loaders/lwo/IFFParser.js +1 -1
- package/examples/jsm/materials/WoodNodeMaterial.js +533 -0
- package/examples/jsm/math/ColorSpaces.js +19 -1
- package/examples/jsm/math/ConvexHull.js +3 -3
- package/examples/jsm/math/ImprovedNoise.js +1 -1
- package/examples/jsm/math/Lut.js +2 -2
- package/examples/jsm/math/SimplexNoise.js +1 -1
- package/examples/jsm/misc/MD2CharacterComplex.js +1 -1
- package/examples/jsm/misc/ProgressiveLightMap.js +9 -3
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +7 -1
- package/examples/jsm/misc/TubePainter.js +383 -40
- package/examples/jsm/misc/Volume.js +1 -1
- package/examples/jsm/modifiers/SimplifyModifier.js +1 -1
- package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
- package/examples/jsm/objects/Sky.js +1 -1
- package/examples/jsm/objects/SkyMesh.js +1 -1
- package/examples/jsm/objects/Water.js +3 -3
- package/examples/jsm/objects/WaterMesh.js +6 -6
- package/examples/jsm/postprocessing/GlitchPass.js +2 -2
- package/examples/jsm/postprocessing/OutlinePass.js +1 -1
- package/examples/jsm/postprocessing/SSRPass.js +37 -8
- package/examples/jsm/postprocessing/UnrealBloomPass.js +8 -6
- package/examples/jsm/renderers/CSS2DRenderer.js +16 -5
- package/examples/jsm/renderers/CSS3DRenderer.js +7 -6
- package/examples/jsm/renderers/SVGRenderer.js +1 -1
- package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +1 -1
- package/examples/jsm/shaders/AfterimageShader.js +1 -1
- package/examples/jsm/shaders/BleachBypassShader.js +1 -1
- package/examples/jsm/shaders/BokehShader.js +1 -1
- package/examples/jsm/shaders/BokehShader2.js +1 -1
- package/examples/jsm/shaders/DotScreenShader.js +1 -1
- package/examples/jsm/shaders/FocusShader.js +1 -1
- package/examples/jsm/shaders/GTAOShader.js +2 -2
- package/examples/jsm/shaders/GodRaysShader.js +1 -1
- package/examples/jsm/shaders/KaleidoShader.js +1 -1
- package/examples/jsm/shaders/PoissonDenoiseShader.js +2 -2
- package/examples/jsm/shaders/SSRShader.js +1 -1
- package/examples/jsm/shaders/SepiaShader.js +1 -1
- package/examples/jsm/shaders/SubsurfaceScatteringShader.js +1 -1
- package/examples/jsm/shaders/TriangleBlurShader.js +1 -1
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +1 -1
- package/examples/jsm/shaders/VignetteShader.js +1 -1
- package/examples/jsm/transpiler/GLSLDecoder.js +22 -19
- package/examples/jsm/transpiler/TSLEncoder.js +9 -10
- package/examples/jsm/transpiler/WGSLEncoder.js +24 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +26 -24
- package/examples/jsm/tsl/display/AnamorphicNode.js +28 -4
- package/examples/jsm/tsl/display/BloomNode.js +7 -3
- package/examples/jsm/tsl/display/ChromaticAberrationNode.js +2 -1
- package/examples/jsm/tsl/display/DenoiseNode.js +2 -0
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +446 -90
- package/examples/jsm/tsl/display/GTAONode.js +53 -5
- package/examples/jsm/tsl/display/GaussianBlurNode.js +49 -35
- package/examples/jsm/tsl/display/OutlineNode.js +13 -2
- package/examples/jsm/tsl/display/SSGINode.js +654 -0
- package/examples/jsm/tsl/display/SSRNode.js +182 -65
- package/examples/jsm/tsl/display/SSSNode.js +488 -0
- package/examples/jsm/tsl/display/TRAANode.js +124 -7
- package/examples/jsm/tsl/display/boxBlur.js +65 -0
- package/examples/jsm/tsl/display/hashBlur.js +16 -18
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +21 -1
- package/examples/jsm/utils/BufferGeometryUtils.js +1 -1
- package/examples/jsm/utils/ShadowMapViewerGPU.js +12 -5
- package/examples/jsm/webxr/OculusHandModel.js +1 -1
- package/examples/jsm/webxr/XRControllerModelFactory.js +1 -1
- package/examples/jsm/webxr/XRHandModelFactory.js +2 -6
- package/package.json +5 -10
- package/src/Three.Core.js +4 -2
- package/src/Three.TSL.js +36 -5
- package/src/Three.WebGPU.Nodes.js +2 -0
- package/src/Three.WebGPU.js +2 -0
- package/src/animation/AnimationClip.js +20 -4
- package/src/animation/AnimationMixer.js +3 -3
- package/src/animation/AnimationObjectGroup.js +2 -1
- package/src/animation/KeyframeTrack.js +7 -6
- package/src/animation/PropertyBinding.js +12 -11
- package/src/audio/Audio.js +10 -9
- package/src/audio/PositionalAudio.js +1 -1
- package/src/cameras/OrthographicCamera.js +1 -1
- package/src/cameras/PerspectiveCamera.js +1 -1
- package/src/cameras/StereoCamera.js +2 -2
- package/src/constants.js +11 -3
- package/src/core/BufferGeometry.js +10 -10
- package/src/core/EventDispatcher.js +1 -1
- package/src/core/InterleavedBuffer.js +1 -1
- package/src/core/InterleavedBufferAttribute.js +3 -2
- package/src/core/Object3D.js +3 -2
- package/src/core/Raycaster.js +2 -1
- package/src/core/RenderTarget.js +10 -1
- package/src/extras/Controls.js +5 -4
- package/src/extras/DataUtils.js +2 -1
- package/src/extras/Earcut.js +6 -0
- package/src/extras/ImageUtils.js +2 -2
- package/src/extras/PMREMGenerator.js +268 -55
- package/src/extras/TextureUtils.js +2 -1
- package/src/extras/core/Curve.js +2 -1
- package/src/extras/core/Interpolations.js +7 -1
- package/src/extras/core/ShapePath.js +4 -4
- package/src/extras/lib/earcut.js +8 -8
- package/src/geometries/BoxGeometry.js +1 -0
- package/src/geometries/CapsuleGeometry.js +1 -0
- package/src/geometries/CircleGeometry.js +1 -0
- package/src/geometries/ConeGeometry.js +1 -0
- package/src/geometries/CylinderGeometry.js +1 -0
- package/src/geometries/DodecahedronGeometry.js +1 -0
- package/src/geometries/ExtrudeGeometry.js +8 -6
- package/src/geometries/IcosahedronGeometry.js +1 -0
- package/src/geometries/LatheGeometry.js +1 -0
- package/src/geometries/OctahedronGeometry.js +1 -0
- package/src/geometries/PlaneGeometry.js +1 -0
- package/src/geometries/RingGeometry.js +1 -0
- package/src/geometries/ShapeGeometry.js +1 -0
- package/src/geometries/SphereGeometry.js +1 -0
- package/src/geometries/TetrahedronGeometry.js +1 -0
- package/src/geometries/TorusGeometry.js +1 -0
- package/src/geometries/TorusKnotGeometry.js +1 -0
- package/src/geometries/TubeGeometry.js +1 -0
- package/src/helpers/CameraHelper.js +1 -1
- package/src/lights/webgpu/ProjectorLight.js +1 -1
- package/src/loaders/AnimationLoader.js +2 -1
- package/src/loaders/AudioLoader.js +2 -1
- package/src/loaders/BufferGeometryLoader.js +2 -2
- package/src/loaders/Cache.js +2 -2
- package/src/loaders/DataTextureLoader.js +1 -1
- package/src/loaders/FileLoader.js +3 -2
- package/src/loaders/ImageBitmapLoader.js +5 -4
- package/src/loaders/ImageLoader.js +1 -1
- package/src/loaders/Loader.js +3 -3
- package/src/loaders/LoadingManager.js +25 -3
- package/src/loaders/MaterialLoader.js +3 -2
- package/src/loaders/ObjectLoader.js +13 -13
- package/src/loaders/TextureLoader.js +1 -1
- package/src/loaders/nodes/NodeLoader.js +3 -2
- package/src/materials/Material.js +16 -3
- package/src/materials/MeshBasicMaterial.js +1 -0
- package/src/materials/MeshDepthMaterial.js +1 -0
- package/src/materials/MeshDistanceMaterial.js +1 -1
- package/src/materials/MeshLambertMaterial.js +2 -1
- package/src/materials/MeshMatcapMaterial.js +22 -0
- package/src/materials/MeshNormalMaterial.js +1 -0
- package/src/materials/MeshPhongMaterial.js +2 -1
- package/src/materials/MeshPhysicalMaterial.js +2 -1
- package/src/materials/MeshStandardMaterial.js +8 -7
- package/src/materials/MeshToonMaterial.js +1 -0
- package/src/materials/PointsMaterial.js +1 -1
- package/src/materials/ShaderMaterial.js +2 -2
- package/src/materials/nodes/Line2NodeMaterial.js +2 -2
- package/src/materials/nodes/MeshSSSNodeMaterial.js +1 -1
- package/src/materials/nodes/NodeMaterial.js +62 -22
- package/src/materials/nodes/PointsNodeMaterial.js +81 -28
- package/src/materials/nodes/SpriteNodeMaterial.js +3 -15
- package/src/materials/nodes/manager/NodeMaterialObserver.js +3 -2
- package/src/math/Color.js +6 -5
- package/src/math/ColorManagement.js +9 -3
- package/src/math/Cylindrical.js +1 -1
- package/src/math/Euler.js +2 -1
- package/src/math/MathUtils.js +13 -11
- package/src/math/Matrix2.js +1 -1
- package/src/math/Matrix3.js +2 -2
- package/src/math/Matrix4.js +7 -7
- package/src/math/Plane.js +1 -1
- package/src/math/Quaternion.js +68 -66
- package/src/math/Spherical.js +1 -1
- package/src/nodes/Nodes.js +4 -1
- package/src/nodes/TSL.js +4 -1
- package/src/nodes/accessors/BufferNode.js +1 -1
- package/src/nodes/accessors/Camera.js +133 -7
- package/src/nodes/accessors/ClippingNode.js +6 -5
- package/src/nodes/accessors/CubeTextureNode.js +5 -4
- package/src/nodes/accessors/InstanceNode.js +25 -5
- package/src/nodes/accessors/Lights.js +10 -0
- package/src/nodes/accessors/Normal.js +5 -4
- package/src/nodes/accessors/Object3DNode.js +1 -1
- package/src/nodes/accessors/Position.js +18 -2
- package/src/nodes/accessors/ReferenceBaseNode.js +1 -1
- package/src/nodes/accessors/ReferenceNode.js +3 -2
- package/src/nodes/accessors/SceneNode.js +2 -1
- package/src/nodes/accessors/StorageBufferNode.js +2 -1
- package/src/nodes/accessors/StorageTextureNode.js +22 -0
- package/src/nodes/accessors/Texture3DNode.js +14 -1
- package/src/nodes/accessors/TextureNode.js +130 -44
- package/src/nodes/code/FunctionCallNode.js +24 -4
- package/src/nodes/code/FunctionNode.js +23 -0
- package/src/nodes/core/ArrayNode.js +1 -0
- package/src/nodes/core/AssignNode.js +4 -3
- package/src/nodes/core/AttributeNode.js +2 -1
- package/src/nodes/core/ContextNode.js +29 -10
- package/src/nodes/core/IndexNode.js +2 -2
- package/src/nodes/core/InputNode.js +2 -1
- package/src/nodes/core/InspectorNode.js +128 -0
- package/src/nodes/core/{CacheNode.js → IsolateNode.js} +40 -7
- package/src/nodes/core/Node.js +152 -31
- package/src/nodes/core/NodeBuilder.js +183 -35
- package/src/nodes/core/NodeFrame.js +21 -21
- package/src/nodes/core/NodeFunction.js +2 -1
- package/src/nodes/core/NodeParser.js +2 -1
- package/src/nodes/core/NodeUniform.js +1 -1
- package/src/nodes/core/NodeUtils.js +17 -91
- package/src/nodes/core/ParameterNode.js +31 -0
- package/src/nodes/core/PropertyNode.js +7 -0
- package/src/nodes/core/StackNode.js +43 -16
- package/src/nodes/core/StructNode.js +5 -5
- package/src/nodes/core/StructTypeNode.js +1 -0
- package/src/nodes/core/SubBuildNode.js +2 -2
- package/src/nodes/core/UniformNode.js +18 -10
- package/src/nodes/core/VarNode.js +70 -33
- package/src/nodes/core/VaryingNode.js +3 -2
- package/src/nodes/display/BlendModes.js +5 -4
- package/src/nodes/display/BumpMapNode.js +1 -1
- package/src/nodes/display/ColorAdjustment.js +1 -1
- package/src/nodes/display/FrontFacingNode.js +4 -8
- package/src/nodes/display/NormalMapNode.js +2 -1
- package/src/nodes/display/PassNode.js +52 -11
- package/src/nodes/display/RenderOutputNode.js +28 -2
- package/src/nodes/display/ScreenNode.js +44 -14
- package/src/nodes/display/ToneMappingNode.js +31 -4
- package/src/nodes/display/ToonOutlinePassNode.js +8 -0
- package/src/nodes/display/ViewportDepthTextureNode.js +16 -4
- package/src/nodes/display/ViewportSharedTextureNode.js +12 -0
- package/src/nodes/display/ViewportTextureNode.js +42 -12
- package/src/nodes/fog/Fog.js +3 -2
- package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +52 -0
- package/src/nodes/functions/BSDF/DFGApprox.js +60 -19
- package/src/nodes/functions/BasicLightingModel.js +2 -1
- package/src/nodes/functions/PhysicalLightingModel.js +3 -2
- package/src/nodes/functions/VolumetricLightingModel.js +5 -5
- package/src/nodes/geometry/RangeNode.js +40 -4
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -1
- package/src/nodes/gpgpu/ComputeNode.js +17 -5
- package/src/nodes/gpgpu/SubgroupFunctionNode.js +455 -0
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +2 -1
- package/src/nodes/lighting/EnvironmentNode.js +6 -6
- package/src/nodes/lighting/LightsNode.js +3 -4
- package/src/nodes/lighting/PointShadowNode.js +6 -0
- package/src/nodes/lighting/ShadowFilterNode.js +2 -0
- package/src/nodes/lighting/ShadowNode.js +75 -8
- package/src/nodes/math/BitcastNode.js +156 -0
- package/src/nodes/math/ConditionalNode.js +24 -7
- package/src/nodes/math/MathNode.js +25 -19
- package/src/nodes/math/OperatorNode.js +7 -5
- package/src/nodes/pmrem/PMREMUtils.js +117 -2
- package/src/nodes/shapes/Shapes.js +1 -1
- package/src/nodes/tsl/TSLBase.js +5 -2
- package/src/nodes/tsl/TSLCore.js +460 -159
- package/src/nodes/utils/DebugNode.js +2 -1
- package/src/nodes/utils/EventNode.js +36 -0
- package/src/nodes/utils/FunctionOverloadingNode.js +37 -19
- package/src/nodes/utils/JoinNode.js +6 -3
- package/src/nodes/utils/LoopNode.js +20 -24
- package/src/nodes/utils/MemberNode.js +59 -7
- package/src/nodes/utils/PostProcessingUtils.js +28 -1
- package/src/nodes/utils/RTTNode.js +13 -3
- package/src/nodes/utils/ReflectorNode.js +58 -7
- package/src/nodes/utils/SampleNode.js +12 -2
- package/src/nodes/utils/SplitNode.js +11 -0
- package/src/nodes/utils/Timer.js +0 -47
- package/src/objects/BatchedMesh.js +2 -2
- package/src/objects/LOD.js +1 -1
- package/src/objects/Line.js +2 -1
- package/src/objects/LineSegments.js +2 -1
- package/src/objects/Skeleton.js +3 -2
- package/src/objects/SkinnedMesh.js +3 -1
- package/src/objects/Sprite.js +4 -3
- package/src/renderers/WebGLRenderer.js +48 -41
- package/src/renderers/common/Animation.js +13 -1
- package/src/renderers/common/Attributes.js +1 -1
- package/src/renderers/common/Backend.js +108 -27
- package/src/renderers/common/Background.js +2 -1
- package/src/renderers/common/Bindings.js +58 -2
- package/src/renderers/common/CanvasTarget.js +341 -0
- package/src/renderers/common/ChainMap.js +1 -1
- package/src/renderers/common/DataMap.js +1 -1
- package/src/renderers/common/Geometries.js +26 -0
- package/src/renderers/common/Info.js +4 -2
- package/src/renderers/common/InspectorBase.js +146 -0
- package/src/renderers/common/Pipelines.js +1 -1
- package/src/renderers/common/PostProcessing.js +6 -25
- package/src/renderers/common/QuadMesh.js +7 -1
- package/src/renderers/common/RenderContext.js +2 -2
- package/src/renderers/common/RenderList.js +7 -3
- package/src/renderers/common/RenderObject.js +16 -2
- package/src/renderers/common/RenderObjects.js +1 -1
- package/src/renderers/common/Renderer.js +473 -245
- package/src/renderers/common/RendererUtils.js +9 -0
- package/src/renderers/common/SampledTexture.js +9 -1
- package/src/renderers/common/Sampler.js +50 -12
- package/src/renderers/common/StorageTexture.js +9 -1
- package/src/renderers/common/Textures.js +121 -45
- package/src/renderers/common/TimestampQueryPool.js +65 -3
- package/src/renderers/common/UniformsGroup.js +2 -1
- package/src/renderers/common/XRManager.js +42 -22
- package/src/renderers/common/extras/PMREMGenerator.js +160 -65
- package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
- package/src/renderers/common/nodes/NodeLibrary.js +9 -7
- package/src/renderers/common/nodes/NodeSampler.js +13 -1
- package/src/renderers/common/nodes/Nodes.js +38 -16
- package/src/renderers/shaders/DFGLUTData.js +64 -0
- package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -12
- package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +52 -18
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +7 -15
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +1 -1
- package/src/renderers/shaders/UniformsLib.js +1 -0
- package/src/renderers/shaders/UniformsUtils.js +25 -4
- package/src/renderers/webgl/WebGLCapabilities.js +2 -1
- package/src/renderers/webgl/WebGLExtensions.js +2 -25
- package/src/renderers/webgl/WebGLInfo.js +3 -1
- package/src/renderers/webgl/WebGLProgram.js +15 -14
- package/src/renderers/webgl/WebGLPrograms.js +2 -1
- package/src/renderers/webgl/WebGLShadowMap.js +3 -2
- package/src/renderers/webgl/WebGLState.js +15 -14
- package/src/renderers/webgl/WebGLTextures.js +19 -14
- package/src/renderers/webgl/WebGLUniformsGroups.js +5 -3
- package/src/renderers/webgl/WebGLUtils.js +3 -2
- package/src/renderers/webgl-fallback/WebGLBackend.js +199 -167
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +181 -25
- package/src/renderers/webgl-fallback/utils/WebGLConstants.js +2 -3
- package/src/renderers/webgl-fallback/utils/WebGLState.js +7 -6
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +169 -19
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +51 -22
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +3 -2
- package/src/renderers/webgpu/WebGPUBackend.js +153 -123
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +2 -1
- package/src/renderers/webgpu/WebGPURenderer.js +3 -2
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +142 -50
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +2 -1
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +5 -3
- package/src/renderers/webgpu/utils/WebGPUConstants.js +7 -2
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +53 -34
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +6 -8
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +260 -99
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +32 -9
- package/src/renderers/webgpu/utils/WebGPUUtils.js +22 -2
- package/src/renderers/webxr/WebXRManager.js +42 -26
- package/src/textures/ExternalTexture.js +15 -4
- package/src/textures/Source.js +3 -2
- package/src/textures/Texture.js +3 -2
- package/src/textures/VideoTexture.js +2 -3
- package/src/utils.js +67 -3
- package/examples/jsm/loaders/RGBMLoader.js +0 -1148
|
@@ -1,9 +1,12 @@
|
|
|
1
|
-
import { DataTexture, RenderTarget, RepeatWrapping, Vector2, Vector3, TempNode, QuadMesh, NodeMaterial, RendererUtils } from 'three/webgpu';
|
|
1
|
+
import { DataTexture, RenderTarget, RepeatWrapping, Vector2, Vector3, TempNode, QuadMesh, NodeMaterial, RendererUtils, RedFormat } from 'three/webgpu';
|
|
2
2
|
import { reference, logarithmicDepthToViewZ, viewZToPerspectiveDepth, getNormalFromDepth, getScreenPosition, getViewPosition, nodeObject, Fn, float, NodeUpdateType, uv, uniform, Loop, vec2, vec3, vec4, int, dot, max, pow, abs, If, textureSize, sin, cos, PI, texture, passTexture, mat3, add, normalize, mul, cross, div, mix, sqrt, sub, acos, clamp } from 'three/tsl';
|
|
3
3
|
|
|
4
4
|
const _quadMesh = /*@__PURE__*/ new QuadMesh();
|
|
5
5
|
const _size = /*@__PURE__*/ new Vector2();
|
|
6
6
|
|
|
7
|
+
// From Activision GTAO paper: https://www.activision.com/cdn/research/s2016_pbs_activision_occlusion.pptx
|
|
8
|
+
const _temporalRotations = [ 60, 300, 180, 240, 120, 0 ];
|
|
9
|
+
|
|
7
10
|
let _rendererState;
|
|
8
11
|
|
|
9
12
|
/**
|
|
@@ -48,7 +51,7 @@ class GTAONode extends TempNode {
|
|
|
48
51
|
*/
|
|
49
52
|
constructor( depthNode, normalNode, camera ) {
|
|
50
53
|
|
|
51
|
-
super( '
|
|
54
|
+
super( 'float' );
|
|
52
55
|
|
|
53
56
|
/**
|
|
54
57
|
* A node that represents the scene's depth.
|
|
@@ -90,7 +93,7 @@ class GTAONode extends TempNode {
|
|
|
90
93
|
* @private
|
|
91
94
|
* @type {RenderTarget}
|
|
92
95
|
*/
|
|
93
|
-
this._aoRenderTarget = new RenderTarget( 1, 1, { depthBuffer: false } );
|
|
96
|
+
this._aoRenderTarget = new RenderTarget( 1, 1, { depthBuffer: false, format: RedFormat } );
|
|
94
97
|
this._aoRenderTarget.texture.name = 'GTAONode.AO';
|
|
95
98
|
|
|
96
99
|
// uniforms
|
|
@@ -150,6 +153,20 @@ class GTAONode extends TempNode {
|
|
|
150
153
|
*/
|
|
151
154
|
this.samples = uniform( 16 );
|
|
152
155
|
|
|
156
|
+
/**
|
|
157
|
+
* Whether to use temporal filtering or not. Setting this property to
|
|
158
|
+
* `true` requires the usage of `TRAANode`. This will help to reduce noise
|
|
159
|
+
* although it introduces typical TAA artifacts like ghosting and temporal
|
|
160
|
+
* instabilities.
|
|
161
|
+
*
|
|
162
|
+
* If setting this property to `false`, a manual denoise via `DenoiseNode`
|
|
163
|
+
* might be required.
|
|
164
|
+
*
|
|
165
|
+
* @type {boolean}
|
|
166
|
+
* @default false
|
|
167
|
+
*/
|
|
168
|
+
this.useTemporalFiltering = false;
|
|
169
|
+
|
|
153
170
|
/**
|
|
154
171
|
* The node represents the internal noise texture used by the AO.
|
|
155
172
|
*
|
|
@@ -190,6 +207,13 @@ class GTAONode extends TempNode {
|
|
|
190
207
|
*/
|
|
191
208
|
this._cameraFar = reference( 'far', 'float', camera );
|
|
192
209
|
|
|
210
|
+
/**
|
|
211
|
+
* Temporal direction that influences the rotation angle for each slice.
|
|
212
|
+
*
|
|
213
|
+
* @type {UniformNode<float>}
|
|
214
|
+
*/
|
|
215
|
+
this._temporalDirection = uniform( 0 );
|
|
216
|
+
|
|
193
217
|
/**
|
|
194
218
|
* The material that is used to render the effect.
|
|
195
219
|
*
|
|
@@ -247,12 +271,27 @@ class GTAONode extends TempNode {
|
|
|
247
271
|
|
|
248
272
|
_rendererState = RendererUtils.resetRendererState( renderer, _rendererState );
|
|
249
273
|
|
|
274
|
+
// update temporal uniforms
|
|
275
|
+
|
|
276
|
+
if ( this.useTemporalFiltering === true ) {
|
|
277
|
+
|
|
278
|
+
const frameId = frame.frameId;
|
|
279
|
+
|
|
280
|
+
this._temporalDirection.value = _temporalRotations[ frameId % 6 ] / 360;
|
|
281
|
+
|
|
282
|
+
} else {
|
|
283
|
+
|
|
284
|
+
this._temporalDirection.value = 0;
|
|
285
|
+
|
|
286
|
+
}
|
|
287
|
+
|
|
250
288
|
//
|
|
251
289
|
|
|
252
290
|
const size = renderer.getDrawingBufferSize( _size );
|
|
253
291
|
this.setSize( size.width, size.height );
|
|
254
292
|
|
|
255
293
|
_quadMesh.material = this._material;
|
|
294
|
+
_quadMesh.name = 'AO';
|
|
256
295
|
|
|
257
296
|
// clear
|
|
258
297
|
|
|
@@ -312,6 +351,7 @@ class GTAONode extends TempNode {
|
|
|
312
351
|
const noiseResolution = textureSize( this._noiseNode, 0 );
|
|
313
352
|
let noiseUv = vec2( uvNode.x, uvNode.y.oneMinus() );
|
|
314
353
|
noiseUv = noiseUv.mul( this.resolution.div( noiseResolution ) );
|
|
354
|
+
|
|
315
355
|
const noiseTexel = sampleNoise( noiseUv );
|
|
316
356
|
const randomVec = noiseTexel.xyz.mul( 2.0 ).sub( 1.0 );
|
|
317
357
|
const tangent = vec3( randomVec.xy, 0.0 ).normalize();
|
|
@@ -323,9 +363,11 @@ class GTAONode extends TempNode {
|
|
|
323
363
|
|
|
324
364
|
const ao = float( 0 ).toVar();
|
|
325
365
|
|
|
366
|
+
// Each iteration analyzes one vertical "slice" of the 3D space around the fragment.
|
|
367
|
+
|
|
326
368
|
Loop( { start: int( 0 ), end: DIRECTIONS, type: 'int', condition: '<' }, ( { i } ) => {
|
|
327
369
|
|
|
328
|
-
const angle = float( i ).div( float( DIRECTIONS ) ).mul( PI ).toVar();
|
|
370
|
+
const angle = float( i ).div( float( DIRECTIONS ) ).mul( PI ).add( this._temporalDirection ).toVar();
|
|
329
371
|
const sampleDir = vec4( cos( angle ), sin( angle ), 0., add( 0.5, mul( 0.5, noiseTexel.w ) ) );
|
|
330
372
|
sampleDir.xyz = normalize( kernelMatrix.mul( sampleDir.xyz ) );
|
|
331
373
|
|
|
@@ -337,10 +379,14 @@ class GTAONode extends TempNode {
|
|
|
337
379
|
const tangentToNormalInSlice = cross( normalInSlice, sliceBitangent ).toVar();
|
|
338
380
|
const cosHorizons = vec2( dot( viewDir, tangentToNormalInSlice ), dot( viewDir, tangentToNormalInSlice.negate() ) ).toVar();
|
|
339
381
|
|
|
382
|
+
// For each slice, the inner loop performs ray marching to find the horizons.
|
|
383
|
+
|
|
340
384
|
Loop( { end: STEPS, type: 'int', name: 'j', condition: '<' }, ( { j } ) => {
|
|
341
385
|
|
|
342
386
|
const sampleViewOffset = sampleDir.xyz.mul( radiusToUse ).mul( sampleDir.w ).mul( pow( div( float( j ).add( 1.0 ), float( STEPS ) ), this.distanceExponent ) );
|
|
343
387
|
|
|
388
|
+
// The loop marches in two opposite directions (x and y) along the slice's line to find the horizon on both sides.
|
|
389
|
+
|
|
344
390
|
// x
|
|
345
391
|
|
|
346
392
|
const sampleScreenPositionX = getScreenPosition( viewPosition.add( sampleViewOffset ), this._cameraProjectionMatrix ).toVar();
|
|
@@ -371,6 +417,8 @@ class GTAONode extends TempNode {
|
|
|
371
417
|
|
|
372
418
|
} );
|
|
373
419
|
|
|
420
|
+
// After the horizons are found for a given slice, their contribution to the total occlusion is calculated.
|
|
421
|
+
|
|
374
422
|
const sinHorizons = sqrt( sub( 1.0, cosHorizons.mul( cosHorizons ) ) ).toVar();
|
|
375
423
|
const nx = dot( normalInSlice, sliceTangent );
|
|
376
424
|
const ny = dot( normalInSlice, viewDir );
|
|
@@ -384,7 +432,7 @@ class GTAONode extends TempNode {
|
|
|
384
432
|
ao.assign( clamp( ao.div( DIRECTIONS ), 0, 1 ) );
|
|
385
433
|
ao.assign( pow( ao, this.scale ) );
|
|
386
434
|
|
|
387
|
-
return
|
|
435
|
+
return ao;
|
|
388
436
|
|
|
389
437
|
} );
|
|
390
438
|
|
|
@@ -25,8 +25,11 @@ class GaussianBlurNode extends TempNode {
|
|
|
25
25
|
* @param {TextureNode} textureNode - The texture node that represents the input of the effect.
|
|
26
26
|
* @param {Node<vec2|float>} directionNode - Defines the direction and radius of the blur.
|
|
27
27
|
* @param {number} sigma - Controls the kernel of the blur filter. Higher values mean a wider blur radius.
|
|
28
|
+
* @param {Object} [options={}] - Additional options for the gaussian blur effect.
|
|
29
|
+
* @param {boolean} [options.premultipliedAlpha=false] - Whether to use premultiplied alpha for the blur effect.
|
|
30
|
+
* @param {number} [options.resolutionScale=1] - The resolution of the effect. 0.5 means half the resolution of the texture node.
|
|
28
31
|
*/
|
|
29
|
-
constructor( textureNode, directionNode = null, sigma = 4 ) {
|
|
32
|
+
constructor( textureNode, directionNode = null, sigma = 4, options = {} ) {
|
|
30
33
|
|
|
31
34
|
super( 'vec4' );
|
|
32
35
|
|
|
@@ -105,12 +108,12 @@ class GaussianBlurNode extends TempNode {
|
|
|
105
108
|
this.updateBeforeType = NodeUpdateType.FRAME;
|
|
106
109
|
|
|
107
110
|
/**
|
|
108
|
-
*
|
|
111
|
+
* The resolution scale.
|
|
109
112
|
*
|
|
110
|
-
* @type {
|
|
111
|
-
* @default (1
|
|
113
|
+
* @type {number}
|
|
114
|
+
* @default (1)
|
|
112
115
|
*/
|
|
113
|
-
this.
|
|
116
|
+
this.resolutionScale = options.resolutionScale || 1;
|
|
114
117
|
|
|
115
118
|
/**
|
|
116
119
|
* Whether the effect should use premultiplied alpha or not. Set this to `true`
|
|
@@ -119,32 +122,7 @@ class GaussianBlurNode extends TempNode {
|
|
|
119
122
|
* @type {boolean}
|
|
120
123
|
* @default false
|
|
121
124
|
*/
|
|
122
|
-
this.premultipliedAlpha = false;
|
|
123
|
-
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
/**
|
|
127
|
-
* Sets the given premultiplied alpha value.
|
|
128
|
-
*
|
|
129
|
-
* @param {boolean} value - Whether the effect should use premultiplied alpha or not.
|
|
130
|
-
* @return {GaussianBlurNode} height - A reference to this node.
|
|
131
|
-
*/
|
|
132
|
-
setPremultipliedAlpha( value ) {
|
|
133
|
-
|
|
134
|
-
this.premultipliedAlpha = value;
|
|
135
|
-
|
|
136
|
-
return this;
|
|
137
|
-
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
/**
|
|
141
|
-
* Returns the premultiplied alpha value.
|
|
142
|
-
*
|
|
143
|
-
* @return {boolean} Whether the effect should use premultiplied alpha or not.
|
|
144
|
-
*/
|
|
145
|
-
getPremultipliedAlpha() {
|
|
146
|
-
|
|
147
|
-
return this.premultipliedAlpha;
|
|
125
|
+
this.premultipliedAlpha = options.premultipliedAlpha || false;
|
|
148
126
|
|
|
149
127
|
}
|
|
150
128
|
|
|
@@ -156,8 +134,8 @@ class GaussianBlurNode extends TempNode {
|
|
|
156
134
|
*/
|
|
157
135
|
setSize( width, height ) {
|
|
158
136
|
|
|
159
|
-
width = Math.max( Math.round( width * this.
|
|
160
|
-
height = Math.max( Math.round( height * this.
|
|
137
|
+
width = Math.max( Math.round( width * this.resolutionScale ), 1 );
|
|
138
|
+
height = Math.max( Math.round( height * this.resolutionScale ), 1 );
|
|
161
139
|
|
|
162
140
|
this._invSize.value.set( 1 / width, 1 / height );
|
|
163
141
|
this._horizontalRT.setSize( width, height );
|
|
@@ -198,6 +176,7 @@ class GaussianBlurNode extends TempNode {
|
|
|
198
176
|
|
|
199
177
|
this._passDirection.value.set( 1, 0 );
|
|
200
178
|
|
|
179
|
+
_quadMesh.name = 'Gaussian Blur [ Horizontal Pass ]';
|
|
201
180
|
_quadMesh.render( renderer );
|
|
202
181
|
|
|
203
182
|
// vertical
|
|
@@ -207,6 +186,7 @@ class GaussianBlurNode extends TempNode {
|
|
|
207
186
|
|
|
208
187
|
this._passDirection.value.set( 0, 1 );
|
|
209
188
|
|
|
189
|
+
_quadMesh.name = 'Gaussian Blur [ Vertical Pass ]';
|
|
210
190
|
_quadMesh.render( renderer );
|
|
211
191
|
|
|
212
192
|
// restore
|
|
@@ -280,6 +260,7 @@ class GaussianBlurNode extends TempNode {
|
|
|
280
260
|
const sample2 = sampleTexture( uvNode.sub( uvOffset ) );
|
|
281
261
|
|
|
282
262
|
diffuseSum.addAssign( sample1.add( sample2 ).mul( w ) );
|
|
263
|
+
|
|
283
264
|
}
|
|
284
265
|
|
|
285
266
|
return output( diffuseSum );
|
|
@@ -337,6 +318,29 @@ class GaussianBlurNode extends TempNode {
|
|
|
337
318
|
|
|
338
319
|
}
|
|
339
320
|
|
|
321
|
+
/**
|
|
322
|
+
* The resolution scale.
|
|
323
|
+
*
|
|
324
|
+
* @deprecated
|
|
325
|
+
* @type {Vector2}
|
|
326
|
+
* @default {(1,1)}
|
|
327
|
+
*/
|
|
328
|
+
get resolution() {
|
|
329
|
+
|
|
330
|
+
console.warn( 'THREE.GaussianBlurNode: The "resolution" property has been renamed to "resolutionScale" and is now of type `number`.' ); // @deprecated r180
|
|
331
|
+
|
|
332
|
+
return new Vector2( this.resolutionScale, this.resolutionScale );
|
|
333
|
+
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
set resolution( value ) {
|
|
337
|
+
|
|
338
|
+
console.warn( 'THREE.GaussianBlurNode: The "resolution" property has been renamed to "resolutionScale" and is now of type `number`.' ); // @deprecated r180
|
|
339
|
+
|
|
340
|
+
this.resolutionScale = value.x;
|
|
341
|
+
|
|
342
|
+
}
|
|
343
|
+
|
|
340
344
|
}
|
|
341
345
|
|
|
342
346
|
export default GaussianBlurNode;
|
|
@@ -349,18 +353,28 @@ export default GaussianBlurNode;
|
|
|
349
353
|
* @param {Node<vec4>} node - The node that represents the input of the effect.
|
|
350
354
|
* @param {Node<vec2|float>} directionNode - Defines the direction and radius of the blur.
|
|
351
355
|
* @param {number} sigma - Controls the kernel of the blur filter. Higher values mean a wider blur radius.
|
|
356
|
+
* @param {Object} [options={}] - Additional options for the gaussian blur effect.
|
|
357
|
+
* @param {boolean} [options.premultipliedAlpha=false] - Whether to use premultiplied alpha for the blur effect.
|
|
358
|
+
* @param {number} [options.resolutionScale=1] - The resolution of the effect. 0.5 means half the resolution of the texture node.
|
|
352
359
|
* @returns {GaussianBlurNode}
|
|
353
360
|
*/
|
|
354
|
-
export const gaussianBlur = ( node, directionNode, sigma ) => nodeObject( new GaussianBlurNode( convertToTexture( node ), directionNode, sigma ) );
|
|
361
|
+
export const gaussianBlur = ( node, directionNode, sigma, options = {} ) => nodeObject( new GaussianBlurNode( convertToTexture( node ), directionNode, sigma, options ) );
|
|
355
362
|
|
|
356
363
|
/**
|
|
357
364
|
* TSL function for creating a gaussian blur node for post processing with enabled premultiplied alpha.
|
|
358
365
|
*
|
|
359
366
|
* @tsl
|
|
360
367
|
* @function
|
|
368
|
+
* @deprecated since r180. Use `gaussianBlur()` with `premultipliedAlpha: true` option instead.
|
|
361
369
|
* @param {Node<vec4>} node - The node that represents the input of the effect.
|
|
362
370
|
* @param {Node<vec2|float>} directionNode - Defines the direction and radius of the blur.
|
|
363
371
|
* @param {number} sigma - Controls the kernel of the blur filter. Higher values mean a wider blur radius.
|
|
364
372
|
* @returns {GaussianBlurNode}
|
|
365
373
|
*/
|
|
366
|
-
export
|
|
374
|
+
export function premultipliedGaussianBlur( node, directionNode, sigma ) {
|
|
375
|
+
|
|
376
|
+
console.warn( 'THREE.TSL: "premultipliedGaussianBlur()" is deprecated. Use "gaussianBlur()" with "premultipliedAlpha: true" option instead.' ); // deprecated, r180
|
|
377
|
+
|
|
378
|
+
return gaussianBlur( node, directionNode, sigma, { premultipliedAlpha: true } );
|
|
379
|
+
|
|
380
|
+
}
|
|
@@ -56,7 +56,7 @@ class OutlineNode extends TempNode {
|
|
|
56
56
|
* @param {Scene} scene - A reference to the scene.
|
|
57
57
|
* @param {Camera} camera - The camera the scene is rendered with.
|
|
58
58
|
* @param {Object} params - The configuration parameters.
|
|
59
|
-
* @param {Array<Object3D>} params.selectedObjects - An array of selected objects.
|
|
59
|
+
* @param {Array<Object3D>} [params.selectedObjects] - An array of selected objects.
|
|
60
60
|
* @param {Node<float>} [params.edgeThickness=float(1)] - The thickness of the edges.
|
|
61
61
|
* @param {Node<float>} [params.edgeGlow=float(0)] - Can be used for an animated glow/pulse effects.
|
|
62
62
|
* @param {number} [params.downSampleRatio=2] - The downsample ratio.
|
|
@@ -455,6 +455,8 @@ class OutlineNode extends TempNode {
|
|
|
455
455
|
|
|
456
456
|
this._updateSelectionCache();
|
|
457
457
|
|
|
458
|
+
const currentSceneName = scene.name;
|
|
459
|
+
|
|
458
460
|
// 1. Draw non-selected objects in the depth buffer
|
|
459
461
|
|
|
460
462
|
scene.overrideMaterial = this._depthMaterial;
|
|
@@ -470,6 +472,7 @@ class OutlineNode extends TempNode {
|
|
|
470
472
|
|
|
471
473
|
} );
|
|
472
474
|
|
|
475
|
+
scene.name = 'Outline [ Non-Selected Objects Pass ]';
|
|
473
476
|
renderer.render( scene, camera );
|
|
474
477
|
|
|
475
478
|
// 2. Draw only the selected objects by comparing the depth buffer of non-selected objects
|
|
@@ -487,6 +490,7 @@ class OutlineNode extends TempNode {
|
|
|
487
490
|
|
|
488
491
|
} );
|
|
489
492
|
|
|
493
|
+
scene.name = 'Outline [ Selected Objects Pass ]';
|
|
490
494
|
renderer.render( scene, camera );
|
|
491
495
|
|
|
492
496
|
//
|
|
@@ -495,15 +499,19 @@ class OutlineNode extends TempNode {
|
|
|
495
499
|
|
|
496
500
|
this._selectionCache.clear();
|
|
497
501
|
|
|
502
|
+
scene.name = currentSceneName;
|
|
503
|
+
|
|
498
504
|
// 3. Downsample to (at least) half resolution
|
|
499
505
|
|
|
500
506
|
_quadMesh.material = this._materialCopy;
|
|
507
|
+
_quadMesh.name = 'Outline [ Downsample ]';
|
|
501
508
|
renderer.setRenderTarget( this._renderTargetMaskDownSampleBuffer );
|
|
502
509
|
_quadMesh.render( renderer );
|
|
503
510
|
|
|
504
511
|
// 4. Perform edge detection (half resolution)
|
|
505
512
|
|
|
506
513
|
_quadMesh.material = this._edgeDetectionMaterial;
|
|
514
|
+
_quadMesh.name = 'Outline [ Edge Detection ]';
|
|
507
515
|
renderer.setRenderTarget( this._renderTargetEdgeBuffer1 );
|
|
508
516
|
_quadMesh.render( renderer );
|
|
509
517
|
|
|
@@ -513,6 +521,7 @@ class OutlineNode extends TempNode {
|
|
|
513
521
|
this._blurDirection.value.copy( _BLUR_DIRECTION_X );
|
|
514
522
|
|
|
515
523
|
_quadMesh.material = this._separableBlurMaterial;
|
|
524
|
+
_quadMesh.name = 'Outline [ Blur Half Resolution ]';
|
|
516
525
|
renderer.setRenderTarget( this._renderTargetBlurBuffer1 );
|
|
517
526
|
_quadMesh.render( renderer );
|
|
518
527
|
|
|
@@ -528,6 +537,7 @@ class OutlineNode extends TempNode {
|
|
|
528
537
|
this._blurDirection.value.copy( _BLUR_DIRECTION_X );
|
|
529
538
|
|
|
530
539
|
_quadMesh.material = this._separableBlurMaterial2;
|
|
540
|
+
_quadMesh.name = 'Outline [ Blur Quarter Resolution ]';
|
|
531
541
|
renderer.setRenderTarget( this._renderTargetBlurBuffer2 );
|
|
532
542
|
_quadMesh.render( renderer );
|
|
533
543
|
|
|
@@ -540,6 +550,7 @@ class OutlineNode extends TempNode {
|
|
|
540
550
|
// 7. Composite
|
|
541
551
|
|
|
542
552
|
_quadMesh.material = this._compositeMaterial;
|
|
553
|
+
_quadMesh.name = 'Outline [ Blur Quarter Resolution ]';
|
|
543
554
|
renderer.setRenderTarget( this._renderTargetComposite );
|
|
544
555
|
_quadMesh.render( renderer );
|
|
545
556
|
|
|
@@ -742,7 +753,7 @@ export default OutlineNode;
|
|
|
742
753
|
* @param {Scene} scene - A reference to the scene.
|
|
743
754
|
* @param {Camera} camera - The camera the scene is rendered with.
|
|
744
755
|
* @param {Object} params - The configuration parameters.
|
|
745
|
-
* @param {Array<Object3D>} params.selectedObjects - An array of selected objects.
|
|
756
|
+
* @param {Array<Object3D>} [params.selectedObjects] - An array of selected objects.
|
|
746
757
|
* @param {Node<float>} [params.edgeThickness=float(1)] - The thickness of the edges.
|
|
747
758
|
* @param {Node<float>} [params.edgeGlow=float(0)] - Can be used for animated glow/pulse effects.
|
|
748
759
|
* @param {number} [params.downSampleRatio=2] - The downsample ratio.
|