super-three 0.181.0 → 0.185.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 +21332 -19201
- package/build/three.core.js +20908 -19853
- package/build/three.core.min.js +2 -2
- package/build/three.module.js +1947 -862
- package/build/three.module.min.js +2 -2
- package/build/three.tsl.js +37 -16
- package/build/three.tsl.min.js +2 -2
- package/build/three.webgpu.js +33628 -25197
- package/build/three.webgpu.min.js +2 -2
- package/build/three.webgpu.nodes.js +33394 -25000
- package/build/three.webgpu.nodes.min.js +2 -2
- package/examples/jsm/Addons.js +14 -3
- package/examples/jsm/animation/CCDIKSolver.js +7 -3
- package/examples/jsm/controls/ArcballControls.js +13 -6
- package/examples/jsm/controls/DragControls.js +2 -2
- package/examples/jsm/controls/FirstPersonControls.js +127 -86
- 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 +102 -17
- package/examples/jsm/csm/CSM.js +2 -1
- package/examples/jsm/csm/CSMFrustum.js +31 -6
- package/examples/jsm/csm/CSMShadowNode.js +10 -3
- package/examples/jsm/effects/AnaglyphEffect.js +102 -7
- package/examples/jsm/effects/AsciiEffect.js +14 -1
- package/examples/jsm/environments/ColorEnvironment.js +59 -0
- package/examples/jsm/environments/RoomEnvironment.js +3 -0
- package/examples/jsm/exporters/DRACOExporter.js +27 -6
- package/examples/jsm/exporters/EXRExporter.js +1 -1
- package/examples/jsm/exporters/GLTFExporter.js +266 -21
- package/examples/jsm/exporters/PLYExporter.js +286 -73
- package/examples/jsm/exporters/USDZExporter.js +353 -99
- package/examples/jsm/generators/CityGenerator.js +346 -0
- package/examples/jsm/generators/ForestGenerator.js +347 -0
- package/examples/jsm/generators/TerrainGenerator.js +504 -0
- package/examples/jsm/generators/TreeGenerator.js +377 -0
- package/examples/jsm/generators/city/SidewalkGenerator.js +253 -0
- package/examples/jsm/generators/city/SkyscraperGenerator.js +1357 -0
- package/examples/jsm/geometries/DecalGeometry.js +1 -1
- package/examples/jsm/geometries/LoftGeometry.js +355 -0
- 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/LightProbeHelper.js +5 -4
- package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -1
- package/examples/jsm/helpers/TextureHelperGPU.js +1 -1
- package/examples/jsm/helpers/ViewHelper.js +83 -14
- package/examples/jsm/inspector/Extension.js +13 -0
- package/examples/jsm/inspector/Inspector.js +244 -91
- package/examples/jsm/inspector/RendererInspector.js +165 -39
- 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 +241 -25
- package/examples/jsm/inspector/tabs/Memory.js +136 -0
- package/examples/jsm/inspector/tabs/Parameters.js +115 -7
- package/examples/jsm/inspector/tabs/Performance.js +24 -9
- package/examples/jsm/inspector/tabs/Settings.js +306 -0
- package/examples/jsm/inspector/tabs/Timeline.js +1696 -0
- package/examples/jsm/inspector/tabs/Viewer.js +723 -9
- package/examples/jsm/inspector/ui/Graph.js +162 -25
- package/examples/jsm/inspector/ui/Item.js +92 -13
- package/examples/jsm/inspector/ui/List.js +2 -2
- package/examples/jsm/inspector/ui/Profiler.js +1991 -44
- package/examples/jsm/inspector/ui/Style.js +1943 -543
- package/examples/jsm/inspector/ui/Tab.js +226 -5
- package/examples/jsm/inspector/ui/Values.js +126 -8
- package/examples/jsm/inspector/ui/utils.js +143 -10
- package/examples/jsm/interaction/InteractionManager.js +226 -0
- package/examples/jsm/libs/basis/README.md +0 -1
- package/examples/jsm/libs/demuxer_mp4.js +3 -3
- package/examples/jsm/libs/draco/README.md +0 -1
- package/examples/jsm/libs/meshopt_clusterizer.module.js +421 -0
- package/examples/jsm/libs/meshopt_decoder.module.js +9 -8
- package/examples/jsm/libs/meshopt_simplifier.module.js +627 -0
- package/examples/jsm/libs/mikktspace.module.js +34 -9
- package/examples/jsm/lighting/ClusteredLighting.js +55 -0
- package/examples/jsm/lighting/DynamicLighting.js +82 -0
- package/examples/jsm/lighting/LightProbeGrid.js +681 -0
- package/examples/jsm/lines/LineMaterial.js +45 -16
- package/examples/jsm/lines/LineSegments2.js +8 -0
- package/examples/jsm/lines/webgpu/LineSegments2.js +8 -0
- package/examples/jsm/loaders/3DMLoader.js +6 -5
- 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 +51 -18
- package/examples/jsm/loaders/EXRLoader.js +701 -90
- 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 +7 -30
- package/examples/jsm/loaders/KMZLoader.js +5 -5
- package/examples/jsm/loaders/KTX2Loader.js +58 -17
- package/examples/jsm/loaders/LDrawLoader.js +49 -58
- package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
- package/examples/jsm/loaders/LUTCubeLoader.js +2 -2
- package/examples/jsm/loaders/LWOLoader.js +11 -39
- package/examples/jsm/loaders/LottieLoader.js +1 -1
- package/examples/jsm/loaders/MaterialXLoader.js +31 -9
- package/examples/jsm/loaders/NRRDLoader.js +5 -5
- package/examples/jsm/loaders/PCDLoader.js +11 -9
- package/examples/jsm/loaders/PLYLoader.js +218 -55
- package/examples/jsm/loaders/SVGLoader.js +549 -497
- package/examples/jsm/loaders/TDSLoader.js +0 -2
- package/examples/jsm/loaders/TGALoader.js +0 -2
- package/examples/jsm/loaders/TTFLoader.js +1 -1
- package/examples/jsm/loaders/USDLoader.js +127 -43
- package/examples/jsm/loaders/UltraHDRLoader.js +285 -160
- package/examples/jsm/loaders/VOXLoader.js +660 -117
- package/examples/jsm/loaders/VRMLLoader.js +80 -3
- 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 +504 -344
- package/examples/jsm/loaders/usd/USDCParser.js +1867 -6
- package/examples/jsm/loaders/usd/USDComposer.js +4627 -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/TileCreasedNormalsPlugin.js +270 -0
- package/examples/jsm/misc/Volume.js +2 -3
- package/examples/jsm/misc/VolumeSlice.js +0 -1
- package/examples/jsm/modifiers/TessellateModifier.js +1 -1
- package/examples/jsm/objects/GroundedSkybox.js +1 -1
- package/examples/jsm/objects/LensflareMesh.js +1 -1
- package/examples/jsm/objects/Reflector.js +72 -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/Water2Mesh.js +1 -1
- package/examples/jsm/objects/WaterMesh.js +5 -7
- package/examples/jsm/physics/AmmoPhysics.js +27 -15
- package/examples/jsm/physics/JoltPhysics.js +10 -6
- package/examples/jsm/physics/RapierPhysics.js +36 -7
- 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/shaders/VolumeShader.js +31 -44
- package/examples/jsm/transpiler/AST.js +44 -0
- package/examples/jsm/transpiler/GLSLDecoder.js +65 -8
- package/examples/jsm/transpiler/Linker.js +1 -1
- 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/BilateralBlurNode.js +374 -0
- package/examples/jsm/tsl/display/BloomNode.js +75 -25
- 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 +3 -3
- 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 +13 -14
- package/examples/jsm/tsl/display/GTAONode.js +40 -17
- package/examples/jsm/tsl/display/GaussianBlurNode.js +21 -2
- package/examples/jsm/tsl/display/GodraysNode.js +615 -0
- package/examples/jsm/tsl/display/ImportanceSampledEnvironment.js +560 -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 +9 -8
- package/examples/jsm/tsl/display/RGBShiftNode.js +2 -2
- package/examples/jsm/tsl/display/RecurrentDenoiseNode.js +912 -0
- 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 +15 -27
- package/examples/jsm/tsl/display/SSGINode.js +96 -62
- package/examples/jsm/tsl/display/SSRNode.js +831 -134
- package/examples/jsm/tsl/display/SSSNode.js +8 -6
- 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/TemporalReprojectNode.js +1023 -0
- 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/ClusteredLightsNode.js +622 -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/tsl/math/curlNoise.js +107 -0
- package/examples/jsm/tsl/shadows/TileShadowNode.js +1 -1
- package/examples/jsm/tsl/shadows/TileShadowNodeHelper.js +3 -3
- package/examples/jsm/tsl/utils/GroundedSkybox.js +62 -0
- package/examples/jsm/tsl/utils/RNoise.js +51 -0
- package/examples/jsm/tsl/utils/SpecularHelpers.js +325 -0
- package/examples/jsm/utils/BufferGeometryUtils.js +128 -62
- package/examples/jsm/utils/ColorUtils.js +76 -0
- package/examples/jsm/utils/GeometryCompressionUtils.js +1 -1
- package/examples/jsm/utils/LDrawUtils.js +1 -1
- package/examples/jsm/utils/SceneOptimizer.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/ARButton.js +1 -1
- package/examples/jsm/webxr/WebGLXRFallback.js +89 -0
- package/examples/jsm/webxr/XRControllerModelFactory.js +2 -2
- package/examples/jsm/webxr/XRHandMeshModel.js +36 -10
- package/examples/jsm/webxr/XRHandModelFactory.js +2 -1
- package/package.json +28 -34
- package/src/Three.Core.js +3 -1
- package/src/Three.TSL.js +35 -14
- package/src/Three.WebGPU.Nodes.js +5 -0
- package/src/Three.WebGPU.js +13 -0
- package/src/Three.js +1 -0
- package/src/animation/AnimationAction.js +18 -4
- package/src/animation/AnimationClip.js +0 -139
- package/src/animation/AnimationMixer.js +6 -0
- package/src/animation/AnimationUtils.js +1 -12
- package/src/animation/KeyframeTrack.js +47 -8
- package/src/animation/PropertyBinding.js +2 -2
- 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 +34 -4
- package/src/cameras/CubeCamera.js +20 -0
- package/src/cameras/StereoCamera.js +5 -2
- package/src/constants.js +90 -5
- package/src/core/BufferAttribute.js +13 -1
- package/src/core/BufferGeometry.js +43 -9
- package/src/core/Clock.js +7 -0
- package/src/core/Object3D.js +69 -11
- package/src/core/Raycaster.js +3 -3
- package/src/core/RenderTarget.js +19 -6
- package/src/extras/PMREMGenerator.js +13 -22
- package/src/extras/TextureUtils.js +6 -2
- package/src/extras/core/ShapePath.js +149 -160
- 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/SphereGeometry.js +8 -3
- package/src/geometries/TorusGeometry.js +8 -3
- package/src/helpers/CameraHelper.js +3 -0
- package/src/helpers/DirectionalLightHelper.js +6 -1
- package/src/helpers/HemisphereLightHelper.js +5 -0
- package/src/helpers/PointLightHelper.js +3 -25
- package/src/helpers/SpotLightHelper.js +4 -1
- 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 +75 -42
- package/src/loaders/FileLoader.js +2 -3
- package/src/loaders/ImageBitmapLoader.js +12 -9
- package/src/loaders/Loader.js +6 -0
- package/src/loaders/LoadingManager.js +5 -0
- package/src/loaders/MaterialLoader.js +37 -266
- package/src/loaders/ObjectLoader.js +48 -6
- package/src/loaders/nodes/NodeLoader.js +2 -2
- package/src/loaders/nodes/NodeObjectLoader.js +18 -0
- package/src/materials/LineBasicMaterial.js +4 -0
- package/src/materials/Material.js +198 -1
- package/src/materials/MeshBasicMaterial.js +24 -0
- package/src/materials/MeshDepthMaterial.js +10 -0
- package/src/materials/MeshDistanceMaterial.js +10 -0
- package/src/materials/MeshLambertMaterial.js +49 -1
- package/src/materials/MeshMatcapMaterial.js +25 -1
- package/src/materials/MeshNormalMaterial.js +9 -1
- package/src/materials/MeshPhongMaterial.js +49 -1
- package/src/materials/MeshPhysicalMaterial.js +38 -0
- package/src/materials/MeshStandardMaterial.js +42 -1
- package/src/materials/MeshToonMaterial.js +35 -2
- package/src/materials/PointsMaterial.js +7 -0
- package/src/materials/ShaderMaterial.js +106 -1
- package/src/materials/SpriteMaterial.js +7 -0
- package/src/materials/nodes/Line2NodeMaterial.js +380 -297
- package/src/materials/nodes/MeshBasicNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshPhongNodeMaterial.js +0 -9
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +3 -30
- package/src/materials/nodes/MeshSSSNodeMaterial.js +0 -13
- package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -15
- package/src/materials/nodes/NodeMaterial.js +153 -89
- package/src/materials/nodes/SpriteNodeMaterial.js +0 -10
- package/src/materials/nodes/manager/NodeMaterialObserver.js +234 -100
- package/src/math/Box3.js +5 -0
- package/src/math/FrustumArray.js +103 -133
- package/src/math/Interpolant.js +1 -1
- package/src/math/Line3.js +6 -5
- package/src/math/MathUtils.js +12 -12
- package/src/math/Matrix2.js +13 -9
- package/src/math/Matrix3.js +24 -9
- package/src/math/Matrix4.js +112 -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 +13 -9
- package/src/math/Vector3.js +17 -15
- package/src/math/Vector4.js +15 -11
- package/src/math/interpolants/BezierInterpolant.js +106 -0
- package/src/nodes/Nodes.js +86 -71
- package/src/nodes/TSL.js +15 -13
- package/src/nodes/accessors/Arrays.js +5 -5
- package/src/nodes/accessors/Batch.js +108 -0
- package/src/nodes/accessors/Bitangent.js +7 -7
- package/src/nodes/accessors/BufferAttributeNode.js +120 -17
- package/src/nodes/accessors/BufferNode.js +29 -2
- package/src/nodes/accessors/Camera.js +149 -28
- package/src/nodes/accessors/ClippingNode.js +5 -5
- package/src/nodes/accessors/CubeTextureNode.js +27 -2
- package/src/nodes/accessors/Instance.js +264 -0
- package/src/nodes/accessors/MaterialNode.js +27 -3
- package/src/nodes/accessors/MaterialProperties.js +6 -8
- package/src/nodes/accessors/MaterialReferenceNode.js +1 -2
- package/src/nodes/accessors/ModelNode.js +1 -1
- package/src/nodes/accessors/{MorphNode.js → Morph.js} +99 -112
- package/src/nodes/accessors/Normal.js +24 -24
- package/src/nodes/accessors/Object3DNode.js +1 -1
- package/src/nodes/accessors/Position.js +39 -3
- package/src/nodes/accessors/ReferenceBaseNode.js +6 -6
- package/src/nodes/accessors/ReferenceNode.js +9 -8
- package/src/nodes/accessors/ReflectVector.js +3 -3
- package/src/nodes/accessors/RendererReferenceNode.js +1 -2
- package/src/nodes/accessors/SceneProperties.js +47 -0
- package/src/nodes/accessors/Skinning.js +263 -0
- package/src/nodes/accessors/StorageBufferNode.js +16 -27
- package/src/nodes/accessors/StorageTexture3DNode.js +100 -0
- package/src/nodes/accessors/StorageTextureNode.js +74 -11
- package/src/nodes/accessors/Tangent.js +8 -18
- package/src/nodes/accessors/Texture3DNode.js +32 -35
- package/src/nodes/accessors/TextureNode.js +124 -25
- 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 +4 -19
- 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 +55 -4
- package/src/nodes/core/Node.js +151 -17
- package/src/nodes/core/NodeBuilder.js +479 -101
- package/src/nodes/core/NodeError.js +28 -0
- package/src/nodes/core/NodeFrame.js +12 -4
- package/src/nodes/core/NodeUtils.js +20 -18
- package/src/nodes/core/OutputStructNode.js +13 -11
- package/src/nodes/core/OverrideContextNode.js +153 -0
- package/src/nodes/core/ParameterNode.js +4 -4
- package/src/nodes/core/PropertyNode.js +66 -4
- package/src/nodes/core/StackNode.js +91 -20
- package/src/nodes/core/StackTrace.js +139 -0
- package/src/nodes/core/StructNode.js +20 -8
- package/src/nodes/core/StructTypeNode.js +17 -23
- 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 +56 -23
- package/src/nodes/core/VaryingNode.js +14 -21
- package/src/nodes/display/BlendModes.js +1 -105
- package/src/nodes/display/BumpMapNode.js +6 -1
- package/src/nodes/display/ColorAdjustment.js +27 -9
- package/src/nodes/display/ColorSpaceNode.js +3 -3
- package/src/nodes/display/FrontFacingNode.js +38 -9
- package/src/nodes/display/NormalMapNode.js +41 -6
- package/src/nodes/display/PassNode.js +157 -56
- package/src/nodes/display/PremultiplyAlphaFunctions.js +39 -0
- package/src/nodes/display/RenderOutputNode.js +19 -10
- 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/functions/VolumetricLightingModel.js +40 -7
- 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 +5 -5
- package/src/nodes/lighting/AnalyticLightNode.js +53 -0
- package/src/nodes/lighting/EnvironmentNode.js +30 -5
- package/src/nodes/lighting/IESSpotLightNode.js +40 -2
- package/src/nodes/lighting/LightingContextNode.js +10 -2
- package/src/nodes/lighting/LightsNode.js +97 -65
- package/src/nodes/lighting/PointShadowNode.js +166 -148
- package/src/nodes/lighting/ShadowFilterNode.js +74 -117
- package/src/nodes/lighting/ShadowNode.js +149 -51
- package/src/nodes/materialx/lib/mx_noise.js +2 -2
- package/src/nodes/math/BitcastNode.js +1 -1
- package/src/nodes/math/BitcountNode.js +433 -0
- package/src/nodes/math/ConditionalNode.js +6 -6
- package/src/nodes/math/MathNode.js +115 -52
- package/src/nodes/math/OperatorNode.js +24 -23
- package/src/nodes/math/PackFloatNode.js +98 -0
- package/src/nodes/math/UnpackFloatNode.js +96 -0
- package/src/nodes/parsers/GLSLNodeFunction.js +1 -1
- package/src/nodes/pmrem/PMREMNode.js +34 -3
- package/src/nodes/pmrem/PMREMUtils.js +9 -15
- package/src/nodes/tsl/TSLBase.js +1 -1
- package/src/nodes/tsl/TSLCore.js +99 -33
- 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/EquirectUV.js +30 -5
- package/src/nodes/utils/EventNode.js +31 -2
- package/src/nodes/utils/FlipNode.js +1 -1
- package/src/nodes/utils/FunctionOverloadingNode.js +2 -2
- 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 +48 -5
- package/src/nodes/utils/PostProcessingUtils.js +33 -1
- package/src/nodes/utils/RTTNode.js +41 -25
- package/src/nodes/utils/ReflectorNode.js +4 -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/StorageArrayElementNode.js +1 -1
- package/src/nodes/utils/UVUtils.js +28 -0
- package/src/objects/BatchedMesh.js +66 -30
- package/src/objects/InstancedMesh.js +19 -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/SkinnedMesh.js +26 -9
- package/src/renderers/WebGLRenderer.js +344 -156
- package/src/renderers/common/Animation.js +3 -3
- package/src/renderers/common/Attributes.js +15 -1
- package/src/renderers/common/Backend.js +78 -13
- 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 +141 -57
- package/src/renderers/common/BlendMode.js +143 -0
- package/src/renderers/common/Buffer.js +49 -0
- package/src/renderers/common/BundleGroup.js +1 -1
- package/src/renderers/common/ChainMap.js +30 -6
- package/src/renderers/common/ClippingContext.js +10 -2
- 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 +374 -4
- package/src/renderers/common/InspectorBase.js +6 -1
- package/src/renderers/common/Lighting.js +51 -19
- 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/RenderList.js +41 -4
- package/src/renderers/common/RenderLists.js +2 -1
- package/src/renderers/common/RenderObject.js +88 -16
- 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 +700 -163
- package/src/renderers/common/Sampler.js +16 -48
- package/src/renderers/common/StorageBuffer.js +13 -1
- package/src/renderers/common/Textures.js +121 -9
- package/src/renderers/common/TimestampQueryPool.js +6 -4
- package/src/renderers/common/Uniform.js +8 -0
- package/src/renderers/common/UniformsGroup.js +84 -1
- package/src/renderers/common/XRManager.js +377 -51
- package/src/renderers/common/extras/PMREMGenerator.js +40 -61
- package/src/renderers/common/nodes/NodeBuilderState.js +10 -2
- package/src/renderers/common/nodes/NodeLibrary.js +4 -4
- package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +298 -106
- package/src/renderers/common/nodes/NodeStorageBuffer.js +13 -2
- package/src/renderers/common/nodes/NodeUniformBuffer.js +65 -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/common.glsl.js +13 -4
- package/src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl.js +0 -6
- package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +0 -1
- package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +9 -13
- package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/envmap_vertex.glsl.js +1 -1
- 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 +3 -1
- 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_begin.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +7 -0
- package/src/renderers/shaders/ShaderChunk/normal_vertex.glsl.js +6 -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 +2 -2
- 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} +2 -3
- 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 +271 -0
- package/src/renderers/webgl/WebGLProgram.js +54 -113
- package/src/renderers/webgl/WebGLPrograms.js +74 -55
- package/src/renderers/webgl/WebGLRenderLists.js +24 -1
- package/src/renderers/webgl/WebGLRenderStates.js +13 -2
- package/src/renderers/webgl/WebGLShaderCache.js +5 -11
- package/src/renderers/webgl/WebGLShadowMap.js +188 -24
- package/src/renderers/webgl/WebGLState.js +75 -37
- package/src/renderers/webgl/WebGLTextures.js +230 -56
- package/src/renderers/webgl/WebGLUniforms.js +40 -3
- package/src/renderers/webgl/WebGLUniformsGroups.js +82 -35
- package/src/renderers/webgl/WebGLUtils.js +6 -2
- package/src/renderers/webgl-fallback/WebGLBackend.js +322 -92
- package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +0 -41
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +295 -66
- 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 +118 -73
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +10 -10
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +9 -3
- package/src/renderers/webgpu/WebGPUBackend.js +733 -302
- package/src/renderers/webgpu/WebGPURenderer.js +2 -1
- package/src/renderers/webgpu/descriptors/GPUBindGroupDescriptor.js +48 -0
- package/src/renderers/webgpu/descriptors/GPUBufferDescriptor.js +57 -0
- package/src/renderers/webgpu/descriptors/GPUCommandEncoderDescriptor.js +30 -0
- package/src/renderers/webgpu/descriptors/GPUComputePassDescriptor.js +38 -0
- package/src/renderers/webgpu/descriptors/GPUComputePipelineDescriptor.js +48 -0
- package/src/renderers/webgpu/descriptors/GPUCopyExternalImageDestInfo.js +47 -0
- package/src/renderers/webgpu/descriptors/GPUCopyExternalImageSourceInfo.js +50 -0
- package/src/renderers/webgpu/descriptors/GPUExtent3D.js +51 -0
- package/src/renderers/webgpu/descriptors/GPUPipelineLayoutDescriptor.js +39 -0
- package/src/renderers/webgpu/descriptors/GPUQuerySetDescriptor.js +47 -0
- package/src/renderers/webgpu/descriptors/GPURenderBundleEncoderDescriptor.js +74 -0
- package/src/renderers/webgpu/descriptors/GPURenderPassColorAttachment.js +72 -0
- package/src/renderers/webgpu/descriptors/GPURenderPassDepthStencilAttachment.js +99 -0
- package/src/renderers/webgpu/descriptors/GPURenderPassDescriptor.js +72 -0
- package/src/renderers/webgpu/descriptors/GPURenderPassTimestampWrites.js +49 -0
- package/src/renderers/webgpu/descriptors/GPURenderPipelineDescriptor.js +130 -0
- package/src/renderers/webgpu/descriptors/GPUSamplerDescriptor.js +119 -0
- package/src/renderers/webgpu/descriptors/GPUShaderModuleDescriptor.js +46 -0
- package/src/renderers/webgpu/descriptors/GPUTexelCopyBufferInfo.js +57 -0
- package/src/renderers/webgpu/descriptors/GPUTexelCopyBufferLayout.js +48 -0
- package/src/renderers/webgpu/descriptors/GPUTexelCopyTextureInfo.js +61 -0
- package/src/renderers/webgpu/descriptors/GPUTextureDescriptor.js +99 -0
- package/src/renderers/webgpu/descriptors/GPUTextureViewDescriptor.js +108 -0
- package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +0 -1
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +526 -93
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +1 -1
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +194 -61
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +395 -234
- 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 +224 -91
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +228 -213
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +428 -175
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +40 -25
- package/src/renderers/webgpu/utils/WebGPUUtils.js +70 -13
- 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/DepthTexture.js +1 -1
- package/src/textures/ExternalTexture.js +0 -3
- 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/fonts/LICENSE +0 -13
- package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
- package/examples/fonts/MPLUSRounded1c/OFL.txt +0 -91
- package/examples/fonts/README.md +0 -11
- package/examples/fonts/droid/NOTICE +0 -190
- package/examples/fonts/droid/README.txt +0 -18
- package/examples/fonts/droid/droid_sans_bold.typeface.json +0 -1
- package/examples/fonts/droid/droid_sans_mono_regular.typeface.json +0 -1
- package/examples/fonts/droid/droid_sans_regular.typeface.json +0 -1
- package/examples/fonts/droid/droid_serif_bold.typeface.json +0 -1
- package/examples/fonts/droid/droid_serif_regular.typeface.json +0 -1
- package/examples/fonts/gentilis_bold.typeface.json +0 -1
- package/examples/fonts/gentilis_regular.typeface.json +0 -1
- package/examples/fonts/helvetiker_bold.typeface.json +0 -1
- package/examples/fonts/helvetiker_regular.typeface.json +0 -1
- package/examples/fonts/optimer_bold.typeface.json +0 -1
- package/examples/fonts/optimer_regular.typeface.json +0 -1
- package/examples/fonts/ttf/README.md +0 -9
- package/examples/fonts/ttf/kenpixel.ttf +0 -0
- package/examples/jsm/libs/ammo.wasm.js +0 -822
- package/examples/jsm/libs/ammo.wasm.wasm +0 -0
- package/examples/jsm/libs/draco/draco_encoder.js +0 -33
- package/examples/jsm/libs/draco/gltf/draco_encoder.js +0 -33
- package/examples/jsm/libs/lottie_canvas.module.js +0 -14849
- package/examples/jsm/libs/opentype.module.js +0 -14506
- package/examples/jsm/libs/rhino3dm/rhino3dm.js +0 -21
- package/examples/jsm/libs/rhino3dm/rhino3dm.module.js +0 -16
- package/examples/jsm/libs/rhino3dm/rhino3dm.wasm +0 -0
- package/examples/jsm/lighting/TiledLighting.js +0 -42
- 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/examples/jsm/tsl/display/AnamorphicNode.js +0 -282
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +0 -442
- package/src/nodes/accessors/BatchNode.js +0 -163
- package/src/nodes/accessors/InstanceNode.js +0 -244
- package/src/nodes/accessors/InstancedMeshNode.js +0 -50
- package/src/nodes/accessors/SceneNode.js +0 -145
- package/src/nodes/accessors/SkinningNode.js +0 -327
- 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
|
@@ -5,7 +5,7 @@ import BasicLightMapNode from '../../nodes/lighting/BasicLightMapNode.js';
|
|
|
5
5
|
import BasicLightingModel from '../../nodes/functions/BasicLightingModel.js';
|
|
6
6
|
import { normalViewGeometry } from '../../nodes/accessors/Normal.js';
|
|
7
7
|
import { diffuseColor } from '../../nodes/core/PropertyNode.js';
|
|
8
|
-
import {
|
|
8
|
+
import { negateOnBackSide } from '../../nodes/display/FrontFacingNode.js';
|
|
9
9
|
|
|
10
10
|
import { MeshBasicMaterial } from '../MeshBasicMaterial.js';
|
|
11
11
|
|
|
@@ -66,7 +66,7 @@ class MeshBasicNodeMaterial extends NodeMaterial {
|
|
|
66
66
|
*/
|
|
67
67
|
setupNormal() {
|
|
68
68
|
|
|
69
|
-
return
|
|
69
|
+
return negateOnBackSide( normalViewGeometry ); // see #28839
|
|
70
70
|
|
|
71
71
|
}
|
|
72
72
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import NodeMaterial from './NodeMaterial.js';
|
|
2
2
|
import { diffuseColor } from '../../nodes/core/PropertyNode.js';
|
|
3
|
-
import {
|
|
3
|
+
import { packNormalToRGB } from '../../nodes/utils/Packing.js';
|
|
4
4
|
import { materialOpacity } from '../../nodes/accessors/MaterialNode.js';
|
|
5
5
|
import { normalView } from '../../nodes/accessors/Normal.js';
|
|
6
6
|
import { colorSpaceToWorking } from '../../nodes/display/ColorSpaceNode.js';
|
|
@@ -58,7 +58,7 @@ class MeshNormalNodeMaterial extends NodeMaterial {
|
|
|
58
58
|
|
|
59
59
|
// By convention, a normal packed to RGB is in sRGB color space. Convert it to working color space.
|
|
60
60
|
|
|
61
|
-
diffuseColor.assign( colorSpaceToWorking( vec4(
|
|
61
|
+
diffuseColor.assign( colorSpaceToWorking( vec4( packNormalToRGB( normalView ), opacityNode ), SRGBColorSpace ) );
|
|
62
62
|
|
|
63
63
|
}
|
|
64
64
|
|
|
@@ -127,15 +127,6 @@ class MeshPhongNodeMaterial extends NodeMaterial {
|
|
|
127
127
|
|
|
128
128
|
}
|
|
129
129
|
|
|
130
|
-
copy( source ) {
|
|
131
|
-
|
|
132
|
-
this.shininessNode = source.shininessNode;
|
|
133
|
-
this.specularNode = source.specularNode;
|
|
134
|
-
|
|
135
|
-
return super.copy( source );
|
|
136
|
-
|
|
137
|
-
}
|
|
138
|
-
|
|
139
130
|
}
|
|
140
131
|
|
|
141
132
|
export default MeshPhongNodeMaterial;
|
|
@@ -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
|
}
|
|
@@ -485,34 +486,6 @@ class MeshPhysicalNodeMaterial extends MeshStandardNodeMaterial {
|
|
|
485
486
|
|
|
486
487
|
}
|
|
487
488
|
|
|
488
|
-
copy( source ) {
|
|
489
|
-
|
|
490
|
-
this.clearcoatNode = source.clearcoatNode;
|
|
491
|
-
this.clearcoatRoughnessNode = source.clearcoatRoughnessNode;
|
|
492
|
-
this.clearcoatNormalNode = source.clearcoatNormalNode;
|
|
493
|
-
|
|
494
|
-
this.sheenNode = source.sheenNode;
|
|
495
|
-
this.sheenRoughnessNode = source.sheenRoughnessNode;
|
|
496
|
-
|
|
497
|
-
this.iridescenceNode = source.iridescenceNode;
|
|
498
|
-
this.iridescenceIORNode = source.iridescenceIORNode;
|
|
499
|
-
this.iridescenceThicknessNode = source.iridescenceThicknessNode;
|
|
500
|
-
|
|
501
|
-
this.specularIntensityNode = source.specularIntensityNode;
|
|
502
|
-
this.specularColorNode = source.specularColorNode;
|
|
503
|
-
|
|
504
|
-
this.transmissionNode = source.transmissionNode;
|
|
505
|
-
this.thicknessNode = source.thicknessNode;
|
|
506
|
-
this.attenuationDistanceNode = source.attenuationDistanceNode;
|
|
507
|
-
this.attenuationColorNode = source.attenuationColorNode;
|
|
508
|
-
this.dispersionNode = source.dispersionNode;
|
|
509
|
-
|
|
510
|
-
this.anisotropyNode = source.anisotropyNode;
|
|
511
|
-
|
|
512
|
-
return super.copy( source );
|
|
513
|
-
|
|
514
|
-
}
|
|
515
|
-
|
|
516
489
|
}
|
|
517
490
|
|
|
518
491
|
export default MeshPhysicalNodeMaterial;
|
|
@@ -157,19 +157,6 @@ class MeshSSSNodeMaterial extends MeshPhysicalNodeMaterial {
|
|
|
157
157
|
|
|
158
158
|
}
|
|
159
159
|
|
|
160
|
-
copy( source ) {
|
|
161
|
-
|
|
162
|
-
this.thicknessColorNode = source.thicknessColorNode;
|
|
163
|
-
this.thicknessDistortionNode = source.thicknessDistortionNode;
|
|
164
|
-
this.thicknessAmbientNode = source.thicknessAmbientNode;
|
|
165
|
-
this.thicknessAttenuationNode = source.thicknessAttenuationNode;
|
|
166
|
-
this.thicknessPowerNode = source.thicknessPowerNode;
|
|
167
|
-
this.thicknessScaleNode = source.thicknessScaleNode;
|
|
168
|
-
|
|
169
|
-
return super.copy( source );
|
|
170
|
-
|
|
171
|
-
}
|
|
172
|
-
|
|
173
160
|
}
|
|
174
161
|
|
|
175
162
|
export default MeshSSSNodeMaterial;
|
|
@@ -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,18 +167,7 @@ class MeshStandardNodeMaterial extends NodeMaterial {
|
|
|
166
167
|
|
|
167
168
|
// DIFFUSE COLOR
|
|
168
169
|
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
copy( source ) {
|
|
174
|
-
|
|
175
|
-
this.emissiveNode = source.emissiveNode;
|
|
176
|
-
|
|
177
|
-
this.metalnessNode = source.metalnessNode;
|
|
178
|
-
this.roughnessNode = source.roughnessNode;
|
|
179
|
-
|
|
180
|
-
return super.copy( source );
|
|
170
|
+
diffuseContribution.assign( diffuseColor.rgb.mul( metalnessNode.oneMinus() ) );
|
|
181
171
|
|
|
182
172
|
}
|
|
183
173
|
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import { Material } from '../Material.js';
|
|
2
2
|
|
|
3
3
|
import { hashArray, hashString } from '../../nodes/core/NodeUtils.js';
|
|
4
|
-
import { output, diffuseColor,
|
|
4
|
+
import { output, diffuseColor, ambientOcclusion, emissive } from '../../nodes/core/PropertyNode.js';
|
|
5
5
|
import { materialAlphaTest, materialColor, materialOpacity, materialEmissive, materialNormal, materialLightMap, materialAO } from '../../nodes/accessors/MaterialNode.js';
|
|
6
6
|
import { modelViewProjection } from '../../nodes/accessors/ModelViewProjectionNode.js';
|
|
7
7
|
import { normalLocal } from '../../nodes/accessors/Normal.js';
|
|
8
|
-
import { instancedMesh } from '../../nodes/accessors/
|
|
9
|
-
import { batch } from '../../nodes/accessors/
|
|
8
|
+
import { instancedMesh, instanceColor } from '../../nodes/accessors/Instance.js';
|
|
9
|
+
import { batch, batchColor } from '../../nodes/accessors/Batch.js';
|
|
10
10
|
import { materialReference } from '../../nodes/accessors/MaterialReferenceNode.js';
|
|
11
11
|
import { positionLocal, positionView } from '../../nodes/accessors/Position.js';
|
|
12
|
-
import { skinning } from '../../nodes/accessors/
|
|
13
|
-
import { morphReference } from '../../nodes/accessors/
|
|
12
|
+
import { skinning } from '../../nodes/accessors/Skinning.js';
|
|
13
|
+
import { morphReference } from '../../nodes/accessors/Morph.js';
|
|
14
14
|
import { fwidth, mix, smoothstep } from '../../nodes/math/MathNode.js';
|
|
15
15
|
import { float, vec3, vec4, bool } from '../../nodes/tsl/TSLBase.js';
|
|
16
16
|
import AONode from '../../nodes/lighting/AONode.js';
|
|
@@ -23,9 +23,8 @@ import NodeMaterialObserver from './manager/NodeMaterialObserver.js';
|
|
|
23
23
|
import getAlphaHashThreshold from '../../nodes/functions/material/getAlphaHashThreshold.js';
|
|
24
24
|
import { modelViewMatrix } from '../../nodes/accessors/ModelNode.js';
|
|
25
25
|
import { vertexColor } from '../../nodes/accessors/VertexColorNode.js';
|
|
26
|
-
import { premultiplyAlpha } from '../../nodes/display/
|
|
26
|
+
import { premultiplyAlpha } from '../../nodes/display/PremultiplyAlphaFunctions.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.
|
|
@@ -85,16 +84,6 @@ class NodeMaterial extends Material {
|
|
|
85
84
|
*/
|
|
86
85
|
this.lights = false;
|
|
87
86
|
|
|
88
|
-
/**
|
|
89
|
-
* Whether this material uses hardware clipping or not.
|
|
90
|
-
* This property is managed by the engine and should not be
|
|
91
|
-
* modified by apps.
|
|
92
|
-
*
|
|
93
|
-
* @type {boolean}
|
|
94
|
-
* @default false
|
|
95
|
-
*/
|
|
96
|
-
this.hardwareClipping = false;
|
|
97
|
-
|
|
98
87
|
/**
|
|
99
88
|
* Node materials which set their `lights` property to `true`
|
|
100
89
|
* are affected by all lights of the scene. Sometimes selective
|
|
@@ -240,6 +229,14 @@ class NodeMaterial extends Material {
|
|
|
240
229
|
*/
|
|
241
230
|
this.maskNode = null;
|
|
242
231
|
|
|
232
|
+
/**
|
|
233
|
+
* This node can be used to implement a shadow mask for the material.
|
|
234
|
+
*
|
|
235
|
+
* @type {?Node<bool>}
|
|
236
|
+
* @default null
|
|
237
|
+
*/
|
|
238
|
+
this.maskShadowNode = null;
|
|
239
|
+
|
|
243
240
|
/**
|
|
244
241
|
* The local vertex positions are computed based on multiple factors like the
|
|
245
242
|
* attribute data, morphing or skinning. This node property allows to overwrite
|
|
@@ -382,25 +379,13 @@ class NodeMaterial extends Material {
|
|
|
382
379
|
*/
|
|
383
380
|
this.vertexNode = null;
|
|
384
381
|
|
|
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
|
-
} );
|
|
382
|
+
/**
|
|
383
|
+
* This node can be used as a global context management component for this material.
|
|
384
|
+
*
|
|
385
|
+
* @type {?ContextNode}
|
|
386
|
+
* @default null
|
|
387
|
+
*/
|
|
388
|
+
this.contextNode = null;
|
|
404
389
|
|
|
405
390
|
}
|
|
406
391
|
|
|
@@ -493,9 +478,11 @@ class NodeMaterial extends Material {
|
|
|
493
478
|
|
|
494
479
|
builder.addStack();
|
|
495
480
|
|
|
496
|
-
const mvp =
|
|
481
|
+
const mvp = this.setupVertex( builder );
|
|
482
|
+
|
|
483
|
+
const vertexNode = subBuild( this.vertexNode || mvp, 'VERTEX' );
|
|
497
484
|
|
|
498
|
-
|
|
485
|
+
builder.context.clipSpace = vertexNode;
|
|
499
486
|
|
|
500
487
|
builder.stack.outputNode = vertexNode;
|
|
501
488
|
|
|
@@ -536,6 +523,7 @@ class NodeMaterial extends Material {
|
|
|
536
523
|
if ( this.fragmentNode === null ) {
|
|
537
524
|
|
|
538
525
|
this.setupDiffuseColor( builder );
|
|
526
|
+
this.setupAmbientOcclusion( builder );
|
|
539
527
|
this.setupVariants( builder );
|
|
540
528
|
|
|
541
529
|
const outgoingLightNode = this.setupLighting( builder );
|
|
@@ -558,6 +546,14 @@ class NodeMaterial extends Material {
|
|
|
558
546
|
|
|
559
547
|
if ( isCustomOutput ) resultNode = this.outputNode;
|
|
560
548
|
|
|
549
|
+
//
|
|
550
|
+
|
|
551
|
+
if ( builder.context.getOutput ) {
|
|
552
|
+
|
|
553
|
+
resultNode = builder.context.getOutput( resultNode, builder );
|
|
554
|
+
|
|
555
|
+
}
|
|
556
|
+
|
|
561
557
|
// MRT
|
|
562
558
|
|
|
563
559
|
if ( renderTarget !== null ) {
|
|
@@ -591,7 +587,7 @@ class NodeMaterial extends Material {
|
|
|
591
587
|
|
|
592
588
|
if ( fragmentNode.isOutputStructNode !== true ) {
|
|
593
589
|
|
|
594
|
-
fragmentNode =
|
|
590
|
+
fragmentNode = fragmentNode.convert( builder.getOutputType() );
|
|
595
591
|
|
|
596
592
|
}
|
|
597
593
|
|
|
@@ -651,7 +647,7 @@ class NodeMaterial extends Material {
|
|
|
651
647
|
*/
|
|
652
648
|
setupHardwareClipping( builder ) {
|
|
653
649
|
|
|
654
|
-
|
|
650
|
+
builder.hardwareClipping = false;
|
|
655
651
|
|
|
656
652
|
if ( builder.clippingContext === null ) return;
|
|
657
653
|
|
|
@@ -663,7 +659,7 @@ class NodeMaterial extends Material {
|
|
|
663
659
|
|
|
664
660
|
builder.stack.addToStack( hardwareClipping() );
|
|
665
661
|
|
|
666
|
-
|
|
662
|
+
builder.hardwareClipping = true;
|
|
667
663
|
|
|
668
664
|
}
|
|
669
665
|
|
|
@@ -753,7 +749,7 @@ class NodeMaterial extends Material {
|
|
|
753
749
|
|
|
754
750
|
this.setupPosition( builder );
|
|
755
751
|
|
|
756
|
-
builder.context.
|
|
752
|
+
builder.context.position = builder.removeStack();
|
|
757
753
|
|
|
758
754
|
return modelViewProjection;
|
|
759
755
|
|
|
@@ -771,13 +767,13 @@ class NodeMaterial extends Material {
|
|
|
771
767
|
|
|
772
768
|
if ( geometry.morphAttributes.position || geometry.morphAttributes.normal || geometry.morphAttributes.color ) {
|
|
773
769
|
|
|
774
|
-
morphReference( object )
|
|
770
|
+
morphReference( object );
|
|
775
771
|
|
|
776
772
|
}
|
|
777
773
|
|
|
778
774
|
if ( object.isSkinnedMesh === true ) {
|
|
779
775
|
|
|
780
|
-
skinning( object )
|
|
776
|
+
skinning( object );
|
|
781
777
|
|
|
782
778
|
}
|
|
783
779
|
|
|
@@ -793,13 +789,13 @@ class NodeMaterial extends Material {
|
|
|
793
789
|
|
|
794
790
|
if ( object.isBatchedMesh ) {
|
|
795
791
|
|
|
796
|
-
batch( object )
|
|
792
|
+
batch( object );
|
|
797
793
|
|
|
798
794
|
}
|
|
799
795
|
|
|
800
796
|
if ( ( object.isInstancedMesh && object.instanceMatrix && object.instanceMatrix.isInstancedBufferAttribute === true ) ) {
|
|
801
797
|
|
|
802
|
-
instancedMesh( object )
|
|
798
|
+
instancedMesh( object );
|
|
803
799
|
|
|
804
800
|
}
|
|
805
801
|
|
|
@@ -849,16 +845,12 @@ class NodeMaterial extends Material {
|
|
|
849
845
|
|
|
850
846
|
if ( object.instanceColor ) {
|
|
851
847
|
|
|
852
|
-
const instanceColor = varyingProperty( 'vec3', 'vInstanceColor' );
|
|
853
|
-
|
|
854
848
|
colorNode = instanceColor.mul( colorNode );
|
|
855
849
|
|
|
856
850
|
}
|
|
857
851
|
|
|
858
852
|
if ( object.isBatchedMesh && object._colorsTexture ) {
|
|
859
853
|
|
|
860
|
-
const batchColor = varyingProperty( 'vec3', 'vBatchColor' );
|
|
861
|
-
|
|
862
854
|
colorNode = batchColor.mul( colorNode );
|
|
863
855
|
|
|
864
856
|
}
|
|
@@ -994,12 +986,18 @@ class NodeMaterial extends Material {
|
|
|
994
986
|
* Setups the lights node based on the scene, environment and material.
|
|
995
987
|
*
|
|
996
988
|
* @param {NodeBuilder} builder - The current node builder.
|
|
997
|
-
* @return {
|
|
989
|
+
* @return {LightingNode<Array>} The lights node.
|
|
998
990
|
*/
|
|
999
|
-
|
|
991
|
+
setupMaterialLightings( builder ) {
|
|
1000
992
|
|
|
1001
993
|
const materialLightsNode = [];
|
|
1002
994
|
|
|
995
|
+
if ( builder.renderer.lighting.enabled === false ) {
|
|
996
|
+
|
|
997
|
+
return materialLightsNode;
|
|
998
|
+
|
|
999
|
+
}
|
|
1000
|
+
|
|
1003
1001
|
//
|
|
1004
1002
|
|
|
1005
1003
|
const envNode = this.setupEnvironment( builder );
|
|
@@ -1018,23 +1016,45 @@ class NodeMaterial extends Material {
|
|
|
1018
1016
|
|
|
1019
1017
|
}
|
|
1020
1018
|
|
|
1021
|
-
if (
|
|
1022
|
-
|
|
1023
|
-
const aoNode = this.aoNode !== null ? this.aoNode : materialAO;
|
|
1019
|
+
if ( builder.context.ambientOcclusion ) {
|
|
1024
1020
|
|
|
1025
|
-
materialLightsNode.push( new AONode(
|
|
1021
|
+
materialLightsNode.push( new AONode( builder.context.ambientOcclusion ) );
|
|
1026
1022
|
|
|
1027
1023
|
}
|
|
1028
1024
|
|
|
1029
|
-
|
|
1025
|
+
return materialLightsNode;
|
|
1026
|
+
|
|
1027
|
+
}
|
|
1028
|
+
|
|
1029
|
+
/**
|
|
1030
|
+
* Setups the ambient occlusion node from the material.
|
|
1031
|
+
*
|
|
1032
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
1033
|
+
* @return {Node} The ambient occlusion node.
|
|
1034
|
+
*/
|
|
1035
|
+
setupAmbientOcclusion( builder ) {
|
|
1036
|
+
|
|
1037
|
+
let aoNode = this.aoNode;
|
|
1030
1038
|
|
|
1031
|
-
if (
|
|
1039
|
+
if ( aoNode === null && builder.material.aoMap ) {
|
|
1032
1040
|
|
|
1033
|
-
|
|
1041
|
+
aoNode = materialAO;
|
|
1034
1042
|
|
|
1035
1043
|
}
|
|
1036
1044
|
|
|
1037
|
-
|
|
1045
|
+
if ( builder.context.getAO ) {
|
|
1046
|
+
|
|
1047
|
+
aoNode = builder.context.getAO( aoNode, builder );
|
|
1048
|
+
|
|
1049
|
+
}
|
|
1050
|
+
|
|
1051
|
+
if ( aoNode !== null ) {
|
|
1052
|
+
|
|
1053
|
+
ambientOcclusion.assign( aoNode );
|
|
1054
|
+
|
|
1055
|
+
builder.context.ambientOcclusion = ambientOcclusion;
|
|
1056
|
+
|
|
1057
|
+
}
|
|
1038
1058
|
|
|
1039
1059
|
}
|
|
1040
1060
|
|
|
@@ -1067,15 +1087,16 @@ class NodeMaterial extends Material {
|
|
|
1067
1087
|
|
|
1068
1088
|
const lights = this.lights === true || this.lightsNode !== null;
|
|
1069
1089
|
|
|
1070
|
-
const
|
|
1090
|
+
const materialLightings = this.lights === true ? this.setupMaterialLightings( builder ) : [];
|
|
1091
|
+
const lightsNode = lights ? ( this.lightsNode || builder.lightsNode ) : null;
|
|
1071
1092
|
|
|
1072
1093
|
let outgoingLightNode = this.setupOutgoingLight( builder );
|
|
1073
1094
|
|
|
1074
|
-
if ( lightsNode && lightsNode.getScope().hasLights ) {
|
|
1095
|
+
if ( lightsNode && ( materialLightings.length > 0 || lightsNode.getScope().hasLights ) ) {
|
|
1075
1096
|
|
|
1076
1097
|
const lightingModel = this.setupLightingModel( builder ) || null;
|
|
1077
1098
|
|
|
1078
|
-
outgoingLightNode = lightingContext( lightsNode, lightingModel, backdropNode, backdropAlphaNode );
|
|
1099
|
+
outgoingLightNode = lightingContext( lightsNode, lightingModel, materialLightings, backdropNode, backdropAlphaNode );
|
|
1079
1100
|
|
|
1080
1101
|
} else if ( backdropNode !== null ) {
|
|
1081
1102
|
|
|
@@ -1136,6 +1157,26 @@ class NodeMaterial extends Material {
|
|
|
1136
1157
|
/**
|
|
1137
1158
|
* Setups the output node.
|
|
1138
1159
|
*
|
|
1160
|
+
* This method can be implemented by derived materials to extend the functionality
|
|
1161
|
+
* of the material's output or replace it altogether.
|
|
1162
|
+
*
|
|
1163
|
+
* ```js
|
|
1164
|
+
* class ColoredShadowMaterial extends MeshPhongNodeMaterial {
|
|
1165
|
+
* constructor( parameters ) {
|
|
1166
|
+
* super( parameters );
|
|
1167
|
+
* this._shadeColor = uniform( new Color( parameters.shadeColor ?? 0xff0000 ) );
|
|
1168
|
+
* }
|
|
1169
|
+
*
|
|
1170
|
+
* setupOutput( builder, outputNode ) {
|
|
1171
|
+
* // Modify the native output of the MeshPhongNodeMaterial fragment shader
|
|
1172
|
+
* const brightness = min( outputNode.r, 1.0 );
|
|
1173
|
+
* const mixedColor = mix( this._shadeColor, diffuseColor.rgb, brightness );
|
|
1174
|
+
* // Return new output back into NodeMaterial flow
|
|
1175
|
+
* return super.setupOutput( builder, vec4( mixedColor, outputNode.a ) );
|
|
1176
|
+
* }
|
|
1177
|
+
* }
|
|
1178
|
+
* ```
|
|
1179
|
+
*
|
|
1139
1180
|
* @param {NodeBuilder} builder - The current node builder.
|
|
1140
1181
|
* @param {Node<vec4>} outputNode - The existing output node.
|
|
1141
1182
|
* @return {Node<vec4>} The output node.
|
|
@@ -1192,8 +1233,7 @@ class NodeMaterial extends Material {
|
|
|
1192
1233
|
|
|
1193
1234
|
for ( const key in descriptors ) {
|
|
1194
1235
|
|
|
1195
|
-
if ( Object.getOwnPropertyDescriptor( this.constructor.prototype, key ) === undefined &&
|
|
1196
|
-
descriptors[ key ].get !== undefined ) {
|
|
1236
|
+
if ( Object.getOwnPropertyDescriptor( this.constructor.prototype, key ) === undefined && descriptors[ key ].get !== undefined ) {
|
|
1197
1237
|
|
|
1198
1238
|
Object.defineProperty( this.constructor.prototype, key, descriptors[ key ] );
|
|
1199
1239
|
|
|
@@ -1267,41 +1307,65 @@ class NodeMaterial extends Material {
|
|
|
1267
1307
|
}
|
|
1268
1308
|
|
|
1269
1309
|
/**
|
|
1270
|
-
* Copies the properties of the given
|
|
1310
|
+
* Copies the common properties of the given material to this instance.
|
|
1271
1311
|
*
|
|
1272
|
-
* @param {
|
|
1312
|
+
* @param {Material} source - The material to copy.
|
|
1273
1313
|
* @return {NodeMaterial} A reference to this node material.
|
|
1274
1314
|
*/
|
|
1275
1315
|
copy( source ) {
|
|
1276
1316
|
|
|
1277
|
-
|
|
1278
|
-
|
|
1279
|
-
|
|
1317
|
+
const descriptors = Object.getOwnPropertyDescriptors( this.constructor.prototype );
|
|
1318
|
+
|
|
1319
|
+
for ( const property in descriptors ) {
|
|
1280
1320
|
|
|
1281
|
-
|
|
1282
|
-
|
|
1283
|
-
|
|
1284
|
-
|
|
1285
|
-
|
|
1286
|
-
|
|
1287
|
-
|
|
1321
|
+
if ( descriptors[ property ].set !== undefined && source[ property ] !== undefined ) {
|
|
1322
|
+
|
|
1323
|
+
const value = source[ property ];
|
|
1324
|
+
|
|
1325
|
+
if ( this[ property ] && this[ property ].copy !== undefined ) {
|
|
1326
|
+
|
|
1327
|
+
this[ property ].copy( value );
|
|
1328
|
+
|
|
1329
|
+
} else {
|
|
1288
1330
|
|
|
1289
|
-
|
|
1290
|
-
this.geometryNode = source.geometryNode;
|
|
1331
|
+
this[ property ] = value;
|
|
1291
1332
|
|
|
1292
|
-
|
|
1293
|
-
|
|
1294
|
-
|
|
1295
|
-
|
|
1296
|
-
|
|
1333
|
+
}
|
|
1334
|
+
|
|
1335
|
+
}
|
|
1336
|
+
|
|
1337
|
+
}
|
|
1338
|
+
|
|
1339
|
+
for ( const property in this ) {
|
|
1340
|
+
|
|
1341
|
+
// Skip internal/private properties (starting with '_'), flags (starting with 'is' + uppercase),
|
|
1342
|
+
// and properties that are handled separately or should not be copied (id, uuid, version, type, userData, clippingPlanes).
|
|
1343
|
+
|
|
1344
|
+
if ( /^(?:is[A-Z]|_)|^(?:id|uuid|version|type|userData|clippingPlanes)$/.test( property ) ) continue;
|
|
1345
|
+
|
|
1346
|
+
if ( this[ property ] !== undefined && source[ property ] !== undefined ) {
|
|
1347
|
+
|
|
1348
|
+
const value = source[ property ];
|
|
1349
|
+
|
|
1350
|
+
if ( this[ property ] && this[ property ].copy !== undefined ) {
|
|
1351
|
+
|
|
1352
|
+
this[ property ].copy( value );
|
|
1353
|
+
|
|
1354
|
+
} else {
|
|
1355
|
+
|
|
1356
|
+
this[ property ] = value;
|
|
1357
|
+
|
|
1358
|
+
}
|
|
1359
|
+
|
|
1360
|
+
}
|
|
1361
|
+
|
|
1362
|
+
}
|
|
1297
1363
|
|
|
1298
|
-
this.
|
|
1299
|
-
this.mrtNode = source.mrtNode;
|
|
1364
|
+
this.clippingPlanes = source.clippingPlanes ? source.clippingPlanes.map( ( plane ) => plane.clone() ) : null;
|
|
1300
1365
|
|
|
1301
|
-
this.
|
|
1302
|
-
this.vertexNode = source.vertexNode;
|
|
1366
|
+
this.userData = JSON.parse( JSON.stringify( source.userData ) );
|
|
1303
1367
|
|
|
1304
|
-
return
|
|
1368
|
+
return this;
|
|
1305
1369
|
|
|
1306
1370
|
}
|
|
1307
1371
|
|
|
@@ -148,16 +148,6 @@ class SpriteNodeMaterial extends NodeMaterial {
|
|
|
148
148
|
|
|
149
149
|
}
|
|
150
150
|
|
|
151
|
-
copy( source ) {
|
|
152
|
-
|
|
153
|
-
this.positionNode = source.positionNode;
|
|
154
|
-
this.rotationNode = source.rotationNode;
|
|
155
|
-
this.scaleNode = source.scaleNode;
|
|
156
|
-
|
|
157
|
-
return super.copy( source );
|
|
158
|
-
|
|
159
|
-
}
|
|
160
|
-
|
|
161
151
|
/**
|
|
162
152
|
* Whether to use size attenuation or not.
|
|
163
153
|
*
|