super-three 0.181.0 → 0.184.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/README.md +3 -4
- package/build/three.cjs +13152 -11354
- package/build/three.core.js +12319 -11539
- package/build/three.core.min.js +2 -2
- package/build/three.module.js +1808 -781
- package/build/three.module.min.js +2 -2
- package/build/three.tsl.js +27 -13
- package/build/three.tsl.min.js +2 -2
- package/build/three.webgpu.js +10523 -6263
- package/build/three.webgpu.min.js +2 -2
- package/build/three.webgpu.nodes.js +10484 -6262
- package/build/three.webgpu.nodes.min.js +2 -2
- package/examples/jsm/Addons.js +11 -3
- package/examples/jsm/animation/CCDIKSolver.js +7 -3
- package/examples/jsm/controls/ArcballControls.js +7 -4
- package/examples/jsm/controls/DragControls.js +2 -2
- package/examples/jsm/controls/FirstPersonControls.js +58 -54
- package/examples/jsm/controls/FlyControls.js +4 -0
- package/examples/jsm/controls/MapControls.js +55 -1
- package/examples/jsm/controls/OrbitControls.js +111 -8
- package/examples/jsm/controls/TrackballControls.js +8 -8
- package/examples/jsm/controls/TransformControls.js +34 -2
- package/examples/jsm/csm/CSM.js +2 -1
- package/examples/jsm/csm/CSMShadowNode.js +6 -2
- package/examples/jsm/effects/AnaglyphEffect.js +102 -7
- package/examples/jsm/environments/ColorEnvironment.js +59 -0
- package/examples/jsm/environments/RoomEnvironment.js +3 -0
- package/examples/jsm/exporters/EXRExporter.js +1 -1
- package/examples/jsm/exporters/GLTFExporter.js +152 -9
- package/examples/jsm/exporters/USDZExporter.js +22 -3
- package/examples/jsm/geometries/DecalGeometry.js +1 -1
- package/examples/jsm/geometries/TextGeometry.js +18 -0
- package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
- package/examples/jsm/helpers/LightProbeGridHelper.js +221 -0
- package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -1
- package/examples/jsm/helpers/TextureHelperGPU.js +1 -1
- package/examples/jsm/helpers/ViewHelper.js +67 -8
- package/examples/jsm/inspector/Extension.js +13 -0
- package/examples/jsm/inspector/Inspector.js +203 -88
- package/examples/jsm/inspector/RendererInspector.js +14 -4
- package/examples/jsm/inspector/extensions/extensions.json +6 -0
- package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphEditor.js +916 -0
- package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphLoader.js +281 -0
- package/examples/jsm/inspector/tabs/Console.js +41 -7
- package/examples/jsm/inspector/tabs/Memory.js +128 -0
- package/examples/jsm/inspector/tabs/Parameters.js +51 -3
- package/examples/jsm/inspector/tabs/Performance.js +4 -4
- package/examples/jsm/inspector/tabs/Settings.js +264 -0
- package/examples/jsm/inspector/tabs/Timeline.js +1611 -0
- package/examples/jsm/inspector/tabs/Viewer.js +107 -5
- package/examples/jsm/inspector/ui/Graph.js +2 -2
- package/examples/jsm/inspector/ui/List.js +1 -1
- package/examples/jsm/inspector/ui/Profiler.js +1936 -34
- package/examples/jsm/inspector/ui/Style.js +1044 -31
- package/examples/jsm/inspector/ui/Tab.js +222 -3
- package/examples/jsm/inspector/ui/Values.js +55 -2
- package/examples/jsm/inspector/ui/utils.js +13 -0
- package/examples/jsm/interaction/InteractionManager.js +226 -0
- package/examples/jsm/libs/meshopt_decoder.module.js +9 -8
- package/examples/jsm/lighting/DynamicLighting.js +82 -0
- package/examples/jsm/lighting/LightProbeGrid.js +651 -0
- package/examples/jsm/lines/LineMaterial.js +7 -1
- package/examples/jsm/loaders/3DMLoader.js +5 -4
- package/examples/jsm/loaders/3MFLoader.js +2 -2
- package/examples/jsm/loaders/AMFLoader.js +2 -2
- package/examples/jsm/loaders/ColladaLoader.js +24 -4026
- package/examples/jsm/loaders/DRACOLoader.js +5 -5
- package/examples/jsm/loaders/EXRLoader.js +687 -48
- package/examples/jsm/loaders/FBXLoader.js +235 -37
- package/examples/jsm/loaders/GCodeLoader.js +34 -8
- package/examples/jsm/loaders/GLTFLoader.js +146 -178
- package/examples/jsm/loaders/HDRLoader.js +1 -2
- package/examples/jsm/loaders/KMZLoader.js +5 -5
- package/examples/jsm/loaders/KTX2Loader.js +27 -5
- package/examples/jsm/loaders/LDrawLoader.js +41 -50
- package/examples/jsm/loaders/LWOLoader.js +7 -39
- package/examples/jsm/loaders/NRRDLoader.js +2 -2
- package/examples/jsm/loaders/PCDLoader.js +4 -2
- package/examples/jsm/loaders/SVGLoader.js +2 -2
- package/examples/jsm/loaders/TDSLoader.js +0 -2
- package/examples/jsm/loaders/TGALoader.js +0 -2
- package/examples/jsm/loaders/USDLoader.js +100 -40
- package/examples/jsm/loaders/UltraHDRLoader.js +285 -160
- package/examples/jsm/loaders/VOXLoader.js +660 -117
- package/examples/jsm/loaders/VRMLLoader.js +79 -2
- package/examples/jsm/loaders/VTKLoader.js +42 -25
- package/examples/jsm/loaders/collada/ColladaComposer.js +3044 -0
- package/examples/jsm/loaders/collada/ColladaParser.js +1977 -0
- package/examples/jsm/loaders/usd/USDAParser.js +450 -363
- package/examples/jsm/loaders/usd/USDCParser.js +1867 -6
- package/examples/jsm/loaders/usd/USDComposer.js +4594 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +2 -2
- package/examples/jsm/materials/WoodNodeMaterial.js +11 -11
- package/examples/jsm/math/Octree.js +131 -1
- package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
- package/examples/jsm/misc/RollerCoaster.js +42 -4
- package/examples/jsm/misc/Volume.js +0 -1
- package/examples/jsm/misc/VolumeSlice.js +0 -1
- package/examples/jsm/modifiers/TessellateModifier.js +1 -1
- package/examples/jsm/objects/LensflareMesh.js +1 -1
- package/examples/jsm/objects/Reflector.js +73 -25
- package/examples/jsm/objects/Sky.js +90 -6
- package/examples/jsm/objects/SkyMesh.js +150 -16
- package/examples/jsm/objects/Water.js +4 -3
- package/examples/jsm/objects/Water2.js +5 -3
- package/examples/jsm/objects/WaterMesh.js +5 -7
- package/examples/jsm/physics/AmmoPhysics.js +12 -7
- package/examples/jsm/physics/JoltPhysics.js +10 -6
- package/examples/jsm/physics/RapierPhysics.js +9 -5
- package/examples/jsm/postprocessing/EffectComposer.js +7 -5
- package/examples/jsm/postprocessing/OutputPass.js +9 -0
- package/examples/jsm/postprocessing/RenderPass.js +10 -0
- package/examples/jsm/postprocessing/RenderTransitionPass.js +1 -1
- package/examples/jsm/postprocessing/UnrealBloomPass.js +48 -18
- package/examples/jsm/renderers/CSS3DRenderer.js +1 -1
- package/examples/jsm/renderers/Projector.js +246 -28
- package/examples/jsm/renderers/SVGRenderer.js +174 -60
- package/examples/jsm/shaders/GTAOShader.js +19 -6
- package/examples/jsm/shaders/HalftoneShader.js +12 -1
- package/examples/jsm/shaders/PoissonDenoiseShader.js +6 -2
- package/examples/jsm/shaders/SAOShader.js +17 -4
- package/examples/jsm/shaders/SSAOShader.js +11 -1
- package/examples/jsm/shaders/SSRShader.js +6 -5
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +2 -4
- package/examples/jsm/shaders/VignetteShader.js +1 -1
- package/examples/jsm/transpiler/AST.js +44 -0
- package/examples/jsm/transpiler/GLSLDecoder.js +63 -6
- package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -0
- package/examples/jsm/transpiler/TSLEncoder.js +46 -3
- package/examples/jsm/transpiler/TranspilerUtils.js +3 -3
- package/examples/jsm/transpiler/WGSLEncoder.js +27 -0
- package/examples/jsm/tsl/WebGLNodesHandler.js +605 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +11 -1
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +458 -16
- package/examples/jsm/tsl/display/AnamorphicNode.js +12 -1
- package/examples/jsm/tsl/display/BilateralBlurNode.js +374 -0
- package/examples/jsm/tsl/display/BloomNode.js +16 -6
- package/examples/jsm/tsl/display/CRT.js +150 -0
- package/examples/jsm/tsl/display/ChromaticAberrationNode.js +3 -36
- package/examples/jsm/tsl/display/DenoiseNode.js +1 -1
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +1 -1
- package/examples/jsm/tsl/display/DotScreenNode.js +1 -1
- package/examples/jsm/tsl/display/FSR1Node.js +477 -0
- package/examples/jsm/tsl/display/FXAANode.js +2 -2
- package/examples/jsm/tsl/display/GTAONode.js +6 -4
- package/examples/jsm/tsl/display/GaussianBlurNode.js +21 -2
- package/examples/jsm/tsl/display/GodraysNode.js +615 -0
- package/examples/jsm/tsl/display/LensflareNode.js +1 -1
- package/examples/jsm/tsl/display/Lut3DNode.js +1 -1
- package/examples/jsm/tsl/display/OutlineNode.js +69 -19
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -2
- package/examples/jsm/tsl/display/PixelationPassNode.js +7 -6
- package/examples/jsm/tsl/display/RGBShiftNode.js +2 -2
- package/examples/jsm/tsl/display/RetroPassNode.js +263 -0
- package/examples/jsm/tsl/display/SMAANode.js +2 -2
- package/examples/jsm/tsl/display/SSAAPassNode.js +2 -2
- package/examples/jsm/tsl/display/SSGINode.js +8 -24
- package/examples/jsm/tsl/display/SSRNode.js +8 -8
- package/examples/jsm/tsl/display/SSSNode.js +6 -4
- package/examples/jsm/tsl/display/Shape.js +29 -0
- package/examples/jsm/tsl/display/SharpenNode.js +283 -0
- package/examples/jsm/tsl/display/SobelOperatorNode.js +2 -2
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +8 -1
- package/examples/jsm/tsl/display/StereoPassNode.js +1 -2
- package/examples/jsm/tsl/display/TAAUNode.js +835 -0
- package/examples/jsm/tsl/display/TRAANode.js +315 -126
- package/examples/jsm/tsl/display/TransitionNode.js +1 -1
- package/examples/jsm/tsl/display/depthAwareBlend.js +80 -0
- package/examples/jsm/tsl/display/radialBlur.js +68 -0
- package/examples/jsm/tsl/lighting/DynamicLightsNode.js +300 -0
- package/examples/jsm/tsl/lighting/data/AmbientLightDataNode.js +61 -0
- package/examples/jsm/tsl/lighting/data/DirectionalLightDataNode.js +111 -0
- package/examples/jsm/tsl/lighting/data/HemisphereLightDataNode.js +99 -0
- package/examples/jsm/tsl/lighting/data/PointLightDataNode.js +134 -0
- package/examples/jsm/tsl/lighting/data/SpotLightDataNode.js +161 -0
- package/examples/jsm/tsl/math/Bayer.js +53 -3
- package/examples/jsm/utils/BufferGeometryUtils.js +2 -3
- package/examples/jsm/utils/ColorUtils.js +76 -0
- package/examples/jsm/utils/LDrawUtils.js +1 -1
- package/examples/jsm/utils/ShadowMapViewer.js +24 -10
- package/examples/jsm/utils/ShadowMapViewerGPU.js +1 -1
- package/examples/jsm/utils/SkeletonUtils.js +14 -8
- package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
- package/examples/jsm/webxr/XRHandMeshModel.js +36 -10
- package/examples/jsm/webxr/XRHandModelFactory.js +2 -1
- package/package.json +24 -30
- package/src/Three.Core.js +3 -1
- package/src/Three.TSL.js +25 -11
- package/src/Three.WebGPU.Nodes.js +5 -0
- package/src/Three.WebGPU.js +9 -0
- package/src/Three.js +1 -0
- package/src/animation/AnimationAction.js +12 -2
- package/src/animation/AnimationClip.js +1 -1
- package/src/animation/AnimationMixer.js +6 -0
- package/src/animation/AnimationUtils.js +1 -12
- package/src/animation/KeyframeTrack.js +47 -8
- package/src/animation/PropertyMixer.js +4 -4
- package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
- package/src/animation/tracks/ColorKeyframeTrack.js +1 -1
- package/src/animation/tracks/NumberKeyframeTrack.js +1 -1
- package/src/animation/tracks/QuaternionKeyframeTrack.js +1 -1
- package/src/animation/tracks/StringKeyframeTrack.js +1 -1
- package/src/animation/tracks/VectorKeyframeTrack.js +1 -1
- package/src/audio/Audio.js +1 -1
- package/src/audio/AudioContext.js +2 -2
- package/src/audio/AudioListener.js +5 -3
- package/src/cameras/Camera.js +32 -2
- package/src/cameras/CubeCamera.js +20 -0
- package/src/constants.js +90 -5
- package/src/core/BufferAttribute.js +13 -1
- package/src/core/BufferGeometry.js +14 -2
- package/src/core/Clock.js +7 -0
- package/src/core/Object3D.js +52 -4
- package/src/core/Raycaster.js +2 -2
- package/src/core/RenderTarget.js +4 -4
- package/src/extras/PMREMGenerator.js +7 -18
- package/src/extras/TextureUtils.js +5 -1
- package/src/extras/curves/CatmullRomCurve3.js +3 -2
- package/src/geometries/ExtrudeGeometry.js +2 -2
- package/src/geometries/PolyhedronGeometry.js +1 -1
- package/src/geometries/TorusGeometry.js +8 -3
- package/src/helpers/CameraHelper.js +3 -0
- package/src/helpers/DirectionalLightHelper.js +4 -1
- package/src/helpers/HemisphereLightHelper.js +3 -0
- package/src/helpers/PointLightHelper.js +1 -25
- package/src/helpers/SpotLightHelper.js +3 -0
- package/src/lights/DirectionalLight.js +13 -0
- package/src/lights/HemisphereLight.js +10 -0
- package/src/lights/Light.js +1 -11
- package/src/lights/LightProbe.js +0 -15
- package/src/lights/LightShadow.js +15 -6
- package/src/lights/PointLight.js +15 -0
- package/src/lights/PointLightShadow.js +0 -86
- package/src/lights/SpotLight.js +22 -1
- package/src/lights/webgpu/IESSpotLight.js +2 -1
- package/src/loaders/AudioLoader.js +11 -1
- package/src/loaders/Cache.js +28 -0
- package/src/loaders/DataTextureLoader.js +6 -4
- package/src/loaders/FileLoader.js +2 -3
- package/src/loaders/ImageBitmapLoader.js +12 -9
- package/src/loaders/Loader.js +6 -0
- package/src/loaders/MaterialLoader.js +3 -2
- package/src/loaders/ObjectLoader.js +46 -6
- package/src/loaders/nodes/NodeLoader.js +2 -2
- package/src/loaders/nodes/NodeObjectLoader.js +18 -0
- package/src/materials/Material.js +2 -0
- package/src/materials/MeshLambertMaterial.js +9 -0
- package/src/materials/MeshPhongMaterial.js +9 -0
- package/src/materials/MeshToonMaterial.js +1 -1
- package/src/materials/ShaderMaterial.js +20 -1
- package/src/materials/nodes/Line2NodeMaterial.js +34 -7
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +5 -2
- package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -4
- package/src/materials/nodes/NodeMaterial.js +45 -25
- package/src/materials/nodes/manager/NodeMaterialObserver.js +191 -86
- package/src/math/Line3.js +6 -5
- package/src/math/MathUtils.js +10 -10
- package/src/math/Matrix2.js +13 -9
- package/src/math/Matrix3.js +13 -9
- package/src/math/Matrix4.js +87 -74
- package/src/math/Plane.js +4 -3
- package/src/math/Quaternion.js +3 -29
- package/src/math/Sphere.js +1 -1
- package/src/math/Triangle.js +1 -1
- package/src/math/Vector2.js +11 -7
- package/src/math/Vector3.js +15 -13
- package/src/math/Vector4.js +13 -9
- package/src/math/interpolants/BezierInterpolant.js +108 -0
- package/src/nodes/Nodes.js +86 -68
- package/src/nodes/TSL.js +7 -7
- package/src/nodes/accessors/Arrays.js +1 -1
- package/src/nodes/accessors/BatchNode.js +10 -10
- package/src/nodes/accessors/Bitangent.js +5 -5
- package/src/nodes/accessors/BufferAttributeNode.js +107 -15
- package/src/nodes/accessors/BufferNode.js +29 -2
- package/src/nodes/accessors/Camera.js +149 -28
- package/src/nodes/accessors/ClippingNode.js +4 -4
- package/src/nodes/accessors/CubeTextureNode.js +27 -2
- package/src/nodes/accessors/InstanceNode.js +148 -43
- package/src/nodes/accessors/MaterialNode.js +9 -1
- package/src/nodes/accessors/MaterialProperties.js +2 -5
- package/src/nodes/accessors/MaterialReferenceNode.js +1 -2
- package/src/nodes/accessors/ModelNode.js +1 -1
- package/src/nodes/accessors/Normal.js +11 -11
- package/src/nodes/accessors/Object3DNode.js +1 -1
- package/src/nodes/accessors/Position.js +34 -2
- package/src/nodes/accessors/ReferenceBaseNode.js +6 -6
- package/src/nodes/accessors/ReferenceNode.js +8 -8
- package/src/nodes/accessors/RendererReferenceNode.js +1 -2
- package/src/nodes/accessors/SceneProperties.js +47 -0
- package/src/nodes/accessors/SkinningNode.js +27 -26
- package/src/nodes/accessors/StorageBufferNode.js +14 -25
- package/src/nodes/accessors/StorageTextureNode.js +40 -9
- package/src/nodes/accessors/Tangent.js +4 -14
- package/src/nodes/accessors/Texture3DNode.js +32 -35
- package/src/nodes/accessors/TextureNode.js +67 -23
- package/src/nodes/accessors/UniformArrayNode.js +6 -4
- package/src/nodes/accessors/UserDataNode.js +1 -2
- package/src/nodes/accessors/VertexColorNode.js +1 -2
- package/src/nodes/code/FunctionCallNode.js +1 -1
- package/src/nodes/code/FunctionNode.js +2 -3
- package/src/nodes/core/ArrayNode.js +21 -2
- package/src/nodes/core/AssignNode.js +3 -3
- package/src/nodes/core/AttributeNode.js +3 -3
- package/src/nodes/core/BypassNode.js +1 -1
- package/src/nodes/core/ContextNode.js +104 -5
- package/src/nodes/core/IndexNode.js +2 -1
- package/src/nodes/core/InputNode.js +1 -1
- package/src/nodes/core/InspectorNode.js +1 -1
- package/src/nodes/core/IsolateNode.js +1 -1
- package/src/nodes/core/MRTNode.js +48 -2
- package/src/nodes/core/Node.js +112 -15
- package/src/nodes/core/NodeBuilder.js +284 -66
- package/src/nodes/core/NodeError.js +28 -0
- package/src/nodes/core/NodeFrame.js +12 -4
- package/src/nodes/core/NodeUtils.js +11 -9
- package/src/nodes/core/OutputStructNode.js +12 -10
- package/src/nodes/core/ParameterNode.js +4 -4
- package/src/nodes/core/PropertyNode.js +19 -3
- package/src/nodes/core/StackNode.js +66 -17
- package/src/nodes/core/StackTrace.js +139 -0
- package/src/nodes/core/StructNode.js +17 -3
- package/src/nodes/core/StructTypeNode.js +12 -18
- package/src/nodes/core/SubBuildNode.js +2 -2
- package/src/nodes/core/UniformGroupNode.js +36 -6
- package/src/nodes/core/UniformNode.js +21 -5
- package/src/nodes/core/VarNode.js +48 -23
- package/src/nodes/core/VaryingNode.js +2 -19
- package/src/nodes/display/BlendModes.js +0 -64
- package/src/nodes/display/ColorAdjustment.js +17 -0
- package/src/nodes/display/ColorSpaceNode.js +3 -3
- package/src/nodes/display/NormalMapNode.js +39 -4
- package/src/nodes/display/PassNode.js +125 -16
- package/src/nodes/display/RenderOutputNode.js +7 -7
- package/src/nodes/display/ScreenNode.js +4 -2
- package/src/nodes/display/ToneMappingNode.js +1 -1
- package/src/nodes/display/ToonOutlinePassNode.js +2 -2
- package/src/nodes/display/ViewportDepthNode.js +52 -4
- package/src/nodes/display/ViewportDepthTextureNode.js +11 -15
- package/src/nodes/display/ViewportTextureNode.js +39 -11
- package/src/nodes/fog/Fog.js +18 -35
- package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +3 -3
- package/src/nodes/functions/BSDF/DFGLUT.js +56 -0
- package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
- package/src/nodes/functions/PhysicalLightingModel.js +126 -45
- package/src/nodes/geometry/RangeNode.js +5 -3
- package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
- package/src/nodes/gpgpu/BarrierNode.js +9 -0
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -3
- package/src/nodes/gpgpu/ComputeNode.js +74 -48
- package/src/nodes/gpgpu/SubgroupFunctionNode.js +2 -2
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +4 -4
- package/src/nodes/lighting/AnalyticLightNode.js +53 -0
- package/src/nodes/lighting/EnvironmentNode.js +28 -3
- package/src/nodes/lighting/LightsNode.js +7 -28
- package/src/nodes/lighting/PointShadowNode.js +162 -149
- package/src/nodes/lighting/ShadowFilterNode.js +53 -65
- package/src/nodes/lighting/ShadowNode.js +120 -42
- package/src/nodes/math/BitcastNode.js +1 -1
- package/src/nodes/math/BitcountNode.js +433 -0
- package/src/nodes/math/ConditionalNode.js +3 -3
- package/src/nodes/math/MathNode.js +76 -41
- package/src/nodes/math/OperatorNode.js +3 -2
- package/src/nodes/math/PackFloatNode.js +98 -0
- package/src/nodes/math/UnpackFloatNode.js +96 -0
- package/src/nodes/pmrem/PMREMNode.js +1 -1
- package/src/nodes/pmrem/PMREMUtils.js +9 -15
- package/src/nodes/tsl/TSLBase.js +1 -1
- package/src/nodes/tsl/TSLCore.js +38 -17
- package/src/nodes/utils/ArrayElementNode.js +14 -1
- package/src/nodes/utils/ConvertNode.js +1 -1
- package/src/nodes/utils/DebugNode.js +12 -12
- package/src/nodes/utils/EventNode.js +31 -2
- package/src/nodes/utils/FlipNode.js +1 -1
- package/src/nodes/utils/FunctionOverloadingNode.js +1 -1
- package/src/nodes/utils/JoinNode.js +3 -3
- package/src/nodes/utils/LoopNode.js +1 -1
- package/src/nodes/utils/MemberNode.js +2 -2
- package/src/nodes/utils/Packing.js +13 -1
- package/src/nodes/utils/PostProcessingUtils.js +33 -1
- package/src/nodes/utils/RTTNode.js +1 -1
- package/src/nodes/utils/ReflectorNode.js +3 -4
- package/src/nodes/utils/Remap.js +48 -0
- package/src/nodes/utils/RotateNode.js +1 -1
- package/src/nodes/utils/SampleNode.js +1 -1
- package/src/nodes/utils/SetNode.js +1 -1
- package/src/nodes/utils/SplitNode.js +1 -1
- package/src/nodes/utils/SpriteSheetUV.js +35 -0
- package/src/nodes/utils/UVUtils.js +28 -0
- package/src/objects/BatchedMesh.js +44 -16
- package/src/objects/InstancedMesh.js +30 -3
- package/src/objects/Line.js +1 -1
- package/src/objects/Mesh.js +1 -1
- package/src/objects/Points.js +1 -1
- package/src/objects/Skeleton.js +9 -0
- package/src/objects/SkinnedMesh.js +26 -9
- package/src/renderers/WebGLRenderer.js +329 -145
- package/src/renderers/common/Animation.js +3 -3
- package/src/renderers/common/Attributes.js +15 -1
- package/src/renderers/common/Backend.js +29 -8
- package/src/renderers/common/Background.js +26 -13
- package/src/renderers/common/BindGroup.js +1 -16
- package/src/renderers/common/Binding.js +11 -0
- package/src/renderers/common/Bindings.js +29 -14
- package/src/renderers/common/BlendMode.js +143 -0
- package/src/renderers/common/Buffer.js +40 -0
- package/src/renderers/common/BundleGroup.js +1 -1
- package/src/renderers/common/ChainMap.js +30 -6
- package/src/renderers/common/ComputePipeline.js +1 -1
- package/src/renderers/common/CubeRenderTarget.js +51 -7
- package/src/renderers/common/Geometries.js +29 -3
- package/src/renderers/common/Info.js +333 -4
- package/src/renderers/common/InspectorBase.js +6 -1
- package/src/renderers/common/Lighting.js +5 -21
- package/src/renderers/common/Pipelines.js +40 -7
- package/src/renderers/common/PostProcessing.js +8 -206
- package/src/renderers/common/ReadbackBuffer.js +78 -0
- package/src/renderers/common/RenderBundle.js +3 -1
- package/src/renderers/common/RenderBundles.js +7 -3
- package/src/renderers/common/RenderContext.js +16 -0
- package/src/renderers/common/RenderContexts.js +33 -49
- package/src/renderers/common/RenderLists.js +2 -1
- package/src/renderers/common/RenderObject.js +17 -5
- package/src/renderers/common/RenderObjectPipeline.js +40 -0
- package/src/renderers/common/RenderObjects.js +21 -5
- package/src/renderers/common/RenderPipeline.js +232 -17
- package/src/renderers/common/Renderer.js +481 -117
- package/src/renderers/common/Sampler.js +4 -4
- package/src/renderers/common/StorageBuffer.js +13 -1
- package/src/renderers/common/Textures.js +89 -4
- package/src/renderers/common/TimestampQueryPool.js +5 -3
- package/src/renderers/common/Uniform.js +8 -0
- package/src/renderers/common/UniformsGroup.js +62 -1
- package/src/renderers/common/XRManager.js +37 -29
- package/src/renderers/common/extras/PMREMGenerator.js +25 -23
- package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
- package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +242 -99
- package/src/renderers/common/nodes/NodeStorageBuffer.js +13 -2
- package/src/renderers/common/nodes/NodeUniformBuffer.js +52 -0
- package/src/renderers/shaders/DFGLUTData.js +19 -34
- package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +8 -10
- package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +0 -1
- package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +8 -12
- package/src/renderers/shaders/ShaderChunk/lightprobes_pars_fragment.glsl.js +80 -0
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +13 -2
- package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +6 -2
- package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +2 -0
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +8 -4
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +112 -53
- package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +7 -0
- package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
- package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +0 -1
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +225 -186
- package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +12 -2
- package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk.js +5 -3
- package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +1 -2
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +3 -0
- package/src/renderers/shaders/ShaderLib/{distanceRGBA.glsl.js → distance.glsl.js} +1 -2
- package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -1
- package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +1 -2
- package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -1
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -9
- package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +0 -1
- package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/vsm.glsl.js +4 -6
- package/src/renderers/shaders/ShaderLib.js +7 -6
- package/src/renderers/shaders/UniformsLib.js +7 -5
- package/src/renderers/shaders/UniformsUtils.js +27 -5
- package/src/renderers/webgl/WebGLAnimation.js +2 -1
- package/src/renderers/webgl/WebGLBackground.js +15 -15
- package/src/renderers/webgl/WebGLBindingStates.js +99 -27
- package/src/renderers/webgl/WebGLBufferRenderer.js +0 -32
- package/src/renderers/webgl/WebGLCapabilities.js +9 -4
- package/src/renderers/webgl/WebGLEnvironments.js +228 -0
- package/src/renderers/webgl/WebGLGeometries.js +10 -7
- package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +0 -32
- package/src/renderers/webgl/WebGLLights.js +18 -1
- package/src/renderers/webgl/WebGLMaterials.js +24 -13
- package/src/renderers/webgl/WebGLObjects.js +3 -1
- package/src/renderers/webgl/WebGLOutput.js +270 -0
- package/src/renderers/webgl/WebGLProgram.js +49 -109
- package/src/renderers/webgl/WebGLPrograms.js +63 -51
- package/src/renderers/webgl/WebGLRenderLists.js +15 -0
- package/src/renderers/webgl/WebGLRenderStates.js +13 -2
- package/src/renderers/webgl/WebGLShadowMap.js +188 -24
- package/src/renderers/webgl/WebGLState.js +75 -37
- package/src/renderers/webgl/WebGLTextures.js +215 -54
- package/src/renderers/webgl/WebGLUniforms.js +40 -3
- package/src/renderers/webgl/WebGLUniformsGroups.js +19 -0
- package/src/renderers/webgl/WebGLUtils.js +6 -2
- package/src/renderers/webgl-fallback/WebGLBackend.js +253 -82
- package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +0 -41
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +173 -74
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +53 -19
- package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +25 -0
- package/src/renderers/webgl-fallback/utils/WebGLState.js +223 -6
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +68 -53
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +10 -10
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +6 -2
- package/src/renderers/webgpu/WebGPUBackend.js +260 -140
- package/src/renderers/webgpu/WebGPURenderer.js +2 -1
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +366 -90
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +107 -34
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +357 -200
- package/src/renderers/webgpu/utils/WebGPUCapabilities.js +48 -0
- package/src/renderers/webgpu/utils/WebGPUConstants.js +10 -0
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +61 -23
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +152 -200
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +156 -59
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +7 -7
- package/src/renderers/webgpu/utils/WebGPUUtils.js +33 -11
- package/src/renderers/webxr/WebXRController.js +12 -0
- package/src/renderers/webxr/WebXRManager.js +4 -2
- package/src/textures/CubeDepthTexture.js +76 -0
- package/src/textures/HTMLTexture.js +74 -0
- package/src/textures/Source.js +2 -2
- package/src/textures/Texture.js +16 -5
- package/src/utils.js +280 -3
- package/examples/jsm/materials/MeshGouraudMaterial.js +0 -434
- package/examples/jsm/materials/MeshPostProcessingMaterial.js +0 -167
- package/examples/jsm/shaders/GodRaysShader.js +0 -333
- package/src/nodes/accessors/SceneNode.js +0 -145
- package/src/nodes/code/ScriptableNode.js +0 -726
- package/src/nodes/code/ScriptableValueNode.js +0 -253
- package/src/nodes/display/PosterizeNode.js +0 -65
- package/src/nodes/functions/BSDF/DFGApprox.js +0 -71
- package/src/nodes/utils/RemapNode.js +0 -125
- package/src/nodes/utils/SpriteSheetUVNode.js +0 -90
- package/src/renderers/webgl/WebGLCubeMaps.js +0 -99
- package/src/renderers/webgl/WebGLCubeUVMaps.js +0 -134
|
@@ -35,13 +35,13 @@ export default /* glsl */`
|
|
|
35
35
|
#ifdef USE_BATCHING_COLOR
|
|
36
36
|
|
|
37
37
|
uniform sampler2D batchingColorTexture;
|
|
38
|
-
|
|
38
|
+
vec4 getBatchingColor( const in float i ) {
|
|
39
39
|
|
|
40
40
|
int size = textureSize( batchingColorTexture, 0 ).x;
|
|
41
41
|
int j = int( i );
|
|
42
42
|
int x = j % size;
|
|
43
43
|
int y = j / size;
|
|
44
|
-
return texelFetch( batchingColorTexture, ivec2( x, y ), 0 )
|
|
44
|
+
return texelFetch( batchingColorTexture, ivec2( x, y ), 0 );
|
|
45
45
|
|
|
46
46
|
}
|
|
47
47
|
|
|
@@ -1,11 +1,7 @@
|
|
|
1
1
|
export default /* glsl */`
|
|
2
|
-
#if defined( USE_COLOR_ALPHA )
|
|
2
|
+
#if defined( USE_COLOR ) || defined( USE_COLOR_ALPHA ) || defined( USE_INSTANCING_COLOR ) || defined( USE_BATCHING_COLOR )
|
|
3
3
|
|
|
4
4
|
varying vec4 vColor;
|
|
5
5
|
|
|
6
|
-
#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR ) || defined( USE_BATCHING_COLOR )
|
|
7
|
-
|
|
8
|
-
varying vec3 vColor;
|
|
9
|
-
|
|
10
6
|
#endif
|
|
11
7
|
`;
|
|
@@ -1,31 +1,29 @@
|
|
|
1
1
|
export default /* glsl */`
|
|
2
|
-
#if defined( USE_COLOR_ALPHA )
|
|
2
|
+
#if defined( USE_COLOR ) || defined( USE_COLOR_ALPHA ) || defined( USE_INSTANCING_COLOR ) || defined( USE_BATCHING_COLOR )
|
|
3
3
|
|
|
4
4
|
vColor = vec4( 1.0 );
|
|
5
5
|
|
|
6
|
-
#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR ) || defined( USE_BATCHING_COLOR )
|
|
7
|
-
|
|
8
|
-
vColor = vec3( 1.0 );
|
|
9
|
-
|
|
10
6
|
#endif
|
|
11
7
|
|
|
12
|
-
#ifdef
|
|
8
|
+
#ifdef USE_COLOR_ALPHA
|
|
13
9
|
|
|
14
10
|
vColor *= color;
|
|
15
11
|
|
|
12
|
+
#elif defined( USE_COLOR )
|
|
13
|
+
|
|
14
|
+
vColor.rgb *= color;
|
|
15
|
+
|
|
16
16
|
#endif
|
|
17
17
|
|
|
18
18
|
#ifdef USE_INSTANCING_COLOR
|
|
19
19
|
|
|
20
|
-
vColor.
|
|
20
|
+
vColor.rgb *= instanceColor.rgb;
|
|
21
21
|
|
|
22
22
|
#endif
|
|
23
23
|
|
|
24
24
|
#ifdef USE_BATCHING_COLOR
|
|
25
25
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
vColor.xyz *= batchingColor.xyz;
|
|
26
|
+
vColor *= getBatchingColor( getIndirectIndex( gl_DrawID ) );
|
|
29
27
|
|
|
30
28
|
#endif
|
|
31
29
|
`;
|
|
@@ -36,25 +36,21 @@ export default /* glsl */`
|
|
|
36
36
|
|
|
37
37
|
#ifdef ENVMAP_TYPE_CUBE
|
|
38
38
|
|
|
39
|
-
vec4 envColor = textureCube( envMap, envMapRotation *
|
|
39
|
+
vec4 envColor = textureCube( envMap, envMapRotation * reflectVec );
|
|
40
40
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
vec4 envColor = vec4( 0.0 );
|
|
41
|
+
#ifdef ENVMAP_BLENDING_MULTIPLY
|
|
44
42
|
|
|
45
|
-
|
|
43
|
+
outgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );
|
|
46
44
|
|
|
47
|
-
|
|
45
|
+
#elif defined( ENVMAP_BLENDING_MIX )
|
|
48
46
|
|
|
49
|
-
|
|
47
|
+
outgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );
|
|
50
48
|
|
|
51
|
-
|
|
49
|
+
#elif defined( ENVMAP_BLENDING_ADD )
|
|
52
50
|
|
|
53
|
-
|
|
51
|
+
outgoingLight += envColor.xyz * specularStrength * reflectivity;
|
|
54
52
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
outgoingLight += envColor.xyz * specularStrength * reflectivity;
|
|
53
|
+
#endif
|
|
58
54
|
|
|
59
55
|
#endif
|
|
60
56
|
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
export default /* glsl */`
|
|
2
|
+
#ifdef USE_LIGHT_PROBES_GRID
|
|
3
|
+
|
|
4
|
+
// Single atlas 3D texture that stores all 7 SH sub-volumes stacked along Z.
|
|
5
|
+
// Atlas depth = 7 * ( nz + 2 ) where nz = probesResolution.z.
|
|
6
|
+
// Each sub-volume occupies ( nz + 2 ) slices: 1 padding + nz data + 1 padding.
|
|
7
|
+
// Padding is a copy of the first / last data slice and prevents color bleeding
|
|
8
|
+
// when the hardware linear filter reads across a sub-volume boundary.
|
|
9
|
+
uniform highp sampler3D probesSH;
|
|
10
|
+
|
|
11
|
+
uniform vec3 probesMin;
|
|
12
|
+
uniform vec3 probesMax;
|
|
13
|
+
uniform vec3 probesResolution;
|
|
14
|
+
|
|
15
|
+
vec3 getLightProbeGridIrradiance( vec3 worldPos, vec3 worldNormal ) {
|
|
16
|
+
|
|
17
|
+
vec3 res = probesResolution;
|
|
18
|
+
vec3 gridRange = probesMax - probesMin;
|
|
19
|
+
vec3 resMinusOne = res - 1.0;
|
|
20
|
+
vec3 probeSpacing = gridRange / resMinusOne;
|
|
21
|
+
|
|
22
|
+
// Offset sample position along normal by half a probe spacing
|
|
23
|
+
vec3 samplePos = worldPos + worldNormal * probeSpacing * 0.5;
|
|
24
|
+
vec3 uvw = clamp( ( samplePos - probesMin ) / gridRange, 0.0, 1.0 );
|
|
25
|
+
|
|
26
|
+
// Remap to texel centers of the probe grid (XY and Z)
|
|
27
|
+
uvw = uvw * resMinusOne / res + 0.5 / res;
|
|
28
|
+
|
|
29
|
+
// Atlas UV mapping along Z:
|
|
30
|
+
// paddedSlices = nz + 2 (1 padding texel at each end of every sub-volume)
|
|
31
|
+
// atlasDepth = 7 * paddedSlices
|
|
32
|
+
// For sub-volume t the first DATA texel sits at atlas slice t*paddedSlices + 1.
|
|
33
|
+
// Given probe-grid texel-centre UVZ = ( iz + 0.5 ) / nz the atlas UV is:
|
|
34
|
+
// atlasUvZ = ( uvw.z * nz + t * paddedSlices + 1 ) / atlasDepth
|
|
35
|
+
//
|
|
36
|
+
// uvZBase encodes the nz-scaled Z plus the intra-volume offset (+ 1 for padding),
|
|
37
|
+
// so adding t*paddedSlices steps to each successive sub-volume.
|
|
38
|
+
float nz = res.z;
|
|
39
|
+
float paddedSlices = nz + 2.0;
|
|
40
|
+
float atlasDepth = 7.0 * paddedSlices;
|
|
41
|
+
float uvZBase = uvw.z * nz + 1.0;
|
|
42
|
+
|
|
43
|
+
vec4 s0 = texture( probesSH, vec3( uvw.xy, ( uvZBase ) / atlasDepth ) );
|
|
44
|
+
vec4 s1 = texture( probesSH, vec3( uvw.xy, ( uvZBase + paddedSlices ) / atlasDepth ) );
|
|
45
|
+
vec4 s2 = texture( probesSH, vec3( uvw.xy, ( uvZBase + 2.0 * paddedSlices ) / atlasDepth ) );
|
|
46
|
+
vec4 s3 = texture( probesSH, vec3( uvw.xy, ( uvZBase + 3.0 * paddedSlices ) / atlasDepth ) );
|
|
47
|
+
vec4 s4 = texture( probesSH, vec3( uvw.xy, ( uvZBase + 4.0 * paddedSlices ) / atlasDepth ) );
|
|
48
|
+
vec4 s5 = texture( probesSH, vec3( uvw.xy, ( uvZBase + 5.0 * paddedSlices ) / atlasDepth ) );
|
|
49
|
+
vec4 s6 = texture( probesSH, vec3( uvw.xy, ( uvZBase + 6.0 * paddedSlices ) / atlasDepth ) );
|
|
50
|
+
|
|
51
|
+
// Unpack 9 vec3 SH L2 coefficients
|
|
52
|
+
vec3 c0 = s0.xyz;
|
|
53
|
+
vec3 c1 = vec3( s0.w, s1.xy );
|
|
54
|
+
vec3 c2 = vec3( s1.zw, s2.x );
|
|
55
|
+
vec3 c3 = s2.yzw;
|
|
56
|
+
vec3 c4 = s3.xyz;
|
|
57
|
+
vec3 c5 = vec3( s3.w, s4.xy );
|
|
58
|
+
vec3 c6 = vec3( s4.zw, s5.x );
|
|
59
|
+
vec3 c7 = s5.yzw;
|
|
60
|
+
vec3 c8 = s6.xyz;
|
|
61
|
+
|
|
62
|
+
// Evaluate L2 irradiance
|
|
63
|
+
float x = worldNormal.x, y = worldNormal.y, z = worldNormal.z;
|
|
64
|
+
|
|
65
|
+
vec3 result = c0 * 0.886227;
|
|
66
|
+
result += c1 * 2.0 * 0.511664 * y;
|
|
67
|
+
result += c2 * 2.0 * 0.511664 * z;
|
|
68
|
+
result += c3 * 2.0 * 0.511664 * x;
|
|
69
|
+
result += c4 * 2.0 * 0.429043 * x * y;
|
|
70
|
+
result += c5 * 2.0 * 0.429043 * y * z;
|
|
71
|
+
result += c6 * ( 0.743125 * z * z - 0.247708 );
|
|
72
|
+
result += c7 * 2.0 * 0.429043 * x * z;
|
|
73
|
+
result += c8 * 0.429043 * ( x * x - y * y );
|
|
74
|
+
|
|
75
|
+
return max( result, vec3( 0.0 ) );
|
|
76
|
+
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
#endif
|
|
80
|
+
`;
|
|
@@ -41,7 +41,10 @@ vec3 geometryClearcoatNormal = vec3( 0.0 );
|
|
|
41
41
|
|
|
42
42
|
if ( material.iridescence > 0.0 ) {
|
|
43
43
|
|
|
44
|
-
material.
|
|
44
|
+
material.iridescenceFresnelDielectric = evalIridescence( 1.0, material.iridescenceIOR, dotNVi, material.iridescenceThickness, material.specularColor );
|
|
45
|
+
material.iridescenceFresnelMetallic = evalIridescence( 1.0, material.iridescenceIOR, dotNVi, material.iridescenceThickness, material.diffuseColor );
|
|
46
|
+
|
|
47
|
+
material.iridescenceFresnel = mix( material.iridescenceFresnelDielectric, material.iridescenceFresnelMetallic, material.metalness );
|
|
45
48
|
|
|
46
49
|
// Iridescence F0 approximation
|
|
47
50
|
material.iridescenceF0 = Schlick_to_F0( material.iridescenceFresnel, 1.0, dotNVi );
|
|
@@ -66,7 +69,7 @@ IncidentLight directLight;
|
|
|
66
69
|
|
|
67
70
|
getPointLightInfo( pointLight, geometryPosition, directLight );
|
|
68
71
|
|
|
69
|
-
#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )
|
|
72
|
+
#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS ) && ( defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_BASIC ) )
|
|
70
73
|
pointLightShadow = pointLightShadows[ i ];
|
|
71
74
|
directLight.color *= ( directLight.visible && receiveShadow ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowIntensity, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;
|
|
72
75
|
#endif
|
|
@@ -191,6 +194,14 @@ IncidentLight directLight;
|
|
|
191
194
|
|
|
192
195
|
#endif
|
|
193
196
|
|
|
197
|
+
#ifdef USE_LIGHT_PROBES_GRID
|
|
198
|
+
|
|
199
|
+
vec3 probeWorldPos = ( ( vec4( geometryPosition, 1.0 ) - viewMatrix[ 3 ] ) * viewMatrix ).xyz;
|
|
200
|
+
vec3 probeWorldNormal = inverseTransformDirection( geometryNormal, viewMatrix );
|
|
201
|
+
irradiance += getLightProbeGridIrradiance( probeWorldPos, probeWorldNormal );
|
|
202
|
+
|
|
203
|
+
#endif
|
|
204
|
+
|
|
194
205
|
#endif
|
|
195
206
|
|
|
196
207
|
#if defined( RE_IndirectSpecular )
|
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
export default /* glsl */`
|
|
2
2
|
#if defined( RE_IndirectDiffuse )
|
|
3
3
|
|
|
4
|
+
#if defined( LAMBERT ) || defined( PHONG )
|
|
5
|
+
|
|
6
|
+
irradiance += iblIrradiance;
|
|
7
|
+
|
|
8
|
+
#endif
|
|
9
|
+
|
|
4
10
|
RE_IndirectDiffuse( irradiance, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );
|
|
5
11
|
|
|
6
12
|
#endif
|
|
@@ -10,9 +10,13 @@ export default /* glsl */`
|
|
|
10
10
|
|
|
11
11
|
#endif
|
|
12
12
|
|
|
13
|
-
#if defined( USE_ENVMAP ) && defined(
|
|
13
|
+
#if defined( USE_ENVMAP ) && defined( ENVMAP_TYPE_CUBE_UV )
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
#if defined( STANDARD ) || defined( LAMBERT ) || defined( PHONG )
|
|
16
|
+
|
|
17
|
+
iblIrradiance += getIBLIrradiance( geometryNormal );
|
|
18
|
+
|
|
19
|
+
#endif
|
|
16
20
|
|
|
17
21
|
#endif
|
|
18
22
|
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
export default /* glsl */`
|
|
2
2
|
PhysicalMaterial material;
|
|
3
|
-
material.diffuseColor = diffuseColor.rgb
|
|
3
|
+
material.diffuseColor = diffuseColor.rgb;
|
|
4
|
+
material.diffuseContribution = diffuseColor.rgb * ( 1.0 - metalnessFactor );
|
|
5
|
+
material.metalness = metalnessFactor;
|
|
4
6
|
|
|
5
7
|
vec3 dxy = max( abs( dFdx( nonPerturbedNormal ) ), abs( dFdy( nonPerturbedNormal ) ) );
|
|
6
8
|
float geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );
|
|
@@ -40,11 +42,13 @@ material.roughness = min( material.roughness, 1.0 );
|
|
|
40
42
|
|
|
41
43
|
#endif
|
|
42
44
|
|
|
43
|
-
material.specularColor =
|
|
45
|
+
material.specularColor = min( pow2( ( material.ior - 1.0 ) / ( material.ior + 1.0 ) ) * specularColorFactor, vec3( 1.0 ) ) * specularIntensityFactor;
|
|
46
|
+
material.specularColorBlended = mix( material.specularColor, diffuseColor.rgb, metalnessFactor );
|
|
44
47
|
|
|
45
48
|
#else
|
|
46
49
|
|
|
47
|
-
material.specularColor =
|
|
50
|
+
material.specularColor = vec3( 0.04 );
|
|
51
|
+
material.specularColorBlended = mix( material.specularColor, diffuseColor.rgb, metalnessFactor );
|
|
48
52
|
material.specularF90 = 1.0;
|
|
49
53
|
|
|
50
54
|
#endif
|
|
@@ -114,7 +118,7 @@ material.roughness = min( material.roughness, 1.0 );
|
|
|
114
118
|
|
|
115
119
|
#endif
|
|
116
120
|
|
|
117
|
-
material.sheenRoughness = clamp( sheenRoughness, 0.
|
|
121
|
+
material.sheenRoughness = clamp( sheenRoughness, 0.0001, 1.0 );
|
|
118
122
|
|
|
119
123
|
#ifdef USE_SHEEN_ROUGHNESSMAP
|
|
120
124
|
|
|
@@ -5,8 +5,12 @@ uniform sampler2D dfgLUT;
|
|
|
5
5
|
struct PhysicalMaterial {
|
|
6
6
|
|
|
7
7
|
vec3 diffuseColor;
|
|
8
|
-
|
|
8
|
+
vec3 diffuseContribution;
|
|
9
9
|
vec3 specularColor;
|
|
10
|
+
vec3 specularColorBlended;
|
|
11
|
+
|
|
12
|
+
float roughness;
|
|
13
|
+
float metalness;
|
|
10
14
|
float specularF90;
|
|
11
15
|
float dispersion;
|
|
12
16
|
|
|
@@ -23,6 +27,8 @@ struct PhysicalMaterial {
|
|
|
23
27
|
float iridescenceThickness;
|
|
24
28
|
vec3 iridescenceFresnel;
|
|
25
29
|
vec3 iridescenceF0;
|
|
30
|
+
vec3 iridescenceFresnelDielectric;
|
|
31
|
+
vec3 iridescenceFresnelMetallic;
|
|
26
32
|
#endif
|
|
27
33
|
|
|
28
34
|
#ifdef USE_SHEEN
|
|
@@ -70,7 +76,6 @@ vec3 Schlick_to_F0( const in vec3 f, const in float f90, const in float dotVH )
|
|
|
70
76
|
float V_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {
|
|
71
77
|
|
|
72
78
|
float a2 = pow2( alpha );
|
|
73
|
-
|
|
74
79
|
float gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );
|
|
75
80
|
float gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );
|
|
76
81
|
|
|
@@ -98,9 +103,7 @@ float D_GGX( const in float alpha, const in float dotNH ) {
|
|
|
98
103
|
|
|
99
104
|
float gv = dotNL * length( vec3( alphaT * dotTV, alphaB * dotBV, dotNV ) );
|
|
100
105
|
float gl = dotNV * length( vec3( alphaT * dotTL, alphaB * dotBL, dotNL ) );
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
return saturate(v);
|
|
106
|
+
return 0.5 / max( gv + gl, EPSILON );
|
|
104
107
|
|
|
105
108
|
}
|
|
106
109
|
|
|
@@ -149,7 +152,7 @@ float D_GGX( const in float alpha, const in float dotNH ) {
|
|
|
149
152
|
|
|
150
153
|
vec3 BRDF_GGX( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in PhysicalMaterial material ) {
|
|
151
154
|
|
|
152
|
-
vec3 f0 = material.
|
|
155
|
+
vec3 f0 = material.specularColorBlended;
|
|
153
156
|
float f90 = material.specularF90;
|
|
154
157
|
float roughness = material.roughness;
|
|
155
158
|
|
|
@@ -354,39 +357,27 @@ vec3 BRDF_Sheen( const in vec3 lightDir, const in vec3 viewDir, const in vec3 no
|
|
|
354
357
|
#endif
|
|
355
358
|
|
|
356
359
|
// This is a curve-fit approximation to the "Charlie sheen" BRDF integrated over the hemisphere from
|
|
357
|
-
// Estevez and Kulla 2017, "Production Friendly Microfacet Sheen BRDF".
|
|
358
|
-
// in the Sheen section of https://drive.google.com/file/d/1T0D1VSyR4AllqIJTQAraEIzjlb5h4FKH/view?usp=sharing
|
|
360
|
+
// Estevez and Kulla 2017, "Production Friendly Microfacet Sheen BRDF".
|
|
359
361
|
float IBLSheenBRDF( const in vec3 normal, const in vec3 viewDir, const in float roughness ) {
|
|
360
362
|
|
|
361
363
|
float dotNV = saturate( dot( normal, viewDir ) );
|
|
362
364
|
|
|
363
365
|
float r2 = roughness * roughness;
|
|
366
|
+
float rInv = 1.0 / ( roughness + 0.1 );
|
|
364
367
|
|
|
365
|
-
float a =
|
|
366
|
-
|
|
367
|
-
float b = roughness < 0.25 ? 44.0 * r2 - 23.7 * roughness + 3.26 : 1.97 * r2 - 3.27 * roughness + 0.72;
|
|
368
|
+
float a = -1.9362 + 1.0678 * roughness + 0.4573 * r2 - 0.8469 * rInv;
|
|
369
|
+
float b = -0.6014 + 0.5538 * roughness - 0.4670 * r2 - 0.1255 * rInv;
|
|
368
370
|
|
|
369
|
-
float DG = exp( a * dotNV + b )
|
|
371
|
+
float DG = exp( a * dotNV + b );
|
|
370
372
|
|
|
371
|
-
return saturate( DG
|
|
372
|
-
|
|
373
|
-
}
|
|
374
|
-
|
|
375
|
-
// DFG LUT sampling for physically-based rendering.
|
|
376
|
-
// Uses a precomputed lookup table for the split-sum approximation
|
|
377
|
-
// used in indirect specular lighting.
|
|
378
|
-
// Reference: "Real Shading in Unreal Engine 4" by Brian Karis
|
|
379
|
-
vec2 DFGApprox( const in vec3 normal, const in vec3 viewDir, const in float roughness ) {
|
|
380
|
-
|
|
381
|
-
float dotNV = saturate( dot( normal, viewDir ) );
|
|
382
|
-
vec2 uv = vec2( roughness, dotNV );
|
|
383
|
-
return texture2D( dfgLUT, uv ).rg;
|
|
373
|
+
return saturate( DG );
|
|
384
374
|
|
|
385
375
|
}
|
|
386
376
|
|
|
387
377
|
vec3 EnvironmentBRDF( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness ) {
|
|
388
378
|
|
|
389
|
-
|
|
379
|
+
float dotNV = saturate( dot( normal, viewDir ) );
|
|
380
|
+
vec2 fab = texture2D( dfgLUT, vec2( roughness, dotNV ) ).rg;
|
|
390
381
|
|
|
391
382
|
return specularColor * fab.x + specularF90 * fab.y;
|
|
392
383
|
|
|
@@ -401,7 +392,8 @@ void computeMultiscatteringIridescence( const in vec3 normal, const in vec3 view
|
|
|
401
392
|
void computeMultiscattering( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {
|
|
402
393
|
#endif
|
|
403
394
|
|
|
404
|
-
|
|
395
|
+
float dotNV = saturate( dot( normal, viewDir ) );
|
|
396
|
+
vec2 fab = texture2D( dfgLUT, vec2( roughness, dotNV ) ).rg;
|
|
405
397
|
|
|
406
398
|
#ifdef USE_IRIDESCENCE
|
|
407
399
|
|
|
@@ -439,12 +431,12 @@ vec3 BRDF_GGX_Multiscatter( const in vec3 lightDir, const in vec3 viewDir, const
|
|
|
439
431
|
float dotNV = saturate( dot( normal, viewDir ) );
|
|
440
432
|
|
|
441
433
|
// Precomputed DFG values for view and light directions
|
|
442
|
-
vec2 dfgV =
|
|
443
|
-
vec2 dfgL =
|
|
434
|
+
vec2 dfgV = texture2D( dfgLUT, vec2( material.roughness, dotNV ) ).rg;
|
|
435
|
+
vec2 dfgL = texture2D( dfgLUT, vec2( material.roughness, dotNL ) ).rg;
|
|
444
436
|
|
|
445
437
|
// Single-scattering energy for view and light
|
|
446
|
-
vec3 FssEss_V = material.
|
|
447
|
-
vec3 FssEss_L = material.
|
|
438
|
+
vec3 FssEss_V = material.specularColorBlended * dfgV.x + material.specularF90 * dfgV.y;
|
|
439
|
+
vec3 FssEss_L = material.specularColorBlended * dfgL.x + material.specularF90 * dfgL.y;
|
|
448
440
|
|
|
449
441
|
float Ess_V = dfgV.x + dfgV.y;
|
|
450
442
|
float Ess_L = dfgL.x + dfgL.y;
|
|
@@ -454,10 +446,10 @@ vec3 BRDF_GGX_Multiscatter( const in vec3 lightDir, const in vec3 viewDir, const
|
|
|
454
446
|
float Ems_L = 1.0 - Ess_L;
|
|
455
447
|
|
|
456
448
|
// Average Fresnel reflectance
|
|
457
|
-
vec3 Favg = material.
|
|
449
|
+
vec3 Favg = material.specularColorBlended + ( 1.0 - material.specularColorBlended ) * 0.047619; // 1/21
|
|
458
450
|
|
|
459
451
|
// Multiple scattering contribution
|
|
460
|
-
vec3 Fms = FssEss_V * FssEss_L * Favg / ( 1.0 - Ems_V * Ems_L * Favg
|
|
452
|
+
vec3 Fms = FssEss_V * FssEss_L * Favg / ( 1.0 - Ems_V * Ems_L * Favg + EPSILON );
|
|
461
453
|
|
|
462
454
|
// Energy compensation factor
|
|
463
455
|
float compensationFactor = Ems_V * Ems_L;
|
|
@@ -500,11 +492,33 @@ vec3 BRDF_GGX_Multiscatter( const in vec3 lightDir, const in vec3 viewDir, const
|
|
|
500
492
|
|
|
501
493
|
// LTC Fresnel Approximation by Stephen Hill
|
|
502
494
|
// http://blog.selfshadow.com/publications/s2016-advances/s2016_ltc_fresnel.pdf
|
|
503
|
-
vec3 fresnel = ( material.
|
|
495
|
+
vec3 fresnel = ( material.specularColorBlended * t2.x + ( material.specularF90 - material.specularColorBlended ) * t2.y );
|
|
504
496
|
|
|
505
497
|
reflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );
|
|
506
498
|
|
|
507
|
-
reflectedLight.directDiffuse += lightColor * material.
|
|
499
|
+
reflectedLight.directDiffuse += lightColor * material.diffuseContribution * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );
|
|
500
|
+
|
|
501
|
+
#ifdef USE_CLEARCOAT
|
|
502
|
+
|
|
503
|
+
vec3 Ncc = geometryClearcoatNormal;
|
|
504
|
+
|
|
505
|
+
vec2 uvClearcoat = LTC_Uv( Ncc, viewDir, material.clearcoatRoughness );
|
|
506
|
+
|
|
507
|
+
vec4 t1Clearcoat = texture2D( ltc_1, uvClearcoat );
|
|
508
|
+
vec4 t2Clearcoat = texture2D( ltc_2, uvClearcoat );
|
|
509
|
+
|
|
510
|
+
mat3 mInvClearcoat = mat3(
|
|
511
|
+
vec3( t1Clearcoat.x, 0, t1Clearcoat.y ),
|
|
512
|
+
vec3( 0, 1, 0 ),
|
|
513
|
+
vec3( t1Clearcoat.z, 0, t1Clearcoat.w )
|
|
514
|
+
);
|
|
515
|
+
|
|
516
|
+
// LTC Fresnel Approximation for clearcoat
|
|
517
|
+
vec3 fresnelClearcoat = material.clearcoatF0 * t2Clearcoat.x + ( material.clearcoatF90 - material.clearcoatF0 ) * t2Clearcoat.y;
|
|
518
|
+
|
|
519
|
+
clearcoatSpecularDirect += lightColor * fresnelClearcoat * LTC_Evaluate( Ncc, viewDir, position, mInvClearcoat, rectCoords );
|
|
520
|
+
|
|
521
|
+
#endif
|
|
508
522
|
|
|
509
523
|
}
|
|
510
524
|
|
|
@@ -527,19 +541,38 @@ void RE_Direct_Physical( const in IncidentLight directLight, const in vec3 geome
|
|
|
527
541
|
#endif
|
|
528
542
|
|
|
529
543
|
#ifdef USE_SHEEN
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
544
|
+
|
|
545
|
+
sheenSpecularDirect += irradiance * BRDF_Sheen( directLight.direction, geometryViewDir, geometryNormal, material.sheenColor, material.sheenRoughness );
|
|
546
|
+
|
|
547
|
+
float sheenAlbedoV = IBLSheenBRDF( geometryNormal, geometryViewDir, material.sheenRoughness );
|
|
548
|
+
float sheenAlbedoL = IBLSheenBRDF( geometryNormal, directLight.direction, material.sheenRoughness );
|
|
549
|
+
|
|
550
|
+
float sheenEnergyComp = 1.0 - max3( material.sheenColor ) * max( sheenAlbedoV, sheenAlbedoL );
|
|
551
|
+
|
|
552
|
+
irradiance *= sheenEnergyComp;
|
|
553
|
+
|
|
554
|
+
#endif
|
|
534
555
|
|
|
535
556
|
reflectedLight.directSpecular += irradiance * BRDF_GGX_Multiscatter( directLight.direction, geometryViewDir, geometryNormal, material );
|
|
536
557
|
|
|
537
|
-
reflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.
|
|
558
|
+
reflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseContribution );
|
|
538
559
|
}
|
|
539
560
|
|
|
540
561
|
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 ) {
|
|
541
562
|
|
|
542
|
-
|
|
563
|
+
vec3 diffuse = irradiance * BRDF_Lambert( material.diffuseContribution );
|
|
564
|
+
|
|
565
|
+
#ifdef USE_SHEEN
|
|
566
|
+
|
|
567
|
+
float sheenAlbedo = IBLSheenBRDF( geometryNormal, geometryViewDir, material.sheenRoughness );
|
|
568
|
+
|
|
569
|
+
float sheenEnergyComp = 1.0 - max3( material.sheenColor ) * sheenAlbedo;
|
|
570
|
+
|
|
571
|
+
diffuse *= sheenEnergyComp;
|
|
572
|
+
|
|
573
|
+
#endif
|
|
574
|
+
|
|
575
|
+
reflectedLight.indirectDiffuse += diffuse;
|
|
543
576
|
|
|
544
577
|
}
|
|
545
578
|
|
|
@@ -553,33 +586,59 @@ void RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradia
|
|
|
553
586
|
|
|
554
587
|
#ifdef USE_SHEEN
|
|
555
588
|
|
|
556
|
-
sheenSpecularIndirect += irradiance * material.sheenColor * IBLSheenBRDF( geometryNormal, geometryViewDir, material.sheenRoughness );
|
|
589
|
+
sheenSpecularIndirect += irradiance * material.sheenColor * IBLSheenBRDF( geometryNormal, geometryViewDir, material.sheenRoughness ) * RECIPROCAL_PI;
|
|
557
590
|
|
|
558
|
-
|
|
591
|
+
#endif
|
|
559
592
|
|
|
560
593
|
// Both indirect specular and indirect diffuse light accumulate here
|
|
594
|
+
// Compute multiscattering separately for dielectric and metallic, then mix
|
|
561
595
|
|
|
562
|
-
vec3
|
|
563
|
-
vec3
|
|
564
|
-
|
|
596
|
+
vec3 singleScatteringDielectric = vec3( 0.0 );
|
|
597
|
+
vec3 multiScatteringDielectric = vec3( 0.0 );
|
|
598
|
+
|
|
599
|
+
vec3 singleScatteringMetallic = vec3( 0.0 );
|
|
600
|
+
vec3 multiScatteringMetallic = vec3( 0.0 );
|
|
565
601
|
|
|
566
602
|
#ifdef USE_IRIDESCENCE
|
|
567
603
|
|
|
568
|
-
computeMultiscatteringIridescence( geometryNormal, geometryViewDir, material.specularColor, material.specularF90, material.iridescence, material.
|
|
604
|
+
computeMultiscatteringIridescence( geometryNormal, geometryViewDir, material.specularColor, material.specularF90, material.iridescence, material.iridescenceFresnelDielectric, material.roughness, singleScatteringDielectric, multiScatteringDielectric );
|
|
605
|
+
computeMultiscatteringIridescence( geometryNormal, geometryViewDir, material.diffuseColor, material.specularF90, material.iridescence, material.iridescenceFresnelMetallic, material.roughness, singleScatteringMetallic, multiScatteringMetallic );
|
|
569
606
|
|
|
570
607
|
#else
|
|
571
608
|
|
|
572
|
-
computeMultiscattering( geometryNormal, geometryViewDir, material.specularColor, material.specularF90, material.roughness,
|
|
609
|
+
computeMultiscattering( geometryNormal, geometryViewDir, material.specularColor, material.specularF90, material.roughness, singleScatteringDielectric, multiScatteringDielectric );
|
|
610
|
+
computeMultiscattering( geometryNormal, geometryViewDir, material.diffuseColor, material.specularF90, material.roughness, singleScatteringMetallic, multiScatteringMetallic );
|
|
573
611
|
|
|
574
612
|
#endif
|
|
575
613
|
|
|
576
|
-
|
|
577
|
-
vec3
|
|
614
|
+
// Mix based on metalness
|
|
615
|
+
vec3 singleScattering = mix( singleScatteringDielectric, singleScatteringMetallic, material.metalness );
|
|
616
|
+
vec3 multiScattering = mix( multiScatteringDielectric, multiScatteringMetallic, material.metalness );
|
|
578
617
|
|
|
579
|
-
|
|
580
|
-
|
|
618
|
+
// Diffuse energy conservation uses dielectric path
|
|
619
|
+
vec3 totalScatteringDielectric = singleScatteringDielectric + multiScatteringDielectric;
|
|
620
|
+
vec3 diffuse = material.diffuseContribution * ( 1.0 - totalScatteringDielectric );
|
|
621
|
+
|
|
622
|
+
vec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;
|
|
623
|
+
|
|
624
|
+
vec3 indirectSpecular = radiance * singleScattering;
|
|
625
|
+
indirectSpecular += multiScattering * cosineWeightedIrradiance;
|
|
626
|
+
|
|
627
|
+
vec3 indirectDiffuse = diffuse * cosineWeightedIrradiance;
|
|
628
|
+
|
|
629
|
+
#ifdef USE_SHEEN
|
|
630
|
+
|
|
631
|
+
float sheenAlbedo = IBLSheenBRDF( geometryNormal, geometryViewDir, material.sheenRoughness );
|
|
632
|
+
|
|
633
|
+
float sheenEnergyComp = 1.0 - max3( material.sheenColor ) * sheenAlbedo;
|
|
634
|
+
|
|
635
|
+
indirectSpecular *= sheenEnergyComp;
|
|
636
|
+
indirectDiffuse *= sheenEnergyComp;
|
|
637
|
+
|
|
638
|
+
#endif
|
|
581
639
|
|
|
582
|
-
reflectedLight.
|
|
640
|
+
reflectedLight.indirectSpecular += indirectSpecular;
|
|
641
|
+
reflectedLight.indirectDiffuse += indirectDiffuse;
|
|
583
642
|
|
|
584
643
|
}
|
|
585
644
|
|
|
@@ -21,6 +21,13 @@ export default /* glsl */`
|
|
|
21
21
|
#elif defined( USE_NORMALMAP_TANGENTSPACE )
|
|
22
22
|
|
|
23
23
|
vec3 mapN = texture2D( normalMap, vNormalMapUv ).xyz * 2.0 - 1.0;
|
|
24
|
+
|
|
25
|
+
#if defined( USE_PACKED_NORMALMAP )
|
|
26
|
+
|
|
27
|
+
mapN = vec3( mapN.xy, sqrt( saturate( 1.0 - dot( mapN.xy, mapN.xy ) ) ) );
|
|
28
|
+
|
|
29
|
+
#endif
|
|
30
|
+
|
|
24
31
|
mapN.xy *= normalScale;
|
|
25
32
|
|
|
26
33
|
normal = normalize( tbn * mapN );
|