@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
|
@@ -1,13 +1,5 @@
|
|
|
1
1
|
import { LightShadow } from './LightShadow.js';
|
|
2
2
|
import { PerspectiveCamera } from '../cameras/PerspectiveCamera.js';
|
|
3
|
-
import { Matrix4 } from '../math/Matrix4.js';
|
|
4
|
-
import { Vector2 } from '../math/Vector2.js';
|
|
5
|
-
import { Vector3 } from '../math/Vector3.js';
|
|
6
|
-
import { Vector4 } from '../math/Vector4.js';
|
|
7
|
-
|
|
8
|
-
const _projScreenMatrix = /*@__PURE__*/ new Matrix4();
|
|
9
|
-
const _lightPositionWorld = /*@__PURE__*/ new Vector3();
|
|
10
|
-
const _lookTarget = /*@__PURE__*/ new Vector3();
|
|
11
3
|
|
|
12
4
|
/**
|
|
13
5
|
* Represents the shadow configuration of point lights.
|
|
@@ -32,84 +24,6 @@ class PointLightShadow extends LightShadow {
|
|
|
32
24
|
*/
|
|
33
25
|
this.isPointLightShadow = true;
|
|
34
26
|
|
|
35
|
-
this._frameExtents = new Vector2( 4, 2 );
|
|
36
|
-
|
|
37
|
-
this._viewportCount = 6;
|
|
38
|
-
|
|
39
|
-
this._viewports = [
|
|
40
|
-
// These viewports map a cube-map onto a 2D texture with the
|
|
41
|
-
// following orientation:
|
|
42
|
-
//
|
|
43
|
-
// xzXZ
|
|
44
|
-
// y Y
|
|
45
|
-
//
|
|
46
|
-
// X - Positive x direction
|
|
47
|
-
// x - Negative x direction
|
|
48
|
-
// Y - Positive y direction
|
|
49
|
-
// y - Negative y direction
|
|
50
|
-
// Z - Positive z direction
|
|
51
|
-
// z - Negative z direction
|
|
52
|
-
|
|
53
|
-
// positive X
|
|
54
|
-
new Vector4( 2, 1, 1, 1 ),
|
|
55
|
-
// negative X
|
|
56
|
-
new Vector4( 0, 1, 1, 1 ),
|
|
57
|
-
// positive Z
|
|
58
|
-
new Vector4( 3, 1, 1, 1 ),
|
|
59
|
-
// negative Z
|
|
60
|
-
new Vector4( 1, 1, 1, 1 ),
|
|
61
|
-
// positive Y
|
|
62
|
-
new Vector4( 3, 0, 1, 1 ),
|
|
63
|
-
// negative Y
|
|
64
|
-
new Vector4( 1, 0, 1, 1 )
|
|
65
|
-
];
|
|
66
|
-
|
|
67
|
-
this._cubeDirections = [
|
|
68
|
-
new Vector3( 1, 0, 0 ), new Vector3( - 1, 0, 0 ), new Vector3( 0, 0, 1 ),
|
|
69
|
-
new Vector3( 0, 0, - 1 ), new Vector3( 0, 1, 0 ), new Vector3( 0, - 1, 0 )
|
|
70
|
-
];
|
|
71
|
-
|
|
72
|
-
this._cubeUps = [
|
|
73
|
-
new Vector3( 0, 1, 0 ), new Vector3( 0, 1, 0 ), new Vector3( 0, 1, 0 ),
|
|
74
|
-
new Vector3( 0, 1, 0 ), new Vector3( 0, 0, 1 ), new Vector3( 0, 0, - 1 )
|
|
75
|
-
];
|
|
76
|
-
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
/**
|
|
80
|
-
* Update the matrices for the camera and shadow, used internally by the renderer.
|
|
81
|
-
*
|
|
82
|
-
* @param {Light} light - The light for which the shadow is being rendered.
|
|
83
|
-
* @param {number} [viewportIndex=0] - The viewport index.
|
|
84
|
-
*/
|
|
85
|
-
updateMatrices( light, viewportIndex = 0 ) {
|
|
86
|
-
|
|
87
|
-
const camera = this.camera;
|
|
88
|
-
const shadowMatrix = this.matrix;
|
|
89
|
-
|
|
90
|
-
const far = light.distance || camera.far;
|
|
91
|
-
|
|
92
|
-
if ( far !== camera.far ) {
|
|
93
|
-
|
|
94
|
-
camera.far = far;
|
|
95
|
-
camera.updateProjectionMatrix();
|
|
96
|
-
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
_lightPositionWorld.setFromMatrixPosition( light.matrixWorld );
|
|
100
|
-
camera.position.copy( _lightPositionWorld );
|
|
101
|
-
|
|
102
|
-
_lookTarget.copy( camera.position );
|
|
103
|
-
_lookTarget.add( this._cubeDirections[ viewportIndex ] );
|
|
104
|
-
camera.up.copy( this._cubeUps[ viewportIndex ] );
|
|
105
|
-
camera.lookAt( _lookTarget );
|
|
106
|
-
camera.updateMatrixWorld();
|
|
107
|
-
|
|
108
|
-
shadowMatrix.makeTranslation( - _lightPositionWorld.x, - _lightPositionWorld.y, - _lightPositionWorld.z );
|
|
109
|
-
|
|
110
|
-
_projScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse );
|
|
111
|
-
this._frustum.setFromProjectionMatrix( _projScreenMatrix, camera.coordinateSystem, camera.reversedDepth );
|
|
112
|
-
|
|
113
27
|
}
|
|
114
28
|
|
|
115
29
|
}
|
package/src/lights/SpotLight.js
CHANGED
|
@@ -147,6 +147,8 @@ class SpotLight extends Light {
|
|
|
147
147
|
|
|
148
148
|
dispose() {
|
|
149
149
|
|
|
150
|
+
super.dispose();
|
|
151
|
+
|
|
150
152
|
this.shadow.dispose();
|
|
151
153
|
|
|
152
154
|
}
|
|
@@ -161,13 +163,32 @@ class SpotLight extends Light {
|
|
|
161
163
|
this.decay = source.decay;
|
|
162
164
|
|
|
163
165
|
this.target = source.target.clone();
|
|
164
|
-
|
|
166
|
+
this.map = source.map;
|
|
165
167
|
this.shadow = source.shadow.clone();
|
|
166
168
|
|
|
167
169
|
return this;
|
|
168
170
|
|
|
169
171
|
}
|
|
170
172
|
|
|
173
|
+
toJSON( meta ) {
|
|
174
|
+
|
|
175
|
+
const data = super.toJSON( meta );
|
|
176
|
+
|
|
177
|
+
data.object.distance = this.distance;
|
|
178
|
+
data.object.angle = this.angle;
|
|
179
|
+
data.object.decay = this.decay;
|
|
180
|
+
data.object.penumbra = this.penumbra;
|
|
181
|
+
|
|
182
|
+
data.object.target = this.target.uuid;
|
|
183
|
+
|
|
184
|
+
if ( this.map && this.map.isTexture ) data.object.map = this.map.toJSON( meta ).uuid;
|
|
185
|
+
|
|
186
|
+
data.object.shadow = this.shadow.toJSON();
|
|
187
|
+
|
|
188
|
+
return data;
|
|
189
|
+
|
|
190
|
+
}
|
|
191
|
+
|
|
171
192
|
}
|
|
172
193
|
|
|
173
194
|
export { SpotLight };
|
|
@@ -22,7 +22,8 @@ class IESSpotLight extends SpotLight {
|
|
|
22
22
|
super( color, intensity, distance, angle, penumbra, decay );
|
|
23
23
|
|
|
24
24
|
/**
|
|
25
|
-
*
|
|
25
|
+
* The IES map. It's a lookup table that stores normalized attenuation factors
|
|
26
|
+
* (0.0 to 1.0) that represent the light's intensity at a specific angle.
|
|
26
27
|
*
|
|
27
28
|
* @type {?Texture}
|
|
28
29
|
* @default null
|
package/src/loaders/Cache.js
CHANGED
|
@@ -35,6 +35,8 @@ const Cache = {
|
|
|
35
35
|
|
|
36
36
|
if ( this.enabled === false ) return;
|
|
37
37
|
|
|
38
|
+
if ( isBlobURL( key ) ) return;
|
|
39
|
+
|
|
38
40
|
// log( 'Cache', 'Adding key:', key );
|
|
39
41
|
|
|
40
42
|
this.files[ key ] = file;
|
|
@@ -52,6 +54,8 @@ const Cache = {
|
|
|
52
54
|
|
|
53
55
|
if ( this.enabled === false ) return;
|
|
54
56
|
|
|
57
|
+
if ( isBlobURL( key ) ) return;
|
|
58
|
+
|
|
55
59
|
// log( 'Cache', 'Checking key:', key );
|
|
56
60
|
|
|
57
61
|
return this.files[ key ];
|
|
@@ -83,5 +87,29 @@ const Cache = {
|
|
|
83
87
|
|
|
84
88
|
};
|
|
85
89
|
|
|
90
|
+
/**
|
|
91
|
+
* Returns true if the given cache key contains the blob: scheme.
|
|
92
|
+
*
|
|
93
|
+
* @private
|
|
94
|
+
* @param {string} key - The cache key.
|
|
95
|
+
* @return {boolean} Whether the given cache key contains the blob: scheme or not.
|
|
96
|
+
*/
|
|
97
|
+
function isBlobURL( key ) {
|
|
98
|
+
|
|
99
|
+
try {
|
|
100
|
+
|
|
101
|
+
const urlString = key.slice( key.indexOf( ':' ) + 1 ); // remove type identifier
|
|
102
|
+
|
|
103
|
+
const url = new URL( urlString );
|
|
104
|
+
return url.protocol === 'blob:';
|
|
105
|
+
|
|
106
|
+
} catch ( e ) {
|
|
107
|
+
|
|
108
|
+
// If the string is not a valid URL, it throws an error
|
|
109
|
+
return false;
|
|
110
|
+
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
}
|
|
86
114
|
|
|
87
115
|
export { Cache };
|
|
@@ -43,7 +43,7 @@ class FileLoader extends Loader {
|
|
|
43
43
|
|
|
44
44
|
/**
|
|
45
45
|
* The expected mime type. Valid values can be found
|
|
46
|
-
* [here](
|
|
46
|
+
* [here](https://developer.mozilla.org/en-US/docs/Web/API/DOMParser/parseFromString#mimetype)
|
|
47
47
|
*
|
|
48
48
|
* @type {string}
|
|
49
49
|
*/
|
|
@@ -10,11 +10,16 @@ const _errorMap = new WeakMap();
|
|
|
10
10
|
* textures for rendering.
|
|
11
11
|
*
|
|
12
12
|
* Note that {@link Texture#flipY} and {@link Texture#premultiplyAlpha} are ignored with image bitmaps.
|
|
13
|
-
*
|
|
13
|
+
* These options need to be configured via {@link ImageBitmapLoader#setOptions} prior to loading,
|
|
14
|
+
* unlike regular images which can be configured on the Texture to set these options on GPU upload instead.
|
|
14
15
|
*
|
|
15
|
-
*
|
|
16
|
+
* To match the default behaviour of {@link Texture}, the following options are needed:
|
|
16
17
|
*
|
|
17
|
-
*
|
|
18
|
+
* ```js
|
|
19
|
+
* { imageOrientation: 'flipY', premultiplyAlpha: 'none' }
|
|
20
|
+
* ```
|
|
21
|
+
*
|
|
22
|
+
* Also note that unlike {@link FileLoader}, this loader will only avoid multiple concurrent requests to the same URL if {@link Cache} is enabled.
|
|
18
23
|
*
|
|
19
24
|
* ```js
|
|
20
25
|
* const loader = new THREE.ImageBitmapLoader();
|
package/src/loaders/Loader.js
CHANGED
|
@@ -29,7 +29,7 @@ import {
|
|
|
29
29
|
import { error, warn } from '../utils.js';
|
|
30
30
|
|
|
31
31
|
/**
|
|
32
|
-
* Class for loading
|
|
32
|
+
* Class for loading materials. The files are internally
|
|
33
33
|
* loaded via {@link FileLoader}.
|
|
34
34
|
*
|
|
35
35
|
* ```js
|
|
@@ -203,6 +203,7 @@ class MaterialLoader extends Loader {
|
|
|
203
203
|
if ( json.alphaToCoverage !== undefined ) material.alphaToCoverage = json.alphaToCoverage;
|
|
204
204
|
if ( json.premultipliedAlpha !== undefined ) material.premultipliedAlpha = json.premultipliedAlpha;
|
|
205
205
|
if ( json.forceSinglePass !== undefined ) material.forceSinglePass = json.forceSinglePass;
|
|
206
|
+
if ( json.allowOverride !== undefined ) material.allowOverride = json.allowOverride;
|
|
206
207
|
|
|
207
208
|
if ( json.visible !== undefined ) material.visible = json.visible;
|
|
208
209
|
|
|
@@ -21,6 +21,7 @@ import {
|
|
|
21
21
|
} from '../constants.js';
|
|
22
22
|
import { InstancedBufferAttribute } from '../core/InstancedBufferAttribute.js';
|
|
23
23
|
import { Color } from '../math/Color.js';
|
|
24
|
+
import { Vector3 } from '../math/Vector3.js';
|
|
24
25
|
import { Object3D } from '../core/Object3D.js';
|
|
25
26
|
import { Group } from '../objects/Group.js';
|
|
26
27
|
import { InstancedMesh } from '../objects/InstancedMesh.js';
|
|
@@ -64,6 +65,7 @@ import * as Geometries from '../geometries/Geometries.js';
|
|
|
64
65
|
import { getTypedArray, error, warn } from '../utils.js';
|
|
65
66
|
import { Box3 } from '../math/Box3.js';
|
|
66
67
|
import { Sphere } from '../math/Sphere.js';
|
|
68
|
+
import { SphericalHarmonics3 } from '../math/SphericalHarmonics3.js';
|
|
67
69
|
|
|
68
70
|
/**
|
|
69
71
|
* A loader for loading a JSON resource in the [JSON Object/Scene format](https://github.com/mrdoob/three.js/wiki/JSON-Object-Scene-format-4).
|
|
@@ -170,7 +172,17 @@ class ObjectLoader extends Loader {
|
|
|
170
172
|
|
|
171
173
|
const text = await loader.loadAsync( url, onProgress );
|
|
172
174
|
|
|
173
|
-
|
|
175
|
+
let json;
|
|
176
|
+
|
|
177
|
+
try {
|
|
178
|
+
|
|
179
|
+
json = JSON.parse( text );
|
|
180
|
+
|
|
181
|
+
} catch ( e ) {
|
|
182
|
+
|
|
183
|
+
throw new Error( 'ObjectLoader: Can\'t parse ' + url + '. ' + e.message );
|
|
184
|
+
|
|
185
|
+
}
|
|
174
186
|
|
|
175
187
|
const metadata = json.metadata;
|
|
176
188
|
|
|
@@ -922,7 +934,8 @@ class ObjectLoader extends Loader {
|
|
|
922
934
|
|
|
923
935
|
case 'LightProbe':
|
|
924
936
|
|
|
925
|
-
|
|
937
|
+
const sh = new SphericalHarmonics3().fromArray( data.sh );
|
|
938
|
+
object = new LightProbe( sh, data.intensity );
|
|
926
939
|
|
|
927
940
|
break;
|
|
928
941
|
|
|
@@ -1114,6 +1127,11 @@ class ObjectLoader extends Loader {
|
|
|
1114
1127
|
|
|
1115
1128
|
if ( data.up !== undefined ) object.up.fromArray( data.up );
|
|
1116
1129
|
|
|
1130
|
+
if ( data.pivot !== undefined ) object.pivot = new Vector3().fromArray( data.pivot );
|
|
1131
|
+
|
|
1132
|
+
if ( data.morphTargetDictionary !== undefined ) object.morphTargetDictionary = Object.assign( {}, data.morphTargetDictionary );
|
|
1133
|
+
if ( data.morphTargetInfluences !== undefined ) object.morphTargetInfluences = data.morphTargetInfluences.slice();
|
|
1134
|
+
|
|
1117
1135
|
if ( data.castShadow !== undefined ) object.castShadow = data.castShadow;
|
|
1118
1136
|
if ( data.receiveShadow !== undefined ) object.receiveShadow = data.receiveShadow;
|
|
1119
1137
|
|
|
@@ -1131,6 +1149,7 @@ class ObjectLoader extends Loader {
|
|
|
1131
1149
|
if ( data.visible !== undefined ) object.visible = data.visible;
|
|
1132
1150
|
if ( data.frustumCulled !== undefined ) object.frustumCulled = data.frustumCulled;
|
|
1133
1151
|
if ( data.renderOrder !== undefined ) object.renderOrder = data.renderOrder;
|
|
1152
|
+
if ( data.static !== undefined ) object.static = data.static;
|
|
1134
1153
|
if ( data.userData !== undefined ) object.userData = data.userData;
|
|
1135
1154
|
if ( data.layers !== undefined ) object.layers.mask = data.layers;
|
|
1136
1155
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { float } from '../../nodes/tsl/TSLBase.js';
|
|
2
2
|
|
|
3
3
|
import { Loader } from '../Loader.js';
|
|
4
4
|
import { FileLoader } from '../../loaders/FileLoader.js';
|
|
@@ -185,7 +185,7 @@ class NodeLoader extends Loader {
|
|
|
185
185
|
|
|
186
186
|
}
|
|
187
187
|
|
|
188
|
-
return
|
|
188
|
+
return new this.nodes[ type ]();
|
|
189
189
|
|
|
190
190
|
}
|
|
191
191
|
|
|
@@ -832,6 +832,7 @@ class Material extends EventDispatcher {
|
|
|
832
832
|
if ( this.alphaToCoverage === true ) data.alphaToCoverage = true;
|
|
833
833
|
if ( this.premultipliedAlpha === true ) data.premultipliedAlpha = true;
|
|
834
834
|
if ( this.forceSinglePass === true ) data.forceSinglePass = true;
|
|
835
|
+
if ( this.allowOverride === false ) data.allowOverride = false;
|
|
835
836
|
|
|
836
837
|
if ( this.wireframe === true ) data.wireframe = true;
|
|
837
838
|
if ( this.wireframeLinewidth > 1 ) data.wireframeLinewidth = this.wireframeLinewidth;
|
|
@@ -967,6 +968,7 @@ class Material extends EventDispatcher {
|
|
|
967
968
|
this.alphaToCoverage = source.alphaToCoverage;
|
|
968
969
|
this.premultipliedAlpha = source.premultipliedAlpha;
|
|
969
970
|
this.forceSinglePass = source.forceSinglePass;
|
|
971
|
+
this.allowOverride = source.allowOverride;
|
|
970
972
|
|
|
971
973
|
this.visible = source.visible;
|
|
972
974
|
|
|
@@ -267,6 +267,14 @@ class MeshLambertMaterial extends Material {
|
|
|
267
267
|
*/
|
|
268
268
|
this.reflectivity = 1;
|
|
269
269
|
|
|
270
|
+
/**
|
|
271
|
+
* Scales the effect of the environment map by multiplying its color.
|
|
272
|
+
*
|
|
273
|
+
* @type {number}
|
|
274
|
+
* @default 1
|
|
275
|
+
*/
|
|
276
|
+
this.envMapIntensity = 1.0;
|
|
277
|
+
|
|
270
278
|
/**
|
|
271
279
|
* The index of refraction (IOR) of air (approximately 1) divided by the
|
|
272
280
|
* index of refraction of the material. It is used with environment mapping
|
|
@@ -373,6 +381,7 @@ class MeshLambertMaterial extends Material {
|
|
|
373
381
|
this.envMapRotation.copy( source.envMapRotation );
|
|
374
382
|
this.combine = source.combine;
|
|
375
383
|
this.reflectivity = source.reflectivity;
|
|
384
|
+
this.envMapIntensity = source.envMapIntensity;
|
|
376
385
|
this.refractionRatio = source.refractionRatio;
|
|
377
386
|
|
|
378
387
|
this.wireframe = source.wireframe;
|
|
@@ -284,6 +284,14 @@ class MeshPhongMaterial extends Material {
|
|
|
284
284
|
*/
|
|
285
285
|
this.reflectivity = 1;
|
|
286
286
|
|
|
287
|
+
/**
|
|
288
|
+
* Scales the effect of the environment map by multiplying its color.
|
|
289
|
+
*
|
|
290
|
+
* @type {number}
|
|
291
|
+
* @default 1
|
|
292
|
+
*/
|
|
293
|
+
this.envMapIntensity = 1.0;
|
|
294
|
+
|
|
287
295
|
/**
|
|
288
296
|
* The index of refraction (IOR) of air (approximately 1) divided by the
|
|
289
297
|
* index of refraction of the material. It is used with environment mapping
|
|
@@ -392,6 +400,7 @@ class MeshPhongMaterial extends Material {
|
|
|
392
400
|
this.envMapRotation.copy( source.envMapRotation );
|
|
393
401
|
this.combine = source.combine;
|
|
394
402
|
this.reflectivity = source.reflectivity;
|
|
403
|
+
this.envMapIntensity = source.envMapIntensity;
|
|
395
404
|
this.refractionRatio = source.refractionRatio;
|
|
396
405
|
|
|
397
406
|
this.wireframe = source.wireframe;
|
|
@@ -158,9 +158,22 @@ class ShaderMaterial extends Material {
|
|
|
158
158
|
this.wireframeLinewidth = 1;
|
|
159
159
|
|
|
160
160
|
/**
|
|
161
|
-
*
|
|
161
|
+
* Defines whether the material color is affected by global fog settings; `true`
|
|
162
162
|
* to pass fog uniforms to the shader.
|
|
163
163
|
*
|
|
164
|
+
* Setting this property to `true` requires the definition of fog uniforms. It is
|
|
165
|
+
* recommended to use `UniformsUtils.merge()` to combine the custom shader uniforms
|
|
166
|
+
* with predefined fog uniforms.
|
|
167
|
+
*
|
|
168
|
+
* ```js
|
|
169
|
+
* const material = new ShaderMaterial( {
|
|
170
|
+
* uniforms: UniformsUtils.merge( [ UniformsLib[ 'fog' ], shaderUniforms ] );
|
|
171
|
+
* vertexShader: vertexShader,
|
|
172
|
+
* fragmentShader: fragmentShader,
|
|
173
|
+
* fog: true
|
|
174
|
+
* } );
|
|
175
|
+
* ```
|
|
176
|
+
*
|
|
164
177
|
* @type {boolean}
|
|
165
178
|
* @default false
|
|
166
179
|
*/
|
|
@@ -279,6 +292,12 @@ class ShaderMaterial extends Material {
|
|
|
279
292
|
|
|
280
293
|
this.glslVersion = source.glslVersion;
|
|
281
294
|
|
|
295
|
+
this.defaultAttributeValues = Object.assign( {}, source.defaultAttributeValues );
|
|
296
|
+
|
|
297
|
+
this.index0AttributeName = source.index0AttributeName;
|
|
298
|
+
|
|
299
|
+
this.uniformsNeedUpdate = source.uniformsNeedUpdate;
|
|
300
|
+
|
|
282
301
|
return this;
|
|
283
302
|
|
|
284
303
|
}
|
|
@@ -8,8 +8,8 @@ import { positionGeometry } from '../../nodes/accessors/Position.js';
|
|
|
8
8
|
import { mix, smoothstep } from '../../nodes/math/MathNode.js';
|
|
9
9
|
import { Fn, float, vec2, vec3, vec4, If } from '../../nodes/tsl/TSLBase.js';
|
|
10
10
|
import { uv } from '../../nodes/accessors/UV.js';
|
|
11
|
-
import { viewport } from '../../nodes/display/ScreenNode.js';
|
|
12
|
-
import {
|
|
11
|
+
import { screenDPR, viewport } from '../../nodes/display/ScreenNode.js';
|
|
12
|
+
import { viewportOpaqueMipTexture } from '../../nodes/display/ViewportTextureNode.js';
|
|
13
13
|
|
|
14
14
|
import { LineDashedMaterial } from '../LineDashedMaterial.js';
|
|
15
15
|
import { NoBlending } from '../../constants.js';
|
|
@@ -56,7 +56,7 @@ class Line2NodeMaterial extends NodeMaterial {
|
|
|
56
56
|
* @type {boolean}
|
|
57
57
|
* @default false
|
|
58
58
|
*/
|
|
59
|
-
this.
|
|
59
|
+
this.vertexColors = parameters.vertexColors;
|
|
60
60
|
|
|
61
61
|
/**
|
|
62
62
|
* The dash offset.
|
|
@@ -133,7 +133,7 @@ class Line2NodeMaterial extends NodeMaterial {
|
|
|
133
133
|
const { renderer } = builder;
|
|
134
134
|
|
|
135
135
|
const useAlphaToCoverage = this._useAlphaToCoverage;
|
|
136
|
-
const
|
|
136
|
+
const vertexColors = this.vertexColors;
|
|
137
137
|
const useDash = this._useDash;
|
|
138
138
|
const useWorldUnits = this._useWorldUnits;
|
|
139
139
|
|
|
@@ -300,7 +300,7 @@ class Line2NodeMaterial extends NodeMaterial {
|
|
|
300
300
|
offset.assign( offset.mul( materialLineWidth ) );
|
|
301
301
|
|
|
302
302
|
// adjust for clip-space to screen-space conversion // maybe resolution should be based on viewport ...
|
|
303
|
-
offset.assign( offset.div( viewport.w ) );
|
|
303
|
+
offset.assign( offset.div( viewport.w.div( screenDPR ) ) );
|
|
304
304
|
|
|
305
305
|
// select end
|
|
306
306
|
clip.assign( positionGeometry.y.lessThan( 0.5 ).select( clipStart, clipEnd ) );
|
|
@@ -434,7 +434,7 @@ class Line2NodeMaterial extends NodeMaterial {
|
|
|
434
434
|
|
|
435
435
|
} else {
|
|
436
436
|
|
|
437
|
-
if (
|
|
437
|
+
if ( vertexColors ) {
|
|
438
438
|
|
|
439
439
|
const instanceColorStart = attribute( 'instanceColorStart' );
|
|
440
440
|
const instanceColorEnd = attribute( 'instanceColorEnd' );
|
|
@@ -459,7 +459,7 @@ class Line2NodeMaterial extends NodeMaterial {
|
|
|
459
459
|
|
|
460
460
|
const opacityNode = this.opacityNode ? float( this.opacityNode ) : materialOpacity;
|
|
461
461
|
|
|
462
|
-
this.outputNode = vec4( this.colorNode.rgb.mul( opacityNode ).add(
|
|
462
|
+
this.outputNode = vec4( this.colorNode.rgb.mul( opacityNode ).add( viewportOpaqueMipTexture().rgb.mul( opacityNode.oneMinus() ) ), this.colorNode.a );
|
|
463
463
|
|
|
464
464
|
}
|
|
465
465
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { clearcoat, clearcoatRoughness, sheen, sheenRoughness, iridescence, iridescenceIOR, iridescenceThickness, specularColor, specularF90, diffuseColor, metalness, roughness, anisotropy, alphaT, anisotropyT, anisotropyB, ior, transmission, thickness, attenuationDistance, attenuationColor, dispersion } from '../../nodes/core/PropertyNode.js';
|
|
1
|
+
import { clearcoat, clearcoatRoughness, sheen, sheenRoughness, iridescence, iridescenceIOR, iridescenceThickness, specularColor, specularColorBlended, specularF90, diffuseColor, metalness, roughness, anisotropy, alphaT, anisotropyT, anisotropyB, ior, transmission, thickness, attenuationDistance, attenuationColor, dispersion } from '../../nodes/core/PropertyNode.js';
|
|
2
2
|
import { materialClearcoat, materialClearcoatRoughness, materialClearcoatNormal, materialSheen, materialSheenRoughness, materialIridescence, materialIridescenceIOR, materialIridescenceThickness, materialSpecularIntensity, materialSpecularColor, materialAnisotropy, materialIOR, materialTransmission, materialThickness, materialAttenuationDistance, materialAttenuationColor, materialDispersion } from '../../nodes/accessors/MaterialNode.js';
|
|
3
3
|
import { float, vec2, vec3, If } from '../../nodes/tsl/TSLBase.js';
|
|
4
4
|
import getRoughness from '../../nodes/functions/material/getRoughness.js';
|
|
@@ -350,7 +350,8 @@ class MeshPhysicalNodeMaterial extends MeshStandardNodeMaterial {
|
|
|
350
350
|
const iorNode = this.iorNode ? float( this.iorNode ) : materialIOR;
|
|
351
351
|
|
|
352
352
|
ior.assign( iorNode );
|
|
353
|
-
specularColor.assign(
|
|
353
|
+
specularColor.assign( min( pow2( ior.sub( 1.0 ).div( ior.add( 1.0 ) ) ).mul( materialSpecularColor ), vec3( 1.0 ) ).mul( materialSpecularIntensity ) );
|
|
354
|
+
specularColorBlended.assign( mix( specularColor, diffuseColor.rgb, metalness ) );
|
|
354
355
|
specularF90.assign( mix( materialSpecularIntensity, 1.0, metalness ) );
|
|
355
356
|
|
|
356
357
|
}
|
|
@@ -501,6 +502,8 @@ class MeshPhysicalNodeMaterial extends MeshStandardNodeMaterial {
|
|
|
501
502
|
this.specularIntensityNode = source.specularIntensityNode;
|
|
502
503
|
this.specularColorNode = source.specularColorNode;
|
|
503
504
|
|
|
505
|
+
this.iorNode = source.iorNode;
|
|
506
|
+
|
|
504
507
|
this.transmissionNode = source.transmissionNode;
|
|
505
508
|
this.thicknessNode = source.thicknessNode;
|
|
506
509
|
this.attenuationDistanceNode = source.attenuationDistanceNode;
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import NodeMaterial from './NodeMaterial.js';
|
|
2
|
-
import { diffuseColor, metalness, roughness, specularColor, specularF90 } from '../../nodes/core/PropertyNode.js';
|
|
2
|
+
import { diffuseColor, diffuseContribution, metalness, roughness, specularColor, specularColorBlended, specularF90 } from '../../nodes/core/PropertyNode.js';
|
|
3
3
|
import { mix } from '../../nodes/math/MathNode.js';
|
|
4
4
|
import { materialRoughness, materialMetalness } from '../../nodes/accessors/MaterialNode.js';
|
|
5
5
|
import getRoughness from '../../nodes/functions/material/getRoughness.js';
|
|
6
6
|
import PhysicalLightingModel from '../../nodes/functions/PhysicalLightingModel.js';
|
|
7
7
|
import EnvironmentNode from '../../nodes/lighting/EnvironmentNode.js';
|
|
8
|
-
import { float, vec3
|
|
8
|
+
import { float, vec3 } from '../../nodes/tsl/TSLBase.js';
|
|
9
9
|
|
|
10
10
|
import { MeshStandardMaterial } from '../MeshStandardMaterial.js';
|
|
11
11
|
|
|
@@ -135,7 +135,8 @@ class MeshStandardNodeMaterial extends NodeMaterial {
|
|
|
135
135
|
|
|
136
136
|
const specularColorNode = mix( vec3( 0.04 ), diffuseColor.rgb, metalness );
|
|
137
137
|
|
|
138
|
-
specularColor.assign(
|
|
138
|
+
specularColor.assign( vec3( 0.04 ) );
|
|
139
|
+
specularColorBlended.assign( specularColorNode );
|
|
139
140
|
specularF90.assign( 1.0 );
|
|
140
141
|
|
|
141
142
|
}
|
|
@@ -166,7 +167,7 @@ class MeshStandardNodeMaterial extends NodeMaterial {
|
|
|
166
167
|
|
|
167
168
|
// DIFFUSE COLOR
|
|
168
169
|
|
|
169
|
-
|
|
170
|
+
diffuseContribution.assign( diffuseColor.rgb.mul( metalnessNode.oneMinus() ) );
|
|
170
171
|
|
|
171
172
|
}
|
|
172
173
|
|