@unikia/upe-renderer 0.186.110 → 0.187.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -7
- package/UPSTREAM.md +4 -4
- package/build/three.core.js +853 -277
- package/build/three.module.js +1098 -1280
- package/build/three.tsl.js +41938 -686
- package/build/three.webgpu.js +10604 -49055
- package/build/three.webgpu.nodes.js +9249 -5788
- package/examples/jsm/Addons.js +2 -0
- package/examples/jsm/animation/CCDIKSolver.js +17 -5
- package/examples/jsm/controls/FirstPersonControls.js +1 -1
- package/examples/jsm/controls/OrbitControls.js +27 -14
- package/examples/jsm/csm/CSMShader.js +74 -3
- package/examples/jsm/curves/CurveExtras.js +4 -4
- package/examples/jsm/curves/NURBSCurve.js +14 -0
- package/examples/jsm/exporters/EXRExporter.js +673 -16
- package/examples/jsm/exporters/GLTFExporter.js +4 -4
- package/examples/jsm/exporters/KTX2Exporter.js +1 -1
- package/examples/jsm/exporters/OBJExporter.js +48 -5
- package/examples/jsm/exporters/PLYExporter.js +22 -11
- package/examples/jsm/generators/CityGenerator.js +3 -2
- package/examples/jsm/generators/city/SkyscraperGenerator.js +63 -21
- package/examples/jsm/gpgpu/BitonicSort.js +30 -23
- package/examples/jsm/helpers/VertexTangentsHelper.js +1 -1
- package/examples/jsm/inspector/Extension.js +1 -1
- package/examples/jsm/inspector/Inspector.js +6 -46
- package/examples/jsm/inspector/RendererInspector.js +43 -8
- package/examples/jsm/inspector/Storage.js +49 -0
- package/examples/jsm/inspector/extensions/color-grading/ColorGrading.js +32 -27
- package/examples/jsm/inspector/tabs/Parameters.js +5 -1
- package/examples/jsm/inspector/tabs/Performance.js +22 -7
- package/examples/jsm/inspector/tabs/Settings.js +1 -1
- package/examples/jsm/inspector/tabs/Timeline.js +83 -7
- package/examples/jsm/inspector/tabs/Viewer.js +25 -10
- package/examples/jsm/inspector/ui/Profiler.js +1 -1
- package/examples/jsm/inspector/ui/Style.js +21 -53
- package/examples/jsm/inspector/ui/Values.js +28 -3
- package/examples/jsm/libs/fflate.module.js +83 -56
- package/examples/jsm/libs/mikktspace.README.md +27 -0
- package/examples/jsm/libs/mikktspace.module.js +721 -109
- package/examples/jsm/lighting/ClusteredLighting.js +100 -2
- package/examples/jsm/lighting/LightMapper.js +295 -0
- package/examples/jsm/lighting/LightProbeGrid.js +242 -139
- package/examples/jsm/lighting/LightProbeGridWebGL.js +30 -14
- package/examples/jsm/lighting/vxgi/VXGIConeTracer.js +54 -5
- package/examples/jsm/lighting/vxgi/VXGIIrradiance.js +43 -0
- package/examples/jsm/lighting/vxgi/VXGINode.js +13 -56
- package/examples/jsm/lighting/vxgi/VXGISceneCollector.js +316 -1
- package/examples/jsm/lighting/vxgi/VXGIVolume.js +69 -59
- package/examples/jsm/lights/SunLight.js +9 -4
- package/examples/jsm/lights/SunLightNode.js +3 -3
- package/examples/jsm/lines/LineMaterial.js +26 -10
- package/examples/jsm/loaders/3DMLoader.js +10 -1
- package/examples/jsm/loaders/3MFLoader.js +5 -1
- package/examples/jsm/loaders/AMFLoader.js +2 -0
- package/examples/jsm/loaders/BVHLoader.js +2 -0
- package/examples/jsm/loaders/ColladaLoader.js +8 -0
- package/examples/jsm/loaders/DDSLoader.js +1 -1
- package/examples/jsm/loaders/DRACOLoader.js +5 -1
- package/examples/jsm/loaders/EXRLoader.js +120 -104
- package/examples/jsm/loaders/FBXLoader.js +4 -0
- package/examples/jsm/loaders/FontLoader.js +2 -0
- package/examples/jsm/loaders/GCodeLoader.js +5 -9
- package/examples/jsm/loaders/GLTFLoader.js +112 -31
- package/examples/jsm/loaders/GaussianSplatPLYLoader.js +2 -0
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +3 -0
- package/examples/jsm/loaders/IESLoader.js +46 -12
- package/examples/jsm/loaders/JXLLoader.js +159 -0
- package/examples/jsm/loaders/KMZLoader.js +6 -0
- package/examples/jsm/loaders/KSPLATLoader.js +2 -0
- package/examples/jsm/loaders/KTX2Loader.js +49 -4
- package/examples/jsm/loaders/KTXLoader.js +5 -3
- package/examples/jsm/loaders/LDrawLoader.js +15 -22
- package/examples/jsm/loaders/LUT3dlLoader.js +5 -1
- package/examples/jsm/loaders/LUTCubeLoader.js +6 -2
- package/examples/jsm/loaders/LUTImageLoader.js +2 -0
- package/examples/jsm/loaders/LWOLoader.js +6 -0
- package/examples/jsm/loaders/MD2Loader.js +2 -0
- package/examples/jsm/loaders/MDDLoader.js +4 -0
- package/examples/jsm/loaders/MTLLoader.js +8 -0
- package/examples/jsm/loaders/MaterialXLoader.js +57 -5
- package/examples/jsm/loaders/NRRDLoader.js +4 -2
- package/examples/jsm/loaders/OBJLoader.js +10 -4
- package/examples/jsm/loaders/PCDLoader.js +6 -2
- package/examples/jsm/loaders/PDBLoader.js +5 -3
- package/examples/jsm/loaders/PLYLoader.js +39 -15
- package/examples/jsm/loaders/PVRLoader.js +2 -2
- package/examples/jsm/loaders/SPLATLoader.js +2 -0
- package/examples/jsm/loaders/SPZLoader.js +2 -0
- package/examples/jsm/loaders/STLLoader.js +3 -1
- package/examples/jsm/loaders/SVGLoader.js +27 -49
- package/examples/jsm/loaders/TDSLoader.js +4 -0
- package/examples/jsm/loaders/TGALoader.js +6 -5
- package/examples/jsm/loaders/TTFLoader.js +2 -0
- package/examples/jsm/loaders/USDLoader.js +14 -0
- package/examples/jsm/loaders/UltraHDRLoader.js +2 -0
- package/examples/jsm/loaders/VOXLoader.js +3 -0
- package/examples/jsm/loaders/VRMLLoader.js +4 -0
- package/examples/jsm/loaders/VTKLoader.js +2 -0
- package/examples/jsm/loaders/XYZLoader.js +2 -0
- package/examples/jsm/loaders/collada/ColladaComposer.js +15 -8
- package/examples/jsm/loaders/materialx/MaterialXDocument.js +610 -138
- package/examples/jsm/loaders/materialx/MaterialXInterfaceValidation.js +12 -95
- package/examples/jsm/loaders/materialx/MaterialXLog.js +4 -0
- package/examples/jsm/loaders/materialx/MaterialXNodeDefs.js +99 -0
- package/examples/jsm/loaders/materialx/MaterialXNodeInterfaceRegistry.js +760 -1
- package/examples/jsm/loaders/materialx/MaterialXNodeLibrary.js +222 -372
- package/examples/jsm/loaders/materialx/MaterialXSurfaceMappings.js +163 -259
- package/examples/jsm/loaders/materialx/MaterialXUtils.js +25 -0
- package/examples/jsm/loaders/materialx/compile/MaterialXCompileRegistry.js +161 -159
- package/examples/jsm/loaders/usd/USDAParser.js +56 -47
- package/examples/jsm/loaders/usd/USDComposer.js +25 -30
- package/examples/jsm/math/ColorConverter.js +7 -3
- package/examples/jsm/math/Lut.js +2 -2
- package/examples/jsm/math/OBB.js +3 -3
- package/examples/jsm/math/Octree.js +20 -17
- package/examples/jsm/objects/GaussianSplat.js +5 -4
- package/examples/jsm/objects/Reflector.js +5 -0
- package/examples/jsm/objects/SkyMesh.js +14 -7
- package/examples/jsm/objects/Water2Mesh.js +2 -2
- package/examples/jsm/physics/RapierPhysics.js +2 -2
- package/examples/jsm/pipelines/MeshletDrawingPipeline.js +5571 -0
- package/examples/jsm/pipelines/VisibilityBufferDrawingPipeline.js +954 -0
- package/examples/jsm/postprocessing/BokehPass.js +1 -1
- package/examples/jsm/postprocessing/GTAOPass.js +26 -18
- package/examples/jsm/renderers/SVGRenderer.js +3 -2
- package/examples/jsm/shaders/GTAOShader.js +7 -4
- package/examples/jsm/shaders/PoissonDenoiseShader.js +1 -10
- package/examples/jsm/tsl/WebGLNodesHandler.js +21 -9
- package/examples/jsm/tsl/display/AfterImageNode.js +3 -3
- package/examples/jsm/tsl/display/BilateralBlurNode.js +3 -3
- package/examples/jsm/tsl/display/BloomNode.js +3 -3
- package/examples/jsm/tsl/display/ChromaticAberrationNode.js +8 -19
- package/examples/jsm/tsl/display/DenoiseNode.js +5 -5
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +3 -3
- package/examples/jsm/tsl/display/DotScreenNode.js +3 -3
- package/examples/jsm/tsl/display/FSR1Node.js +3 -3
- package/examples/jsm/tsl/display/FXAANode.js +3 -10
- package/examples/jsm/tsl/display/FilmNode.js +3 -3
- package/examples/jsm/tsl/display/GTAONode.js +33 -25
- package/examples/jsm/tsl/display/GaussianBlurNode.js +3 -3
- package/examples/jsm/tsl/display/GodraysNode.js +5 -19
- package/examples/jsm/tsl/display/ImportanceSampledEnvironment.js +8 -4
- package/examples/jsm/tsl/display/LensflareNode.js +3 -3
- package/examples/jsm/tsl/display/Lut3DNode.js +3 -3
- package/examples/jsm/tsl/display/OITPassNode.js +0 -11
- package/examples/jsm/tsl/display/OutlineNode.js +107 -5
- package/examples/jsm/tsl/display/PixelationPassNode.js +85 -193
- package/examples/jsm/tsl/display/RGBShiftNode.js +3 -3
- package/examples/jsm/tsl/display/RecurrentDenoiseNode.js +23 -126
- package/examples/jsm/tsl/display/SMAANode.js +3 -3
- package/examples/jsm/tsl/display/SSAONode.js +6 -20
- package/examples/jsm/tsl/display/SSGINode.js +36 -29
- package/examples/jsm/tsl/display/SSRNode.js +135 -63
- package/examples/jsm/tsl/display/SSSNode.js +6 -20
- package/examples/jsm/tsl/display/SharpenNode.js +3 -3
- package/examples/jsm/tsl/display/SobelOperatorNode.js +3 -3
- package/examples/jsm/tsl/display/TAAUNode.js +10 -42
- package/examples/jsm/tsl/display/TRAANode.js +11 -43
- package/examples/jsm/tsl/display/TemporalReprojectNode.js +42 -47
- package/examples/jsm/tsl/display/TransitionNode.js +3 -3
- package/examples/jsm/tsl/display/lensDirt.js +30 -0
- package/examples/jsm/tsl/lighting/ClusteredLightsNode.js +482 -121
- package/examples/jsm/tsl/lighting/DynamicLightsNode.js +41 -140
- package/examples/jsm/tsl/lighting/LightProbeGridNode.js +72 -25
- package/examples/jsm/tsl/lighting/data/AmbientLightDataNode.js +6 -0
- package/examples/jsm/tsl/lighting/data/DirectionalLightDataNode.js +6 -0
- package/examples/jsm/tsl/lighting/data/HemisphereLightDataNode.js +6 -0
- package/examples/jsm/tsl/lighting/data/PointLightDataNode.js +6 -0
- package/examples/jsm/tsl/lighting/data/SpotLightDataNode.js +6 -0
- package/examples/jsm/tsl/shadows/TileShadowNode.js +102 -14
- package/examples/jsm/tsl/utils/Raymarching.js +1 -1
- package/examples/jsm/tsl/utils/SoftParticles.js +5 -12
- package/examples/jsm/tsl/utils/SpecularHelpers.js +47 -70
- package/examples/jsm/tsl/utils/TAAUtils.js +6 -17
- package/examples/jsm/utils/BufferGeometryUtils.js +110 -88
- package/examples/jsm/utils/MeshletGeometryUtils.js +417 -0
- package/examples/jsm/utils/SceneOptimizer.js +2 -1
- package/examples/jsm/utils/SceneUtils.js +1 -1
- package/examples/jsm/utils/unwrapUVs.js +865 -0
- package/examples/jsm/webxr/XREstimatedLight.js +11 -4
- package/package.json +3 -3
- package/src/Three.TSL.js +2 -683
- package/src/Three.WebGPU.Nodes.js +2 -1
- package/src/Three.WebGPU.js +2 -1
- package/src/animation/AnimationAction.js +1 -1
- package/src/animation/AnimationUtils.js +1 -3
- package/src/animation/KeyframeTrack.js +19 -0
- package/src/cameras/ArrayCamera.js +12 -0
- package/src/cameras/CubeCamera.js +3 -3
- package/src/constants.js +1 -9
- package/src/core/BufferAttribute.js +57 -21
- package/src/core/BufferGeometry.js +5 -13
- package/src/core/Clock.js +1 -1
- package/src/core/InterleavedBuffer.js +28 -18
- package/src/core/InterleavedBufferAttribute.js +54 -20
- package/src/core/Object3D.js +19 -9
- package/src/core/Raycaster.js +2 -0
- package/src/core/RenderTarget.js +11 -5
- package/src/core/UniformsGroup.js +7 -3
- package/src/extras/PMREMGenerator.js +392 -685
- package/src/extras/core/Curve.js +4 -0
- package/src/extras/core/CurvePath.js +13 -0
- package/src/extras/core/ShapePath.js +1 -1
- package/src/geometries/EdgesGeometry.js +12 -10
- package/src/geometries/LatheGeometry.js +2 -0
- package/src/helpers/PolarGridHelper.js +1 -1
- package/src/lights/Light.js +11 -0
- package/src/lights/LightProbe.js +2 -0
- package/src/lights/LightShadow.js +2 -0
- package/src/loaders/AnimationLoader.js +2 -0
- package/src/loaders/AudioLoader.js +2 -0
- package/src/loaders/BufferGeometryLoader.js +2 -0
- package/src/loaders/CompressedTextureLoader.js +2 -0
- package/src/loaders/CubeTextureLoader.js +2 -0
- package/src/loaders/DataTextureLoader.js +2 -0
- package/src/loaders/FileLoader.js +2 -0
- package/src/loaders/ImageBitmapLoader.js +3 -1
- package/src/loaders/ImageLoader.js +1 -0
- package/src/loaders/Loader.js +47 -0
- package/src/loaders/MaterialLoader.js +2 -0
- package/src/loaders/ObjectLoader.js +27 -8
- package/src/loaders/TextureLoader.js +5 -3
- package/src/loaders/nodes/NodeLoader.js +2 -0
- package/src/materials/Material.js +21 -2
- package/src/materials/MeshDepthMaterial.js +1 -1
- package/src/materials/MeshDistanceMaterial.js +1 -1
- package/src/materials/MeshLambertMaterial.js +1 -1
- package/src/materials/MeshMatcapMaterial.js +1 -1
- package/src/materials/MeshNormalMaterial.js +1 -1
- package/src/materials/MeshPhongMaterial.js +1 -1
- package/src/materials/MeshPhysicalMaterial.js +90 -11
- package/src/materials/MeshStandardMaterial.js +1 -1
- package/src/materials/MeshToonMaterial.js +1 -1
- package/src/materials/nodes/Line2NodeMaterial.js +32 -10
- package/src/materials/nodes/MeshLambertNodeMaterial.js +13 -0
- package/src/materials/nodes/MeshPhongNodeMaterial.js +13 -0
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +40 -5
- package/src/materials/nodes/MeshToonNodeMaterial.js +13 -0
- package/src/materials/nodes/NodeMaterial.js +36 -16
- package/src/materials/nodes/NodeMaterialInstance.js +193 -0
- package/src/materials/nodes/NodeMaterials.js +1 -0
- package/src/materials/nodes/PointsNodeMaterial.js +1 -1
- package/src/materials/nodes/SpriteNodeMaterial.js +3 -3
- package/src/materials/nodes/manager/NodeMaterialObserver.js +191 -22
- package/src/math/Box3.js +2 -2
- package/src/math/Color.js +8 -8
- package/src/math/ColorManagement.js +2 -21
- package/src/math/FrustumArray.js +12 -0
- package/src/math/Interpolant.js +1 -1
- package/src/math/Line3.js +2 -4
- package/src/math/MathUtils.js +33 -46
- package/src/math/Matrix2.js +1 -1
- package/src/math/Matrix3.js +1 -1
- package/src/math/Matrix4.js +1 -1
- package/src/math/Triangle.js +2 -1
- package/src/math/Vector2.js +1 -1
- package/src/math/Vector3.js +1 -1
- package/src/math/Vector4.js +1 -1
- package/src/nodes/Nodes.js +1 -0
- package/src/nodes/TSL.js +2 -0
- package/src/nodes/accessors/Arrays.js +1 -1
- package/src/nodes/accessors/Batch.js +29 -23
- package/src/nodes/accessors/BufferAttributeNode.js +21 -1
- package/src/nodes/accessors/BuiltinNode.js +6 -0
- package/src/nodes/accessors/Camera.js +100 -93
- package/src/nodes/accessors/ClippingNode.js +17 -6
- package/src/nodes/accessors/CubeTextureNode.js +12 -24
- package/src/nodes/accessors/Instance.js +198 -160
- package/src/nodes/accessors/Lights.js +19 -6
- package/src/nodes/accessors/MaterialNode.js +33 -4
- package/src/nodes/accessors/Morph.js +81 -22
- package/src/nodes/accessors/Normal.js +0 -42
- package/src/nodes/accessors/Object3DNode.js +6 -0
- package/src/nodes/accessors/PointUVNode.js +6 -0
- package/src/nodes/accessors/ReferenceAttributeNode.js +279 -0
- package/src/nodes/accessors/ReferenceBaseNode.js +6 -0
- package/src/nodes/accessors/ReferenceNode.js +6 -0
- package/src/nodes/accessors/Skinning.js +57 -52
- package/src/nodes/accessors/StorageBufferNode.js +3 -12
- package/src/nodes/accessors/TextureBicubic.js +30 -27
- package/src/nodes/accessors/TextureNode.js +164 -78
- package/src/nodes/accessors/TextureSizeNode.js +6 -0
- package/src/nodes/accessors/UniformArrayNode.js +8 -15
- package/src/nodes/accessors/VelocityNode.js +13 -8
- package/src/nodes/code/CodeNode.js +6 -0
- package/src/nodes/code/ExpressionNode.js +6 -0
- package/src/nodes/code/FunctionCallNode.js +3 -3
- package/src/nodes/code/FunctionNode.js +15 -13
- package/src/nodes/core/ArrayNode.js +3 -3
- package/src/nodes/core/AssignNode.js +10 -9
- package/src/nodes/core/AttributeNode.js +39 -0
- package/src/nodes/core/BypassNode.js +6 -0
- package/src/nodes/core/ConstNode.js +31 -1
- package/src/nodes/core/ContextNode.js +11 -6
- package/src/nodes/core/IndexNode.js +6 -0
- package/src/nodes/core/InputNode.js +6 -0
- package/src/nodes/core/InspectorNode.js +17 -31
- package/src/nodes/core/IsolateNode.js +8 -0
- package/src/nodes/core/Node.js +367 -67
- package/src/nodes/core/NodeBuilder.js +664 -222
- package/src/nodes/core/NodeUtils.js +25 -0
- package/src/nodes/core/NodeVar.js +10 -1
- package/src/nodes/core/OutputStructNode.js +6 -0
- package/src/nodes/core/OverrideContextNode.js +38 -37
- package/src/nodes/core/PropertyNode.js +14 -0
- package/src/nodes/core/StackNode.js +33 -21
- package/src/nodes/core/StructNode.js +6 -0
- package/src/nodes/core/StructTypeNode.js +6 -0
- package/src/nodes/core/SubBuildNode.js +8 -0
- package/src/nodes/core/TempNode.js +10 -35
- package/src/nodes/core/UniformGroupNode.js +6 -0
- package/src/nodes/core/VarNode.js +43 -135
- package/src/nodes/core/VaryingNode.js +33 -2
- package/src/nodes/display/BlendModes.js +5 -40
- package/src/nodes/display/BumpMapNode.js +17 -7
- package/src/nodes/display/ColorAdjustment.js +22 -10
- package/src/nodes/display/ColorSpaceFunctions.js +2 -14
- package/src/nodes/display/ColorSpaceNode.js +3 -3
- package/src/nodes/display/FrontFacingNode.js +6 -0
- package/src/nodes/display/NormalMapNode.js +3 -3
- package/src/nodes/display/PassNode.js +75 -16
- package/src/nodes/display/RenderOutputNode.js +22 -5
- package/src/nodes/display/ScreenNode.js +6 -0
- package/src/nodes/display/ToneMappingFunctions.js +9 -51
- package/src/nodes/display/ToneMappingNode.js +3 -3
- package/src/nodes/display/ToonOutlinePassNode.js +66 -2
- package/src/nodes/display/ViewportDepthNode.js +34 -4
- package/src/nodes/functions/BSDF/BRDF_EON.js +65 -0
- package/src/nodes/functions/BSDF/BRDF_GGX.js +5 -3
- package/src/nodes/functions/BSDF/BRDF_Sheen.js +2 -16
- package/src/nodes/functions/BSDF/D_GGX.js +1 -8
- package/src/nodes/functions/BSDF/D_GGX_Anisotropic.js +7 -10
- package/src/nodes/functions/BSDF/LTC.js +20 -47
- package/src/nodes/functions/BSDF/Schlick_to_F0.js +1 -9
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +1 -9
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +10 -13
- package/src/nodes/functions/PhysicalLightingModel.js +84 -51
- package/src/nodes/functions/VolumetricLightingModel.js +1 -1
- package/src/nodes/functions/material/getAlphaHashThreshold.js +3 -9
- package/src/nodes/functions/material/getParallaxCorrectNormal.js +10 -11
- package/src/nodes/functions/material/getRoughness.js +3 -1
- package/src/nodes/geometry/RangeNode.js +52 -69
- package/src/nodes/gpgpu/AtomicFunctionNode.js +11 -6
- package/src/nodes/gpgpu/BarrierNode.js +6 -0
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +6 -0
- package/src/nodes/gpgpu/ComputeNode.js +6 -0
- package/src/nodes/gpgpu/SubgroupFunctionNode.js +38 -29
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +6 -0
- package/src/nodes/lighting/AnalyticLightNode.js +7 -14
- package/src/nodes/lighting/BasicEnvironmentNode.js +5 -1
- package/src/nodes/lighting/EnvironmentNode.js +58 -8
- package/src/nodes/lighting/IESSpotLightNode.js +19 -4
- package/src/nodes/lighting/LightProbeNode.js +2 -1
- package/src/nodes/lighting/LightUtils.js +2 -2
- package/src/nodes/lighting/LightingNode.js +6 -0
- package/src/nodes/lighting/LightsNode.js +26 -32
- package/src/nodes/lighting/PointShadowNode.js +92 -48
- package/src/nodes/lighting/ProjectorLightNode.js +1 -1
- package/src/nodes/lighting/RectAreaLightNode.js +13 -14
- package/src/nodes/lighting/ShadowBaseNode.js +9 -17
- package/src/nodes/lighting/ShadowFilterNode.js +26 -3
- package/src/nodes/lighting/ShadowNode.js +13 -11
- package/src/nodes/materialx/MaterialXColor.js +2 -14
- package/src/nodes/materialx/MaterialXColorTransform.js +1 -7
- package/src/nodes/materialx/MaterialXNodes.js +8 -11
- package/src/nodes/materialx/MaterialXNoise.js +195 -454
- package/src/nodes/math/BitcastNode.js +5 -5
- package/src/nodes/math/BitcountNode.js +18 -46
- package/src/nodes/math/ConditionalNode.js +92 -22
- package/src/nodes/math/Hash.js +1 -1
- package/src/nodes/math/MathNode.js +86 -64
- package/src/nodes/math/MathUtils.js +2 -2
- package/src/nodes/math/OperatorNode.js +42 -59
- package/src/nodes/math/PackFloatNode.js +9 -9
- package/src/nodes/math/Packed4x8IntegerNode.js +20 -52
- package/src/nodes/math/TriNoise3D.js +3 -23
- package/src/nodes/math/UnpackFloatNode.js +9 -9
- package/src/nodes/pmrem/PMREMNode.js +38 -75
- package/src/nodes/pmrem/PMREMUtils.js +108 -272
- package/src/nodes/procedural/Checker.js +1 -1
- package/src/nodes/tsl/TSLCore.js +199 -74
- package/src/nodes/utils/ArrayElementNode.js +19 -1
- package/src/nodes/utils/CubeMapNode.js +3 -3
- package/src/nodes/utils/DebugNode.js +2 -2
- package/src/nodes/utils/EventNode.js +6 -0
- package/src/nodes/utils/FlipNode.js +3 -3
- package/src/nodes/utils/FunctionOverloadingNode.js +7 -1
- package/src/nodes/utils/JoinNode.js +3 -3
- package/src/nodes/utils/LoopNode.js +14 -9
- package/src/nodes/utils/MemberNode.js +18 -0
- package/src/nodes/utils/PostProcessingUtils.js +20 -25
- package/src/nodes/utils/RTTNode.js +2 -0
- package/src/nodes/utils/ReflectorNode.js +24 -0
- package/src/nodes/utils/RotateNode.js +3 -3
- package/src/nodes/utils/SampleNode.js +6 -0
- package/src/nodes/utils/SetNode.js +3 -3
- package/src/nodes/utils/SplitNode.js +6 -0
- package/src/nodes/utils/UVUtils.js +2 -2
- package/src/objects/BatchedMesh.js +146 -15
- package/src/objects/InstancedMesh.js +12 -4
- package/src/objects/Line.js +20 -0
- package/src/objects/Mesh.js +8 -0
- package/src/objects/Points.js +20 -0
- package/src/objects/Skeleton.js +26 -0
- package/src/objects/SkinnedMesh.js +3 -3
- package/src/objects/Sprite.js +10 -0
- package/src/renderers/WebGLRenderer.js +104 -70
- package/src/renderers/common/Animation.js +5 -1
- package/src/renderers/common/Attributes.js +67 -57
- package/src/renderers/common/Backend.js +78 -3
- package/src/renderers/common/BindGroup.js +11 -0
- package/src/renderers/common/Binding.js +0 -11
- package/src/renderers/common/Bindings.js +116 -10
- package/src/renderers/common/Buffer.js +1 -1
- package/src/renderers/common/ClippingContext.js +12 -1
- package/src/renderers/common/ComputePipeline.js +17 -1
- package/src/renderers/common/DirectRenderPipeline.js +7 -3
- package/src/renderers/common/Geometries.js +170 -132
- package/src/renderers/common/Info.js +1 -1
- package/src/renderers/common/InspectorBase.js +5 -5
- package/src/renderers/common/Lighting.js +59 -0
- package/src/renderers/common/Pipelines.js +26 -12
- package/src/renderers/common/ProgrammableStage.js +1 -17
- package/src/renderers/common/RenderContext.js +21 -0
- package/src/renderers/common/RenderContexts.js +13 -4
- package/src/renderers/common/RenderObject.js +111 -35
- package/src/renderers/common/RenderObjects.js +37 -19
- package/src/renderers/common/Renderer.js +537 -295
- package/src/renderers/common/RendererUtils.js +15 -0
- package/src/renderers/common/StandardDrawingPipeline.js +343 -0
- package/src/renderers/common/Storage3DTexture.js +11 -0
- package/src/renderers/common/StorageArrayTexture.js +10 -0
- package/src/renderers/common/StorageTexture.js +0 -9
- package/src/renderers/common/Textures.js +144 -37
- package/src/renderers/common/UniformsGroup.js +19 -0
- package/src/renderers/common/XRManager.js +10 -91
- package/src/renderers/common/extras/PMREMGenerator.js +298 -576
- package/src/renderers/common/nodes/NodeBuilderState.js +7 -5
- package/src/renderers/common/nodes/NodeLibrary.js +11 -35
- package/src/renderers/common/nodes/NodeManager.js +80 -31
- package/src/renderers/common/nodes/NodeSampledTexture.js +14 -0
- package/src/renderers/common/nodes/NodeSampler.js +14 -0
- package/src/renderers/common/nodes/NodeStorageBuffer.js +1 -1
- package/src/renderers/common/nodes/NodeUniformBuffer.js +1 -14
- package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +13 -4
- package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +8 -8
- package/src/renderers/shaders/ShaderChunk/lightprobes_pars_fragment.glsl.js +23 -11
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +21 -2
- package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +18 -2
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +104 -7
- package/src/renderers/shaders/ShaderChunk/morphcolor_vertex.glsl.js +11 -2
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +36 -20
- package/src/renderers/shaders/ShaderChunk/uv_pars_fragment.glsl.js +5 -0
- package/src/renderers/shaders/ShaderChunk/uv_pars_vertex.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk/uv_vertex.glsl.js +5 -0
- package/src/renderers/shaders/ShaderChunk.js +0 -2
- package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +4 -18
- package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +0 -1
- package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +0 -1
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +8 -1
- package/src/renderers/shaders/ShaderLib.js +3 -0
- package/src/renderers/shaders/UniformsLib.js +4 -5
- package/src/renderers/webgl/WebGLBackground.js +3 -3
- package/src/renderers/webgl/WebGLBindingStates.js +4 -2
- package/src/renderers/webgl/WebGLCapabilities.js +7 -1
- package/src/renderers/webgl/WebGLEnvironments.js +2 -2
- package/src/renderers/webgl/WebGLGeometries.js +42 -14
- package/src/renderers/webgl/WebGLMaterials.js +15 -2
- package/src/renderers/webgl/WebGLOutput.js +37 -1
- package/src/renderers/webgl/WebGLProgram.js +13 -54
- package/src/renderers/webgl/WebGLPrograms.js +22 -8
- package/src/renderers/webgl/WebGLRenderStates.js +11 -8
- package/src/renderers/webgl/WebGLShadowMap.js +6 -4
- package/src/renderers/webgl/WebGLState.js +10 -6
- package/src/renderers/webgl/WebGLTextures.js +129 -77
- package/src/renderers/webgl/WebGLUniforms.js +44 -6
- package/src/renderers/webgl/WebGLUniformsGroups.js +75 -69
- package/src/renderers/webgl-fallback/WebGLBackend.js +206 -278
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +154 -20
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +45 -42
- package/src/renderers/webgl-fallback/utils/WebGLState.js +29 -4
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +129 -49
- package/src/renderers/webgl-fallback/utils/WebGLVertexArrayUtils.js +346 -0
- package/src/renderers/webgpu/WebGPUBackend.js +140 -82
- package/src/renderers/webgpu/WebGPURenderer.js +1 -1
- package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +10 -10
- package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +10 -10
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +135 -60
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +128 -55
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +1 -1
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +15 -12
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +55 -19
- package/src/renderers/webgpu/utils/WebGPUUtils.js +20 -3
- package/src/renderers/webxr/WebXRController.js +3 -3
- package/src/renderers/webxr/WebXRManager.js +5 -90
- package/src/scenes/Scene.js +4 -4
- package/src/textures/CompressedTexture.js +2 -2
- package/src/textures/DepthTexture.js +2 -2
- package/src/textures/FramebufferTexture.js +11 -0
- package/src/textures/Texture.js +29 -1
- package/src/textures/TextureSource.js +1 -1
- package/src/upe.js +1 -1
- package/src/utils.js +4 -4
- package/examples/jsm/libs/surfaceNet.js +0 -201
- package/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js +0 -186
|
@@ -2,6 +2,7 @@ import { Vector2 } from '../math/Vector2.js';
|
|
|
2
2
|
import { MeshStandardMaterial } from './MeshStandardMaterial.js';
|
|
3
3
|
import { Color } from '../math/Color.js';
|
|
4
4
|
import { clamp } from '../math/MathUtils.js';
|
|
5
|
+
import { warnOnce } from '../utils.js';
|
|
5
6
|
|
|
6
7
|
/**
|
|
7
8
|
* An extension of the {@link MeshStandardMaterial}, providing more advanced
|
|
@@ -12,6 +13,8 @@ import { clamp } from '../math/MathUtils.js';
|
|
|
12
13
|
* - Clearcoat: Some materials — like car paints, carbon fiber, and wet surfaces — require
|
|
13
14
|
* a clear, reflective layer on top of another layer that may be irregular or rough.
|
|
14
15
|
* Clearcoat approximates this effect, without the need for a separate transparent surface.
|
|
16
|
+
* - Diffuse roughness: Produces the flatter appearance and enhanced backscattering of
|
|
17
|
+
* rough diffuse surfaces such as clay, concrete, and unpolished materials.
|
|
15
18
|
* - Iridescence: Allows to render the effect where hue varies depending on the viewing
|
|
16
19
|
* angle and illumination angle. This can be seen on soap bubbles, oil films, or on the
|
|
17
20
|
* wings of many insects.
|
|
@@ -70,7 +73,7 @@ class MeshPhysicalMaterial extends MeshStandardMaterial {
|
|
|
70
73
|
* property provides additional rotation to the vectors in the texture.
|
|
71
74
|
*
|
|
72
75
|
* @type {number}
|
|
73
|
-
* @default
|
|
76
|
+
* @default 0
|
|
74
77
|
*/
|
|
75
78
|
this.anisotropyRotation = 0;
|
|
76
79
|
|
|
@@ -139,6 +142,18 @@ class MeshPhysicalMaterial extends MeshStandardMaterial {
|
|
|
139
142
|
*/
|
|
140
143
|
this.clearcoatNormalMap = null;
|
|
141
144
|
|
|
145
|
+
/**
|
|
146
|
+
* The red channel of this texture is multiplied against `diffuseRoughness`,
|
|
147
|
+
* for per-pixel control over the diffuse roughness.
|
|
148
|
+
*
|
|
149
|
+
* `diffuseRoughnessMap` represents non-color data. Any texture assigned must have
|
|
150
|
+
* `texture.colorSpace = NoColorSpace` (default).
|
|
151
|
+
*
|
|
152
|
+
* @type {?Texture}
|
|
153
|
+
* @default null
|
|
154
|
+
*/
|
|
155
|
+
this.diffuseRoughnessMap = null;
|
|
156
|
+
|
|
142
157
|
/**
|
|
143
158
|
* Index-of-refraction for non-metallic materials, from `1.0` to `2.333`.
|
|
144
159
|
*
|
|
@@ -193,20 +208,29 @@ class MeshPhysicalMaterial extends MeshStandardMaterial {
|
|
|
193
208
|
this.iridescenceIOR = 1.3;
|
|
194
209
|
|
|
195
210
|
/**
|
|
196
|
-
*
|
|
197
|
-
|
|
211
|
+
* The minimum thickness of the iridescence layer in nanometers.
|
|
212
|
+
*
|
|
213
|
+
* @type {number}
|
|
214
|
+
* @default 100
|
|
215
|
+
*/
|
|
216
|
+
this.iridescenceThicknessMinimum = 100;
|
|
217
|
+
|
|
218
|
+
/**
|
|
219
|
+
* The maximum thickness of the iridescence layer in nanometers. If no
|
|
220
|
+
* `iridescenceThicknessMap` is defined, this value is used as the thickness.
|
|
198
221
|
*
|
|
199
|
-
* @type {
|
|
200
|
-
* @default
|
|
222
|
+
* @type {number}
|
|
223
|
+
* @default 400
|
|
201
224
|
*/
|
|
202
|
-
this.
|
|
225
|
+
this.iridescenceThicknessMaximum = 400;
|
|
203
226
|
|
|
204
227
|
/**
|
|
205
228
|
* A texture that defines the thickness of the iridescence layer, stored in the green channel.
|
|
206
|
-
* Minimum and maximum values of thickness are defined by `
|
|
207
|
-
*
|
|
208
|
-
* - `
|
|
209
|
-
* -
|
|
229
|
+
* Minimum and maximum values of thickness are defined by `iridescenceThicknessMinimum` and
|
|
230
|
+
* `iridescenceThicknessMaximum`:
|
|
231
|
+
* - `0.0` in the green channel will result in thickness equal to `iridescenceThicknessMinimum`.
|
|
232
|
+
* - `1.0` in the green channel will result in thickness equal to `iridescenceThicknessMaximum`.
|
|
233
|
+
* - Values in-between will linearly interpolate between both values.
|
|
210
234
|
*
|
|
211
235
|
* `iridescenceThicknessMap` represents non-color data. Any texture assigned must have
|
|
212
236
|
* `texture.colorSpace = NoColorSpace` (default).
|
|
@@ -354,6 +378,7 @@ class MeshPhysicalMaterial extends MeshStandardMaterial {
|
|
|
354
378
|
|
|
355
379
|
this._anisotropy = 0;
|
|
356
380
|
this._clearcoat = 0;
|
|
381
|
+
this._diffuseRoughness = 0;
|
|
357
382
|
this._dispersion = 0;
|
|
358
383
|
this._iridescence = 0;
|
|
359
384
|
this._retroreflectivity = 0;
|
|
@@ -413,6 +438,33 @@ class MeshPhysicalMaterial extends MeshStandardMaterial {
|
|
|
413
438
|
this._clearcoat = value;
|
|
414
439
|
|
|
415
440
|
}
|
|
441
|
+
|
|
442
|
+
/**
|
|
443
|
+
* Roughness of the diffuse layer, from `0.0` to `1.0`. A value of `0.0`
|
|
444
|
+
* uses Lambertian diffuse reflection. Values above `0.0` use the EON
|
|
445
|
+
* energy-preserving rough diffuse model.
|
|
446
|
+
*
|
|
447
|
+
* @type {number}
|
|
448
|
+
* @default 0
|
|
449
|
+
*/
|
|
450
|
+
get diffuseRoughness() {
|
|
451
|
+
|
|
452
|
+
return this._diffuseRoughness;
|
|
453
|
+
|
|
454
|
+
}
|
|
455
|
+
|
|
456
|
+
set diffuseRoughness( value ) {
|
|
457
|
+
|
|
458
|
+
if ( this._diffuseRoughness > 0 !== value > 0 ) {
|
|
459
|
+
|
|
460
|
+
this.version ++;
|
|
461
|
+
|
|
462
|
+
}
|
|
463
|
+
|
|
464
|
+
this._diffuseRoughness = value;
|
|
465
|
+
|
|
466
|
+
}
|
|
467
|
+
|
|
416
468
|
/**
|
|
417
469
|
* The intensity of the iridescence layer, simulating RGB color shift based on the angle between
|
|
418
470
|
* the surface and the viewer, from `0.0` to `1.0`.
|
|
@@ -545,6 +597,30 @@ class MeshPhysicalMaterial extends MeshStandardMaterial {
|
|
|
545
597
|
|
|
546
598
|
}
|
|
547
599
|
|
|
600
|
+
/**
|
|
601
|
+
* Array of exactly 2 elements, specifying minimum and maximum thickness of the iridescence layer.
|
|
602
|
+
*
|
|
603
|
+
* @deprecated since r187. Use {@link MeshPhysicalMaterial#iridescenceThicknessMinimum} and {@link MeshPhysicalMaterial#iridescenceThicknessMaximum} instead.
|
|
604
|
+
* @type {Array<number,number>}
|
|
605
|
+
* @default [100,400]
|
|
606
|
+
*/
|
|
607
|
+
get iridescenceThicknessRange() {
|
|
608
|
+
|
|
609
|
+
warnOnce( 'MeshPhysicalMaterial: The "iridescenceThicknessRange" property has been replaced by "iridescenceThicknessMinimum" and "iridescenceThicknessMaximum".' ); // @deprecated r187
|
|
610
|
+
|
|
611
|
+
return [ this.iridescenceThicknessMinimum, this.iridescenceThicknessMaximum ];
|
|
612
|
+
|
|
613
|
+
}
|
|
614
|
+
|
|
615
|
+
set iridescenceThicknessRange( value ) {
|
|
616
|
+
|
|
617
|
+
warnOnce( 'MeshPhysicalMaterial: The "iridescenceThicknessRange" property has been replaced by "iridescenceThicknessMinimum" and "iridescenceThicknessMaximum".' ); // @deprecated r187
|
|
618
|
+
|
|
619
|
+
this.iridescenceThicknessMinimum = value[ 0 ];
|
|
620
|
+
this.iridescenceThicknessMaximum = value[ 1 ];
|
|
621
|
+
|
|
622
|
+
}
|
|
623
|
+
|
|
548
624
|
copy( source ) {
|
|
549
625
|
|
|
550
626
|
super.copy( source );
|
|
@@ -566,6 +642,8 @@ class MeshPhysicalMaterial extends MeshStandardMaterial {
|
|
|
566
642
|
this.clearcoatRoughnessMap = source.clearcoatRoughnessMap;
|
|
567
643
|
this.clearcoatNormalMap = source.clearcoatNormalMap;
|
|
568
644
|
this.clearcoatNormalScale.copy( source.clearcoatNormalScale );
|
|
645
|
+
this.diffuseRoughness = source.diffuseRoughness;
|
|
646
|
+
this.diffuseRoughnessMap = source.diffuseRoughnessMap;
|
|
569
647
|
|
|
570
648
|
this.dispersion = source.dispersion;
|
|
571
649
|
this.ior = source.ior;
|
|
@@ -573,7 +651,8 @@ class MeshPhysicalMaterial extends MeshStandardMaterial {
|
|
|
573
651
|
this.iridescence = source.iridescence;
|
|
574
652
|
this.iridescenceMap = source.iridescenceMap;
|
|
575
653
|
this.iridescenceIOR = source.iridescenceIOR;
|
|
576
|
-
this.
|
|
654
|
+
this.iridescenceThicknessMinimum = source.iridescenceThicknessMinimum;
|
|
655
|
+
this.iridescenceThicknessMaximum = source.iridescenceThicknessMaximum;
|
|
577
656
|
this.iridescenceThicknessMap = source.iridescenceThicknessMap;
|
|
578
657
|
|
|
579
658
|
this.retroreflectivity = source.retroreflectivity;
|
|
@@ -209,7 +209,7 @@ const mvpLine = Fn( ( { material } ) => {
|
|
|
209
209
|
// get the offset direction as perpendicular to the view vector
|
|
210
210
|
|
|
211
211
|
const worldDir = end.xyz.sub( start.xyz ).normalize();
|
|
212
|
-
const tmpFwd = mix( start.xyz, end.xyz, 0.5 ).normalize();
|
|
212
|
+
const tmpFwd = perspective.select( mix( start.xyz, end.xyz, 0.5 ).normalize(), vec3( 0.0, 0.0, - 1.0 ) );
|
|
213
213
|
const worldUp = worldDir.cross( tmpFwd ).normalize();
|
|
214
214
|
const worldFwd = worldDir.cross( worldUp );
|
|
215
215
|
|
|
@@ -246,7 +246,13 @@ const mvpLine = Fn( ( { material } ) => {
|
|
|
246
246
|
const clipPose = vec3().toVar();
|
|
247
247
|
|
|
248
248
|
clipPose.assign( positionGeometry.y.lessThan( 0.5 ).select( ndcStart, ndcEnd ) );
|
|
249
|
-
|
|
249
|
+
|
|
250
|
+
If( clip.w.greaterThan( 0.0 ), () => {
|
|
251
|
+
|
|
252
|
+
// only shift the depth of vertices in front of the camera (#35137)
|
|
253
|
+
clip.z.assign( clipPose.z.mul( clip.w ) );
|
|
254
|
+
|
|
255
|
+
} );
|
|
250
256
|
|
|
251
257
|
} else {
|
|
252
258
|
|
|
@@ -322,15 +328,31 @@ const alphaLine = Fn( ( { material, renderer } ) => {
|
|
|
322
328
|
|
|
323
329
|
if ( useWorldUnits ) {
|
|
324
330
|
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
const
|
|
328
|
-
|
|
331
|
+
const len = float().toVar();
|
|
332
|
+
|
|
333
|
+
const orthographic = cameraProjectionMatrix.element( 2 ).element( 3 ).notEqual( - 1.0 ).toConst();
|
|
334
|
+
|
|
335
|
+
If( orthographic, () => {
|
|
336
|
+
|
|
337
|
+
// View rays are parallel to the z axis so the distance reduces to camera-space XY
|
|
338
|
+
const lineDir = worldEnd.xy.sub( worldStart.xy );
|
|
339
|
+
const t = worldPos.xy.sub( worldStart.xy ).dot( lineDir ).div( lineDir.dot( lineDir ) ).clamp();
|
|
340
|
+
len.assign( worldStart.xy.add( lineDir.mul( t ) ).sub( worldPos.xy ).length() );
|
|
341
|
+
|
|
342
|
+
} ).Else( () => {
|
|
343
|
+
|
|
344
|
+
// Find the closest points on the view ray and the line segment
|
|
345
|
+
const rayEnd = worldPos.xyz.normalize().mul( 1e5 );
|
|
346
|
+
const lineDir = worldEnd.sub( worldStart );
|
|
347
|
+
const params = closestLineToLine( { p1: worldStart, p2: worldEnd, p3: vec3( 0.0, 0.0, 0.0 ), p4: rayEnd } );
|
|
348
|
+
|
|
349
|
+
const p1 = worldStart.add( lineDir.mul( params.x ) );
|
|
350
|
+
const p2 = rayEnd.mul( params.y );
|
|
351
|
+
const delta = p1.sub( p2 );
|
|
352
|
+
len.assign( delta.length() );
|
|
353
|
+
|
|
354
|
+
} );
|
|
329
355
|
|
|
330
|
-
const p1 = worldStart.add( lineDir.mul( params.x ) );
|
|
331
|
-
const p2 = rayEnd.mul( params.y );
|
|
332
|
-
const delta = p1.sub( p2 );
|
|
333
|
-
const len = delta.length();
|
|
334
356
|
const norm = len.div( materialLineWidth );
|
|
335
357
|
|
|
336
358
|
if ( ! useDash ) {
|
|
@@ -45,6 +45,19 @@ class MeshLambertNodeMaterial extends NodeMaterial {
|
|
|
45
45
|
*/
|
|
46
46
|
this.lights = true;
|
|
47
47
|
|
|
48
|
+
/**
|
|
49
|
+
* The emissive color of lambert materials is by default inferred from the `emissive`,
|
|
50
|
+
* `emissiveIntensity` and `emissiveMap` properties. This node property allows to
|
|
51
|
+
* overwrite the default and define the emissive color with a node instead.
|
|
52
|
+
*
|
|
53
|
+
* If you don't want to overwrite the emissive color but modify the existing
|
|
54
|
+
* value instead, use {@link materialEmissive}.
|
|
55
|
+
*
|
|
56
|
+
* @type {?Node<vec3>}
|
|
57
|
+
* @default null
|
|
58
|
+
*/
|
|
59
|
+
this.emissiveNode = null;
|
|
60
|
+
|
|
48
61
|
this.setDefaultValues( _defaultValues );
|
|
49
62
|
|
|
50
63
|
this.setValues( parameters );
|
|
@@ -48,6 +48,19 @@ class MeshPhongNodeMaterial extends NodeMaterial {
|
|
|
48
48
|
*/
|
|
49
49
|
this.lights = true;
|
|
50
50
|
|
|
51
|
+
/**
|
|
52
|
+
* The emissive color of phong materials is by default inferred from the `emissive`,
|
|
53
|
+
* `emissiveIntensity` and `emissiveMap` properties. This node property allows to
|
|
54
|
+
* overwrite the default and define the emissive color with a node instead.
|
|
55
|
+
*
|
|
56
|
+
* If you don't want to overwrite the emissive color but modify the existing
|
|
57
|
+
* value instead, use {@link materialEmissive}.
|
|
58
|
+
*
|
|
59
|
+
* @type {?Node<vec3>}
|
|
60
|
+
* @default null
|
|
61
|
+
*/
|
|
62
|
+
this.emissiveNode = null;
|
|
63
|
+
|
|
51
64
|
/**
|
|
52
65
|
* The shininess of phong materials is by default inferred from the `shininess`
|
|
53
66
|
* property. This node property allows to overwrite the default
|
|
@@ -1,5 +1,5 @@
|
|
|
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, retroreflectivity } from '../../nodes/core/PropertyNode.js';
|
|
2
|
-
import { materialClearcoat, materialClearcoatRoughness, materialClearcoatNormal, materialSheen, materialSheenRoughness, materialIridescence, materialIridescenceIOR, materialIridescenceThickness, materialSpecularIntensity, materialSpecularColor, materialAnisotropy, materialIOR, materialTransmission, materialThickness, materialAttenuationDistance, materialAttenuationColor, materialDispersion, materialRetroreflectivity } from '../../nodes/accessors/MaterialNode.js';
|
|
1
|
+
import { clearcoat, clearcoatRoughness, diffuseRoughness, sheen, sheenRoughness, iridescence, iridescenceIOR, iridescenceThickness, specularColor, specularColorBlended, specularF90, diffuseColor, metalness, roughness, anisotropy, alphaT, anisotropyT, anisotropyB, ior, transmission, thickness, attenuationDistance, attenuationColor, dispersion, retroreflectivity } from '../../nodes/core/PropertyNode.js';
|
|
2
|
+
import { materialClearcoat, materialClearcoatRoughness, materialClearcoatNormal, materialDiffuseRoughness, materialSheen, materialSheenRoughness, materialIridescence, materialIridescenceIOR, materialIridescenceThickness, materialSpecularIntensity, materialSpecularColor, materialAnisotropy, materialIOR, materialTransmission, materialThickness, materialAttenuationDistance, materialAttenuationColor, materialDispersion, materialRetroreflectivity } 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';
|
|
5
5
|
import { TBNViewMatrix } from '../../nodes/accessors/AccessorsUtils.js';
|
|
@@ -69,6 +69,19 @@ class MeshPhysicalNodeMaterial extends MeshStandardNodeMaterial {
|
|
|
69
69
|
*/
|
|
70
70
|
this.clearcoatRoughnessNode = null;
|
|
71
71
|
|
|
72
|
+
/**
|
|
73
|
+
* The diffuse roughness of physical materials is by default inferred from the
|
|
74
|
+
* `diffuseRoughness` and `diffuseRoughnessMap` properties. This node property allows to overwrite the
|
|
75
|
+
* default and define the diffuse roughness with a node instead.
|
|
76
|
+
*
|
|
77
|
+
* If you don't want to overwrite the diffuse roughness but modify the existing
|
|
78
|
+
* value instead, use {@link materialDiffuseRoughness}.
|
|
79
|
+
*
|
|
80
|
+
* @type {?Node<float>}
|
|
81
|
+
* @default null
|
|
82
|
+
*/
|
|
83
|
+
this.diffuseRoughnessNode = null;
|
|
84
|
+
|
|
72
85
|
/**
|
|
73
86
|
* The clearcoat normal of physical materials is by default inferred from the `clearcoatNormalMap`
|
|
74
87
|
* property. This node property allows to overwrite the default
|
|
@@ -135,8 +148,8 @@ class MeshPhysicalNodeMaterial extends MeshStandardNodeMaterial {
|
|
|
135
148
|
this.iridescenceIORNode = null;
|
|
136
149
|
|
|
137
150
|
/**
|
|
138
|
-
* The iridescence thickness of physical materials is by default inferred from the `
|
|
139
|
-
* and `iridescenceThicknessMap` properties. This node property allows to overwrite the default
|
|
151
|
+
* The iridescence thickness of physical materials is by default inferred from the `iridescenceThicknessMinimum`,
|
|
152
|
+
* `iridescenceThicknessMaximum` and `iridescenceThicknessMap` properties. This node property allows to overwrite the default
|
|
140
153
|
* and define the iridescence thickness with a node instead.
|
|
141
154
|
*
|
|
142
155
|
* If you don't want to overwrite the iridescence thickness but modify the existing
|
|
@@ -295,6 +308,18 @@ class MeshPhysicalNodeMaterial extends MeshStandardNodeMaterial {
|
|
|
295
308
|
|
|
296
309
|
}
|
|
297
310
|
|
|
311
|
+
/**
|
|
312
|
+
* Whether the lighting model should use EON rough diffuse reflection or not.
|
|
313
|
+
*
|
|
314
|
+
* @type {boolean}
|
|
315
|
+
* @default false
|
|
316
|
+
*/
|
|
317
|
+
get useDiffuseRoughness() {
|
|
318
|
+
|
|
319
|
+
return this.diffuseRoughness > 0 || this.diffuseRoughnessNode !== null;
|
|
320
|
+
|
|
321
|
+
}
|
|
322
|
+
|
|
298
323
|
/**
|
|
299
324
|
* Whether the lighting model should use iridescence or not.
|
|
300
325
|
*
|
|
@@ -390,7 +415,7 @@ class MeshPhysicalNodeMaterial extends MeshStandardNodeMaterial {
|
|
|
390
415
|
*/
|
|
391
416
|
setupLightingModel( /*builder*/ ) {
|
|
392
417
|
|
|
393
|
-
return new PhysicalLightingModel( this.useClearcoat, this.useSheen, this.useIridescence, this.useAnisotropy, this.useTransmission, this.useDispersion, this.useRetroreflection );
|
|
418
|
+
return new PhysicalLightingModel( this.useClearcoat, this.useSheen, this.useIridescence, this.useAnisotropy, this.useTransmission, this.useDispersion, this.useRetroreflection, this.useDiffuseRoughness );
|
|
394
419
|
|
|
395
420
|
}
|
|
396
421
|
|
|
@@ -403,6 +428,16 @@ class MeshPhysicalNodeMaterial extends MeshStandardNodeMaterial {
|
|
|
403
428
|
|
|
404
429
|
super.setupVariants( builder );
|
|
405
430
|
|
|
431
|
+
// DIFFUSE ROUGHNESS
|
|
432
|
+
|
|
433
|
+
if ( this.useDiffuseRoughness ) {
|
|
434
|
+
|
|
435
|
+
const diffuseRoughnessNode = this.diffuseRoughnessNode ? float( this.diffuseRoughnessNode ) : materialDiffuseRoughness;
|
|
436
|
+
|
|
437
|
+
diffuseRoughness.assign( diffuseRoughnessNode.clamp() );
|
|
438
|
+
|
|
439
|
+
}
|
|
440
|
+
|
|
406
441
|
// CLEARCOAT
|
|
407
442
|
|
|
408
443
|
if ( this.useClearcoat ) {
|
|
@@ -44,6 +44,19 @@ class MeshToonNodeMaterial extends NodeMaterial {
|
|
|
44
44
|
*/
|
|
45
45
|
this.lights = true;
|
|
46
46
|
|
|
47
|
+
/**
|
|
48
|
+
* The emissive color of toon materials is by default inferred from the `emissive`,
|
|
49
|
+
* `emissiveIntensity` and `emissiveMap` properties. This node property allows to
|
|
50
|
+
* overwrite the default and define the emissive color with a node instead.
|
|
51
|
+
*
|
|
52
|
+
* If you don't want to overwrite the emissive color but modify the existing
|
|
53
|
+
* value instead, use {@link materialEmissive}.
|
|
54
|
+
*
|
|
55
|
+
* @type {?Node<vec3>}
|
|
56
|
+
* @default null
|
|
57
|
+
*/
|
|
58
|
+
this.emissiveNode = null;
|
|
59
|
+
|
|
47
60
|
this.setDefaultValues( _defaultValues );
|
|
48
61
|
|
|
49
62
|
this.setValues( parameters );
|
|
@@ -10,7 +10,7 @@ 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
12
|
import { skinning } from '../../nodes/accessors/Skinning.js';
|
|
13
|
-
import { morphReference } from '../../nodes/accessors/Morph.js';
|
|
13
|
+
import { morphReference, morphColor } 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';
|
|
@@ -239,8 +239,8 @@ class NodeMaterial extends Material {
|
|
|
239
239
|
|
|
240
240
|
/**
|
|
241
241
|
* The local vertex positions are computed based on multiple factors like the
|
|
242
|
-
* attribute data, morphing or
|
|
243
|
-
* the default and define local vertex positions with nodes instead.
|
|
242
|
+
* attribute data, morphing, skinning, instancing or batching. This node property
|
|
243
|
+
* allows to overwrite the default and define local vertex positions with nodes instead.
|
|
244
244
|
*
|
|
245
245
|
* If you don't want to overwrite the vertex positions but modify the existing
|
|
246
246
|
* values instead, use {@link positionLocal}.
|
|
@@ -431,7 +431,7 @@ class NodeMaterial extends Material {
|
|
|
431
431
|
|
|
432
432
|
for ( const { property, childNode } of this._getNodeChildren() ) {
|
|
433
433
|
|
|
434
|
-
values.push( hashString( property.slice( 0, - 4 ) ), childNode.getCacheKey() );
|
|
434
|
+
values.push( hashString( property.slice( 0, - 4 ) ), childNode.getCacheKey( true ) );
|
|
435
435
|
|
|
436
436
|
}
|
|
437
437
|
|
|
@@ -692,7 +692,7 @@ class NodeMaterial extends Material {
|
|
|
692
692
|
|
|
693
693
|
} else if ( renderer.logarithmicDepthBuffer === true ) {
|
|
694
694
|
|
|
695
|
-
if ( camera.
|
|
695
|
+
if ( camera.isOrthographicCamera !== true ) {
|
|
696
696
|
|
|
697
697
|
depthNode = viewZToLogarithmicDepth( positionView.z, cameraNear, cameraFar );
|
|
698
698
|
|
|
@@ -836,9 +836,11 @@ class NodeMaterial extends Material {
|
|
|
836
836
|
|
|
837
837
|
// VERTEX COLORS
|
|
838
838
|
|
|
839
|
+
let vertexColorNode = null;
|
|
840
|
+
|
|
839
841
|
if ( this.vertexColors === true && geometry.hasAttribute( 'color' ) ) {
|
|
840
842
|
|
|
841
|
-
|
|
843
|
+
vertexColorNode = vertexColor();
|
|
842
844
|
|
|
843
845
|
}
|
|
844
846
|
|
|
@@ -846,13 +848,27 @@ class NodeMaterial extends Material {
|
|
|
846
848
|
|
|
847
849
|
if ( object.instanceColor ) {
|
|
848
850
|
|
|
849
|
-
|
|
851
|
+
vertexColorNode = vertexColorNode !== null ? vertexColorNode.mul( instanceColor ) : instanceColor;
|
|
850
852
|
|
|
851
853
|
}
|
|
852
854
|
|
|
853
855
|
if ( object.isBatchedMesh && object._colorsTexture ) {
|
|
854
856
|
|
|
855
|
-
|
|
857
|
+
vertexColorNode = vertexColorNode !== null ? vertexColorNode.mul( batchColor ) : batchColor;
|
|
858
|
+
|
|
859
|
+
}
|
|
860
|
+
|
|
861
|
+
// MORPHED COLORS
|
|
862
|
+
|
|
863
|
+
if ( this.vertexColors === true && geometry.morphAttributes.color !== undefined ) {
|
|
864
|
+
|
|
865
|
+
vertexColorNode = morphColor( vec4( vertexColorNode !== null ? vertexColorNode : 1 ) );
|
|
866
|
+
|
|
867
|
+
}
|
|
868
|
+
|
|
869
|
+
if ( vertexColorNode !== null ) {
|
|
870
|
+
|
|
871
|
+
colorNode = colorNode.mul( vertexColorNode );
|
|
856
872
|
|
|
857
873
|
}
|
|
858
874
|
|
|
@@ -1320,21 +1336,25 @@ class NodeMaterial extends Material {
|
|
|
1320
1336
|
*/
|
|
1321
1337
|
copy( source ) {
|
|
1322
1338
|
|
|
1323
|
-
|
|
1339
|
+
for ( let prototype = Object.getPrototypeOf( this ); prototype !== Object.prototype; prototype = Object.getPrototypeOf( prototype ) ) {
|
|
1324
1340
|
|
|
1325
|
-
|
|
1341
|
+
const descriptors = Object.getOwnPropertyDescriptors( prototype );
|
|
1326
1342
|
|
|
1327
|
-
|
|
1343
|
+
for ( const property in descriptors ) {
|
|
1328
1344
|
|
|
1329
|
-
|
|
1345
|
+
if ( descriptors[ property ].set !== undefined && source[ property ] !== undefined ) {
|
|
1330
1346
|
|
|
1331
|
-
|
|
1347
|
+
const value = source[ property ];
|
|
1332
1348
|
|
|
1333
|
-
this[ property ].copy
|
|
1349
|
+
if ( this[ property ] && this[ property ].copy !== undefined ) {
|
|
1334
1350
|
|
|
1335
|
-
|
|
1351
|
+
this[ property ].copy( value );
|
|
1336
1352
|
|
|
1337
|
-
|
|
1353
|
+
} else {
|
|
1354
|
+
|
|
1355
|
+
this[ property ] = value;
|
|
1356
|
+
|
|
1357
|
+
}
|
|
1338
1358
|
|
|
1339
1359
|
}
|
|
1340
1360
|
|