super-three 0.175.0 → 0.177.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/README.md +3 -3
- package/build/three.cjs +7631 -6743
- package/build/three.core.js +7496 -6758
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +172 -22
- package/build/three.module.min.js +1 -1
- package/build/three.tsl.js +14 -6
- package/build/three.tsl.min.js +1 -1
- package/build/three.webgpu.js +3948 -1678
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +3941 -1678
- package/build/three.webgpu.nodes.min.js +1 -1
- package/examples/jsm/Addons.js +0 -1
- package/examples/jsm/animation/AnimationClipCreator.js +1 -0
- package/examples/jsm/animation/CCDIKSolver.js +6 -3
- package/examples/jsm/capabilities/WebGL.js +1 -0
- package/examples/jsm/capabilities/WebGPU.js +1 -0
- package/examples/jsm/controls/ArcballControls.js +14 -3
- package/examples/jsm/controls/DragControls.js +1 -0
- package/examples/jsm/controls/FirstPersonControls.js +1 -0
- package/examples/jsm/controls/FlyControls.js +1 -0
- package/examples/jsm/controls/MapControls.js +1 -0
- package/examples/jsm/controls/OrbitControls.js +1 -0
- package/examples/jsm/controls/PointerLockControls.js +5 -3
- package/examples/jsm/controls/TrackballControls.js +1 -0
- package/examples/jsm/controls/TransformControls.js +1 -0
- package/examples/jsm/csm/CSM.js +2 -0
- package/examples/jsm/csm/CSMFrustum.js +2 -0
- package/examples/jsm/csm/CSMHelper.js +1 -0
- package/examples/jsm/csm/CSMShader.js +4 -1
- package/examples/jsm/csm/CSMShadowNode.js +18 -4
- package/examples/jsm/curves/CurveExtras.js +14 -0
- package/examples/jsm/curves/NURBSCurve.js +1 -0
- package/examples/jsm/curves/NURBSSurface.js +2 -0
- package/examples/jsm/curves/NURBSUtils.js +4 -1
- package/examples/jsm/curves/NURBSVolume.js +2 -0
- package/examples/jsm/effects/AnaglyphEffect.js +2 -0
- package/examples/jsm/effects/AsciiEffect.js +2 -0
- package/examples/jsm/effects/OutlineEffect.js +2 -0
- package/examples/jsm/effects/ParallaxBarrierEffect.js +2 -0
- package/examples/jsm/effects/StereoEffect.js +2 -0
- package/examples/jsm/environments/DebugEnvironment.js +1 -0
- package/examples/jsm/environments/RoomEnvironment.js +49 -35
- package/examples/jsm/exporters/DRACOExporter.js +4 -2
- package/examples/jsm/exporters/EXRExporter.js +2 -0
- package/examples/jsm/exporters/GLTFExporter.js +7 -4
- package/examples/jsm/exporters/KTX2Exporter.js +2 -0
- package/examples/jsm/exporters/OBJExporter.js +3 -1
- package/examples/jsm/exporters/PLYExporter.js +4 -2
- package/examples/jsm/exporters/STLExporter.js +2 -0
- package/examples/jsm/exporters/USDZExporter.js +12 -10
- package/examples/jsm/geometries/BoxLineGeometry.js +1 -0
- package/examples/jsm/geometries/ConvexGeometry.js +1 -0
- package/examples/jsm/geometries/DecalGeometry.js +1 -0
- package/examples/jsm/geometries/ParametricFunctions.js +4 -1
- package/examples/jsm/geometries/ParametricGeometry.js +1 -0
- package/examples/jsm/geometries/RoundedBoxGeometry.js +1 -0
- package/examples/jsm/geometries/TeapotGeometry.js +1 -0
- package/examples/jsm/geometries/TextGeometry.js +1 -0
- package/examples/jsm/helpers/LightProbeHelper.js +1 -0
- package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -0
- package/examples/jsm/helpers/OctreeHelper.js +1 -0
- package/examples/jsm/helpers/PositionalAudioHelper.js +1 -0
- package/examples/jsm/helpers/RapierHelper.js +59 -0
- package/examples/jsm/helpers/RectAreaLightHelper.js +1 -0
- package/examples/jsm/helpers/TextureHelper.js +1 -0
- package/examples/jsm/helpers/TextureHelperGPU.js +5 -4
- package/examples/jsm/helpers/VertexNormalsHelper.js +1 -0
- package/examples/jsm/helpers/VertexTangentsHelper.js +1 -0
- package/examples/jsm/helpers/ViewHelper.js +1 -0
- package/examples/jsm/interactive/HTMLMesh.js +7 -0
- package/examples/jsm/interactive/InteractiveGroup.js +1 -0
- package/examples/jsm/interactive/SelectionBox.js +2 -0
- package/examples/jsm/interactive/SelectionHelper.js +2 -0
- package/examples/jsm/lighting/TiledLighting.js +1 -0
- package/examples/jsm/lights/LightProbeGenerator.js +1 -0
- package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -0
- package/examples/jsm/lights/RectAreaLightUniformsLib.js +1 -0
- package/examples/jsm/lines/Line2.js +1 -0
- package/examples/jsm/lines/LineGeometry.js +1 -0
- package/examples/jsm/lines/LineMaterial.js +4 -4
- package/examples/jsm/lines/LineSegments2.js +1 -0
- package/examples/jsm/lines/LineSegmentsGeometry.js +1 -0
- package/examples/jsm/lines/Wireframe.js +1 -0
- package/examples/jsm/lines/WireframeGeometry2.js +1 -0
- package/examples/jsm/lines/webgpu/Line2.js +1 -0
- package/examples/jsm/lines/webgpu/LineSegments2.js +3 -1
- package/examples/jsm/lines/webgpu/Wireframe.js +1 -0
- package/examples/jsm/loaders/3DMLoader.js +1 -0
- package/examples/jsm/loaders/3MFLoader.js +1 -0
- package/examples/jsm/loaders/AMFLoader.js +1 -0
- package/examples/jsm/loaders/BVHLoader.js +1 -0
- package/examples/jsm/loaders/ColladaLoader.js +5 -4
- package/examples/jsm/loaders/DDSLoader.js +1 -0
- package/examples/jsm/loaders/DRACOLoader.js +2 -1
- package/examples/jsm/loaders/EXRLoader.js +1 -0
- package/examples/jsm/loaders/FBXLoader.js +24 -22
- package/examples/jsm/loaders/FontLoader.js +1 -0
- package/examples/jsm/loaders/GCodeLoader.js +1 -0
- package/examples/jsm/loaders/GLTFLoader.js +10 -82
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +1 -0
- package/examples/jsm/loaders/IESLoader.js +1 -0
- package/examples/jsm/loaders/KMZLoader.js +1 -0
- package/examples/jsm/loaders/KTX2Loader.js +67 -26
- package/examples/jsm/loaders/KTXLoader.js +1 -0
- package/examples/jsm/loaders/LDrawLoader.js +55 -3
- package/examples/jsm/loaders/LUT3dlLoader.js +1 -0
- package/examples/jsm/loaders/LUTCubeLoader.js +1 -0
- package/examples/jsm/loaders/LUTImageLoader.js +1 -0
- package/examples/jsm/loaders/LWOLoader.js +1 -13
- package/examples/jsm/loaders/LottieLoader.js +15 -0
- package/examples/jsm/loaders/MD2Loader.js +1 -0
- package/examples/jsm/loaders/MDDLoader.js +1 -0
- package/examples/jsm/loaders/MTLLoader.js +4 -3
- package/examples/jsm/loaders/MaterialXLoader.js +1 -0
- package/examples/jsm/loaders/NRRDLoader.js +1 -0
- package/examples/jsm/loaders/OBJLoader.js +1 -0
- package/examples/jsm/loaders/PCDLoader.js +122 -19
- package/examples/jsm/loaders/PDBLoader.js +1 -0
- package/examples/jsm/loaders/PLYLoader.js +1 -0
- package/examples/jsm/loaders/PVRLoader.js +1 -0
- package/examples/jsm/loaders/RGBELoader.js +1 -0
- package/examples/jsm/loaders/RGBMLoader.js +1 -0
- package/examples/jsm/loaders/STLLoader.js +1 -0
- package/examples/jsm/loaders/SVGLoader.js +1 -0
- package/examples/jsm/loaders/TDSLoader.js +1 -0
- package/examples/jsm/loaders/TGALoader.js +1 -0
- package/examples/jsm/loaders/TIFFLoader.js +1 -0
- package/examples/jsm/loaders/TTFLoader.js +1 -0
- package/examples/jsm/loaders/USDZLoader.js +1 -0
- package/examples/jsm/loaders/UltraHDRLoader.js +1 -0
- package/examples/jsm/loaders/VOXLoader.js +1 -0
- package/examples/jsm/loaders/VRMLLoader.js +3 -2
- package/examples/jsm/loaders/VTKLoader.js +1 -0
- package/examples/jsm/loaders/XYZLoader.js +1 -0
- package/examples/jsm/loaders/lwo/IFFParser.js +74 -74
- package/examples/jsm/materials/LDrawConditionalLineMaterial.js +1 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +1 -0
- package/examples/jsm/materials/MeshPostProcessingMaterial.js +1 -0
- package/examples/jsm/math/Capsule.js +2 -0
- package/examples/jsm/math/ColorConverter.js +1 -0
- package/examples/jsm/math/ConvexHull.js +2 -0
- package/examples/jsm/math/ImprovedNoise.js +19 -14
- package/examples/jsm/math/Lut.js +2 -0
- package/examples/jsm/math/MeshSurfaceSampler.js +2 -0
- package/examples/jsm/math/OBB.js +2 -0
- package/examples/jsm/math/Octree.js +20 -1
- package/examples/jsm/math/SimplexNoise.js +2 -0
- package/examples/jsm/misc/ConvexObjectBreaker.js +3 -1
- package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
- package/examples/jsm/misc/Gyroscope.js +1 -0
- package/examples/jsm/misc/MD2Character.js +2 -0
- package/examples/jsm/misc/MD2CharacterComplex.js +5 -3
- package/examples/jsm/misc/MorphAnimMesh.js +1 -0
- package/examples/jsm/misc/MorphBlendMesh.js +1 -0
- package/examples/jsm/misc/ProgressiveLightMap.js +2 -0
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +2 -0
- package/examples/jsm/misc/RollerCoaster.js +5 -0
- package/examples/jsm/misc/Timer.js +2 -0
- package/examples/jsm/misc/TubePainter.js +1 -0
- package/examples/jsm/misc/Volume.js +2 -0
- package/examples/jsm/misc/VolumeSlice.js +1 -0
- package/examples/jsm/modifiers/CurveModifier.js +3 -0
- package/examples/jsm/modifiers/CurveModifierGPU.js +2 -0
- package/examples/jsm/modifiers/EdgeSplitModifier.js +2 -0
- package/examples/jsm/modifiers/SimplifyModifier.js +2 -0
- package/examples/jsm/modifiers/TessellateModifier.js +2 -0
- package/examples/jsm/objects/GroundedSkybox.js +1 -0
- package/examples/jsm/objects/Lensflare.js +3 -0
- package/examples/jsm/objects/LensflareMesh.js +1 -0
- package/examples/jsm/objects/MarchingCubes.js +2 -0
- package/examples/jsm/objects/Reflector.js +1 -0
- package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
- package/examples/jsm/objects/Refractor.js +1 -0
- package/examples/jsm/objects/ShadowMesh.js +1 -0
- package/examples/jsm/objects/Sky.js +2 -1
- package/examples/jsm/objects/SkyMesh.js +20 -17
- package/examples/jsm/objects/Water.js +1 -0
- package/examples/jsm/objects/Water2.js +1 -0
- package/examples/jsm/objects/Water2Mesh.js +3 -1
- package/examples/jsm/objects/WaterMesh.js +2 -1
- package/examples/jsm/physics/AmmoPhysics.js +1 -0
- package/examples/jsm/physics/JoltPhysics.js +1 -0
- package/examples/jsm/physics/RapierPhysics.js +58 -1
- package/examples/jsm/postprocessing/AfterimagePass.js +20 -2
- package/examples/jsm/postprocessing/BloomPass.js +2 -1
- package/examples/jsm/postprocessing/BokehPass.js +2 -1
- package/examples/jsm/postprocessing/ClearPass.js +1 -0
- package/examples/jsm/postprocessing/CubeTexturePass.js +1 -0
- package/examples/jsm/postprocessing/DotScreenPass.js +1 -0
- package/examples/jsm/postprocessing/EffectComposer.js +5 -6
- package/examples/jsm/postprocessing/FXAAPass.js +40 -0
- package/examples/jsm/postprocessing/FilmPass.js +1 -0
- package/examples/jsm/postprocessing/GTAOPass.js +4 -3
- package/examples/jsm/postprocessing/GlitchPass.js +2 -1
- package/examples/jsm/postprocessing/HalftonePass.js +2 -1
- package/examples/jsm/postprocessing/LUTPass.js +1 -0
- package/examples/jsm/postprocessing/MaskPass.js +1 -0
- package/examples/jsm/postprocessing/OutlinePass.js +5 -2
- package/examples/jsm/postprocessing/OutputPass.js +1 -0
- package/examples/jsm/postprocessing/Pass.js +3 -1
- package/examples/jsm/postprocessing/RenderPass.js +1 -0
- package/examples/jsm/postprocessing/RenderPixelatedPass.js +2 -1
- package/examples/jsm/postprocessing/RenderTransitionPass.js +4 -3
- package/examples/jsm/postprocessing/SAOPass.js +3 -2
- package/examples/jsm/postprocessing/SMAAPass.js +3 -2
- package/examples/jsm/postprocessing/SSAARenderPass.js +2 -1
- package/examples/jsm/postprocessing/SSAOPass.js +2 -1
- package/examples/jsm/postprocessing/SSRPass.js +4 -3
- package/examples/jsm/postprocessing/SavePass.js +2 -1
- package/examples/jsm/postprocessing/ShaderPass.js +1 -0
- package/examples/jsm/postprocessing/TAARenderPass.js +1 -0
- package/examples/jsm/postprocessing/TexturePass.js +1 -0
- package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -1
- package/examples/jsm/renderers/CSS2DRenderer.js +3 -0
- package/examples/jsm/renderers/CSS3DRenderer.js +4 -0
- package/examples/jsm/renderers/Projector.js +2 -0
- package/examples/jsm/renderers/SVGRenderer.js +3 -0
- package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +4 -1
- package/examples/jsm/shaders/AfterimageShader.js +4 -1
- package/examples/jsm/shaders/BasicShader.js +4 -1
- package/examples/jsm/shaders/BleachBypassShader.js +4 -1
- package/examples/jsm/shaders/BlendShader.js +4 -1
- package/examples/jsm/shaders/BokehShader.js +4 -1
- package/examples/jsm/shaders/BokehShader2.js +4 -1
- package/examples/jsm/shaders/BrightnessContrastShader.js +4 -1
- package/examples/jsm/shaders/ColorCorrectionShader.js +4 -1
- package/examples/jsm/shaders/ColorifyShader.js +4 -1
- package/examples/jsm/shaders/ConvolutionShader.js +4 -1
- package/examples/jsm/shaders/CopyShader.js +4 -1
- package/examples/jsm/shaders/DOFMipMapShader.js +4 -1
- package/examples/jsm/shaders/DepthLimitedBlurShader.js +4 -1
- package/examples/jsm/shaders/DigitalGlitch.js +4 -1
- package/examples/jsm/shaders/DotScreenShader.js +4 -1
- package/examples/jsm/shaders/ExposureShader.js +4 -1
- package/examples/jsm/shaders/FXAAShader.js +4 -1
- package/examples/jsm/shaders/FilmShader.js +4 -1
- package/examples/jsm/shaders/FocusShader.js +4 -1
- package/examples/jsm/shaders/FreiChenShader.js +4 -1
- package/examples/jsm/shaders/GTAOShader.js +4 -1
- package/examples/jsm/shaders/GammaCorrectionShader.js +4 -1
- package/examples/jsm/shaders/GodRaysShader.js +4 -1
- package/examples/jsm/shaders/HalftoneShader.js +4 -1
- package/examples/jsm/shaders/HorizontalBlurShader.js +4 -1
- package/examples/jsm/shaders/HorizontalTiltShiftShader.js +4 -1
- package/examples/jsm/shaders/HueSaturationShader.js +4 -1
- package/examples/jsm/shaders/KaleidoShader.js +4 -1
- package/examples/jsm/shaders/LuminosityHighPassShader.js +4 -1
- package/examples/jsm/shaders/LuminosityShader.js +4 -1
- package/examples/jsm/shaders/MirrorShader.js +4 -1
- package/examples/jsm/shaders/NormalMapShader.js +4 -1
- package/examples/jsm/shaders/OutputShader.js +4 -1
- package/examples/jsm/shaders/PoissonDenoiseShader.js +4 -1
- package/examples/jsm/shaders/RGBShiftShader.js +4 -1
- package/examples/jsm/shaders/SAOShader.js +4 -1
- package/examples/jsm/shaders/SMAAShader.js +1 -0
- package/examples/jsm/shaders/SSAOShader.js +4 -1
- package/examples/jsm/shaders/SSRShader.js +1 -0
- package/examples/jsm/shaders/SepiaShader.js +4 -1
- package/examples/jsm/shaders/SobelOperatorShader.js +4 -1
- package/examples/jsm/shaders/SubsurfaceScatteringShader.js +4 -1
- package/examples/jsm/shaders/TechnicolorShader.js +4 -1
- package/examples/jsm/shaders/ToonShader.js +2 -1
- package/examples/jsm/shaders/TriangleBlurShader.js +4 -1
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +4 -1
- package/examples/jsm/shaders/VelocityShader.js +4 -1
- package/examples/jsm/shaders/VerticalBlurShader.js +4 -1
- package/examples/jsm/shaders/VerticalTiltShiftShader.js +4 -1
- package/examples/jsm/shaders/VignetteShader.js +4 -1
- package/examples/jsm/shaders/VolumeShader.js +5 -2
- package/examples/jsm/shaders/WaterRefractionShader.js +4 -1
- package/examples/jsm/textures/FlakesTexture.js +2 -0
- package/examples/jsm/transpiler/GLSLDecoder.js +1 -2
- package/examples/jsm/transpiler/TSLEncoder.js +52 -8
- package/examples/jsm/transpiler/Transpiler.js +2 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +2 -3
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +1 -0
- package/examples/jsm/tsl/display/AnamorphicNode.js +5 -4
- package/examples/jsm/tsl/display/BloomNode.js +1 -0
- package/examples/jsm/tsl/display/DenoiseNode.js +33 -33
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +1 -0
- package/examples/jsm/tsl/display/DotScreenNode.js +1 -0
- package/examples/jsm/tsl/display/FXAANode.js +3 -2
- package/examples/jsm/tsl/display/FilmNode.js +1 -0
- package/examples/jsm/tsl/display/GTAONode.js +1 -0
- package/examples/jsm/tsl/display/GaussianBlurNode.js +2 -27
- package/examples/jsm/tsl/display/LensflareNode.js +1 -0
- package/examples/jsm/tsl/display/Lut3DNode.js +1 -0
- package/examples/jsm/tsl/display/OutlineNode.js +1 -0
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +1 -0
- package/examples/jsm/tsl/display/PixelationPassNode.js +1 -0
- package/examples/jsm/tsl/display/RGBShiftNode.js +1 -0
- package/examples/jsm/tsl/display/SMAANode.js +9 -8
- package/examples/jsm/tsl/display/SSAAPassNode.js +3 -2
- package/examples/jsm/tsl/display/SSRNode.js +1 -0
- package/examples/jsm/tsl/display/SobelOperatorNode.js +1 -0
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +1 -0
- package/examples/jsm/tsl/display/StereoPassNode.js +1 -0
- package/examples/jsm/tsl/display/TRAAPassNode.js +5 -4
- package/examples/jsm/tsl/display/TransitionNode.js +1 -0
- package/examples/jsm/tsl/display/hashBlur.js +28 -6
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +4 -3
- package/examples/jsm/tsl/math/Bayer.js +4 -1
- package/examples/jsm/tsl/shadows/TileShadowNode.js +456 -0
- package/examples/jsm/tsl/shadows/TileShadowNodeHelper.js +212 -0
- package/examples/jsm/tsl/utils/Raymarching.js +6 -3
- package/examples/jsm/utils/BufferGeometryUtils.js +4 -1
- package/examples/jsm/utils/CameraUtils.js +4 -1
- package/examples/jsm/utils/GeometryCompressionUtils.js +4 -1
- package/examples/jsm/utils/GeometryUtils.js +4 -1
- package/examples/jsm/utils/LDrawUtils.js +2 -0
- package/examples/jsm/utils/SceneOptimizer.js +2 -0
- package/examples/jsm/utils/SceneUtils.js +4 -1
- package/examples/jsm/utils/ShadowMapViewer.js +2 -0
- package/examples/jsm/utils/ShadowMapViewerGPU.js +2 -0
- package/examples/jsm/utils/SkeletonUtils.js +4 -1
- package/examples/jsm/utils/SortUtils.js +4 -1
- package/examples/jsm/utils/UVsDebug.js +4 -1
- package/examples/jsm/utils/WebGLTextureUtils.js +4 -1
- package/examples/jsm/utils/WebGPUTextureUtils.js +4 -1
- package/examples/jsm/utils/WorkerPool.js +2 -0
- package/examples/jsm/webxr/ARButton.js +1 -0
- package/examples/jsm/webxr/OculusHandModel.js +1 -0
- package/examples/jsm/webxr/OculusHandPointerModel.js +1 -0
- package/examples/jsm/webxr/Text2D.js +4 -1
- package/examples/jsm/webxr/VRButton.js +1 -0
- package/examples/jsm/webxr/XRButton.js +1 -0
- package/examples/jsm/webxr/XRControllerModelFactory.js +2 -0
- package/examples/jsm/webxr/XREstimatedLight.js +1 -0
- package/examples/jsm/webxr/XRHandMeshModel.js +2 -0
- package/examples/jsm/webxr/XRHandModelFactory.js +2 -0
- package/examples/jsm/webxr/XRHandPrimitiveModel.js +2 -0
- package/examples/jsm/webxr/XRPlanes.js +1 -0
- package/package.json +6 -4
- package/src/Three.Core.js +1 -1
- package/src/Three.TSL.js +13 -5
- package/src/Three.WebGPU.Nodes.js +1 -0
- package/src/Three.WebGPU.js +1 -0
- package/src/audio/AudioListener.js +13 -10
- package/src/cameras/ArrayCamera.js +9 -1
- package/src/constants.js +47 -20
- package/src/core/BufferAttribute.js +1 -1
- package/src/core/BufferGeometry.js +2 -5
- package/src/core/Object3D.js +22 -21
- package/src/core/RenderTarget.js +65 -21
- package/src/core/RenderTarget3D.js +1 -0
- package/src/extras/TextureUtils.js +1 -5
- package/src/extras/core/Curve.js +1 -1
- package/src/geometries/CapsuleGeometry.js +167 -17
- package/src/geometries/ExtrudeGeometry.js +39 -29
- package/src/helpers/ArrowHelper.js +2 -2
- package/src/helpers/SkeletonHelper.js +1 -1
- package/src/lights/LightShadow.js +14 -0
- package/src/lights/SpotLightShadow.js +9 -1
- package/src/lights/webgpu/ProjectorLight.js +46 -0
- package/src/loaders/BufferGeometryLoader.js +1 -10
- package/src/loaders/ImageBitmapLoader.js +21 -5
- package/src/loaders/ObjectLoader.js +44 -16
- package/src/loaders/nodes/NodeObjectLoader.js +2 -2
- package/src/materials/Material.js +1 -7
- package/src/materials/nodes/NodeMaterial.js +81 -18
- package/src/materials/nodes/manager/NodeMaterialObserver.js +20 -2
- package/src/math/Box3.js +28 -0
- package/src/math/Color.js +7 -7
- package/src/math/ColorManagement.js +22 -3
- package/src/math/FrustumArray.js +253 -0
- package/src/math/Ray.js +2 -0
- package/src/math/Sphere.js +28 -0
- package/src/nodes/Nodes.js +1 -0
- package/src/nodes/TSL.js +1 -0
- package/src/nodes/accessors/Bitangent.js +31 -9
- package/src/nodes/accessors/Camera.js +31 -4
- package/src/nodes/accessors/CubeTextureNode.js +50 -2
- package/src/nodes/accessors/InstanceNode.js +5 -4
- package/src/nodes/accessors/Lights.js +2 -2
- package/src/nodes/accessors/MaterialNode.js +4 -0
- package/src/nodes/accessors/ModelNode.js +1 -1
- package/src/nodes/accessors/Normal.js +26 -6
- package/src/nodes/accessors/Object3DNode.js +6 -7
- package/src/nodes/accessors/Position.js +14 -4
- package/src/nodes/accessors/ReferenceBaseNode.js +1 -1
- package/src/nodes/accessors/ReferenceNode.js +1 -1
- package/src/nodes/accessors/SkinningNode.js +3 -2
- package/src/nodes/accessors/StorageBufferNode.js +25 -0
- package/src/nodes/accessors/StorageTextureNode.js +14 -3
- package/src/nodes/accessors/TextureNode.js +59 -8
- package/src/nodes/accessors/VelocityNode.js +1 -0
- package/src/nodes/accessors/VertexColorNode.js +4 -4
- package/src/nodes/code/CodeNode.js +8 -11
- package/src/nodes/core/AssignNode.js +27 -5
- package/src/nodes/core/AttributeNode.js +2 -2
- package/src/nodes/core/CacheNode.js +14 -0
- package/src/nodes/core/ContextNode.js +7 -3
- package/src/nodes/core/Node.js +68 -19
- package/src/nodes/core/NodeBuilder.js +100 -12
- package/src/nodes/core/NodeUtils.js +42 -0
- package/src/nodes/core/NodeVarying.js +19 -1
- package/src/nodes/core/PropertyNode.js +8 -12
- package/src/nodes/core/StackNode.js +127 -2
- package/src/nodes/core/StructTypeNode.js +26 -4
- package/src/nodes/core/VarNode.js +11 -2
- package/src/nodes/core/VaryingNode.js +40 -21
- package/src/nodes/display/BlendModes.js +42 -1
- package/src/nodes/display/ColorSpaceNode.js +4 -27
- package/src/nodes/display/PassNode.js +8 -11
- package/src/nodes/functions/ShadowMaskModel.js +5 -1
- package/src/nodes/functions/material/getParallaxCorrectNormal.js +1 -1
- package/src/nodes/gpgpu/AtomicFunctionNode.js +28 -10
- package/src/nodes/gpgpu/BarrierNode.js +3 -3
- package/src/nodes/gpgpu/ComputeNode.js +1 -1
- package/src/nodes/lighting/AnalyticLightNode.js +7 -13
- package/src/nodes/lighting/HemisphereLightNode.js +2 -2
- package/src/nodes/lighting/IESSpotLightNode.js +2 -1
- package/src/nodes/lighting/LightsNode.js +25 -7
- package/src/nodes/lighting/ProjectorLightNode.js +78 -0
- package/src/nodes/lighting/ShadowBaseNode.js +1 -12
- package/src/nodes/lighting/ShadowFilterNode.js +274 -0
- package/src/nodes/lighting/ShadowNode.js +172 -240
- package/src/nodes/lighting/SpotLightNode.js +44 -7
- package/src/nodes/materialx/lib/mx_noise.js +1 -1
- package/src/nodes/math/MathNode.js +56 -20
- package/src/nodes/math/OperatorNode.js +109 -82
- package/src/nodes/shapes/Shapes.js +5 -4
- package/src/nodes/tsl/TSLCore.js +140 -49
- package/src/nodes/utils/DebugNode.js +15 -3
- package/src/nodes/utils/Discard.js +2 -2
- package/src/nodes/utils/LoopNode.js +64 -17
- package/src/nodes/utils/ReflectorNode.js +67 -4
- package/src/objects/BatchedMesh.js +16 -4
- package/src/objects/Mesh.js +9 -0
- package/src/objects/Skeleton.js +1 -1
- package/src/objects/Sprite.js +9 -0
- package/src/renderers/WebGL3DRenderTarget.js +1 -0
- package/src/renderers/WebGLArrayRenderTarget.js +1 -0
- package/src/renderers/WebGLCubeRenderTarget.js +2 -4
- package/src/renderers/WebGLRenderer.js +21 -10
- package/src/renderers/common/Animation.js +2 -2
- package/src/renderers/common/Background.js +11 -0
- package/src/renderers/common/RenderList.js +0 -4
- package/src/renderers/common/RenderObject.js +12 -1
- package/src/renderers/common/Renderer.js +116 -8
- package/src/renderers/common/Textures.js +15 -21
- package/src/renderers/common/TimestampQueryPool.js +1 -0
- package/src/renderers/common/Uniform.js +1 -1
- package/src/renderers/common/UniformsGroup.js +14 -18
- package/src/renderers/common/XRManager.js +154 -25
- package/src/renderers/common/extras/PMREMGenerator.js +29 -22
- package/src/renderers/common/nodes/Nodes.js +13 -3
- package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/background.glsl.js +1 -1
- package/src/renderers/webgl/WebGLShadowMap.js +3 -2
- package/src/renderers/webgl/WebGLTextures.js +143 -4
- package/src/renderers/webgl/WebGLUtils.js +1 -3
- package/src/renderers/webgl-fallback/WebGLBackend.js +170 -34
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +75 -7
- package/src/renderers/webgl-fallback/utils/WebGLConstants.js +1 -0
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +42 -29
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +22 -21
- package/src/renderers/webgpu/WebGPUBackend.js +442 -127
- package/src/renderers/webgpu/WebGPURenderer.js +7 -0
- package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +4 -1
- package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +4 -1
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +75 -27
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +3 -0
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +3 -1
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +18 -5
- package/src/renderers/webgpu/utils/WebGPUConstants.js +1 -1
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +34 -4
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +44 -49
- package/src/renderers/webxr/WebXRController.js +1 -1
- package/src/renderers/webxr/WebXRManager.js +2 -1
- package/src/textures/DepthTexture.js +6 -10
- package/src/textures/Source.js +22 -0
- package/src/textures/Texture.js +118 -1
- package/src/textures/VideoTexture.js +1 -1
- package/examples/jsm/effects/PeppersGhostEffect.js +0 -172
- package/src/core/RenderTargetArray.js +0 -40
|
@@ -11,6 +11,8 @@ import { AddEquation, BackSide, CustomBlending, DepthFormat, DepthStencilFormat,
|
|
|
11
11
|
import { DepthTexture } from '../../textures/DepthTexture.js';
|
|
12
12
|
import { XRRenderTarget } from './XRRenderTarget.js';
|
|
13
13
|
import { CylinderGeometry } from '../../geometries/CylinderGeometry.js';
|
|
14
|
+
import QuadMesh from './QuadMesh.js';
|
|
15
|
+
import NodeMaterial from '../../materials/nodes/NodeMaterial.js';
|
|
14
16
|
import { PlaneGeometry } from '../../geometries/PlaneGeometry.js';
|
|
15
17
|
import { MeshBasicMaterial } from '../../materials/MeshBasicMaterial.js';
|
|
16
18
|
import { Mesh } from '../../objects/Mesh.js';
|
|
@@ -32,8 +34,9 @@ class XRManager extends EventDispatcher {
|
|
|
32
34
|
* Constructs a new XR manager.
|
|
33
35
|
*
|
|
34
36
|
* @param {Renderer} renderer - The renderer.
|
|
37
|
+
* @param {boolean} [multiview=false] - Enables multiview if the device supports it.
|
|
35
38
|
*/
|
|
36
|
-
constructor( renderer ) {
|
|
39
|
+
constructor( renderer, multiview = false ) {
|
|
37
40
|
|
|
38
41
|
super();
|
|
39
42
|
|
|
@@ -168,6 +171,8 @@ class XRManager extends EventDispatcher {
|
|
|
168
171
|
*/
|
|
169
172
|
this._supportsLayers = false;
|
|
170
173
|
|
|
174
|
+
this._frameBufferTargets = null;
|
|
175
|
+
|
|
171
176
|
/**
|
|
172
177
|
* Helper function to create native WebXR Layer.
|
|
173
178
|
*
|
|
@@ -354,6 +359,26 @@ class XRManager extends EventDispatcher {
|
|
|
354
359
|
*/
|
|
355
360
|
this._useLayers = ( typeof XRWebGLBinding !== 'undefined' && 'createProjectionLayer' in XRWebGLBinding.prototype ); // eslint-disable-line compat/compat
|
|
356
361
|
|
|
362
|
+
/**
|
|
363
|
+
* Whether the usage of multiview has been requested by the application or not.
|
|
364
|
+
*
|
|
365
|
+
* @private
|
|
366
|
+
* @type {boolean}
|
|
367
|
+
* @default false
|
|
368
|
+
* @readonly
|
|
369
|
+
*/
|
|
370
|
+
this._useMultiviewIfPossible = multiview;
|
|
371
|
+
|
|
372
|
+
/**
|
|
373
|
+
* Whether the usage of multiview is actually enabled. This flag only evaluates to `true`
|
|
374
|
+
* if multiview has been requested by the application and the `OVR_multiview2` is available.
|
|
375
|
+
*
|
|
376
|
+
* @private
|
|
377
|
+
* @type {boolean}
|
|
378
|
+
* @readonly
|
|
379
|
+
*/
|
|
380
|
+
this._useMultiview = false;
|
|
381
|
+
|
|
357
382
|
}
|
|
358
383
|
|
|
359
384
|
/**
|
|
@@ -564,7 +589,33 @@ class XRManager extends EventDispatcher {
|
|
|
564
589
|
|
|
565
590
|
}
|
|
566
591
|
|
|
567
|
-
|
|
592
|
+
/**
|
|
593
|
+
* Returns `true` if the engine renders to a multiview target.
|
|
594
|
+
*
|
|
595
|
+
* @return {boolean} Whether the engine renders to a multiview render target or not.
|
|
596
|
+
*/
|
|
597
|
+
useMultiview() {
|
|
598
|
+
|
|
599
|
+
return this._useMultiview;
|
|
600
|
+
|
|
601
|
+
}
|
|
602
|
+
|
|
603
|
+
/**
|
|
604
|
+
* This method can be used in XR applications to create a quadratic layer that presents a separate
|
|
605
|
+
* rendered scene.
|
|
606
|
+
*
|
|
607
|
+
* @param {number} width - The width of the layer plane in world units.
|
|
608
|
+
* @param {number} height - The height of the layer plane in world units.
|
|
609
|
+
* @param {Vector3} translation - The position/translation of the layer plane in world units.
|
|
610
|
+
* @param {Quaternion} quaternion - The orientation of the layer plane expressed as a quaternion.
|
|
611
|
+
* @param {number} pixelwidth - The width of the layer's render target in pixels.
|
|
612
|
+
* @param {number} pixelheight - The height of the layer's render target in pixels.
|
|
613
|
+
* @param {Function} rendercall - A callback function that renders the layer. Similar to code in
|
|
614
|
+
* the default animation loop, this method can be used to update/transform 3D object in the layer's scene.
|
|
615
|
+
* @param {Object} [attributes={}] - Allows to configure the layer's render target.
|
|
616
|
+
* @return {Mesh} A mesh representing the quadratic XR layer. This mesh should be added to the XR scene.
|
|
617
|
+
*/
|
|
618
|
+
createQuadLayer( width, height, translation, quaternion, pixelwidth, pixelheight, rendercall, attributes = {} ) {
|
|
568
619
|
|
|
569
620
|
const geometry = new PlaneGeometry( width, height );
|
|
570
621
|
const renderTarget = new XRRenderTarget(
|
|
@@ -590,6 +641,8 @@ class XRManager extends EventDispatcher {
|
|
|
590
641
|
resolveStencilBuffer: false
|
|
591
642
|
} );
|
|
592
643
|
|
|
644
|
+
renderTarget.autoAllocateDepthBuffer = true;
|
|
645
|
+
|
|
593
646
|
const material = new MeshBasicMaterial( { color: 0xffffff, side: FrontSide } );
|
|
594
647
|
material.map = renderTarget.texture;
|
|
595
648
|
material.map.offset.y = 1;
|
|
@@ -637,7 +690,23 @@ class XRManager extends EventDispatcher {
|
|
|
637
690
|
|
|
638
691
|
}
|
|
639
692
|
|
|
640
|
-
|
|
693
|
+
/**
|
|
694
|
+
* This method can be used in XR applications to create a cylindrical layer that presents a separate
|
|
695
|
+
* rendered scene.
|
|
696
|
+
*
|
|
697
|
+
* @param {number} radius - The radius of the cylinder in world units.
|
|
698
|
+
* @param {number} centralAngle - The central angle of the cylinder in radians.
|
|
699
|
+
* @param {number} aspectratio - The aspect ratio.
|
|
700
|
+
* @param {Vector3} translation - The position/translation of the layer plane in world units.
|
|
701
|
+
* @param {Quaternion} quaternion - The orientation of the layer plane expressed as a quaternion.
|
|
702
|
+
* @param {number} pixelwidth - The width of the layer's render target in pixels.
|
|
703
|
+
* @param {number} pixelheight - The height of the layer's render target in pixels.
|
|
704
|
+
* @param {Function} rendercall - A callback function that renders the layer. Similar to code in
|
|
705
|
+
* the default animation loop, this method can be used to update/transform 3D object in the layer's scene.
|
|
706
|
+
* @param {Object} [attributes={}] - Allows to configure the layer's render target.
|
|
707
|
+
* @return {Mesh} A mesh representing the cylindrical XR layer. This mesh should be added to the XR scene.
|
|
708
|
+
*/
|
|
709
|
+
createCylinderLayer( radius, centralAngle, aspectratio, translation, quaternion, pixelwidth, pixelheight, rendercall, attributes = {} ) {
|
|
641
710
|
|
|
642
711
|
const geometry = new CylinderGeometry( radius, radius, radius * centralAngle / aspectratio, 64, 64, true, Math.PI - centralAngle / 2, centralAngle );
|
|
643
712
|
const renderTarget = new XRRenderTarget(
|
|
@@ -663,6 +732,8 @@ class XRManager extends EventDispatcher {
|
|
|
663
732
|
resolveStencilBuffer: false
|
|
664
733
|
} );
|
|
665
734
|
|
|
735
|
+
renderTarget.autoAllocateDepthBuffer = true;
|
|
736
|
+
|
|
666
737
|
const material = new MeshBasicMaterial( { color: 0xffffff, side: BackSide } );
|
|
667
738
|
material.map = renderTarget.texture;
|
|
668
739
|
material.map.offset.y = 1;
|
|
@@ -711,39 +782,80 @@ class XRManager extends EventDispatcher {
|
|
|
711
782
|
|
|
712
783
|
}
|
|
713
784
|
|
|
785
|
+
/**
|
|
786
|
+
* Renders the XR layers that have been previously added to the scene.
|
|
787
|
+
*
|
|
788
|
+
* This method is usually called in your animation loop before rendering
|
|
789
|
+
* the actual scene via `renderer.render( scene, camera );`.
|
|
790
|
+
*/
|
|
714
791
|
renderLayers( ) {
|
|
715
792
|
|
|
716
793
|
const translationObject = new Vector3();
|
|
717
794
|
const quaternionObject = new Quaternion();
|
|
795
|
+
const renderer = this._renderer;
|
|
718
796
|
|
|
719
797
|
const wasPresenting = this.isPresenting;
|
|
798
|
+
const rendererOutputTarget = renderer.getOutputRenderTarget();
|
|
799
|
+
const rendererFramebufferTarget = renderer._frameBufferTarget;
|
|
720
800
|
this.isPresenting = false;
|
|
721
801
|
|
|
802
|
+
const rendererSize = new Vector2();
|
|
803
|
+
renderer.getSize( rendererSize );
|
|
804
|
+
const rendererQuad = renderer._quad;
|
|
805
|
+
|
|
722
806
|
for ( const layer of this._layers ) {
|
|
723
807
|
|
|
724
808
|
layer.renderTarget.isXRRenderTarget = this._session !== null;
|
|
725
809
|
layer.renderTarget.hasExternalTextures = layer.renderTarget.isXRRenderTarget;
|
|
726
|
-
layer.renderTarget.autoAllocateDepthBuffer = ! layer.renderTarget.isXRRenderTarget;
|
|
727
810
|
|
|
728
811
|
if ( layer.renderTarget.isXRRenderTarget && this._supportsLayers ) {
|
|
729
812
|
|
|
730
813
|
layer.xrlayer.transform = new XRRigidTransform( layer.plane.getWorldPosition( translationObject ), layer.plane.getWorldQuaternion( quaternionObject ) );
|
|
731
814
|
|
|
732
815
|
const glSubImage = this._glBinding.getSubImage( layer.xrlayer, this._xrFrame );
|
|
733
|
-
|
|
816
|
+
renderer.backend.setXRRenderTargetTextures(
|
|
734
817
|
layer.renderTarget,
|
|
735
818
|
glSubImage.colorTexture,
|
|
736
|
-
|
|
819
|
+
undefined );
|
|
737
820
|
|
|
738
|
-
|
|
821
|
+
renderer._setXRLayerSize( layer.renderTarget.width, layer.renderTarget.height );
|
|
822
|
+
renderer.setOutputRenderTarget( layer.renderTarget );
|
|
823
|
+
renderer.setRenderTarget( null );
|
|
824
|
+
renderer._frameBufferTarget = null;
|
|
825
|
+
|
|
826
|
+
this._frameBufferTargets || ( this._frameBufferTargets = new WeakMap() );
|
|
827
|
+
const { frameBufferTarget, quad } = this._frameBufferTargets.get( layer.renderTarget ) || { frameBufferTarget: null, quad: null };
|
|
828
|
+
if ( ! frameBufferTarget ) {
|
|
829
|
+
|
|
830
|
+
renderer._quad = new QuadMesh( new NodeMaterial() );
|
|
831
|
+
this._frameBufferTargets.set( layer.renderTarget, { frameBufferTarget: renderer._getFrameBufferTarget(), quad: renderer._quad } );
|
|
832
|
+
|
|
833
|
+
} else {
|
|
834
|
+
|
|
835
|
+
renderer._frameBufferTarget = frameBufferTarget;
|
|
836
|
+
renderer._quad = quad;
|
|
837
|
+
|
|
838
|
+
}
|
|
839
|
+
|
|
840
|
+
layer.rendercall();
|
|
841
|
+
|
|
842
|
+
renderer._frameBufferTarget = null;
|
|
843
|
+
|
|
844
|
+
} else {
|
|
845
|
+
|
|
846
|
+
renderer.setRenderTarget( layer.renderTarget );
|
|
847
|
+
layer.rendercall();
|
|
739
848
|
|
|
740
|
-
|
|
741
|
-
layer.rendercall();
|
|
849
|
+
}
|
|
742
850
|
|
|
743
851
|
}
|
|
744
852
|
|
|
853
|
+
renderer.setRenderTarget( null );
|
|
854
|
+
renderer.setOutputRenderTarget( rendererOutputTarget );
|
|
855
|
+
renderer._frameBufferTarget = rendererFramebufferTarget;
|
|
856
|
+
renderer._setXRLayerSize( rendererSize.x, rendererSize.y );
|
|
857
|
+
renderer._quad = rendererQuad;
|
|
745
858
|
this.isPresenting = wasPresenting;
|
|
746
|
-
this._renderer.setRenderTarget( null );
|
|
747
859
|
|
|
748
860
|
}
|
|
749
861
|
|
|
@@ -822,9 +934,17 @@ class XRManager extends EventDispatcher {
|
|
|
822
934
|
const projectionlayerInit = {
|
|
823
935
|
colorFormat: gl.RGBA8,
|
|
824
936
|
depthFormat: glDepthFormat,
|
|
825
|
-
scaleFactor: this._framebufferScaleFactor
|
|
937
|
+
scaleFactor: this._framebufferScaleFactor,
|
|
938
|
+
clearOnAccess: false
|
|
826
939
|
};
|
|
827
940
|
|
|
941
|
+
if ( this._useMultiviewIfPossible && renderer.hasFeature( 'OVR_multiview2' ) ) {
|
|
942
|
+
|
|
943
|
+
projectionlayerInit.textureType = 'texture-array';
|
|
944
|
+
this._useMultiview = true;
|
|
945
|
+
|
|
946
|
+
}
|
|
947
|
+
|
|
828
948
|
const glBinding = new XRWebGLBinding( session, gl );
|
|
829
949
|
const glProjLayer = glBinding.createProjectionLayer( projectionlayerInit );
|
|
830
950
|
const layersArray = [ glProjLayer ];
|
|
@@ -833,7 +953,10 @@ class XRManager extends EventDispatcher {
|
|
|
833
953
|
this._glProjLayer = glProjLayer;
|
|
834
954
|
|
|
835
955
|
renderer.setPixelRatio( 1 );
|
|
836
|
-
renderer.
|
|
956
|
+
renderer._setXRLayerSize( glProjLayer.textureWidth, glProjLayer.textureHeight );
|
|
957
|
+
|
|
958
|
+
const depth = this._useMultiview ? 2 : 1;
|
|
959
|
+
const depthTexture = new DepthTexture( glProjLayer.textureWidth, glProjLayer.textureHeight, depthType, undefined, undefined, undefined, undefined, undefined, undefined, depthFormat, depth );
|
|
837
960
|
|
|
838
961
|
this._xrRenderTarget = new XRRenderTarget(
|
|
839
962
|
glProjLayer.textureWidth,
|
|
@@ -842,19 +965,22 @@ class XRManager extends EventDispatcher {
|
|
|
842
965
|
format: RGBAFormat,
|
|
843
966
|
type: UnsignedByteType,
|
|
844
967
|
colorSpace: renderer.outputColorSpace,
|
|
845
|
-
depthTexture:
|
|
968
|
+
depthTexture: depthTexture,
|
|
846
969
|
stencilBuffer: renderer.stencil,
|
|
847
970
|
samples: attributes.antialias ? 4 : 0,
|
|
848
971
|
resolveDepthBuffer: ( glProjLayer.ignoreDepthValues === false ),
|
|
849
972
|
resolveStencilBuffer: ( glProjLayer.ignoreDepthValues === false ),
|
|
973
|
+
depth: this._useMultiview ? 2 : 1,
|
|
974
|
+
multiview: this._useMultiview
|
|
850
975
|
} );
|
|
851
976
|
|
|
852
977
|
this._xrRenderTarget.hasExternalTextures = true;
|
|
853
|
-
|
|
854
|
-
this._referenceSpace = await session.requestReferenceSpace( this.getReferenceSpaceType() );
|
|
978
|
+
this._xrRenderTarget.depth = this._useMultiview ? 2 : 1;
|
|
855
979
|
|
|
856
980
|
this._supportsLayers = session.enabledFeatures.includes( 'layers' );
|
|
857
981
|
|
|
982
|
+
this._referenceSpace = await session.requestReferenceSpace( this.getReferenceSpaceType() );
|
|
983
|
+
|
|
858
984
|
if ( this._supportsLayers ) {
|
|
859
985
|
|
|
860
986
|
// switch layers to native
|
|
@@ -895,7 +1021,7 @@ class XRManager extends EventDispatcher {
|
|
|
895
1021
|
session.updateRenderState( { baseLayer: glBaseLayer } );
|
|
896
1022
|
|
|
897
1023
|
renderer.setPixelRatio( 1 );
|
|
898
|
-
renderer.
|
|
1024
|
+
renderer._setXRLayerSize( glBaseLayer.framebufferWidth, glBaseLayer.framebufferHeight );
|
|
899
1025
|
|
|
900
1026
|
this._xrRenderTarget = new XRRenderTarget(
|
|
901
1027
|
glBaseLayer.framebufferWidth,
|
|
@@ -910,6 +1036,8 @@ class XRManager extends EventDispatcher {
|
|
|
910
1036
|
}
|
|
911
1037
|
);
|
|
912
1038
|
|
|
1039
|
+
this._referenceSpace = await session.requestReferenceSpace( this.getReferenceSpaceType() );
|
|
1040
|
+
|
|
913
1041
|
}
|
|
914
1042
|
|
|
915
1043
|
//
|
|
@@ -950,6 +1078,7 @@ class XRManager extends EventDispatcher {
|
|
|
950
1078
|
|
|
951
1079
|
cameraXR.near = cameraR.near = cameraL.near = depthNear;
|
|
952
1080
|
cameraXR.far = cameraR.far = cameraL.far = depthFar;
|
|
1081
|
+
cameraXR.isMultiViewCamera = this._useMultiview;
|
|
953
1082
|
|
|
954
1083
|
if ( this._currentDepthNear !== cameraXR.near || this._currentDepthFar !== cameraXR.far ) {
|
|
955
1084
|
|
|
@@ -1212,9 +1341,7 @@ function onSessionEnd() {
|
|
|
1212
1341
|
|
|
1213
1342
|
// restore framebuffer/rendering state
|
|
1214
1343
|
|
|
1215
|
-
renderer.
|
|
1216
|
-
renderer.setOutputRenderTarget( null );
|
|
1217
|
-
renderer.setRenderTarget( null );
|
|
1344
|
+
renderer._resetXRState();
|
|
1218
1345
|
|
|
1219
1346
|
this._session = null;
|
|
1220
1347
|
this._xrRenderTarget = null;
|
|
@@ -1252,6 +1379,8 @@ function onSessionEnd() {
|
|
|
1252
1379
|
|
|
1253
1380
|
layer.plane.material = layer.material;
|
|
1254
1381
|
layer.material.map = layer.renderTarget.texture;
|
|
1382
|
+
layer.material.map.offset.y = 1;
|
|
1383
|
+
layer.material.map.repeat.y = - 1;
|
|
1255
1384
|
delete layer.xrlayer;
|
|
1256
1385
|
|
|
1257
1386
|
}
|
|
@@ -1261,9 +1390,9 @@ function onSessionEnd() {
|
|
|
1261
1390
|
//
|
|
1262
1391
|
|
|
1263
1392
|
this.isPresenting = false;
|
|
1393
|
+
this._useMultiview = false;
|
|
1264
1394
|
|
|
1265
1395
|
renderer._animation.stop();
|
|
1266
|
-
|
|
1267
1396
|
renderer._animation.setAnimationLoop( this._currentAnimationLoop );
|
|
1268
1397
|
renderer._animation.setContext( this._currentAnimationContext );
|
|
1269
1398
|
renderer._animation.start();
|
|
@@ -1351,25 +1480,25 @@ function createXRLayer( layer ) {
|
|
|
1351
1480
|
|
|
1352
1481
|
return this._glBinding.createQuadLayer( {
|
|
1353
1482
|
transform: new XRRigidTransform( layer.translation, layer.quaternion ),
|
|
1354
|
-
depthFormat: this._gl.DEPTH_COMPONENT,
|
|
1355
1483
|
width: layer.width / 2,
|
|
1356
1484
|
height: layer.height / 2,
|
|
1357
1485
|
space: this._referenceSpace,
|
|
1358
1486
|
viewPixelWidth: layer.pixelwidth,
|
|
1359
|
-
viewPixelHeight: layer.pixelheight
|
|
1487
|
+
viewPixelHeight: layer.pixelheight,
|
|
1488
|
+
clearOnAccess: false
|
|
1360
1489
|
} );
|
|
1361
1490
|
|
|
1362
1491
|
} else {
|
|
1363
1492
|
|
|
1364
1493
|
return this._glBinding.createCylinderLayer( {
|
|
1365
1494
|
transform: new XRRigidTransform( layer.translation, layer.quaternion ),
|
|
1366
|
-
depthFormat: this._gl.DEPTH_COMPONENT,
|
|
1367
1495
|
radius: layer.radius,
|
|
1368
1496
|
centralAngle: layer.centralAngle,
|
|
1369
1497
|
aspectRatio: layer.aspectRatio,
|
|
1370
1498
|
space: this._referenceSpace,
|
|
1371
1499
|
viewPixelWidth: layer.pixelwidth,
|
|
1372
|
-
viewPixelHeight: layer.pixelheight
|
|
1500
|
+
viewPixelHeight: layer.pixelheight,
|
|
1501
|
+
clearOnAccess: false
|
|
1373
1502
|
} );
|
|
1374
1503
|
|
|
1375
1504
|
}
|
|
@@ -1431,7 +1560,7 @@ function onAnimationFrame( time, frame ) {
|
|
|
1431
1560
|
backend.setXRRenderTargetTextures(
|
|
1432
1561
|
this._xrRenderTarget,
|
|
1433
1562
|
glSubImage.colorTexture,
|
|
1434
|
-
this._glProjLayer.ignoreDepthValues ? undefined : glSubImage.depthStencilTexture
|
|
1563
|
+
( this._glProjLayer.ignoreDepthValues && ! this._useMultiview ) ? undefined : glSubImage.depthStencilTexture
|
|
1435
1564
|
);
|
|
1436
1565
|
|
|
1437
1566
|
}
|
|
@@ -161,7 +161,7 @@ class PMREMGenerator {
|
|
|
161
161
|
|
|
162
162
|
console.warn( 'THREE.PMREMGenerator: .fromScene() called before the backend is initialized. Try using .fromSceneAsync() instead.' );
|
|
163
163
|
|
|
164
|
-
const cubeUVRenderTarget = renderTarget || this.
|
|
164
|
+
const cubeUVRenderTarget = renderTarget || this._allocateTarget();
|
|
165
165
|
|
|
166
166
|
options.renderTarget = cubeUVRenderTarget;
|
|
167
167
|
|
|
@@ -175,9 +175,11 @@ class PMREMGenerator {
|
|
|
175
175
|
_oldActiveCubeFace = this._renderer.getActiveCubeFace();
|
|
176
176
|
_oldActiveMipmapLevel = this._renderer.getActiveMipmapLevel();
|
|
177
177
|
|
|
178
|
-
const cubeUVRenderTarget = renderTarget || this.
|
|
178
|
+
const cubeUVRenderTarget = renderTarget || this._allocateTarget();
|
|
179
179
|
cubeUVRenderTarget.depthBuffer = true;
|
|
180
180
|
|
|
181
|
+
this._init( cubeUVRenderTarget );
|
|
182
|
+
|
|
181
183
|
this._sceneToCubeUV( scene, near, far, cubeUVRenderTarget, position );
|
|
182
184
|
|
|
183
185
|
if ( sigma > 0 ) {
|
|
@@ -238,7 +240,7 @@ class PMREMGenerator {
|
|
|
238
240
|
|
|
239
241
|
this._setSizeFromTexture( equirectangular );
|
|
240
242
|
|
|
241
|
-
const cubeUVRenderTarget = renderTarget || this.
|
|
243
|
+
const cubeUVRenderTarget = renderTarget || this._allocateTarget();
|
|
242
244
|
|
|
243
245
|
this.fromEquirectangularAsync( equirectangular, cubeUVRenderTarget );
|
|
244
246
|
|
|
@@ -286,7 +288,7 @@ class PMREMGenerator {
|
|
|
286
288
|
|
|
287
289
|
this._setSizeFromTexture( cubemap );
|
|
288
290
|
|
|
289
|
-
const cubeUVRenderTarget = renderTarget || this.
|
|
291
|
+
const cubeUVRenderTarget = renderTarget || this._allocateTarget();
|
|
290
292
|
|
|
291
293
|
this.fromCubemapAsync( cubemap, renderTarget );
|
|
292
294
|
|
|
@@ -423,7 +425,8 @@ class PMREMGenerator {
|
|
|
423
425
|
_oldActiveCubeFace = this._renderer.getActiveCubeFace();
|
|
424
426
|
_oldActiveMipmapLevel = this._renderer.getActiveMipmapLevel();
|
|
425
427
|
|
|
426
|
-
const cubeUVRenderTarget = renderTarget || this.
|
|
428
|
+
const cubeUVRenderTarget = renderTarget || this._allocateTarget();
|
|
429
|
+
this._init( cubeUVRenderTarget );
|
|
427
430
|
this._textureToCubeUV( texture, cubeUVRenderTarget );
|
|
428
431
|
this._applyPMREM( cubeUVRenderTarget );
|
|
429
432
|
this._cleanup( cubeUVRenderTarget );
|
|
@@ -432,24 +435,20 @@ class PMREMGenerator {
|
|
|
432
435
|
|
|
433
436
|
}
|
|
434
437
|
|
|
435
|
-
|
|
438
|
+
_allocateTarget() {
|
|
436
439
|
|
|
437
440
|
const width = 3 * Math.max( this._cubeSize, 16 * 7 );
|
|
438
441
|
const height = 4 * this._cubeSize;
|
|
439
442
|
|
|
440
|
-
const
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
format: RGBAFormat,
|
|
446
|
-
colorSpace: LinearSRGBColorSpace,
|
|
447
|
-
//depthBuffer: false
|
|
448
|
-
};
|
|
443
|
+
const cubeUVRenderTarget = _createRenderTarget( width, height );
|
|
444
|
+
|
|
445
|
+
return cubeUVRenderTarget;
|
|
446
|
+
|
|
447
|
+
}
|
|
449
448
|
|
|
450
|
-
|
|
449
|
+
_init( renderTarget ) {
|
|
451
450
|
|
|
452
|
-
if ( this._pingPongRenderTarget === null || this._pingPongRenderTarget.width !== width || this._pingPongRenderTarget.height !== height ) {
|
|
451
|
+
if ( this._pingPongRenderTarget === null || this._pingPongRenderTarget.width !== renderTarget.width || this._pingPongRenderTarget.height !== renderTarget.height ) {
|
|
453
452
|
|
|
454
453
|
if ( this._pingPongRenderTarget !== null ) {
|
|
455
454
|
|
|
@@ -457,17 +456,15 @@ class PMREMGenerator {
|
|
|
457
456
|
|
|
458
457
|
}
|
|
459
458
|
|
|
460
|
-
this._pingPongRenderTarget = _createRenderTarget( width, height
|
|
459
|
+
this._pingPongRenderTarget = _createRenderTarget( renderTarget.width, renderTarget.height );
|
|
461
460
|
|
|
462
461
|
const { _lodMax } = this;
|
|
463
462
|
( { sizeLods: this._sizeLods, lodPlanes: this._lodPlanes, sigmas: this._sigmas, lodMeshes: this._lodMeshes } = _createPlanes( _lodMax ) );
|
|
464
463
|
|
|
465
|
-
this._blurMaterial = _getBlurShader( _lodMax, width, height );
|
|
464
|
+
this._blurMaterial = _getBlurShader( _lodMax, renderTarget.width, renderTarget.height );
|
|
466
465
|
|
|
467
466
|
}
|
|
468
467
|
|
|
469
|
-
return cubeUVRenderTarget;
|
|
470
|
-
|
|
471
468
|
}
|
|
472
469
|
|
|
473
470
|
async _compileMaterial( material ) {
|
|
@@ -849,7 +846,17 @@ function _createPlanes( lodMax ) {
|
|
|
849
846
|
|
|
850
847
|
}
|
|
851
848
|
|
|
852
|
-
function _createRenderTarget( width, height
|
|
849
|
+
function _createRenderTarget( width, height ) {
|
|
850
|
+
|
|
851
|
+
const params = {
|
|
852
|
+
magFilter: LinearFilter,
|
|
853
|
+
minFilter: LinearFilter,
|
|
854
|
+
generateMipmaps: false,
|
|
855
|
+
type: HalfFloatType,
|
|
856
|
+
format: RGBAFormat,
|
|
857
|
+
colorSpace: LinearSRGBColorSpace,
|
|
858
|
+
//depthBuffer: false
|
|
859
|
+
};
|
|
853
860
|
|
|
854
861
|
const cubeUVRenderTarget = new RenderTarget( width, height, params );
|
|
855
862
|
cubeUVRenderTarget.texture.mapping = CubeUVReflectionMapping;
|
|
@@ -3,7 +3,8 @@ import ChainMap from '../ChainMap.js';
|
|
|
3
3
|
import NodeBuilderState from './NodeBuilderState.js';
|
|
4
4
|
import { cubeMapNode } from '../../../nodes/utils/CubeMapNode.js';
|
|
5
5
|
import { NodeFrame } from '../../../nodes/Nodes.js';
|
|
6
|
-
import { objectGroup, renderGroup, frameGroup, cubeTexture, texture, fog, rangeFogFactor, densityFogFactor, reference, pmremTexture, screenUV } from '../../../nodes/TSL.js';
|
|
6
|
+
import { objectGroup, renderGroup, frameGroup, cubeTexture, texture, texture3D, vec3, fog, rangeFogFactor, densityFogFactor, reference, pmremTexture, screenUV } from '../../../nodes/TSL.js';
|
|
7
|
+
import { builtin } from '../../../nodes/accessors/BuiltinNode.js';
|
|
7
8
|
|
|
8
9
|
import { CubeUVReflectionMapping, EquirectangularReflectionMapping, EquirectangularRefractionMapping } from '../../../constants.js';
|
|
9
10
|
import { hashArray } from '../../../nodes/core/NodeUtils.js';
|
|
@@ -201,6 +202,12 @@ class Nodes extends DataMap {
|
|
|
201
202
|
nodeBuilder.environmentNode = this.getEnvironmentNode( renderObject.scene );
|
|
202
203
|
nodeBuilder.fogNode = this.getFogNode( renderObject.scene );
|
|
203
204
|
nodeBuilder.clippingContext = renderObject.clippingContext;
|
|
205
|
+
if ( this.renderer.getOutputRenderTarget() ? this.renderer.getOutputRenderTarget().multiview : false ) {
|
|
206
|
+
|
|
207
|
+
nodeBuilder.enableMultiview();
|
|
208
|
+
|
|
209
|
+
}
|
|
210
|
+
|
|
204
211
|
nodeBuilder.build();
|
|
205
212
|
|
|
206
213
|
nodeBuilderState = this._createNodeBuilderState( nodeBuilder );
|
|
@@ -403,6 +410,7 @@ class Nodes extends DataMap {
|
|
|
403
410
|
if ( environmentNode ) _cacheKeyValues.push( environmentNode.getCacheKey() );
|
|
404
411
|
if ( fogNode ) _cacheKeyValues.push( fogNode.getCacheKey() );
|
|
405
412
|
|
|
413
|
+
_cacheKeyValues.push( this.renderer.getOutputRenderTarget() && this.renderer.getOutputRenderTarget().multiview ? 1 : 0 );
|
|
406
414
|
_cacheKeyValues.push( this.renderer.shadowMap.enabled ? 1 : 0 );
|
|
407
415
|
|
|
408
416
|
cacheKeyData.callId = callId;
|
|
@@ -658,7 +666,7 @@ class Nodes extends DataMap {
|
|
|
658
666
|
|
|
659
667
|
const renderer = this.renderer;
|
|
660
668
|
|
|
661
|
-
return renderer.toneMapping + ',' + renderer.currentColorSpace;
|
|
669
|
+
return renderer.toneMapping + ',' + renderer.currentColorSpace + ',' + renderer.xr.isPresenting;
|
|
662
670
|
|
|
663
671
|
}
|
|
664
672
|
|
|
@@ -689,7 +697,9 @@ class Nodes extends DataMap {
|
|
|
689
697
|
const renderer = this.renderer;
|
|
690
698
|
const cacheKey = this.getOutputCacheKey();
|
|
691
699
|
|
|
692
|
-
const output =
|
|
700
|
+
const output = outputTarget.isArrayTexture ?
|
|
701
|
+
texture3D( outputTarget, vec3( screenUV, builtin( 'gl_ViewID_OVR' ) ) ).renderOutput( renderer.toneMapping, renderer.currentColorSpace ) :
|
|
702
|
+
texture( outputTarget, screenUV ).renderOutput( renderer.toneMapping, renderer.currentColorSpace );
|
|
693
703
|
|
|
694
704
|
_outputNodeMap.set( outputTarget, cacheKey );
|
|
695
705
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export default /* glsl */`
|
|
2
2
|
#ifdef PREMULTIPLIED_ALPHA
|
|
3
3
|
|
|
4
|
-
// Get
|
|
4
|
+
// Get normal blending with premultipled, use with CustomBlending, OneFactor, OneMinusSrcAlphaFactor, AddEquation.
|
|
5
5
|
gl_FragColor.rgb *= gl_FragColor.a;
|
|
6
6
|
|
|
7
7
|
#endif
|
|
@@ -23,7 +23,7 @@ void main() {
|
|
|
23
23
|
|
|
24
24
|
#ifdef DECODE_VIDEO_TEXTURE
|
|
25
25
|
|
|
26
|
-
// use inline sRGB decode until browsers properly support
|
|
26
|
+
// use inline sRGB decode until browsers properly support SRGB8_ALPHA8 with video textures
|
|
27
27
|
|
|
28
28
|
texColor = vec4( mix( pow( texColor.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), texColor.rgb * 0.0773993808, vec3( lessThanEqual( texColor.rgb, vec3( 0.04045 ) ) ) ), texColor.w );
|
|
29
29
|
|
|
@@ -257,7 +257,8 @@ function WebGLShadowMap( renderer, objects, capabilities ) {
|
|
|
257
257
|
if ( ( renderer.localClippingEnabled && material.clipShadows === true && Array.isArray( material.clippingPlanes ) && material.clippingPlanes.length !== 0 ) ||
|
|
258
258
|
( material.displacementMap && material.displacementScale !== 0 ) ||
|
|
259
259
|
( material.alphaMap && material.alphaTest > 0 ) ||
|
|
260
|
-
( material.map && material.alphaTest > 0 )
|
|
260
|
+
( material.map && material.alphaTest > 0 ) ||
|
|
261
|
+
( material.alphaToCoverage === true ) ) {
|
|
261
262
|
|
|
262
263
|
// in this case we need a unique material instance reflecting the
|
|
263
264
|
// appropriate state
|
|
@@ -303,7 +304,7 @@ function WebGLShadowMap( renderer, objects, capabilities ) {
|
|
|
303
304
|
}
|
|
304
305
|
|
|
305
306
|
result.alphaMap = material.alphaMap;
|
|
306
|
-
result.alphaTest = material.alphaTest;
|
|
307
|
+
result.alphaTest = ( material.alphaToCoverage === true ) ? 0.5 : material.alphaTest; // approximate alphaToCoverage by using a fixed alphaTest value
|
|
307
308
|
result.map = material.map;
|
|
308
309
|
|
|
309
310
|
result.clipShadows = material.clipShadows;
|