@needle-tools/three 0.145.4 → 0.146.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/README.md +1 -1
- package/build/three.cjs +32586 -35951
- package/build/three.js +32600 -35965
- package/build/three.min.js +6 -7
- package/build/three.module.js +1547 -1154
- package/examples/js/animation/AnimationClipCreator.js +0 -8
- package/examples/js/animation/CCDIKSolver.js +49 -66
- package/examples/js/animation/MMDAnimationHelper.js +66 -137
- package/examples/js/animation/MMDPhysics.js +70 -134
- package/examples/js/cameras/CinematicCamera.js +33 -22
- package/examples/js/controls/ArcballControls.js +138 -405
- package/examples/js/controls/DragControls.js +8 -33
- package/examples/js/controls/FirstPersonControls.js +32 -54
- package/examples/js/controls/FlyControls.js +29 -55
- package/examples/js/controls/OrbitControls.js +85 -95
- package/examples/js/controls/PointerLockControls.js +5 -14
- package/examples/js/controls/TrackballControls.js +33 -86
- package/examples/js/controls/TransformControls.js +84 -169
- package/examples/js/csm/CSM.js +4 -39
- package/examples/js/csm/CSMFrustum.js +3 -9
- package/examples/js/csm/CSMHelper.js +24 -4
- package/examples/js/csm/CSMShader.js +2 -6
- package/examples/js/curves/CurveExtras.js +27 -27
- package/examples/js/curves/NURBSCurve.js +4 -16
- package/examples/js/curves/NURBSSurface.js +3 -9
- package/examples/js/curves/NURBSUtils.js +8 -45
- package/examples/js/effects/AnaglyphEffect.js +4 -18
- package/examples/js/effects/AsciiEffect.js +32 -31
- package/examples/js/effects/OutlineEffect.js +26 -30
- package/examples/js/effects/ParallaxBarrierEffect.js +0 -13
- package/examples/js/effects/PeppersGhostEffect.js +12 -39
- package/examples/js/effects/StereoEffect.js +0 -4
- package/examples/js/environments/RoomEnvironment.js +12 -10
- package/examples/js/exporters/ColladaExporter.js +48 -65
- package/examples/js/exporters/DRACOExporter.js +22 -22
- package/examples/js/exporters/EXRExporter.js +15 -18
- package/examples/js/exporters/GLTFExporter.js +143 -261
- package/examples/js/exporters/MMDExporter.js +5 -12
- package/examples/js/exporters/OBJExporter.js +42 -33
- package/examples/js/exporters/PLYExporter.js +38 -33
- package/examples/js/exporters/STLExporter.js +5 -7
- package/examples/js/exporters/USDZExporter.js +110 -25
- package/examples/js/geometries/BoxLineGeometry.js +0 -1
- package/examples/js/geometries/ConvexGeometry.js +11 -6
- package/examples/js/geometries/DecalGeometry.js +53 -20
- package/examples/js/geometries/LightningStrike.js +54 -67
- package/examples/js/geometries/ParametricGeometries.js +8 -7
- package/examples/js/geometries/ParametricGeometry.js +25 -12
- package/examples/js/geometries/RoundedBoxGeometry.js +21 -19
- package/examples/js/geometries/TeapotGeometry.js +54 -50
- package/examples/js/geometries/TextGeometry.js +6 -4
- package/examples/js/helpers/LightProbeHelper.js +1 -2
- package/examples/js/helpers/OctreeHelper.js +22 -20
- package/examples/js/helpers/PositionalAudioHelper.js +8 -6
- package/examples/js/helpers/RectAreaLightHelper.js +6 -7
- package/examples/js/helpers/VertexNormalsHelper.js +15 -13
- package/examples/js/helpers/VertexTangentsHelper.js +15 -9
- package/examples/js/helpers/ViewHelper.js +31 -16
- package/examples/js/interactive/HTMLMesh.js +22 -33
- package/examples/js/interactive/InteractiveGroup.js +6 -12
- package/examples/js/interactive/SelectionBox.js +3 -70
- package/examples/js/interactive/SelectionHelper.js +0 -8
- package/examples/js/lights/LightProbeGenerator.js +32 -39
- package/examples/js/lights/RectAreaLightUniformsLib.js +5 -1
- package/examples/js/lines/LineGeometry.js +3 -5
- package/examples/js/lines/LineMaterial.js +4 -11
- package/examples/js/lines/LineSegments2.js +38 -89
- package/examples/js/lines/LineSegmentsGeometry.js +7 -28
- package/examples/js/lines/Wireframe.js +2 -7
- package/examples/js/lines/WireframeGeometry2.js +3 -1
- package/examples/js/loaders/3DMLoader.js +58 -155
- package/examples/js/loaders/3MFLoader.js +72 -106
- package/examples/js/loaders/AMFLoader.js +0 -25
- package/examples/js/loaders/BVHLoader.js +44 -43
- package/examples/js/loaders/BasisTextureLoader.js +16 -46
- package/examples/js/loaders/ColladaLoader.js +201 -359
- package/examples/js/loaders/DDSLoader.js +24 -25
- package/examples/js/loaders/DRACOLoader.js +29 -66
- package/examples/js/loaders/EXRLoader.js +67 -164
- package/examples/js/loaders/FBXLoader.js +286 -441
- package/examples/js/loaders/FontLoader.js +6 -15
- package/examples/js/loaders/GCodeLoader.js +15 -16
- package/examples/js/loaders/GLTFLoader.js +354 -405
- package/examples/js/loaders/HDRCubeTextureLoader.js +0 -6
- package/examples/js/loaders/KMZLoader.js +3 -7
- package/examples/js/loaders/KTXLoader.js +12 -30
- package/examples/js/loaders/LDrawLoader.js +178 -289
- package/examples/js/loaders/LUT3dlLoader.js +7 -11
- package/examples/js/loaders/LUTCubeLoader.js +0 -8
- package/examples/js/loaders/LWOLoader.js +59 -124
- package/examples/js/loaders/LogLuvLoader.js +27 -77
- package/examples/js/loaders/LottieLoader.js +4 -4
- package/examples/js/loaders/MD2Loader.js +26 -27
- package/examples/js/loaders/MDDLoader.js +6 -10
- package/examples/js/loaders/MMDLoader.js +180 -189
- package/examples/js/loaders/MTLLoader.js +18 -47
- package/examples/js/loaders/MaterialXLoader.js +392 -0
- package/examples/js/loaders/NRRDLoader.js +44 -84
- package/examples/js/loaders/OBJLoader.js +50 -65
- package/examples/js/loaders/PCDLoader.js +34 -29
- package/examples/js/loaders/PDBLoader.js +17 -13
- package/examples/js/loaders/PLYLoader.js +9 -39
- package/examples/js/loaders/PRWMLoader.js +11 -22
- package/examples/js/loaders/PVRLoader.js +7 -16
- package/examples/js/loaders/RGBELoader.js +36 -61
- package/examples/js/loaders/RGBMLoader.js +26 -87
- package/examples/js/loaders/STLLoader.js +20 -27
- package/examples/js/loaders/SVGLoader.js +361 -233
- package/examples/js/loaders/TDSLoader.js +81 -118
- package/examples/js/loaders/TGALoader.js +39 -41
- package/examples/js/loaders/TIFFLoader.js +0 -1
- package/examples/js/loaders/TTFLoader.js +0 -8
- package/examples/js/loaders/TiltLoader.js +14 -15
- package/examples/js/loaders/VOXLoader.js +8 -16
- package/examples/js/loaders/VRMLLoader.js +243 -340
- package/examples/js/loaders/VTKLoader.js +101 -118
- package/examples/js/loaders/XYZLoader.js +2 -4
- package/examples/js/loaders/lwo/IFFParser.js +55 -136
- package/examples/js/loaders/lwo/LWO2Parser.js +32 -83
- package/examples/js/loaders/lwo/LWO3Parser.js +31 -73
- package/examples/js/materials/MeshGouraudMaterial.js +15 -13
- package/examples/js/math/Capsule.js +0 -17
- package/examples/js/math/ColorConverter.js +3 -3
- package/examples/js/math/ConvexHull.js +183 -139
- package/examples/js/math/ImprovedNoise.js +1 -1
- package/examples/js/math/Lut.js +8 -15
- package/examples/js/math/MeshSurfaceSampler.js +6 -28
- package/examples/js/math/OBB.js +90 -49
- package/examples/js/math/Octree.js +2 -57
- package/examples/js/math/SimplexNoise.js +74 -88
- package/examples/js/misc/ConvexObjectBreaker.js +37 -48
- package/examples/js/misc/GPUComputationRenderer.js +14 -18
- package/examples/js/misc/Gyroscope.js +5 -9
- package/examples/js/misc/MD2Character.js +14 -23
- package/examples/js/misc/MD2CharacterComplex.js +73 -54
- package/examples/js/misc/MorphAnimMesh.js +0 -6
- package/examples/js/misc/MorphBlendMesh.js +3 -30
- package/examples/js/misc/ProgressiveLightMap.js +47 -43
- package/examples/js/misc/RollerCoaster.js +17 -24
- package/examples/js/misc/TubePainter.js +18 -12
- package/examples/js/misc/Volume.js +16 -45
- package/examples/js/misc/VolumeSlice.js +14 -24
- package/examples/js/modifiers/CurveModifier.js +19 -21
- package/examples/js/modifiers/EdgeSplitModifier.js +0 -30
- package/examples/js/modifiers/SimplifyModifier.js +56 -59
- package/examples/js/modifiers/TessellateModifier.js +2 -9
- package/examples/js/objects/GroundProjectedEnv.js +2 -14
- package/examples/js/objects/Lensflare.js +47 -38
- package/examples/js/objects/LightningStorm.js +10 -13
- package/examples/js/objects/MarchingCubes.js +80 -59
- package/examples/js/objects/Reflector.js +22 -20
- package/examples/js/objects/ReflectorForSSRPass.js +19 -23
- package/examples/js/objects/Refractor.js +52 -30
- package/examples/js/objects/ShadowMesh.js +1 -2
- package/examples/js/objects/Sky.js +2 -7
- package/examples/js/objects/Water.js +23 -18
- package/examples/js/objects/Water2.js +20 -19
- package/examples/js/physics/AmmoPhysics.js +23 -20
- package/examples/js/physics/OimoPhysics.js +19 -17
- package/examples/js/postprocessing/AdaptiveToneMappingPass.js +13 -20
- package/examples/js/postprocessing/AfterimagePass.js +19 -12
- package/examples/js/postprocessing/BloomPass.js +38 -17
- package/examples/js/postprocessing/BokehPass.js +29 -12
- package/examples/js/postprocessing/ClearPass.js +1 -6
- package/examples/js/postprocessing/CubeTexturePass.js +12 -9
- package/examples/js/postprocessing/DotScreenPass.js +7 -5
- package/examples/js/postprocessing/EffectComposer.js +25 -32
- package/examples/js/postprocessing/FilmPass.js +7 -5
- package/examples/js/postprocessing/GlitchPass.js +10 -11
- package/examples/js/postprocessing/HalftonePass.js +9 -9
- package/examples/js/postprocessing/LUTPass.js +2 -15
- package/examples/js/postprocessing/MaskPass.js +20 -17
- package/examples/js/postprocessing/OutlinePass.js +45 -36
- package/examples/js/postprocessing/Pass.js +11 -14
- package/examples/js/postprocessing/RenderPass.js +3 -7
- package/examples/js/postprocessing/SAOPass.js +40 -32
- package/examples/js/postprocessing/SMAAPass.js +34 -17
- package/examples/js/postprocessing/SSAARenderPass.js +14 -14
- package/examples/js/postprocessing/SSAOPass.js +56 -42
- package/examples/js/postprocessing/SSRPass.js +78 -61
- package/examples/js/postprocessing/SavePass.js +14 -6
- package/examples/js/postprocessing/ShaderPass.js +9 -8
- package/examples/js/postprocessing/TAARenderPass.js +11 -9
- package/examples/js/postprocessing/TexturePass.js +7 -4
- package/examples/js/postprocessing/UnrealBloomPass.js +43 -25
- package/examples/js/renderers/CSS2DRenderer.js +2 -21
- package/examples/js/renderers/CSS3DRenderer.js +3 -24
- package/examples/js/renderers/Projector.js +29 -85
- package/examples/js/renderers/SVGRenderer.js +4 -50
- package/examples/js/shaders/ACESFilmicToneMappingShader.js +3 -6
- package/examples/js/shaders/AfterimageShader.js +3 -6
- package/examples/js/shaders/BasicShader.js +3 -6
- package/examples/js/shaders/BleachBypassShader.js +3 -6
- package/examples/js/shaders/BlendShader.js +3 -6
- package/examples/js/shaders/BokehShader.js +3 -6
- package/examples/js/shaders/BokehShader2.js +4 -13
- package/examples/js/shaders/BrightnessContrastShader.js +3 -6
- package/examples/js/shaders/ColorCorrectionShader.js +2 -6
- package/examples/js/shaders/ColorifyShader.js +2 -6
- package/examples/js/shaders/ConvolutionShader.js +5 -10
- package/examples/js/shaders/CopyShader.js +3 -6
- package/examples/js/shaders/DOFMipMapShader.js +3 -6
- package/examples/js/shaders/DepthLimitedBlurShader.js +2 -9
- package/examples/js/shaders/DigitalGlitch.js +3 -6
- package/examples/js/shaders/DotScreenShader.js +2 -6
- package/examples/js/shaders/FXAAShader.js +1 -3
- package/examples/js/shaders/FilmShader.js +3 -6
- package/examples/js/shaders/FocusShader.js +3 -6
- package/examples/js/shaders/FreiChenShader.js +2 -6
- package/examples/js/shaders/GammaCorrectionShader.js +3 -6
- package/examples/js/shaders/GodRaysShader.js +11 -24
- package/examples/js/shaders/HalftoneShader.js +3 -6
- package/examples/js/shaders/HorizontalBlurShader.js +3 -6
- package/examples/js/shaders/HorizontalTiltShiftShader.js +3 -6
- package/examples/js/shaders/HueSaturationShader.js +3 -6
- package/examples/js/shaders/KaleidoShader.js +3 -6
- package/examples/js/shaders/LuminosityHighPassShader.js +2 -6
- package/examples/js/shaders/LuminosityShader.js +3 -6
- package/examples/js/shaders/MMDToonShader.js +2 -6
- package/examples/js/shaders/MirrorShader.js +3 -6
- package/examples/js/shaders/NormalMapShader.js +2 -6
- package/examples/js/shaders/RGBShiftShader.js +3 -6
- package/examples/js/shaders/SAOShader.js +2 -6
- package/examples/js/shaders/SMAAShader.js +6 -18
- package/examples/js/shaders/SSAOShader.js +2 -6
- package/examples/js/shaders/SSRShader.js +6 -18
- package/examples/js/shaders/SepiaShader.js +3 -6
- package/examples/js/shaders/SobelOperatorShader.js +2 -6
- package/examples/js/shaders/TechnicolorShader.js +3 -6
- package/examples/js/shaders/ToneMapShader.js +3 -6
- package/examples/js/shaders/ToonShader.js +8 -24
- package/examples/js/shaders/TriangleBlurShader.js +2 -6
- package/examples/js/shaders/UnpackDepthRGBAShader.js +3 -6
- package/examples/js/shaders/VelocityShader.js +126 -0
- package/examples/js/shaders/VerticalBlurShader.js +3 -6
- package/examples/js/shaders/VerticalTiltShiftShader.js +3 -6
- package/examples/js/shaders/VignetteShader.js +3 -6
- package/examples/js/shaders/VolumeShader.js +2 -6
- package/examples/js/shaders/WaterRefractionShader.js +2 -6
- package/examples/js/textures/FlakesTexture.js +0 -1
- package/examples/js/utils/BufferGeometryUtils.js +234 -168
- package/examples/js/utils/CameraUtils.js +5 -20
- package/examples/js/utils/GPUStatsPanel.js +3 -12
- package/examples/js/utils/GeometryCompressionUtils.js +19 -44
- package/examples/js/utils/GeometryUtils.js +13 -18
- package/examples/js/utils/LDrawUtils.js +8 -11
- package/examples/js/utils/PackedPhongMaterial.js +6 -4
- package/examples/js/utils/SceneUtils.js +117 -6
- package/examples/js/utils/ShadowMapViewer.js +17 -14
- package/examples/js/utils/SkeletonUtils.js +13 -27
- package/examples/js/utils/UVsDebug.js +20 -12
- package/examples/js/utils/WorkerPool.js +1 -11
- package/examples/jsm/animation/CCDIKSolver.js +1 -1
- package/examples/jsm/capabilities/WebGPU.js +3 -1
- package/examples/jsm/controls/OrbitControls.js +44 -4
- package/examples/jsm/exporters/GLTFExporter.js +17 -131
- package/examples/jsm/exporters/USDZExporter.js +75 -19
- package/examples/jsm/interactive/HTMLMesh.js +2 -0
- package/examples/jsm/libs/lottie_canvas.module.js +14844 -0
- package/examples/jsm/loaders/3DMLoader.js +1 -2
- package/examples/jsm/loaders/ColladaLoader.js +28 -0
- package/examples/jsm/loaders/FBXLoader.js +16 -2
- package/examples/jsm/loaders/GLTFLoader.js +204 -377
- package/examples/jsm/loaders/KTX2Loader.js +68 -29
- package/examples/jsm/loaders/LDrawLoader.js +14 -13
- package/examples/jsm/loaders/LottieLoader.js +4 -2
- package/examples/jsm/loaders/MaterialXLoader.js +728 -0
- package/examples/jsm/loaders/PCDLoader.js +1 -1
- package/examples/jsm/loaders/PLYLoader.js +68 -16
- package/examples/jsm/loaders/SVGLoader.js +227 -14
- package/examples/jsm/loaders/USDZLoader.js +31 -16
- package/examples/jsm/nodes/Nodes.js +14 -2
- package/examples/jsm/nodes/accessors/Object3DNode.js +1 -1
- package/examples/jsm/nodes/accessors/PositionNode.js +6 -0
- package/examples/jsm/nodes/accessors/ReferenceNode.js +1 -1
- package/examples/jsm/nodes/accessors/SkinningNode.js +1 -1
- package/examples/jsm/nodes/core/Node.js +1 -1
- package/examples/jsm/nodes/core/NodeBuilder.js +36 -4
- package/examples/jsm/nodes/core/NodeFrame.js +2 -2
- package/examples/jsm/nodes/core/NodeVarying.js +7 -4
- package/examples/jsm/nodes/core/VaryingNode.js +6 -4
- package/examples/jsm/nodes/core/constants.js +13 -13
- package/examples/jsm/nodes/display/PosterizeNode.js +25 -0
- package/examples/jsm/nodes/display/ViewportNode.js +106 -0
- package/examples/jsm/nodes/gpgpu/ComputeNode.js +1 -1
- package/examples/jsm/nodes/lighting/AnalyticLightNode.js +1 -1
- package/examples/jsm/nodes/loaders/NodeMaterialLoader.js +3 -1
- package/examples/jsm/nodes/materials/Materials.js +9 -7
- package/examples/jsm/nodes/materials/NodeMaterial.js +9 -1
- package/examples/jsm/nodes/materialx/MaterialXNodes.js +6 -2
- package/examples/jsm/nodes/materialx/lib/mx_transform_color.js +18 -0
- package/examples/jsm/nodes/math/MathNode.js +5 -0
- package/examples/jsm/nodes/math/OperatorNode.js +6 -1
- package/examples/jsm/nodes/shadernode/ShaderNode.js +26 -13
- package/examples/jsm/nodes/shadernode/ShaderNodeBaseElements.js +2 -0
- package/examples/jsm/nodes/shadernode/ShaderNodeElements.js +18 -0
- package/examples/jsm/nodes/utils/EquirectUVNode.js +27 -0
- package/examples/jsm/nodes/utils/JoinNode.js +8 -2
- package/examples/jsm/nodes/utils/MatcapUVNode.js +2 -4
- package/examples/jsm/nodes/utils/MaxMipLevelNode.js +1 -1
- package/examples/jsm/nodes/utils/SpriteSheetUVNode.js +8 -10
- package/examples/jsm/nodes/utils/TimerNode.js +1 -1
- package/examples/jsm/nodes/utils/TriplanarTexturesNode.js +51 -0
- package/examples/jsm/postprocessing/AfterimagePass.js +17 -4
- package/examples/jsm/postprocessing/BloomPass.js +22 -3
- package/examples/jsm/postprocessing/BokehPass.js +18 -4
- package/examples/jsm/postprocessing/CubeTexturePass.js +12 -5
- package/examples/jsm/postprocessing/DotScreenPass.js +8 -0
- package/examples/jsm/postprocessing/EffectComposer.js +9 -0
- package/examples/jsm/postprocessing/FilmPass.js +8 -0
- package/examples/jsm/postprocessing/GlitchPass.js +13 -1
- package/examples/jsm/postprocessing/HalftonePass.js +8 -0
- package/examples/jsm/postprocessing/OutlinePass.js +10 -0
- package/examples/jsm/postprocessing/Pass.js +2 -0
- package/examples/jsm/postprocessing/RenderPixelatedPass.js +234 -0
- package/examples/jsm/postprocessing/SAOPass.js +20 -0
- package/examples/jsm/postprocessing/SMAAPass.js +16 -0
- package/examples/jsm/postprocessing/SSAARenderPass.js +4 -0
- package/examples/jsm/postprocessing/SavePass.js +17 -1
- package/examples/jsm/postprocessing/ShaderPass.js +8 -0
- package/examples/jsm/postprocessing/TAARenderPass.js +9 -0
- package/examples/jsm/postprocessing/TexturePass.js +8 -0
- package/examples/jsm/postprocessing/UnrealBloomPass.js +16 -0
- package/examples/jsm/renderers/webgl/nodes/WebGLNodeBuilder.js +39 -16
- package/examples/jsm/renderers/webgpu/WebGPUAnimation.js +58 -0
- package/examples/jsm/renderers/webgpu/WebGPUAttributes.js +63 -5
- package/examples/jsm/renderers/webgpu/WebGPUBackground.js +36 -7
- package/examples/jsm/renderers/webgpu/WebGPURenderer.js +47 -12
- package/examples/jsm/renderers/webgpu/nodes/WebGPUNodeBuilder.js +35 -5
- package/examples/jsm/shaders/MMDToonShader.js +0 -2
- package/examples/jsm/shaders/VelocityShader.js +128 -0
- package/examples/jsm/utils/BufferGeometryUtils.js +130 -6
- package/examples/jsm/utils/SceneUtils.js +129 -4
- package/examples/jsm/utils/TextureUtils.js +85 -0
- package/examples/jsm/webxr/OculusHandModel.js +1 -1
- package/examples/jsm/webxr/XRHandMeshModel.js +6 -3
- package/package.json +11 -12
- package/src/Three.js +1 -0
- package/src/audio/AudioContext.js +5 -5
- package/src/cameras/CubeCamera.js +14 -14
- package/src/constants.js +1 -1
- package/src/core/InstancedBufferGeometry.js +1 -7
- package/src/extras/Earcut.js +67 -67
- package/src/helpers/DirectionalLightHelper.js +5 -1
- package/src/helpers/HemisphereLightHelper.js +4 -1
- package/src/helpers/PointLightHelper.js +2 -1
- package/src/helpers/SpotLightHelper.js +4 -2
- package/src/lights/PointLight.js +2 -2
- package/src/lights/SpotLight.js +2 -2
- package/src/loaders/FileLoader.js +4 -1
- package/src/loaders/ObjectLoader.js +5 -1
- package/src/materials/Material.js +1 -1
- package/src/math/Color.js +5 -5
- package/src/math/Matrix3.js +53 -18
- package/src/math/Ray.js +2 -5
- package/src/math/Sphere.js +19 -26
- package/src/objects/InstancedMesh.js +7 -0
- package/src/objects/LOD.js +25 -6
- package/src/renderers/WebGL3DRenderTarget.js +1 -1
- package/src/renderers/WebGLArrayRenderTarget.js +1 -1
- package/src/renderers/WebGLCubeRenderTarget.js +1 -1
- package/src/renderers/WebGLMultipleRenderTargets.js +1 -1
- package/src/renderers/WebGLRenderTarget.js +1 -1
- package/src/renderers/WebGLRenderer.js +36 -62
- package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +0 -4
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +0 -1
- package/src/renderers/shaders/ShaderChunk/lights_lambert_pars_fragment.glsl.js +0 -2
- package/src/renderers/shaders/ShaderChunk/lights_phong_pars_fragment.glsl.js +0 -2
- package/src/renderers/shaders/ShaderChunk/lights_toon_pars_fragment.glsl.js +0 -2
- package/src/renderers/shaders/ShaderChunk/packing.glsl.js +8 -0
- package/src/renderers/shaders/ShaderChunk.js +3 -0
- package/src/renderers/shaders/ShaderLib/background.glsl.js +7 -2
- package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +62 -0
- package/src/renderers/shaders/ShaderLib/cube.glsl.js +4 -6
- package/src/renderers/shaders/ShaderLib.js +20 -6
- package/src/renderers/shaders/UniformsLib.js +1 -1
- package/src/renderers/shaders/UniformsUtils.js +15 -0
- package/src/renderers/webgl/WebGLAttributes.js +2 -0
- package/src/renderers/webgl/WebGLBackground.js +15 -7
- package/src/renderers/webgl/WebGLLights.js +0 -4
- package/src/renderers/webgl/WebGLMaterials.js +2 -1
- package/src/renderers/webgl/WebGLShadowMap.js +3 -1
- package/src/renderers/webgl/WebGLState.js +31 -1
- package/src/renderers/webgl/WebGLTextures.js +71 -18
- package/src/renderers/webgl/WebGLUniforms.js +116 -20
- package/src/renderers/webgl/WebGLUtils.js +1 -1
- package/src/renderers/webxr/WebXRController.js +46 -13
- package/src/renderers/webxr/WebXRManager.js +85 -3
- package/src/scenes/Scene.js +8 -0
- package/src/textures/CompressedArrayTexture.js +18 -0
- package/examples/js/libs/lottie_canvas.js +0 -12751
- package/examples/js/shaders/PixelShader.js +0 -51
- package/examples/jsm/shaders/PixelShader.js +0 -44
|
@@ -56,10 +56,12 @@
|
|
|
56
56
|
this.separableBlurMaterial1.uniforms[ 'kernelRadius' ].value = 1;
|
|
57
57
|
this.separableBlurMaterial2 = this.getSeperableBlurMaterial( MAX_EDGE_GLOW );
|
|
58
58
|
this.separableBlurMaterial2.uniforms[ 'texSize' ].value.set( Math.round( resx / 2 ), Math.round( resy / 2 ) );
|
|
59
|
-
this.separableBlurMaterial2.uniforms[ 'kernelRadius' ].value = MAX_EDGE_GLOW;
|
|
59
|
+
this.separableBlurMaterial2.uniforms[ 'kernelRadius' ].value = MAX_EDGE_GLOW;
|
|
60
60
|
|
|
61
|
-
|
|
61
|
+
// Overlay material
|
|
62
|
+
this.overlayMaterial = this.getOverlayMaterial();
|
|
62
63
|
|
|
64
|
+
// copy material
|
|
63
65
|
if ( THREE.CopyShader === undefined ) console.error( 'THREE.OutlinePass relies on THREE.CopyShader' );
|
|
64
66
|
const copyShader = THREE.CopyShader;
|
|
65
67
|
this.copyUniforms = THREE.UniformsUtils.clone( copyShader.uniforms );
|
|
@@ -81,7 +83,6 @@
|
|
|
81
83
|
this.tempPulseColor1 = new THREE.Color();
|
|
82
84
|
this.tempPulseColor2 = new THREE.Color();
|
|
83
85
|
this.textureMatrix = new THREE.Matrix4();
|
|
84
|
-
|
|
85
86
|
function replaceDepthToViewZ( string, camera ) {
|
|
86
87
|
|
|
87
88
|
const type = camera.isPerspectiveCamera ? 'perspective' : 'orthographic';
|
|
@@ -90,7 +91,6 @@
|
|
|
90
91
|
}
|
|
91
92
|
|
|
92
93
|
}
|
|
93
|
-
|
|
94
94
|
dispose() {
|
|
95
95
|
|
|
96
96
|
this.renderTargetMaskBuffer.dispose();
|
|
@@ -100,9 +100,16 @@
|
|
|
100
100
|
this.renderTargetBlurBuffer2.dispose();
|
|
101
101
|
this.renderTargetEdgeBuffer1.dispose();
|
|
102
102
|
this.renderTargetEdgeBuffer2.dispose();
|
|
103
|
+
this.depthMaterial.dispose();
|
|
104
|
+
this.prepareMaskMaterial.dispose();
|
|
105
|
+
this.edgeDetectionMaterial.dispose();
|
|
106
|
+
this.separableBlurMaterial1.dispose();
|
|
107
|
+
this.separableBlurMaterial2.dispose();
|
|
108
|
+
this.overlayMaterial.dispose();
|
|
109
|
+
this.materialCopy.dispose();
|
|
110
|
+
this.fsQuad.dispose();
|
|
103
111
|
|
|
104
112
|
}
|
|
105
|
-
|
|
106
113
|
setSize( width, height ) {
|
|
107
114
|
|
|
108
115
|
this.renderTargetMaskBuffer.setSize( width, height );
|
|
@@ -120,11 +127,9 @@
|
|
|
120
127
|
this.separableBlurMaterial2.uniforms[ 'texSize' ].value.set( resx, resy );
|
|
121
128
|
|
|
122
129
|
}
|
|
123
|
-
|
|
124
130
|
changeVisibilityOfSelectedObjects( bVisible ) {
|
|
125
131
|
|
|
126
132
|
const cache = this._visibilityCache;
|
|
127
|
-
|
|
128
133
|
function gatherSelectedMeshesCallBack( object ) {
|
|
129
134
|
|
|
130
135
|
if ( object.isMesh ) {
|
|
@@ -152,12 +157,10 @@
|
|
|
152
157
|
}
|
|
153
158
|
|
|
154
159
|
}
|
|
155
|
-
|
|
156
160
|
changeVisibilityOfNonSelectedObjects( bVisible ) {
|
|
157
161
|
|
|
158
162
|
const cache = this._visibilityCache;
|
|
159
163
|
const selectedMeshes = [];
|
|
160
|
-
|
|
161
164
|
function gatherSelectedMeshesCallBack( object ) {
|
|
162
165
|
|
|
163
166
|
if ( object.isMesh ) selectedMeshes.push( object );
|
|
@@ -176,12 +179,11 @@
|
|
|
176
179
|
if ( object.isMesh || object.isSprite ) {
|
|
177
180
|
|
|
178
181
|
// only meshes and sprites are supported by OutlinePass
|
|
179
|
-
let bFound = false;
|
|
180
182
|
|
|
183
|
+
let bFound = false;
|
|
181
184
|
for ( let i = 0; i < selectedMeshes.length; i ++ ) {
|
|
182
185
|
|
|
183
186
|
const selectedObjectId = selectedMeshes[ i ].id;
|
|
184
|
-
|
|
185
187
|
if ( selectedObjectId === object.id ) {
|
|
186
188
|
|
|
187
189
|
bFound = true;
|
|
@@ -194,7 +196,6 @@
|
|
|
194
196
|
if ( bFound === false ) {
|
|
195
197
|
|
|
196
198
|
const visibility = object.visible;
|
|
197
|
-
|
|
198
199
|
if ( bVisible === false || cache.get( object ) === true ) {
|
|
199
200
|
|
|
200
201
|
object.visible = bVisible;
|
|
@@ -209,6 +210,7 @@
|
|
|
209
210
|
|
|
210
211
|
// the visibilty of points and lines is always set to false in order to
|
|
211
212
|
// not affect the outline computation
|
|
213
|
+
|
|
212
214
|
if ( bVisible === true ) {
|
|
213
215
|
|
|
214
216
|
object.visible = cache.get( object ); // restore
|
|
@@ -227,7 +229,6 @@
|
|
|
227
229
|
this.renderScene.traverse( VisibilityChangeCallBack );
|
|
228
230
|
|
|
229
231
|
}
|
|
230
|
-
|
|
231
232
|
updateTextureMatrix() {
|
|
232
233
|
|
|
233
234
|
this.textureMatrix.set( 0.5, 0.0, 0.0, 0.5, 0.0, 0.5, 0.0, 0.5, 0.0, 0.0, 0.5, 0.5, 0.0, 0.0, 0.0, 1.0 );
|
|
@@ -235,7 +236,6 @@
|
|
|
235
236
|
this.textureMatrix.multiply( this.renderCamera.matrixWorldInverse );
|
|
236
237
|
|
|
237
238
|
}
|
|
238
|
-
|
|
239
239
|
render( renderer, writeBuffer, readBuffer, deltaTime, maskActive ) {
|
|
240
240
|
|
|
241
241
|
if ( this.selectedObjects.length > 0 ) {
|
|
@@ -245,24 +245,27 @@
|
|
|
245
245
|
const oldAutoClear = renderer.autoClear;
|
|
246
246
|
renderer.autoClear = false;
|
|
247
247
|
if ( maskActive ) renderer.state.buffers.stencil.setTest( false );
|
|
248
|
-
renderer.setClearColor( 0xffffff, 1 );
|
|
248
|
+
renderer.setClearColor( 0xffffff, 1 );
|
|
249
249
|
|
|
250
|
+
// Make selected objects invisible
|
|
250
251
|
this.changeVisibilityOfSelectedObjects( false );
|
|
251
252
|
const currentBackground = this.renderScene.background;
|
|
252
|
-
this.renderScene.background = null;
|
|
253
|
+
this.renderScene.background = null;
|
|
253
254
|
|
|
255
|
+
// 1. Draw Non Selected objects in the depth buffer
|
|
254
256
|
this.renderScene.overrideMaterial = this.depthMaterial;
|
|
255
257
|
renderer.setRenderTarget( this.renderTargetDepthBuffer );
|
|
256
258
|
renderer.clear();
|
|
257
|
-
renderer.render( this.renderScene, this.renderCamera );
|
|
259
|
+
renderer.render( this.renderScene, this.renderCamera );
|
|
258
260
|
|
|
261
|
+
// Make selected objects visible
|
|
259
262
|
this.changeVisibilityOfSelectedObjects( true );
|
|
263
|
+
this._visibilityCache.clear();
|
|
260
264
|
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
this.updateTextureMatrix(); // Make non selected objects invisible, and draw only the selected objects, by comparing the depth buffer of non selected objects
|
|
265
|
+
// Update Texture Matrix for Depth compare
|
|
266
|
+
this.updateTextureMatrix();
|
|
265
267
|
|
|
268
|
+
// Make non selected objects invisible, and draw only the selected objects, by comparing the depth buffer of non selected objects
|
|
266
269
|
this.changeVisibilityOfNonSelectedObjects( false );
|
|
267
270
|
this.renderScene.overrideMaterial = this.prepareMaskMaterial;
|
|
268
271
|
this.prepareMaskMaterial.uniforms[ 'cameraNearFar' ].value.set( this.renderCamera.near, this.renderCamera.far );
|
|
@@ -273,11 +276,10 @@
|
|
|
273
276
|
renderer.render( this.renderScene, this.renderCamera );
|
|
274
277
|
this.renderScene.overrideMaterial = null;
|
|
275
278
|
this.changeVisibilityOfNonSelectedObjects( true );
|
|
276
|
-
|
|
277
279
|
this._visibilityCache.clear();
|
|
280
|
+
this.renderScene.background = currentBackground;
|
|
278
281
|
|
|
279
|
-
|
|
280
|
-
|
|
282
|
+
// 2. Downsample to Half resolution
|
|
281
283
|
this.fsQuad.material = this.materialCopy;
|
|
282
284
|
this.copyUniforms[ 'tDiffuse' ].value = this.renderTargetMaskBuffer.texture;
|
|
283
285
|
renderer.setRenderTarget( this.renderTargetMaskDownSampleBuffer );
|
|
@@ -285,16 +287,15 @@
|
|
|
285
287
|
this.fsQuad.render( renderer );
|
|
286
288
|
this.tempPulseColor1.copy( this.visibleEdgeColor );
|
|
287
289
|
this.tempPulseColor2.copy( this.hiddenEdgeColor );
|
|
288
|
-
|
|
289
290
|
if ( this.pulsePeriod > 0 ) {
|
|
290
291
|
|
|
291
292
|
const scalar = ( 1 + 0.25 ) / 2 + Math.cos( performance.now() * 0.01 / this.pulsePeriod ) * ( 1.0 - 0.25 ) / 2;
|
|
292
293
|
this.tempPulseColor1.multiplyScalar( scalar );
|
|
293
294
|
this.tempPulseColor2.multiplyScalar( scalar );
|
|
294
295
|
|
|
295
|
-
}
|
|
296
|
-
|
|
296
|
+
}
|
|
297
297
|
|
|
298
|
+
// 3. Apply Edge Detection THREE.Pass
|
|
298
299
|
this.fsQuad.material = this.edgeDetectionMaterial;
|
|
299
300
|
this.edgeDetectionMaterial.uniforms[ 'maskTexture' ].value = this.renderTargetMaskDownSampleBuffer.texture;
|
|
300
301
|
this.edgeDetectionMaterial.uniforms[ 'texSize' ].value.set( this.renderTargetMaskDownSampleBuffer.width, this.renderTargetMaskDownSampleBuffer.height );
|
|
@@ -302,8 +303,9 @@
|
|
|
302
303
|
this.edgeDetectionMaterial.uniforms[ 'hiddenEdgeColor' ].value = this.tempPulseColor2;
|
|
303
304
|
renderer.setRenderTarget( this.renderTargetEdgeBuffer1 );
|
|
304
305
|
renderer.clear();
|
|
305
|
-
this.fsQuad.render( renderer );
|
|
306
|
+
this.fsQuad.render( renderer );
|
|
306
307
|
|
|
308
|
+
// 4. Apply Blur on Half res
|
|
307
309
|
this.fsQuad.material = this.separableBlurMaterial1;
|
|
308
310
|
this.separableBlurMaterial1.uniforms[ 'colorTexture' ].value = this.renderTargetEdgeBuffer1.texture;
|
|
309
311
|
this.separableBlurMaterial1.uniforms[ 'direction' ].value = OutlinePass.BlurDirectionX;
|
|
@@ -315,8 +317,9 @@
|
|
|
315
317
|
this.separableBlurMaterial1.uniforms[ 'direction' ].value = OutlinePass.BlurDirectionY;
|
|
316
318
|
renderer.setRenderTarget( this.renderTargetEdgeBuffer1 );
|
|
317
319
|
renderer.clear();
|
|
318
|
-
this.fsQuad.render( renderer );
|
|
320
|
+
this.fsQuad.render( renderer );
|
|
319
321
|
|
|
322
|
+
// Apply Blur on quarter res
|
|
320
323
|
this.fsQuad.material = this.separableBlurMaterial2;
|
|
321
324
|
this.separableBlurMaterial2.uniforms[ 'colorTexture' ].value = this.renderTargetEdgeBuffer1.texture;
|
|
322
325
|
this.separableBlurMaterial2.uniforms[ 'direction' ].value = OutlinePass.BlurDirectionX;
|
|
@@ -327,8 +330,9 @@
|
|
|
327
330
|
this.separableBlurMaterial2.uniforms[ 'direction' ].value = OutlinePass.BlurDirectionY;
|
|
328
331
|
renderer.setRenderTarget( this.renderTargetEdgeBuffer2 );
|
|
329
332
|
renderer.clear();
|
|
330
|
-
this.fsQuad.render( renderer );
|
|
333
|
+
this.fsQuad.render( renderer );
|
|
331
334
|
|
|
335
|
+
// Blend it additively over the input texture
|
|
332
336
|
this.fsQuad.material = this.overlayMaterial;
|
|
333
337
|
this.overlayMaterial.uniforms[ 'maskTexture' ].value = this.renderTargetMaskBuffer.texture;
|
|
334
338
|
this.overlayMaterial.uniforms[ 'edgeTexture1' ].value = this.renderTargetEdgeBuffer1.texture;
|
|
@@ -355,7 +359,6 @@
|
|
|
355
359
|
}
|
|
356
360
|
|
|
357
361
|
}
|
|
358
|
-
|
|
359
362
|
getPrepareMaskMaterial() {
|
|
360
363
|
|
|
361
364
|
return new THREE.ShaderMaterial( {
|
|
@@ -384,9 +387,19 @@
|
|
|
384
387
|
#include <morphtarget_vertex>
|
|
385
388
|
#include <skinning_vertex>
|
|
386
389
|
#include <project_vertex>
|
|
387
|
-
#include <worldpos_vertex>
|
|
388
390
|
|
|
389
391
|
vPosition = mvPosition;
|
|
392
|
+
|
|
393
|
+
vec4 worldPosition = vec4( transformed, 1.0 );
|
|
394
|
+
|
|
395
|
+
#ifdef USE_INSTANCING
|
|
396
|
+
|
|
397
|
+
worldPosition = instanceMatrix * worldPosition;
|
|
398
|
+
|
|
399
|
+
#endif
|
|
400
|
+
|
|
401
|
+
worldPosition = modelMatrix * worldPosition;
|
|
402
|
+
|
|
390
403
|
projTexCoord = textureMatrix * worldPosition;
|
|
391
404
|
|
|
392
405
|
}`,
|
|
@@ -407,7 +420,6 @@
|
|
|
407
420
|
} );
|
|
408
421
|
|
|
409
422
|
}
|
|
410
|
-
|
|
411
423
|
getEdgeDetectionMaterial() {
|
|
412
424
|
|
|
413
425
|
return new THREE.ShaderMaterial( {
|
|
@@ -457,7 +469,6 @@
|
|
|
457
469
|
} );
|
|
458
470
|
|
|
459
471
|
}
|
|
460
|
-
|
|
461
472
|
getSeperableBlurMaterial( maxRadius ) {
|
|
462
473
|
|
|
463
474
|
return new THREE.ShaderMaterial( {
|
|
@@ -516,7 +527,6 @@
|
|
|
516
527
|
} );
|
|
517
528
|
|
|
518
529
|
}
|
|
519
|
-
|
|
520
530
|
getOverlayMaterial() {
|
|
521
531
|
|
|
522
532
|
return new THREE.ShaderMaterial( {
|
|
@@ -580,7 +590,6 @@
|
|
|
580
590
|
}
|
|
581
591
|
|
|
582
592
|
}
|
|
583
|
-
|
|
584
593
|
OutlinePass.BlurDirectionX = new THREE.Vector2( 1.0, 0.0 );
|
|
585
594
|
OutlinePass.BlurDirectionY = new THREE.Vector2( 0.0, 1.0 );
|
|
586
595
|
|
|
@@ -5,36 +5,37 @@
|
|
|
5
5
|
constructor() {
|
|
6
6
|
|
|
7
7
|
// if set to true, the pass is processed by the composer
|
|
8
|
-
this.enabled = true;
|
|
8
|
+
this.enabled = true;
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
// if set to true, the pass indicates to swap read and write buffer after rendering
|
|
11
|
+
this.needsSwap = true;
|
|
11
12
|
|
|
12
|
-
|
|
13
|
+
// if set to true, the pass clears its buffer before rendering
|
|
14
|
+
this.clear = false;
|
|
13
15
|
|
|
16
|
+
// if set to true, the result of the pass is rendered to screen. This is set automatically by EffectComposer.
|
|
14
17
|
this.renderToScreen = false;
|
|
15
18
|
|
|
16
19
|
}
|
|
17
|
-
|
|
18
20
|
setSize() {}
|
|
19
|
-
|
|
20
21
|
render() {
|
|
21
22
|
|
|
22
23
|
console.error( 'THREE.Pass: .render() must be implemented in derived pass.' );
|
|
23
24
|
|
|
24
25
|
}
|
|
26
|
+
dispose() {}
|
|
25
27
|
|
|
26
|
-
}
|
|
28
|
+
}
|
|
27
29
|
|
|
30
|
+
// Helper for passes that need to fill the viewport with a single quad.
|
|
28
31
|
|
|
29
|
-
const _camera = new THREE.OrthographicCamera( - 1, 1, 1, - 1, 0, 1 );
|
|
32
|
+
const _camera = new THREE.OrthographicCamera( - 1, 1, 1, - 1, 0, 1 );
|
|
30
33
|
|
|
34
|
+
// https://github.com/mrdoob/three.js/pull/21358
|
|
31
35
|
|
|
32
36
|
const _geometry = new THREE.BufferGeometry();
|
|
33
|
-
|
|
34
37
|
_geometry.setAttribute( 'position', new THREE.Float32BufferAttribute( [ - 1, 3, 0, - 1, - 1, 0, 3, - 1, 0 ], 3 ) );
|
|
35
|
-
|
|
36
38
|
_geometry.setAttribute( 'uv', new THREE.Float32BufferAttribute( [ 0, 2, 0, 0, 2, 0 ], 2 ) );
|
|
37
|
-
|
|
38
39
|
class FullScreenQuad {
|
|
39
40
|
|
|
40
41
|
constructor( material ) {
|
|
@@ -42,25 +43,21 @@
|
|
|
42
43
|
this._mesh = new THREE.Mesh( _geometry, material );
|
|
43
44
|
|
|
44
45
|
}
|
|
45
|
-
|
|
46
46
|
dispose() {
|
|
47
47
|
|
|
48
48
|
this._mesh.geometry.dispose();
|
|
49
49
|
|
|
50
50
|
}
|
|
51
|
-
|
|
52
51
|
render( renderer ) {
|
|
53
52
|
|
|
54
53
|
renderer.render( this._mesh, _camera );
|
|
55
54
|
|
|
56
55
|
}
|
|
57
|
-
|
|
58
56
|
get material() {
|
|
59
57
|
|
|
60
58
|
return this._mesh.material;
|
|
61
59
|
|
|
62
60
|
}
|
|
63
|
-
|
|
64
61
|
set material( value ) {
|
|
65
62
|
|
|
66
63
|
this._mesh.material = value;
|
|
@@ -16,15 +16,11 @@
|
|
|
16
16
|
this._oldClearColor = new THREE.Color();
|
|
17
17
|
|
|
18
18
|
}
|
|
19
|
-
|
|
20
|
-
render( renderer, writeBuffer, readBuffer
|
|
21
|
-
/*, deltaTime, maskActive */
|
|
22
|
-
) {
|
|
19
|
+
render( renderer, writeBuffer, readBuffer /*, deltaTime, maskActive */ ) {
|
|
23
20
|
|
|
24
21
|
const oldAutoClear = renderer.autoClear;
|
|
25
22
|
renderer.autoClear = false;
|
|
26
23
|
let oldClearAlpha, oldOverrideMaterial;
|
|
27
|
-
|
|
28
24
|
if ( this.overrideMaterial !== undefined ) {
|
|
29
25
|
|
|
30
26
|
oldOverrideMaterial = this.scene.overrideMaterial;
|
|
@@ -46,11 +42,11 @@
|
|
|
46
42
|
|
|
47
43
|
}
|
|
48
44
|
|
|
49
|
-
renderer.setRenderTarget( this.renderToScreen ? null : readBuffer );
|
|
45
|
+
renderer.setRenderTarget( this.renderToScreen ? null : readBuffer );
|
|
50
46
|
|
|
47
|
+
// TODO: Avoid using autoClear properties, see https://github.com/mrdoob/three.js/pull/15571#issuecomment-465669600
|
|
51
48
|
if ( this.clear ) renderer.clear( renderer.autoClearColor, renderer.autoClearDepth, renderer.autoClearStencil );
|
|
52
49
|
renderer.render( this.scene, this.camera );
|
|
53
|
-
|
|
54
50
|
if ( this.clearColor ) {
|
|
55
51
|
|
|
56
52
|
renderer.setClearColor( this._oldClearColor, oldClearAlpha );
|
|
@@ -40,7 +40,6 @@
|
|
|
40
40
|
} );
|
|
41
41
|
this.depthRenderTarget = this.normalRenderTarget.clone();
|
|
42
42
|
let depthTexture;
|
|
43
|
-
|
|
44
43
|
if ( this.supportsDepthTextureExtension ) {
|
|
45
44
|
|
|
46
45
|
depthTexture = new THREE.DepthTexture();
|
|
@@ -55,7 +54,6 @@
|
|
|
55
54
|
this.depthMaterial.blending = THREE.NoBlending;
|
|
56
55
|
this.normalMaterial = new THREE.MeshNormalMaterial();
|
|
57
56
|
this.normalMaterial.blending = THREE.NoBlending;
|
|
58
|
-
|
|
59
57
|
if ( THREE.SAOShader === undefined ) {
|
|
60
58
|
|
|
61
59
|
console.error( 'THREE.SAOPass relies on THREE.SAOShader' );
|
|
@@ -78,7 +76,6 @@
|
|
|
78
76
|
this.saoMaterial.uniforms[ 'cameraInverseProjectionMatrix' ].value.copy( this.camera.projectionMatrixInverse );
|
|
79
77
|
this.saoMaterial.uniforms[ 'cameraProjectionMatrix' ].value = this.camera.projectionMatrix;
|
|
80
78
|
this.saoMaterial.blending = THREE.NoBlending;
|
|
81
|
-
|
|
82
79
|
if ( THREE.DepthLimitedBlurShader === undefined ) {
|
|
83
80
|
|
|
84
81
|
console.error( 'THREE.SAOPass relies on THREE.DepthLimitedBlurShader' );
|
|
@@ -109,7 +106,6 @@
|
|
|
109
106
|
this.hBlurMaterial.uniforms[ 'tDepth' ].value = this.supportsDepthTextureExtension ? depthTexture : this.depthRenderTarget.texture;
|
|
110
107
|
this.hBlurMaterial.uniforms[ 'size' ].value.set( this.resolution.x, this.resolution.y );
|
|
111
108
|
this.hBlurMaterial.blending = THREE.NoBlending;
|
|
112
|
-
|
|
113
109
|
if ( THREE.CopyShader === undefined ) {
|
|
114
110
|
|
|
115
111
|
console.error( 'THREE.SAOPass relies on THREE.CopyShader' );
|
|
@@ -132,7 +128,6 @@
|
|
|
132
128
|
this.materialCopy.blendSrcAlpha = THREE.DstAlphaFactor;
|
|
133
129
|
this.materialCopy.blendDstAlpha = THREE.ZeroFactor;
|
|
134
130
|
this.materialCopy.blendEquationAlpha = THREE.AddEquation;
|
|
135
|
-
|
|
136
131
|
if ( THREE.UnpackDepthRGBAShader === undefined ) {
|
|
137
132
|
|
|
138
133
|
console.error( 'THREE.SAOPass relies on THREE.UnpackDepthRGBAShader' );
|
|
@@ -148,10 +143,7 @@
|
|
|
148
143
|
this.fsQuad = new THREE.FullScreenQuad( null );
|
|
149
144
|
|
|
150
145
|
}
|
|
151
|
-
|
|
152
|
-
render( renderer, writeBuffer, readBuffer
|
|
153
|
-
/*, deltaTime, maskActive*/
|
|
154
|
-
) {
|
|
146
|
+
render( renderer, writeBuffer, readBuffer /*, deltaTime, maskActive*/ ) {
|
|
155
147
|
|
|
156
148
|
// Rendering readBuffer first when rendering to screen
|
|
157
149
|
if ( this.renderToScreen ) {
|
|
@@ -181,7 +173,8 @@
|
|
|
181
173
|
this.saoMaterial.uniforms[ 'kernelRadius' ].value = this.params.saoKernelRadius;
|
|
182
174
|
this.saoMaterial.uniforms[ 'minResolution' ].value = this.params.saoMinResolution;
|
|
183
175
|
this.saoMaterial.uniforms[ 'cameraNear' ].value = this.camera.near;
|
|
184
|
-
this.saoMaterial.uniforms[ 'cameraFar' ].value = this.camera.far;
|
|
176
|
+
this.saoMaterial.uniforms[ 'cameraFar' ].value = this.camera.far;
|
|
177
|
+
// this.saoMaterial.uniforms['randomSeed'].value = Math.random();
|
|
185
178
|
|
|
186
179
|
const depthCutoff = this.params.saoBlurDepthCutoff * ( this.camera.far - this.camera.near );
|
|
187
180
|
this.vBlurMaterial.uniforms[ 'depthCutoff' ].value = depthCutoff;
|
|
@@ -191,7 +184,6 @@
|
|
|
191
184
|
this.hBlurMaterial.uniforms[ 'cameraNear' ].value = this.camera.near;
|
|
192
185
|
this.hBlurMaterial.uniforms[ 'cameraFar' ].value = this.camera.far;
|
|
193
186
|
this.params.saoBlurRadius = Math.floor( this.params.saoBlurRadius );
|
|
194
|
-
|
|
195
187
|
if ( this.prevStdDev !== this.params.saoBlurStdDev || this.prevNumSamples !== this.params.saoBlurRadius ) {
|
|
196
188
|
|
|
197
189
|
THREE.BlurShaderUtils.configure( this.vBlurMaterial, this.params.saoBlurRadius, this.params.saoBlurStdDev, new THREE.Vector2( 0, 1 ) );
|
|
@@ -199,14 +191,15 @@
|
|
|
199
191
|
this.prevStdDev = this.params.saoBlurStdDev;
|
|
200
192
|
this.prevNumSamples = this.params.saoBlurRadius;
|
|
201
193
|
|
|
202
|
-
}
|
|
203
|
-
|
|
194
|
+
}
|
|
204
195
|
|
|
196
|
+
// Rendering scene to depth texture
|
|
205
197
|
renderer.setClearColor( 0x000000 );
|
|
206
198
|
renderer.setRenderTarget( this.beautyRenderTarget );
|
|
207
199
|
renderer.clear();
|
|
208
|
-
renderer.render( this.scene, this.camera );
|
|
200
|
+
renderer.render( this.scene, this.camera );
|
|
209
201
|
|
|
202
|
+
// Re-render scene if depth texture extension is not supported
|
|
210
203
|
if ( ! this.supportsDepthTextureExtension ) {
|
|
211
204
|
|
|
212
205
|
// Clear rule : far clipping plane in both RGBA and Basic encoding
|
|
@@ -219,11 +212,12 @@
|
|
|
219
212
|
// Clear rule : default normal is facing the camera
|
|
220
213
|
this.renderOverride( renderer, this.normalMaterial, this.normalRenderTarget, 0x7777ff, 1.0 );
|
|
221
214
|
|
|
222
|
-
}
|
|
223
|
-
|
|
215
|
+
}
|
|
224
216
|
|
|
225
|
-
|
|
217
|
+
// Rendering SAO texture
|
|
218
|
+
this.renderPass( renderer, this.saoMaterial, this.saoRenderTarget, 0xffffff, 1.0 );
|
|
226
219
|
|
|
220
|
+
// Blurring SAO texture
|
|
227
221
|
if ( this.params.saoBlur ) {
|
|
228
222
|
|
|
229
223
|
this.renderPass( renderer, this.vBlurMaterial, this.blurIntermediateRenderTarget, 0xffffff, 1.0 );
|
|
@@ -231,8 +225,8 @@
|
|
|
231
225
|
|
|
232
226
|
}
|
|
233
227
|
|
|
234
|
-
let outputMaterial = this.materialCopy;
|
|
235
|
-
|
|
228
|
+
let outputMaterial = this.materialCopy;
|
|
229
|
+
// Setting up SAO rendering
|
|
236
230
|
if ( this.params.output === 3 ) {
|
|
237
231
|
|
|
238
232
|
if ( this.supportsDepthTextureExtension ) {
|
|
@@ -258,9 +252,9 @@
|
|
|
258
252
|
this.materialCopy.uniforms[ 'tDiffuse' ].value = this.saoRenderTarget.texture;
|
|
259
253
|
this.materialCopy.needsUpdate = true;
|
|
260
254
|
|
|
261
|
-
}
|
|
262
|
-
|
|
255
|
+
}
|
|
263
256
|
|
|
257
|
+
// Blending depends on output, only want a THREE.CustomBlending when showing SAO
|
|
264
258
|
if ( this.params.output === 0 ) {
|
|
265
259
|
|
|
266
260
|
outputMaterial.blending = THREE.CustomBlending;
|
|
@@ -269,25 +263,24 @@
|
|
|
269
263
|
|
|
270
264
|
outputMaterial.blending = THREE.NoBlending;
|
|
271
265
|
|
|
272
|
-
}
|
|
273
|
-
|
|
266
|
+
}
|
|
274
267
|
|
|
268
|
+
// Rendering SAOPass result on top of previous pass
|
|
275
269
|
this.renderPass( renderer, outputMaterial, this.renderToScreen ? null : readBuffer );
|
|
276
270
|
renderer.setClearColor( this._oldClearColor, this.oldClearAlpha );
|
|
277
271
|
renderer.autoClear = oldAutoClear;
|
|
278
272
|
|
|
279
273
|
}
|
|
280
|
-
|
|
281
274
|
renderPass( renderer, passMaterial, renderTarget, clearColor, clearAlpha ) {
|
|
282
275
|
|
|
283
276
|
// save original state
|
|
284
277
|
renderer.getClearColor( this.originalClearColor );
|
|
285
278
|
const originalClearAlpha = renderer.getClearAlpha();
|
|
286
279
|
const originalAutoClear = renderer.autoClear;
|
|
287
|
-
renderer.setRenderTarget( renderTarget );
|
|
280
|
+
renderer.setRenderTarget( renderTarget );
|
|
288
281
|
|
|
282
|
+
// setup pass state
|
|
289
283
|
renderer.autoClear = false;
|
|
290
|
-
|
|
291
284
|
if ( clearColor !== undefined && clearColor !== null ) {
|
|
292
285
|
|
|
293
286
|
renderer.setClearColor( clearColor );
|
|
@@ -297,14 +290,14 @@
|
|
|
297
290
|
}
|
|
298
291
|
|
|
299
292
|
this.fsQuad.material = passMaterial;
|
|
300
|
-
this.fsQuad.render( renderer );
|
|
293
|
+
this.fsQuad.render( renderer );
|
|
301
294
|
|
|
295
|
+
// restore original state
|
|
302
296
|
renderer.autoClear = originalAutoClear;
|
|
303
297
|
renderer.setClearColor( this.originalClearColor );
|
|
304
298
|
renderer.setClearAlpha( originalClearAlpha );
|
|
305
299
|
|
|
306
300
|
}
|
|
307
|
-
|
|
308
301
|
renderOverride( renderer, overrideMaterial, renderTarget, clearColor, clearAlpha ) {
|
|
309
302
|
|
|
310
303
|
renderer.getClearColor( this.originalClearColor );
|
|
@@ -314,7 +307,6 @@
|
|
|
314
307
|
renderer.autoClear = false;
|
|
315
308
|
clearColor = overrideMaterial.clearColor || clearColor;
|
|
316
309
|
clearAlpha = overrideMaterial.clearAlpha || clearAlpha;
|
|
317
|
-
|
|
318
310
|
if ( clearColor !== undefined && clearColor !== null ) {
|
|
319
311
|
|
|
320
312
|
renderer.setClearColor( clearColor );
|
|
@@ -325,14 +317,14 @@
|
|
|
325
317
|
|
|
326
318
|
this.scene.overrideMaterial = overrideMaterial;
|
|
327
319
|
renderer.render( this.scene, this.camera );
|
|
328
|
-
this.scene.overrideMaterial = null;
|
|
320
|
+
this.scene.overrideMaterial = null;
|
|
329
321
|
|
|
322
|
+
// restore original state
|
|
330
323
|
renderer.autoClear = originalAutoClear;
|
|
331
324
|
renderer.setClearColor( this.originalClearColor );
|
|
332
325
|
renderer.setClearAlpha( originalClearAlpha );
|
|
333
326
|
|
|
334
327
|
}
|
|
335
|
-
|
|
336
328
|
setSize( width, height ) {
|
|
337
329
|
|
|
338
330
|
this.beautyRenderTarget.setSize( width, height );
|
|
@@ -350,9 +342,25 @@
|
|
|
350
342
|
this.hBlurMaterial.needsUpdate = true;
|
|
351
343
|
|
|
352
344
|
}
|
|
345
|
+
dispose() {
|
|
346
|
+
|
|
347
|
+
this.saoRenderTarget.dispose();
|
|
348
|
+
this.blurIntermediateRenderTarget.dispose();
|
|
349
|
+
this.beautyRenderTarget.dispose();
|
|
350
|
+
this.normalRenderTarget.dispose();
|
|
351
|
+
this.depthRenderTarget.dispose();
|
|
352
|
+
this.depthMaterial.dispose();
|
|
353
|
+
this.normalMaterial.dispose();
|
|
354
|
+
this.saoMaterial.dispose();
|
|
355
|
+
this.vBlurMaterial.dispose();
|
|
356
|
+
this.hBlurMaterial.dispose();
|
|
357
|
+
this.materialCopy.dispose();
|
|
358
|
+
this.depthCopy.dispose();
|
|
359
|
+
this.fsQuad.dispose();
|
|
353
360
|
|
|
354
|
-
|
|
361
|
+
}
|
|
355
362
|
|
|
363
|
+
}
|
|
356
364
|
SAOPass.OUTPUT = {
|
|
357
365
|
'Beauty': 1,
|
|
358
366
|
'Default': 0,
|