super-three 0.181.0 → 0.184.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 +13152 -11354
- package/build/three.core.js +12319 -11539
- package/build/three.core.min.js +2 -2
- package/build/three.module.js +1808 -781
- package/build/three.module.min.js +2 -2
- package/build/three.tsl.js +27 -13
- package/build/three.tsl.min.js +2 -2
- package/build/three.webgpu.js +10523 -6263
- package/build/three.webgpu.min.js +2 -2
- package/build/three.webgpu.nodes.js +10484 -6262
- package/build/three.webgpu.nodes.min.js +2 -2
- package/examples/jsm/Addons.js +11 -3
- package/examples/jsm/animation/CCDIKSolver.js +7 -3
- package/examples/jsm/controls/ArcballControls.js +7 -4
- package/examples/jsm/controls/DragControls.js +2 -2
- package/examples/jsm/controls/FirstPersonControls.js +58 -54
- package/examples/jsm/controls/FlyControls.js +4 -0
- package/examples/jsm/controls/MapControls.js +55 -1
- package/examples/jsm/controls/OrbitControls.js +111 -8
- package/examples/jsm/controls/TrackballControls.js +8 -8
- package/examples/jsm/controls/TransformControls.js +34 -2
- package/examples/jsm/csm/CSM.js +2 -1
- package/examples/jsm/csm/CSMShadowNode.js +6 -2
- 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 +152 -9
- package/examples/jsm/exporters/USDZExporter.js +22 -3
- package/examples/jsm/geometries/DecalGeometry.js +1 -1
- package/examples/jsm/geometries/TextGeometry.js +18 -0
- package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
- package/examples/jsm/helpers/LightProbeGridHelper.js +221 -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/Extension.js +13 -0
- package/examples/jsm/inspector/Inspector.js +203 -88
- package/examples/jsm/inspector/RendererInspector.js +14 -4
- package/examples/jsm/inspector/extensions/extensions.json +6 -0
- package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphEditor.js +916 -0
- package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphLoader.js +281 -0
- package/examples/jsm/inspector/tabs/Console.js +41 -7
- package/examples/jsm/inspector/tabs/Memory.js +128 -0
- package/examples/jsm/inspector/tabs/Parameters.js +51 -3
- package/examples/jsm/inspector/tabs/Performance.js +4 -4
- package/examples/jsm/inspector/tabs/Settings.js +264 -0
- package/examples/jsm/inspector/tabs/Timeline.js +1611 -0
- package/examples/jsm/inspector/tabs/Viewer.js +107 -5
- package/examples/jsm/inspector/ui/Graph.js +2 -2
- package/examples/jsm/inspector/ui/List.js +1 -1
- package/examples/jsm/inspector/ui/Profiler.js +1936 -34
- package/examples/jsm/inspector/ui/Style.js +1044 -31
- package/examples/jsm/inspector/ui/Tab.js +222 -3
- package/examples/jsm/inspector/ui/Values.js +55 -2
- package/examples/jsm/inspector/ui/utils.js +13 -0
- package/examples/jsm/interaction/InteractionManager.js +226 -0
- package/examples/jsm/libs/meshopt_decoder.module.js +9 -8
- package/examples/jsm/lighting/DynamicLighting.js +82 -0
- package/examples/jsm/lighting/LightProbeGrid.js +651 -0
- package/examples/jsm/lines/LineMaterial.js +7 -1
- 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 +687 -48
- package/examples/jsm/loaders/FBXLoader.js +235 -37
- package/examples/jsm/loaders/GCodeLoader.js +34 -8
- package/examples/jsm/loaders/GLTFLoader.js +146 -178
- package/examples/jsm/loaders/HDRLoader.js +1 -2
- package/examples/jsm/loaders/KMZLoader.js +5 -5
- package/examples/jsm/loaders/KTX2Loader.js +27 -5
- package/examples/jsm/loaders/LDrawLoader.js +41 -50
- 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 +2 -2
- 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 +42 -25
- package/examples/jsm/loaders/collada/ColladaComposer.js +3044 -0
- package/examples/jsm/loaders/collada/ColladaParser.js +1977 -0
- package/examples/jsm/loaders/usd/USDAParser.js +450 -363
- package/examples/jsm/loaders/usd/USDCParser.js +1867 -6
- package/examples/jsm/loaders/usd/USDComposer.js +4594 -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/GPUComputationRenderer.js +2 -0
- package/examples/jsm/misc/RollerCoaster.js +42 -4
- package/examples/jsm/misc/Volume.js +0 -1
- package/examples/jsm/misc/VolumeSlice.js +0 -1
- package/examples/jsm/modifiers/TessellateModifier.js +1 -1
- package/examples/jsm/objects/LensflareMesh.js +1 -1
- package/examples/jsm/objects/Reflector.js +73 -25
- package/examples/jsm/objects/Sky.js +90 -6
- package/examples/jsm/objects/SkyMesh.js +150 -16
- 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 +246 -28
- package/examples/jsm/renderers/SVGRenderer.js +174 -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 +63 -6
- 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/WebGLNodesHandler.js +605 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +11 -1
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +458 -16
- package/examples/jsm/tsl/display/AnamorphicNode.js +12 -1
- package/examples/jsm/tsl/display/BilateralBlurNode.js +374 -0
- package/examples/jsm/tsl/display/BloomNode.js +16 -6
- package/examples/jsm/tsl/display/CRT.js +150 -0
- package/examples/jsm/tsl/display/ChromaticAberrationNode.js +3 -36
- 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/FSR1Node.js +477 -0
- package/examples/jsm/tsl/display/FXAANode.js +2 -2
- package/examples/jsm/tsl/display/GTAONode.js +6 -4
- package/examples/jsm/tsl/display/GaussianBlurNode.js +21 -2
- package/examples/jsm/tsl/display/GodraysNode.js +615 -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 +69 -19
- 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 -24
- 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/SharpenNode.js +283 -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/TAAUNode.js +835 -0
- package/examples/jsm/tsl/display/TRAANode.js +315 -126
- 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/lighting/DynamicLightsNode.js +300 -0
- package/examples/jsm/tsl/lighting/data/AmbientLightDataNode.js +61 -0
- package/examples/jsm/tsl/lighting/data/DirectionalLightDataNode.js +111 -0
- package/examples/jsm/tsl/lighting/data/HemisphereLightDataNode.js +99 -0
- package/examples/jsm/tsl/lighting/data/PointLightDataNode.js +134 -0
- package/examples/jsm/tsl/lighting/data/SpotLightDataNode.js +161 -0
- package/examples/jsm/tsl/math/Bayer.js +53 -3
- package/examples/jsm/utils/BufferGeometryUtils.js +2 -3
- package/examples/jsm/utils/ColorUtils.js +76 -0
- 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/SkeletonUtils.js +14 -8
- package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
- package/examples/jsm/webxr/XRHandMeshModel.js +36 -10
- package/examples/jsm/webxr/XRHandModelFactory.js +2 -1
- package/package.json +24 -30
- package/src/Three.Core.js +3 -1
- package/src/Three.TSL.js +25 -11
- package/src/Three.WebGPU.Nodes.js +5 -0
- package/src/Three.WebGPU.js +9 -0
- package/src/Three.js +1 -0
- package/src/animation/AnimationAction.js +12 -2
- 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/AudioContext.js +2 -2
- 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/BufferAttribute.js +13 -1
- package/src/core/BufferGeometry.js +14 -2
- package/src/core/Clock.js +7 -0
- package/src/core/Object3D.js +52 -4
- package/src/core/Raycaster.js +2 -2
- package/src/core/RenderTarget.js +4 -4
- package/src/extras/PMREMGenerator.js +7 -18
- package/src/extras/TextureUtils.js +5 -1
- package/src/extras/curves/CatmullRomCurve3.js +3 -2
- 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/AudioLoader.js +11 -1
- package/src/loaders/Cache.js +28 -0
- package/src/loaders/DataTextureLoader.js +6 -4
- package/src/loaders/FileLoader.js +2 -3
- package/src/loaders/ImageBitmapLoader.js +12 -9
- package/src/loaders/Loader.js +6 -0
- package/src/loaders/MaterialLoader.js +3 -2
- package/src/loaders/ObjectLoader.js +46 -6
- package/src/loaders/nodes/NodeLoader.js +2 -2
- package/src/loaders/nodes/NodeObjectLoader.js +18 -0
- package/src/materials/Material.js +2 -0
- package/src/materials/MeshLambertMaterial.js +9 -0
- package/src/materials/MeshPhongMaterial.js +9 -0
- package/src/materials/MeshToonMaterial.js +1 -1
- package/src/materials/ShaderMaterial.js +20 -1
- package/src/materials/nodes/Line2NodeMaterial.js +34 -7
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +5 -2
- package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -4
- package/src/materials/nodes/NodeMaterial.js +45 -25
- package/src/materials/nodes/manager/NodeMaterialObserver.js +191 -86
- package/src/math/Line3.js +6 -5
- package/src/math/MathUtils.js +10 -10
- package/src/math/Matrix2.js +13 -9
- package/src/math/Matrix3.js +13 -9
- package/src/math/Matrix4.js +87 -74
- package/src/math/Plane.js +4 -3
- package/src/math/Quaternion.js +3 -29
- package/src/math/Sphere.js +1 -1
- package/src/math/Triangle.js +1 -1
- package/src/math/Vector2.js +11 -7
- package/src/math/Vector3.js +15 -13
- package/src/math/Vector4.js +13 -9
- package/src/math/interpolants/BezierInterpolant.js +108 -0
- package/src/nodes/Nodes.js +86 -68
- package/src/nodes/TSL.js +7 -7
- 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 +107 -15
- 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 +27 -2
- package/src/nodes/accessors/InstanceNode.js +148 -43
- package/src/nodes/accessors/MaterialNode.js +9 -1
- package/src/nodes/accessors/MaterialProperties.js +2 -5
- 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/Object3DNode.js +1 -1
- package/src/nodes/accessors/Position.js +34 -2
- package/src/nodes/accessors/ReferenceBaseNode.js +6 -6
- package/src/nodes/accessors/ReferenceNode.js +8 -8
- package/src/nodes/accessors/RendererReferenceNode.js +1 -2
- package/src/nodes/accessors/SceneProperties.js +47 -0
- package/src/nodes/accessors/SkinningNode.js +27 -26
- package/src/nodes/accessors/StorageBufferNode.js +14 -25
- package/src/nodes/accessors/StorageTextureNode.js +40 -9
- package/src/nodes/accessors/Tangent.js +4 -14
- package/src/nodes/accessors/Texture3DNode.js +32 -35
- package/src/nodes/accessors/TextureNode.js +67 -23
- package/src/nodes/accessors/UniformArrayNode.js +6 -4
- package/src/nodes/accessors/UserDataNode.js +1 -2
- package/src/nodes/accessors/VertexColorNode.js +1 -2
- package/src/nodes/code/FunctionCallNode.js +1 -1
- package/src/nodes/code/FunctionNode.js +2 -3
- package/src/nodes/core/ArrayNode.js +21 -2
- package/src/nodes/core/AssignNode.js +3 -3
- package/src/nodes/core/AttributeNode.js +3 -3
- package/src/nodes/core/BypassNode.js +1 -1
- package/src/nodes/core/ContextNode.js +104 -5
- package/src/nodes/core/IndexNode.js +2 -1
- package/src/nodes/core/InputNode.js +1 -1
- package/src/nodes/core/InspectorNode.js +1 -1
- package/src/nodes/core/IsolateNode.js +1 -1
- package/src/nodes/core/MRTNode.js +48 -2
- package/src/nodes/core/Node.js +112 -15
- package/src/nodes/core/NodeBuilder.js +284 -66
- package/src/nodes/core/NodeError.js +28 -0
- package/src/nodes/core/NodeFrame.js +12 -4
- package/src/nodes/core/NodeUtils.js +11 -9
- package/src/nodes/core/OutputStructNode.js +12 -10
- package/src/nodes/core/ParameterNode.js +4 -4
- package/src/nodes/core/PropertyNode.js +19 -3
- package/src/nodes/core/StackNode.js +66 -17
- package/src/nodes/core/StackTrace.js +139 -0
- package/src/nodes/core/StructNode.js +17 -3
- package/src/nodes/core/StructTypeNode.js +12 -18
- package/src/nodes/core/SubBuildNode.js +2 -2
- package/src/nodes/core/UniformGroupNode.js +36 -6
- package/src/nodes/core/UniformNode.js +21 -5
- package/src/nodes/core/VarNode.js +48 -23
- package/src/nodes/core/VaryingNode.js +2 -19
- 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 +125 -16
- package/src/nodes/display/RenderOutputNode.js +7 -7
- package/src/nodes/display/ScreenNode.js +4 -2
- 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/ViewportDepthTextureNode.js +11 -15
- package/src/nodes/display/ViewportTextureNode.js +39 -11
- 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 +2 -2
- package/src/nodes/functions/PhysicalLightingModel.js +126 -45
- package/src/nodes/geometry/RangeNode.js +5 -3
- package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
- package/src/nodes/gpgpu/BarrierNode.js +9 -0
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -3
- package/src/nodes/gpgpu/ComputeNode.js +74 -48
- package/src/nodes/gpgpu/SubgroupFunctionNode.js +2 -2
- 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 +7 -28
- package/src/nodes/lighting/PointShadowNode.js +162 -149
- package/src/nodes/lighting/ShadowFilterNode.js +53 -65
- package/src/nodes/lighting/ShadowNode.js +120 -42
- package/src/nodes/math/BitcastNode.js +1 -1
- package/src/nodes/math/BitcountNode.js +433 -0
- package/src/nodes/math/ConditionalNode.js +3 -3
- package/src/nodes/math/MathNode.js +76 -41
- package/src/nodes/math/OperatorNode.js +3 -2
- 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/TSLBase.js +1 -1
- package/src/nodes/tsl/TSLCore.js +38 -17
- package/src/nodes/utils/ArrayElementNode.js +14 -1
- package/src/nodes/utils/ConvertNode.js +1 -1
- package/src/nodes/utils/DebugNode.js +12 -12
- package/src/nodes/utils/EventNode.js +31 -2
- package/src/nodes/utils/FlipNode.js +1 -1
- package/src/nodes/utils/FunctionOverloadingNode.js +1 -1
- package/src/nodes/utils/JoinNode.js +3 -3
- package/src/nodes/utils/LoopNode.js +1 -1
- package/src/nodes/utils/MemberNode.js +2 -2
- 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/Remap.js +48 -0
- package/src/nodes/utils/RotateNode.js +1 -1
- package/src/nodes/utils/SampleNode.js +1 -1
- package/src/nodes/utils/SetNode.js +1 -1
- package/src/nodes/utils/SplitNode.js +1 -1
- package/src/nodes/utils/SpriteSheetUV.js +35 -0
- package/src/nodes/utils/UVUtils.js +28 -0
- package/src/objects/BatchedMesh.js +44 -16
- package/src/objects/InstancedMesh.js +30 -3
- 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/objects/SkinnedMesh.js +26 -9
- package/src/renderers/WebGLRenderer.js +329 -145
- package/src/renderers/common/Animation.js +3 -3
- package/src/renderers/common/Attributes.js +15 -1
- package/src/renderers/common/Backend.js +29 -8
- package/src/renderers/common/Background.js +26 -13
- package/src/renderers/common/BindGroup.js +1 -16
- package/src/renderers/common/Binding.js +11 -0
- package/src/renderers/common/Bindings.js +29 -14
- 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/ComputePipeline.js +1 -1
- package/src/renderers/common/CubeRenderTarget.js +51 -7
- package/src/renderers/common/Geometries.js +29 -3
- package/src/renderers/common/Info.js +333 -4
- package/src/renderers/common/InspectorBase.js +6 -1
- package/src/renderers/common/Lighting.js +5 -21
- package/src/renderers/common/Pipelines.js +40 -7
- package/src/renderers/common/PostProcessing.js +8 -206
- package/src/renderers/common/ReadbackBuffer.js +78 -0
- package/src/renderers/common/RenderBundle.js +3 -1
- package/src/renderers/common/RenderBundles.js +7 -3
- 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 +17 -5
- package/src/renderers/common/RenderObjectPipeline.js +40 -0
- package/src/renderers/common/RenderObjects.js +21 -5
- package/src/renderers/common/RenderPipeline.js +232 -17
- package/src/renderers/common/Renderer.js +481 -117
- package/src/renderers/common/Sampler.js +4 -4
- package/src/renderers/common/StorageBuffer.js +13 -1
- package/src/renderers/common/Textures.js +89 -4
- package/src/renderers/common/TimestampQueryPool.js +5 -3
- package/src/renderers/common/Uniform.js +8 -0
- package/src/renderers/common/UniformsGroup.js +62 -1
- package/src/renderers/common/XRManager.js +37 -29
- package/src/renderers/common/extras/PMREMGenerator.js +25 -23
- package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
- package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +242 -99
- 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_common_pars_fragment.glsl.js +0 -1
- package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +8 -12
- package/src/renderers/shaders/ShaderChunk/lightprobes_pars_fragment.glsl.js +80 -0
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +13 -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_pars_begin.glsl.js +2 -0
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +8 -4
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +112 -53
- package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +7 -0
- package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
- package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +0 -1
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +225 -186
- package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +12 -2
- 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 +5 -3
- package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +1 -2
- 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 -6
- package/src/renderers/shaders/UniformsLib.js +7 -5
- package/src/renderers/shaders/UniformsUtils.js +27 -5
- package/src/renderers/webgl/WebGLAnimation.js +2 -1
- package/src/renderers/webgl/WebGLBackground.js +15 -15
- package/src/renderers/webgl/WebGLBindingStates.js +99 -27
- package/src/renderers/webgl/WebGLBufferRenderer.js +0 -32
- package/src/renderers/webgl/WebGLCapabilities.js +9 -4
- package/src/renderers/webgl/WebGLEnvironments.js +228 -0
- package/src/renderers/webgl/WebGLGeometries.js +10 -7
- package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +0 -32
- package/src/renderers/webgl/WebGLLights.js +18 -1
- package/src/renderers/webgl/WebGLMaterials.js +24 -13
- package/src/renderers/webgl/WebGLObjects.js +3 -1
- package/src/renderers/webgl/WebGLOutput.js +270 -0
- package/src/renderers/webgl/WebGLProgram.js +49 -109
- package/src/renderers/webgl/WebGLPrograms.js +63 -51
- package/src/renderers/webgl/WebGLRenderLists.js +15 -0
- package/src/renderers/webgl/WebGLRenderStates.js +13 -2
- package/src/renderers/webgl/WebGLShadowMap.js +188 -24
- package/src/renderers/webgl/WebGLState.js +75 -37
- package/src/renderers/webgl/WebGLTextures.js +215 -54
- package/src/renderers/webgl/WebGLUniforms.js +40 -3
- package/src/renderers/webgl/WebGLUniformsGroups.js +19 -0
- package/src/renderers/webgl/WebGLUtils.js +6 -2
- package/src/renderers/webgl-fallback/WebGLBackend.js +253 -82
- package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +0 -41
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +173 -74
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +53 -19
- package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +25 -0
- package/src/renderers/webgl-fallback/utils/WebGLState.js +223 -6
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +68 -53
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +10 -10
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +6 -2
- package/src/renderers/webgpu/WebGPUBackend.js +260 -140
- package/src/renderers/webgpu/WebGPURenderer.js +2 -1
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +366 -90
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +107 -34
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +357 -200
- package/src/renderers/webgpu/utils/WebGPUCapabilities.js +48 -0
- package/src/renderers/webgpu/utils/WebGPUConstants.js +10 -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 +156 -59
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +7 -7
- package/src/renderers/webgpu/utils/WebGPUUtils.js +33 -11
- package/src/renderers/webxr/WebXRController.js +12 -0
- package/src/renderers/webxr/WebXRManager.js +4 -2
- package/src/textures/CubeDepthTexture.js +76 -0
- package/src/textures/HTMLTexture.js +74 -0
- package/src/textures/Source.js +2 -2
- package/src/textures/Texture.js +16 -5
- package/src/utils.js +280 -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/RemapNode.js +0 -125
- package/src/nodes/utils/SpriteSheetUVNode.js +0 -90
- package/src/renderers/webgl/WebGLCubeMaps.js +0 -99
- package/src/renderers/webgl/WebGLCubeUVMaps.js +0 -134
|
@@ -25,7 +25,6 @@ import { modelViewMatrix } from '../../nodes/accessors/ModelNode.js';
|
|
|
25
25
|
import { vertexColor } from '../../nodes/accessors/VertexColorNode.js';
|
|
26
26
|
import { premultiplyAlpha } from '../../nodes/display/BlendModes.js';
|
|
27
27
|
import { subBuild } from '../../nodes/core/SubBuildNode.js';
|
|
28
|
-
import { warn } from '../../utils.js';
|
|
29
28
|
|
|
30
29
|
/**
|
|
31
30
|
* Base class for all node materials.
|
|
@@ -240,6 +239,14 @@ class NodeMaterial extends Material {
|
|
|
240
239
|
*/
|
|
241
240
|
this.maskNode = null;
|
|
242
241
|
|
|
242
|
+
/**
|
|
243
|
+
* This node can be used to implement a shadow mask for the material.
|
|
244
|
+
*
|
|
245
|
+
* @type {?Node<bool>}
|
|
246
|
+
* @default null
|
|
247
|
+
*/
|
|
248
|
+
this.maskShadowNode = null;
|
|
249
|
+
|
|
243
250
|
/**
|
|
244
251
|
* The local vertex positions are computed based on multiple factors like the
|
|
245
252
|
* attribute data, morphing or skinning. This node property allows to overwrite
|
|
@@ -382,25 +389,13 @@ class NodeMaterial extends Material {
|
|
|
382
389
|
*/
|
|
383
390
|
this.vertexNode = null;
|
|
384
391
|
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
},
|
|
394
|
-
|
|
395
|
-
set: ( value ) => {
|
|
396
|
-
|
|
397
|
-
warn( 'NodeMaterial: ".shadowPositionNode" was renamed to ".receivedShadowPositionNode".' );
|
|
398
|
-
|
|
399
|
-
this.receivedShadowPositionNode = value;
|
|
400
|
-
|
|
401
|
-
}
|
|
402
|
-
|
|
403
|
-
} );
|
|
392
|
+
/**
|
|
393
|
+
* This node can be used as a global context management component for this material.
|
|
394
|
+
*
|
|
395
|
+
* @type {?ContextNode}
|
|
396
|
+
* @default null
|
|
397
|
+
*/
|
|
398
|
+
this.contextNode = null;
|
|
404
399
|
|
|
405
400
|
}
|
|
406
401
|
|
|
@@ -493,9 +488,11 @@ class NodeMaterial extends Material {
|
|
|
493
488
|
|
|
494
489
|
builder.addStack();
|
|
495
490
|
|
|
496
|
-
const mvp =
|
|
491
|
+
const mvp = this.setupVertex( builder );
|
|
492
|
+
|
|
493
|
+
const vertexNode = subBuild( this.vertexNode || mvp, 'VERTEX' );
|
|
497
494
|
|
|
498
|
-
|
|
495
|
+
builder.context.clipSpace = vertexNode;
|
|
499
496
|
|
|
500
497
|
builder.stack.outputNode = vertexNode;
|
|
501
498
|
|
|
@@ -558,6 +555,14 @@ class NodeMaterial extends Material {
|
|
|
558
555
|
|
|
559
556
|
if ( isCustomOutput ) resultNode = this.outputNode;
|
|
560
557
|
|
|
558
|
+
//
|
|
559
|
+
|
|
560
|
+
if ( builder.context.getOutput ) {
|
|
561
|
+
|
|
562
|
+
resultNode = builder.context.getOutput( resultNode, builder );
|
|
563
|
+
|
|
564
|
+
}
|
|
565
|
+
|
|
561
566
|
// MRT
|
|
562
567
|
|
|
563
568
|
if ( renderTarget !== null ) {
|
|
@@ -753,7 +758,7 @@ class NodeMaterial extends Material {
|
|
|
753
758
|
|
|
754
759
|
this.setupPosition( builder );
|
|
755
760
|
|
|
756
|
-
builder.context.
|
|
761
|
+
builder.context.position = builder.removeStack();
|
|
757
762
|
|
|
758
763
|
return modelViewProjection;
|
|
759
764
|
|
|
@@ -1018,9 +1023,21 @@ class NodeMaterial extends Material {
|
|
|
1018
1023
|
|
|
1019
1024
|
}
|
|
1020
1025
|
|
|
1021
|
-
|
|
1026
|
+
let aoNode = this.aoNode;
|
|
1022
1027
|
|
|
1023
|
-
|
|
1028
|
+
if ( aoNode === null && builder.material.aoMap ) {
|
|
1029
|
+
|
|
1030
|
+
aoNode = materialAO;
|
|
1031
|
+
|
|
1032
|
+
}
|
|
1033
|
+
|
|
1034
|
+
if ( builder.context.getAO ) {
|
|
1035
|
+
|
|
1036
|
+
aoNode = builder.context.getAO( aoNode, builder );
|
|
1037
|
+
|
|
1038
|
+
}
|
|
1039
|
+
|
|
1040
|
+
if ( aoNode ) {
|
|
1024
1041
|
|
|
1025
1042
|
materialLightsNode.push( new AONode( aoNode ) );
|
|
1026
1043
|
|
|
@@ -1285,6 +1302,7 @@ class NodeMaterial extends Material {
|
|
|
1285
1302
|
this.backdropAlphaNode = source.backdropAlphaNode;
|
|
1286
1303
|
this.alphaTestNode = source.alphaTestNode;
|
|
1287
1304
|
this.maskNode = source.maskNode;
|
|
1305
|
+
this.maskShadowNode = source.maskShadowNode;
|
|
1288
1306
|
|
|
1289
1307
|
this.positionNode = source.positionNode;
|
|
1290
1308
|
this.geometryNode = source.geometryNode;
|
|
@@ -1301,6 +1319,8 @@ class NodeMaterial extends Material {
|
|
|
1301
1319
|
this.fragmentNode = source.fragmentNode;
|
|
1302
1320
|
this.vertexNode = source.vertexNode;
|
|
1303
1321
|
|
|
1322
|
+
this.contextNode = source.contextNode;
|
|
1323
|
+
|
|
1304
1324
|
return super.copy( source );
|
|
1305
1325
|
|
|
1306
1326
|
}
|
|
@@ -65,6 +65,22 @@ const refreshUniforms = [
|
|
|
65
65
|
*/
|
|
66
66
|
const _lightsCache = new WeakMap();
|
|
67
67
|
|
|
68
|
+
/**
|
|
69
|
+
* Holds the material data for comparison.
|
|
70
|
+
*
|
|
71
|
+
* @private
|
|
72
|
+
* @type {WeakMap<Material,Object>}
|
|
73
|
+
*/
|
|
74
|
+
const _materialCache = new WeakMap();
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Holds the geometry data for comparison.
|
|
78
|
+
*
|
|
79
|
+
* @private
|
|
80
|
+
* @type {WeakMap<BufferGeometry,Object>}
|
|
81
|
+
*/
|
|
82
|
+
const _geometryCache = new WeakMap();
|
|
83
|
+
|
|
68
84
|
/**
|
|
69
85
|
* This class is used by {@link WebGPURenderer} as management component.
|
|
70
86
|
* It's primary purpose is to determine whether render objects require a
|
|
@@ -166,16 +182,10 @@ class NodeMaterialObserver {
|
|
|
166
182
|
|
|
167
183
|
if ( data === undefined ) {
|
|
168
184
|
|
|
169
|
-
const { geometry,
|
|
185
|
+
const { geometry, object } = renderObject;
|
|
170
186
|
|
|
171
187
|
data = {
|
|
172
|
-
|
|
173
|
-
geometry: {
|
|
174
|
-
id: geometry.id,
|
|
175
|
-
attributes: this.getAttributesData( geometry.attributes ),
|
|
176
|
-
indexVersion: geometry.index ? geometry.index.version : null,
|
|
177
|
-
drawRange: { start: geometry.drawRange.start, count: geometry.drawRange.count }
|
|
178
|
-
},
|
|
188
|
+
geometryId: geometry.id,
|
|
179
189
|
worldMatrix: object.matrixWorld.clone()
|
|
180
190
|
};
|
|
181
191
|
|
|
@@ -197,7 +207,7 @@ class NodeMaterialObserver {
|
|
|
197
207
|
|
|
198
208
|
}
|
|
199
209
|
|
|
200
|
-
if (
|
|
210
|
+
if ( renderObject.material.transmission > 0 ) {
|
|
201
211
|
|
|
202
212
|
const { width, height } = renderObject.context;
|
|
203
213
|
|
|
@@ -232,7 +242,8 @@ class NodeMaterialObserver {
|
|
|
232
242
|
const attribute = attributes[ name ];
|
|
233
243
|
|
|
234
244
|
attributesData[ name ] = {
|
|
235
|
-
|
|
245
|
+
id: attribute.id,
|
|
246
|
+
version: attribute.version,
|
|
236
247
|
};
|
|
237
248
|
|
|
238
249
|
}
|
|
@@ -259,13 +270,44 @@ class NodeMaterialObserver {
|
|
|
259
270
|
|
|
260
271
|
}
|
|
261
272
|
|
|
262
|
-
if ( builder.
|
|
273
|
+
if ( builder.context.modelViewMatrix || builder.context.modelNormalViewMatrix || builder.context.getAO || builder.context.getShadow )
|
|
263
274
|
return true;
|
|
264
275
|
|
|
265
276
|
return false;
|
|
266
277
|
|
|
267
278
|
}
|
|
268
279
|
|
|
280
|
+
/**
|
|
281
|
+
* Returns a geometry data structure holding the geometry property values for
|
|
282
|
+
* monitoring.
|
|
283
|
+
*
|
|
284
|
+
* @param {BufferGeometry} geometry - The geometry.
|
|
285
|
+
* @return {Object} An object for monitoring geometry properties.
|
|
286
|
+
*/
|
|
287
|
+
getGeometryData( geometry ) {
|
|
288
|
+
|
|
289
|
+
let data = _geometryCache.get( geometry );
|
|
290
|
+
|
|
291
|
+
if ( data === undefined ) {
|
|
292
|
+
|
|
293
|
+
data = {
|
|
294
|
+
_renderId: - 1,
|
|
295
|
+
_equal: false,
|
|
296
|
+
|
|
297
|
+
attributes: this.getAttributesData( geometry.attributes ),
|
|
298
|
+
indexId: geometry.index ? geometry.index.id : null,
|
|
299
|
+
indexVersion: geometry.index ? geometry.index.version : null,
|
|
300
|
+
drawRange: { start: geometry.drawRange.start, count: geometry.drawRange.count }
|
|
301
|
+
};
|
|
302
|
+
|
|
303
|
+
_geometryCache.set( geometry, data );
|
|
304
|
+
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
return data;
|
|
308
|
+
|
|
309
|
+
}
|
|
310
|
+
|
|
269
311
|
/**
|
|
270
312
|
* Returns a material data structure holding the material property values for
|
|
271
313
|
* monitoring.
|
|
@@ -275,32 +317,40 @@ class NodeMaterialObserver {
|
|
|
275
317
|
*/
|
|
276
318
|
getMaterialData( material ) {
|
|
277
319
|
|
|
278
|
-
|
|
320
|
+
let data = _materialCache.get( material );
|
|
279
321
|
|
|
280
|
-
|
|
322
|
+
if ( data === undefined ) {
|
|
281
323
|
|
|
282
|
-
|
|
324
|
+
data = { _renderId: - 1, _equal: false };
|
|
283
325
|
|
|
284
|
-
|
|
326
|
+
for ( const property of this.refreshUniforms ) {
|
|
285
327
|
|
|
286
|
-
|
|
328
|
+
const value = material[ property ];
|
|
287
329
|
|
|
288
|
-
if ( value
|
|
330
|
+
if ( value === null || value === undefined ) continue;
|
|
289
331
|
|
|
290
|
-
|
|
332
|
+
if ( typeof value === 'object' && value.clone !== undefined ) {
|
|
291
333
|
|
|
292
|
-
|
|
334
|
+
if ( value.isTexture === true ) {
|
|
293
335
|
|
|
294
|
-
|
|
336
|
+
data[ property ] = { id: value.id, version: value.version };
|
|
295
337
|
|
|
296
|
-
|
|
338
|
+
} else {
|
|
297
339
|
|
|
298
|
-
|
|
340
|
+
data[ property ] = value.clone();
|
|
341
|
+
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
} else {
|
|
299
345
|
|
|
300
|
-
|
|
346
|
+
data[ property ] = value;
|
|
347
|
+
|
|
348
|
+
}
|
|
301
349
|
|
|
302
350
|
}
|
|
303
351
|
|
|
352
|
+
_materialCache.set( material, data );
|
|
353
|
+
|
|
304
354
|
}
|
|
305
355
|
|
|
306
356
|
return data;
|
|
@@ -312,9 +362,10 @@ class NodeMaterialObserver {
|
|
|
312
362
|
*
|
|
313
363
|
* @param {RenderObject} renderObject - The render object.
|
|
314
364
|
* @param {Array<Light>} lightsData - The current material lights.
|
|
365
|
+
* @param {number} renderId - The current render ID.
|
|
315
366
|
* @return {boolean} Whether the given render object has changed its state or not.
|
|
316
367
|
*/
|
|
317
|
-
equals( renderObject, lightsData ) {
|
|
368
|
+
equals( renderObject, lightsData, renderId ) {
|
|
318
369
|
|
|
319
370
|
const { object, material, geometry } = renderObject;
|
|
320
371
|
|
|
@@ -332,126 +383,180 @@ class NodeMaterialObserver {
|
|
|
332
383
|
|
|
333
384
|
// material
|
|
334
385
|
|
|
335
|
-
const materialData =
|
|
386
|
+
const materialData = this.getMaterialData( renderObject.material );
|
|
387
|
+
|
|
388
|
+
// check the material for the "equal" state just once per render for all render objects
|
|
389
|
+
|
|
390
|
+
if ( materialData._renderId !== renderId ) {
|
|
391
|
+
|
|
392
|
+
materialData._renderId = renderId;
|
|
393
|
+
|
|
394
|
+
for ( const property in materialData ) {
|
|
395
|
+
|
|
396
|
+
const value = materialData[ property ];
|
|
397
|
+
const mtlValue = material[ property ];
|
|
398
|
+
|
|
399
|
+
if ( property === '_renderId' ) continue;
|
|
400
|
+
if ( property === '_equal' ) continue;
|
|
401
|
+
|
|
402
|
+
if ( value.equals !== undefined ) {
|
|
403
|
+
|
|
404
|
+
if ( value.equals( mtlValue ) === false ) {
|
|
336
405
|
|
|
337
|
-
|
|
406
|
+
value.copy( mtlValue );
|
|
338
407
|
|
|
339
|
-
|
|
340
|
-
|
|
408
|
+
materialData._equal = false;
|
|
409
|
+
return false;
|
|
341
410
|
|
|
342
|
-
|
|
411
|
+
}
|
|
343
412
|
|
|
344
|
-
if (
|
|
413
|
+
} else if ( mtlValue.isTexture === true ) {
|
|
345
414
|
|
|
346
|
-
value.
|
|
415
|
+
if ( value.id !== mtlValue.id || value.version !== mtlValue.version ) {
|
|
347
416
|
|
|
417
|
+
value.id = mtlValue.id;
|
|
418
|
+
value.version = mtlValue.version;
|
|
419
|
+
|
|
420
|
+
materialData._equal = false;
|
|
421
|
+
return false;
|
|
422
|
+
|
|
423
|
+
}
|
|
424
|
+
|
|
425
|
+
} else if ( value !== mtlValue ) {
|
|
426
|
+
|
|
427
|
+
materialData[ property ] = mtlValue;
|
|
428
|
+
|
|
429
|
+
materialData._equal = false;
|
|
348
430
|
return false;
|
|
349
431
|
|
|
350
432
|
}
|
|
351
433
|
|
|
352
|
-
}
|
|
434
|
+
}
|
|
435
|
+
|
|
436
|
+
if ( materialData.transmission > 0 ) {
|
|
437
|
+
|
|
438
|
+
const { width, height } = renderObject.context;
|
|
353
439
|
|
|
354
|
-
if (
|
|
440
|
+
if ( renderObjectData.bufferWidth !== width || renderObjectData.bufferHeight !== height ) {
|
|
355
441
|
|
|
356
|
-
|
|
357
|
-
|
|
442
|
+
renderObjectData.bufferWidth = width;
|
|
443
|
+
renderObjectData.bufferHeight = height;
|
|
358
444
|
|
|
445
|
+
materialData._equal = false;
|
|
359
446
|
return false;
|
|
360
447
|
|
|
361
448
|
}
|
|
362
449
|
|
|
363
|
-
}
|
|
450
|
+
}
|
|
364
451
|
|
|
365
|
-
|
|
452
|
+
materialData._equal = true;
|
|
366
453
|
|
|
367
|
-
|
|
454
|
+
} else {
|
|
368
455
|
|
|
369
|
-
|
|
456
|
+
if ( materialData._equal === false ) return false;
|
|
370
457
|
|
|
371
458
|
}
|
|
372
459
|
|
|
373
|
-
|
|
460
|
+
// geometry
|
|
374
461
|
|
|
375
|
-
|
|
462
|
+
if ( renderObjectData.geometryId !== geometry.id ) {
|
|
376
463
|
|
|
377
|
-
|
|
464
|
+
renderObjectData.geometryId = geometry.id;
|
|
465
|
+
return false;
|
|
378
466
|
|
|
379
|
-
|
|
380
|
-
renderObjectData.bufferHeight = height;
|
|
467
|
+
}
|
|
381
468
|
|
|
382
|
-
|
|
469
|
+
const geometryData = this.getGeometryData( renderObject.geometry );
|
|
383
470
|
|
|
384
|
-
|
|
471
|
+
// check the geoemtry for the "equal" state just once per render for all render objects
|
|
385
472
|
|
|
386
|
-
|
|
473
|
+
if ( geometryData._renderId !== renderId ) {
|
|
387
474
|
|
|
388
|
-
|
|
475
|
+
geometryData._renderId = renderId;
|
|
389
476
|
|
|
390
|
-
|
|
391
|
-
const attributes = geometry.attributes;
|
|
392
|
-
const storedAttributes = storedGeometryData.attributes;
|
|
477
|
+
// attributes
|
|
393
478
|
|
|
394
|
-
|
|
395
|
-
|
|
479
|
+
const attributes = geometry.attributes;
|
|
480
|
+
const storedAttributes = geometryData.attributes;
|
|
396
481
|
|
|
397
|
-
|
|
482
|
+
let currentAttributeCount = 0;
|
|
483
|
+
let storedAttributeCount = 0;
|
|
398
484
|
|
|
399
|
-
|
|
400
|
-
return false;
|
|
485
|
+
for ( const _ in attributes ) currentAttributeCount ++; // eslint-disable-line no-unused-vars
|
|
401
486
|
|
|
402
|
-
|
|
487
|
+
for ( const name in storedAttributes ) {
|
|
403
488
|
|
|
404
|
-
|
|
489
|
+
storedAttributeCount ++;
|
|
405
490
|
|
|
406
|
-
|
|
407
|
-
|
|
491
|
+
const storedAttributeData = storedAttributes[ name ];
|
|
492
|
+
const attribute = attributes[ name ];
|
|
408
493
|
|
|
409
|
-
|
|
494
|
+
if ( attribute === undefined ) {
|
|
410
495
|
|
|
411
|
-
|
|
496
|
+
// attribute was removed
|
|
497
|
+
delete storedAttributes[ name ];
|
|
412
498
|
|
|
413
|
-
|
|
499
|
+
geometryData._equal = false;
|
|
500
|
+
return false;
|
|
414
501
|
|
|
415
|
-
|
|
416
|
-
const attribute = attributes[ name ];
|
|
502
|
+
}
|
|
417
503
|
|
|
418
|
-
|
|
504
|
+
if ( storedAttributeData.id !== attribute.id || storedAttributeData.version !== attribute.version ) {
|
|
419
505
|
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
506
|
+
storedAttributeData.id = attribute.id;
|
|
507
|
+
storedAttributeData.version = attribute.version;
|
|
508
|
+
|
|
509
|
+
geometryData._equal = false;
|
|
510
|
+
return false;
|
|
511
|
+
|
|
512
|
+
}
|
|
423
513
|
|
|
424
514
|
}
|
|
425
515
|
|
|
426
|
-
if (
|
|
516
|
+
if ( storedAttributeCount !== currentAttributeCount ) {
|
|
517
|
+
|
|
518
|
+
geometryData.attributes = this.getAttributesData( attributes );
|
|
427
519
|
|
|
428
|
-
|
|
520
|
+
geometryData._equal = false;
|
|
429
521
|
return false;
|
|
430
522
|
|
|
431
523
|
}
|
|
432
524
|
|
|
433
|
-
|
|
525
|
+
// check index
|
|
434
526
|
|
|
435
|
-
|
|
527
|
+
const index = geometry.index;
|
|
528
|
+
const storedIndexId = geometryData.indexId;
|
|
529
|
+
const storedIndexVersion = geometryData.indexVersion;
|
|
530
|
+
const currentIndexId = index ? index.id : null;
|
|
531
|
+
const currentIndexVersion = index ? index.version : null;
|
|
436
532
|
|
|
437
|
-
|
|
438
|
-
const storedIndexVersion = storedGeometryData.indexVersion;
|
|
439
|
-
const currentIndexVersion = index ? index.version : null;
|
|
533
|
+
if ( storedIndexId !== currentIndexId || storedIndexVersion !== currentIndexVersion ) {
|
|
440
534
|
|
|
441
|
-
|
|
535
|
+
geometryData.indexId = currentIndexId;
|
|
536
|
+
geometryData.indexVersion = currentIndexVersion;
|
|
442
537
|
|
|
443
|
-
|
|
444
|
-
|
|
538
|
+
geometryData._equal = false;
|
|
539
|
+
return false;
|
|
445
540
|
|
|
446
|
-
|
|
541
|
+
}
|
|
447
542
|
|
|
448
|
-
|
|
543
|
+
// check drawRange
|
|
449
544
|
|
|
450
|
-
|
|
545
|
+
if ( geometryData.drawRange.start !== geometry.drawRange.start || geometryData.drawRange.count !== geometry.drawRange.count ) {
|
|
451
546
|
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
547
|
+
geometryData.drawRange.start = geometry.drawRange.start;
|
|
548
|
+
geometryData.drawRange.count = geometry.drawRange.count;
|
|
549
|
+
|
|
550
|
+
geometryData._equal = false;
|
|
551
|
+
return false;
|
|
552
|
+
|
|
553
|
+
}
|
|
554
|
+
|
|
555
|
+
geometryData._equal = true;
|
|
556
|
+
|
|
557
|
+
} else {
|
|
558
|
+
|
|
559
|
+
if ( geometryData._equal === false ) return false;
|
|
455
560
|
|
|
456
561
|
}
|
|
457
562
|
|
|
@@ -602,7 +707,7 @@ class NodeMaterialObserver {
|
|
|
602
707
|
return false;
|
|
603
708
|
|
|
604
709
|
const lightsData = this.getLights( renderObject.lightsNode, renderId );
|
|
605
|
-
const notEqual = this.equals( renderObject, lightsData ) !== true;
|
|
710
|
+
const notEqual = this.equals( renderObject, lightsData, renderId ) !== true;
|
|
606
711
|
|
|
607
712
|
return notEqual;
|
|
608
713
|
|
package/src/math/Line3.js
CHANGED
|
@@ -142,6 +142,9 @@ class Line3 {
|
|
|
142
142
|
_startEnd.subVectors( this.end, this.start );
|
|
143
143
|
|
|
144
144
|
const startEnd2 = _startEnd.dot( _startEnd );
|
|
145
|
+
|
|
146
|
+
if ( startEnd2 === 0 ) return 0;
|
|
147
|
+
|
|
145
148
|
const startEnd_startP = _startEnd.dot( _startP );
|
|
146
149
|
|
|
147
150
|
let t = startEnd_startP / startEnd2;
|
|
@@ -284,12 +287,10 @@ class Line3 {
|
|
|
284
287
|
|
|
285
288
|
}
|
|
286
289
|
|
|
287
|
-
c1.copy( p1 ).
|
|
288
|
-
c2.copy( p2 ).
|
|
289
|
-
|
|
290
|
-
c1.sub( c2 );
|
|
290
|
+
c1.copy( p1 ).addScaledVector( _d1, s );
|
|
291
|
+
c2.copy( p2 ).addScaledVector( _d2, t );
|
|
291
292
|
|
|
292
|
-
return c1.
|
|
293
|
+
return c1.distanceToSquared( c2 );
|
|
293
294
|
|
|
294
295
|
}
|
|
295
296
|
|
package/src/math/MathUtils.js
CHANGED
|
@@ -64,7 +64,7 @@ function euclideanModulo( n, m ) {
|
|
|
64
64
|
|
|
65
65
|
/**
|
|
66
66
|
* Performs a linear mapping from range `<a1, a2>` to range `<b1, b2>`
|
|
67
|
-
* for the given value.
|
|
67
|
+
* for the given value. `a2` must be greater than `a1`.
|
|
68
68
|
*
|
|
69
69
|
* @param {number} x - The value to be mapped.
|
|
70
70
|
* @param {number} a1 - Minimum value for range A.
|
|
@@ -159,9 +159,9 @@ function pingpong( x, length = 1 ) {
|
|
|
159
159
|
*
|
|
160
160
|
* See [Smoothstep](http://en.wikipedia.org/wiki/Smoothstep) for more details.
|
|
161
161
|
*
|
|
162
|
-
* @param {number} x - The value to evaluate based on its position between min and max
|
|
163
|
-
* @param {number} min - The min value. Any x value below min will be `0`.
|
|
164
|
-
* @param {number} max - The max value. Any x value above max will be `1`.
|
|
162
|
+
* @param {number} x - The value to evaluate based on its position between `min` and `max`.
|
|
163
|
+
* @param {number} min - The min value. Any `x` value below `min` will be `0`. `min` must be lower than `max`.
|
|
164
|
+
* @param {number} max - The max value. Any `x` value above `max` will be `1`. `max` must be greater than `min`.
|
|
165
165
|
* @return {number} The alternated value.
|
|
166
166
|
*/
|
|
167
167
|
function smoothstep( x, min, max ) {
|
|
@@ -177,11 +177,11 @@ function smoothstep( x, min, max ) {
|
|
|
177
177
|
|
|
178
178
|
/**
|
|
179
179
|
* A [variation on smoothstep](https://en.wikipedia.org/wiki/Smoothstep#Variations)
|
|
180
|
-
* that has zero 1st and 2nd order derivatives at x=0 and x=1
|
|
180
|
+
* that has zero 1st and 2nd order derivatives at `x=0` and `x=1`.
|
|
181
181
|
*
|
|
182
|
-
* @param {number} x - The value to evaluate based on its position between min and max
|
|
183
|
-
* @param {number} min - The min value. Any x value below min will be `0`.
|
|
184
|
-
* @param {number} max - The max value. Any x value above max will be `1`.
|
|
182
|
+
* @param {number} x - The value to evaluate based on its position between `min` and `max`.
|
|
183
|
+
* @param {number} min - The min value. Any `x` value below `min` will be `0`. `min` must be lower than `max`.
|
|
184
|
+
* @param {number} max - The max value. Any `x` value above `max` will be `1`. `max` must be greater than `min`.
|
|
185
185
|
* @return {number} The alternated value.
|
|
186
186
|
*/
|
|
187
187
|
function smootherstep( x, min, max ) {
|
|
@@ -294,7 +294,7 @@ function isPowerOfTwo( value ) {
|
|
|
294
294
|
/**
|
|
295
295
|
* Returns the smallest power of two that is greater than or equal to the given number.
|
|
296
296
|
*
|
|
297
|
-
* @param {number} value - The value to find a POT for.
|
|
297
|
+
* @param {number} value - The value to find a POT for. Must be greater than `0`.
|
|
298
298
|
* @return {number} The smallest power of two that is greater than or equal to the given number.
|
|
299
299
|
*/
|
|
300
300
|
function ceilPowerOfTwo( value ) {
|
|
@@ -306,7 +306,7 @@ function ceilPowerOfTwo( value ) {
|
|
|
306
306
|
/**
|
|
307
307
|
* Returns the largest power of two that is less than or equal to the given number.
|
|
308
308
|
*
|
|
309
|
-
* @param {number} value - The value to find a POT for.
|
|
309
|
+
* @param {number} value - The value to find a POT for. Must be greater than `0`.
|
|
310
310
|
* @return {number} The largest power of two that is less than or equal to the given number.
|
|
311
311
|
*/
|
|
312
312
|
function floorPowerOfTwo( value ) {
|
package/src/math/Matrix2.js
CHANGED
|
@@ -26,6 +26,19 @@
|
|
|
26
26
|
*/
|
|
27
27
|
export class Matrix2 {
|
|
28
28
|
|
|
29
|
+
static {
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* This flag can be used for type testing.
|
|
33
|
+
*
|
|
34
|
+
* @type {boolean}
|
|
35
|
+
* @readonly
|
|
36
|
+
* @default true
|
|
37
|
+
*/
|
|
38
|
+
Matrix2.prototype.isMatrix2 = true;
|
|
39
|
+
|
|
40
|
+
}
|
|
41
|
+
|
|
29
42
|
/**
|
|
30
43
|
* Constructs a new 2x2 matrix. The arguments are supposed to be
|
|
31
44
|
* in row-major order. If no arguments are provided, the constructor
|
|
@@ -38,15 +51,6 @@ export class Matrix2 {
|
|
|
38
51
|
*/
|
|
39
52
|
constructor( n11, n12, n21, n22 ) {
|
|
40
53
|
|
|
41
|
-
/**
|
|
42
|
-
* This flag can be used for type testing.
|
|
43
|
-
*
|
|
44
|
-
* @type {boolean}
|
|
45
|
-
* @readonly
|
|
46
|
-
* @default true
|
|
47
|
-
*/
|
|
48
|
-
Matrix2.prototype.isMatrix2 = true;
|
|
49
|
-
|
|
50
54
|
/**
|
|
51
55
|
* A column-major list of matrix values.
|
|
52
56
|
*
|