super-three 0.179.0 → 0.184.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 +3 -4
- package/build/three.cjs +14522 -12207
- package/build/three.core.js +12005 -10954
- package/build/three.core.min.js +2 -2
- package/build/three.module.js +2270 -1005
- package/build/three.module.min.js +2 -2
- package/build/three.tsl.js +63 -18
- package/build/three.tsl.min.js +2 -2
- package/build/three.webgpu.js +16573 -7890
- package/build/three.webgpu.min.js +2 -2
- package/build/three.webgpu.nodes.js +16533 -7888
- package/build/three.webgpu.nodes.min.js +2 -2
- package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
- package/examples/fonts/MPLUSRounded1c/OFL.txt +91 -0
- package/examples/jsm/Addons.js +12 -4
- package/examples/jsm/animation/CCDIKSolver.js +8 -4
- package/examples/jsm/controls/ArcballControls.js +15 -12
- package/examples/jsm/controls/DragControls.js +9 -59
- package/examples/jsm/controls/FirstPersonControls.js +61 -57
- package/examples/jsm/controls/FlyControls.js +5 -1
- package/examples/jsm/controls/MapControls.js +55 -1
- package/examples/jsm/controls/OrbitControls.js +113 -10
- package/examples/jsm/controls/PointerLockControls.js +2 -10
- package/examples/jsm/controls/TrackballControls.js +9 -9
- package/examples/jsm/controls/TransformControls.js +35 -3
- package/examples/jsm/csm/CSM.js +2 -1
- package/examples/jsm/csm/CSMShadowNode.js +6 -2
- package/examples/jsm/effects/AnaglyphEffect.js +102 -7
- package/examples/jsm/effects/AsciiEffect.js +8 -8
- package/examples/jsm/environments/ColorEnvironment.js +59 -0
- package/examples/jsm/environments/RoomEnvironment.js +3 -0
- package/examples/jsm/exporters/DRACOExporter.js +2 -2
- package/examples/jsm/exporters/EXRExporter.js +2 -2
- package/examples/jsm/exporters/GLTFExporter.js +185 -34
- package/examples/jsm/exporters/KTX2Exporter.js +4 -2
- package/examples/jsm/exporters/PLYExporter.js +1 -1
- package/examples/jsm/exporters/USDZExporter.js +31 -5
- package/examples/jsm/geometries/DecalGeometry.js +3 -3
- package/examples/jsm/geometries/ParametricGeometry.js +1 -1
- package/examples/jsm/geometries/TeapotGeometry.js +2 -2
- package/examples/jsm/geometries/TextGeometry.js +21 -2
- package/examples/jsm/gpgpu/BitonicSort.js +715 -0
- package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
- package/examples/jsm/helpers/LightProbeGridHelper.js +221 -0
- package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -1
- package/examples/jsm/helpers/TextureHelperGPU.js +1 -1
- package/examples/jsm/helpers/ViewHelper.js +110 -13
- package/examples/jsm/inspector/Extension.js +13 -0
- package/examples/jsm/inspector/Inspector.js +542 -0
- package/examples/jsm/inspector/RendererInspector.js +425 -0
- package/examples/jsm/inspector/extensions/extensions.json +6 -0
- package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphEditor.js +916 -0
- package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphLoader.js +281 -0
- package/examples/jsm/inspector/tabs/Console.js +238 -0
- package/examples/jsm/inspector/tabs/Memory.js +128 -0
- package/examples/jsm/inspector/tabs/Parameters.js +380 -0
- package/examples/jsm/inspector/tabs/Performance.js +268 -0
- package/examples/jsm/inspector/tabs/Settings.js +264 -0
- package/examples/jsm/inspector/tabs/Timeline.js +1611 -0
- package/examples/jsm/inspector/tabs/Viewer.js +268 -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 +2072 -0
- package/examples/jsm/inspector/ui/Style.js +1667 -0
- package/examples/jsm/inspector/ui/Tab.js +265 -0
- package/examples/jsm/inspector/ui/Values.js +476 -0
- package/examples/jsm/inspector/ui/utils.js +69 -0
- package/examples/jsm/interaction/InteractionManager.js +226 -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/libs/meshopt_decoder.module.js +9 -8
- package/examples/jsm/lighting/DynamicLighting.js +82 -0
- package/examples/jsm/lighting/LightProbeGrid.js +651 -0
- 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/LineMaterial.js +7 -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/3DMLoader.js +5 -4
- package/examples/jsm/loaders/3MFLoader.js +3 -3
- package/examples/jsm/loaders/AMFLoader.js +2 -2
- package/examples/jsm/loaders/ColladaLoader.js +27 -4029
- package/examples/jsm/loaders/DDSLoader.js +1 -1
- package/examples/jsm/loaders/DRACOLoader.js +73 -22
- package/examples/jsm/loaders/EXRLoader.js +692 -53
- package/examples/jsm/loaders/FBXLoader.js +237 -39
- package/examples/jsm/loaders/FontLoader.js +23 -5
- package/examples/jsm/loaders/GCodeLoader.js +34 -8
- package/examples/jsm/loaders/GLTFLoader.js +159 -185
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +5 -5
- package/examples/jsm/loaders/HDRLoader.js +485 -0
- package/examples/jsm/loaders/KMZLoader.js +5 -5
- package/examples/jsm/loaders/KTX2Loader.js +162 -53
- package/examples/jsm/loaders/KTXLoader.js +2 -2
- package/examples/jsm/loaders/LDrawLoader.js +41 -50
- package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
- package/examples/jsm/loaders/LUTCubeLoader.js +1 -1
- package/examples/jsm/loaders/LWOLoader.js +9 -41
- package/examples/jsm/loaders/MaterialXLoader.js +22 -5
- package/examples/jsm/loaders/NRRDLoader.js +2 -2
- package/examples/jsm/loaders/OBJLoader.js +1 -1
- package/examples/jsm/loaders/PCDLoader.js +4 -2
- package/examples/jsm/loaders/PDBLoader.js +1 -1
- package/examples/jsm/loaders/RGBELoader.js +7 -473
- package/examples/jsm/loaders/SVGLoader.js +4 -4
- package/examples/jsm/loaders/TDSLoader.js +0 -2
- package/examples/jsm/loaders/TGALoader.js +0 -2
- package/examples/jsm/loaders/TTFLoader.js +4 -4
- package/examples/jsm/loaders/USDLoader.js +100 -40
- package/examples/jsm/loaders/UltraHDRLoader.js +287 -162
- package/examples/jsm/loaders/VOXLoader.js +660 -117
- package/examples/jsm/loaders/VRMLLoader.js +79 -2
- package/examples/jsm/loaders/VTKLoader.js +42 -25
- package/examples/jsm/loaders/collada/ColladaComposer.js +3044 -0
- package/examples/jsm/loaders/collada/ColladaParser.js +1977 -0
- package/examples/jsm/loaders/lwo/IFFParser.js +1 -1
- package/examples/jsm/loaders/usd/USDAParser.js +450 -363
- package/examples/jsm/loaders/usd/USDCParser.js +1867 -6
- package/examples/jsm/loaders/usd/USDComposer.js +4594 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +2 -2
- 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/Octree.js +131 -1
- package/examples/jsm/math/SimplexNoise.js +1 -1
- package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
- 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/RollerCoaster.js +42 -4
- package/examples/jsm/misc/TubePainter.js +383 -40
- package/examples/jsm/misc/Volume.js +1 -2
- package/examples/jsm/misc/VolumeSlice.js +0 -1
- package/examples/jsm/modifiers/SimplifyModifier.js +1 -1
- package/examples/jsm/modifiers/TessellateModifier.js +1 -1
- package/examples/jsm/objects/LensflareMesh.js +1 -1
- package/examples/jsm/objects/Reflector.js +73 -25
- package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
- package/examples/jsm/objects/Sky.js +91 -7
- package/examples/jsm/objects/SkyMesh.js +151 -17
- package/examples/jsm/objects/Water.js +7 -6
- package/examples/jsm/objects/Water2.js +5 -3
- package/examples/jsm/objects/WaterMesh.js +11 -13
- package/examples/jsm/physics/AmmoPhysics.js +12 -7
- package/examples/jsm/physics/JoltPhysics.js +10 -6
- package/examples/jsm/physics/RapierPhysics.js +9 -5
- package/examples/jsm/postprocessing/EffectComposer.js +7 -5
- package/examples/jsm/postprocessing/GlitchPass.js +2 -2
- package/examples/jsm/postprocessing/OutlinePass.js +1 -1
- package/examples/jsm/postprocessing/OutputPass.js +9 -0
- package/examples/jsm/postprocessing/RenderPass.js +10 -0
- package/examples/jsm/postprocessing/RenderTransitionPass.js +1 -1
- package/examples/jsm/postprocessing/SSRPass.js +37 -8
- package/examples/jsm/postprocessing/UnrealBloomPass.js +56 -24
- package/examples/jsm/renderers/CSS2DRenderer.js +16 -5
- package/examples/jsm/renderers/CSS3DRenderer.js +8 -7
- package/examples/jsm/renderers/Projector.js +246 -28
- package/examples/jsm/renderers/SVGRenderer.js +175 -61
- 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 +21 -8
- package/examples/jsm/shaders/HalftoneShader.js +12 -1
- package/examples/jsm/shaders/KaleidoShader.js +1 -1
- package/examples/jsm/shaders/PoissonDenoiseShader.js +8 -4
- package/examples/jsm/shaders/SAOShader.js +17 -4
- package/examples/jsm/shaders/SSAOShader.js +11 -1
- package/examples/jsm/shaders/SSRShader.js +7 -6
- 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 +3 -5
- package/examples/jsm/shaders/VignetteShader.js +1 -1
- package/examples/jsm/transpiler/AST.js +44 -0
- package/examples/jsm/transpiler/GLSLDecoder.js +85 -25
- package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -0
- package/examples/jsm/transpiler/TSLEncoder.js +52 -10
- package/examples/jsm/transpiler/TranspilerUtils.js +3 -3
- package/examples/jsm/transpiler/WGSLEncoder.js +51 -0
- package/examples/jsm/tsl/WebGLNodesHandler.js +605 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +36 -24
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +458 -16
- package/examples/jsm/tsl/display/AnamorphicNode.js +40 -5
- package/examples/jsm/tsl/display/BilateralBlurNode.js +374 -0
- package/examples/jsm/tsl/display/BloomNode.js +23 -9
- package/examples/jsm/tsl/display/CRT.js +150 -0
- package/examples/jsm/tsl/display/ChromaticAberrationNode.js +5 -37
- package/examples/jsm/tsl/display/DenoiseNode.js +3 -1
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +446 -90
- package/examples/jsm/tsl/display/DotScreenNode.js +1 -1
- package/examples/jsm/tsl/display/FSR1Node.js +477 -0
- package/examples/jsm/tsl/display/FXAANode.js +2 -2
- package/examples/jsm/tsl/display/GTAONode.js +59 -9
- package/examples/jsm/tsl/display/GaussianBlurNode.js +68 -35
- package/examples/jsm/tsl/display/GodraysNode.js +615 -0
- package/examples/jsm/tsl/display/LensflareNode.js +1 -1
- package/examples/jsm/tsl/display/Lut3DNode.js +1 -1
- package/examples/jsm/tsl/display/OutlineNode.js +81 -20
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -2
- package/examples/jsm/tsl/display/PixelationPassNode.js +7 -6
- package/examples/jsm/tsl/display/RGBShiftNode.js +2 -2
- package/examples/jsm/tsl/display/RetroPassNode.js +263 -0
- package/examples/jsm/tsl/display/SMAANode.js +2 -2
- package/examples/jsm/tsl/display/SSAAPassNode.js +2 -2
- package/examples/jsm/tsl/display/SSGINode.js +638 -0
- package/examples/jsm/tsl/display/SSRNode.js +186 -69
- package/examples/jsm/tsl/display/SSSNode.js +490 -0
- package/examples/jsm/tsl/display/Shape.js +29 -0
- package/examples/jsm/tsl/display/SharpenNode.js +283 -0
- package/examples/jsm/tsl/display/SobelOperatorNode.js +2 -2
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +8 -1
- package/examples/jsm/tsl/display/StereoPassNode.js +1 -2
- package/examples/jsm/tsl/display/TAAUNode.js +835 -0
- package/examples/jsm/tsl/display/TRAANode.js +381 -75
- package/examples/jsm/tsl/display/TransitionNode.js +1 -1
- package/examples/jsm/tsl/display/boxBlur.js +65 -0
- package/examples/jsm/tsl/display/depthAwareBlend.js +80 -0
- package/examples/jsm/tsl/display/hashBlur.js +16 -18
- package/examples/jsm/tsl/display/radialBlur.js +68 -0
- package/examples/jsm/tsl/lighting/DynamicLightsNode.js +300 -0
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +21 -1
- package/examples/jsm/tsl/lighting/data/AmbientLightDataNode.js +61 -0
- package/examples/jsm/tsl/lighting/data/DirectionalLightDataNode.js +111 -0
- package/examples/jsm/tsl/lighting/data/HemisphereLightDataNode.js +99 -0
- package/examples/jsm/tsl/lighting/data/PointLightDataNode.js +134 -0
- package/examples/jsm/tsl/lighting/data/SpotLightDataNode.js +161 -0
- package/examples/jsm/tsl/math/Bayer.js +53 -3
- package/examples/jsm/utils/BufferGeometryUtils.js +3 -4
- package/examples/jsm/utils/ColorUtils.js +76 -0
- package/examples/jsm/utils/LDrawUtils.js +1 -1
- package/examples/jsm/utils/ShadowMapViewer.js +24 -10
- package/examples/jsm/utils/ShadowMapViewerGPU.js +13 -6
- package/examples/jsm/utils/SkeletonUtils.js +14 -8
- package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
- package/examples/jsm/webxr/OculusHandModel.js +1 -1
- package/examples/jsm/webxr/XRControllerModelFactory.js +1 -1
- package/examples/jsm/webxr/XRHandMeshModel.js +36 -10
- package/examples/jsm/webxr/XRHandModelFactory.js +4 -7
- package/package.json +27 -38
- package/src/Three.Core.js +7 -3
- package/src/Three.TSL.js +61 -16
- package/src/Three.WebGPU.Nodes.js +7 -0
- package/src/Three.WebGPU.js +11 -0
- package/src/Three.js +1 -0
- package/src/animation/AnimationAction.js +12 -2
- package/src/animation/AnimationClip.js +21 -5
- package/src/animation/AnimationMixer.js +9 -3
- package/src/animation/AnimationObjectGroup.js +2 -1
- package/src/animation/AnimationUtils.js +1 -12
- package/src/animation/KeyframeTrack.js +54 -14
- package/src/animation/PropertyBinding.js +12 -11
- package/src/animation/PropertyMixer.js +4 -4
- package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
- package/src/animation/tracks/ColorKeyframeTrack.js +1 -1
- package/src/animation/tracks/NumberKeyframeTrack.js +1 -1
- package/src/animation/tracks/QuaternionKeyframeTrack.js +1 -1
- package/src/animation/tracks/StringKeyframeTrack.js +1 -1
- package/src/animation/tracks/VectorKeyframeTrack.js +1 -1
- package/src/audio/Audio.js +11 -10
- package/src/audio/AudioContext.js +2 -2
- package/src/audio/AudioListener.js +5 -3
- package/src/audio/PositionalAudio.js +1 -1
- package/src/cameras/Camera.js +32 -2
- package/src/cameras/CubeCamera.js +20 -0
- 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 +100 -7
- package/src/core/BufferAttribute.js +13 -1
- package/src/core/BufferGeometry.js +24 -12
- package/src/core/Clock.js +7 -0
- 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 +55 -6
- package/src/core/Raycaster.js +4 -3
- package/src/core/RenderTarget.js +14 -5
- 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 +259 -57
- package/src/extras/TextureUtils.js +6 -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/curves/CatmullRomCurve3.js +3 -2
- 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 +10 -8
- 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/PolyhedronGeometry.js +1 -1
- 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 +9 -3
- package/src/geometries/TorusKnotGeometry.js +1 -0
- package/src/geometries/TubeGeometry.js +1 -0
- package/src/helpers/CameraHelper.js +4 -1
- package/src/helpers/DirectionalLightHelper.js +4 -1
- package/src/helpers/HemisphereLightHelper.js +3 -0
- package/src/helpers/PointLightHelper.js +1 -25
- package/src/helpers/SpotLightHelper.js +3 -0
- package/src/lights/DirectionalLight.js +13 -0
- package/src/lights/HemisphereLight.js +10 -0
- package/src/lights/Light.js +1 -11
- package/src/lights/LightProbe.js +0 -15
- package/src/lights/LightShadow.js +15 -6
- package/src/lights/PointLight.js +15 -0
- package/src/lights/PointLightShadow.js +0 -86
- package/src/lights/SpotLight.js +22 -1
- package/src/lights/webgpu/IESSpotLight.js +2 -1
- package/src/lights/webgpu/ProjectorLight.js +1 -1
- package/src/loaders/AnimationLoader.js +2 -1
- package/src/loaders/AudioLoader.js +13 -2
- package/src/loaders/BufferGeometryLoader.js +2 -2
- package/src/loaders/Cache.js +30 -2
- package/src/loaders/DataTextureLoader.js +6 -4
- package/src/loaders/FileLoader.js +4 -4
- package/src/loaders/ImageBitmapLoader.js +17 -13
- package/src/loaders/ImageLoader.js +1 -1
- package/src/loaders/Loader.js +9 -3
- package/src/loaders/LoadingManager.js +25 -3
- package/src/loaders/MaterialLoader.js +6 -4
- package/src/loaders/ObjectLoader.js +57 -17
- package/src/loaders/TextureLoader.js +1 -1
- package/src/loaders/nodes/NodeLoader.js +5 -4
- package/src/loaders/nodes/NodeObjectLoader.js +18 -0
- package/src/materials/Material.js +18 -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 +11 -1
- package/src/materials/MeshMatcapMaterial.js +22 -0
- package/src/materials/MeshNormalMaterial.js +1 -0
- package/src/materials/MeshPhongMaterial.js +11 -1
- package/src/materials/MeshPhysicalMaterial.js +2 -1
- package/src/materials/MeshStandardMaterial.js +8 -7
- package/src/materials/MeshToonMaterial.js +2 -1
- package/src/materials/PointsMaterial.js +1 -1
- package/src/materials/ShaderMaterial.js +22 -3
- package/src/materials/nodes/Line2NodeMaterial.js +36 -9
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +5 -2
- package/src/materials/nodes/MeshSSSNodeMaterial.js +1 -1
- package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -4
- package/src/materials/nodes/NodeMaterial.js +95 -35
- package/src/materials/nodes/PointsNodeMaterial.js +81 -28
- package/src/materials/nodes/SpriteNodeMaterial.js +3 -15
- package/src/materials/nodes/manager/NodeMaterialObserver.js +194 -88
- 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/Line3.js +6 -5
- package/src/math/MathUtils.js +23 -21
- package/src/math/Matrix2.js +14 -10
- package/src/math/Matrix3.js +15 -11
- package/src/math/Matrix4.js +94 -81
- package/src/math/Plane.js +5 -4
- package/src/math/Quaternion.js +60 -84
- package/src/math/Sphere.js +1 -1
- package/src/math/Spherical.js +1 -1
- package/src/math/Triangle.js +1 -1
- package/src/math/Vector2.js +11 -7
- package/src/math/Vector3.js +15 -13
- package/src/math/Vector4.js +13 -9
- package/src/math/interpolants/BezierInterpolant.js +108 -0
- package/src/nodes/Nodes.js +86 -65
- package/src/nodes/TSL.js +11 -8
- package/src/nodes/accessors/Arrays.js +1 -1
- package/src/nodes/accessors/BatchNode.js +10 -10
- package/src/nodes/accessors/Bitangent.js +5 -5
- package/src/nodes/accessors/BufferAttributeNode.js +107 -15
- package/src/nodes/accessors/BufferNode.js +30 -3
- package/src/nodes/accessors/Camera.js +260 -13
- package/src/nodes/accessors/ClippingNode.js +10 -9
- package/src/nodes/accessors/CubeTextureNode.js +32 -6
- package/src/nodes/accessors/InstanceNode.js +164 -39
- package/src/nodes/accessors/Lights.js +10 -0
- package/src/nodes/accessors/MaterialNode.js +9 -1
- package/src/nodes/accessors/MaterialProperties.js +2 -5
- package/src/nodes/accessors/MaterialReferenceNode.js +1 -2
- package/src/nodes/accessors/ModelNode.js +1 -1
- package/src/nodes/accessors/Normal.js +16 -15
- package/src/nodes/accessors/Object3DNode.js +2 -2
- package/src/nodes/accessors/Position.js +51 -3
- package/src/nodes/accessors/ReferenceBaseNode.js +7 -7
- package/src/nodes/accessors/ReferenceNode.js +11 -10
- package/src/nodes/accessors/RendererReferenceNode.js +1 -2
- package/src/nodes/accessors/SceneProperties.js +47 -0
- package/src/nodes/accessors/SkinningNode.js +27 -26
- package/src/nodes/accessors/StorageBufferNode.js +14 -24
- package/src/nodes/accessors/StorageTextureNode.js +62 -9
- package/src/nodes/accessors/Tangent.js +4 -14
- package/src/nodes/accessors/Texture3DNode.js +41 -31
- package/src/nodes/accessors/TextureNode.js +193 -63
- package/src/nodes/accessors/UniformArrayNode.js +6 -4
- package/src/nodes/accessors/UserDataNode.js +1 -2
- package/src/nodes/accessors/VertexColorNode.js +1 -2
- package/src/nodes/code/FunctionCallNode.js +25 -5
- package/src/nodes/code/FunctionNode.js +25 -3
- package/src/nodes/core/ArrayNode.js +22 -2
- package/src/nodes/core/AssignNode.js +6 -5
- package/src/nodes/core/AttributeNode.js +5 -4
- package/src/nodes/core/BypassNode.js +1 -1
- package/src/nodes/core/ContextNode.js +133 -15
- package/src/nodes/core/IndexNode.js +4 -3
- package/src/nodes/core/InputNode.js +3 -2
- package/src/nodes/core/InspectorNode.js +128 -0
- package/src/nodes/core/{CacheNode.js → IsolateNode.js} +41 -8
- package/src/nodes/core/MRTNode.js +48 -2
- package/src/nodes/core/Node.js +264 -46
- package/src/nodes/core/NodeBuilder.js +453 -87
- package/src/nodes/core/NodeError.js +28 -0
- package/src/nodes/core/NodeFrame.js +31 -23
- 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 +25 -97
- package/src/nodes/core/OutputStructNode.js +12 -10
- package/src/nodes/core/ParameterNode.js +34 -3
- package/src/nodes/core/PropertyNode.js +26 -3
- package/src/nodes/core/StackNode.js +99 -23
- package/src/nodes/core/StackTrace.js +139 -0
- package/src/nodes/core/StructNode.js +22 -8
- package/src/nodes/core/StructTypeNode.js +13 -18
- package/src/nodes/core/SubBuildNode.js +4 -4
- package/src/nodes/core/UniformGroupNode.js +36 -6
- package/src/nodes/core/UniformNode.js +37 -13
- package/src/nodes/core/VarNode.js +96 -34
- package/src/nodes/core/VaryingNode.js +2 -18
- package/src/nodes/display/BlendModes.js +0 -63
- package/src/nodes/display/BumpMapNode.js +1 -1
- package/src/nodes/display/ColorAdjustment.js +18 -1
- package/src/nodes/display/ColorSpaceNode.js +3 -3
- package/src/nodes/display/FrontFacingNode.js +4 -8
- package/src/nodes/display/NormalMapNode.js +41 -5
- package/src/nodes/display/PassNode.js +175 -25
- package/src/nodes/display/RenderOutputNode.js +35 -9
- package/src/nodes/display/ScreenNode.js +47 -15
- package/src/nodes/display/ToneMappingNode.js +32 -5
- package/src/nodes/display/ToonOutlinePassNode.js +10 -2
- package/src/nodes/display/ViewportDepthNode.js +52 -4
- package/src/nodes/display/ViewportDepthTextureNode.js +14 -6
- package/src/nodes/display/ViewportSharedTextureNode.js +12 -0
- package/src/nodes/display/ViewportTextureNode.js +72 -14
- package/src/nodes/fog/Fog.js +18 -34
- package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +52 -0
- package/src/nodes/functions/BSDF/DFGLUT.js +56 -0
- package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
- package/src/nodes/functions/BasicLightingModel.js +2 -1
- package/src/nodes/functions/PhysicalLightingModel.js +128 -46
- package/src/nodes/functions/VolumetricLightingModel.js +5 -5
- package/src/nodes/geometry/RangeNode.js +44 -6
- package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
- package/src/nodes/gpgpu/BarrierNode.js +9 -0
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +4 -4
- package/src/nodes/gpgpu/ComputeNode.js +76 -38
- package/src/nodes/gpgpu/SubgroupFunctionNode.js +455 -0
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +5 -4
- package/src/nodes/lighting/AnalyticLightNode.js +53 -0
- package/src/nodes/lighting/EnvironmentNode.js +34 -9
- package/src/nodes/lighting/LightsNode.js +10 -32
- package/src/nodes/lighting/PointShadowNode.js +167 -148
- package/src/nodes/lighting/ShadowFilterNode.js +55 -65
- package/src/nodes/lighting/ShadowNode.js +189 -44
- package/src/nodes/math/BitcastNode.js +156 -0
- package/src/nodes/math/BitcountNode.js +433 -0
- package/src/nodes/math/ConditionalNode.js +25 -8
- package/src/nodes/math/MathNode.js +98 -57
- package/src/nodes/math/OperatorNode.js +8 -5
- package/src/nodes/math/PackFloatNode.js +98 -0
- package/src/nodes/math/UnpackFloatNode.js +96 -0
- package/src/nodes/pmrem/PMREMNode.js +1 -1
- package/src/nodes/pmrem/PMREMUtils.js +111 -2
- package/src/nodes/shapes/Shapes.js +1 -1
- package/src/nodes/tsl/TSLBase.js +6 -3
- package/src/nodes/tsl/TSLCore.js +488 -166
- package/src/nodes/utils/ArrayElementNode.js +14 -1
- package/src/nodes/utils/ConvertNode.js +1 -1
- package/src/nodes/utils/DebugNode.js +14 -13
- package/src/nodes/utils/EventNode.js +67 -2
- package/src/nodes/utils/FlipNode.js +1 -1
- package/src/nodes/utils/FunctionOverloadingNode.js +37 -19
- package/src/nodes/utils/JoinNode.js +7 -4
- package/src/nodes/utils/LoopNode.js +20 -24
- package/src/nodes/utils/MemberNode.js +60 -8
- package/src/nodes/utils/Packing.js +13 -1
- package/src/nodes/utils/PostProcessingUtils.js +60 -1
- package/src/nodes/utils/RTTNode.js +14 -4
- package/src/nodes/utils/ReflectorNode.js +61 -11
- package/src/nodes/utils/Remap.js +48 -0
- package/src/nodes/utils/RotateNode.js +1 -1
- package/src/nodes/utils/SampleNode.js +12 -2
- package/src/nodes/utils/SetNode.js +1 -1
- package/src/nodes/utils/SplitNode.js +12 -1
- package/src/nodes/utils/SpriteSheetUV.js +35 -0
- package/src/nodes/utils/Timer.js +0 -47
- package/src/nodes/utils/UVUtils.js +28 -0
- package/src/objects/BatchedMesh.js +46 -18
- package/src/objects/InstancedMesh.js +30 -3
- package/src/objects/LOD.js +1 -1
- package/src/objects/Line.js +3 -2
- package/src/objects/LineSegments.js +2 -1
- package/src/objects/Mesh.js +1 -1
- package/src/objects/Points.js +1 -1
- package/src/objects/Skeleton.js +12 -2
- package/src/objects/SkinnedMesh.js +29 -10
- package/src/objects/Sprite.js +4 -3
- package/src/renderers/WebGLRenderer.js +372 -179
- package/src/renderers/common/Animation.js +16 -4
- package/src/renderers/common/Attributes.js +16 -2
- package/src/renderers/common/Backend.js +137 -35
- package/src/renderers/common/Background.js +28 -14
- package/src/renderers/common/BindGroup.js +1 -16
- package/src/renderers/common/Binding.js +11 -0
- package/src/renderers/common/Bindings.js +83 -12
- package/src/renderers/common/BlendMode.js +143 -0
- package/src/renderers/common/Buffer.js +40 -0
- package/src/renderers/common/BundleGroup.js +1 -1
- package/src/renderers/common/CanvasTarget.js +341 -0
- package/src/renderers/common/ChainMap.js +30 -6
- package/src/renderers/common/ComputePipeline.js +1 -1
- package/src/renderers/common/CubeRenderTarget.js +51 -7
- package/src/renderers/common/DataMap.js +1 -1
- package/src/renderers/common/Geometries.js +55 -3
- package/src/renderers/common/Info.js +337 -6
- package/src/renderers/common/InspectorBase.js +151 -0
- package/src/renderers/common/Lighting.js +5 -21
- package/src/renderers/common/Pipelines.js +41 -8
- package/src/renderers/common/PostProcessing.js +9 -226
- package/src/renderers/common/QuadMesh.js +7 -1
- package/src/renderers/common/ReadbackBuffer.js +78 -0
- package/src/renderers/common/RenderBundle.js +3 -1
- package/src/renderers/common/RenderBundles.js +7 -3
- package/src/renderers/common/RenderContext.js +18 -2
- package/src/renderers/common/RenderContexts.js +33 -49
- package/src/renderers/common/RenderList.js +7 -3
- package/src/renderers/common/RenderLists.js +2 -1
- package/src/renderers/common/RenderObject.js +32 -6
- package/src/renderers/common/RenderObjectPipeline.js +40 -0
- package/src/renderers/common/RenderObjects.js +22 -6
- package/src/renderers/common/RenderPipeline.js +232 -17
- package/src/renderers/common/Renderer.js +927 -335
- package/src/renderers/common/RendererUtils.js +9 -0
- package/src/renderers/common/SampledTexture.js +9 -1
- package/src/renderers/common/Sampler.js +52 -14
- package/src/renderers/common/StorageBuffer.js +13 -1
- package/src/renderers/common/StorageTexture.js +9 -1
- package/src/renderers/common/Textures.js +208 -47
- package/src/renderers/common/TimestampQueryPool.js +70 -6
- package/src/renderers/common/Uniform.js +8 -0
- package/src/renderers/common/UniformsGroup.js +64 -2
- package/src/renderers/common/XRManager.js +79 -51
- package/src/renderers/common/extras/PMREMGenerator.js +176 -79
- package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
- package/src/renderers/common/nodes/NodeLibrary.js +9 -7
- package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +260 -95
- package/src/renderers/common/nodes/NodeSampler.js +13 -1
- package/src/renderers/common/nodes/NodeStorageBuffer.js +13 -2
- package/src/renderers/common/nodes/NodeUniformBuffer.js +52 -0
- package/src/renderers/shaders/DFGLUTData.js +49 -0
- package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +8 -10
- package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -12
- package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +1 -2
- package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +8 -12
- package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/lightprobes_pars_fragment.glsl.js +80 -0
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +13 -2
- package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +6 -2
- package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +2 -0
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +8 -4
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +152 -59
- 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/normal_fragment_maps.glsl.js +7 -0
- package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
- package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +0 -1
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +221 -190
- package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +12 -2
- package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk.js +5 -3
- package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +1 -2
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +4 -1
- package/src/renderers/shaders/ShaderLib/{distanceRGBA.glsl.js → distance.glsl.js} +1 -2
- package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -1
- package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +1 -2
- package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -1
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -9
- package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +0 -1
- package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/vsm.glsl.js +4 -6
- package/src/renderers/shaders/ShaderLib.js +7 -6
- package/src/renderers/shaders/UniformsLib.js +8 -5
- package/src/renderers/shaders/UniformsUtils.js +52 -9
- package/src/renderers/webgl/WebGLAnimation.js +2 -1
- package/src/renderers/webgl/WebGLBackground.js +15 -15
- package/src/renderers/webgl/WebGLBindingStates.js +99 -27
- package/src/renderers/webgl/WebGLBufferRenderer.js +0 -32
- package/src/renderers/webgl/WebGLCapabilities.js +11 -5
- package/src/renderers/webgl/WebGLEnvironments.js +228 -0
- package/src/renderers/webgl/WebGLExtensions.js +2 -25
- package/src/renderers/webgl/WebGLGeometries.js +10 -7
- package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +0 -32
- package/src/renderers/webgl/WebGLInfo.js +3 -1
- package/src/renderers/webgl/WebGLLights.js +18 -1
- package/src/renderers/webgl/WebGLMaterials.js +24 -13
- package/src/renderers/webgl/WebGLObjects.js +3 -1
- package/src/renderers/webgl/WebGLOutput.js +270 -0
- package/src/renderers/webgl/WebGLProgram.js +63 -122
- package/src/renderers/webgl/WebGLPrograms.js +65 -52
- package/src/renderers/webgl/WebGLRenderLists.js +15 -0
- package/src/renderers/webgl/WebGLRenderStates.js +13 -2
- package/src/renderers/webgl/WebGLShadowMap.js +191 -26
- package/src/renderers/webgl/WebGLState.js +79 -40
- package/src/renderers/webgl/WebGLTextures.js +234 -68
- package/src/renderers/webgl/WebGLUniforms.js +40 -3
- package/src/renderers/webgl/WebGLUniformsGroups.js +24 -3
- package/src/renderers/webgl/WebGLUtils.js +8 -3
- package/src/renderers/webgl-fallback/WebGLBackend.js +438 -235
- package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +0 -41
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +339 -84
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +53 -19
- package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +25 -0
- package/src/renderers/webgl-fallback/utils/WebGLConstants.js +2 -3
- package/src/renderers/webgl-fallback/utils/WebGLState.js +229 -11
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +237 -72
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +56 -27
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +8 -3
- package/src/renderers/webgpu/WebGPUBackend.js +403 -253
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +2 -1
- package/src/renderers/webgpu/WebGPURenderer.js +5 -3
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +491 -123
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +108 -34
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +360 -201
- package/src/renderers/webgpu/utils/WebGPUCapabilities.js +48 -0
- package/src/renderers/webgpu/utils/WebGPUConstants.js +17 -2
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +111 -54
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +155 -205
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +407 -149
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +36 -13
- package/src/renderers/webgpu/utils/WebGPUUtils.js +55 -13
- package/src/renderers/webxr/WebXRController.js +12 -0
- package/src/renderers/webxr/WebXRManager.js +45 -29
- package/src/textures/CubeDepthTexture.js +76 -0
- package/src/textures/ExternalTexture.js +15 -4
- package/src/textures/HTMLTexture.js +74 -0
- package/src/textures/Source.js +5 -4
- package/src/textures/Texture.js +19 -7
- package/src/textures/VideoTexture.js +2 -3
- package/src/utils.js +344 -3
- package/examples/jsm/loaders/RGBMLoader.js +0 -1148
- package/examples/jsm/materials/MeshGouraudMaterial.js +0 -434
- package/examples/jsm/materials/MeshPostProcessingMaterial.js +0 -167
- package/examples/jsm/shaders/GodRaysShader.js +0 -333
- package/src/nodes/accessors/SceneNode.js +0 -144
- package/src/nodes/code/ScriptableNode.js +0 -726
- package/src/nodes/code/ScriptableValueNode.js +0 -253
- package/src/nodes/display/PosterizeNode.js +0 -65
- package/src/nodes/functions/BSDF/DFGApprox.js +0 -30
- package/src/nodes/utils/RemapNode.js +0 -125
- package/src/nodes/utils/SpriteSheetUVNode.js +0 -90
- package/src/renderers/webgl/WebGLCubeMaps.js +0 -99
- package/src/renderers/webgl/WebGLCubeUVMaps.js +0 -134
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { DepthTexture, FloatType, RenderTarget, Vector2, TempNode, QuadMesh, NodeMaterial, RendererUtils, NodeUpdateType } from 'three/webgpu';
|
|
2
|
-
import { Loop, int, exp, min, float, mul, uv, vec2, vec3, Fn, textureSize, orthographicDepthToViewZ, screenUV, nodeObject, uniform, vec4, passTexture, texture, perspectiveDepthToViewZ, positionView, reference } from 'three/tsl';
|
|
1
|
+
import { DepthTexture, FloatType, RenderTarget, Vector2, TempNode, QuadMesh, NodeMaterial, SpriteNodeMaterial, RendererUtils, NodeUpdateType } from 'three/webgpu';
|
|
2
|
+
import { Loop, int, exp, min, float, mul, uv, vec2, vec3, Fn, textureSize, orthographicDepthToViewZ, screenUV, nodeObject, uniform, vec4, passTexture, texture, perspectiveDepthToViewZ, positionView, reference, color } from 'three/tsl';
|
|
3
3
|
|
|
4
4
|
const _quadMesh = /*@__PURE__*/ new QuadMesh();
|
|
5
5
|
const _size = /*@__PURE__*/ new Vector2();
|
|
@@ -13,7 +13,7 @@ let _rendererState;
|
|
|
13
13
|
* gives you great flexibility in composing the final outline look depending on
|
|
14
14
|
* your requirements.
|
|
15
15
|
* ```js
|
|
16
|
-
* const
|
|
16
|
+
* const renderPipeline = new THREE.RenderPipeline( renderer );
|
|
17
17
|
*
|
|
18
18
|
* const scenePass = pass( scene, camera );
|
|
19
19
|
*
|
|
@@ -36,7 +36,7 @@ let _rendererState;
|
|
|
36
36
|
* const { visibleEdge, hiddenEdge } = outlinePass;
|
|
37
37
|
* const outlineColor = visibleEdge.mul( visibleEdgeColor ).add( hiddenEdge.mul( hiddenEdgeColor ) ).mul( edgeStrength );
|
|
38
38
|
*
|
|
39
|
-
*
|
|
39
|
+
* renderPipeline.outputNode = outlineColor.add( scenePass );
|
|
40
40
|
* ```
|
|
41
41
|
*
|
|
42
42
|
* @augments TempNode
|
|
@@ -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.
|
|
@@ -293,9 +293,13 @@ class OutlineNode extends TempNode {
|
|
|
293
293
|
* @type {NodeMaterial}
|
|
294
294
|
*/
|
|
295
295
|
this._depthMaterial = new NodeMaterial();
|
|
296
|
-
this._depthMaterial.
|
|
296
|
+
this._depthMaterial.colorNode = color( 0, 0, 0 );
|
|
297
297
|
this._depthMaterial.name = 'OutlineNode.depth';
|
|
298
298
|
|
|
299
|
+
this._depthSpriteMaterial = new SpriteNodeMaterial();
|
|
300
|
+
this._depthSpriteMaterial.colorNode = color( 0, 0, 0 );
|
|
301
|
+
this._depthSpriteMaterial.name = 'OutlineNode.depthSprite';
|
|
302
|
+
|
|
299
303
|
/**
|
|
300
304
|
* The material for preparing the mask.
|
|
301
305
|
*
|
|
@@ -305,6 +309,9 @@ class OutlineNode extends TempNode {
|
|
|
305
309
|
this._prepareMaskMaterial = new NodeMaterial();
|
|
306
310
|
this._prepareMaskMaterial.name = 'OutlineNode.prepareMask';
|
|
307
311
|
|
|
312
|
+
this._prepareMaskSpriteMaterial = new SpriteNodeMaterial();
|
|
313
|
+
this._prepareMaskSpriteMaterial.name = 'OutlineNode.prepareMaskSprite';
|
|
314
|
+
|
|
308
315
|
/**
|
|
309
316
|
* The copy material
|
|
310
317
|
*
|
|
@@ -358,6 +365,17 @@ class OutlineNode extends TempNode {
|
|
|
358
365
|
*/
|
|
359
366
|
this._selectionCache = new Set();
|
|
360
367
|
|
|
368
|
+
/**
|
|
369
|
+
* The number of selected objects from the previous frame. Used to detect
|
|
370
|
+
* the transition to an empty selection so the composite render target can
|
|
371
|
+
* be cleared once and avoid leaving a stale outline on screen.
|
|
372
|
+
*
|
|
373
|
+
* @private
|
|
374
|
+
* @type {number}
|
|
375
|
+
* @default 0
|
|
376
|
+
*/
|
|
377
|
+
this._lastSelectionCount = 0;
|
|
378
|
+
|
|
361
379
|
/**
|
|
362
380
|
* The result of the effect is represented as a separate texture node.
|
|
363
381
|
*
|
|
@@ -442,6 +460,35 @@ class OutlineNode extends TempNode {
|
|
|
442
460
|
const { renderer } = frame;
|
|
443
461
|
const { camera, scene } = this;
|
|
444
462
|
|
|
463
|
+
this._updateSelectionCache();
|
|
464
|
+
|
|
465
|
+
// If no objects are selected, all subsequent passes can be skipped since
|
|
466
|
+
// the outline would be empty anyway. The composite render target is cleared
|
|
467
|
+
// once when transitioning to an empty selection so a previously rendered
|
|
468
|
+
// outline does not linger on screen.
|
|
469
|
+
|
|
470
|
+
if ( this._selectionCache.size === 0 ) {
|
|
471
|
+
|
|
472
|
+
if ( this._lastSelectionCount > 0 ) {
|
|
473
|
+
|
|
474
|
+
_rendererState = RendererUtils.resetRendererState( renderer, _rendererState );
|
|
475
|
+
|
|
476
|
+
renderer.setRenderTarget( this._renderTargetComposite );
|
|
477
|
+
renderer.setClearColor( 0x000000, 0 );
|
|
478
|
+
renderer.clear();
|
|
479
|
+
|
|
480
|
+
RendererUtils.restoreRendererState( renderer, _rendererState );
|
|
481
|
+
|
|
482
|
+
this._lastSelectionCount = 0;
|
|
483
|
+
|
|
484
|
+
}
|
|
485
|
+
|
|
486
|
+
return;
|
|
487
|
+
|
|
488
|
+
}
|
|
489
|
+
|
|
490
|
+
this._lastSelectionCount = this._selectionCache.size;
|
|
491
|
+
|
|
445
492
|
_rendererState = RendererUtils.resetRendererAndSceneState( renderer, scene, _rendererState );
|
|
446
493
|
|
|
447
494
|
//
|
|
@@ -453,40 +500,42 @@ class OutlineNode extends TempNode {
|
|
|
453
500
|
|
|
454
501
|
renderer.setClearColor( 0xffffff, 1 );
|
|
455
502
|
|
|
456
|
-
|
|
503
|
+
const currentSceneName = scene.name;
|
|
457
504
|
|
|
458
505
|
// 1. Draw non-selected objects in the depth buffer
|
|
459
506
|
|
|
460
|
-
scene.overrideMaterial = this._depthMaterial;
|
|
461
|
-
|
|
462
507
|
renderer.setRenderTarget( this._renderTargetDepthBuffer );
|
|
463
|
-
renderer.setRenderObjectFunction( ( object,
|
|
508
|
+
renderer.setRenderObjectFunction( ( object, scene, camera, geometry, material, group, lightsNode, clippingContext ) => {
|
|
464
509
|
|
|
465
510
|
if ( this._selectionCache.has( object ) === false ) {
|
|
466
511
|
|
|
467
|
-
|
|
512
|
+
const overrideMaterial = object.isSprite ? this._depthSpriteMaterial : this._depthMaterial;
|
|
513
|
+
|
|
514
|
+
renderer.renderObject( object, scene, camera, geometry, overrideMaterial, group, lightsNode, clippingContext );
|
|
468
515
|
|
|
469
516
|
}
|
|
470
517
|
|
|
471
518
|
} );
|
|
472
519
|
|
|
520
|
+
scene.name = 'Outline [ Non-Selected Objects Pass ]';
|
|
473
521
|
renderer.render( scene, camera );
|
|
474
522
|
|
|
475
523
|
// 2. Draw only the selected objects by comparing the depth buffer of non-selected objects
|
|
476
524
|
|
|
477
|
-
scene.overrideMaterial = this._prepareMaskMaterial;
|
|
478
|
-
|
|
479
525
|
renderer.setRenderTarget( this._renderTargetMaskBuffer );
|
|
480
|
-
renderer.setRenderObjectFunction( ( object,
|
|
526
|
+
renderer.setRenderObjectFunction( ( object, scene, camera, geometry, material, group, lightsNode, clippingContext ) => {
|
|
481
527
|
|
|
482
528
|
if ( this._selectionCache.has( object ) === true ) {
|
|
483
529
|
|
|
484
|
-
|
|
530
|
+
const overrideMaterial = object.isSprite ? this._prepareMaskSpriteMaterial : this._prepareMaskMaterial;
|
|
531
|
+
|
|
532
|
+
renderer.renderObject( object, scene, camera, geometry, overrideMaterial, group, lightsNode, clippingContext );
|
|
485
533
|
|
|
486
534
|
}
|
|
487
535
|
|
|
488
536
|
} );
|
|
489
537
|
|
|
538
|
+
scene.name = 'Outline [ Selected Objects Pass ]';
|
|
490
539
|
renderer.render( scene, camera );
|
|
491
540
|
|
|
492
541
|
//
|
|
@@ -495,15 +544,19 @@ class OutlineNode extends TempNode {
|
|
|
495
544
|
|
|
496
545
|
this._selectionCache.clear();
|
|
497
546
|
|
|
547
|
+
scene.name = currentSceneName;
|
|
548
|
+
|
|
498
549
|
// 3. Downsample to (at least) half resolution
|
|
499
550
|
|
|
500
551
|
_quadMesh.material = this._materialCopy;
|
|
552
|
+
_quadMesh.name = 'Outline [ Downsample ]';
|
|
501
553
|
renderer.setRenderTarget( this._renderTargetMaskDownSampleBuffer );
|
|
502
554
|
_quadMesh.render( renderer );
|
|
503
555
|
|
|
504
556
|
// 4. Perform edge detection (half resolution)
|
|
505
557
|
|
|
506
558
|
_quadMesh.material = this._edgeDetectionMaterial;
|
|
559
|
+
_quadMesh.name = 'Outline [ Edge Detection ]';
|
|
507
560
|
renderer.setRenderTarget( this._renderTargetEdgeBuffer1 );
|
|
508
561
|
_quadMesh.render( renderer );
|
|
509
562
|
|
|
@@ -513,6 +566,7 @@ class OutlineNode extends TempNode {
|
|
|
513
566
|
this._blurDirection.value.copy( _BLUR_DIRECTION_X );
|
|
514
567
|
|
|
515
568
|
_quadMesh.material = this._separableBlurMaterial;
|
|
569
|
+
_quadMesh.name = 'Outline [ Blur Half Resolution ]';
|
|
516
570
|
renderer.setRenderTarget( this._renderTargetBlurBuffer1 );
|
|
517
571
|
_quadMesh.render( renderer );
|
|
518
572
|
|
|
@@ -528,6 +582,7 @@ class OutlineNode extends TempNode {
|
|
|
528
582
|
this._blurDirection.value.copy( _BLUR_DIRECTION_X );
|
|
529
583
|
|
|
530
584
|
_quadMesh.material = this._separableBlurMaterial2;
|
|
585
|
+
_quadMesh.name = 'Outline [ Blur Quarter Resolution ]';
|
|
531
586
|
renderer.setRenderTarget( this._renderTargetBlurBuffer2 );
|
|
532
587
|
_quadMesh.render( renderer );
|
|
533
588
|
|
|
@@ -540,6 +595,7 @@ class OutlineNode extends TempNode {
|
|
|
540
595
|
// 7. Composite
|
|
541
596
|
|
|
542
597
|
_quadMesh.material = this._compositeMaterial;
|
|
598
|
+
_quadMesh.name = 'Outline [ Blur Quarter Resolution ]';
|
|
543
599
|
renderer.setRenderTarget( this._renderTargetComposite );
|
|
544
600
|
_quadMesh.render( renderer );
|
|
545
601
|
|
|
@@ -576,13 +632,16 @@ class OutlineNode extends TempNode {
|
|
|
576
632
|
}
|
|
577
633
|
|
|
578
634
|
const depthTest = positionView.z.lessThanEqual( viewZNode ).select( 1, 0 );
|
|
579
|
-
return
|
|
635
|
+
return vec3( 0.0, depthTest, 1.0 );
|
|
580
636
|
|
|
581
637
|
};
|
|
582
638
|
|
|
583
|
-
this._prepareMaskMaterial.
|
|
639
|
+
this._prepareMaskMaterial.colorNode = prepareMask();
|
|
584
640
|
this._prepareMaskMaterial.needsUpdate = true;
|
|
585
641
|
|
|
642
|
+
this._prepareMaskSpriteMaterial.colorNode = prepareMask();
|
|
643
|
+
this._prepareMaskSpriteMaterial.needsUpdate = true;
|
|
644
|
+
|
|
586
645
|
// copy material
|
|
587
646
|
|
|
588
647
|
this._materialCopy.fragmentNode = this._maskTextureUniform;
|
|
@@ -701,7 +760,9 @@ class OutlineNode extends TempNode {
|
|
|
701
760
|
this._renderTargetComposite.dispose();
|
|
702
761
|
|
|
703
762
|
this._depthMaterial.dispose();
|
|
763
|
+
this._depthSpriteMaterial.dispose();
|
|
704
764
|
this._prepareMaskMaterial.dispose();
|
|
765
|
+
this._prepareMaskSpriteMaterial.dispose();
|
|
705
766
|
this._materialCopy.dispose();
|
|
706
767
|
this._edgeDetectionMaterial.dispose();
|
|
707
768
|
this._separableBlurMaterial.dispose();
|
|
@@ -722,7 +783,7 @@ class OutlineNode extends TempNode {
|
|
|
722
783
|
const selectedObject = this.selectedObjects[ i ];
|
|
723
784
|
selectedObject.traverse( ( object ) => {
|
|
724
785
|
|
|
725
|
-
if ( object.isMesh ) this._selectionCache.add( object );
|
|
786
|
+
if ( object.isMesh || object.isSprite ) this._selectionCache.add( object );
|
|
726
787
|
|
|
727
788
|
} );
|
|
728
789
|
|
|
@@ -742,10 +803,10 @@ export default OutlineNode;
|
|
|
742
803
|
* @param {Scene} scene - A reference to the scene.
|
|
743
804
|
* @param {Camera} camera - The camera the scene is rendered with.
|
|
744
805
|
* @param {Object} params - The configuration parameters.
|
|
745
|
-
* @param {Array<Object3D>} params.selectedObjects - An array of selected objects.
|
|
806
|
+
* @param {Array<Object3D>} [params.selectedObjects] - An array of selected objects.
|
|
746
807
|
* @param {Node<float>} [params.edgeThickness=float(1)] - The thickness of the edges.
|
|
747
808
|
* @param {Node<float>} [params.edgeGlow=float(0)] - Can be used for animated glow/pulse effects.
|
|
748
809
|
* @param {number} [params.downSampleRatio=2] - The downsample ratio.
|
|
749
810
|
* @returns {OutlineNode}
|
|
750
811
|
*/
|
|
751
|
-
export const outline = ( scene, camera, params ) =>
|
|
812
|
+
export const outline = ( scene, camera, params ) => new OutlineNode( scene, camera, params );
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { NodeMaterial } from 'three/webgpu';
|
|
2
|
-
import {
|
|
2
|
+
import { Fn, vec4, uv, If, mod, screenCoordinate } from 'three/tsl';
|
|
3
3
|
import StereoCompositePassNode from './StereoCompositePassNode.js';
|
|
4
4
|
|
|
5
5
|
/**
|
|
@@ -86,4 +86,4 @@ export default ParallaxBarrierPassNode;
|
|
|
86
86
|
* @param {Camera} camera - The camera to render the scene with.
|
|
87
87
|
* @returns {ParallaxBarrierPassNode}
|
|
88
88
|
*/
|
|
89
|
-
export const parallaxBarrierPass = ( scene, camera ) =>
|
|
89
|
+
export const parallaxBarrierPass = ( scene, camera ) => new ParallaxBarrierPassNode( scene, camera );
|
|
@@ -74,18 +74,19 @@ class PixelationNode extends TempNode {
|
|
|
74
74
|
/**
|
|
75
75
|
* Uniform node that represents the resolution.
|
|
76
76
|
*
|
|
77
|
+
* @private
|
|
77
78
|
* @type {Node<vec4>}
|
|
78
79
|
*/
|
|
79
80
|
this._resolution = uniform( new Vector4() );
|
|
80
81
|
|
|
81
82
|
/**
|
|
82
|
-
* The `
|
|
83
|
+
* The `updateType` is set to `NodeUpdateType.FRAME` since the node updates
|
|
83
84
|
* its internal uniforms once per frame in `updateBefore()`.
|
|
84
85
|
*
|
|
85
86
|
* @type {string}
|
|
86
87
|
* @default 'frame'
|
|
87
88
|
*/
|
|
88
|
-
this.
|
|
89
|
+
this.updateType = NodeUpdateType.FRAME;
|
|
89
90
|
|
|
90
91
|
}
|
|
91
92
|
|
|
@@ -94,7 +95,7 @@ class PixelationNode extends TempNode {
|
|
|
94
95
|
*
|
|
95
96
|
* @param {NodeFrame} frame - The current node frame.
|
|
96
97
|
*/
|
|
97
|
-
|
|
98
|
+
update() {
|
|
98
99
|
|
|
99
100
|
const map = this.textureNode.value;
|
|
100
101
|
|
|
@@ -193,7 +194,7 @@ class PixelationNode extends TempNode {
|
|
|
193
194
|
|
|
194
195
|
const nei = property( 'float', 'nei' );
|
|
195
196
|
|
|
196
|
-
If( this.normalEdgeStrength.greaterThan( 0.0 ), () => {
|
|
197
|
+
If( this.normalEdgeStrength.greaterThan( 0.0 ).and( normal.length().greaterThan( 0 ) ), () => {
|
|
197
198
|
|
|
198
199
|
nei.assign( normalEdgeIndicator( depth, normal ) );
|
|
199
200
|
|
|
@@ -213,7 +214,7 @@ class PixelationNode extends TempNode {
|
|
|
213
214
|
|
|
214
215
|
}
|
|
215
216
|
|
|
216
|
-
const pixelation = ( node, depthNode, normalNode, pixelSize = 6, normalEdgeStrength = 0.3, depthEdgeStrength = 0.4 ) =>
|
|
217
|
+
const pixelation = ( node, depthNode, normalNode, pixelSize = 6, normalEdgeStrength = 0.3, depthEdgeStrength = 0.4 ) => new PixelationNode( convertToTexture( node ), convertToTexture( depthNode ), convertToTexture( normalNode ), nodeObject( pixelSize ), nodeObject( normalEdgeStrength ), nodeObject( depthEdgeStrength ) );
|
|
217
218
|
|
|
218
219
|
/**
|
|
219
220
|
* A special render pass node that renders the scene with a pixelation effect.
|
|
@@ -329,6 +330,6 @@ class PixelationPassNode extends PassNode {
|
|
|
329
330
|
* @param {Node<float> | number} [depthEdgeStrength=0.4] - The depth edge strength.
|
|
330
331
|
* @returns {PixelationPassNode}
|
|
331
332
|
*/
|
|
332
|
-
export const pixelationPass = ( scene, camera, pixelSize, normalEdgeStrength, depthEdgeStrength ) =>
|
|
333
|
+
export const pixelationPass = ( scene, camera, pixelSize, normalEdgeStrength, depthEdgeStrength ) => new PixelationPassNode( scene, camera, pixelSize, normalEdgeStrength, depthEdgeStrength );
|
|
333
334
|
|
|
334
335
|
export default PixelationPassNode;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { TempNode } from 'three/webgpu';
|
|
2
|
-
import {
|
|
2
|
+
import { Fn, uv, uniform, vec2, sin, cos, vec4, convertToTexture } from 'three/tsl';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* Post processing node for shifting/splitting RGB color channels. The effect
|
|
@@ -93,4 +93,4 @@ export default RGBShiftNode;
|
|
|
93
93
|
* @param {number} [angle=0] - Defines in which direction colors are shifted.
|
|
94
94
|
* @returns {RGBShiftNode}
|
|
95
95
|
*/
|
|
96
|
-
export const rgbShift = ( node, amount, angle ) =>
|
|
96
|
+
export const rgbShift = ( node, amount, angle ) => new RGBShiftNode( convertToTexture( node ), amount, angle );
|
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
import { MeshBasicNodeMaterial, PassNode, UnsignedByteType, NearestFilter, CubeMapNode, MeshPhongNodeMaterial } from 'three/webgpu';
|
|
2
|
+
import { float, vec2, vec4, Fn, uv, varying, cameraProjectionMatrix, cameraViewMatrix, positionWorld, screenSize, materialColor, uint, texture, uniform, context, reflectVector } from 'three/tsl';
|
|
3
|
+
|
|
4
|
+
const _affineUv = varying( vec2() );
|
|
5
|
+
const _w = varying( float() );
|
|
6
|
+
|
|
7
|
+
const _clipSpaceRetro = Fn( () => {
|
|
8
|
+
|
|
9
|
+
const defaultPosition = cameraProjectionMatrix
|
|
10
|
+
.mul( cameraViewMatrix )
|
|
11
|
+
.mul( positionWorld );
|
|
12
|
+
|
|
13
|
+
const roundedPosition = defaultPosition.xy
|
|
14
|
+
.div( defaultPosition.w.mul( 2 ) )
|
|
15
|
+
.mul( screenSize.xy )
|
|
16
|
+
.round()
|
|
17
|
+
.div( screenSize.xy )
|
|
18
|
+
.mul( defaultPosition.w.mul( 2 ) );
|
|
19
|
+
|
|
20
|
+
_affineUv.assign( uv().mul( defaultPosition.w ) );
|
|
21
|
+
_w.assign( defaultPosition.w );
|
|
22
|
+
|
|
23
|
+
return vec4( roundedPosition.xy, defaultPosition.zw );
|
|
24
|
+
|
|
25
|
+
} )();
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* A post-processing pass that applies a retro PS1-style effect to the scene.
|
|
29
|
+
*
|
|
30
|
+
* This node renders the scene with classic PlayStation 1 visual characteristics:
|
|
31
|
+
* - **Vertex snapping**: Vertices are snapped to screen pixels, creating the iconic "wobbly" geometry
|
|
32
|
+
* - **Affine texture mapping**: Textures are sampled without perspective correction, resulting in distortion effects
|
|
33
|
+
* - **Low resolution**: Default 0.25 scale (typical 320x240 equivalent)
|
|
34
|
+
* - **Nearest-neighbor filtering**: Sharp pixelated textures without smoothing
|
|
35
|
+
*
|
|
36
|
+
* @augments PassNode
|
|
37
|
+
*/
|
|
38
|
+
class RetroPassNode extends PassNode {
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Creates a new RetroPassNode instance.
|
|
42
|
+
*
|
|
43
|
+
* @param {Scene} scene - The scene to render.
|
|
44
|
+
* @param {Camera} camera - The camera to render from.
|
|
45
|
+
* @param {Object} [options={}] - Additional options for the retro pass.
|
|
46
|
+
* @param {Node} [options.affineDistortion=null] - An optional node to apply affine distortion to UVs.
|
|
47
|
+
*/
|
|
48
|
+
constructor( scene, camera, options = {} ) {
|
|
49
|
+
|
|
50
|
+
super( PassNode.COLOR, scene, camera );
|
|
51
|
+
|
|
52
|
+
const {
|
|
53
|
+
affineDistortion = null,
|
|
54
|
+
filterTextures = false
|
|
55
|
+
} = options;
|
|
56
|
+
|
|
57
|
+
this.setResolutionScale( .25 );
|
|
58
|
+
|
|
59
|
+
this.renderTarget.texture.type = UnsignedByteType;
|
|
60
|
+
this.renderTarget.texture.magFilter = NearestFilter;
|
|
61
|
+
this.renderTarget.texture.minFilter = NearestFilter;
|
|
62
|
+
|
|
63
|
+
this.affineDistortionNode = affineDistortion;
|
|
64
|
+
|
|
65
|
+
this.filterTextures = filterTextures;
|
|
66
|
+
|
|
67
|
+
this._materialCache = new Map();
|
|
68
|
+
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Updates the retro pass before rendering.
|
|
73
|
+
*
|
|
74
|
+
* @override
|
|
75
|
+
* @param {Frame} frame - The current frame information.
|
|
76
|
+
* @returns {void}
|
|
77
|
+
*/
|
|
78
|
+
updateBefore( frame ) {
|
|
79
|
+
|
|
80
|
+
const renderer = frame.renderer;
|
|
81
|
+
|
|
82
|
+
const currentRenderObjectFunction = renderer.getRenderObjectFunction();
|
|
83
|
+
|
|
84
|
+
renderer.setRenderObjectFunction( ( object, scene, camera, geometry, material, ...params ) => {
|
|
85
|
+
|
|
86
|
+
const retroMaterialData = this._materialCache.get( material );
|
|
87
|
+
|
|
88
|
+
let retroMaterial;
|
|
89
|
+
|
|
90
|
+
if ( retroMaterialData === undefined || retroMaterialData.version !== material.version ) {
|
|
91
|
+
|
|
92
|
+
if ( retroMaterialData !== undefined ) {
|
|
93
|
+
|
|
94
|
+
retroMaterialData.material.dispose();
|
|
95
|
+
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
if ( material.isMeshBasicMaterial || material.isMeshBasicNodeMaterial ) {
|
|
99
|
+
|
|
100
|
+
retroMaterial = new MeshBasicNodeMaterial();
|
|
101
|
+
|
|
102
|
+
} else {
|
|
103
|
+
|
|
104
|
+
retroMaterial = new MeshPhongNodeMaterial();
|
|
105
|
+
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
retroMaterial.colorNode = material.colorNode || null;
|
|
109
|
+
retroMaterial.opacityNode = material.opacityNode || null;
|
|
110
|
+
retroMaterial.positionNode = material.positionNode || null;
|
|
111
|
+
retroMaterial.vertexNode = material.vertexNode || _clipSpaceRetro;
|
|
112
|
+
|
|
113
|
+
let colorNode = material.colorNode || materialColor;
|
|
114
|
+
|
|
115
|
+
if ( material.isMeshStandardNodeMaterial || material.isMeshStandardMaterial ) {
|
|
116
|
+
|
|
117
|
+
const envMap = material.envMap || scene.environment;
|
|
118
|
+
|
|
119
|
+
if ( envMap ) {
|
|
120
|
+
|
|
121
|
+
const reflection = new CubeMapNode( texture( envMap ) );
|
|
122
|
+
|
|
123
|
+
let metalness;
|
|
124
|
+
|
|
125
|
+
if ( material.metalnessNode ) {
|
|
126
|
+
|
|
127
|
+
metalness = material.metalnessNode;
|
|
128
|
+
|
|
129
|
+
} else {
|
|
130
|
+
|
|
131
|
+
metalness = uniform( material.metalness ).onRenderUpdate( ( { material } ) => material.metalness );
|
|
132
|
+
|
|
133
|
+
if ( material.metalnessMap ) {
|
|
134
|
+
|
|
135
|
+
const textureUniform = texture( material.metalnessMap ).onRenderUpdate( ( { material } ) => material.metalnessMap );
|
|
136
|
+
|
|
137
|
+
metalness = metalness.mul( textureUniform.b );
|
|
138
|
+
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
colorNode = metalness.mix( colorNode, reflection );
|
|
144
|
+
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
retroMaterial.colorNode = colorNode;
|
|
150
|
+
|
|
151
|
+
//
|
|
152
|
+
|
|
153
|
+
const contextData = {};
|
|
154
|
+
|
|
155
|
+
if ( this.affineDistortionNode ) {
|
|
156
|
+
|
|
157
|
+
contextData.getUV = ( texture ) => {
|
|
158
|
+
|
|
159
|
+
let finalUV;
|
|
160
|
+
|
|
161
|
+
if ( texture.isCubeTextureNode ) {
|
|
162
|
+
|
|
163
|
+
finalUV = reflectVector;
|
|
164
|
+
|
|
165
|
+
} else {
|
|
166
|
+
|
|
167
|
+
finalUV = this.affineDistortionNode.mix( uv(), _affineUv.div( _w ) );
|
|
168
|
+
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
return finalUV;
|
|
172
|
+
|
|
173
|
+
};
|
|
174
|
+
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
if ( this.filterTextures !== true ) {
|
|
178
|
+
|
|
179
|
+
contextData.getTextureLevel = () => uint( 0 );
|
|
180
|
+
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
retroMaterial.contextNode = context( contextData );
|
|
184
|
+
|
|
185
|
+
//
|
|
186
|
+
|
|
187
|
+
this._materialCache.set( material, {
|
|
188
|
+
material: retroMaterial,
|
|
189
|
+
version: material.version
|
|
190
|
+
} );
|
|
191
|
+
|
|
192
|
+
} else {
|
|
193
|
+
|
|
194
|
+
retroMaterial = retroMaterialData.material;
|
|
195
|
+
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
for ( const property in material ) {
|
|
199
|
+
|
|
200
|
+
if ( retroMaterial[ property ] === undefined ) continue;
|
|
201
|
+
|
|
202
|
+
retroMaterial[ property ] = material[ property ];
|
|
203
|
+
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
renderer.renderObject( object, scene, camera, geometry, retroMaterial, ...params );
|
|
207
|
+
|
|
208
|
+
} );
|
|
209
|
+
|
|
210
|
+
super.updateBefore( frame );
|
|
211
|
+
|
|
212
|
+
renderer.setRenderObjectFunction( currentRenderObjectFunction );
|
|
213
|
+
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
/**
|
|
217
|
+
* Disposes the retro pass and its internal resources.
|
|
218
|
+
*
|
|
219
|
+
* @override
|
|
220
|
+
* @returns {void}
|
|
221
|
+
*/
|
|
222
|
+
dispose() {
|
|
223
|
+
|
|
224
|
+
super.dispose();
|
|
225
|
+
|
|
226
|
+
this._materialCache.forEach( ( data ) => {
|
|
227
|
+
|
|
228
|
+
data.material.dispose();
|
|
229
|
+
|
|
230
|
+
} );
|
|
231
|
+
|
|
232
|
+
this._materialCache.clear();
|
|
233
|
+
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
export default RetroPassNode;
|
|
239
|
+
|
|
240
|
+
/**
|
|
241
|
+
* Creates a new RetroPassNode instance for PS1-style rendering.
|
|
242
|
+
*
|
|
243
|
+
* The retro pass applies vertex snapping, affine texture mapping, and low-resolution
|
|
244
|
+
* rendering to achieve an authentic PlayStation 1 aesthetic. Combine with other
|
|
245
|
+
* post-processing effects like dithering, posterization, and scanlines for full retro look.
|
|
246
|
+
*
|
|
247
|
+
* ```js
|
|
248
|
+
* // Combined with other effects
|
|
249
|
+
* let pipeline = retroPass( scene, camera );
|
|
250
|
+
* pipeline = bayerDither( pipeline, 32 );
|
|
251
|
+
* pipeline = posterize( pipeline, 32 );
|
|
252
|
+
* renderPipeline.outputNode = pipeline;
|
|
253
|
+
* ```
|
|
254
|
+
*
|
|
255
|
+
* @tsl
|
|
256
|
+
* @function
|
|
257
|
+
* @param {Scene} scene - The scene to render.
|
|
258
|
+
* @param {Camera} camera - The camera to render from.
|
|
259
|
+
* @param {Object} [options={}] - Additional options for the retro pass.
|
|
260
|
+
* @param {Node} [options.affineDistortion=null] - An optional node to apply affine distortion to UVs.
|
|
261
|
+
* @return {RetroPassNode} A new RetroPassNode instance.
|
|
262
|
+
*/
|
|
263
|
+
export const retroPass = ( scene, camera, options = {} ) => new RetroPassNode( scene, camera, options );
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { HalfFloatType, LinearFilter, NearestFilter, RenderTarget, Texture, Vector2, QuadMesh, NodeMaterial, TempNode, RendererUtils } from 'three/webgpu';
|
|
2
|
-
import { abs,
|
|
2
|
+
import { abs, Fn, NodeUpdateType, uv, uniform, convertToTexture, varyingProperty, vec2, vec4, modelViewProjection, passTexture, max, step, dot, float, texture, If, Loop, int, Break, sqrt, sign, mix } from 'three/tsl';
|
|
3
3
|
|
|
4
4
|
const _quadMesh = /*@__PURE__*/ new QuadMesh();
|
|
5
5
|
const _size = /*@__PURE__*/ new Vector2();
|
|
@@ -765,4 +765,4 @@ export default SMAANode;
|
|
|
765
765
|
* @param {Node<vec4>} node - The node that represents the input of the effect.
|
|
766
766
|
* @returns {SMAANode}
|
|
767
767
|
*/
|
|
768
|
-
export const smaa = ( node ) =>
|
|
768
|
+
export const smaa = ( node ) => new SMAANode( convertToTexture( node ) );
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { AdditiveBlending, Color, Vector2, RendererUtils, PassNode, QuadMesh, NodeMaterial } from 'three/webgpu';
|
|
2
|
-
import {
|
|
2
|
+
import { uniform, mrt, texture, getTextureIndex, unpremultiplyAlpha } from 'three/tsl';
|
|
3
3
|
|
|
4
4
|
const _size = /*@__PURE__*/ new Vector2();
|
|
5
5
|
|
|
@@ -355,4 +355,4 @@ const _JitterVectors = [
|
|
|
355
355
|
* @param {Camera} camera - The camera to render the scene with.
|
|
356
356
|
* @returns {SSAAPassNode}
|
|
357
357
|
*/
|
|
358
|
-
export const ssaaPass = ( scene, camera ) =>
|
|
358
|
+
export const ssaaPass = ( scene, camera ) => new SSAAPassNode( scene, camera );
|