@plastic-software/three 0.181.3 → 0.183.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/LICENSE +1 -1
- package/README.md +3 -4
- package/build/three.cjs +11330 -10017
- package/build/three.core.js +10011 -9493
- package/build/three.core.min.js +2 -2
- package/build/three.module.js +1414 -631
- package/build/three.module.min.js +2 -2
- package/build/three.tsl.js +21 -13
- package/build/three.tsl.min.js +2 -2
- package/build/three.webgpu.js +8007 -5427
- package/build/three.webgpu.min.js +2 -2
- package/build/three.webgpu.nodes.js +8005 -5426
- package/build/three.webgpu.nodes.min.js +2 -2
- package/examples/jsm/Addons.js +0 -3
- package/examples/jsm/animation/CCDIKSolver.js +2 -2
- package/examples/jsm/controls/ArcballControls.js +3 -3
- package/examples/jsm/controls/MapControls.js +55 -1
- package/examples/jsm/controls/OrbitControls.js +109 -6
- package/examples/jsm/controls/TrackballControls.js +6 -6
- package/examples/jsm/csm/CSM.js +2 -1
- package/examples/jsm/effects/AnaglyphEffect.js +102 -7
- package/examples/jsm/environments/ColorEnvironment.js +59 -0
- package/examples/jsm/environments/RoomEnvironment.js +3 -0
- package/examples/jsm/exporters/EXRExporter.js +1 -1
- package/examples/jsm/exporters/GLTFExporter.js +131 -4
- package/examples/jsm/exporters/USDZExporter.js +22 -3
- package/examples/jsm/geometries/DecalGeometry.js +1 -1
- package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
- package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -1
- package/examples/jsm/helpers/TextureHelperGPU.js +1 -1
- package/examples/jsm/helpers/ViewHelper.js +67 -8
- package/examples/jsm/inspector/Inspector.js +74 -14
- package/examples/jsm/inspector/RendererInspector.js +12 -2
- package/examples/jsm/inspector/tabs/Console.js +41 -7
- package/examples/jsm/inspector/tabs/Parameters.js +18 -2
- package/examples/jsm/inspector/tabs/Performance.js +2 -2
- package/examples/jsm/inspector/tabs/Viewer.js +4 -4
- package/examples/jsm/inspector/ui/Profiler.js +1836 -31
- package/examples/jsm/inspector/ui/Style.js +973 -14
- package/examples/jsm/inspector/ui/Tab.js +188 -1
- package/examples/jsm/inspector/ui/Values.js +17 -1
- package/examples/jsm/libs/meshopt_decoder.module.js +6 -5
- package/examples/jsm/lines/LineMaterial.js +6 -0
- package/examples/jsm/loaders/3DMLoader.js +5 -4
- package/examples/jsm/loaders/3MFLoader.js +2 -2
- package/examples/jsm/loaders/AMFLoader.js +2 -2
- package/examples/jsm/loaders/ColladaLoader.js +24 -4026
- package/examples/jsm/loaders/DRACOLoader.js +5 -5
- package/examples/jsm/loaders/EXRLoader.js +5 -5
- package/examples/jsm/loaders/FBXLoader.js +2 -4
- package/examples/jsm/loaders/GCodeLoader.js +34 -8
- package/examples/jsm/loaders/GLTFLoader.js +122 -171
- package/examples/jsm/loaders/HDRLoader.js +0 -1
- package/examples/jsm/loaders/KMZLoader.js +5 -5
- package/examples/jsm/loaders/KTX2Loader.js +19 -3
- package/examples/jsm/loaders/LDrawLoader.js +2 -3
- package/examples/jsm/loaders/LWOLoader.js +7 -39
- package/examples/jsm/loaders/NRRDLoader.js +2 -2
- package/examples/jsm/loaders/PCDLoader.js +4 -2
- package/examples/jsm/loaders/SVGLoader.js +1 -1
- package/examples/jsm/loaders/TDSLoader.js +0 -2
- package/examples/jsm/loaders/TGALoader.js +0 -2
- package/examples/jsm/loaders/USDLoader.js +100 -40
- package/examples/jsm/loaders/UltraHDRLoader.js +285 -160
- package/examples/jsm/loaders/VOXLoader.js +660 -117
- package/examples/jsm/loaders/VRMLLoader.js +79 -2
- package/examples/jsm/loaders/VTKLoader.js +37 -24
- package/examples/jsm/loaders/collada/ColladaComposer.js +2950 -0
- package/examples/jsm/loaders/collada/ColladaParser.js +1962 -0
- package/examples/jsm/loaders/usd/USDAParser.js +447 -366
- package/examples/jsm/loaders/usd/USDCParser.js +1841 -6
- package/examples/jsm/loaders/usd/USDComposer.js +4041 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +2 -2
- package/examples/jsm/materials/WoodNodeMaterial.js +11 -11
- package/examples/jsm/math/Octree.js +131 -1
- package/examples/jsm/misc/Volume.js +0 -1
- package/examples/jsm/misc/VolumeSlice.js +0 -1
- package/examples/jsm/objects/LensflareMesh.js +1 -1
- package/examples/jsm/objects/Sky.js +76 -4
- package/examples/jsm/objects/SkyMesh.js +127 -10
- package/examples/jsm/objects/Water.js +4 -3
- package/examples/jsm/objects/Water2.js +5 -3
- package/examples/jsm/objects/WaterMesh.js +5 -7
- package/examples/jsm/physics/AmmoPhysics.js +12 -7
- package/examples/jsm/physics/JoltPhysics.js +10 -6
- package/examples/jsm/physics/RapierPhysics.js +9 -5
- package/examples/jsm/postprocessing/EffectComposer.js +7 -5
- package/examples/jsm/postprocessing/OutputPass.js +9 -0
- package/examples/jsm/postprocessing/RenderPass.js +10 -0
- package/examples/jsm/postprocessing/RenderTransitionPass.js +1 -1
- package/examples/jsm/postprocessing/UnrealBloomPass.js +48 -18
- package/examples/jsm/renderers/CSS3DRenderer.js +1 -1
- package/examples/jsm/renderers/Projector.js +268 -30
- package/examples/jsm/renderers/SVGRenderer.js +193 -60
- package/examples/jsm/shaders/GTAOShader.js +19 -6
- package/examples/jsm/shaders/HalftoneShader.js +12 -1
- package/examples/jsm/shaders/PoissonDenoiseShader.js +6 -2
- package/examples/jsm/shaders/SAOShader.js +17 -4
- package/examples/jsm/shaders/SSAOShader.js +11 -1
- package/examples/jsm/shaders/SSRShader.js +6 -5
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +2 -4
- package/examples/jsm/shaders/VignetteShader.js +1 -1
- package/examples/jsm/transpiler/AST.js +44 -0
- package/examples/jsm/transpiler/GLSLDecoder.js +61 -4
- package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -0
- package/examples/jsm/transpiler/TSLEncoder.js +46 -3
- package/examples/jsm/transpiler/TranspilerUtils.js +3 -3
- package/examples/jsm/transpiler/WGSLEncoder.js +27 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +1 -1
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +458 -16
- package/examples/jsm/tsl/display/AnamorphicNode.js +1 -1
- package/examples/jsm/tsl/display/BilateralBlurNode.js +364 -0
- package/examples/jsm/tsl/display/BloomNode.js +16 -6
- package/examples/jsm/tsl/display/CRT.js +150 -0
- package/examples/jsm/tsl/display/DenoiseNode.js +1 -1
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +1 -1
- package/examples/jsm/tsl/display/DotScreenNode.js +1 -1
- package/examples/jsm/tsl/display/FXAANode.js +2 -2
- package/examples/jsm/tsl/display/GTAONode.js +5 -4
- package/examples/jsm/tsl/display/GaussianBlurNode.js +11 -2
- package/examples/jsm/tsl/display/GodraysNode.js +624 -0
- package/examples/jsm/tsl/display/LensflareNode.js +1 -1
- package/examples/jsm/tsl/display/Lut3DNode.js +1 -1
- package/examples/jsm/tsl/display/OutlineNode.js +3 -3
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -2
- package/examples/jsm/tsl/display/PixelationPassNode.js +7 -6
- package/examples/jsm/tsl/display/RGBShiftNode.js +2 -2
- package/examples/jsm/tsl/display/RetroPassNode.js +263 -0
- package/examples/jsm/tsl/display/SMAANode.js +2 -2
- package/examples/jsm/tsl/display/SSAAPassNode.js +2 -2
- package/examples/jsm/tsl/display/SSGINode.js +8 -20
- package/examples/jsm/tsl/display/SSRNode.js +8 -8
- package/examples/jsm/tsl/display/SSSNode.js +6 -4
- package/examples/jsm/tsl/display/Shape.js +29 -0
- package/examples/jsm/tsl/display/SobelOperatorNode.js +2 -2
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +8 -1
- package/examples/jsm/tsl/display/StereoPassNode.js +1 -2
- package/examples/jsm/tsl/display/TRAANode.js +273 -125
- package/examples/jsm/tsl/display/TransitionNode.js +1 -1
- package/examples/jsm/tsl/display/depthAwareBlend.js +80 -0
- package/examples/jsm/tsl/display/radialBlur.js +68 -0
- package/examples/jsm/tsl/math/Bayer.js +40 -1
- package/examples/jsm/utils/LDrawUtils.js +1 -1
- package/examples/jsm/utils/ShadowMapViewer.js +24 -10
- package/examples/jsm/utils/ShadowMapViewerGPU.js +1 -1
- package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
- package/package.json +20 -26
- package/src/Three.Core.js +2 -1
- package/src/Three.TSL.js +19 -11
- package/src/Three.WebGPU.Nodes.js +2 -0
- package/src/Three.WebGPU.js +3 -0
- package/src/Three.js +1 -0
- package/src/animation/AnimationAction.js +1 -1
- package/src/animation/AnimationClip.js +1 -1
- package/src/animation/AnimationMixer.js +6 -0
- package/src/animation/AnimationUtils.js +1 -12
- package/src/animation/KeyframeTrack.js +47 -8
- package/src/animation/PropertyMixer.js +4 -4
- package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
- package/src/animation/tracks/ColorKeyframeTrack.js +1 -1
- package/src/animation/tracks/NumberKeyframeTrack.js +1 -1
- package/src/animation/tracks/QuaternionKeyframeTrack.js +1 -1
- package/src/animation/tracks/StringKeyframeTrack.js +1 -1
- package/src/animation/tracks/VectorKeyframeTrack.js +1 -1
- package/src/audio/Audio.js +1 -1
- package/src/audio/AudioListener.js +5 -3
- package/src/cameras/Camera.js +32 -2
- package/src/cameras/CubeCamera.js +20 -0
- package/src/constants.js +90 -5
- package/src/core/BufferGeometry.js +14 -2
- package/src/core/Clock.js +7 -0
- package/src/core/Object3D.js +56 -4
- package/src/core/Raycaster.js +2 -2
- package/src/core/RenderTarget.js +3 -4
- package/src/extras/PMREMGenerator.js +7 -18
- package/src/extras/TextureUtils.js +5 -1
- package/src/geometries/ExtrudeGeometry.js +2 -2
- package/src/geometries/PolyhedronGeometry.js +1 -1
- package/src/geometries/TorusGeometry.js +8 -3
- package/src/helpers/CameraHelper.js +3 -0
- package/src/helpers/DirectionalLightHelper.js +4 -1
- package/src/helpers/HemisphereLightHelper.js +3 -0
- package/src/helpers/PointLightHelper.js +1 -25
- package/src/helpers/SpotLightHelper.js +3 -0
- package/src/lights/DirectionalLight.js +13 -0
- package/src/lights/HemisphereLight.js +10 -0
- package/src/lights/Light.js +1 -11
- package/src/lights/LightProbe.js +0 -15
- package/src/lights/LightShadow.js +15 -6
- package/src/lights/PointLight.js +15 -0
- package/src/lights/PointLightShadow.js +0 -86
- package/src/lights/SpotLight.js +22 -1
- package/src/lights/webgpu/IESSpotLight.js +2 -1
- package/src/loaders/Cache.js +28 -0
- package/src/loaders/FileLoader.js +1 -1
- package/src/loaders/ImageBitmapLoader.js +8 -3
- package/src/loaders/Loader.js +6 -0
- package/src/loaders/MaterialLoader.js +2 -1
- package/src/loaders/ObjectLoader.js +21 -2
- package/src/loaders/nodes/NodeLoader.js +2 -2
- package/src/materials/Material.js +2 -0
- package/src/materials/MeshLambertMaterial.js +9 -0
- package/src/materials/MeshPhongMaterial.js +9 -0
- package/src/materials/ShaderMaterial.js +20 -1
- package/src/materials/nodes/Line2NodeMaterial.js +7 -7
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +5 -2
- package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -4
- package/src/materials/nodes/NodeMaterial.js +72 -25
- package/src/materials/nodes/manager/NodeMaterialObserver.js +10 -4
- package/src/math/Line3.js +3 -5
- package/src/math/MathUtils.js +10 -10
- package/src/math/Matrix4.js +74 -65
- package/src/math/Quaternion.js +3 -29
- package/src/math/Sphere.js +1 -1
- package/src/math/Vector3.js +3 -5
- package/src/math/interpolants/BezierInterpolant.js +108 -0
- package/src/nodes/Nodes.js +87 -68
- package/src/nodes/TSL.js +6 -6
- package/src/nodes/accessors/Arrays.js +1 -1
- package/src/nodes/accessors/BatchNode.js +10 -10
- package/src/nodes/accessors/Bitangent.js +5 -5
- package/src/nodes/accessors/BufferAttributeNode.js +98 -12
- package/src/nodes/accessors/BufferNode.js +29 -2
- package/src/nodes/accessors/Camera.js +149 -28
- package/src/nodes/accessors/ClippingNode.js +4 -4
- package/src/nodes/accessors/CubeTextureNode.js +20 -1
- package/src/nodes/accessors/InstanceNode.js +148 -43
- package/src/nodes/accessors/MaterialNode.js +9 -1
- package/src/nodes/accessors/MaterialReferenceNode.js +1 -2
- package/src/nodes/accessors/ModelNode.js +1 -1
- package/src/nodes/accessors/Normal.js +11 -11
- package/src/nodes/accessors/Position.js +34 -2
- package/src/nodes/accessors/ReferenceBaseNode.js +4 -4
- package/src/nodes/accessors/ReferenceNode.js +4 -4
- package/src/nodes/accessors/RendererReferenceNode.js +1 -2
- package/src/nodes/accessors/SceneProperties.js +53 -0
- package/src/nodes/accessors/SkinningNode.js +27 -26
- package/src/nodes/accessors/StorageBufferNode.js +4 -21
- package/src/nodes/accessors/StorageTextureNode.js +37 -1
- package/src/nodes/accessors/Tangent.js +4 -14
- package/src/nodes/accessors/Texture3DNode.js +32 -35
- package/src/nodes/accessors/TextureNode.js +58 -22
- package/src/nodes/accessors/UniformArrayNode.js +4 -2
- package/src/nodes/accessors/UserDataNode.js +1 -2
- package/src/nodes/accessors/VertexColorNode.js +1 -2
- package/src/nodes/code/FunctionNode.js +1 -2
- package/src/nodes/core/ArrayNode.js +20 -1
- package/src/nodes/core/AssignNode.js +2 -2
- package/src/nodes/core/AttributeNode.js +2 -2
- package/src/nodes/core/ContextNode.js +103 -4
- package/src/nodes/core/MRTNode.js +48 -2
- package/src/nodes/core/Node.js +29 -3
- package/src/nodes/core/NodeBuilder.js +170 -53
- package/src/nodes/core/NodeError.js +28 -0
- package/src/nodes/core/NodeFrame.js +12 -4
- package/src/nodes/core/NodeUtils.js +10 -8
- package/src/nodes/core/OutputStructNode.js +12 -10
- package/src/nodes/core/ParameterNode.js +3 -3
- package/src/nodes/core/PropertyNode.js +19 -3
- package/src/nodes/core/StackNode.js +65 -16
- package/src/nodes/core/StackTrace.js +139 -0
- package/src/nodes/core/StructNode.js +16 -2
- package/src/nodes/core/StructTypeNode.js +11 -17
- package/src/nodes/core/SubBuildNode.js +1 -1
- package/src/nodes/core/UniformNode.js +21 -5
- package/src/nodes/core/VarNode.js +47 -22
- package/src/nodes/core/VaryingNode.js +1 -18
- package/src/nodes/display/BlendModes.js +0 -64
- package/src/nodes/display/ColorAdjustment.js +17 -0
- package/src/nodes/display/ColorSpaceNode.js +3 -3
- package/src/nodes/display/NormalMapNode.js +39 -4
- package/src/nodes/display/PassNode.js +98 -9
- package/src/nodes/display/RenderOutputNode.js +3 -3
- package/src/nodes/display/ScreenNode.js +3 -1
- package/src/nodes/display/ToneMappingNode.js +1 -1
- package/src/nodes/display/ToonOutlinePassNode.js +2 -2
- package/src/nodes/display/ViewportDepthNode.js +52 -4
- package/src/nodes/display/ViewportTextureNode.js +21 -4
- package/src/nodes/fog/Fog.js +18 -35
- package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +3 -3
- package/src/nodes/functions/BSDF/DFGLUT.js +56 -0
- package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +1 -1
- package/src/nodes/functions/PhysicalLightingModel.js +126 -45
- package/src/nodes/geometry/RangeNode.js +4 -2
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +1 -2
- package/src/nodes/gpgpu/ComputeNode.js +5 -4
- package/src/nodes/gpgpu/SubgroupFunctionNode.js +1 -1
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +4 -4
- package/src/nodes/lighting/AnalyticLightNode.js +53 -0
- package/src/nodes/lighting/EnvironmentNode.js +28 -3
- package/src/nodes/lighting/LightsNode.js +2 -2
- package/src/nodes/lighting/PointShadowNode.js +162 -149
- package/src/nodes/lighting/ShadowFilterNode.js +53 -65
- package/src/nodes/lighting/ShadowNode.js +97 -41
- package/src/nodes/math/BitcountNode.js +433 -0
- package/src/nodes/math/ConditionalNode.js +2 -2
- package/src/nodes/math/MathNode.js +3 -40
- package/src/nodes/math/OperatorNode.js +2 -1
- package/src/nodes/math/PackFloatNode.js +98 -0
- package/src/nodes/math/UnpackFloatNode.js +96 -0
- package/src/nodes/pmrem/PMREMNode.js +1 -1
- package/src/nodes/pmrem/PMREMUtils.js +9 -15
- package/src/nodes/tsl/TSLCore.js +17 -14
- package/src/nodes/utils/ArrayElementNode.js +13 -0
- package/src/nodes/utils/DebugNode.js +11 -11
- package/src/nodes/utils/EventNode.js +1 -2
- package/src/nodes/utils/JoinNode.js +2 -2
- package/src/nodes/utils/LoopNode.js +1 -1
- package/src/nodes/utils/MemberNode.js +1 -1
- package/src/nodes/utils/Packing.js +13 -1
- package/src/nodes/utils/PostProcessingUtils.js +33 -1
- package/src/nodes/utils/RTTNode.js +1 -1
- package/src/nodes/utils/ReflectorNode.js +3 -4
- package/src/nodes/utils/SampleNode.js +1 -1
- package/src/nodes/utils/SpriteSheetUV.js +35 -0
- package/src/nodes/utils/UVUtils.js +28 -0
- package/src/objects/BatchedMesh.js +27 -14
- package/src/objects/InstancedMesh.js +11 -0
- package/src/objects/Line.js +1 -1
- package/src/objects/Mesh.js +1 -1
- package/src/objects/Points.js +1 -1
- package/src/objects/Skeleton.js +9 -0
- package/src/renderers/WebGLRenderer.js +178 -92
- package/src/renderers/common/Backend.js +29 -0
- package/src/renderers/common/Background.js +24 -11
- package/src/renderers/common/BindGroup.js +1 -9
- package/src/renderers/common/Binding.js +11 -0
- package/src/renderers/common/Bindings.js +27 -12
- package/src/renderers/common/BlendMode.js +143 -0
- package/src/renderers/common/Buffer.js +40 -0
- package/src/renderers/common/BundleGroup.js +1 -1
- package/src/renderers/common/ChainMap.js +30 -6
- package/src/renderers/common/CubeRenderTarget.js +50 -6
- package/src/renderers/common/Geometries.js +29 -3
- package/src/renderers/common/Lighting.js +5 -21
- package/src/renderers/common/Pipelines.js +4 -4
- package/src/renderers/common/PostProcessing.js +8 -206
- package/src/renderers/common/RenderBundles.js +2 -1
- package/src/renderers/common/RenderContext.js +16 -0
- package/src/renderers/common/RenderContexts.js +33 -49
- package/src/renderers/common/RenderLists.js +2 -1
- package/src/renderers/common/RenderObject.js +15 -3
- package/src/renderers/common/RenderObjectPipeline.js +40 -0
- package/src/renderers/common/RenderObjects.js +18 -2
- package/src/renderers/common/RenderPipeline.js +203 -17
- package/src/renderers/common/Renderer.js +257 -72
- package/src/renderers/common/Sampler.js +4 -4
- package/src/renderers/common/StorageBuffer.js +13 -1
- package/src/renderers/common/Textures.js +17 -1
- package/src/renderers/common/TimestampQueryPool.js +5 -3
- package/src/renderers/common/Uniform.js +8 -0
- package/src/renderers/common/UniformsGroup.js +61 -0
- package/src/renderers/common/XRManager.js +3 -2
- package/src/renderers/common/extras/PMREMGenerator.js +2 -8
- package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
- package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +18 -6
- package/src/renderers/common/nodes/NodeStorageBuffer.js +13 -2
- package/src/renderers/common/nodes/NodeUniformBuffer.js +52 -0
- package/src/renderers/shaders/DFGLUTData.js +19 -34
- package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +8 -10
- package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +7 -11
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +5 -2
- package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +6 -2
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +8 -4
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +112 -51
- package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +225 -186
- package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk.js +3 -3
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +3 -0
- package/src/renderers/shaders/ShaderLib/{distanceRGBA.glsl.js → distance.glsl.js} +1 -2
- package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -1
- package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +1 -2
- package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -1
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -9
- package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +0 -1
- package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/vsm.glsl.js +4 -6
- package/src/renderers/shaders/ShaderLib.js +7 -5
- package/src/renderers/shaders/UniformsLib.js +0 -3
- package/src/renderers/webgl/WebGLBackground.js +2 -2
- package/src/renderers/webgl/WebGLBindingStates.js +99 -27
- package/src/renderers/webgl/WebGLCapabilities.js +3 -4
- package/src/renderers/webgl/WebGLEnvironments.js +228 -0
- package/src/renderers/webgl/WebGLGeometries.js +10 -7
- package/src/renderers/webgl/WebGLLights.js +18 -1
- package/src/renderers/webgl/WebGLMaterials.js +12 -0
- package/src/renderers/webgl/WebGLObjects.js +3 -1
- package/src/renderers/webgl/WebGLOutput.js +267 -0
- package/src/renderers/webgl/WebGLProgram.js +45 -109
- package/src/renderers/webgl/WebGLPrograms.js +45 -49
- package/src/renderers/webgl/WebGLRenderLists.js +15 -0
- package/src/renderers/webgl/WebGLShadowMap.js +188 -24
- package/src/renderers/webgl/WebGLState.js +32 -37
- package/src/renderers/webgl/WebGLTextures.js +89 -28
- package/src/renderers/webgl/WebGLUniforms.js +40 -3
- package/src/renderers/webgl/WebGLUtils.js +6 -2
- package/src/renderers/webgl-fallback/WebGLBackend.js +148 -18
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +156 -35
- package/src/renderers/webgl-fallback/utils/WebGLState.js +181 -5
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +5 -3
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +9 -9
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +6 -2
- package/src/renderers/webgpu/WebGPUBackend.js +119 -13
- package/src/renderers/webgpu/WebGPURenderer.js +2 -1
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +322 -68
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +4 -17
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +357 -200
- package/src/renderers/webgpu/utils/WebGPUConstants.js +2 -0
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +61 -23
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +152 -200
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +65 -42
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +7 -7
- package/src/renderers/webgpu/utils/WebGPUUtils.js +17 -11
- package/src/renderers/webxr/WebXRManager.js +2 -2
- package/src/textures/CubeDepthTexture.js +76 -0
- package/src/textures/Source.js +1 -1
- package/src/textures/Texture.js +3 -3
- package/src/utils.js +258 -3
- package/examples/jsm/materials/MeshGouraudMaterial.js +0 -434
- package/examples/jsm/materials/MeshPostProcessingMaterial.js +0 -167
- package/examples/jsm/shaders/GodRaysShader.js +0 -333
- package/src/nodes/accessors/SceneNode.js +0 -145
- package/src/nodes/code/ScriptableNode.js +0 -726
- package/src/nodes/code/ScriptableValueNode.js +0 -253
- package/src/nodes/display/PosterizeNode.js +0 -65
- package/src/nodes/functions/BSDF/DFGApprox.js +0 -71
- package/src/nodes/utils/SpriteSheetUVNode.js +0 -90
- package/src/renderers/webgl/WebGLCubeMaps.js +0 -99
- package/src/renderers/webgl/WebGLCubeUVMaps.js +0 -134
|
@@ -130,7 +130,6 @@ uniform float opacity;
|
|
|
130
130
|
varying vec3 vViewPosition;
|
|
131
131
|
|
|
132
132
|
#include <common>
|
|
133
|
-
#include <packing>
|
|
134
133
|
#include <dithering_pars_fragment>
|
|
135
134
|
#include <color_pars_fragment>
|
|
136
135
|
#include <uv_pars_fragment>
|
|
@@ -200,14 +199,10 @@ void main() {
|
|
|
200
199
|
vec3 outgoingLight = totalDiffuse + totalSpecular + totalEmissiveRadiance;
|
|
201
200
|
|
|
202
201
|
#ifdef USE_SHEEN
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
outgoingLight = outgoingLight * sheenEnergyComp + sheenSpecularDirect + sheenSpecularIndirect;
|
|
209
|
-
|
|
210
|
-
#endif
|
|
202
|
+
|
|
203
|
+
outgoingLight = outgoingLight + sheenSpecularDirect + sheenSpecularIndirect;
|
|
204
|
+
|
|
205
|
+
#endif
|
|
211
206
|
|
|
212
207
|
#ifdef USE_CLEARCOAT
|
|
213
208
|
|
|
@@ -36,7 +36,6 @@ uniform vec3 color;
|
|
|
36
36
|
uniform float opacity;
|
|
37
37
|
|
|
38
38
|
#include <common>
|
|
39
|
-
#include <packing>
|
|
40
39
|
#include <fog_pars_fragment>
|
|
41
40
|
#include <bsdfs>
|
|
42
41
|
#include <lights_pars_begin>
|
|
@@ -53,6 +52,7 @@ void main() {
|
|
|
53
52
|
#include <tonemapping_fragment>
|
|
54
53
|
#include <colorspace_fragment>
|
|
55
54
|
#include <fog_fragment>
|
|
55
|
+
#include <premultiplied_alpha_fragment>
|
|
56
56
|
|
|
57
57
|
}
|
|
58
58
|
`;
|
|
@@ -11,8 +11,6 @@ uniform sampler2D shadow_pass;
|
|
|
11
11
|
uniform vec2 resolution;
|
|
12
12
|
uniform float radius;
|
|
13
13
|
|
|
14
|
-
#include <packing>
|
|
15
|
-
|
|
16
14
|
void main() {
|
|
17
15
|
|
|
18
16
|
const float samples = float( VSM_SAMPLES );
|
|
@@ -28,13 +26,13 @@ void main() {
|
|
|
28
26
|
|
|
29
27
|
#ifdef HORIZONTAL_PASS
|
|
30
28
|
|
|
31
|
-
vec2 distribution =
|
|
29
|
+
vec2 distribution = texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( uvOffset, 0.0 ) * radius ) / resolution ).rg;
|
|
32
30
|
mean += distribution.x;
|
|
33
31
|
squared_mean += distribution.y * distribution.y + distribution.x * distribution.x;
|
|
34
32
|
|
|
35
33
|
#else
|
|
36
34
|
|
|
37
|
-
float depth =
|
|
35
|
+
float depth = texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, uvOffset ) * radius ) / resolution ).r;
|
|
38
36
|
mean += depth;
|
|
39
37
|
squared_mean += depth * depth;
|
|
40
38
|
|
|
@@ -45,9 +43,9 @@ void main() {
|
|
|
45
43
|
mean = mean / samples;
|
|
46
44
|
squared_mean = squared_mean / samples;
|
|
47
45
|
|
|
48
|
-
float std_dev = sqrt( squared_mean - mean * mean );
|
|
46
|
+
float std_dev = sqrt( max( 0.0, squared_mean - mean * mean ) );
|
|
49
47
|
|
|
50
|
-
gl_FragColor =
|
|
48
|
+
gl_FragColor = vec4( mean, std_dev, 0.0, 1.0 );
|
|
51
49
|
|
|
52
50
|
}
|
|
53
51
|
`;
|
|
@@ -39,7 +39,8 @@ const ShaderLib = {
|
|
|
39
39
|
UniformsLib.fog,
|
|
40
40
|
UniformsLib.lights,
|
|
41
41
|
{
|
|
42
|
-
emissive: { value: /*@__PURE__*/ new Color( 0x000000 ) }
|
|
42
|
+
emissive: { value: /*@__PURE__*/ new Color( 0x000000 ) },
|
|
43
|
+
envMapIntensity: { value: 1 }
|
|
43
44
|
}
|
|
44
45
|
] ),
|
|
45
46
|
|
|
@@ -65,7 +66,8 @@ const ShaderLib = {
|
|
|
65
66
|
{
|
|
66
67
|
emissive: { value: /*@__PURE__*/ new Color( 0x000000 ) },
|
|
67
68
|
specular: { value: /*@__PURE__*/ new Color( 0x111111 ) },
|
|
68
|
-
shininess: { value: 30 }
|
|
69
|
+
shininess: { value: 30 },
|
|
70
|
+
envMapIntensity: { value: 1 }
|
|
69
71
|
}
|
|
70
72
|
] ),
|
|
71
73
|
|
|
@@ -265,7 +267,7 @@ const ShaderLib = {
|
|
|
265
267
|
|
|
266
268
|
},
|
|
267
269
|
|
|
268
|
-
|
|
270
|
+
distance: {
|
|
269
271
|
|
|
270
272
|
uniforms: /*@__PURE__*/ mergeUniforms( [
|
|
271
273
|
UniformsLib.common,
|
|
@@ -277,8 +279,8 @@ const ShaderLib = {
|
|
|
277
279
|
}
|
|
278
280
|
] ),
|
|
279
281
|
|
|
280
|
-
vertexShader: ShaderChunk.
|
|
281
|
-
fragmentShader: ShaderChunk.
|
|
282
|
+
vertexShader: ShaderChunk.distance_vert,
|
|
283
|
+
fragmentShader: ShaderChunk.distance_frag
|
|
282
284
|
|
|
283
285
|
},
|
|
284
286
|
|
|
@@ -139,7 +139,6 @@ const UniformsLib = {
|
|
|
139
139
|
shadowMapSize: {}
|
|
140
140
|
} },
|
|
141
141
|
|
|
142
|
-
directionalShadowMap: { value: [] },
|
|
143
142
|
directionalShadowMatrix: { value: [] },
|
|
144
143
|
|
|
145
144
|
spotLights: { value: [], properties: {
|
|
@@ -161,7 +160,6 @@ const UniformsLib = {
|
|
|
161
160
|
} },
|
|
162
161
|
|
|
163
162
|
spotLightMap: { value: [] },
|
|
164
|
-
spotShadowMap: { value: [] },
|
|
165
163
|
spotLightMatrix: { value: [] },
|
|
166
164
|
|
|
167
165
|
pointLights: { value: [], properties: {
|
|
@@ -181,7 +179,6 @@ const UniformsLib = {
|
|
|
181
179
|
shadowCameraFar: {}
|
|
182
180
|
} },
|
|
183
181
|
|
|
184
|
-
pointShadowMap: { value: [] },
|
|
185
182
|
pointShadowMatrix: { value: [] },
|
|
186
183
|
|
|
187
184
|
hemisphereLights: { value: [], properties: {
|
|
@@ -14,7 +14,7 @@ const _rgb = { r: 0, b: 0, g: 0 };
|
|
|
14
14
|
const _e1 = /*@__PURE__*/ new Euler();
|
|
15
15
|
const _m1 = /*@__PURE__*/ new Matrix4();
|
|
16
16
|
|
|
17
|
-
function WebGLBackground( renderer,
|
|
17
|
+
function WebGLBackground( renderer, environments, state, objects, alpha, premultipliedAlpha ) {
|
|
18
18
|
|
|
19
19
|
const clearColor = new Color( 0x000000 );
|
|
20
20
|
let clearAlpha = alpha === true ? 0 : 1;
|
|
@@ -33,7 +33,7 @@ function WebGLBackground( renderer, cubemaps, cubeuvmaps, state, objects, alpha,
|
|
|
33
33
|
if ( background && background.isTexture ) {
|
|
34
34
|
|
|
35
35
|
const usePMREM = scene.backgroundBlurriness > 0; // use PMREM if the user wants to blur the background
|
|
36
|
-
background =
|
|
36
|
+
background = environments.get( background, usePMREM );
|
|
37
37
|
|
|
38
38
|
}
|
|
39
39
|
|
|
@@ -14,7 +14,7 @@ function WebGLBindingStates( gl, attributes ) {
|
|
|
14
14
|
|
|
15
15
|
let updateBuffers = false;
|
|
16
16
|
|
|
17
|
-
const state = getBindingState( geometry, program, material );
|
|
17
|
+
const state = getBindingState( object, geometry, program, material );
|
|
18
18
|
|
|
19
19
|
if ( currentState !== state ) {
|
|
20
20
|
|
|
@@ -67,16 +67,28 @@ function WebGLBindingStates( gl, attributes ) {
|
|
|
67
67
|
|
|
68
68
|
}
|
|
69
69
|
|
|
70
|
-
function getBindingState( geometry, program, material ) {
|
|
70
|
+
function getBindingState( object, geometry, program, material ) {
|
|
71
71
|
|
|
72
72
|
const wireframe = ( material.wireframe === true );
|
|
73
73
|
|
|
74
|
-
let
|
|
74
|
+
let objectMap = bindingStates[ geometry.id ];
|
|
75
|
+
|
|
76
|
+
if ( objectMap === undefined ) {
|
|
77
|
+
|
|
78
|
+
objectMap = {};
|
|
79
|
+
bindingStates[ geometry.id ] = objectMap;
|
|
80
|
+
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
// Each InstancedMesh requires unique binding states because it contains instanced attributes.
|
|
84
|
+
const objectId = ( object.isInstancedMesh === true ) ? object.id : 0;
|
|
85
|
+
|
|
86
|
+
let programMap = objectMap[ objectId ];
|
|
75
87
|
|
|
76
88
|
if ( programMap === undefined ) {
|
|
77
89
|
|
|
78
90
|
programMap = {};
|
|
79
|
-
|
|
91
|
+
objectMap[ objectId ] = programMap;
|
|
80
92
|
|
|
81
93
|
}
|
|
82
94
|
|
|
@@ -477,21 +489,27 @@ function WebGLBindingStates( gl, attributes ) {
|
|
|
477
489
|
|
|
478
490
|
for ( const geometryId in bindingStates ) {
|
|
479
491
|
|
|
480
|
-
const
|
|
492
|
+
const objectMap = bindingStates[ geometryId ];
|
|
481
493
|
|
|
482
|
-
for ( const
|
|
494
|
+
for ( const objectId in objectMap ) {
|
|
483
495
|
|
|
484
|
-
const
|
|
496
|
+
const programMap = objectMap[ objectId ];
|
|
485
497
|
|
|
486
|
-
for ( const
|
|
498
|
+
for ( const programId in programMap ) {
|
|
487
499
|
|
|
488
|
-
|
|
500
|
+
const stateMap = programMap[ programId ];
|
|
489
501
|
|
|
490
|
-
|
|
502
|
+
for ( const wireframe in stateMap ) {
|
|
491
503
|
|
|
492
|
-
|
|
504
|
+
deleteVertexArrayObject( stateMap[ wireframe ].object );
|
|
493
505
|
|
|
494
|
-
|
|
506
|
+
delete stateMap[ wireframe ];
|
|
507
|
+
|
|
508
|
+
}
|
|
509
|
+
|
|
510
|
+
delete programMap[ programId ];
|
|
511
|
+
|
|
512
|
+
}
|
|
495
513
|
|
|
496
514
|
}
|
|
497
515
|
|
|
@@ -505,21 +523,27 @@ function WebGLBindingStates( gl, attributes ) {
|
|
|
505
523
|
|
|
506
524
|
if ( bindingStates[ geometry.id ] === undefined ) return;
|
|
507
525
|
|
|
508
|
-
const
|
|
526
|
+
const objectMap = bindingStates[ geometry.id ];
|
|
509
527
|
|
|
510
|
-
for ( const
|
|
528
|
+
for ( const objectId in objectMap ) {
|
|
511
529
|
|
|
512
|
-
const
|
|
530
|
+
const programMap = objectMap[ objectId ];
|
|
513
531
|
|
|
514
|
-
for ( const
|
|
532
|
+
for ( const programId in programMap ) {
|
|
515
533
|
|
|
516
|
-
|
|
534
|
+
const stateMap = programMap[ programId ];
|
|
517
535
|
|
|
518
|
-
|
|
536
|
+
for ( const wireframe in stateMap ) {
|
|
519
537
|
|
|
520
|
-
|
|
538
|
+
deleteVertexArrayObject( stateMap[ wireframe ].object );
|
|
521
539
|
|
|
522
|
-
|
|
540
|
+
delete stateMap[ wireframe ];
|
|
541
|
+
|
|
542
|
+
}
|
|
543
|
+
|
|
544
|
+
delete programMap[ programId ];
|
|
545
|
+
|
|
546
|
+
}
|
|
523
547
|
|
|
524
548
|
}
|
|
525
549
|
|
|
@@ -531,26 +555,73 @@ function WebGLBindingStates( gl, attributes ) {
|
|
|
531
555
|
|
|
532
556
|
for ( const geometryId in bindingStates ) {
|
|
533
557
|
|
|
534
|
-
const
|
|
558
|
+
const objectMap = bindingStates[ geometryId ];
|
|
559
|
+
|
|
560
|
+
for ( const objectId in objectMap ) {
|
|
561
|
+
|
|
562
|
+
const programMap = objectMap[ objectId ];
|
|
563
|
+
|
|
564
|
+
if ( programMap[ program.id ] === undefined ) continue;
|
|
565
|
+
|
|
566
|
+
const stateMap = programMap[ program.id ];
|
|
567
|
+
|
|
568
|
+
for ( const wireframe in stateMap ) {
|
|
569
|
+
|
|
570
|
+
deleteVertexArrayObject( stateMap[ wireframe ].object );
|
|
571
|
+
|
|
572
|
+
delete stateMap[ wireframe ];
|
|
573
|
+
|
|
574
|
+
}
|
|
575
|
+
|
|
576
|
+
delete programMap[ program.id ];
|
|
577
|
+
|
|
578
|
+
}
|
|
579
|
+
|
|
580
|
+
}
|
|
581
|
+
|
|
582
|
+
}
|
|
583
|
+
|
|
584
|
+
function releaseStatesOfObject( object ) {
|
|
585
|
+
|
|
586
|
+
for ( const geometryId in bindingStates ) {
|
|
587
|
+
|
|
588
|
+
const objectMap = bindingStates[ geometryId ];
|
|
535
589
|
|
|
536
|
-
|
|
590
|
+
const objectId = ( object.isInstancedMesh === true ) ? object.id : 0;
|
|
537
591
|
|
|
538
|
-
const
|
|
592
|
+
const programMap = objectMap[ objectId ];
|
|
539
593
|
|
|
540
|
-
|
|
594
|
+
if ( programMap === undefined ) continue;
|
|
541
595
|
|
|
542
|
-
|
|
596
|
+
for ( const programId in programMap ) {
|
|
543
597
|
|
|
544
|
-
|
|
598
|
+
const stateMap = programMap[ programId ];
|
|
599
|
+
|
|
600
|
+
for ( const wireframe in stateMap ) {
|
|
601
|
+
|
|
602
|
+
deleteVertexArrayObject( stateMap[ wireframe ].object );
|
|
603
|
+
|
|
604
|
+
delete stateMap[ wireframe ];
|
|
605
|
+
|
|
606
|
+
}
|
|
607
|
+
|
|
608
|
+
delete programMap[ programId ];
|
|
545
609
|
|
|
546
610
|
}
|
|
547
611
|
|
|
548
|
-
delete
|
|
612
|
+
delete objectMap[ objectId ];
|
|
613
|
+
|
|
614
|
+
if ( Object.keys( objectMap ).length === 0 ) {
|
|
615
|
+
|
|
616
|
+
delete bindingStates[ geometryId ];
|
|
617
|
+
|
|
618
|
+
}
|
|
549
619
|
|
|
550
620
|
}
|
|
551
621
|
|
|
552
622
|
}
|
|
553
623
|
|
|
624
|
+
|
|
554
625
|
function reset() {
|
|
555
626
|
|
|
556
627
|
resetDefaultState();
|
|
@@ -580,6 +651,7 @@ function WebGLBindingStates( gl, attributes ) {
|
|
|
580
651
|
resetDefaultState: resetDefaultState,
|
|
581
652
|
dispose: dispose,
|
|
582
653
|
releaseStatesOfGeometry: releaseStatesOfGeometry,
|
|
654
|
+
releaseStatesOfObject: releaseStatesOfObject,
|
|
583
655
|
releaseStatesOfProgram: releaseStatesOfProgram,
|
|
584
656
|
|
|
585
657
|
initAttributes: initAttributes,
|
|
@@ -105,9 +105,8 @@ function WebGLCapabilities( gl, extensions, parameters, utils ) {
|
|
|
105
105
|
const maxVaryings = gl.getParameter( gl.MAX_VARYING_VECTORS );
|
|
106
106
|
const maxFragmentUniforms = gl.getParameter( gl.MAX_FRAGMENT_UNIFORM_VECTORS );
|
|
107
107
|
|
|
108
|
-
const vertexTextures = maxVertexTextures > 0;
|
|
109
|
-
|
|
110
108
|
const maxSamples = gl.getParameter( gl.MAX_SAMPLES );
|
|
109
|
+
const samples = gl.getParameter( gl.SAMPLES );
|
|
111
110
|
|
|
112
111
|
return {
|
|
113
112
|
|
|
@@ -133,9 +132,9 @@ function WebGLCapabilities( gl, extensions, parameters, utils ) {
|
|
|
133
132
|
maxVaryings: maxVaryings,
|
|
134
133
|
maxFragmentUniforms: maxFragmentUniforms,
|
|
135
134
|
|
|
136
|
-
|
|
135
|
+
maxSamples: maxSamples,
|
|
137
136
|
|
|
138
|
-
|
|
137
|
+
samples: samples
|
|
139
138
|
|
|
140
139
|
};
|
|
141
140
|
|
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
import { CubeReflectionMapping, CubeRefractionMapping, EquirectangularReflectionMapping, EquirectangularRefractionMapping } from '../../constants.js';
|
|
2
|
+
import { PMREMGenerator } from '../../extras/PMREMGenerator.js';
|
|
3
|
+
import { WebGLCubeRenderTarget } from '../WebGLCubeRenderTarget.js';
|
|
4
|
+
|
|
5
|
+
function WebGLEnvironments( renderer ) {
|
|
6
|
+
|
|
7
|
+
let cubeMaps = new WeakMap();
|
|
8
|
+
let pmremMaps = new WeakMap();
|
|
9
|
+
|
|
10
|
+
let pmremGenerator = null;
|
|
11
|
+
|
|
12
|
+
function get( texture, usePMREM = false ) {
|
|
13
|
+
|
|
14
|
+
if ( texture === null || texture === undefined ) return null;
|
|
15
|
+
|
|
16
|
+
if ( usePMREM ) {
|
|
17
|
+
|
|
18
|
+
return getPMREM( texture );
|
|
19
|
+
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
return getCube( texture );
|
|
23
|
+
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
function getCube( texture ) {
|
|
27
|
+
|
|
28
|
+
if ( texture && texture.isTexture ) {
|
|
29
|
+
|
|
30
|
+
const mapping = texture.mapping;
|
|
31
|
+
|
|
32
|
+
if ( mapping === EquirectangularReflectionMapping || mapping === EquirectangularRefractionMapping ) {
|
|
33
|
+
|
|
34
|
+
if ( cubeMaps.has( texture ) ) {
|
|
35
|
+
|
|
36
|
+
const cubemap = cubeMaps.get( texture ).texture;
|
|
37
|
+
return mapTextureMapping( cubemap, texture.mapping );
|
|
38
|
+
|
|
39
|
+
} else {
|
|
40
|
+
|
|
41
|
+
const image = texture.image;
|
|
42
|
+
|
|
43
|
+
if ( image && image.height > 0 ) {
|
|
44
|
+
|
|
45
|
+
const renderTarget = new WebGLCubeRenderTarget( image.height );
|
|
46
|
+
renderTarget.fromEquirectangularTexture( renderer, texture );
|
|
47
|
+
cubeMaps.set( texture, renderTarget );
|
|
48
|
+
|
|
49
|
+
texture.addEventListener( 'dispose', onCubemapDispose );
|
|
50
|
+
|
|
51
|
+
return mapTextureMapping( renderTarget.texture, texture.mapping );
|
|
52
|
+
|
|
53
|
+
} else {
|
|
54
|
+
|
|
55
|
+
// image not yet ready. try the conversion next frame
|
|
56
|
+
|
|
57
|
+
return null;
|
|
58
|
+
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
return texture;
|
|
68
|
+
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
function getPMREM( texture ) {
|
|
72
|
+
|
|
73
|
+
if ( texture && texture.isTexture ) {
|
|
74
|
+
|
|
75
|
+
const mapping = texture.mapping;
|
|
76
|
+
|
|
77
|
+
const isEquirectMap = ( mapping === EquirectangularReflectionMapping || mapping === EquirectangularRefractionMapping );
|
|
78
|
+
const isCubeMap = ( mapping === CubeReflectionMapping || mapping === CubeRefractionMapping );
|
|
79
|
+
|
|
80
|
+
// equirect/cube map to cubeUV conversion
|
|
81
|
+
|
|
82
|
+
if ( isEquirectMap || isCubeMap ) {
|
|
83
|
+
|
|
84
|
+
let renderTarget = pmremMaps.get( texture );
|
|
85
|
+
|
|
86
|
+
const currentPMREMVersion = renderTarget !== undefined ? renderTarget.texture.pmremVersion : 0;
|
|
87
|
+
|
|
88
|
+
if ( texture.isRenderTargetTexture && texture.pmremVersion !== currentPMREMVersion ) {
|
|
89
|
+
|
|
90
|
+
if ( pmremGenerator === null ) pmremGenerator = new PMREMGenerator( renderer );
|
|
91
|
+
|
|
92
|
+
renderTarget = isEquirectMap ? pmremGenerator.fromEquirectangular( texture, renderTarget ) : pmremGenerator.fromCubemap( texture, renderTarget );
|
|
93
|
+
renderTarget.texture.pmremVersion = texture.pmremVersion;
|
|
94
|
+
|
|
95
|
+
pmremMaps.set( texture, renderTarget );
|
|
96
|
+
|
|
97
|
+
return renderTarget.texture;
|
|
98
|
+
|
|
99
|
+
} else {
|
|
100
|
+
|
|
101
|
+
if ( renderTarget !== undefined ) {
|
|
102
|
+
|
|
103
|
+
return renderTarget.texture;
|
|
104
|
+
|
|
105
|
+
} else {
|
|
106
|
+
|
|
107
|
+
const image = texture.image;
|
|
108
|
+
|
|
109
|
+
if ( ( isEquirectMap && image && image.height > 0 ) || ( isCubeMap && image && isCubeTextureComplete( image ) ) ) {
|
|
110
|
+
|
|
111
|
+
if ( pmremGenerator === null ) pmremGenerator = new PMREMGenerator( renderer );
|
|
112
|
+
|
|
113
|
+
renderTarget = isEquirectMap ? pmremGenerator.fromEquirectangular( texture ) : pmremGenerator.fromCubemap( texture );
|
|
114
|
+
renderTarget.texture.pmremVersion = texture.pmremVersion;
|
|
115
|
+
|
|
116
|
+
pmremMaps.set( texture, renderTarget );
|
|
117
|
+
|
|
118
|
+
texture.addEventListener( 'dispose', onPMREMDispose );
|
|
119
|
+
|
|
120
|
+
return renderTarget.texture;
|
|
121
|
+
|
|
122
|
+
} else {
|
|
123
|
+
|
|
124
|
+
// image not yet ready. try the conversion next frame
|
|
125
|
+
|
|
126
|
+
return null;
|
|
127
|
+
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
return texture;
|
|
139
|
+
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
function mapTextureMapping( texture, mapping ) {
|
|
143
|
+
|
|
144
|
+
if ( mapping === EquirectangularReflectionMapping ) {
|
|
145
|
+
|
|
146
|
+
texture.mapping = CubeReflectionMapping;
|
|
147
|
+
|
|
148
|
+
} else if ( mapping === EquirectangularRefractionMapping ) {
|
|
149
|
+
|
|
150
|
+
texture.mapping = CubeRefractionMapping;
|
|
151
|
+
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
return texture;
|
|
155
|
+
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
function isCubeTextureComplete( image ) {
|
|
159
|
+
|
|
160
|
+
let count = 0;
|
|
161
|
+
const length = 6;
|
|
162
|
+
|
|
163
|
+
for ( let i = 0; i < length; i ++ ) {
|
|
164
|
+
|
|
165
|
+
if ( image[ i ] !== undefined ) count ++;
|
|
166
|
+
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
return count === length;
|
|
170
|
+
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
function onCubemapDispose( event ) {
|
|
174
|
+
|
|
175
|
+
const texture = event.target;
|
|
176
|
+
|
|
177
|
+
texture.removeEventListener( 'dispose', onCubemapDispose );
|
|
178
|
+
|
|
179
|
+
const cubemap = cubeMaps.get( texture );
|
|
180
|
+
|
|
181
|
+
if ( cubemap !== undefined ) {
|
|
182
|
+
|
|
183
|
+
cubeMaps.delete( texture );
|
|
184
|
+
cubemap.dispose();
|
|
185
|
+
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
function onPMREMDispose( event ) {
|
|
191
|
+
|
|
192
|
+
const texture = event.target;
|
|
193
|
+
|
|
194
|
+
texture.removeEventListener( 'dispose', onPMREMDispose );
|
|
195
|
+
|
|
196
|
+
const pmrem = pmremMaps.get( texture );
|
|
197
|
+
|
|
198
|
+
if ( pmrem !== undefined ) {
|
|
199
|
+
|
|
200
|
+
pmremMaps.delete( texture );
|
|
201
|
+
pmrem.dispose();
|
|
202
|
+
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
function dispose() {
|
|
208
|
+
|
|
209
|
+
cubeMaps = new WeakMap();
|
|
210
|
+
pmremMaps = new WeakMap();
|
|
211
|
+
|
|
212
|
+
if ( pmremGenerator !== null ) {
|
|
213
|
+
|
|
214
|
+
pmremGenerator.dispose();
|
|
215
|
+
pmremGenerator = null;
|
|
216
|
+
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
return {
|
|
222
|
+
get: get,
|
|
223
|
+
dispose: dispose
|
|
224
|
+
};
|
|
225
|
+
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
export { WebGLEnvironments };
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { Uint16BufferAttribute, Uint32BufferAttribute } from '../../core/BufferAttribute.js';
|
|
2
|
-
import { arrayNeedsUint32 } from '../../utils.js';
|
|
3
2
|
|
|
4
3
|
function WebGLGeometries( gl, attributes, info, bindingStates ) {
|
|
5
4
|
|
|
@@ -85,6 +84,12 @@ function WebGLGeometries( gl, attributes, info, bindingStates ) {
|
|
|
85
84
|
const geometryPosition = geometry.attributes.position;
|
|
86
85
|
let version = 0;
|
|
87
86
|
|
|
87
|
+
if ( geometryPosition === undefined ) {
|
|
88
|
+
|
|
89
|
+
return;
|
|
90
|
+
|
|
91
|
+
}
|
|
92
|
+
|
|
88
93
|
if ( geometryIndex !== null ) {
|
|
89
94
|
|
|
90
95
|
const array = geometryIndex.array;
|
|
@@ -100,7 +105,7 @@ function WebGLGeometries( gl, attributes, info, bindingStates ) {
|
|
|
100
105
|
|
|
101
106
|
}
|
|
102
107
|
|
|
103
|
-
} else
|
|
108
|
+
} else {
|
|
104
109
|
|
|
105
110
|
const array = geometryPosition.array;
|
|
106
111
|
version = geometryPosition.version;
|
|
@@ -115,13 +120,11 @@ function WebGLGeometries( gl, attributes, info, bindingStates ) {
|
|
|
115
120
|
|
|
116
121
|
}
|
|
117
122
|
|
|
118
|
-
} else {
|
|
119
|
-
|
|
120
|
-
return;
|
|
121
|
-
|
|
122
123
|
}
|
|
123
124
|
|
|
124
|
-
|
|
125
|
+
// check whether a 32 bit or 16 bit buffer is required to store the indices
|
|
126
|
+
// account for PRIMITIVE_RESTART_FIXED_INDEX, #24565
|
|
127
|
+
const attribute = new ( geometryPosition.count >= 65535 ? Uint32BufferAttribute : Uint16BufferAttribute )( indices, 1 );
|
|
125
128
|
attribute.version = version;
|
|
126
129
|
|
|
127
130
|
// Updating index buffer in VAO now. See WebGLBindingStates
|
|
@@ -3,6 +3,7 @@ import { Matrix4 } from '../../math/Matrix4.js';
|
|
|
3
3
|
import { Vector2 } from '../../math/Vector2.js';
|
|
4
4
|
import { Vector3 } from '../../math/Vector3.js';
|
|
5
5
|
import { UniformsLib } from '../shaders/UniformsLib.js';
|
|
6
|
+
import { RGFormat } from '../../constants.js';
|
|
6
7
|
|
|
7
8
|
function UniformsCache() {
|
|
8
9
|
|
|
@@ -239,7 +240,23 @@ function WebGLLights( extensions ) {
|
|
|
239
240
|
const intensity = light.intensity;
|
|
240
241
|
const distance = light.distance;
|
|
241
242
|
|
|
242
|
-
|
|
243
|
+
let shadowMap = null;
|
|
244
|
+
|
|
245
|
+
if ( light.shadow && light.shadow.map ) {
|
|
246
|
+
|
|
247
|
+
if ( light.shadow.map.texture.format === RGFormat ) {
|
|
248
|
+
|
|
249
|
+
// VSM uses color texture with blurred mean/std_dev
|
|
250
|
+
shadowMap = light.shadow.map.texture;
|
|
251
|
+
|
|
252
|
+
} else {
|
|
253
|
+
|
|
254
|
+
// Other types use depth texture
|
|
255
|
+
shadowMap = light.shadow.map.depthTexture || light.shadow.map.texture;
|
|
256
|
+
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
}
|
|
243
260
|
|
|
244
261
|
if ( light.isAmbientLight ) {
|
|
245
262
|
|