@plastic-software/three 0.180.0 → 0.181.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/three.cjs +944 -487
- package/build/three.core.js +506 -327
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +436 -164
- package/build/three.module.min.js +1 -1
- package/build/three.tsl.js +8 -2
- package/build/three.tsl.min.js +1 -1
- package/build/three.webgpu.js +3753 -1177
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +3752 -1176
- package/build/three.webgpu.nodes.min.js +1 -1
- package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
- package/examples/fonts/MPLUSRounded1c/OFL.txt +91 -0
- package/examples/jsm/animation/CCDIKSolver.js +1 -1
- package/examples/jsm/controls/ArcballControls.js +1 -1
- package/examples/jsm/controls/DragControls.js +1 -1
- package/examples/jsm/controls/FirstPersonControls.js +1 -1
- package/examples/jsm/controls/FlyControls.js +1 -1
- package/examples/jsm/controls/OrbitControls.js +2 -2
- package/examples/jsm/controls/PointerLockControls.js +2 -2
- package/examples/jsm/controls/TrackballControls.js +1 -1
- package/examples/jsm/controls/TransformControls.js +1 -1
- package/examples/jsm/effects/AsciiEffect.js +8 -8
- package/examples/jsm/exporters/DRACOExporter.js +2 -2
- package/examples/jsm/exporters/EXRExporter.js +1 -1
- package/examples/jsm/exporters/GLTFExporter.js +3 -3
- package/examples/jsm/exporters/USDZExporter.js +9 -2
- package/examples/jsm/geometries/DecalGeometry.js +2 -2
- package/examples/jsm/geometries/ParametricGeometry.js +1 -1
- package/examples/jsm/geometries/TeapotGeometry.js +2 -2
- package/examples/jsm/geometries/TextGeometry.js +3 -2
- package/examples/jsm/gpgpu/BitonicSort.js +715 -0
- package/examples/jsm/helpers/ViewHelper.js +43 -5
- package/examples/jsm/inspector/Inspector.js +427 -0
- package/examples/jsm/inspector/RendererInspector.js +415 -0
- package/examples/jsm/inspector/tabs/Console.js +204 -0
- package/examples/jsm/inspector/tabs/Parameters.js +332 -0
- package/examples/jsm/inspector/tabs/Performance.js +268 -0
- package/examples/jsm/inspector/tabs/Viewer.js +166 -0
- package/examples/jsm/inspector/ui/Graph.js +95 -0
- package/examples/jsm/inspector/ui/Item.js +170 -0
- package/examples/jsm/inspector/ui/List.js +75 -0
- package/examples/jsm/inspector/ui/Profiler.js +170 -0
- package/examples/jsm/inspector/ui/Style.js +654 -0
- package/examples/jsm/inspector/ui/Tab.js +46 -0
- package/examples/jsm/inspector/ui/Values.js +423 -0
- package/examples/jsm/inspector/ui/utils.js +56 -0
- package/examples/jsm/interactive/HTMLMesh.js +6 -10
- package/examples/jsm/interactive/InteractiveGroup.js +1 -1
- package/examples/jsm/interactive/SelectionBox.js +30 -0
- package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -1
- package/examples/jsm/loaders/3MFLoader.js +1 -1
- package/examples/jsm/loaders/ColladaLoader.js +2 -2
- package/examples/jsm/loaders/DDSLoader.js +1 -1
- package/examples/jsm/loaders/DRACOLoader.js +73 -22
- package/examples/jsm/loaders/FBXLoader.js +2 -2
- package/examples/jsm/loaders/FontLoader.js +23 -5
- package/examples/jsm/loaders/GLTFLoader.js +5 -3
- package/examples/jsm/loaders/KTX2Loader.js +28 -21
- package/examples/jsm/loaders/KTXLoader.js +2 -2
- package/examples/jsm/loaders/LDrawLoader.js +1 -1
- package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
- package/examples/jsm/loaders/LUTCubeLoader.js +1 -1
- package/examples/jsm/loaders/LWOLoader.js +2 -2
- package/examples/jsm/loaders/MaterialXLoader.js +22 -5
- package/examples/jsm/loaders/OBJLoader.js +1 -1
- package/examples/jsm/loaders/PDBLoader.js +1 -1
- package/examples/jsm/loaders/SVGLoader.js +2 -2
- package/examples/jsm/loaders/UltraHDRLoader.js +1 -1
- package/examples/jsm/math/ConvexHull.js +1 -1
- package/examples/jsm/math/ImprovedNoise.js +1 -1
- package/examples/jsm/math/SimplexNoise.js +1 -1
- package/examples/jsm/misc/ProgressiveLightMap.js +9 -3
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +7 -1
- package/examples/jsm/misc/TubePainter.js +383 -40
- package/examples/jsm/modifiers/SimplifyModifier.js +1 -1
- package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
- package/examples/jsm/objects/Sky.js +1 -1
- package/examples/jsm/objects/SkyMesh.js +1 -1
- package/examples/jsm/objects/Water.js +3 -3
- package/examples/jsm/objects/WaterMesh.js +6 -6
- package/examples/jsm/postprocessing/GlitchPass.js +2 -2
- package/examples/jsm/postprocessing/UnrealBloomPass.js +8 -6
- package/examples/jsm/renderers/CSS2DRenderer.js +16 -5
- package/examples/jsm/renderers/CSS3DRenderer.js +7 -6
- package/examples/jsm/renderers/SVGRenderer.js +1 -1
- package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +1 -1
- package/examples/jsm/shaders/AfterimageShader.js +1 -1
- package/examples/jsm/shaders/BleachBypassShader.js +1 -1
- package/examples/jsm/shaders/BokehShader.js +1 -1
- package/examples/jsm/shaders/BokehShader2.js +1 -1
- package/examples/jsm/shaders/DotScreenShader.js +1 -1
- package/examples/jsm/shaders/FocusShader.js +1 -1
- package/examples/jsm/shaders/GTAOShader.js +2 -2
- package/examples/jsm/shaders/GodRaysShader.js +1 -1
- package/examples/jsm/shaders/KaleidoShader.js +1 -1
- package/examples/jsm/shaders/PoissonDenoiseShader.js +2 -2
- package/examples/jsm/shaders/SSRShader.js +1 -1
- package/examples/jsm/shaders/SepiaShader.js +1 -1
- package/examples/jsm/shaders/SubsurfaceScatteringShader.js +1 -1
- package/examples/jsm/shaders/TriangleBlurShader.js +1 -1
- package/examples/jsm/shaders/VignetteShader.js +1 -1
- package/examples/jsm/transpiler/TSLEncoder.js +7 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +26 -24
- package/examples/jsm/tsl/display/AnamorphicNode.js +2 -1
- package/examples/jsm/tsl/display/BloomNode.js +4 -0
- package/examples/jsm/tsl/display/DenoiseNode.js +2 -0
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +7 -0
- package/examples/jsm/tsl/display/GTAONode.js +45 -5
- package/examples/jsm/tsl/display/GaussianBlurNode.js +5 -3
- package/examples/jsm/tsl/display/OutlineNode.js +11 -0
- package/examples/jsm/tsl/display/SSGINode.js +654 -0
- package/examples/jsm/tsl/display/SSRNode.js +2 -0
- package/examples/jsm/tsl/display/SSSNode.js +488 -0
- package/examples/jsm/tsl/display/TRAANode.js +123 -6
- package/examples/jsm/tsl/display/boxBlur.js +1 -0
- package/examples/jsm/tsl/display/hashBlur.js +1 -0
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +21 -1
- package/examples/jsm/webxr/XRControllerModelFactory.js +1 -1
- package/examples/jsm/webxr/XRHandModelFactory.js +2 -6
- package/package.json +5 -10
- package/src/Three.Core.js +3 -2
- package/src/Three.TSL.js +7 -1
- package/src/Three.WebGPU.Nodes.js +2 -0
- package/src/Three.WebGPU.js +2 -0
- package/src/animation/AnimationClip.js +3 -2
- package/src/animation/AnimationMixer.js +3 -3
- package/src/animation/AnimationObjectGroup.js +2 -1
- package/src/animation/KeyframeTrack.js +7 -6
- package/src/animation/PropertyBinding.js +12 -11
- package/src/audio/Audio.js +10 -9
- package/src/audio/PositionalAudio.js +1 -1
- package/src/cameras/OrthographicCamera.js +1 -1
- package/src/cameras/PerspectiveCamera.js +1 -1
- package/src/cameras/StereoCamera.js +2 -2
- package/src/constants.js +1 -1
- package/src/core/BufferGeometry.js +8 -8
- package/src/core/EventDispatcher.js +1 -1
- package/src/core/InterleavedBuffer.js +1 -1
- package/src/core/InterleavedBufferAttribute.js +3 -2
- package/src/core/Object3D.js +3 -2
- package/src/core/Raycaster.js +2 -1
- package/src/core/RenderTarget.js +10 -1
- package/src/extras/Controls.js +5 -4
- package/src/extras/DataUtils.js +2 -1
- package/src/extras/Earcut.js +6 -0
- package/src/extras/ImageUtils.js +2 -2
- package/src/extras/PMREMGenerator.js +268 -55
- package/src/extras/core/Curve.js +2 -1
- package/src/extras/core/Interpolations.js +7 -1
- package/src/extras/core/ShapePath.js +4 -4
- package/src/extras/lib/earcut.js +7 -7
- package/src/geometries/BoxGeometry.js +1 -0
- package/src/geometries/CapsuleGeometry.js +1 -0
- package/src/geometries/CircleGeometry.js +1 -0
- package/src/geometries/ConeGeometry.js +1 -0
- package/src/geometries/CylinderGeometry.js +1 -0
- package/src/geometries/DodecahedronGeometry.js +1 -0
- package/src/geometries/ExtrudeGeometry.js +8 -6
- package/src/geometries/IcosahedronGeometry.js +1 -0
- package/src/geometries/LatheGeometry.js +1 -0
- package/src/geometries/OctahedronGeometry.js +1 -0
- package/src/geometries/PlaneGeometry.js +1 -0
- package/src/geometries/RingGeometry.js +1 -0
- package/src/geometries/ShapeGeometry.js +1 -0
- package/src/geometries/SphereGeometry.js +1 -0
- package/src/geometries/TetrahedronGeometry.js +1 -0
- package/src/geometries/TorusGeometry.js +1 -0
- package/src/geometries/TorusKnotGeometry.js +1 -0
- package/src/geometries/TubeGeometry.js +1 -0
- package/src/helpers/CameraHelper.js +1 -1
- package/src/loaders/AnimationLoader.js +2 -1
- package/src/loaders/AudioLoader.js +2 -1
- package/src/loaders/BufferGeometryLoader.js +2 -2
- package/src/loaders/Cache.js +2 -2
- package/src/loaders/DataTextureLoader.js +1 -1
- package/src/loaders/FileLoader.js +3 -2
- package/src/loaders/ImageBitmapLoader.js +5 -4
- package/src/loaders/ImageLoader.js +1 -1
- package/src/loaders/Loader.js +3 -3
- package/src/loaders/LoadingManager.js +25 -3
- package/src/loaders/MaterialLoader.js +3 -2
- package/src/loaders/ObjectLoader.js +13 -13
- package/src/loaders/TextureLoader.js +1 -1
- package/src/loaders/nodes/NodeLoader.js +3 -2
- package/src/materials/Material.js +4 -3
- package/src/materials/MeshBasicMaterial.js +1 -0
- package/src/materials/MeshDepthMaterial.js +1 -0
- package/src/materials/MeshLambertMaterial.js +2 -1
- package/src/materials/MeshMatcapMaterial.js +22 -0
- package/src/materials/MeshNormalMaterial.js +1 -0
- package/src/materials/MeshPhongMaterial.js +2 -1
- package/src/materials/MeshPhysicalMaterial.js +2 -1
- package/src/materials/MeshStandardMaterial.js +8 -7
- package/src/materials/MeshToonMaterial.js +1 -0
- package/src/materials/PointsMaterial.js +1 -1
- package/src/materials/ShaderMaterial.js +2 -2
- package/src/materials/nodes/Line2NodeMaterial.js +2 -2
- package/src/materials/nodes/MeshSSSNodeMaterial.js +1 -1
- package/src/materials/nodes/NodeMaterial.js +62 -22
- package/src/materials/nodes/manager/NodeMaterialObserver.js +2 -1
- package/src/math/Color.js +6 -5
- package/src/math/ColorManagement.js +2 -2
- package/src/math/Cylindrical.js +1 -1
- package/src/math/Euler.js +2 -1
- package/src/math/MathUtils.js +13 -11
- package/src/math/Matrix2.js +1 -1
- package/src/math/Matrix3.js +2 -2
- package/src/math/Matrix4.js +7 -7
- package/src/math/Plane.js +1 -1
- package/src/math/Quaternion.js +68 -66
- package/src/math/Spherical.js +1 -1
- package/src/nodes/Nodes.js +1 -1
- package/src/nodes/TSL.js +1 -1
- package/src/nodes/accessors/CubeTextureNode.js +3 -2
- package/src/nodes/accessors/InstanceNode.js +22 -4
- package/src/nodes/accessors/Lights.js +10 -0
- package/src/nodes/accessors/Normal.js +5 -4
- package/src/nodes/accessors/Position.js +18 -2
- package/src/nodes/accessors/ReferenceNode.js +2 -1
- package/src/nodes/accessors/SceneNode.js +2 -1
- package/src/nodes/accessors/StorageBufferNode.js +2 -1
- package/src/nodes/accessors/StorageTextureNode.js +22 -0
- package/src/nodes/accessors/Texture3DNode.js +1 -1
- package/src/nodes/accessors/TextureNode.js +61 -27
- package/src/nodes/code/FunctionCallNode.js +5 -4
- package/src/nodes/core/ArrayNode.js +1 -0
- package/src/nodes/core/AttributeNode.js +2 -1
- package/src/nodes/core/ContextNode.js +5 -10
- package/src/nodes/core/IndexNode.js +2 -2
- package/src/nodes/core/InputNode.js +2 -1
- package/src/nodes/core/InspectorNode.js +128 -0
- package/src/nodes/core/{CacheNode.js → IsolateNode.js} +40 -7
- package/src/nodes/core/Node.js +137 -12
- package/src/nodes/core/NodeBuilder.js +135 -21
- package/src/nodes/core/NodeFrame.js +20 -20
- package/src/nodes/core/NodeFunction.js +2 -1
- package/src/nodes/core/NodeParser.js +2 -1
- package/src/nodes/core/NodeUtils.js +17 -90
- package/src/nodes/core/ParameterNode.js +31 -0
- package/src/nodes/core/PropertyNode.js +7 -0
- package/src/nodes/core/StackNode.js +16 -14
- package/src/nodes/core/UniformNode.js +2 -1
- package/src/nodes/core/VarNode.js +70 -12
- package/src/nodes/core/VaryingNode.js +3 -2
- package/src/nodes/display/BlendModes.js +5 -4
- package/src/nodes/display/BumpMapNode.js +1 -1
- package/src/nodes/display/ColorAdjustment.js +1 -1
- package/src/nodes/display/NormalMapNode.js +2 -1
- package/src/nodes/display/PassNode.js +51 -10
- package/src/nodes/display/RenderOutputNode.js +28 -2
- package/src/nodes/display/ScreenNode.js +2 -1
- package/src/nodes/display/ToneMappingNode.js +31 -4
- package/src/nodes/display/ToonOutlinePassNode.js +8 -0
- package/src/nodes/fog/Fog.js +3 -2
- package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +52 -0
- package/src/nodes/functions/BSDF/DFGApprox.js +60 -19
- package/src/nodes/functions/BasicLightingModel.js +2 -1
- package/src/nodes/functions/PhysicalLightingModel.js +3 -2
- package/src/nodes/functions/VolumetricLightingModel.js +5 -5
- package/src/nodes/geometry/RangeNode.js +40 -4
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -1
- package/src/nodes/gpgpu/ComputeNode.js +17 -5
- package/src/nodes/gpgpu/SubgroupFunctionNode.js +25 -0
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +2 -1
- package/src/nodes/lighting/EnvironmentNode.js +6 -6
- package/src/nodes/lighting/LightsNode.js +2 -3
- package/src/nodes/lighting/PointShadowNode.js +6 -0
- package/src/nodes/lighting/ShadowFilterNode.js +2 -0
- package/src/nodes/lighting/ShadowNode.js +75 -8
- package/src/nodes/math/ConditionalNode.js +6 -5
- package/src/nodes/math/MathNode.js +22 -4
- package/src/nodes/math/OperatorNode.js +3 -2
- package/src/nodes/pmrem/PMREMUtils.js +117 -2
- package/src/nodes/shapes/Shapes.js +1 -1
- package/src/nodes/tsl/TSLBase.js +5 -2
- package/src/nodes/tsl/TSLCore.js +36 -15
- package/src/nodes/utils/DebugNode.js +2 -1
- package/src/nodes/utils/EventNode.js +36 -0
- package/src/nodes/utils/FunctionOverloadingNode.js +37 -19
- package/src/nodes/utils/JoinNode.js +3 -2
- package/src/nodes/utils/LoopNode.js +20 -24
- package/src/nodes/utils/MemberNode.js +2 -1
- package/src/nodes/utils/PostProcessingUtils.js +28 -1
- package/src/nodes/utils/RTTNode.js +12 -2
- package/src/nodes/utils/ReflectorNode.js +10 -3
- package/src/objects/Line.js +2 -1
- package/src/objects/LineSegments.js +2 -1
- package/src/objects/Skeleton.js +3 -2
- package/src/objects/SkinnedMesh.js +3 -1
- package/src/objects/Sprite.js +2 -1
- package/src/renderers/WebGLRenderer.js +49 -33
- package/src/renderers/common/Animation.js +13 -1
- package/src/renderers/common/Backend.js +93 -30
- package/src/renderers/common/Background.js +2 -1
- package/src/renderers/common/Bindings.js +56 -2
- package/src/renderers/common/CanvasTarget.js +341 -0
- package/src/renderers/common/Geometries.js +26 -0
- package/src/renderers/common/Info.js +4 -2
- package/src/renderers/common/InspectorBase.js +146 -0
- package/src/renderers/common/PostProcessing.js +6 -25
- package/src/renderers/common/QuadMesh.js +7 -1
- package/src/renderers/common/RenderList.js +7 -3
- package/src/renderers/common/RenderObject.js +3 -1
- package/src/renderers/common/RenderObjects.js +1 -1
- package/src/renderers/common/Renderer.js +436 -228
- package/src/renderers/common/RendererUtils.js +9 -0
- package/src/renderers/common/SampledTexture.js +8 -0
- package/src/renderers/common/Sampler.js +37 -11
- package/src/renderers/common/StorageTexture.js +9 -1
- package/src/renderers/common/Textures.js +89 -35
- package/src/renderers/common/TimestampQueryPool.js +63 -1
- package/src/renderers/common/UniformsGroup.js +2 -1
- package/src/renderers/common/XRManager.js +7 -3
- package/src/renderers/common/extras/PMREMGenerator.js +160 -65
- package/src/renderers/common/nodes/NodeLibrary.js +4 -2
- package/src/renderers/common/nodes/NodeSampler.js +13 -1
- package/src/renderers/common/nodes/Nodes.js +38 -16
- package/src/renderers/shaders/DFGLUTData.js +64 -0
- package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -12
- package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +52 -18
- package/src/renderers/shaders/UniformsLib.js +1 -0
- package/src/renderers/shaders/UniformsUtils.js +25 -4
- package/src/renderers/webgl/WebGLCapabilities.js +2 -1
- package/src/renderers/webgl/WebGLExtensions.js +2 -25
- package/src/renderers/webgl/WebGLInfo.js +3 -1
- package/src/renderers/webgl/WebGLProgram.js +11 -10
- package/src/renderers/webgl/WebGLPrograms.js +2 -1
- package/src/renderers/webgl/WebGLShadowMap.js +2 -1
- package/src/renderers/webgl/WebGLState.js +15 -14
- package/src/renderers/webgl/WebGLTextures.js +18 -14
- package/src/renderers/webgl/WebGLUniformsGroups.js +5 -3
- package/src/renderers/webgl-fallback/WebGLBackend.js +22 -41
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +74 -11
- package/src/renderers/webgl-fallback/utils/WebGLConstants.js +2 -3
- package/src/renderers/webgl-fallback/utils/WebGLState.js +6 -5
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +117 -16
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +42 -12
- package/src/renderers/webgpu/WebGPUBackend.js +134 -108
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +2 -1
- package/src/renderers/webgpu/WebGPURenderer.js +3 -2
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +21 -19
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +2 -1
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +5 -3
- package/src/renderers/webgpu/utils/WebGPUConstants.js +5 -0
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +44 -16
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +6 -8
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +146 -74
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +29 -6
- package/src/renderers/webgpu/utils/WebGPUUtils.js +22 -2
- package/src/renderers/webxr/WebXRManager.js +3 -2
- package/src/textures/Source.js +2 -1
- package/src/textures/Texture.js +3 -2
- package/src/textures/VideoTexture.js +2 -0
- package/src/utils.js +67 -3
|
@@ -1,9 +1,12 @@
|
|
|
1
|
-
import { DataTexture, RenderTarget, RepeatWrapping, Vector2, Vector3, TempNode, QuadMesh, NodeMaterial, RendererUtils } from 'three/webgpu';
|
|
1
|
+
import { DataTexture, RenderTarget, RepeatWrapping, Vector2, Vector3, TempNode, QuadMesh, NodeMaterial, RendererUtils, RedFormat } from 'three/webgpu';
|
|
2
2
|
import { reference, logarithmicDepthToViewZ, viewZToPerspectiveDepth, getNormalFromDepth, getScreenPosition, getViewPosition, nodeObject, Fn, float, NodeUpdateType, uv, uniform, Loop, vec2, vec3, vec4, int, dot, max, pow, abs, If, textureSize, sin, cos, PI, texture, passTexture, mat3, add, normalize, mul, cross, div, mix, sqrt, sub, acos, clamp } from 'three/tsl';
|
|
3
3
|
|
|
4
4
|
const _quadMesh = /*@__PURE__*/ new QuadMesh();
|
|
5
5
|
const _size = /*@__PURE__*/ new Vector2();
|
|
6
6
|
|
|
7
|
+
// From Activision GTAO paper: https://www.activision.com/cdn/research/s2016_pbs_activision_occlusion.pptx
|
|
8
|
+
const _temporalRotations = [ 60, 300, 180, 240, 120, 0 ];
|
|
9
|
+
|
|
7
10
|
let _rendererState;
|
|
8
11
|
|
|
9
12
|
/**
|
|
@@ -48,7 +51,7 @@ class GTAONode extends TempNode {
|
|
|
48
51
|
*/
|
|
49
52
|
constructor( depthNode, normalNode, camera ) {
|
|
50
53
|
|
|
51
|
-
super( '
|
|
54
|
+
super( 'float' );
|
|
52
55
|
|
|
53
56
|
/**
|
|
54
57
|
* A node that represents the scene's depth.
|
|
@@ -90,7 +93,7 @@ class GTAONode extends TempNode {
|
|
|
90
93
|
* @private
|
|
91
94
|
* @type {RenderTarget}
|
|
92
95
|
*/
|
|
93
|
-
this._aoRenderTarget = new RenderTarget( 1, 1, { depthBuffer: false } );
|
|
96
|
+
this._aoRenderTarget = new RenderTarget( 1, 1, { depthBuffer: false, format: RedFormat } );
|
|
94
97
|
this._aoRenderTarget.texture.name = 'GTAONode.AO';
|
|
95
98
|
|
|
96
99
|
// uniforms
|
|
@@ -150,6 +153,20 @@ class GTAONode extends TempNode {
|
|
|
150
153
|
*/
|
|
151
154
|
this.samples = uniform( 16 );
|
|
152
155
|
|
|
156
|
+
/**
|
|
157
|
+
* Whether to use temporal filtering or not. Setting this property to
|
|
158
|
+
* `true` requires the usage of `TRAANode`. This will help to reduce noise
|
|
159
|
+
* although it introduces typical TAA artifacts like ghosting and temporal
|
|
160
|
+
* instabilities.
|
|
161
|
+
*
|
|
162
|
+
* If setting this property to `false`, a manual denoise via `DenoiseNode`
|
|
163
|
+
* might be required.
|
|
164
|
+
*
|
|
165
|
+
* @type {boolean}
|
|
166
|
+
* @default false
|
|
167
|
+
*/
|
|
168
|
+
this.useTemporalFiltering = false;
|
|
169
|
+
|
|
153
170
|
/**
|
|
154
171
|
* The node represents the internal noise texture used by the AO.
|
|
155
172
|
*
|
|
@@ -190,6 +207,13 @@ class GTAONode extends TempNode {
|
|
|
190
207
|
*/
|
|
191
208
|
this._cameraFar = reference( 'far', 'float', camera );
|
|
192
209
|
|
|
210
|
+
/**
|
|
211
|
+
* Temporal direction that influences the rotation angle for each slice.
|
|
212
|
+
*
|
|
213
|
+
* @type {UniformNode<float>}
|
|
214
|
+
*/
|
|
215
|
+
this._temporalDirection = uniform( 0 );
|
|
216
|
+
|
|
193
217
|
/**
|
|
194
218
|
* The material that is used to render the effect.
|
|
195
219
|
*
|
|
@@ -247,12 +271,27 @@ class GTAONode extends TempNode {
|
|
|
247
271
|
|
|
248
272
|
_rendererState = RendererUtils.resetRendererState( renderer, _rendererState );
|
|
249
273
|
|
|
274
|
+
// update temporal uniforms
|
|
275
|
+
|
|
276
|
+
if ( this.useTemporalFiltering === true ) {
|
|
277
|
+
|
|
278
|
+
const frameId = frame.frameId;
|
|
279
|
+
|
|
280
|
+
this._temporalDirection.value = _temporalRotations[ frameId % 6 ] / 360;
|
|
281
|
+
|
|
282
|
+
} else {
|
|
283
|
+
|
|
284
|
+
this._temporalDirection.value = 0;
|
|
285
|
+
|
|
286
|
+
}
|
|
287
|
+
|
|
250
288
|
//
|
|
251
289
|
|
|
252
290
|
const size = renderer.getDrawingBufferSize( _size );
|
|
253
291
|
this.setSize( size.width, size.height );
|
|
254
292
|
|
|
255
293
|
_quadMesh.material = this._material;
|
|
294
|
+
_quadMesh.name = 'AO';
|
|
256
295
|
|
|
257
296
|
// clear
|
|
258
297
|
|
|
@@ -312,6 +351,7 @@ class GTAONode extends TempNode {
|
|
|
312
351
|
const noiseResolution = textureSize( this._noiseNode, 0 );
|
|
313
352
|
let noiseUv = vec2( uvNode.x, uvNode.y.oneMinus() );
|
|
314
353
|
noiseUv = noiseUv.mul( this.resolution.div( noiseResolution ) );
|
|
354
|
+
|
|
315
355
|
const noiseTexel = sampleNoise( noiseUv );
|
|
316
356
|
const randomVec = noiseTexel.xyz.mul( 2.0 ).sub( 1.0 );
|
|
317
357
|
const tangent = vec3( randomVec.xy, 0.0 ).normalize();
|
|
@@ -327,7 +367,7 @@ class GTAONode extends TempNode {
|
|
|
327
367
|
|
|
328
368
|
Loop( { start: int( 0 ), end: DIRECTIONS, type: 'int', condition: '<' }, ( { i } ) => {
|
|
329
369
|
|
|
330
|
-
const angle = float( i ).div( float( DIRECTIONS ) ).mul( PI ).toVar();
|
|
370
|
+
const angle = float( i ).div( float( DIRECTIONS ) ).mul( PI ).add( this._temporalDirection ).toVar();
|
|
331
371
|
const sampleDir = vec4( cos( angle ), sin( angle ), 0., add( 0.5, mul( 0.5, noiseTexel.w ) ) );
|
|
332
372
|
sampleDir.xyz = normalize( kernelMatrix.mul( sampleDir.xyz ) );
|
|
333
373
|
|
|
@@ -392,7 +432,7 @@ class GTAONode extends TempNode {
|
|
|
392
432
|
ao.assign( clamp( ao.div( DIRECTIONS ), 0, 1 ) );
|
|
393
433
|
ao.assign( pow( ao, this.scale ) );
|
|
394
434
|
|
|
395
|
-
return
|
|
435
|
+
return ao;
|
|
396
436
|
|
|
397
437
|
} );
|
|
398
438
|
|
|
@@ -27,7 +27,7 @@ class GaussianBlurNode extends TempNode {
|
|
|
27
27
|
* @param {number} sigma - Controls the kernel of the blur filter. Higher values mean a wider blur radius.
|
|
28
28
|
* @param {Object} [options={}] - Additional options for the gaussian blur effect.
|
|
29
29
|
* @param {boolean} [options.premultipliedAlpha=false] - Whether to use premultiplied alpha for the blur effect.
|
|
30
|
-
* @param {
|
|
30
|
+
* @param {number} [options.resolutionScale=1] - The resolution of the effect. 0.5 means half the resolution of the texture node.
|
|
31
31
|
*/
|
|
32
32
|
constructor( textureNode, directionNode = null, sigma = 4, options = {} ) {
|
|
33
33
|
|
|
@@ -110,7 +110,7 @@ class GaussianBlurNode extends TempNode {
|
|
|
110
110
|
/**
|
|
111
111
|
* The resolution scale.
|
|
112
112
|
*
|
|
113
|
-
* @type {
|
|
113
|
+
* @type {number}
|
|
114
114
|
* @default (1)
|
|
115
115
|
*/
|
|
116
116
|
this.resolutionScale = options.resolutionScale || 1;
|
|
@@ -176,6 +176,7 @@ class GaussianBlurNode extends TempNode {
|
|
|
176
176
|
|
|
177
177
|
this._passDirection.value.set( 1, 0 );
|
|
178
178
|
|
|
179
|
+
_quadMesh.name = 'Gaussian Blur [ Horizontal Pass ]';
|
|
179
180
|
_quadMesh.render( renderer );
|
|
180
181
|
|
|
181
182
|
// vertical
|
|
@@ -185,6 +186,7 @@ class GaussianBlurNode extends TempNode {
|
|
|
185
186
|
|
|
186
187
|
this._passDirection.value.set( 0, 1 );
|
|
187
188
|
|
|
189
|
+
_quadMesh.name = 'Gaussian Blur [ Vertical Pass ]';
|
|
188
190
|
_quadMesh.render( renderer );
|
|
189
191
|
|
|
190
192
|
// restore
|
|
@@ -353,7 +355,7 @@ export default GaussianBlurNode;
|
|
|
353
355
|
* @param {number} sigma - Controls the kernel of the blur filter. Higher values mean a wider blur radius.
|
|
354
356
|
* @param {Object} [options={}] - Additional options for the gaussian blur effect.
|
|
355
357
|
* @param {boolean} [options.premultipliedAlpha=false] - Whether to use premultiplied alpha for the blur effect.
|
|
356
|
-
* @param {
|
|
358
|
+
* @param {number} [options.resolutionScale=1] - The resolution of the effect. 0.5 means half the resolution of the texture node.
|
|
357
359
|
* @returns {GaussianBlurNode}
|
|
358
360
|
*/
|
|
359
361
|
export const gaussianBlur = ( node, directionNode, sigma, options = {} ) => nodeObject( new GaussianBlurNode( convertToTexture( node ), directionNode, sigma, options ) );
|
|
@@ -455,6 +455,8 @@ class OutlineNode extends TempNode {
|
|
|
455
455
|
|
|
456
456
|
this._updateSelectionCache();
|
|
457
457
|
|
|
458
|
+
const currentSceneName = scene.name;
|
|
459
|
+
|
|
458
460
|
// 1. Draw non-selected objects in the depth buffer
|
|
459
461
|
|
|
460
462
|
scene.overrideMaterial = this._depthMaterial;
|
|
@@ -470,6 +472,7 @@ class OutlineNode extends TempNode {
|
|
|
470
472
|
|
|
471
473
|
} );
|
|
472
474
|
|
|
475
|
+
scene.name = 'Outline [ Non-Selected Objects Pass ]';
|
|
473
476
|
renderer.render( scene, camera );
|
|
474
477
|
|
|
475
478
|
// 2. Draw only the selected objects by comparing the depth buffer of non-selected objects
|
|
@@ -487,6 +490,7 @@ class OutlineNode extends TempNode {
|
|
|
487
490
|
|
|
488
491
|
} );
|
|
489
492
|
|
|
493
|
+
scene.name = 'Outline [ Selected Objects Pass ]';
|
|
490
494
|
renderer.render( scene, camera );
|
|
491
495
|
|
|
492
496
|
//
|
|
@@ -495,15 +499,19 @@ class OutlineNode extends TempNode {
|
|
|
495
499
|
|
|
496
500
|
this._selectionCache.clear();
|
|
497
501
|
|
|
502
|
+
scene.name = currentSceneName;
|
|
503
|
+
|
|
498
504
|
// 3. Downsample to (at least) half resolution
|
|
499
505
|
|
|
500
506
|
_quadMesh.material = this._materialCopy;
|
|
507
|
+
_quadMesh.name = 'Outline [ Downsample ]';
|
|
501
508
|
renderer.setRenderTarget( this._renderTargetMaskDownSampleBuffer );
|
|
502
509
|
_quadMesh.render( renderer );
|
|
503
510
|
|
|
504
511
|
// 4. Perform edge detection (half resolution)
|
|
505
512
|
|
|
506
513
|
_quadMesh.material = this._edgeDetectionMaterial;
|
|
514
|
+
_quadMesh.name = 'Outline [ Edge Detection ]';
|
|
507
515
|
renderer.setRenderTarget( this._renderTargetEdgeBuffer1 );
|
|
508
516
|
_quadMesh.render( renderer );
|
|
509
517
|
|
|
@@ -513,6 +521,7 @@ class OutlineNode extends TempNode {
|
|
|
513
521
|
this._blurDirection.value.copy( _BLUR_DIRECTION_X );
|
|
514
522
|
|
|
515
523
|
_quadMesh.material = this._separableBlurMaterial;
|
|
524
|
+
_quadMesh.name = 'Outline [ Blur Half Resolution ]';
|
|
516
525
|
renderer.setRenderTarget( this._renderTargetBlurBuffer1 );
|
|
517
526
|
_quadMesh.render( renderer );
|
|
518
527
|
|
|
@@ -528,6 +537,7 @@ class OutlineNode extends TempNode {
|
|
|
528
537
|
this._blurDirection.value.copy( _BLUR_DIRECTION_X );
|
|
529
538
|
|
|
530
539
|
_quadMesh.material = this._separableBlurMaterial2;
|
|
540
|
+
_quadMesh.name = 'Outline [ Blur Quarter Resolution ]';
|
|
531
541
|
renderer.setRenderTarget( this._renderTargetBlurBuffer2 );
|
|
532
542
|
_quadMesh.render( renderer );
|
|
533
543
|
|
|
@@ -540,6 +550,7 @@ class OutlineNode extends TempNode {
|
|
|
540
550
|
// 7. Composite
|
|
541
551
|
|
|
542
552
|
_quadMesh.material = this._compositeMaterial;
|
|
553
|
+
_quadMesh.name = 'Outline [ Blur Quarter Resolution ]';
|
|
543
554
|
renderer.setRenderTarget( this._renderTargetComposite );
|
|
544
555
|
_quadMesh.render( renderer );
|
|
545
556
|
|