super-three 0.181.0 → 0.185.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 +21332 -19201
- package/build/three.core.js +20908 -19853
- package/build/three.core.min.js +2 -2
- package/build/three.module.js +1947 -862
- package/build/three.module.min.js +2 -2
- package/build/three.tsl.js +37 -16
- package/build/three.tsl.min.js +2 -2
- package/build/three.webgpu.js +33628 -25197
- package/build/three.webgpu.min.js +2 -2
- package/build/three.webgpu.nodes.js +33394 -25000
- package/build/three.webgpu.nodes.min.js +2 -2
- package/examples/jsm/Addons.js +14 -3
- package/examples/jsm/animation/CCDIKSolver.js +7 -3
- package/examples/jsm/controls/ArcballControls.js +13 -6
- package/examples/jsm/controls/DragControls.js +2 -2
- package/examples/jsm/controls/FirstPersonControls.js +127 -86
- 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 +102 -17
- package/examples/jsm/csm/CSM.js +2 -1
- package/examples/jsm/csm/CSMFrustum.js +31 -6
- package/examples/jsm/csm/CSMShadowNode.js +10 -3
- package/examples/jsm/effects/AnaglyphEffect.js +102 -7
- package/examples/jsm/effects/AsciiEffect.js +14 -1
- package/examples/jsm/environments/ColorEnvironment.js +59 -0
- package/examples/jsm/environments/RoomEnvironment.js +3 -0
- package/examples/jsm/exporters/DRACOExporter.js +27 -6
- package/examples/jsm/exporters/EXRExporter.js +1 -1
- package/examples/jsm/exporters/GLTFExporter.js +266 -21
- package/examples/jsm/exporters/PLYExporter.js +286 -73
- package/examples/jsm/exporters/USDZExporter.js +353 -99
- package/examples/jsm/generators/CityGenerator.js +346 -0
- package/examples/jsm/generators/ForestGenerator.js +347 -0
- package/examples/jsm/generators/TerrainGenerator.js +504 -0
- package/examples/jsm/generators/TreeGenerator.js +377 -0
- package/examples/jsm/generators/city/SidewalkGenerator.js +253 -0
- package/examples/jsm/generators/city/SkyscraperGenerator.js +1357 -0
- package/examples/jsm/geometries/DecalGeometry.js +1 -1
- package/examples/jsm/geometries/LoftGeometry.js +355 -0
- 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/LightProbeHelper.js +5 -4
- package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -1
- package/examples/jsm/helpers/TextureHelperGPU.js +1 -1
- package/examples/jsm/helpers/ViewHelper.js +83 -14
- package/examples/jsm/inspector/Extension.js +13 -0
- package/examples/jsm/inspector/Inspector.js +244 -91
- package/examples/jsm/inspector/RendererInspector.js +165 -39
- 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 +241 -25
- package/examples/jsm/inspector/tabs/Memory.js +136 -0
- package/examples/jsm/inspector/tabs/Parameters.js +115 -7
- package/examples/jsm/inspector/tabs/Performance.js +24 -9
- package/examples/jsm/inspector/tabs/Settings.js +306 -0
- package/examples/jsm/inspector/tabs/Timeline.js +1696 -0
- package/examples/jsm/inspector/tabs/Viewer.js +723 -9
- package/examples/jsm/inspector/ui/Graph.js +162 -25
- package/examples/jsm/inspector/ui/Item.js +92 -13
- package/examples/jsm/inspector/ui/List.js +2 -2
- package/examples/jsm/inspector/ui/Profiler.js +1991 -44
- package/examples/jsm/inspector/ui/Style.js +1943 -543
- package/examples/jsm/inspector/ui/Tab.js +226 -5
- package/examples/jsm/inspector/ui/Values.js +126 -8
- package/examples/jsm/inspector/ui/utils.js +143 -10
- package/examples/jsm/interaction/InteractionManager.js +226 -0
- package/examples/jsm/libs/basis/README.md +0 -1
- package/examples/jsm/libs/demuxer_mp4.js +3 -3
- package/examples/jsm/libs/draco/README.md +0 -1
- package/examples/jsm/libs/meshopt_clusterizer.module.js +421 -0
- package/examples/jsm/libs/meshopt_decoder.module.js +9 -8
- package/examples/jsm/libs/meshopt_simplifier.module.js +627 -0
- package/examples/jsm/libs/mikktspace.module.js +34 -9
- package/examples/jsm/lighting/ClusteredLighting.js +55 -0
- package/examples/jsm/lighting/DynamicLighting.js +82 -0
- package/examples/jsm/lighting/LightProbeGrid.js +681 -0
- package/examples/jsm/lines/LineMaterial.js +45 -16
- package/examples/jsm/lines/LineSegments2.js +8 -0
- package/examples/jsm/lines/webgpu/LineSegments2.js +8 -0
- package/examples/jsm/loaders/3DMLoader.js +6 -5
- 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 +51 -18
- package/examples/jsm/loaders/EXRLoader.js +701 -90
- 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 +7 -30
- package/examples/jsm/loaders/KMZLoader.js +5 -5
- package/examples/jsm/loaders/KTX2Loader.js +58 -17
- package/examples/jsm/loaders/LDrawLoader.js +49 -58
- package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
- package/examples/jsm/loaders/LUTCubeLoader.js +2 -2
- package/examples/jsm/loaders/LWOLoader.js +11 -39
- package/examples/jsm/loaders/LottieLoader.js +1 -1
- package/examples/jsm/loaders/MaterialXLoader.js +31 -9
- package/examples/jsm/loaders/NRRDLoader.js +5 -5
- package/examples/jsm/loaders/PCDLoader.js +11 -9
- package/examples/jsm/loaders/PLYLoader.js +218 -55
- package/examples/jsm/loaders/SVGLoader.js +549 -497
- package/examples/jsm/loaders/TDSLoader.js +0 -2
- package/examples/jsm/loaders/TGALoader.js +0 -2
- package/examples/jsm/loaders/TTFLoader.js +1 -1
- package/examples/jsm/loaders/USDLoader.js +127 -43
- package/examples/jsm/loaders/UltraHDRLoader.js +285 -160
- package/examples/jsm/loaders/VOXLoader.js +660 -117
- package/examples/jsm/loaders/VRMLLoader.js +80 -3
- 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 +504 -344
- package/examples/jsm/loaders/usd/USDCParser.js +1867 -6
- package/examples/jsm/loaders/usd/USDComposer.js +4627 -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/TileCreasedNormalsPlugin.js +270 -0
- package/examples/jsm/misc/Volume.js +2 -3
- package/examples/jsm/misc/VolumeSlice.js +0 -1
- package/examples/jsm/modifiers/TessellateModifier.js +1 -1
- package/examples/jsm/objects/GroundedSkybox.js +1 -1
- package/examples/jsm/objects/LensflareMesh.js +1 -1
- package/examples/jsm/objects/Reflector.js +72 -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/Water2Mesh.js +1 -1
- package/examples/jsm/objects/WaterMesh.js +5 -7
- package/examples/jsm/physics/AmmoPhysics.js +27 -15
- package/examples/jsm/physics/JoltPhysics.js +10 -6
- package/examples/jsm/physics/RapierPhysics.js +36 -7
- 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/shaders/VolumeShader.js +31 -44
- package/examples/jsm/transpiler/AST.js +44 -0
- package/examples/jsm/transpiler/GLSLDecoder.js +65 -8
- package/examples/jsm/transpiler/Linker.js +1 -1
- 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/BilateralBlurNode.js +374 -0
- package/examples/jsm/tsl/display/BloomNode.js +75 -25
- 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 +3 -3
- 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 +13 -14
- package/examples/jsm/tsl/display/GTAONode.js +40 -17
- package/examples/jsm/tsl/display/GaussianBlurNode.js +21 -2
- package/examples/jsm/tsl/display/GodraysNode.js +615 -0
- package/examples/jsm/tsl/display/ImportanceSampledEnvironment.js +560 -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 +9 -8
- package/examples/jsm/tsl/display/RGBShiftNode.js +2 -2
- package/examples/jsm/tsl/display/RecurrentDenoiseNode.js +912 -0
- 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 +15 -27
- package/examples/jsm/tsl/display/SSGINode.js +96 -62
- package/examples/jsm/tsl/display/SSRNode.js +831 -134
- package/examples/jsm/tsl/display/SSSNode.js +8 -6
- 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/TemporalReprojectNode.js +1023 -0
- 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/ClusteredLightsNode.js +622 -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/tsl/math/curlNoise.js +107 -0
- package/examples/jsm/tsl/shadows/TileShadowNode.js +1 -1
- package/examples/jsm/tsl/shadows/TileShadowNodeHelper.js +3 -3
- package/examples/jsm/tsl/utils/GroundedSkybox.js +62 -0
- package/examples/jsm/tsl/utils/RNoise.js +51 -0
- package/examples/jsm/tsl/utils/SpecularHelpers.js +325 -0
- package/examples/jsm/utils/BufferGeometryUtils.js +128 -62
- package/examples/jsm/utils/ColorUtils.js +76 -0
- package/examples/jsm/utils/GeometryCompressionUtils.js +1 -1
- package/examples/jsm/utils/LDrawUtils.js +1 -1
- package/examples/jsm/utils/SceneOptimizer.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/ARButton.js +1 -1
- package/examples/jsm/webxr/WebGLXRFallback.js +89 -0
- package/examples/jsm/webxr/XRControllerModelFactory.js +2 -2
- package/examples/jsm/webxr/XRHandMeshModel.js +36 -10
- package/examples/jsm/webxr/XRHandModelFactory.js +2 -1
- package/package.json +28 -34
- package/src/Three.Core.js +3 -1
- package/src/Three.TSL.js +35 -14
- package/src/Three.WebGPU.Nodes.js +5 -0
- package/src/Three.WebGPU.js +13 -0
- package/src/Three.js +1 -0
- package/src/animation/AnimationAction.js +18 -4
- package/src/animation/AnimationClip.js +0 -139
- package/src/animation/AnimationMixer.js +6 -0
- package/src/animation/AnimationUtils.js +1 -12
- package/src/animation/KeyframeTrack.js +47 -8
- package/src/animation/PropertyBinding.js +2 -2
- 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 +34 -4
- package/src/cameras/CubeCamera.js +20 -0
- package/src/cameras/StereoCamera.js +5 -2
- package/src/constants.js +90 -5
- package/src/core/BufferAttribute.js +13 -1
- package/src/core/BufferGeometry.js +43 -9
- package/src/core/Clock.js +7 -0
- package/src/core/Object3D.js +69 -11
- package/src/core/Raycaster.js +3 -3
- package/src/core/RenderTarget.js +19 -6
- package/src/extras/PMREMGenerator.js +13 -22
- package/src/extras/TextureUtils.js +6 -2
- package/src/extras/core/ShapePath.js +149 -160
- 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/SphereGeometry.js +8 -3
- package/src/geometries/TorusGeometry.js +8 -3
- package/src/helpers/CameraHelper.js +3 -0
- package/src/helpers/DirectionalLightHelper.js +6 -1
- package/src/helpers/HemisphereLightHelper.js +5 -0
- package/src/helpers/PointLightHelper.js +3 -25
- package/src/helpers/SpotLightHelper.js +4 -1
- 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 +75 -42
- package/src/loaders/FileLoader.js +2 -3
- package/src/loaders/ImageBitmapLoader.js +12 -9
- package/src/loaders/Loader.js +6 -0
- package/src/loaders/LoadingManager.js +5 -0
- package/src/loaders/MaterialLoader.js +37 -266
- package/src/loaders/ObjectLoader.js +48 -6
- package/src/loaders/nodes/NodeLoader.js +2 -2
- package/src/loaders/nodes/NodeObjectLoader.js +18 -0
- package/src/materials/LineBasicMaterial.js +4 -0
- package/src/materials/Material.js +198 -1
- package/src/materials/MeshBasicMaterial.js +24 -0
- package/src/materials/MeshDepthMaterial.js +10 -0
- package/src/materials/MeshDistanceMaterial.js +10 -0
- package/src/materials/MeshLambertMaterial.js +49 -1
- package/src/materials/MeshMatcapMaterial.js +25 -1
- package/src/materials/MeshNormalMaterial.js +9 -1
- package/src/materials/MeshPhongMaterial.js +49 -1
- package/src/materials/MeshPhysicalMaterial.js +38 -0
- package/src/materials/MeshStandardMaterial.js +42 -1
- package/src/materials/MeshToonMaterial.js +35 -2
- package/src/materials/PointsMaterial.js +7 -0
- package/src/materials/ShaderMaterial.js +106 -1
- package/src/materials/SpriteMaterial.js +7 -0
- package/src/materials/nodes/Line2NodeMaterial.js +380 -297
- package/src/materials/nodes/MeshBasicNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshPhongNodeMaterial.js +0 -9
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +3 -30
- package/src/materials/nodes/MeshSSSNodeMaterial.js +0 -13
- package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -15
- package/src/materials/nodes/NodeMaterial.js +153 -89
- package/src/materials/nodes/SpriteNodeMaterial.js +0 -10
- package/src/materials/nodes/manager/NodeMaterialObserver.js +234 -100
- package/src/math/Box3.js +5 -0
- package/src/math/FrustumArray.js +103 -133
- package/src/math/Interpolant.js +1 -1
- package/src/math/Line3.js +6 -5
- package/src/math/MathUtils.js +12 -12
- package/src/math/Matrix2.js +13 -9
- package/src/math/Matrix3.js +24 -9
- package/src/math/Matrix4.js +112 -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 +13 -9
- package/src/math/Vector3.js +17 -15
- package/src/math/Vector4.js +15 -11
- package/src/math/interpolants/BezierInterpolant.js +106 -0
- package/src/nodes/Nodes.js +86 -71
- package/src/nodes/TSL.js +15 -13
- package/src/nodes/accessors/Arrays.js +5 -5
- package/src/nodes/accessors/Batch.js +108 -0
- package/src/nodes/accessors/Bitangent.js +7 -7
- package/src/nodes/accessors/BufferAttributeNode.js +120 -17
- package/src/nodes/accessors/BufferNode.js +29 -2
- package/src/nodes/accessors/Camera.js +149 -28
- package/src/nodes/accessors/ClippingNode.js +5 -5
- package/src/nodes/accessors/CubeTextureNode.js +27 -2
- package/src/nodes/accessors/Instance.js +264 -0
- package/src/nodes/accessors/MaterialNode.js +27 -3
- package/src/nodes/accessors/MaterialProperties.js +6 -8
- package/src/nodes/accessors/MaterialReferenceNode.js +1 -2
- package/src/nodes/accessors/ModelNode.js +1 -1
- package/src/nodes/accessors/{MorphNode.js → Morph.js} +99 -112
- package/src/nodes/accessors/Normal.js +24 -24
- package/src/nodes/accessors/Object3DNode.js +1 -1
- package/src/nodes/accessors/Position.js +39 -3
- package/src/nodes/accessors/ReferenceBaseNode.js +6 -6
- package/src/nodes/accessors/ReferenceNode.js +9 -8
- package/src/nodes/accessors/ReflectVector.js +3 -3
- package/src/nodes/accessors/RendererReferenceNode.js +1 -2
- package/src/nodes/accessors/SceneProperties.js +47 -0
- package/src/nodes/accessors/Skinning.js +263 -0
- package/src/nodes/accessors/StorageBufferNode.js +16 -27
- package/src/nodes/accessors/StorageTexture3DNode.js +100 -0
- package/src/nodes/accessors/StorageTextureNode.js +74 -11
- package/src/nodes/accessors/Tangent.js +8 -18
- package/src/nodes/accessors/Texture3DNode.js +32 -35
- package/src/nodes/accessors/TextureNode.js +124 -25
- 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 +4 -19
- 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 +55 -4
- package/src/nodes/core/Node.js +151 -17
- package/src/nodes/core/NodeBuilder.js +479 -101
- package/src/nodes/core/NodeError.js +28 -0
- package/src/nodes/core/NodeFrame.js +12 -4
- package/src/nodes/core/NodeUtils.js +20 -18
- package/src/nodes/core/OutputStructNode.js +13 -11
- package/src/nodes/core/OverrideContextNode.js +153 -0
- package/src/nodes/core/ParameterNode.js +4 -4
- package/src/nodes/core/PropertyNode.js +66 -4
- package/src/nodes/core/StackNode.js +91 -20
- package/src/nodes/core/StackTrace.js +139 -0
- package/src/nodes/core/StructNode.js +20 -8
- package/src/nodes/core/StructTypeNode.js +17 -23
- 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 +56 -23
- package/src/nodes/core/VaryingNode.js +14 -21
- package/src/nodes/display/BlendModes.js +1 -105
- package/src/nodes/display/BumpMapNode.js +6 -1
- package/src/nodes/display/ColorAdjustment.js +27 -9
- package/src/nodes/display/ColorSpaceNode.js +3 -3
- package/src/nodes/display/FrontFacingNode.js +38 -9
- package/src/nodes/display/NormalMapNode.js +41 -6
- package/src/nodes/display/PassNode.js +157 -56
- package/src/nodes/display/PremultiplyAlphaFunctions.js +39 -0
- package/src/nodes/display/RenderOutputNode.js +19 -10
- 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/functions/VolumetricLightingModel.js +40 -7
- 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 +5 -5
- package/src/nodes/lighting/AnalyticLightNode.js +53 -0
- package/src/nodes/lighting/EnvironmentNode.js +30 -5
- package/src/nodes/lighting/IESSpotLightNode.js +40 -2
- package/src/nodes/lighting/LightingContextNode.js +10 -2
- package/src/nodes/lighting/LightsNode.js +97 -65
- package/src/nodes/lighting/PointShadowNode.js +166 -148
- package/src/nodes/lighting/ShadowFilterNode.js +74 -117
- package/src/nodes/lighting/ShadowNode.js +149 -51
- package/src/nodes/materialx/lib/mx_noise.js +2 -2
- package/src/nodes/math/BitcastNode.js +1 -1
- package/src/nodes/math/BitcountNode.js +433 -0
- package/src/nodes/math/ConditionalNode.js +6 -6
- package/src/nodes/math/MathNode.js +115 -52
- package/src/nodes/math/OperatorNode.js +24 -23
- package/src/nodes/math/PackFloatNode.js +98 -0
- package/src/nodes/math/UnpackFloatNode.js +96 -0
- package/src/nodes/parsers/GLSLNodeFunction.js +1 -1
- package/src/nodes/pmrem/PMREMNode.js +34 -3
- package/src/nodes/pmrem/PMREMUtils.js +9 -15
- package/src/nodes/tsl/TSLBase.js +1 -1
- package/src/nodes/tsl/TSLCore.js +99 -33
- 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/EquirectUV.js +30 -5
- package/src/nodes/utils/EventNode.js +31 -2
- package/src/nodes/utils/FlipNode.js +1 -1
- package/src/nodes/utils/FunctionOverloadingNode.js +2 -2
- 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 +48 -5
- package/src/nodes/utils/PostProcessingUtils.js +33 -1
- package/src/nodes/utils/RTTNode.js +41 -25
- package/src/nodes/utils/ReflectorNode.js +4 -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/StorageArrayElementNode.js +1 -1
- package/src/nodes/utils/UVUtils.js +28 -0
- package/src/objects/BatchedMesh.js +66 -30
- package/src/objects/InstancedMesh.js +19 -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/SkinnedMesh.js +26 -9
- package/src/renderers/WebGLRenderer.js +344 -156
- package/src/renderers/common/Animation.js +3 -3
- package/src/renderers/common/Attributes.js +15 -1
- package/src/renderers/common/Backend.js +78 -13
- 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 +141 -57
- package/src/renderers/common/BlendMode.js +143 -0
- package/src/renderers/common/Buffer.js +49 -0
- package/src/renderers/common/BundleGroup.js +1 -1
- package/src/renderers/common/ChainMap.js +30 -6
- package/src/renderers/common/ClippingContext.js +10 -2
- 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 +374 -4
- package/src/renderers/common/InspectorBase.js +6 -1
- package/src/renderers/common/Lighting.js +51 -19
- 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/RenderList.js +41 -4
- package/src/renderers/common/RenderLists.js +2 -1
- package/src/renderers/common/RenderObject.js +88 -16
- 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 +700 -163
- package/src/renderers/common/Sampler.js +16 -48
- package/src/renderers/common/StorageBuffer.js +13 -1
- package/src/renderers/common/Textures.js +121 -9
- package/src/renderers/common/TimestampQueryPool.js +6 -4
- package/src/renderers/common/Uniform.js +8 -0
- package/src/renderers/common/UniformsGroup.js +84 -1
- package/src/renderers/common/XRManager.js +377 -51
- package/src/renderers/common/extras/PMREMGenerator.js +40 -61
- package/src/renderers/common/nodes/NodeBuilderState.js +10 -2
- package/src/renderers/common/nodes/NodeLibrary.js +4 -4
- package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +298 -106
- package/src/renderers/common/nodes/NodeStorageBuffer.js +13 -2
- package/src/renderers/common/nodes/NodeUniformBuffer.js +65 -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/common.glsl.js +13 -4
- package/src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl.js +0 -6
- package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +0 -1
- package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +9 -13
- package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/envmap_vertex.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 +3 -1
- 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_begin.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +7 -0
- package/src/renderers/shaders/ShaderChunk/normal_vertex.glsl.js +6 -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 +2 -2
- 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} +2 -3
- 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 +271 -0
- package/src/renderers/webgl/WebGLProgram.js +54 -113
- package/src/renderers/webgl/WebGLPrograms.js +74 -55
- package/src/renderers/webgl/WebGLRenderLists.js +24 -1
- package/src/renderers/webgl/WebGLRenderStates.js +13 -2
- package/src/renderers/webgl/WebGLShaderCache.js +5 -11
- package/src/renderers/webgl/WebGLShadowMap.js +188 -24
- package/src/renderers/webgl/WebGLState.js +75 -37
- package/src/renderers/webgl/WebGLTextures.js +230 -56
- package/src/renderers/webgl/WebGLUniforms.js +40 -3
- package/src/renderers/webgl/WebGLUniformsGroups.js +82 -35
- package/src/renderers/webgl/WebGLUtils.js +6 -2
- package/src/renderers/webgl-fallback/WebGLBackend.js +322 -92
- package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +0 -41
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +295 -66
- 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 +118 -73
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +10 -10
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +9 -3
- package/src/renderers/webgpu/WebGPUBackend.js +733 -302
- package/src/renderers/webgpu/WebGPURenderer.js +2 -1
- package/src/renderers/webgpu/descriptors/GPUBindGroupDescriptor.js +48 -0
- package/src/renderers/webgpu/descriptors/GPUBufferDescriptor.js +57 -0
- package/src/renderers/webgpu/descriptors/GPUCommandEncoderDescriptor.js +30 -0
- package/src/renderers/webgpu/descriptors/GPUComputePassDescriptor.js +38 -0
- package/src/renderers/webgpu/descriptors/GPUComputePipelineDescriptor.js +48 -0
- package/src/renderers/webgpu/descriptors/GPUCopyExternalImageDestInfo.js +47 -0
- package/src/renderers/webgpu/descriptors/GPUCopyExternalImageSourceInfo.js +50 -0
- package/src/renderers/webgpu/descriptors/GPUExtent3D.js +51 -0
- package/src/renderers/webgpu/descriptors/GPUPipelineLayoutDescriptor.js +39 -0
- package/src/renderers/webgpu/descriptors/GPUQuerySetDescriptor.js +47 -0
- package/src/renderers/webgpu/descriptors/GPURenderBundleEncoderDescriptor.js +74 -0
- package/src/renderers/webgpu/descriptors/GPURenderPassColorAttachment.js +72 -0
- package/src/renderers/webgpu/descriptors/GPURenderPassDepthStencilAttachment.js +99 -0
- package/src/renderers/webgpu/descriptors/GPURenderPassDescriptor.js +72 -0
- package/src/renderers/webgpu/descriptors/GPURenderPassTimestampWrites.js +49 -0
- package/src/renderers/webgpu/descriptors/GPURenderPipelineDescriptor.js +130 -0
- package/src/renderers/webgpu/descriptors/GPUSamplerDescriptor.js +119 -0
- package/src/renderers/webgpu/descriptors/GPUShaderModuleDescriptor.js +46 -0
- package/src/renderers/webgpu/descriptors/GPUTexelCopyBufferInfo.js +57 -0
- package/src/renderers/webgpu/descriptors/GPUTexelCopyBufferLayout.js +48 -0
- package/src/renderers/webgpu/descriptors/GPUTexelCopyTextureInfo.js +61 -0
- package/src/renderers/webgpu/descriptors/GPUTextureDescriptor.js +99 -0
- package/src/renderers/webgpu/descriptors/GPUTextureViewDescriptor.js +108 -0
- package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +0 -1
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +526 -93
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +1 -1
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +194 -61
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +395 -234
- 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 +224 -91
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +228 -213
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +428 -175
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +40 -25
- package/src/renderers/webgpu/utils/WebGPUUtils.js +70 -13
- 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/DepthTexture.js +1 -1
- package/src/textures/ExternalTexture.js +0 -3
- 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/fonts/LICENSE +0 -13
- package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
- package/examples/fonts/MPLUSRounded1c/OFL.txt +0 -91
- package/examples/fonts/README.md +0 -11
- package/examples/fonts/droid/NOTICE +0 -190
- package/examples/fonts/droid/README.txt +0 -18
- package/examples/fonts/droid/droid_sans_bold.typeface.json +0 -1
- package/examples/fonts/droid/droid_sans_mono_regular.typeface.json +0 -1
- package/examples/fonts/droid/droid_sans_regular.typeface.json +0 -1
- package/examples/fonts/droid/droid_serif_bold.typeface.json +0 -1
- package/examples/fonts/droid/droid_serif_regular.typeface.json +0 -1
- package/examples/fonts/gentilis_bold.typeface.json +0 -1
- package/examples/fonts/gentilis_regular.typeface.json +0 -1
- package/examples/fonts/helvetiker_bold.typeface.json +0 -1
- package/examples/fonts/helvetiker_regular.typeface.json +0 -1
- package/examples/fonts/optimer_bold.typeface.json +0 -1
- package/examples/fonts/optimer_regular.typeface.json +0 -1
- package/examples/fonts/ttf/README.md +0 -9
- package/examples/fonts/ttf/kenpixel.ttf +0 -0
- package/examples/jsm/libs/ammo.wasm.js +0 -822
- package/examples/jsm/libs/ammo.wasm.wasm +0 -0
- package/examples/jsm/libs/draco/draco_encoder.js +0 -33
- package/examples/jsm/libs/draco/gltf/draco_encoder.js +0 -33
- package/examples/jsm/libs/lottie_canvas.module.js +0 -14849
- package/examples/jsm/libs/opentype.module.js +0 -14506
- package/examples/jsm/libs/rhino3dm/rhino3dm.js +0 -21
- package/examples/jsm/libs/rhino3dm/rhino3dm.module.js +0 -16
- package/examples/jsm/libs/rhino3dm/rhino3dm.wasm +0 -0
- package/examples/jsm/lighting/TiledLighting.js +0 -42
- 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/examples/jsm/tsl/display/AnamorphicNode.js +0 -282
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +0 -442
- package/src/nodes/accessors/BatchNode.js +0 -163
- package/src/nodes/accessors/InstanceNode.js +0 -244
- package/src/nodes/accessors/InstancedMeshNode.js +0 -50
- package/src/nodes/accessors/SceneNode.js +0 -145
- package/src/nodes/accessors/SkinningNode.js +0 -327
- 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
|
@@ -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,9 +1,8 @@
|
|
|
1
|
-
import { AdditiveBlending, Color, Vector2,
|
|
2
|
-
import {
|
|
1
|
+
import { AdditiveBlending, Color, Vector2, PassNode, QuadMesh, NodeMaterial } from 'three/webgpu';
|
|
2
|
+
import { uniform, mrt, texture, getTextureIndex, unpremultiplyAlpha } from 'three/tsl';
|
|
3
3
|
|
|
4
4
|
const _size = /*@__PURE__*/ new Vector2();
|
|
5
|
-
|
|
6
|
-
let _rendererState;
|
|
5
|
+
const _clearColor = /*@__PURE__*/ new Color();
|
|
7
6
|
|
|
8
7
|
/**
|
|
9
8
|
* A special render pass node that renders the scene with SSAA (Supersampling Anti-Aliasing).
|
|
@@ -61,22 +60,6 @@ class SSAAPassNode extends PassNode {
|
|
|
61
60
|
*/
|
|
62
61
|
this.unbiased = true;
|
|
63
62
|
|
|
64
|
-
/**
|
|
65
|
-
* The clear color of the pass.
|
|
66
|
-
*
|
|
67
|
-
* @type {Color}
|
|
68
|
-
* @default 0x000000
|
|
69
|
-
*/
|
|
70
|
-
this.clearColor = new Color( 0x000000 );
|
|
71
|
-
|
|
72
|
-
/**
|
|
73
|
-
* The clear alpha of the pass.
|
|
74
|
-
*
|
|
75
|
-
* @type {number}
|
|
76
|
-
* @default 0
|
|
77
|
-
*/
|
|
78
|
-
this.clearAlpha = 0;
|
|
79
|
-
|
|
80
63
|
/**
|
|
81
64
|
* A uniform node representing the sample weight.
|
|
82
65
|
*
|
|
@@ -114,8 +97,6 @@ class SSAAPassNode extends PassNode {
|
|
|
114
97
|
const { renderer } = frame;
|
|
115
98
|
const { scene, camera } = this;
|
|
116
99
|
|
|
117
|
-
_rendererState = RendererUtils.resetRendererState( renderer, _rendererState );
|
|
118
|
-
|
|
119
100
|
//
|
|
120
101
|
|
|
121
102
|
this._pixelRatio = renderer.getPixelRatio();
|
|
@@ -130,6 +111,12 @@ class SSAAPassNode extends PassNode {
|
|
|
130
111
|
this._cameraNear.value = camera.near;
|
|
131
112
|
this._cameraFar.value = camera.far;
|
|
132
113
|
|
|
114
|
+
const currentRenderTarget = renderer.getRenderTarget();
|
|
115
|
+
const currentMRT = renderer.getMRT();
|
|
116
|
+
const currentAutoClear = renderer.autoClear;
|
|
117
|
+
const currentClearColor = renderer.getClearColor( _clearColor );
|
|
118
|
+
const currentClearAlpha = renderer.getClearAlpha();
|
|
119
|
+
|
|
133
120
|
renderer.setMRT( this.getMRT() );
|
|
134
121
|
renderer.autoClear = false;
|
|
135
122
|
|
|
@@ -186,7 +173,6 @@ class SSAAPassNode extends PassNode {
|
|
|
186
173
|
|
|
187
174
|
}
|
|
188
175
|
|
|
189
|
-
renderer.setClearColor( this.clearColor, this.clearAlpha );
|
|
190
176
|
renderer.setRenderTarget( this._sampleRenderTarget );
|
|
191
177
|
renderer.clear();
|
|
192
178
|
renderer.render( scene, camera );
|
|
@@ -200,6 +186,8 @@ class SSAAPassNode extends PassNode {
|
|
|
200
186
|
renderer.setClearColor( 0x000000, 0.0 );
|
|
201
187
|
renderer.clear();
|
|
202
188
|
|
|
189
|
+
renderer.setClearColor( currentClearColor, currentClearAlpha );
|
|
190
|
+
|
|
203
191
|
}
|
|
204
192
|
|
|
205
193
|
this._quadMesh.render( renderer );
|
|
@@ -228,9 +216,9 @@ class SSAAPassNode extends PassNode {
|
|
|
228
216
|
|
|
229
217
|
}
|
|
230
218
|
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
219
|
+
renderer.setRenderTarget( currentRenderTarget );
|
|
220
|
+
renderer.setMRT( currentMRT );
|
|
221
|
+
renderer.autoClear = currentAutoClear;
|
|
234
222
|
|
|
235
223
|
}
|
|
236
224
|
|
|
@@ -355,4 +343,4 @@ const _JitterVectors = [
|
|
|
355
343
|
* @param {Camera} camera - The camera to render the scene with.
|
|
356
344
|
* @returns {SSAAPassNode}
|
|
357
345
|
*/
|
|
358
|
-
export const ssaaPass = ( scene, camera ) =>
|
|
346
|
+
export const ssaaPass = ( scene, camera ) => new SSAAPassNode( scene, camera );
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { RenderTarget, Vector2, TempNode, QuadMesh, NodeMaterial, RendererUtils, MathUtils } from 'three/webgpu';
|
|
2
|
-
import { clamp, normalize, reference,
|
|
1
|
+
import { RenderTarget, Vector2, TempNode, QuadMesh, NodeMaterial, RendererUtils, MathUtils, RGBFormat, RedFormat, UnsignedInt101111Type, UnsignedByteType } from 'three/webgpu';
|
|
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, property, outputStruct } from 'three/tsl';
|
|
3
3
|
|
|
4
4
|
const _quadMesh = /*@__PURE__*/ new QuadMesh();
|
|
5
5
|
const _size = /*@__PURE__*/ new Vector2();
|
|
@@ -139,7 +139,7 @@ class SSGINode extends TempNode {
|
|
|
139
139
|
* Makes the sample distance in screen space instead of world-space (helps having more detail up close).
|
|
140
140
|
*
|
|
141
141
|
* @type {UniformNode<bool>}
|
|
142
|
-
* @default
|
|
142
|
+
* @default true
|
|
143
143
|
*/
|
|
144
144
|
this.useScreenSpaceSampling = uniform( true, 'bool' );
|
|
145
145
|
|
|
@@ -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 );
|
|
@@ -263,13 +267,23 @@ class SSGINode extends TempNode {
|
|
|
263
267
|
this._camera = camera;
|
|
264
268
|
|
|
265
269
|
/**
|
|
266
|
-
* The render target the
|
|
270
|
+
* The render target the effect is rendered into. The first texture holds the GI,
|
|
271
|
+
* the second one the AO.
|
|
267
272
|
*
|
|
268
273
|
* @private
|
|
269
274
|
* @type {RenderTarget}
|
|
270
275
|
*/
|
|
271
|
-
this._ssgiRenderTarget = new RenderTarget( 1, 1, { depthBuffer: false } );
|
|
272
|
-
|
|
276
|
+
this._ssgiRenderTarget = new RenderTarget( 1, 1, { depthBuffer: false, count: 2 } );
|
|
277
|
+
|
|
278
|
+
const aoTexture = this._ssgiRenderTarget.textures[ 0 ];
|
|
279
|
+
aoTexture.name = 'SSGI.AO';
|
|
280
|
+
aoTexture.type = UnsignedByteType;
|
|
281
|
+
aoTexture.format = RedFormat;
|
|
282
|
+
|
|
283
|
+
const giTexture = this._ssgiRenderTarget.textures[ 1 ];
|
|
284
|
+
giTexture.name = 'SSGI.GI';
|
|
285
|
+
giTexture.type = UnsignedInt101111Type;
|
|
286
|
+
giTexture.format = RGBFormat;
|
|
273
287
|
|
|
274
288
|
/**
|
|
275
289
|
* The material that is used to render the effect.
|
|
@@ -281,23 +295,42 @@ class SSGINode extends TempNode {
|
|
|
281
295
|
this._material.name = 'SSGI';
|
|
282
296
|
|
|
283
297
|
/**
|
|
284
|
-
* The result of the effect is represented as a separate texture node.
|
|
298
|
+
* The AO result of the effect is represented as a separate texture node.
|
|
285
299
|
*
|
|
286
300
|
* @private
|
|
287
301
|
* @type {PassTextureNode}
|
|
288
302
|
*/
|
|
289
|
-
this.
|
|
303
|
+
this._aoNode = passTexture( this, this._ssgiRenderTarget.textures[ 0 ] );
|
|
304
|
+
|
|
305
|
+
/**
|
|
306
|
+
* The GI result of the effect is represented as a separate texture node.
|
|
307
|
+
*
|
|
308
|
+
* @private
|
|
309
|
+
* @type {PassTextureNode}
|
|
310
|
+
*/
|
|
311
|
+
this._giNode = passTexture( this, this._ssgiRenderTarget.textures[ 1 ] );
|
|
290
312
|
|
|
291
313
|
}
|
|
292
314
|
|
|
293
315
|
/**
|
|
294
|
-
* Returns the result of the effect as a texture node.
|
|
316
|
+
* Returns the AO result of the effect as a texture node.
|
|
295
317
|
*
|
|
296
|
-
* @return {PassTextureNode} A texture node that represents the result of the effect.
|
|
318
|
+
* @return {PassTextureNode} A texture node that represents the AO result of the effect.
|
|
297
319
|
*/
|
|
298
|
-
|
|
320
|
+
getAONode() {
|
|
299
321
|
|
|
300
|
-
return this.
|
|
322
|
+
return this._aoNode;
|
|
323
|
+
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
/**
|
|
327
|
+
* Returns the GI result of the effect as a texture node.
|
|
328
|
+
*
|
|
329
|
+
* @return {PassTextureNode} A texture node that represents the GI result of the effect.
|
|
330
|
+
*/
|
|
331
|
+
getGINode() {
|
|
332
|
+
|
|
333
|
+
return this._giNode;
|
|
301
334
|
|
|
302
335
|
}
|
|
303
336
|
|
|
@@ -353,9 +386,9 @@ class SSGINode extends TempNode {
|
|
|
353
386
|
_quadMesh.material = this._material;
|
|
354
387
|
_quadMesh.name = 'SSGI';
|
|
355
388
|
|
|
356
|
-
// clear
|
|
389
|
+
// clear (white for the AO attachement)
|
|
357
390
|
|
|
358
|
-
renderer.setClearColor(
|
|
391
|
+
renderer.setClearColor( 0xffffff, 1 );
|
|
359
392
|
|
|
360
393
|
// gi
|
|
361
394
|
|
|
@@ -376,6 +409,14 @@ class SSGINode extends TempNode {
|
|
|
376
409
|
*/
|
|
377
410
|
setup( builder ) {
|
|
378
411
|
|
|
412
|
+
const renderer = builder.renderer;
|
|
413
|
+
|
|
414
|
+
if ( renderer.backend.isWebGPUBackend === true && renderer.hasFeature( 'rg11b10ufloat-renderable' ) === false ) {
|
|
415
|
+
|
|
416
|
+
console.error( 'THREE.SSGINode: The device does not support the "rg11b10ufloat-renderable" feature which is required for SSGI.' );
|
|
417
|
+
|
|
418
|
+
}
|
|
419
|
+
|
|
379
420
|
const uvNode = uv();
|
|
380
421
|
const MAX_RAY = uint( 32 );
|
|
381
422
|
const globalOccludedBitfield = uint( 0 );
|
|
@@ -431,50 +472,18 @@ class SSGINode extends TempNode {
|
|
|
431
472
|
]
|
|
432
473
|
} );
|
|
433
474
|
|
|
434
|
-
const
|
|
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
|
-
const horizonSampling = Fn( ( [ directionIsRight, RADIUS, viewPosition, slideDirTexelSize, initialRayStep, uvNode, viewDir, viewNormal, n ] ) => {
|
|
475
|
+
const horizonSampling = Fn( ( [ directionIsRight, stepRadius, radiusVS, viewPosition, slideDirTexelSize, initialRayStep, uvNode, viewDir, viewNormal, n ] ) => {
|
|
451
476
|
|
|
452
477
|
const STEP_COUNT = this.stepCount.toConst();
|
|
453
478
|
const EXP_FACTOR = this.expFactor.toConst();
|
|
454
479
|
const THICKNESS = this.thickness.toConst();
|
|
455
480
|
const BACKFACE_LIGHTING = this.backfaceLighting.toConst();
|
|
456
481
|
|
|
457
|
-
const
|
|
458
|
-
|
|
459
|
-
If( this.useScreenSpaceSampling.equal( true ), () => {
|
|
460
|
-
|
|
461
|
-
stepRadius.assign( RADIUS.mul( this._resolution.x.div( 2 ) ).div( float( 16 ) ) ); // SSRT3 has a bug where stepRadius is divided by STEP_COUNT twice; fix here
|
|
462
|
-
|
|
463
|
-
} ).Else( () => {
|
|
464
|
-
|
|
465
|
-
stepRadius.assign( max( RADIUS.mul( this._halfProjScale ).div( viewPosition.z.negate() ), float( STEP_COUNT ) ) ); // Port note: viewZ is negative so a negate is required
|
|
466
|
-
|
|
467
|
-
} );
|
|
468
|
-
|
|
469
|
-
stepRadius.divAssign( float( STEP_COUNT ).add( 1 ) );
|
|
470
|
-
const radiusVS = max( 1, float( STEP_COUNT.sub( 1 ) ) ).mul( stepRadius );
|
|
471
|
-
const uvDirection = directionIsRight.equal( true ).select( vec2( 1, - 1 ), vec2( - 1, 1 ) ); // Port note: Because of different uv conventions, uv-y has a different sign
|
|
472
|
-
const samplingDirection = directionIsRight.equal( true ).select( 1, - 1 );
|
|
482
|
+
const uvDirection = directionIsRight.select( vec2( 1, - 1 ), vec2( - 1, 1 ) ); // Port note: Because of different uv conventions, uv-y has a different sign
|
|
483
|
+
const samplingDirection = directionIsRight.select( 1, - 1 );
|
|
473
484
|
|
|
474
485
|
const color = vec3( 0 );
|
|
475
486
|
|
|
476
|
-
const lastSampleViewPosition = vec3( viewPosition ).toVar();
|
|
477
|
-
|
|
478
487
|
Loop( { start: uint( 0 ), end: STEP_COUNT, type: 'uint', condition: '<' }, ( { i } ) => {
|
|
479
488
|
|
|
480
489
|
const offset = pow( abs( mul( stepRadius, float( i ).add( initialRayStep ) ).div( radiusVS ) ), EXP_FACTOR ).mul( radiusVS ).toConst();
|
|
@@ -489,13 +498,13 @@ class SSGINode extends TempNode {
|
|
|
489
498
|
|
|
490
499
|
const sampleViewPosition = getViewPosition( sampleUV, sampleDepth( sampleUV ), this._cameraProjectionMatrixInverse ).toConst();
|
|
491
500
|
const pixelToSample = sampleViewPosition.sub( viewPosition ).normalize().toConst();
|
|
492
|
-
const linearThicknessMultiplier = this.useLinearThickness.
|
|
501
|
+
const linearThicknessMultiplier = this.useLinearThickness.select( sampleViewPosition.z.negate().div( this._cameraFar ).clamp().mul( 100 ), float( 1 ) );
|
|
493
502
|
const pixelToSampleBackface = normalize( sampleViewPosition.sub( linearThicknessMultiplier.mul( viewDir ).mul( THICKNESS ) ).sub( viewPosition ) );
|
|
494
503
|
|
|
495
504
|
let frontBackHorizon = vec2( dot( pixelToSample, viewDir ), dot( pixelToSampleBackface, viewDir ) );
|
|
496
505
|
frontBackHorizon = GTAOFastAcos( clamp( frontBackHorizon, - 1, 1 ) );
|
|
497
506
|
frontBackHorizon = clamp( div( mul( samplingDirection, frontBackHorizon.negate() ).sub( n.sub( HALF_PI ) ), PI ) ); // Port note: subtract half pi instead of adding it
|
|
498
|
-
frontBackHorizon = directionIsRight.
|
|
507
|
+
frontBackHorizon = directionIsRight.select( frontBackHorizon.yx, frontBackHorizon.xy ); // Front/Back get inverted depending on angle
|
|
499
508
|
|
|
500
509
|
// inline ComputeOccludedBitfield() for easier debugging
|
|
501
510
|
|
|
@@ -509,7 +518,7 @@ class SSGINode extends TempNode {
|
|
|
509
518
|
currentOccludedBitfield = currentOccludedBitfield.bitAnd( globalOccludedBitfield.bitNot() );
|
|
510
519
|
|
|
511
520
|
globalOccludedBitfield.assign( globalOccludedBitfield.bitOr( currentOccludedBitfield ) );
|
|
512
|
-
const numOccludedZones =
|
|
521
|
+
const numOccludedZones = countOneBits( currentOccludedBitfield );
|
|
513
522
|
|
|
514
523
|
//
|
|
515
524
|
|
|
@@ -541,14 +550,17 @@ class SSGINode extends TempNode {
|
|
|
541
550
|
|
|
542
551
|
} );
|
|
543
552
|
|
|
544
|
-
lastSampleViewPosition.assign( sampleViewPosition );
|
|
545
|
-
|
|
546
553
|
} );
|
|
547
554
|
|
|
548
|
-
return
|
|
555
|
+
return color;
|
|
549
556
|
|
|
550
557
|
} );
|
|
551
558
|
|
|
559
|
+
const aoField = property( 'float' );
|
|
560
|
+
const giField = property( 'vec3' );
|
|
561
|
+
|
|
562
|
+
const outputNode = outputStruct( aoField, giField );
|
|
563
|
+
|
|
552
564
|
const gi = Fn( () => {
|
|
553
565
|
|
|
554
566
|
const depth = sampleDepth( uvNode ).toVar();
|
|
@@ -570,10 +582,28 @@ class SSGINode extends TempNode {
|
|
|
570
582
|
const color = vec3( 0 );
|
|
571
583
|
|
|
572
584
|
const ROTATION_COUNT = this.sliceCount.toConst();
|
|
585
|
+
const STEP_COUNT = this.stepCount.toConst();
|
|
573
586
|
const AO_INTENSITY = this.aoIntensity.toConst();
|
|
574
587
|
const GI_INTENSITY = this.giIntensity.toConst();
|
|
575
588
|
const RADIUS = this.radius.toConst();
|
|
576
589
|
|
|
590
|
+
const stepRadius = float( 0 ).toVar();
|
|
591
|
+
|
|
592
|
+
If( this.useScreenSpaceSampling, () => {
|
|
593
|
+
|
|
594
|
+
stepRadius.assign( RADIUS.mul( this._resolution.x.div( 2 ) ).div( float( 16 ) ) ); // SSRT3 has a bug where stepRadius is divided by STEP_COUNT twice; fix here
|
|
595
|
+
|
|
596
|
+
} ).Else( () => {
|
|
597
|
+
|
|
598
|
+
stepRadius.assign( max( RADIUS.mul( this._halfProjScale ).div( viewPosition.z.negate() ), float( STEP_COUNT ) ) ); // Port note: viewZ is negative so a negate is required
|
|
599
|
+
|
|
600
|
+
} );
|
|
601
|
+
|
|
602
|
+
stepRadius.divAssign( float( STEP_COUNT ).add( 1 ) );
|
|
603
|
+
const radiusVS = max( 1, float( STEP_COUNT.sub( 1 ) ) ).mul( stepRadius ).toConst();
|
|
604
|
+
|
|
605
|
+
//
|
|
606
|
+
|
|
577
607
|
Loop( { start: uint( 0 ), end: ROTATION_COUNT, type: 'uint', condition: '<' }, ( { i } ) => {
|
|
578
608
|
|
|
579
609
|
const rotationAngle = mul( float( i ).add( noiseDirection ).add( this._temporalDirection ), PI.div( float( ROTATION_COUNT ) ) ).toConst();
|
|
@@ -590,10 +620,10 @@ class SSGINode extends TempNode {
|
|
|
590
620
|
|
|
591
621
|
globalOccludedBitfield.assign( 0 );
|
|
592
622
|
|
|
593
|
-
color.addAssign( horizonSampling( bool( true ),
|
|
594
|
-
color.addAssign( horizonSampling( bool( false ),
|
|
623
|
+
color.addAssign( horizonSampling( bool( true ), stepRadius, radiusVS, viewPosition, slideDirTexelSize, initialRayStep, uvNode, viewDir, viewNormal, n ) );
|
|
624
|
+
color.addAssign( horizonSampling( bool( false ), stepRadius, radiusVS, viewPosition, slideDirTexelSize, initialRayStep, uvNode, viewDir, viewNormal, n ) );
|
|
595
625
|
|
|
596
|
-
ao.addAssign( float(
|
|
626
|
+
ao.addAssign( float( countOneBits( globalOccludedBitfield ) ).div( float( MAX_RAY ) ) );
|
|
597
627
|
|
|
598
628
|
} );
|
|
599
629
|
|
|
@@ -611,16 +641,20 @@ class SSGINode extends TempNode {
|
|
|
611
641
|
const scale = currentLuminance.greaterThan( maxLuminance ).select( maxLuminance.div( currentLuminance ), float( 1 ) );
|
|
612
642
|
color.mulAssign( scale );
|
|
613
643
|
|
|
614
|
-
|
|
644
|
+
aoField.assign( ao );
|
|
645
|
+
giField.assign( color );
|
|
646
|
+
|
|
647
|
+
return vec4( 0 );
|
|
615
648
|
|
|
616
649
|
} );
|
|
617
650
|
|
|
618
|
-
this._material.
|
|
651
|
+
this._material.colorNode = gi().context( builder.getSharedContext() );
|
|
652
|
+
this._material.outputNode = outputNode;
|
|
619
653
|
this._material.needsUpdate = true;
|
|
620
654
|
|
|
621
655
|
//
|
|
622
656
|
|
|
623
|
-
return this.
|
|
657
|
+
return this._aoNode;
|
|
624
658
|
|
|
625
659
|
}
|
|
626
660
|
|
|
@@ -651,4 +685,4 @@ export default SSGINode;
|
|
|
651
685
|
* @param {Camera} camera - The camera the scene is rendered with.
|
|
652
686
|
* @returns {SSGINode}
|
|
653
687
|
*/
|
|
654
|
-
export const ssgi = ( beautyNode, depthNode, normalNode, camera ) =>
|
|
688
|
+
export const ssgi = ( beautyNode, depthNode, normalNode, camera ) => new SSGINode( convertToTexture( beautyNode ), depthNode, normalNode, camera );
|