@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
|
@@ -16,6 +16,10 @@ struct PhysicalMaterial {
|
|
|
16
16
|
vec2 dfg;
|
|
17
17
|
vec3 multiScatteringCompensation;
|
|
18
18
|
|
|
19
|
+
#ifdef USE_DIFFUSE_ROUGHNESS
|
|
20
|
+
float diffuseRoughness;
|
|
21
|
+
#endif
|
|
22
|
+
|
|
19
23
|
#ifdef USE_RETROREFLECTION
|
|
20
24
|
float retroreflectivity;
|
|
21
25
|
#endif
|
|
@@ -76,6 +80,66 @@ vec3 Schlick_to_F0( const in vec3 f, const in float f90, const in float dotVH )
|
|
|
76
80
|
return ( f - vec3( f90 ) * x5 ) / ( 1.0 - x5 );
|
|
77
81
|
}
|
|
78
82
|
|
|
83
|
+
#ifdef USE_DIFFUSE_ROUGHNESS
|
|
84
|
+
|
|
85
|
+
// Portsmouth et al. 2025, "EON: A Practical Energy-Preserving Rough Diffuse BRDF"
|
|
86
|
+
// https://jcgt.org/published/0014/01/06/
|
|
87
|
+
const float EON_EPSILON = 1e-7;
|
|
88
|
+
|
|
89
|
+
float FON_DirectionalAlbedo( const in float mu, const in float roughness, const in float A ) {
|
|
90
|
+
|
|
91
|
+
float muComp = 1.0 - mu;
|
|
92
|
+
float gOverPi = muComp * ( 0.0571085289 + muComp * ( 0.491881867 + muComp * ( - 0.332181442 + muComp * 0.0714429953 ) ) );
|
|
93
|
+
|
|
94
|
+
return A * ( 1.0 + roughness * gOverPi );
|
|
95
|
+
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
vec3 BRDF_EON( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in vec3 diffuseColor, const in float roughness ) {
|
|
99
|
+
|
|
100
|
+
vec3 rho = saturate( diffuseColor );
|
|
101
|
+
|
|
102
|
+
if ( roughness <= EON_EPSILON ) return BRDF_Lambert( rho );
|
|
103
|
+
|
|
104
|
+
float dotNL = saturate( dot( normal, lightDir ) );
|
|
105
|
+
float dotNV = saturate( dot( normal, viewDir ) );
|
|
106
|
+
float s = dot( lightDir, viewDir ) - dotNL * dotNV;
|
|
107
|
+
float sOverT = ( s > 0.0 ) ? s / max( max( dotNL, dotNV ), EON_EPSILON ) : s;
|
|
108
|
+
|
|
109
|
+
float A = 1.0 / ( 1.0 + ( 0.5 - 2.0 / ( 3.0 * PI ) ) * roughness );
|
|
110
|
+
vec3 singleScatter = rho * RECIPROCAL_PI * A * ( 1.0 + roughness * sOverT );
|
|
111
|
+
|
|
112
|
+
float averageAlbedo = A * ( 1.0 + ( 2.0 / 3.0 - 28.0 / ( 15.0 * PI ) ) * roughness );
|
|
113
|
+
float albedoV = FON_DirectionalAlbedo( dotNV, roughness, A );
|
|
114
|
+
float albedoL = FON_DirectionalAlbedo( dotNL, roughness, A );
|
|
115
|
+
|
|
116
|
+
vec3 rhoMultiScatter = rho * rho * averageAlbedo / max( vec3( EON_EPSILON ), vec3( 1.0 ) - rho * ( 1.0 - averageAlbedo ) );
|
|
117
|
+
vec3 multiScatter = rhoMultiScatter * RECIPROCAL_PI
|
|
118
|
+
* max( EON_EPSILON, 1.0 - albedoV )
|
|
119
|
+
* max( EON_EPSILON, 1.0 - albedoL )
|
|
120
|
+
/ max( EON_EPSILON, 1.0 - averageAlbedo );
|
|
121
|
+
|
|
122
|
+
return singleScatter + multiScatter;
|
|
123
|
+
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
vec3 EON_DirectionalAlbedo( const in vec3 diffuseColor, const in float roughness, const in float dotNV ) {
|
|
127
|
+
|
|
128
|
+
vec3 rho = saturate( diffuseColor );
|
|
129
|
+
|
|
130
|
+
if ( roughness <= EON_EPSILON ) return rho;
|
|
131
|
+
|
|
132
|
+
float A = 1.0 / ( 1.0 + ( 0.5 - 2.0 / ( 3.0 * PI ) ) * roughness );
|
|
133
|
+
float directionalAlbedo = FON_DirectionalAlbedo( dotNV, roughness, A );
|
|
134
|
+
float averageAlbedo = A * ( 1.0 + ( 2.0 / 3.0 - 28.0 / ( 15.0 * PI ) ) * roughness );
|
|
135
|
+
vec3 rhoMultiScatter = rho * rho * averageAlbedo / max( vec3( EON_EPSILON ), vec3( 1.0 ) - rho * ( 1.0 - averageAlbedo ) );
|
|
136
|
+
|
|
137
|
+
return rho * directionalAlbedo + rhoMultiScatter * ( 1.0 - directionalAlbedo );
|
|
138
|
+
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
#endif
|
|
142
|
+
|
|
79
143
|
// Moving Frostbite to Physically Based Rendering 3.0 - page 12, listing 2
|
|
80
144
|
// https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf
|
|
81
145
|
float V_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {
|
|
@@ -132,7 +196,7 @@ float D_GGX( const in float alpha, const in float dotNH ) {
|
|
|
132
196
|
|
|
133
197
|
vec3 f0 = material.clearcoatF0;
|
|
134
198
|
float f90 = material.clearcoatF90;
|
|
135
|
-
float roughness = material.clearcoatRoughness;
|
|
199
|
+
float roughness = max( material.clearcoatRoughness, 0.045 ); // punctual lights need a minimum roughness to show a highlight
|
|
136
200
|
|
|
137
201
|
float alpha = pow2( roughness ); // UE4's roughness
|
|
138
202
|
|
|
@@ -159,7 +223,7 @@ vec3 BRDF_GGX( const in vec3 lightDir, const in vec3 viewDir, const in vec3 norm
|
|
|
159
223
|
|
|
160
224
|
vec3 f0 = material.specularColorBlended;
|
|
161
225
|
float f90 = material.specularF90;
|
|
162
|
-
float roughness = material.roughness;
|
|
226
|
+
float roughness = max( material.roughness, 0.045 ); // punctual lights need a minimum roughness to show a highlight
|
|
163
227
|
|
|
164
228
|
float alpha = pow2( roughness ); // UE4's roughness
|
|
165
229
|
|
|
@@ -187,9 +251,11 @@ vec3 BRDF_GGX( const in vec3 lightDir, const in vec3 viewDir, const in vec3 norm
|
|
|
187
251
|
float dotBV = dot( material.anisotropyB, viewDir );
|
|
188
252
|
float dotBH = dot( material.anisotropyB, halfDir );
|
|
189
253
|
|
|
190
|
-
float
|
|
254
|
+
float alphaT = max( material.alphaT, alpha );
|
|
255
|
+
|
|
256
|
+
float V = V_GGX_SmithCorrelated_Anisotropic( alphaT, alpha, dotTV, dotBV, dotTL, dotBL, dotNV, dotNL );
|
|
191
257
|
|
|
192
|
-
float D = D_GGX_Anisotropic(
|
|
258
|
+
float D = D_GGX_Anisotropic( alphaT, alpha, dotNH, dotTH, dotBH );
|
|
193
259
|
|
|
194
260
|
#else
|
|
195
261
|
|
|
@@ -543,7 +609,17 @@ void RE_Direct_Physical( const in IncidentLight directLight, const in vec3 geome
|
|
|
543
609
|
|
|
544
610
|
#endif
|
|
545
611
|
|
|
546
|
-
|
|
612
|
+
#ifdef USE_DIFFUSE_ROUGHNESS
|
|
613
|
+
|
|
614
|
+
vec3 diffuseBRDF = BRDF_EON( directLight.direction, geometryViewDir, geometryNormal, material.diffuseColor, material.diffuseRoughness ) * ( 1.0 - material.metalness );
|
|
615
|
+
|
|
616
|
+
#else
|
|
617
|
+
|
|
618
|
+
vec3 diffuseBRDF = BRDF_Lambert( material.diffuseContribution );
|
|
619
|
+
|
|
620
|
+
#endif
|
|
621
|
+
|
|
622
|
+
reflectedLight.directDiffuse += irradiance * diffuseBRDF * ( 1.0 - F );
|
|
547
623
|
}
|
|
548
624
|
|
|
549
625
|
void RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {
|
|
@@ -562,7 +638,19 @@ void RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in vec3 geomet
|
|
|
562
638
|
|
|
563
639
|
#endif
|
|
564
640
|
|
|
565
|
-
|
|
641
|
+
#ifdef USE_DIFFUSE_ROUGHNESS
|
|
642
|
+
|
|
643
|
+
float dotNV = saturate( dot( geometryNormal, geometryViewDir ) );
|
|
644
|
+
// Irradiance has already integrated the cosine term, so use the directional
|
|
645
|
+
// albedo to approximate EON under locally uniform incident radiance.
|
|
646
|
+
vec3 diffuseAlbedo = EON_DirectionalAlbedo( material.diffuseColor, material.diffuseRoughness, dotNV ) * ( 1.0 - material.metalness );
|
|
647
|
+
vec3 diffuse = irradiance * RECIPROCAL_PI * diffuseAlbedo * ( 1.0 - singleScattering - multiScattering );
|
|
648
|
+
|
|
649
|
+
#else
|
|
650
|
+
|
|
651
|
+
vec3 diffuse = irradiance * BRDF_Lambert( material.diffuseContribution ) * ( 1.0 - singleScattering - multiScattering );
|
|
652
|
+
|
|
653
|
+
#endif
|
|
566
654
|
|
|
567
655
|
#ifdef USE_SHEEN
|
|
568
656
|
|
|
@@ -621,7 +709,16 @@ void RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradia
|
|
|
621
709
|
|
|
622
710
|
// Diffuse energy conservation uses dielectric path
|
|
623
711
|
vec3 totalScatteringDielectric = singleScatteringDielectric + multiScatteringDielectric;
|
|
624
|
-
|
|
712
|
+
#ifdef USE_DIFFUSE_ROUGHNESS
|
|
713
|
+
|
|
714
|
+
float dotNV = saturate( dot( geometryNormal, geometryViewDir ) );
|
|
715
|
+
vec3 diffuse = EON_DirectionalAlbedo( material.diffuseColor, material.diffuseRoughness, dotNV ) * ( 1.0 - material.metalness ) * ( 1.0 - totalScatteringDielectric );
|
|
716
|
+
|
|
717
|
+
#else
|
|
718
|
+
|
|
719
|
+
vec3 diffuse = material.diffuseContribution * ( 1.0 - totalScatteringDielectric );
|
|
720
|
+
|
|
721
|
+
#endif
|
|
625
722
|
|
|
626
723
|
vec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;
|
|
627
724
|
|
|
@@ -4,7 +4,16 @@ export default /* glsl */`
|
|
|
4
4
|
// morphTargetBaseInfluence is set based on BufferGeometry.morphTargetsRelative value:
|
|
5
5
|
// When morphTargetsRelative is false, this is set to 1 - sum(influences); this results in normal = sum((target - base) * influence)
|
|
6
6
|
// When morphTargetsRelative is true, this is set to 1; as a result, all morph targets are simply added to the base after weighting
|
|
7
|
-
|
|
7
|
+
|
|
8
|
+
#if defined( USE_COLOR_ALPHA )
|
|
9
|
+
|
|
10
|
+
vColor *= morphTargetBaseInfluence;
|
|
11
|
+
|
|
12
|
+
#elif defined( USE_COLOR )
|
|
13
|
+
|
|
14
|
+
vColor.rgb *= morphTargetBaseInfluence;
|
|
15
|
+
|
|
16
|
+
#endif
|
|
8
17
|
|
|
9
18
|
for ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {
|
|
10
19
|
|
|
@@ -14,7 +23,7 @@ export default /* glsl */`
|
|
|
14
23
|
|
|
15
24
|
#elif defined( USE_COLOR )
|
|
16
25
|
|
|
17
|
-
if ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ).rgb * morphTargetInfluences[ i ];
|
|
26
|
+
if ( morphTargetInfluences[ i ] != 0.0 ) vColor.rgb += getMorph( gl_VertexID, i, 2 ).rgb * morphTargetInfluences[ i ];
|
|
18
27
|
|
|
19
28
|
#endif
|
|
20
29
|
|
|
@@ -152,7 +152,16 @@ export default /* glsl */`
|
|
|
152
152
|
float shadow = 1.0;
|
|
153
153
|
|
|
154
154
|
shadowCoord.xyz /= shadowCoord.w;
|
|
155
|
-
|
|
155
|
+
|
|
156
|
+
#ifdef USE_REVERSED_DEPTH_BUFFER
|
|
157
|
+
|
|
158
|
+
shadowCoord.z -= shadowBias;
|
|
159
|
+
|
|
160
|
+
#else
|
|
161
|
+
|
|
162
|
+
shadowCoord.z += shadowBias;
|
|
163
|
+
|
|
164
|
+
#endif
|
|
156
165
|
|
|
157
166
|
bool inFrustum = shadowCoord.x >= 0.0 && shadowCoord.x <= 1.0 && shadowCoord.y >= 0.0 && shadowCoord.y <= 1.0;
|
|
158
167
|
bool frustumTest = inFrustum && shadowCoord.z <= 1.0;
|
|
@@ -162,7 +171,7 @@ export default /* glsl */`
|
|
|
162
171
|
// Hardware PCF with LinearFilter gives us 4-tap filtering per sample
|
|
163
172
|
// 5 samples using Vogel disk + IGN = effectively 20 filtered taps with better distribution
|
|
164
173
|
vec2 texelSize = vec2( 1.0 ) / shadowMapSize;
|
|
165
|
-
|
|
174
|
+
vec2 radius = shadowRadius * texelSize;
|
|
166
175
|
|
|
167
176
|
// Use IGN to rotate sampling pattern per pixel
|
|
168
177
|
float phi = interleavedGradientNoise( gl_FragCoord.xy ) * PI2;
|
|
@@ -362,17 +371,22 @@ export default /* glsl */`
|
|
|
362
371
|
|
|
363
372
|
if ( viewSpaceZ - shadowCameraFar <= 0.0 && viewSpaceZ - shadowCameraNear >= 0.0 ) {
|
|
364
373
|
|
|
365
|
-
//
|
|
374
|
+
// Each sample is compared against the depth of the point next to the fragment in its direction,
|
|
375
|
+
// on whichever face of the cube it falls, so the comparison is the same on every face. A face
|
|
376
|
+
// stores the depth along its own axis, which for the point at direction * lightDistance is
|
|
377
|
+
// lightDistance * max( |x|, |y|, |z| ) of the direction, and perspective depth is a + b / z.
|
|
378
|
+
float lightDistance = length( lightToPosition );
|
|
379
|
+
float depthRange = shadowCameraFar - shadowCameraNear;
|
|
366
380
|
|
|
367
381
|
#ifdef USE_REVERSED_DEPTH_BUFFER
|
|
368
382
|
|
|
369
|
-
float
|
|
370
|
-
|
|
383
|
+
float depthA = - shadowCameraNear / depthRange - shadowBias;
|
|
384
|
+
float depthB = shadowCameraNear * shadowCameraFar / ( depthRange * lightDistance );
|
|
371
385
|
|
|
372
386
|
#else
|
|
373
387
|
|
|
374
|
-
float
|
|
375
|
-
|
|
388
|
+
float depthA = shadowCameraFar / depthRange + shadowBias;
|
|
389
|
+
float depthB = - shadowCameraNear * shadowCameraFar / ( depthRange * lightDistance );
|
|
376
390
|
|
|
377
391
|
#endif
|
|
378
392
|
|
|
@@ -389,19 +403,21 @@ export default /* glsl */`
|
|
|
389
403
|
// Use IGN to rotate sampling pattern per pixel
|
|
390
404
|
float phi = interleavedGradientNoise( gl_FragCoord.xy ) * PI2;
|
|
391
405
|
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
texture( shadowMap, vec4(
|
|
403
|
-
|
|
404
|
-
|
|
406
|
+
shadow = 0.0;
|
|
407
|
+
|
|
408
|
+
for ( int i = 0; i < 5; i ++ ) {
|
|
409
|
+
|
|
410
|
+
vec2 offset = vogelDiskSample( i, 5, phi );
|
|
411
|
+
vec3 direction = bd3D + ( tangent * offset.x + bitangent * offset.y ) * texelSize;
|
|
412
|
+
vec3 absDirection = abs( direction );
|
|
413
|
+
|
|
414
|
+
float dp = depthA + depthB / max( max( absDirection.x, absDirection.y ), absDirection.z );
|
|
415
|
+
|
|
416
|
+
shadow += texture( shadowMap, vec4( direction, dp ) );
|
|
417
|
+
|
|
418
|
+
}
|
|
419
|
+
|
|
420
|
+
shadow *= 0.2;
|
|
405
421
|
|
|
406
422
|
}
|
|
407
423
|
|
|
@@ -63,6 +63,12 @@ export default /* glsl */`
|
|
|
63
63
|
uniform mat3 roughnessMapTransform;
|
|
64
64
|
varying vec2 vRoughnessMapUv;
|
|
65
65
|
|
|
66
|
+
#endif
|
|
67
|
+
#ifdef USE_DIFFUSE_ROUGHNESSMAP
|
|
68
|
+
|
|
69
|
+
uniform mat3 diffuseRoughnessMapTransform;
|
|
70
|
+
varying vec2 vDiffuseRoughnessMapUv;
|
|
71
|
+
|
|
66
72
|
#endif
|
|
67
73
|
#ifdef USE_ANISOTROPYMAP
|
|
68
74
|
|
|
@@ -53,6 +53,11 @@ export default /* glsl */`
|
|
|
53
53
|
|
|
54
54
|
vRoughnessMapUv = ( roughnessMapTransform * vec3( ROUGHNESSMAP_UV, 1 ) ).xy;
|
|
55
55
|
|
|
56
|
+
#endif
|
|
57
|
+
#ifdef USE_DIFFUSE_ROUGHNESSMAP
|
|
58
|
+
|
|
59
|
+
vDiffuseRoughnessMapUv = ( diffuseRoughnessMapTransform * vec3( DIFFUSE_ROUGHNESSMAP_UV, 1 ) ).xy;
|
|
60
|
+
|
|
56
61
|
#endif
|
|
57
62
|
#ifdef USE_ANISOTROPYMAP
|
|
58
63
|
|
|
@@ -22,7 +22,6 @@ import color_pars_fragment from './ShaderChunk/color_pars_fragment.glsl.js';
|
|
|
22
22
|
import color_pars_vertex from './ShaderChunk/color_pars_vertex.glsl.js';
|
|
23
23
|
import color_vertex from './ShaderChunk/color_vertex.glsl.js';
|
|
24
24
|
import common from './ShaderChunk/common.glsl.js';
|
|
25
|
-
import cube_uv_reflection_fragment from './ShaderChunk/cube_uv_reflection_fragment.glsl.js';
|
|
26
25
|
import defaultnormal_vertex from './ShaderChunk/defaultnormal_vertex.glsl.js';
|
|
27
26
|
import displacementmap_pars_vertex from './ShaderChunk/displacementmap_pars_vertex.glsl.js';
|
|
28
27
|
import displacementmap_vertex from './ShaderChunk/displacementmap_vertex.glsl.js';
|
|
@@ -150,7 +149,6 @@ export const ShaderChunk = {
|
|
|
150
149
|
color_pars_vertex: color_pars_vertex,
|
|
151
150
|
color_vertex: color_vertex,
|
|
152
151
|
common: common,
|
|
153
|
-
cube_uv_reflection_fragment: cube_uv_reflection_fragment,
|
|
154
152
|
defaultnormal_vertex: defaultnormal_vertex,
|
|
155
153
|
displacementmap_pars_vertex: displacementmap_pars_vertex,
|
|
156
154
|
displacementmap_vertex: displacementmap_vertex,
|
|
@@ -17,37 +17,23 @@ void main() {
|
|
|
17
17
|
|
|
18
18
|
export const fragment = /* glsl */`
|
|
19
19
|
|
|
20
|
-
#ifdef ENVMAP_TYPE_CUBE
|
|
21
|
-
|
|
22
|
-
uniform samplerCube envMap;
|
|
23
|
-
|
|
24
|
-
#elif defined( ENVMAP_TYPE_CUBE_UV )
|
|
25
|
-
|
|
26
|
-
uniform sampler2D envMap;
|
|
27
|
-
|
|
28
|
-
#endif
|
|
29
|
-
|
|
30
20
|
uniform float backgroundBlurriness;
|
|
31
21
|
uniform float backgroundIntensity;
|
|
32
22
|
uniform mat3 backgroundRotation;
|
|
33
23
|
|
|
34
24
|
varying vec3 vWorldDirection;
|
|
35
25
|
|
|
36
|
-
#include <
|
|
26
|
+
#include <envmap_common_pars_fragment>
|
|
37
27
|
|
|
38
28
|
void main() {
|
|
39
29
|
|
|
40
|
-
#ifdef
|
|
30
|
+
#ifdef ENVMAP_TYPE_PMREM
|
|
41
31
|
|
|
42
|
-
vec4 texColor =
|
|
43
|
-
|
|
44
|
-
#elif defined( ENVMAP_TYPE_CUBE_UV )
|
|
45
|
-
|
|
46
|
-
vec4 texColor = textureCubeUV( envMap, backgroundRotation * vWorldDirection, backgroundBlurriness );
|
|
32
|
+
vec4 texColor = textureLod( envMap, backgroundRotation * vWorldDirection, roughnessToMip( backgroundBlurriness ) );
|
|
47
33
|
|
|
48
34
|
#else
|
|
49
35
|
|
|
50
|
-
vec4 texColor =
|
|
36
|
+
vec4 texColor = textureCube( envMap, backgroundRotation * vWorldDirection );
|
|
51
37
|
|
|
52
38
|
#endif
|
|
53
39
|
|
|
@@ -68,7 +68,6 @@ uniform float opacity;
|
|
|
68
68
|
#include <aomap_pars_fragment>
|
|
69
69
|
#include <lightmap_pars_fragment>
|
|
70
70
|
#include <emissivemap_pars_fragment>
|
|
71
|
-
#include <cube_uv_reflection_fragment>
|
|
72
71
|
#include <envmap_common_pars_fragment>
|
|
73
72
|
#include <envmap_pars_fragment>
|
|
74
73
|
#include <envmap_physical_pars_fragment>
|
|
@@ -70,7 +70,6 @@ uniform float opacity;
|
|
|
70
70
|
#include <aomap_pars_fragment>
|
|
71
71
|
#include <lightmap_pars_fragment>
|
|
72
72
|
#include <emissivemap_pars_fragment>
|
|
73
|
-
#include <cube_uv_reflection_fragment>
|
|
74
73
|
#include <envmap_common_pars_fragment>
|
|
75
74
|
#include <envmap_pars_fragment>
|
|
76
75
|
#include <envmap_physical_pars_fragment>
|
|
@@ -95,6 +95,14 @@ uniform float opacity;
|
|
|
95
95
|
uniform float clearcoatRoughness;
|
|
96
96
|
#endif
|
|
97
97
|
|
|
98
|
+
#ifdef USE_DIFFUSE_ROUGHNESS
|
|
99
|
+
uniform float diffuseRoughness;
|
|
100
|
+
|
|
101
|
+
#ifdef USE_DIFFUSE_ROUGHNESSMAP
|
|
102
|
+
uniform sampler2D diffuseRoughnessMap;
|
|
103
|
+
#endif
|
|
104
|
+
#endif
|
|
105
|
+
|
|
98
106
|
#ifdef USE_DISPERSION
|
|
99
107
|
uniform float dispersion;
|
|
100
108
|
#endif
|
|
@@ -145,7 +153,6 @@ varying vec3 vViewPosition;
|
|
|
145
153
|
#include <lightmap_pars_fragment>
|
|
146
154
|
#include <emissivemap_pars_fragment>
|
|
147
155
|
#include <iridescence_fragment>
|
|
148
|
-
#include <cube_uv_reflection_fragment>
|
|
149
156
|
#include <envmap_common_pars_fragment>
|
|
150
157
|
#include <envmap_physical_pars_fragment>
|
|
151
158
|
#include <fog_pars_fragment>
|
|
@@ -315,6 +315,9 @@ ShaderLib.physical = {
|
|
|
315
315
|
clearcoatRoughness: { value: 0 },
|
|
316
316
|
clearcoatRoughnessMap: { value: null },
|
|
317
317
|
clearcoatRoughnessMapTransform: { value: /*@__PURE__*/ new Matrix3() },
|
|
318
|
+
diffuseRoughness: { value: 0 },
|
|
319
|
+
diffuseRoughnessMap: { value: null },
|
|
320
|
+
diffuseRoughnessMapTransform: { value: /*@__PURE__*/ new Matrix3() },
|
|
318
321
|
dispersion: { value: 0 },
|
|
319
322
|
retroreflectivity: { value: 0 },
|
|
320
323
|
iridescence: { value: 0 },
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { Color } from '../../math/Color.js';
|
|
2
2
|
import { Vector2 } from '../../math/Vector2.js';
|
|
3
|
-
import { Vector3 } from '../../math/Vector3.js';
|
|
4
3
|
import { Matrix3 } from '../../math/Matrix3.js';
|
|
5
4
|
|
|
6
5
|
// Uniforms library for shared webgl shaders
|
|
@@ -210,10 +209,10 @@ const UniformsLib = {
|
|
|
210
209
|
ltc_1: { value: null },
|
|
211
210
|
ltc_2: { value: null },
|
|
212
211
|
|
|
213
|
-
probesSH: { value:
|
|
214
|
-
probesMin: { value:
|
|
215
|
-
probesMax: { value:
|
|
216
|
-
probesResolution: { value:
|
|
212
|
+
probesSH: { value: [] },
|
|
213
|
+
probesMin: { value: [] },
|
|
214
|
+
probesMax: { value: [] },
|
|
215
|
+
probesResolution: { value: [] }
|
|
217
216
|
|
|
218
217
|
},
|
|
219
218
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { BackSide, FrontSide,
|
|
1
|
+
import { BackSide, FrontSide, SRGBTransfer } from '../../constants.js';
|
|
2
2
|
import { BoxGeometry } from '../../geometries/BoxGeometry.js';
|
|
3
3
|
import { PlaneGeometry } from '../../geometries/PlaneGeometry.js';
|
|
4
4
|
import { ShaderMaterial } from '../../materials/ShaderMaterial.js';
|
|
@@ -89,7 +89,7 @@ function WebGLBackground( renderer, environments, state, objects, alpha, premult
|
|
|
89
89
|
|
|
90
90
|
const background = getBackground( scene );
|
|
91
91
|
|
|
92
|
-
if ( background &&
|
|
92
|
+
if ( background && background.isCubeTexture ) {
|
|
93
93
|
|
|
94
94
|
if ( boxMesh === undefined ) {
|
|
95
95
|
|
|
@@ -141,7 +141,7 @@ function WebGLBackground( renderer, environments, state, objects, alpha, premult
|
|
|
141
141
|
// note: since the matrix is orthonormal, we can use the more-efficient transpose() in lieu of invert()
|
|
142
142
|
boxMesh.material.uniforms.backgroundRotation.value.setFromMatrix4( _m1.makeRotationFromEuler( scene.backgroundRotation ) ).transpose();
|
|
143
143
|
|
|
144
|
-
if ( background.
|
|
144
|
+
if ( background.isRenderTargetTexture === false ) {
|
|
145
145
|
|
|
146
146
|
boxMesh.material.uniforms.backgroundRotation.value.premultiply( _m );
|
|
147
147
|
|
|
@@ -358,11 +358,13 @@ function WebGLBindingStates( gl, attributes ) {
|
|
|
358
358
|
|
|
359
359
|
if ( geometryAttribute.isInterleavedBufferAttribute ) {
|
|
360
360
|
|
|
361
|
+
// interleaved attributes can also view a buffer attribute, e.g. the columns of instance matrices
|
|
362
|
+
|
|
361
363
|
const data = geometryAttribute.data;
|
|
362
|
-
const stride = data.stride;
|
|
364
|
+
const stride = data.isInterleavedBuffer === true ? data.stride : data.itemSize;
|
|
363
365
|
const offset = geometryAttribute.offset;
|
|
364
366
|
|
|
365
|
-
if ( data.isInstancedInterleavedBuffer ) {
|
|
367
|
+
if ( data.isInstancedInterleavedBuffer || data.isInstancedBufferAttribute ) {
|
|
366
368
|
|
|
367
369
|
for ( let i = 0; i < programAttribute.locationSize; i ++ ) {
|
|
368
370
|
|
|
@@ -92,8 +92,8 @@ function WebGLCapabilities( gl, extensions, parameters, utils ) {
|
|
|
92
92
|
|
|
93
93
|
}
|
|
94
94
|
|
|
95
|
-
const logarithmicDepthBuffer = parameters.logarithmicDepthBuffer === true;
|
|
96
95
|
const reversedDepthBuffer = parameters.reversedDepthBuffer === true && extensions.has( 'EXT_clip_control' );
|
|
96
|
+
const logarithmicDepthBuffer = parameters.logarithmicDepthBuffer === true && reversedDepthBuffer === false;
|
|
97
97
|
|
|
98
98
|
if ( parameters.reversedDepthBuffer === true && reversedDepthBuffer === false ) {
|
|
99
99
|
|
|
@@ -101,6 +101,12 @@ function WebGLCapabilities( gl, extensions, parameters, utils ) {
|
|
|
101
101
|
|
|
102
102
|
}
|
|
103
103
|
|
|
104
|
+
if ( parameters.logarithmicDepthBuffer === true && reversedDepthBuffer === true ) {
|
|
105
|
+
|
|
106
|
+
warn( 'WebGLRenderer: Logarithmic depth buffer is ignored when reversed depth buffer is enabled.' );
|
|
107
|
+
|
|
108
|
+
}
|
|
109
|
+
|
|
104
110
|
const maxTextures = gl.getParameter( gl.MAX_TEXTURE_IMAGE_UNITS );
|
|
105
111
|
const maxVertexTextures = gl.getParameter( gl.MAX_VERTEX_TEXTURE_IMAGE_UNITS );
|
|
106
112
|
const maxTextureSize = gl.getParameter( gl.MAX_TEXTURE_SIZE );
|
|
@@ -70,14 +70,14 @@ function WebGLEnvironments( renderer ) {
|
|
|
70
70
|
|
|
71
71
|
function getPMREM( texture ) {
|
|
72
72
|
|
|
73
|
-
if ( texture && texture.isTexture ) {
|
|
73
|
+
if ( texture && texture.isTexture && texture.isPMREMTexture !== true ) {
|
|
74
74
|
|
|
75
75
|
const mapping = texture.mapping;
|
|
76
76
|
|
|
77
77
|
const isEquirectMap = ( mapping === EquirectangularReflectionMapping || mapping === EquirectangularRefractionMapping );
|
|
78
78
|
const isCubeMap = ( mapping === CubeReflectionMapping || mapping === CubeRefractionMapping );
|
|
79
79
|
|
|
80
|
-
// equirect/cube map to
|
|
80
|
+
// equirect/cube map to PMREM conversion
|
|
81
81
|
|
|
82
82
|
if ( isEquirectMap || isCubeMap ) {
|
|
83
83
|
|