@plastic-software/three 0.175.13 → 0.178.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 +7747 -6792
- package/build/three.core.js +7371 -6576
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +190 -30
- package/build/three.module.min.js +1 -1
- package/build/three.tsl.js +19 -11
- package/build/three.tsl.min.js +1 -1
- package/build/three.webgpu.js +4989 -2235
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +5082 -2469
- 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 -27
- package/examples/jsm/capabilities/WebGPU.js +1 -0
- 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 +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 +2 -1
- 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 +6 -5
- 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 +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 +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 +139 -12
- 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 +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/AST.js +381 -30
- package/examples/jsm/transpiler/GLSLDecoder.js +226 -87
- 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 +1 -0
- 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 +4 -29
- 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 +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 +18 -10
- package/src/Three.WebGPU.Nodes.js +1 -0
- package/src/Three.WebGPU.js +3 -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 +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/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/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/FileLoader.js +2 -2
- package/src/loaders/ImageBitmapLoader.js +25 -9
- package/src/loaders/ImageLoader.js +55 -8
- 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/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 +105 -19
- 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/Frustum.js +6 -1
- package/src/math/FrustumArray.js +253 -0
- package/src/math/Quaternion.js +1 -1
- package/src/math/Ray.js +2 -0
- package/src/math/Sphere.js +28 -0
- package/src/nodes/Nodes.js +2 -3
- package/src/nodes/TSL.js +5 -3
- package/src/nodes/accessors/AccessorsUtils.js +7 -8
- package/src/nodes/accessors/Bitangent.js +54 -26
- 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 +102 -16
- 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 +1 -1
- package/src/nodes/accessors/ReflectVector.js +3 -3
- 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/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 +59 -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/AssignNode.js +27 -5
- package/src/nodes/core/AttributeNode.js +2 -2
- package/src/nodes/core/ContextNode.js +7 -3
- package/src/nodes/core/Node.js +69 -20
- package/src/nodes/core/NodeBuilder.js +248 -29
- 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 +129 -26
- package/src/nodes/core/StructTypeNode.js +26 -4
- package/src/nodes/core/SubBuildNode.js +89 -0
- package/src/nodes/core/VarNode.js +11 -2
- 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 +18 -19
- package/src/nodes/display/ScreenNode.js +0 -26
- 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 +14 -14
- 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 +1 -1
- 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 +78 -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/lib/mx_noise.js +1 -1
- package/src/nodes/math/ConditionalNode.js +0 -19
- package/src/nodes/math/MathNode.js +68 -21
- package/src/nodes/math/OperatorNode.js +108 -98
- package/src/nodes/shapes/Shapes.js +5 -4
- package/src/nodes/tsl/TSLBase.js +1 -0
- package/src/nodes/tsl/TSLCore.js +160 -65
- package/src/nodes/utils/DebugNode.js +15 -3
- package/src/nodes/utils/Discard.js +2 -2
- package/src/nodes/utils/EquirectUV.js +27 -0
- package/src/nodes/utils/LoopNode.js +64 -34
- package/src/nodes/utils/MatcapUV.js +22 -0
- package/src/nodes/utils/RTTNode.js +13 -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 +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 +25 -11
- package/src/renderers/common/Animation.js +2 -2
- package/src/renderers/common/Background.js +13 -2
- package/src/renderers/common/CubeRenderTarget.js +1 -1
- package/src/renderers/common/RenderList.js +0 -4
- package/src/renderers/common/RenderObject.js +80 -4
- package/src/renderers/common/Renderer.js +116 -8
- package/src/renderers/common/Storage3DTexture.js +79 -0
- package/src/renderers/common/StorageArrayTexture.js +63 -0
- 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 +157 -27
- package/src/renderers/common/XRRenderTarget.js +21 -4
- package/src/renderers/common/extras/PMREMGenerator.js +30 -23
- package/src/renderers/common/nodes/Nodes.js +13 -3
- package/src/renderers/shaders/ShaderChunk/clearcoat_normal_fragment_maps.glsl.js +1 -1
- 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/WebGLAttributes.js +4 -0
- package/src/renderers/webgl/WebGLPrograms.js +4 -2
- package/src/renderers/webgl/WebGLShadowMap.js +3 -2
- package/src/renderers/webgl/WebGLState.js +4 -4
- package/src/renderers/webgl/WebGLTextures.js +144 -4
- package/src/renderers/webgl/WebGLUtils.js +1 -3
- package/src/renderers/webgl-fallback/WebGLBackend.js +244 -87
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +73 -7
- 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 +451 -128
- 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 +86 -33
- 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 +28 -5
- package/src/renderers/webgpu/utils/WebGPUConstants.js +8 -2
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +38 -8
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +45 -50
- 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
- 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,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
|
-
layer.renderTarget.
|
|
726
|
-
layer.renderTarget.autoAllocateDepthBuffer = ! layer.renderTarget.isXRRenderTarget;
|
|
809
|
+
layer.renderTarget._hasExternalTextures = 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
|
-
this._xrRenderTarget.
|
|
853
|
-
|
|
854
|
-
this._referenceSpace = await session.requestReferenceSpace( this.getReferenceSpaceType() );
|
|
977
|
+
this._xrRenderTarget._hasExternalTextures = true;
|
|
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,9 @@ class XRManager extends EventDispatcher {
|
|
|
910
1036
|
}
|
|
911
1037
|
);
|
|
912
1038
|
|
|
1039
|
+
this._xrRenderTarget._isOpaqueFramebuffer = true;
|
|
1040
|
+
this._referenceSpace = await session.requestReferenceSpace( this.getReferenceSpaceType() );
|
|
1041
|
+
|
|
913
1042
|
}
|
|
914
1043
|
|
|
915
1044
|
//
|
|
@@ -950,6 +1079,7 @@ class XRManager extends EventDispatcher {
|
|
|
950
1079
|
|
|
951
1080
|
cameraXR.near = cameraR.near = cameraL.near = depthNear;
|
|
952
1081
|
cameraXR.far = cameraR.far = cameraL.far = depthFar;
|
|
1082
|
+
cameraXR.isMultiViewCamera = this._useMultiview;
|
|
953
1083
|
|
|
954
1084
|
if ( this._currentDepthNear !== cameraXR.near || this._currentDepthFar !== cameraXR.far ) {
|
|
955
1085
|
|
|
@@ -1212,9 +1342,7 @@ function onSessionEnd() {
|
|
|
1212
1342
|
|
|
1213
1343
|
// restore framebuffer/rendering state
|
|
1214
1344
|
|
|
1215
|
-
renderer.
|
|
1216
|
-
renderer.setOutputRenderTarget( null );
|
|
1217
|
-
renderer.setRenderTarget( null );
|
|
1345
|
+
renderer._resetXRState();
|
|
1218
1346
|
|
|
1219
1347
|
this._session = null;
|
|
1220
1348
|
this._xrRenderTarget = null;
|
|
@@ -1252,6 +1380,8 @@ function onSessionEnd() {
|
|
|
1252
1380
|
|
|
1253
1381
|
layer.plane.material = layer.material;
|
|
1254
1382
|
layer.material.map = layer.renderTarget.texture;
|
|
1383
|
+
layer.material.map.offset.y = 1;
|
|
1384
|
+
layer.material.map.repeat.y = - 1;
|
|
1255
1385
|
delete layer.xrlayer;
|
|
1256
1386
|
|
|
1257
1387
|
}
|
|
@@ -1261,9 +1391,9 @@ function onSessionEnd() {
|
|
|
1261
1391
|
//
|
|
1262
1392
|
|
|
1263
1393
|
this.isPresenting = false;
|
|
1394
|
+
this._useMultiview = false;
|
|
1264
1395
|
|
|
1265
1396
|
renderer._animation.stop();
|
|
1266
|
-
|
|
1267
1397
|
renderer._animation.setAnimationLoop( this._currentAnimationLoop );
|
|
1268
1398
|
renderer._animation.setContext( this._currentAnimationContext );
|
|
1269
1399
|
renderer._animation.start();
|
|
@@ -1351,25 +1481,25 @@ function createXRLayer( layer ) {
|
|
|
1351
1481
|
|
|
1352
1482
|
return this._glBinding.createQuadLayer( {
|
|
1353
1483
|
transform: new XRRigidTransform( layer.translation, layer.quaternion ),
|
|
1354
|
-
depthFormat: this._gl.DEPTH_COMPONENT,
|
|
1355
1484
|
width: layer.width / 2,
|
|
1356
1485
|
height: layer.height / 2,
|
|
1357
1486
|
space: this._referenceSpace,
|
|
1358
1487
|
viewPixelWidth: layer.pixelwidth,
|
|
1359
|
-
viewPixelHeight: layer.pixelheight
|
|
1488
|
+
viewPixelHeight: layer.pixelheight,
|
|
1489
|
+
clearOnAccess: false
|
|
1360
1490
|
} );
|
|
1361
1491
|
|
|
1362
1492
|
} else {
|
|
1363
1493
|
|
|
1364
1494
|
return this._glBinding.createCylinderLayer( {
|
|
1365
1495
|
transform: new XRRigidTransform( layer.translation, layer.quaternion ),
|
|
1366
|
-
depthFormat: this._gl.DEPTH_COMPONENT,
|
|
1367
1496
|
radius: layer.radius,
|
|
1368
1497
|
centralAngle: layer.centralAngle,
|
|
1369
1498
|
aspectRatio: layer.aspectRatio,
|
|
1370
1499
|
space: this._referenceSpace,
|
|
1371
1500
|
viewPixelWidth: layer.pixelwidth,
|
|
1372
|
-
viewPixelHeight: layer.pixelheight
|
|
1501
|
+
viewPixelHeight: layer.pixelheight,
|
|
1502
|
+
clearOnAccess: false
|
|
1373
1503
|
} );
|
|
1374
1504
|
|
|
1375
1505
|
}
|
|
@@ -1431,7 +1561,7 @@ function onAnimationFrame( time, frame ) {
|
|
|
1431
1561
|
backend.setXRRenderTargetTextures(
|
|
1432
1562
|
this._xrRenderTarget,
|
|
1433
1563
|
glSubImage.colorTexture,
|
|
1434
|
-
this._glProjLayer.ignoreDepthValues ? undefined : glSubImage.depthStencilTexture
|
|
1564
|
+
( this._glProjLayer.ignoreDepthValues && ! this._useMultiview ) ? undefined : glSubImage.depthStencilTexture
|
|
1435
1565
|
);
|
|
1436
1566
|
|
|
1437
1567
|
}
|
|
@@ -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;
|
|
@@ -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 USE_CLEARCOAT_NORMALMAP_TRIPLANAR
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
clearcoatNormal = normalize(normalMatrix * transpose(mat3(texture3DMatrix)) * texture2DTriplanarNormal( clearcoatNormalMap, clearcoatNormalMapTransform, clearcoatNormalScale, normalize(mat3(texture3DMatrix) * vModelNormal.xyz), triplanarCoords, triplanarWeights ));
|
|
5
5
|
|
|
6
6
|
#ifdef FLIP_SIDED
|
|
7
7
|
|
|
@@ -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
|
|
|
@@ -21,6 +21,10 @@ function WebGLAttributes( gl ) {
|
|
|
21
21
|
|
|
22
22
|
type = gl.FLOAT;
|
|
23
23
|
|
|
24
|
+
} else if ( typeof Float16Array !== 'undefined' && array instanceof Float16Array ) {
|
|
25
|
+
|
|
26
|
+
type = gl.HALF_FLOAT;
|
|
27
|
+
|
|
24
28
|
} else if ( array instanceof Uint16Array ) {
|
|
25
29
|
|
|
26
30
|
if ( attribute.isFloat16BufferAttribute ) {
|
|
@@ -310,7 +310,7 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
|
|
|
310
310
|
useFog: material.fog === true,
|
|
311
311
|
fogExp2: ( !! fog && fog.isFogExp2 ),
|
|
312
312
|
|
|
313
|
-
flatShading: material.flatShading === true,
|
|
313
|
+
flatShading: ( material.flatShading === true && material.wireframe === false ),
|
|
314
314
|
|
|
315
315
|
sizeAttenuation: material.sizeAttenuation === true,
|
|
316
316
|
logarithmicDepthBuffer: logarithmicDepthBuffer,
|
|
@@ -530,8 +530,10 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
|
|
|
530
530
|
_programLayers.enable( 20 );
|
|
531
531
|
if ( parameters.batchingColor )
|
|
532
532
|
_programLayers.enable( 21 );
|
|
533
|
-
if ( parameters.
|
|
533
|
+
if ( parameters.gradientMap )
|
|
534
534
|
_programLayers.enable( 22 );
|
|
535
|
+
if ( parameters.batchingMatrix )
|
|
536
|
+
_programLayers.enable( 23 );
|
|
535
537
|
|
|
536
538
|
array.push( _programLayers.mask );
|
|
537
539
|
_programLayers.disableAll();
|