super-three 0.181.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 +13152 -11354
- package/build/three.core.js +12319 -11539
- package/build/three.core.min.js +2 -2
- package/build/three.module.js +1808 -781
- package/build/three.module.min.js +2 -2
- package/build/three.tsl.js +27 -13
- package/build/three.tsl.min.js +2 -2
- package/build/three.webgpu.js +10523 -6263
- package/build/three.webgpu.min.js +2 -2
- package/build/three.webgpu.nodes.js +10484 -6262
- package/build/three.webgpu.nodes.min.js +2 -2
- package/examples/jsm/Addons.js +11 -3
- package/examples/jsm/animation/CCDIKSolver.js +7 -3
- package/examples/jsm/controls/ArcballControls.js +7 -4
- package/examples/jsm/controls/DragControls.js +2 -2
- package/examples/jsm/controls/FirstPersonControls.js +58 -54
- package/examples/jsm/controls/FlyControls.js +4 -0
- package/examples/jsm/controls/MapControls.js +55 -1
- package/examples/jsm/controls/OrbitControls.js +111 -8
- package/examples/jsm/controls/TrackballControls.js +8 -8
- package/examples/jsm/controls/TransformControls.js +34 -2
- 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/environments/ColorEnvironment.js +59 -0
- package/examples/jsm/environments/RoomEnvironment.js +3 -0
- package/examples/jsm/exporters/EXRExporter.js +1 -1
- package/examples/jsm/exporters/GLTFExporter.js +152 -9
- package/examples/jsm/exporters/USDZExporter.js +22 -3
- package/examples/jsm/geometries/DecalGeometry.js +1 -1
- package/examples/jsm/geometries/TextGeometry.js +18 -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 +67 -8
- package/examples/jsm/inspector/Extension.js +13 -0
- package/examples/jsm/inspector/Inspector.js +203 -88
- package/examples/jsm/inspector/RendererInspector.js +14 -4
- 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 +41 -7
- package/examples/jsm/inspector/tabs/Memory.js +128 -0
- package/examples/jsm/inspector/tabs/Parameters.js +51 -3
- package/examples/jsm/inspector/tabs/Performance.js +4 -4
- 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 +107 -5
- package/examples/jsm/inspector/ui/Graph.js +2 -2
- package/examples/jsm/inspector/ui/List.js +1 -1
- package/examples/jsm/inspector/ui/Profiler.js +1936 -34
- package/examples/jsm/inspector/ui/Style.js +1044 -31
- package/examples/jsm/inspector/ui/Tab.js +222 -3
- package/examples/jsm/inspector/ui/Values.js +55 -2
- package/examples/jsm/inspector/ui/utils.js +13 -0
- package/examples/jsm/interaction/InteractionManager.js +226 -0
- 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/lines/LineMaterial.js +7 -1
- package/examples/jsm/loaders/3DMLoader.js +5 -4
- package/examples/jsm/loaders/3MFLoader.js +2 -2
- package/examples/jsm/loaders/AMFLoader.js +2 -2
- package/examples/jsm/loaders/ColladaLoader.js +24 -4026
- package/examples/jsm/loaders/DRACOLoader.js +5 -5
- package/examples/jsm/loaders/EXRLoader.js +687 -48
- package/examples/jsm/loaders/FBXLoader.js +235 -37
- package/examples/jsm/loaders/GCodeLoader.js +34 -8
- package/examples/jsm/loaders/GLTFLoader.js +146 -178
- package/examples/jsm/loaders/HDRLoader.js +1 -2
- package/examples/jsm/loaders/KMZLoader.js +5 -5
- package/examples/jsm/loaders/KTX2Loader.js +27 -5
- package/examples/jsm/loaders/LDrawLoader.js +41 -50
- package/examples/jsm/loaders/LWOLoader.js +7 -39
- package/examples/jsm/loaders/NRRDLoader.js +2 -2
- package/examples/jsm/loaders/PCDLoader.js +4 -2
- package/examples/jsm/loaders/SVGLoader.js +2 -2
- package/examples/jsm/loaders/TDSLoader.js +0 -2
- package/examples/jsm/loaders/TGALoader.js +0 -2
- package/examples/jsm/loaders/USDLoader.js +100 -40
- package/examples/jsm/loaders/UltraHDRLoader.js +285 -160
- 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/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 +11 -11
- package/examples/jsm/math/Octree.js +131 -1
- package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
- package/examples/jsm/misc/RollerCoaster.js +42 -4
- package/examples/jsm/misc/Volume.js +0 -1
- package/examples/jsm/misc/VolumeSlice.js +0 -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/Sky.js +90 -6
- package/examples/jsm/objects/SkyMesh.js +150 -16
- package/examples/jsm/objects/Water.js +4 -3
- package/examples/jsm/objects/Water2.js +5 -3
- package/examples/jsm/objects/WaterMesh.js +5 -7
- 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/OutputPass.js +9 -0
- package/examples/jsm/postprocessing/RenderPass.js +10 -0
- package/examples/jsm/postprocessing/RenderTransitionPass.js +1 -1
- package/examples/jsm/postprocessing/UnrealBloomPass.js +48 -18
- package/examples/jsm/renderers/CSS3DRenderer.js +1 -1
- package/examples/jsm/renderers/Projector.js +246 -28
- package/examples/jsm/renderers/SVGRenderer.js +174 -60
- package/examples/jsm/shaders/GTAOShader.js +19 -6
- package/examples/jsm/shaders/HalftoneShader.js +12 -1
- package/examples/jsm/shaders/PoissonDenoiseShader.js +6 -2
- package/examples/jsm/shaders/SAOShader.js +17 -4
- package/examples/jsm/shaders/SSAOShader.js +11 -1
- package/examples/jsm/shaders/SSRShader.js +6 -5
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +2 -4
- package/examples/jsm/shaders/VignetteShader.js +1 -1
- package/examples/jsm/transpiler/AST.js +44 -0
- package/examples/jsm/transpiler/GLSLDecoder.js +63 -6
- package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -0
- package/examples/jsm/transpiler/TSLEncoder.js +46 -3
- package/examples/jsm/transpiler/TranspilerUtils.js +3 -3
- package/examples/jsm/transpiler/WGSLEncoder.js +27 -0
- package/examples/jsm/tsl/WebGLNodesHandler.js +605 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +11 -1
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +458 -16
- package/examples/jsm/tsl/display/AnamorphicNode.js +12 -1
- package/examples/jsm/tsl/display/BilateralBlurNode.js +374 -0
- package/examples/jsm/tsl/display/BloomNode.js +16 -6
- package/examples/jsm/tsl/display/CRT.js +150 -0
- package/examples/jsm/tsl/display/ChromaticAberrationNode.js +3 -36
- package/examples/jsm/tsl/display/DenoiseNode.js +1 -1
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +1 -1
- 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 +6 -4
- package/examples/jsm/tsl/display/GaussianBlurNode.js +21 -2
- 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 +69 -19
- 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 +8 -24
- package/examples/jsm/tsl/display/SSRNode.js +8 -8
- package/examples/jsm/tsl/display/SSSNode.js +6 -4
- 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 +315 -126
- package/examples/jsm/tsl/display/TransitionNode.js +1 -1
- package/examples/jsm/tsl/display/depthAwareBlend.js +80 -0
- package/examples/jsm/tsl/display/radialBlur.js +68 -0
- package/examples/jsm/tsl/lighting/DynamicLightsNode.js +300 -0
- 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 +2 -3
- 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 +1 -1
- package/examples/jsm/utils/SkeletonUtils.js +14 -8
- package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
- package/examples/jsm/webxr/XRHandMeshModel.js +36 -10
- package/examples/jsm/webxr/XRHandModelFactory.js +2 -1
- package/package.json +24 -30
- package/src/Three.Core.js +3 -1
- package/src/Three.TSL.js +25 -11
- package/src/Three.WebGPU.Nodes.js +5 -0
- package/src/Three.WebGPU.js +9 -0
- package/src/Three.js +1 -0
- package/src/animation/AnimationAction.js +12 -2
- package/src/animation/AnimationClip.js +1 -1
- package/src/animation/AnimationMixer.js +6 -0
- package/src/animation/AnimationUtils.js +1 -12
- package/src/animation/KeyframeTrack.js +47 -8
- 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 +1 -1
- package/src/audio/AudioContext.js +2 -2
- package/src/audio/AudioListener.js +5 -3
- package/src/cameras/Camera.js +32 -2
- package/src/cameras/CubeCamera.js +20 -0
- package/src/constants.js +90 -5
- package/src/core/BufferAttribute.js +13 -1
- package/src/core/BufferGeometry.js +14 -2
- package/src/core/Clock.js +7 -0
- package/src/core/Object3D.js +52 -4
- package/src/core/Raycaster.js +2 -2
- package/src/core/RenderTarget.js +4 -4
- package/src/extras/PMREMGenerator.js +7 -18
- package/src/extras/TextureUtils.js +5 -1
- package/src/extras/curves/CatmullRomCurve3.js +3 -2
- package/src/geometries/ExtrudeGeometry.js +2 -2
- package/src/geometries/PolyhedronGeometry.js +1 -1
- package/src/geometries/TorusGeometry.js +8 -3
- package/src/helpers/CameraHelper.js +3 -0
- 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/loaders/AudioLoader.js +11 -1
- package/src/loaders/Cache.js +28 -0
- package/src/loaders/DataTextureLoader.js +6 -4
- package/src/loaders/FileLoader.js +2 -3
- package/src/loaders/ImageBitmapLoader.js +12 -9
- package/src/loaders/Loader.js +6 -0
- package/src/loaders/MaterialLoader.js +3 -2
- package/src/loaders/ObjectLoader.js +46 -6
- package/src/loaders/nodes/NodeLoader.js +2 -2
- package/src/loaders/nodes/NodeObjectLoader.js +18 -0
- package/src/materials/Material.js +2 -0
- package/src/materials/MeshLambertMaterial.js +9 -0
- package/src/materials/MeshPhongMaterial.js +9 -0
- package/src/materials/MeshToonMaterial.js +1 -1
- package/src/materials/ShaderMaterial.js +20 -1
- package/src/materials/nodes/Line2NodeMaterial.js +34 -7
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +5 -2
- package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -4
- package/src/materials/nodes/NodeMaterial.js +45 -25
- package/src/materials/nodes/manager/NodeMaterialObserver.js +191 -86
- package/src/math/Line3.js +6 -5
- package/src/math/MathUtils.js +10 -10
- package/src/math/Matrix2.js +13 -9
- package/src/math/Matrix3.js +13 -9
- package/src/math/Matrix4.js +87 -74
- package/src/math/Plane.js +4 -3
- package/src/math/Quaternion.js +3 -29
- package/src/math/Sphere.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 -68
- package/src/nodes/TSL.js +7 -7
- 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 +29 -2
- package/src/nodes/accessors/Camera.js +149 -28
- package/src/nodes/accessors/ClippingNode.js +4 -4
- package/src/nodes/accessors/CubeTextureNode.js +27 -2
- package/src/nodes/accessors/InstanceNode.js +148 -43
- 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 +11 -11
- package/src/nodes/accessors/Object3DNode.js +1 -1
- package/src/nodes/accessors/Position.js +34 -2
- package/src/nodes/accessors/ReferenceBaseNode.js +6 -6
- package/src/nodes/accessors/ReferenceNode.js +8 -8
- 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 -25
- package/src/nodes/accessors/StorageTextureNode.js +40 -9
- package/src/nodes/accessors/Tangent.js +4 -14
- package/src/nodes/accessors/Texture3DNode.js +32 -35
- package/src/nodes/accessors/TextureNode.js +67 -23
- 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 +1 -1
- package/src/nodes/code/FunctionNode.js +2 -3
- package/src/nodes/core/ArrayNode.js +21 -2
- package/src/nodes/core/AssignNode.js +3 -3
- package/src/nodes/core/AttributeNode.js +3 -3
- package/src/nodes/core/BypassNode.js +1 -1
- package/src/nodes/core/ContextNode.js +104 -5
- package/src/nodes/core/IndexNode.js +2 -1
- package/src/nodes/core/InputNode.js +1 -1
- package/src/nodes/core/InspectorNode.js +1 -1
- package/src/nodes/core/IsolateNode.js +1 -1
- package/src/nodes/core/MRTNode.js +48 -2
- package/src/nodes/core/Node.js +112 -15
- package/src/nodes/core/NodeBuilder.js +284 -66
- package/src/nodes/core/NodeError.js +28 -0
- package/src/nodes/core/NodeFrame.js +12 -4
- package/src/nodes/core/NodeUtils.js +11 -9
- package/src/nodes/core/OutputStructNode.js +12 -10
- package/src/nodes/core/ParameterNode.js +4 -4
- package/src/nodes/core/PropertyNode.js +19 -3
- package/src/nodes/core/StackNode.js +66 -17
- package/src/nodes/core/StackTrace.js +139 -0
- package/src/nodes/core/StructNode.js +17 -3
- package/src/nodes/core/StructTypeNode.js +12 -18
- package/src/nodes/core/SubBuildNode.js +2 -2
- package/src/nodes/core/UniformGroupNode.js +36 -6
- package/src/nodes/core/UniformNode.js +21 -5
- package/src/nodes/core/VarNode.js +48 -23
- package/src/nodes/core/VaryingNode.js +2 -19
- package/src/nodes/display/BlendModes.js +0 -64
- package/src/nodes/display/ColorAdjustment.js +17 -0
- package/src/nodes/display/ColorSpaceNode.js +3 -3
- package/src/nodes/display/NormalMapNode.js +39 -4
- package/src/nodes/display/PassNode.js +125 -16
- package/src/nodes/display/RenderOutputNode.js +7 -7
- package/src/nodes/display/ScreenNode.js +4 -2
- package/src/nodes/display/ToneMappingNode.js +1 -1
- package/src/nodes/display/ToonOutlinePassNode.js +2 -2
- package/src/nodes/display/ViewportDepthNode.js +52 -4
- package/src/nodes/display/ViewportDepthTextureNode.js +11 -15
- package/src/nodes/display/ViewportTextureNode.js +39 -11
- package/src/nodes/fog/Fog.js +18 -35
- package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +3 -3
- 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/PhysicalLightingModel.js +126 -45
- package/src/nodes/geometry/RangeNode.js +5 -3
- package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
- package/src/nodes/gpgpu/BarrierNode.js +9 -0
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -3
- package/src/nodes/gpgpu/ComputeNode.js +74 -48
- package/src/nodes/gpgpu/SubgroupFunctionNode.js +2 -2
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +4 -4
- package/src/nodes/lighting/AnalyticLightNode.js +53 -0
- package/src/nodes/lighting/EnvironmentNode.js +28 -3
- package/src/nodes/lighting/LightsNode.js +7 -28
- package/src/nodes/lighting/PointShadowNode.js +162 -149
- package/src/nodes/lighting/ShadowFilterNode.js +53 -65
- package/src/nodes/lighting/ShadowNode.js +120 -42
- package/src/nodes/math/BitcastNode.js +1 -1
- package/src/nodes/math/BitcountNode.js +433 -0
- package/src/nodes/math/ConditionalNode.js +3 -3
- package/src/nodes/math/MathNode.js +76 -41
- package/src/nodes/math/OperatorNode.js +3 -2
- 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 +9 -15
- package/src/nodes/tsl/TSLBase.js +1 -1
- package/src/nodes/tsl/TSLCore.js +38 -17
- package/src/nodes/utils/ArrayElementNode.js +14 -1
- package/src/nodes/utils/ConvertNode.js +1 -1
- package/src/nodes/utils/DebugNode.js +12 -12
- package/src/nodes/utils/EventNode.js +31 -2
- package/src/nodes/utils/FlipNode.js +1 -1
- package/src/nodes/utils/FunctionOverloadingNode.js +1 -1
- package/src/nodes/utils/JoinNode.js +3 -3
- package/src/nodes/utils/LoopNode.js +1 -1
- package/src/nodes/utils/MemberNode.js +2 -2
- package/src/nodes/utils/Packing.js +13 -1
- package/src/nodes/utils/PostProcessingUtils.js +33 -1
- package/src/nodes/utils/RTTNode.js +1 -1
- package/src/nodes/utils/ReflectorNode.js +3 -4
- package/src/nodes/utils/Remap.js +48 -0
- package/src/nodes/utils/RotateNode.js +1 -1
- package/src/nodes/utils/SampleNode.js +1 -1
- package/src/nodes/utils/SetNode.js +1 -1
- package/src/nodes/utils/SplitNode.js +1 -1
- package/src/nodes/utils/SpriteSheetUV.js +35 -0
- package/src/nodes/utils/UVUtils.js +28 -0
- package/src/objects/BatchedMesh.js +44 -16
- package/src/objects/InstancedMesh.js +30 -3
- package/src/objects/Line.js +1 -1
- package/src/objects/Mesh.js +1 -1
- package/src/objects/Points.js +1 -1
- package/src/objects/Skeleton.js +9 -0
- package/src/objects/SkinnedMesh.js +26 -9
- package/src/renderers/WebGLRenderer.js +329 -145
- package/src/renderers/common/Animation.js +3 -3
- package/src/renderers/common/Attributes.js +15 -1
- package/src/renderers/common/Backend.js +29 -8
- package/src/renderers/common/Background.js +26 -13
- package/src/renderers/common/BindGroup.js +1 -16
- package/src/renderers/common/Binding.js +11 -0
- package/src/renderers/common/Bindings.js +29 -14
- 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/ChainMap.js +30 -6
- package/src/renderers/common/ComputePipeline.js +1 -1
- package/src/renderers/common/CubeRenderTarget.js +51 -7
- package/src/renderers/common/Geometries.js +29 -3
- package/src/renderers/common/Info.js +333 -4
- package/src/renderers/common/InspectorBase.js +6 -1
- package/src/renderers/common/Lighting.js +5 -21
- package/src/renderers/common/Pipelines.js +40 -7
- package/src/renderers/common/PostProcessing.js +8 -206
- 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 +16 -0
- package/src/renderers/common/RenderContexts.js +33 -49
- package/src/renderers/common/RenderLists.js +2 -1
- package/src/renderers/common/RenderObject.js +17 -5
- package/src/renderers/common/RenderObjectPipeline.js +40 -0
- package/src/renderers/common/RenderObjects.js +21 -5
- package/src/renderers/common/RenderPipeline.js +232 -17
- package/src/renderers/common/Renderer.js +481 -117
- package/src/renderers/common/Sampler.js +4 -4
- package/src/renderers/common/StorageBuffer.js +13 -1
- package/src/renderers/common/Textures.js +89 -4
- package/src/renderers/common/TimestampQueryPool.js +5 -3
- package/src/renderers/common/Uniform.js +8 -0
- package/src/renderers/common/UniformsGroup.js +62 -1
- package/src/renderers/common/XRManager.js +37 -29
- package/src/renderers/common/extras/PMREMGenerator.js +25 -23
- package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
- package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +242 -99
- package/src/renderers/common/nodes/NodeStorageBuffer.js +13 -2
- package/src/renderers/common/nodes/NodeUniformBuffer.js +52 -0
- package/src/renderers/shaders/DFGLUTData.js +19 -34
- 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/envmap_common_pars_fragment.glsl.js +0 -1
- package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +8 -12
- 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 +112 -53
- 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 +225 -186
- 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 +3 -0
- 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 +7 -5
- package/src/renderers/shaders/UniformsUtils.js +27 -5
- 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 +9 -4
- package/src/renderers/webgl/WebGLEnvironments.js +228 -0
- package/src/renderers/webgl/WebGLGeometries.js +10 -7
- package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +0 -32
- 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 +49 -109
- package/src/renderers/webgl/WebGLPrograms.js +63 -51
- package/src/renderers/webgl/WebGLRenderLists.js +15 -0
- package/src/renderers/webgl/WebGLRenderStates.js +13 -2
- package/src/renderers/webgl/WebGLShadowMap.js +188 -24
- package/src/renderers/webgl/WebGLState.js +75 -37
- package/src/renderers/webgl/WebGLTextures.js +215 -54
- package/src/renderers/webgl/WebGLUniforms.js +40 -3
- package/src/renderers/webgl/WebGLUniformsGroups.js +19 -0
- package/src/renderers/webgl/WebGLUtils.js +6 -2
- package/src/renderers/webgl-fallback/WebGLBackend.js +253 -82
- package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +0 -41
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +173 -74
- 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/WebGLState.js +223 -6
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +68 -53
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +10 -10
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +6 -2
- package/src/renderers/webgpu/WebGPUBackend.js +260 -140
- package/src/renderers/webgpu/WebGPURenderer.js +2 -1
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +366 -90
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +107 -34
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +357 -200
- package/src/renderers/webgpu/utils/WebGPUCapabilities.js +48 -0
- package/src/renderers/webgpu/utils/WebGPUConstants.js +10 -0
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +61 -23
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +152 -200
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +156 -59
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +7 -7
- package/src/renderers/webgpu/utils/WebGPUUtils.js +33 -11
- package/src/renderers/webxr/WebXRController.js +12 -0
- package/src/renderers/webxr/WebXRManager.js +4 -2
- package/src/textures/CubeDepthTexture.js +76 -0
- package/src/textures/HTMLTexture.js +74 -0
- package/src/textures/Source.js +2 -2
- package/src/textures/Texture.js +16 -5
- package/src/utils.js +280 -3
- 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 -145
- 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 -71
- 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
|
|
@@ -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,20 +500,18 @@ class OutlineNode extends TempNode {
|
|
|
453
500
|
|
|
454
501
|
renderer.setClearColor( 0xffffff, 1 );
|
|
455
502
|
|
|
456
|
-
this._updateSelectionCache();
|
|
457
|
-
|
|
458
503
|
const currentSceneName = scene.name;
|
|
459
504
|
|
|
460
505
|
// 1. Draw non-selected objects in the depth buffer
|
|
461
506
|
|
|
462
|
-
scene.overrideMaterial = this._depthMaterial;
|
|
463
|
-
|
|
464
507
|
renderer.setRenderTarget( this._renderTargetDepthBuffer );
|
|
465
|
-
renderer.setRenderObjectFunction( ( object,
|
|
508
|
+
renderer.setRenderObjectFunction( ( object, scene, camera, geometry, material, group, lightsNode, clippingContext ) => {
|
|
466
509
|
|
|
467
510
|
if ( this._selectionCache.has( object ) === false ) {
|
|
468
511
|
|
|
469
|
-
|
|
512
|
+
const overrideMaterial = object.isSprite ? this._depthSpriteMaterial : this._depthMaterial;
|
|
513
|
+
|
|
514
|
+
renderer.renderObject( object, scene, camera, geometry, overrideMaterial, group, lightsNode, clippingContext );
|
|
470
515
|
|
|
471
516
|
}
|
|
472
517
|
|
|
@@ -477,14 +522,14 @@ class OutlineNode extends TempNode {
|
|
|
477
522
|
|
|
478
523
|
// 2. Draw only the selected objects by comparing the depth buffer of non-selected objects
|
|
479
524
|
|
|
480
|
-
scene.overrideMaterial = this._prepareMaskMaterial;
|
|
481
|
-
|
|
482
525
|
renderer.setRenderTarget( this._renderTargetMaskBuffer );
|
|
483
|
-
renderer.setRenderObjectFunction( ( object,
|
|
526
|
+
renderer.setRenderObjectFunction( ( object, scene, camera, geometry, material, group, lightsNode, clippingContext ) => {
|
|
484
527
|
|
|
485
528
|
if ( this._selectionCache.has( object ) === true ) {
|
|
486
529
|
|
|
487
|
-
|
|
530
|
+
const overrideMaterial = object.isSprite ? this._prepareMaskSpriteMaterial : this._prepareMaskMaterial;
|
|
531
|
+
|
|
532
|
+
renderer.renderObject( object, scene, camera, geometry, overrideMaterial, group, lightsNode, clippingContext );
|
|
488
533
|
|
|
489
534
|
}
|
|
490
535
|
|
|
@@ -587,13 +632,16 @@ class OutlineNode extends TempNode {
|
|
|
587
632
|
}
|
|
588
633
|
|
|
589
634
|
const depthTest = positionView.z.lessThanEqual( viewZNode ).select( 1, 0 );
|
|
590
|
-
return
|
|
635
|
+
return vec3( 0.0, depthTest, 1.0 );
|
|
591
636
|
|
|
592
637
|
};
|
|
593
638
|
|
|
594
|
-
this._prepareMaskMaterial.
|
|
639
|
+
this._prepareMaskMaterial.colorNode = prepareMask();
|
|
595
640
|
this._prepareMaskMaterial.needsUpdate = true;
|
|
596
641
|
|
|
642
|
+
this._prepareMaskSpriteMaterial.colorNode = prepareMask();
|
|
643
|
+
this._prepareMaskSpriteMaterial.needsUpdate = true;
|
|
644
|
+
|
|
597
645
|
// copy material
|
|
598
646
|
|
|
599
647
|
this._materialCopy.fragmentNode = this._maskTextureUniform;
|
|
@@ -712,7 +760,9 @@ class OutlineNode extends TempNode {
|
|
|
712
760
|
this._renderTargetComposite.dispose();
|
|
713
761
|
|
|
714
762
|
this._depthMaterial.dispose();
|
|
763
|
+
this._depthSpriteMaterial.dispose();
|
|
715
764
|
this._prepareMaskMaterial.dispose();
|
|
765
|
+
this._prepareMaskSpriteMaterial.dispose();
|
|
716
766
|
this._materialCopy.dispose();
|
|
717
767
|
this._edgeDetectionMaterial.dispose();
|
|
718
768
|
this._separableBlurMaterial.dispose();
|
|
@@ -733,7 +783,7 @@ class OutlineNode extends TempNode {
|
|
|
733
783
|
const selectedObject = this.selectedObjects[ i ];
|
|
734
784
|
selectedObject.traverse( ( object ) => {
|
|
735
785
|
|
|
736
|
-
if ( object.isMesh ) this._selectionCache.add( object );
|
|
786
|
+
if ( object.isMesh || object.isSprite ) this._selectionCache.add( object );
|
|
737
787
|
|
|
738
788
|
} );
|
|
739
789
|
|
|
@@ -759,4 +809,4 @@ export default OutlineNode;
|
|
|
759
809
|
* @param {number} [params.downSampleRatio=2] - The downsample ratio.
|
|
760
810
|
* @returns {OutlineNode}
|
|
761
811
|
*/
|
|
762
|
-
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 );
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { RenderTarget, Vector2, TempNode, QuadMesh, NodeMaterial, RendererUtils, MathUtils } from 'three/webgpu';
|
|
2
|
-
import { clamp, normalize, reference,
|
|
2
|
+
import { clamp, normalize, reference, Fn, NodeUpdateType, uniform, vec4, passTexture, uv, logarithmicDepthToViewZ, viewZToPerspectiveDepth, getViewPosition, screenCoordinate, float, sub, fract, dot, vec2, rand, vec3, Loop, mul, PI, cos, sin, uint, cross, acos, sign, pow, luminance, If, max, abs, Break, sqrt, HALF_PI, div, ceil, shiftRight, convertToTexture, bool, getNormalFromDepth, countOneBits, interleavedGradientNoise } from 'three/tsl';
|
|
3
3
|
|
|
4
4
|
const _quadMesh = /*@__PURE__*/ new QuadMesh();
|
|
5
5
|
const _size = /*@__PURE__*/ new Vector2();
|
|
@@ -197,6 +197,7 @@ class SSGINode extends TempNode {
|
|
|
197
197
|
/**
|
|
198
198
|
* The resolution of the effect.
|
|
199
199
|
*
|
|
200
|
+
* @private
|
|
200
201
|
* @type {UniformNode<vec2>}
|
|
201
202
|
*/
|
|
202
203
|
this._resolution = uniform( new Vector2() );
|
|
@@ -204,6 +205,7 @@ class SSGINode extends TempNode {
|
|
|
204
205
|
/**
|
|
205
206
|
* Used to compute the effective step radius when viewSpaceSampling is `false`.
|
|
206
207
|
*
|
|
208
|
+
* @private
|
|
207
209
|
* @type {UniformNode<vec2>}
|
|
208
210
|
*/
|
|
209
211
|
this._halfProjScale = uniform( 1 );
|
|
@@ -211,6 +213,7 @@ class SSGINode extends TempNode {
|
|
|
211
213
|
/**
|
|
212
214
|
* Temporal direction that influences the rotation angle for each slice.
|
|
213
215
|
*
|
|
216
|
+
* @private
|
|
214
217
|
* @type {UniformNode<float>}
|
|
215
218
|
*/
|
|
216
219
|
this._temporalDirection = uniform( 0 );
|
|
@@ -218,6 +221,7 @@ class SSGINode extends TempNode {
|
|
|
218
221
|
/**
|
|
219
222
|
* Temporal offset added to the initial ray step.
|
|
220
223
|
*
|
|
224
|
+
* @private
|
|
221
225
|
* @type {UniformNode<float>}
|
|
222
226
|
*/
|
|
223
227
|
this._temporalOffset = uniform( 0 );
|
|
@@ -431,22 +435,6 @@ class SSGINode extends TempNode {
|
|
|
431
435
|
]
|
|
432
436
|
} );
|
|
433
437
|
|
|
434
|
-
const bitCount = Fn( ( [ value ] ) => {
|
|
435
|
-
|
|
436
|
-
const v = uint( value );
|
|
437
|
-
v.assign( v.sub( v.shiftRight( uint( 1 ) ).bitAnd( uint( 0x55555555 ) ) ) );
|
|
438
|
-
v.assign( v.bitAnd( uint( 0x33333333 ) ).add( v.shiftRight( uint( 2 ) ).bitAnd( uint( 0x33333333 ) ) ) );
|
|
439
|
-
|
|
440
|
-
return v.add( v.shiftRight( uint( 4 ) ) ).bitAnd( uint( 0xF0F0F0F ) ).mul( uint( 0x1010101 ) ).shiftRight( uint( 24 ) );
|
|
441
|
-
|
|
442
|
-
} ).setLayout( {
|
|
443
|
-
name: 'bitCount',
|
|
444
|
-
type: 'uint',
|
|
445
|
-
inputs: [
|
|
446
|
-
{ name: 'value', type: 'uint' }
|
|
447
|
-
]
|
|
448
|
-
} );
|
|
449
|
-
|
|
450
438
|
const horizonSampling = Fn( ( [ directionIsRight, RADIUS, viewPosition, slideDirTexelSize, initialRayStep, uvNode, viewDir, viewNormal, n ] ) => {
|
|
451
439
|
|
|
452
440
|
const STEP_COUNT = this.stepCount.toConst();
|
|
@@ -473,8 +461,6 @@ class SSGINode extends TempNode {
|
|
|
473
461
|
|
|
474
462
|
const color = vec3( 0 );
|
|
475
463
|
|
|
476
|
-
const lastSampleViewPosition = vec3( viewPosition ).toVar();
|
|
477
|
-
|
|
478
464
|
Loop( { start: uint( 0 ), end: STEP_COUNT, type: 'uint', condition: '<' }, ( { i } ) => {
|
|
479
465
|
|
|
480
466
|
const offset = pow( abs( mul( stepRadius, float( i ).add( initialRayStep ) ).div( radiusVS ) ), EXP_FACTOR ).mul( radiusVS ).toConst();
|
|
@@ -509,7 +495,7 @@ class SSGINode extends TempNode {
|
|
|
509
495
|
currentOccludedBitfield = currentOccludedBitfield.bitAnd( globalOccludedBitfield.bitNot() );
|
|
510
496
|
|
|
511
497
|
globalOccludedBitfield.assign( globalOccludedBitfield.bitOr( currentOccludedBitfield ) );
|
|
512
|
-
const numOccludedZones =
|
|
498
|
+
const numOccludedZones = countOneBits( currentOccludedBitfield );
|
|
513
499
|
|
|
514
500
|
//
|
|
515
501
|
|
|
@@ -541,8 +527,6 @@ class SSGINode extends TempNode {
|
|
|
541
527
|
|
|
542
528
|
} );
|
|
543
529
|
|
|
544
|
-
lastSampleViewPosition.assign( sampleViewPosition );
|
|
545
|
-
|
|
546
530
|
} );
|
|
547
531
|
|
|
548
532
|
return vec3( color );
|
|
@@ -593,7 +577,7 @@ class SSGINode extends TempNode {
|
|
|
593
577
|
color.addAssign( horizonSampling( bool( true ), RADIUS, viewPosition, slideDirTexelSize, initialRayStep, uvNode, viewDir, viewNormal, n ) );
|
|
594
578
|
color.addAssign( horizonSampling( bool( false ), RADIUS, viewPosition, slideDirTexelSize, initialRayStep, uvNode, viewDir, viewNormal, n ) );
|
|
595
579
|
|
|
596
|
-
ao.addAssign( float(
|
|
580
|
+
ao.addAssign( float( countOneBits( globalOccludedBitfield ) ).div( float( MAX_RAY ) ) );
|
|
597
581
|
|
|
598
582
|
} );
|
|
599
583
|
|
|
@@ -651,4 +635,4 @@ export default SSGINode;
|
|
|
651
635
|
* @param {Camera} camera - The camera the scene is rendered with.
|
|
652
636
|
* @returns {SSGINode}
|
|
653
637
|
*/
|
|
654
|
-
export const ssgi = ( beautyNode, depthNode, normalNode, camera ) =>
|
|
638
|
+
export const ssgi = ( beautyNode, depthNode, normalNode, camera ) => new SSGINode( convertToTexture( beautyNode ), depthNode, normalNode, camera );
|