@plastic-software/three 0.175.14 → 0.179.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 +4 -4
- package/build/three.cjs +8402 -6787
- package/build/three.core.js +8007 -6688
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +397 -102
- package/build/three.module.min.js +1 -1
- package/build/three.tsl.js +84 -27
- package/build/three.tsl.min.js +1 -1
- package/build/three.webgpu.js +6831 -2838
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +6648 -2838
- package/build/three.webgpu.nodes.min.js +1 -1
- package/examples/jsm/Addons.js +1 -3
- package/examples/jsm/animation/AnimationClipCreator.js +1 -0
- package/examples/jsm/animation/CCDIKSolver.js +6 -3
- package/examples/jsm/capabilities/WebGL.js +1 -27
- package/examples/jsm/capabilities/WebGPU.js +2 -1
- package/examples/jsm/controls/ArcballControls.js +15 -4
- 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 +62 -14
- 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 +22 -8
- 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 +57 -38
- 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 +679 -300
- 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 +48 -8
- 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 +11 -2
- 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/libs/meshopt_decoder.module.js +75 -58
- package/examples/jsm/lighting/TiledLighting.js +1 -0
- package/examples/jsm/lights/LightProbeGenerator.js +15 -3
- 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 +6 -5
- package/examples/jsm/loaders/DDSLoader.js +1 -0
- package/examples/jsm/loaders/DRACOLoader.js +2 -1
- package/examples/jsm/loaders/EXRLoader.js +211 -22
- package/examples/jsm/loaders/FBXLoader.js +25 -23
- 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 +213 -30
- 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 +14 -1
- package/examples/jsm/loaders/USDLoader.js +219 -0
- package/examples/jsm/loaders/USDZLoader.js +4 -891
- 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/loaders/usd/USDAParser.js +741 -0
- package/examples/jsm/loaders/usd/USDCParser.js +17 -0
- 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/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 +4 -3
- 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 +22 -19
- 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 +149 -13
- 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 +4 -2
- package/examples/jsm/postprocessing/FXAAPass.js +40 -0
- package/examples/jsm/postprocessing/FilmPass.js +1 -0
- package/examples/jsm/postprocessing/GTAOPass.js +14 -12
- 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 +22 -19
- 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 +12 -10
- 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 +15 -3
- 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/AST.js +381 -30
- package/examples/jsm/transpiler/GLSLDecoder.js +227 -88
- package/examples/jsm/transpiler/Linker.js +327 -0
- package/examples/jsm/transpiler/TSLEncoder.js +234 -85
- package/examples/jsm/transpiler/Transpiler.js +19 -1
- package/examples/jsm/transpiler/TranspilerUtils.js +29 -0
- package/examples/jsm/transpiler/WGSLEncoder.js +788 -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 +9 -7
- package/examples/jsm/tsl/display/ChromaticAberrationNode.js +206 -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 +9 -36
- 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 +5 -4
- 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 → TRAANode.js} +184 -174
- 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 +5 -4
- 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 +2 -1
- package/src/Three.TSL.js +83 -26
- package/src/Three.WebGPU.Nodes.js +1 -0
- package/src/Three.WebGPU.js +3 -0
- package/src/animation/KeyframeTrack.js +1 -1
- package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
- package/src/animation/tracks/StringKeyframeTrack.js +1 -1
- package/src/audio/AudioListener.js +13 -10
- package/src/cameras/ArrayCamera.js +9 -1
- package/src/cameras/Camera.js +14 -0
- package/src/cameras/OrthographicCamera.js +1 -1
- package/src/cameras/PerspectiveCamera.js +1 -1
- package/src/constants.js +47 -20
- package/src/core/BufferAttribute.js +3 -3
- package/src/core/BufferGeometry.js +2 -5
- package/src/core/Clock.js +2 -8
- package/src/core/GLBufferAttribute.js +13 -1
- package/src/core/Object3D.js +23 -22
- package/src/core/RenderTarget.js +65 -21
- package/src/core/RenderTarget3D.js +1 -0
- package/{examples/jsm/misc → src/core}/Timer.js +4 -40
- package/src/extras/PMREMGenerator.js +11 -0
- package/src/extras/TextureUtils.js +1 -5
- package/src/extras/core/Curve.js +1 -1
- package/src/extras/core/Path.js +22 -22
- package/src/geometries/CapsuleGeometry.js +167 -17
- package/src/geometries/ExtrudeGeometry.js +39 -29
- package/src/helpers/ArrowHelper.js +2 -2
- package/src/helpers/CameraHelper.js +41 -11
- package/src/helpers/SkeletonHelper.js +36 -7
- package/src/lights/LightShadow.js +34 -7
- package/src/lights/PointLightShadow.js +1 -1
- 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/FileLoader.js +27 -4
- package/src/loaders/ImageBitmapLoader.js +48 -9
- package/src/loaders/ImageLoader.js +55 -8
- package/src/loaders/Loader.js +14 -0
- package/src/loaders/LoadingManager.js +23 -0
- 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/MeshBasicMaterial.js +1 -1
- package/src/materials/nodes/Line2NodeMaterial.js +0 -8
- package/src/materials/nodes/MeshBasicNodeMaterial.js +4 -3
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +1 -1
- package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -1
- package/src/materials/nodes/MeshSSSNodeMaterial.js +2 -2
- package/src/materials/nodes/NodeMaterial.js +106 -20
- package/src/materials/nodes/PointsNodeMaterial.js +5 -0
- package/src/materials/nodes/manager/NodeMaterialObserver.js +107 -4
- package/src/math/Box3.js +28 -0
- package/src/math/Color.js +7 -7
- package/src/math/ColorManagement.js +22 -3
- package/src/math/Frustum.js +25 -9
- package/src/math/FrustumArray.js +258 -0
- package/src/math/Line3.js +129 -2
- package/src/math/Matrix4.js +48 -27
- package/src/math/Quaternion.js +1 -1
- package/src/math/Ray.js +2 -0
- package/src/math/Sphere.js +28 -0
- package/src/math/Spherical.js +2 -2
- package/src/nodes/Nodes.js +3 -3
- package/src/nodes/TSL.js +6 -3
- package/src/nodes/accessors/AccessorsUtils.js +7 -8
- package/src/nodes/accessors/Bitangent.js +54 -26
- package/src/nodes/accessors/Camera.js +40 -13
- 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 +110 -24
- package/src/nodes/accessors/Object3DNode.js +7 -8
- package/src/nodes/accessors/Position.js +14 -4
- package/src/nodes/accessors/ReferenceBaseNode.js +1 -1
- package/src/nodes/accessors/ReferenceNode.js +19 -4
- package/src/nodes/accessors/ReflectVector.js +3 -3
- package/src/nodes/accessors/SceneNode.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 +15 -4
- package/src/nodes/accessors/Tangent.js +25 -17
- package/src/nodes/accessors/TangentUtils.js +46 -0
- package/src/nodes/accessors/TextureBicubic.js +21 -3
- package/src/nodes/accessors/TextureNode.js +71 -8
- package/src/nodes/accessors/UniformArrayNode.js +0 -16
- 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/ArrayNode.js +12 -0
- package/src/nodes/core/AssignNode.js +30 -5
- package/src/nodes/core/AttributeNode.js +2 -2
- package/src/nodes/core/ContextNode.js +27 -4
- package/src/nodes/core/Node.js +83 -22
- package/src/nodes/core/NodeBuilder.js +273 -49
- package/src/nodes/core/NodeUtils.js +46 -1
- package/src/nodes/core/NodeVarying.js +19 -1
- package/src/nodes/core/PropertyNode.js +8 -12
- package/src/nodes/core/StackNode.js +171 -26
- package/src/nodes/core/StructTypeNode.js +26 -4
- package/src/nodes/core/SubBuildNode.js +89 -0
- package/src/nodes/core/UniformNode.js +63 -5
- package/src/nodes/core/VarNode.js +102 -4
- package/src/nodes/core/VaryingNode.js +45 -24
- package/src/nodes/display/BlendModes.js +42 -1
- package/src/nodes/display/ColorSpaceNode.js +4 -27
- package/src/nodes/display/FrontFacingNode.js +34 -2
- package/src/nodes/display/NormalMapNode.js +19 -50
- package/src/nodes/display/PassNode.js +165 -20
- package/src/nodes/display/ScreenNode.js +0 -26
- package/src/nodes/display/ViewportTextureNode.js +67 -7
- package/src/nodes/functions/BSDF/BRDF_GGX.js +2 -6
- package/src/nodes/functions/BSDF/BRDF_Sheen.js +4 -4
- package/src/nodes/functions/PhongLightingModel.js +3 -3
- package/src/nodes/functions/PhysicalLightingModel.js +16 -16
- package/src/nodes/functions/ShadowMaskModel.js +5 -1
- package/src/nodes/functions/material/getGeometryRoughness.js +2 -2
- 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 +68 -24
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +28 -3
- package/src/nodes/lighting/AnalyticLightNode.js +7 -13
- package/src/nodes/lighting/EnvironmentNode.js +5 -5
- package/src/nodes/lighting/HemisphereLightNode.js +2 -2
- package/src/nodes/lighting/IESSpotLightNode.js +2 -1
- package/src/nodes/lighting/LightsNode.js +29 -11
- package/src/nodes/lighting/ProjectorLightNode.js +91 -0
- package/src/nodes/lighting/ShadowBaseNode.js +1 -12
- package/src/nodes/lighting/ShadowFilterNode.js +274 -0
- package/src/nodes/lighting/ShadowNode.js +174 -242
- package/src/nodes/lighting/SpotLightNode.js +44 -7
- package/src/nodes/materialx/MaterialXNodes.js +131 -2
- package/src/nodes/materialx/lib/mx_noise.js +166 -2
- package/src/nodes/math/ConditionalNode.js +1 -20
- package/src/nodes/math/MathNode.js +146 -75
- package/src/nodes/math/OperatorNode.js +129 -119
- package/src/nodes/shapes/Shapes.js +5 -4
- package/src/nodes/tsl/TSLBase.js +1 -0
- package/src/nodes/tsl/TSLCore.js +222 -72
- package/src/nodes/utils/DebugNode.js +16 -4
- package/src/nodes/utils/Discard.js +2 -2
- package/src/nodes/utils/EquirectUV.js +27 -0
- package/src/nodes/utils/EventNode.js +83 -0
- package/src/nodes/utils/LoopNode.js +64 -34
- package/src/nodes/utils/MatcapUV.js +22 -0
- package/src/nodes/utils/RTTNode.js +22 -5
- package/src/nodes/utils/ReflectorNode.js +77 -7
- package/src/nodes/utils/SampleNode.js +81 -0
- package/src/nodes/utils/TriplanarTextures.js +65 -0
- package/src/objects/BatchedMesh.js +20 -6
- 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 +45 -32
- package/src/renderers/common/Animation.js +2 -2
- package/src/renderers/common/Background.js +13 -2
- package/src/renderers/common/Bindings.js +19 -18
- package/src/renderers/common/Color4.js +2 -2
- package/src/renderers/common/CubeRenderTarget.js +1 -1
- package/src/renderers/common/PostProcessing.js +60 -5
- package/src/renderers/common/RenderList.js +0 -4
- package/src/renderers/common/RenderObject.js +80 -4
- package/src/renderers/common/Renderer.js +133 -22
- package/src/renderers/common/SampledTexture.js +3 -71
- package/src/renderers/common/Sampler.js +79 -0
- package/src/renderers/common/Storage3DTexture.js +100 -0
- package/src/renderers/common/StorageArrayTexture.js +84 -0
- package/src/renderers/common/StorageTexture.js +19 -0
- package/src/renderers/common/Textures.js +34 -24
- 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 +183 -35
- package/src/renderers/common/XRRenderTarget.js +21 -4
- package/src/renderers/common/extras/PMREMGenerator.js +30 -23
- package/src/renderers/common/nodes/NodeSampledTexture.js +0 -12
- 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/ShaderChunk/shadowmap_pars_fragment.glsl.js +20 -2
- package/src/renderers/shaders/ShaderLib/background.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +11 -2
- package/src/renderers/webgl/WebGLAttributes.js +4 -0
- package/src/renderers/webgl/WebGLCapabilities.js +2 -2
- package/src/renderers/webgl/WebGLMaterials.js +6 -6
- package/src/renderers/webgl/WebGLProgram.js +22 -16
- package/src/renderers/webgl/WebGLPrograms.js +8 -6
- package/src/renderers/webgl/WebGLShadowMap.js +14 -3
- package/src/renderers/webgl/WebGLState.js +4 -4
- package/src/renderers/webgl/WebGLTextures.js +163 -11
- package/src/renderers/webgl/WebGLUtils.js +1 -3
- package/src/renderers/webgl-fallback/WebGLBackend.js +261 -94
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +75 -9
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +4 -0
- package/src/renderers/webgl-fallback/utils/WebGLConstants.js +1 -0
- package/src/renderers/webgl-fallback/utils/WebGLState.js +4 -4
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +44 -29
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +22 -21
- package/src/renderers/webgpu/WebGPUBackend.js +505 -143
- 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 +129 -96
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +3 -0
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +9 -1
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +58 -31
- package/src/renderers/webgpu/utils/WebGPUConstants.js +8 -2
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +39 -9
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +50 -108
- package/src/renderers/webgpu/utils/WebGPUUtils.js +2 -17
- package/src/renderers/webxr/WebXRController.js +1 -1
- package/src/renderers/webxr/WebXRDepthSensing.js +6 -10
- package/src/renderers/webxr/WebXRManager.js +70 -9
- package/src/textures/DepthTexture.js +6 -10
- package/src/textures/ExternalTexture.js +45 -0
- package/src/textures/FramebufferTexture.js +2 -2
- package/src/textures/Source.js +32 -0
- package/src/textures/Texture.js +118 -1
- package/src/textures/VideoTexture.js +31 -3
- package/examples/jsm/effects/PeppersGhostEffect.js +0 -172
- package/src/core/RenderTargetArray.js +0 -40
- package/src/nodes/utils/EquirectUVNode.js +0 -65
- package/src/nodes/utils/MatcapUVNode.js +0 -49
- package/src/nodes/utils/TriplanarTexturesNode.js +0 -148
|
@@ -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,17 @@ class XRManager extends EventDispatcher {
|
|
|
168
171
|
*/
|
|
169
172
|
this._supportsLayers = false;
|
|
170
173
|
|
|
174
|
+
/**
|
|
175
|
+
* Whether the device supports binding gl objects.
|
|
176
|
+
*
|
|
177
|
+
* @private
|
|
178
|
+
* @type {boolean}
|
|
179
|
+
* @readonly
|
|
180
|
+
*/
|
|
181
|
+
this._supportsGlBinding = typeof XRWebGLBinding !== 'undefined';
|
|
182
|
+
|
|
183
|
+
this._frameBufferTargets = null;
|
|
184
|
+
|
|
171
185
|
/**
|
|
172
186
|
* Helper function to create native WebXR Layer.
|
|
173
187
|
*
|
|
@@ -352,7 +366,27 @@ class XRManager extends EventDispatcher {
|
|
|
352
366
|
* @type {boolean}
|
|
353
367
|
* @readonly
|
|
354
368
|
*/
|
|
355
|
-
this._useLayers = (
|
|
369
|
+
this._useLayers = ( this._supportsGlBinding && 'createProjectionLayer' in XRWebGLBinding.prototype ); // eslint-disable-line compat/compat
|
|
370
|
+
|
|
371
|
+
/**
|
|
372
|
+
* Whether the usage of multiview has been requested by the application or not.
|
|
373
|
+
*
|
|
374
|
+
* @private
|
|
375
|
+
* @type {boolean}
|
|
376
|
+
* @default false
|
|
377
|
+
* @readonly
|
|
378
|
+
*/
|
|
379
|
+
this._useMultiviewIfPossible = multiview;
|
|
380
|
+
|
|
381
|
+
/**
|
|
382
|
+
* Whether the usage of multiview is actually enabled. This flag only evaluates to `true`
|
|
383
|
+
* if multiview has been requested by the application and the `OVR_multiview2` is available.
|
|
384
|
+
*
|
|
385
|
+
* @private
|
|
386
|
+
* @type {boolean}
|
|
387
|
+
* @readonly
|
|
388
|
+
*/
|
|
389
|
+
this._useMultiview = false;
|
|
356
390
|
|
|
357
391
|
}
|
|
358
392
|
|
|
@@ -564,7 +598,33 @@ class XRManager extends EventDispatcher {
|
|
|
564
598
|
|
|
565
599
|
}
|
|
566
600
|
|
|
567
|
-
|
|
601
|
+
/**
|
|
602
|
+
* Returns `true` if the engine renders to a multiview target.
|
|
603
|
+
*
|
|
604
|
+
* @return {boolean} Whether the engine renders to a multiview render target or not.
|
|
605
|
+
*/
|
|
606
|
+
useMultiview() {
|
|
607
|
+
|
|
608
|
+
return this._useMultiview;
|
|
609
|
+
|
|
610
|
+
}
|
|
611
|
+
|
|
612
|
+
/**
|
|
613
|
+
* This method can be used in XR applications to create a quadratic layer that presents a separate
|
|
614
|
+
* rendered scene.
|
|
615
|
+
*
|
|
616
|
+
* @param {number} width - The width of the layer plane in world units.
|
|
617
|
+
* @param {number} height - The height of the layer plane in world units.
|
|
618
|
+
* @param {Vector3} translation - The position/translation of the layer plane in world units.
|
|
619
|
+
* @param {Quaternion} quaternion - The orientation of the layer plane expressed as a quaternion.
|
|
620
|
+
* @param {number} pixelwidth - The width of the layer's render target in pixels.
|
|
621
|
+
* @param {number} pixelheight - The height of the layer's render target in pixels.
|
|
622
|
+
* @param {Function} rendercall - A callback function that renders the layer. Similar to code in
|
|
623
|
+
* the default animation loop, this method can be used to update/transform 3D object in the layer's scene.
|
|
624
|
+
* @param {Object} [attributes={}] - Allows to configure the layer's render target.
|
|
625
|
+
* @return {Mesh} A mesh representing the quadratic XR layer. This mesh should be added to the XR scene.
|
|
626
|
+
*/
|
|
627
|
+
createQuadLayer( width, height, translation, quaternion, pixelwidth, pixelheight, rendercall, attributes = {} ) {
|
|
568
628
|
|
|
569
629
|
const geometry = new PlaneGeometry( width, height );
|
|
570
630
|
const renderTarget = new XRRenderTarget(
|
|
@@ -590,6 +650,8 @@ class XRManager extends EventDispatcher {
|
|
|
590
650
|
resolveStencilBuffer: false
|
|
591
651
|
} );
|
|
592
652
|
|
|
653
|
+
renderTarget._autoAllocateDepthBuffer = true;
|
|
654
|
+
|
|
593
655
|
const material = new MeshBasicMaterial( { color: 0xffffff, side: FrontSide } );
|
|
594
656
|
material.map = renderTarget.texture;
|
|
595
657
|
material.map.offset.y = 1;
|
|
@@ -637,7 +699,23 @@ class XRManager extends EventDispatcher {
|
|
|
637
699
|
|
|
638
700
|
}
|
|
639
701
|
|
|
640
|
-
|
|
702
|
+
/**
|
|
703
|
+
* This method can be used in XR applications to create a cylindrical layer that presents a separate
|
|
704
|
+
* rendered scene.
|
|
705
|
+
*
|
|
706
|
+
* @param {number} radius - The radius of the cylinder in world units.
|
|
707
|
+
* @param {number} centralAngle - The central angle of the cylinder in radians.
|
|
708
|
+
* @param {number} aspectratio - The aspect ratio.
|
|
709
|
+
* @param {Vector3} translation - The position/translation of the layer plane in world units.
|
|
710
|
+
* @param {Quaternion} quaternion - The orientation of the layer plane expressed as a quaternion.
|
|
711
|
+
* @param {number} pixelwidth - The width of the layer's render target in pixels.
|
|
712
|
+
* @param {number} pixelheight - The height of the layer's render target in pixels.
|
|
713
|
+
* @param {Function} rendercall - A callback function that renders the layer. Similar to code in
|
|
714
|
+
* the default animation loop, this method can be used to update/transform 3D object in the layer's scene.
|
|
715
|
+
* @param {Object} [attributes={}] - Allows to configure the layer's render target.
|
|
716
|
+
* @return {Mesh} A mesh representing the cylindrical XR layer. This mesh should be added to the XR scene.
|
|
717
|
+
*/
|
|
718
|
+
createCylinderLayer( radius, centralAngle, aspectratio, translation, quaternion, pixelwidth, pixelheight, rendercall, attributes = {} ) {
|
|
641
719
|
|
|
642
720
|
const geometry = new CylinderGeometry( radius, radius, radius * centralAngle / aspectratio, 64, 64, true, Math.PI - centralAngle / 2, centralAngle );
|
|
643
721
|
const renderTarget = new XRRenderTarget(
|
|
@@ -663,6 +741,8 @@ class XRManager extends EventDispatcher {
|
|
|
663
741
|
resolveStencilBuffer: false
|
|
664
742
|
} );
|
|
665
743
|
|
|
744
|
+
renderTarget._autoAllocateDepthBuffer = true;
|
|
745
|
+
|
|
666
746
|
const material = new MeshBasicMaterial( { color: 0xffffff, side: BackSide } );
|
|
667
747
|
material.map = renderTarget.texture;
|
|
668
748
|
material.map.offset.y = 1;
|
|
@@ -711,39 +791,80 @@ class XRManager extends EventDispatcher {
|
|
|
711
791
|
|
|
712
792
|
}
|
|
713
793
|
|
|
794
|
+
/**
|
|
795
|
+
* Renders the XR layers that have been previously added to the scene.
|
|
796
|
+
*
|
|
797
|
+
* This method is usually called in your animation loop before rendering
|
|
798
|
+
* the actual scene via `renderer.render( scene, camera );`.
|
|
799
|
+
*/
|
|
714
800
|
renderLayers( ) {
|
|
715
801
|
|
|
716
802
|
const translationObject = new Vector3();
|
|
717
803
|
const quaternionObject = new Quaternion();
|
|
804
|
+
const renderer = this._renderer;
|
|
718
805
|
|
|
719
806
|
const wasPresenting = this.isPresenting;
|
|
807
|
+
const rendererOutputTarget = renderer.getOutputRenderTarget();
|
|
808
|
+
const rendererFramebufferTarget = renderer._frameBufferTarget;
|
|
720
809
|
this.isPresenting = false;
|
|
721
810
|
|
|
811
|
+
const rendererSize = new Vector2();
|
|
812
|
+
renderer.getSize( rendererSize );
|
|
813
|
+
const rendererQuad = renderer._quad;
|
|
814
|
+
|
|
722
815
|
for ( const layer of this._layers ) {
|
|
723
816
|
|
|
724
817
|
layer.renderTarget.isXRRenderTarget = this._session !== null;
|
|
725
|
-
layer.renderTarget.
|
|
726
|
-
layer.renderTarget.autoAllocateDepthBuffer = ! layer.renderTarget.isXRRenderTarget;
|
|
818
|
+
layer.renderTarget._hasExternalTextures = layer.renderTarget.isXRRenderTarget;
|
|
727
819
|
|
|
728
820
|
if ( layer.renderTarget.isXRRenderTarget && this._supportsLayers ) {
|
|
729
821
|
|
|
730
822
|
layer.xrlayer.transform = new XRRigidTransform( layer.plane.getWorldPosition( translationObject ), layer.plane.getWorldQuaternion( quaternionObject ) );
|
|
731
823
|
|
|
732
824
|
const glSubImage = this._glBinding.getSubImage( layer.xrlayer, this._xrFrame );
|
|
733
|
-
|
|
825
|
+
renderer.backend.setXRRenderTargetTextures(
|
|
734
826
|
layer.renderTarget,
|
|
735
827
|
glSubImage.colorTexture,
|
|
736
|
-
|
|
828
|
+
undefined );
|
|
737
829
|
|
|
738
|
-
|
|
830
|
+
renderer._setXRLayerSize( layer.renderTarget.width, layer.renderTarget.height );
|
|
831
|
+
renderer.setOutputRenderTarget( layer.renderTarget );
|
|
832
|
+
renderer.setRenderTarget( null );
|
|
833
|
+
renderer._frameBufferTarget = null;
|
|
834
|
+
|
|
835
|
+
this._frameBufferTargets || ( this._frameBufferTargets = new WeakMap() );
|
|
836
|
+
const { frameBufferTarget, quad } = this._frameBufferTargets.get( layer.renderTarget ) || { frameBufferTarget: null, quad: null };
|
|
837
|
+
if ( ! frameBufferTarget ) {
|
|
838
|
+
|
|
839
|
+
renderer._quad = new QuadMesh( new NodeMaterial() );
|
|
840
|
+
this._frameBufferTargets.set( layer.renderTarget, { frameBufferTarget: renderer._getFrameBufferTarget(), quad: renderer._quad } );
|
|
841
|
+
|
|
842
|
+
} else {
|
|
843
|
+
|
|
844
|
+
renderer._frameBufferTarget = frameBufferTarget;
|
|
845
|
+
renderer._quad = quad;
|
|
846
|
+
|
|
847
|
+
}
|
|
739
848
|
|
|
740
|
-
|
|
741
|
-
|
|
849
|
+
layer.rendercall();
|
|
850
|
+
|
|
851
|
+
renderer._frameBufferTarget = null;
|
|
852
|
+
|
|
853
|
+
} else {
|
|
854
|
+
|
|
855
|
+
renderer.setRenderTarget( layer.renderTarget );
|
|
856
|
+
layer.rendercall();
|
|
857
|
+
|
|
858
|
+
}
|
|
742
859
|
|
|
743
860
|
}
|
|
744
861
|
|
|
862
|
+
renderer.setRenderTarget( null );
|
|
863
|
+
renderer.setOutputRenderTarget( rendererOutputTarget );
|
|
864
|
+
renderer._frameBufferTarget = rendererFramebufferTarget;
|
|
865
|
+
renderer._setXRLayerSize( rendererSize.x, rendererSize.y );
|
|
866
|
+
renderer._quad = rendererQuad;
|
|
745
867
|
this.isPresenting = wasPresenting;
|
|
746
|
-
this._renderer.setRenderTarget( null );
|
|
747
868
|
|
|
748
869
|
}
|
|
749
870
|
|
|
@@ -803,9 +924,18 @@ class XRManager extends EventDispatcher {
|
|
|
803
924
|
|
|
804
925
|
//
|
|
805
926
|
|
|
927
|
+
if ( this._supportsGlBinding ) {
|
|
928
|
+
|
|
929
|
+
const glBinding = new XRWebGLBinding( session, gl );
|
|
930
|
+
this._glBinding = glBinding;
|
|
931
|
+
|
|
932
|
+
}
|
|
933
|
+
|
|
934
|
+
//
|
|
935
|
+
|
|
806
936
|
if ( this._useLayers === true ) {
|
|
807
937
|
|
|
808
|
-
// default path using
|
|
938
|
+
// default path using XRProjectionLayer
|
|
809
939
|
|
|
810
940
|
let depthFormat = null;
|
|
811
941
|
let depthType = null;
|
|
@@ -822,18 +952,27 @@ class XRManager extends EventDispatcher {
|
|
|
822
952
|
const projectionlayerInit = {
|
|
823
953
|
colorFormat: gl.RGBA8,
|
|
824
954
|
depthFormat: glDepthFormat,
|
|
825
|
-
scaleFactor: this._framebufferScaleFactor
|
|
955
|
+
scaleFactor: this._framebufferScaleFactor,
|
|
956
|
+
clearOnAccess: false
|
|
826
957
|
};
|
|
827
958
|
|
|
828
|
-
|
|
829
|
-
|
|
959
|
+
if ( this._useMultiviewIfPossible && renderer.hasFeature( 'OVR_multiview2' ) ) {
|
|
960
|
+
|
|
961
|
+
projectionlayerInit.textureType = 'texture-array';
|
|
962
|
+
this._useMultiview = true;
|
|
963
|
+
|
|
964
|
+
}
|
|
965
|
+
|
|
966
|
+
const glProjLayer = this._glBinding.createProjectionLayer( projectionlayerInit );
|
|
830
967
|
const layersArray = [ glProjLayer ];
|
|
831
968
|
|
|
832
|
-
this._glBinding = glBinding;
|
|
833
969
|
this._glProjLayer = glProjLayer;
|
|
834
970
|
|
|
835
971
|
renderer.setPixelRatio( 1 );
|
|
836
|
-
renderer.
|
|
972
|
+
renderer._setXRLayerSize( glProjLayer.textureWidth, glProjLayer.textureHeight );
|
|
973
|
+
|
|
974
|
+
const depth = this._useMultiview ? 2 : 1;
|
|
975
|
+
const depthTexture = new DepthTexture( glProjLayer.textureWidth, glProjLayer.textureHeight, depthType, undefined, undefined, undefined, undefined, undefined, undefined, depthFormat, depth );
|
|
837
976
|
|
|
838
977
|
this._xrRenderTarget = new XRRenderTarget(
|
|
839
978
|
glProjLayer.textureWidth,
|
|
@@ -842,19 +981,22 @@ class XRManager extends EventDispatcher {
|
|
|
842
981
|
format: RGBAFormat,
|
|
843
982
|
type: UnsignedByteType,
|
|
844
983
|
colorSpace: renderer.outputColorSpace,
|
|
845
|
-
depthTexture:
|
|
984
|
+
depthTexture: depthTexture,
|
|
846
985
|
stencilBuffer: renderer.stencil,
|
|
847
986
|
samples: attributes.antialias ? 4 : 0,
|
|
848
987
|
resolveDepthBuffer: ( glProjLayer.ignoreDepthValues === false ),
|
|
849
988
|
resolveStencilBuffer: ( glProjLayer.ignoreDepthValues === false ),
|
|
989
|
+
depth: this._useMultiview ? 2 : 1,
|
|
990
|
+
multiview: this._useMultiview
|
|
850
991
|
} );
|
|
851
992
|
|
|
852
|
-
this._xrRenderTarget.
|
|
853
|
-
|
|
854
|
-
this._referenceSpace = await session.requestReferenceSpace( this.getReferenceSpaceType() );
|
|
993
|
+
this._xrRenderTarget._hasExternalTextures = true;
|
|
994
|
+
this._xrRenderTarget.depth = this._useMultiview ? 2 : 1;
|
|
855
995
|
|
|
856
996
|
this._supportsLayers = session.enabledFeatures.includes( 'layers' );
|
|
857
997
|
|
|
998
|
+
this._referenceSpace = await session.requestReferenceSpace( this.getReferenceSpaceType() );
|
|
999
|
+
|
|
858
1000
|
if ( this._supportsLayers ) {
|
|
859
1001
|
|
|
860
1002
|
// switch layers to native
|
|
@@ -895,7 +1037,7 @@ class XRManager extends EventDispatcher {
|
|
|
895
1037
|
session.updateRenderState( { baseLayer: glBaseLayer } );
|
|
896
1038
|
|
|
897
1039
|
renderer.setPixelRatio( 1 );
|
|
898
|
-
renderer.
|
|
1040
|
+
renderer._setXRLayerSize( glBaseLayer.framebufferWidth, glBaseLayer.framebufferHeight );
|
|
899
1041
|
|
|
900
1042
|
this._xrRenderTarget = new XRRenderTarget(
|
|
901
1043
|
glBaseLayer.framebufferWidth,
|
|
@@ -910,6 +1052,9 @@ class XRManager extends EventDispatcher {
|
|
|
910
1052
|
}
|
|
911
1053
|
);
|
|
912
1054
|
|
|
1055
|
+
this._xrRenderTarget._isOpaqueFramebuffer = true;
|
|
1056
|
+
this._referenceSpace = await session.requestReferenceSpace( this.getReferenceSpaceType() );
|
|
1057
|
+
|
|
913
1058
|
}
|
|
914
1059
|
|
|
915
1060
|
//
|
|
@@ -950,6 +1095,7 @@ class XRManager extends EventDispatcher {
|
|
|
950
1095
|
|
|
951
1096
|
cameraXR.near = cameraR.near = cameraL.near = depthNear;
|
|
952
1097
|
cameraXR.far = cameraR.far = cameraL.far = depthFar;
|
|
1098
|
+
cameraXR.isMultiViewCamera = this._useMultiview;
|
|
953
1099
|
|
|
954
1100
|
if ( this._currentDepthNear !== cameraXR.near || this._currentDepthFar !== cameraXR.far ) {
|
|
955
1101
|
|
|
@@ -965,9 +1111,11 @@ class XRManager extends EventDispatcher {
|
|
|
965
1111
|
|
|
966
1112
|
}
|
|
967
1113
|
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
|
|
1114
|
+
// inherit camera layers and enable eye layers (1 = left, 2 = right)
|
|
1115
|
+
cameraXR.layers.mask = camera.layers.mask | 0b110;
|
|
1116
|
+
cameraL.layers.mask = cameraXR.layers.mask & 0b011;
|
|
1117
|
+
cameraR.layers.mask = cameraXR.layers.mask & 0b101;
|
|
1118
|
+
|
|
971
1119
|
|
|
972
1120
|
const parent = camera.parent;
|
|
973
1121
|
const cameras = cameraXR.cameras;
|
|
@@ -1212,9 +1360,7 @@ function onSessionEnd() {
|
|
|
1212
1360
|
|
|
1213
1361
|
// restore framebuffer/rendering state
|
|
1214
1362
|
|
|
1215
|
-
renderer.
|
|
1216
|
-
renderer.setOutputRenderTarget( null );
|
|
1217
|
-
renderer.setRenderTarget( null );
|
|
1363
|
+
renderer._resetXRState();
|
|
1218
1364
|
|
|
1219
1365
|
this._session = null;
|
|
1220
1366
|
this._xrRenderTarget = null;
|
|
@@ -1252,6 +1398,8 @@ function onSessionEnd() {
|
|
|
1252
1398
|
|
|
1253
1399
|
layer.plane.material = layer.material;
|
|
1254
1400
|
layer.material.map = layer.renderTarget.texture;
|
|
1401
|
+
layer.material.map.offset.y = 1;
|
|
1402
|
+
layer.material.map.repeat.y = - 1;
|
|
1255
1403
|
delete layer.xrlayer;
|
|
1256
1404
|
|
|
1257
1405
|
}
|
|
@@ -1261,9 +1409,9 @@ function onSessionEnd() {
|
|
|
1261
1409
|
//
|
|
1262
1410
|
|
|
1263
1411
|
this.isPresenting = false;
|
|
1412
|
+
this._useMultiview = false;
|
|
1264
1413
|
|
|
1265
1414
|
renderer._animation.stop();
|
|
1266
|
-
|
|
1267
1415
|
renderer._animation.setAnimationLoop( this._currentAnimationLoop );
|
|
1268
1416
|
renderer._animation.setContext( this._currentAnimationContext );
|
|
1269
1417
|
renderer._animation.start();
|
|
@@ -1351,25 +1499,25 @@ function createXRLayer( layer ) {
|
|
|
1351
1499
|
|
|
1352
1500
|
return this._glBinding.createQuadLayer( {
|
|
1353
1501
|
transform: new XRRigidTransform( layer.translation, layer.quaternion ),
|
|
1354
|
-
depthFormat: this._gl.DEPTH_COMPONENT,
|
|
1355
1502
|
width: layer.width / 2,
|
|
1356
1503
|
height: layer.height / 2,
|
|
1357
1504
|
space: this._referenceSpace,
|
|
1358
1505
|
viewPixelWidth: layer.pixelwidth,
|
|
1359
|
-
viewPixelHeight: layer.pixelheight
|
|
1506
|
+
viewPixelHeight: layer.pixelheight,
|
|
1507
|
+
clearOnAccess: false
|
|
1360
1508
|
} );
|
|
1361
1509
|
|
|
1362
1510
|
} else {
|
|
1363
1511
|
|
|
1364
1512
|
return this._glBinding.createCylinderLayer( {
|
|
1365
1513
|
transform: new XRRigidTransform( layer.translation, layer.quaternion ),
|
|
1366
|
-
depthFormat: this._gl.DEPTH_COMPONENT,
|
|
1367
1514
|
radius: layer.radius,
|
|
1368
1515
|
centralAngle: layer.centralAngle,
|
|
1369
1516
|
aspectRatio: layer.aspectRatio,
|
|
1370
1517
|
space: this._referenceSpace,
|
|
1371
1518
|
viewPixelWidth: layer.pixelwidth,
|
|
1372
|
-
viewPixelHeight: layer.pixelheight
|
|
1519
|
+
viewPixelHeight: layer.pixelheight,
|
|
1520
|
+
clearOnAccess: false
|
|
1373
1521
|
} );
|
|
1374
1522
|
|
|
1375
1523
|
}
|
|
@@ -1431,7 +1579,7 @@ function onAnimationFrame( time, frame ) {
|
|
|
1431
1579
|
backend.setXRRenderTargetTextures(
|
|
1432
1580
|
this._xrRenderTarget,
|
|
1433
1581
|
glSubImage.colorTexture,
|
|
1434
|
-
this._glProjLayer.ignoreDepthValues ? undefined : glSubImage.depthStencilTexture
|
|
1582
|
+
( this._glProjLayer.ignoreDepthValues && ! this._useMultiview ) ? undefined : glSubImage.depthStencilTexture
|
|
1435
1583
|
);
|
|
1436
1584
|
|
|
1437
1585
|
}
|
|
@@ -34,10 +34,11 @@ class XRRenderTarget extends RenderTarget {
|
|
|
34
34
|
* are defined by external textures. This flag is
|
|
35
35
|
* set to `true` when using the WebXR Layers API.
|
|
36
36
|
*
|
|
37
|
+
* @private
|
|
37
38
|
* @type {boolean}
|
|
38
39
|
* @default false
|
|
39
40
|
*/
|
|
40
|
-
this.
|
|
41
|
+
this._hasExternalTextures = false;
|
|
41
42
|
|
|
42
43
|
/**
|
|
43
44
|
* Whether a depth buffer should automatically be allocated
|
|
@@ -50,10 +51,25 @@ class XRRenderTarget extends RenderTarget {
|
|
|
50
51
|
*
|
|
51
52
|
* Reference: {@link https://www.w3.org/TR/webxrlayers-1/#dom-xrprojectionlayer-ignoredepthvalues}.
|
|
52
53
|
*
|
|
54
|
+
* @private
|
|
53
55
|
* @type {boolean}
|
|
54
56
|
* @default true
|
|
55
57
|
*/
|
|
56
|
-
this.
|
|
58
|
+
this._autoAllocateDepthBuffer = true;
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Whether this render target is associated with a XRWebGLLayer.
|
|
62
|
+
*
|
|
63
|
+
* A XRWebGLLayer points to an opaque framebuffer. Basically,
|
|
64
|
+
* this means that you don't have access to its bound color,
|
|
65
|
+
* stencil and depth buffers. We need to handle this framebuffer
|
|
66
|
+
* differently since its textures are always bound.
|
|
67
|
+
*
|
|
68
|
+
* @private
|
|
69
|
+
* @type {boolean}
|
|
70
|
+
* @default false
|
|
71
|
+
* */
|
|
72
|
+
this._isOpaqueFramebuffer = false;
|
|
57
73
|
|
|
58
74
|
}
|
|
59
75
|
|
|
@@ -61,8 +77,9 @@ class XRRenderTarget extends RenderTarget {
|
|
|
61
77
|
|
|
62
78
|
super.copy( source );
|
|
63
79
|
|
|
64
|
-
this.
|
|
65
|
-
this.
|
|
80
|
+
this._hasExternalTextures = source._hasExternalTextures;
|
|
81
|
+
this._autoAllocateDepthBuffer = source._autoAllocateDepthBuffer;
|
|
82
|
+
this._isOpaqueFramebuffer = source._isOpaqueFramebuffer;
|
|
66
83
|
|
|
67
84
|
return this;
|
|
68
85
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import NodeMaterial from '../../../materials/nodes/NodeMaterial.js';
|
|
2
2
|
import { getDirection, blur } from '../../../nodes/pmrem/PMREMUtils.js';
|
|
3
|
-
import { equirectUV } from '../../../nodes/utils/
|
|
3
|
+
import { equirectUV } from '../../../nodes/utils/EquirectUV.js';
|
|
4
4
|
import { uniform } from '../../../nodes/core/UniformNode.js';
|
|
5
5
|
import { uniformArray } from '../../../nodes/accessors/UniformArrayNode.js';
|
|
6
6
|
import { texture } from '../../../nodes/accessors/TextureNode.js';
|
|
@@ -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;
|
|
@@ -45,18 +45,6 @@ class NodeSampledTexture extends SampledTexture {
|
|
|
45
45
|
|
|
46
46
|
}
|
|
47
47
|
|
|
48
|
-
/**
|
|
49
|
-
* Overwrites the default to additionally check if the node value has changed.
|
|
50
|
-
*
|
|
51
|
-
* @param {number} generation - The generation.
|
|
52
|
-
* @return {boolean} Whether an update is required or not.
|
|
53
|
-
*/
|
|
54
|
-
needsBindingsUpdate( generation ) {
|
|
55
|
-
|
|
56
|
-
return this.textureNode.value !== this.texture || super.needsBindingsUpdate( generation );
|
|
57
|
-
|
|
58
|
-
}
|
|
59
|
-
|
|
60
48
|
/**
|
|
61
49
|
* Updates the binding.
|
|
62
50
|
*
|
|
@@ -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
|