@plastic-software/three 0.181.3 → 0.183.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 +11330 -10017
- package/build/three.core.js +10011 -9493
- package/build/three.core.min.js +2 -2
- package/build/three.module.js +1414 -631
- package/build/three.module.min.js +2 -2
- package/build/three.tsl.js +21 -13
- package/build/three.tsl.min.js +2 -2
- package/build/three.webgpu.js +8007 -5427
- package/build/three.webgpu.min.js +2 -2
- package/build/three.webgpu.nodes.js +8005 -5426
- package/build/three.webgpu.nodes.min.js +2 -2
- package/examples/jsm/Addons.js +0 -3
- package/examples/jsm/animation/CCDIKSolver.js +2 -2
- package/examples/jsm/controls/ArcballControls.js +3 -3
- package/examples/jsm/controls/MapControls.js +55 -1
- package/examples/jsm/controls/OrbitControls.js +109 -6
- package/examples/jsm/controls/TrackballControls.js +6 -6
- package/examples/jsm/csm/CSM.js +2 -1
- 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 +131 -4
- package/examples/jsm/exporters/USDZExporter.js +22 -3
- package/examples/jsm/geometries/DecalGeometry.js +1 -1
- package/examples/jsm/helpers/AnimationPathHelper.js +302 -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/Inspector.js +74 -14
- package/examples/jsm/inspector/RendererInspector.js +12 -2
- package/examples/jsm/inspector/tabs/Console.js +41 -7
- package/examples/jsm/inspector/tabs/Parameters.js +18 -2
- package/examples/jsm/inspector/tabs/Performance.js +2 -2
- package/examples/jsm/inspector/tabs/Viewer.js +4 -4
- package/examples/jsm/inspector/ui/Profiler.js +1836 -31
- package/examples/jsm/inspector/ui/Style.js +973 -14
- package/examples/jsm/inspector/ui/Tab.js +188 -1
- package/examples/jsm/inspector/ui/Values.js +17 -1
- package/examples/jsm/libs/meshopt_decoder.module.js +6 -5
- package/examples/jsm/lines/LineMaterial.js +6 -0
- 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 +5 -5
- package/examples/jsm/loaders/FBXLoader.js +2 -4
- package/examples/jsm/loaders/GCodeLoader.js +34 -8
- package/examples/jsm/loaders/GLTFLoader.js +122 -171
- package/examples/jsm/loaders/HDRLoader.js +0 -1
- package/examples/jsm/loaders/KMZLoader.js +5 -5
- package/examples/jsm/loaders/KTX2Loader.js +19 -3
- package/examples/jsm/loaders/LDrawLoader.js +2 -3
- 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 +1 -1
- 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 +37 -24
- package/examples/jsm/loaders/collada/ColladaComposer.js +2950 -0
- package/examples/jsm/loaders/collada/ColladaParser.js +1962 -0
- package/examples/jsm/loaders/usd/USDAParser.js +447 -366
- package/examples/jsm/loaders/usd/USDCParser.js +1841 -6
- package/examples/jsm/loaders/usd/USDComposer.js +4041 -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/Volume.js +0 -1
- package/examples/jsm/misc/VolumeSlice.js +0 -1
- package/examples/jsm/objects/LensflareMesh.js +1 -1
- package/examples/jsm/objects/Sky.js +76 -4
- package/examples/jsm/objects/SkyMesh.js +127 -10
- 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 +268 -30
- package/examples/jsm/renderers/SVGRenderer.js +193 -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 +61 -4
- 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/display/AfterImageNode.js +1 -1
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +458 -16
- package/examples/jsm/tsl/display/AnamorphicNode.js +1 -1
- package/examples/jsm/tsl/display/BilateralBlurNode.js +364 -0
- package/examples/jsm/tsl/display/BloomNode.js +16 -6
- package/examples/jsm/tsl/display/CRT.js +150 -0
- 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/FXAANode.js +2 -2
- package/examples/jsm/tsl/display/GTAONode.js +5 -4
- package/examples/jsm/tsl/display/GaussianBlurNode.js +11 -2
- package/examples/jsm/tsl/display/GodraysNode.js +624 -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 +3 -3
- 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 -20
- 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/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/TRAANode.js +273 -125
- 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/math/Bayer.js +40 -1
- 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/WebGPUTextureUtils.js +1 -1
- package/package.json +20 -26
- package/src/Three.Core.js +2 -1
- package/src/Three.TSL.js +19 -11
- package/src/Three.WebGPU.Nodes.js +2 -0
- package/src/Three.WebGPU.js +3 -0
- package/src/Three.js +1 -0
- package/src/animation/AnimationAction.js +1 -1
- 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/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/BufferGeometry.js +14 -2
- package/src/core/Clock.js +7 -0
- package/src/core/Object3D.js +56 -4
- package/src/core/Raycaster.js +2 -2
- package/src/core/RenderTarget.js +3 -4
- package/src/extras/PMREMGenerator.js +7 -18
- package/src/extras/TextureUtils.js +5 -1
- 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/Cache.js +28 -0
- package/src/loaders/FileLoader.js +1 -1
- package/src/loaders/ImageBitmapLoader.js +8 -3
- package/src/loaders/Loader.js +6 -0
- package/src/loaders/MaterialLoader.js +2 -1
- package/src/loaders/ObjectLoader.js +21 -2
- package/src/loaders/nodes/NodeLoader.js +2 -2
- package/src/materials/Material.js +2 -0
- package/src/materials/MeshLambertMaterial.js +9 -0
- package/src/materials/MeshPhongMaterial.js +9 -0
- package/src/materials/ShaderMaterial.js +20 -1
- package/src/materials/nodes/Line2NodeMaterial.js +7 -7
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +5 -2
- package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -4
- package/src/materials/nodes/NodeMaterial.js +72 -25
- package/src/materials/nodes/manager/NodeMaterialObserver.js +10 -4
- package/src/math/Line3.js +3 -5
- package/src/math/MathUtils.js +10 -10
- package/src/math/Matrix4.js +74 -65
- package/src/math/Quaternion.js +3 -29
- package/src/math/Sphere.js +1 -1
- package/src/math/Vector3.js +3 -5
- package/src/math/interpolants/BezierInterpolant.js +108 -0
- package/src/nodes/Nodes.js +87 -68
- package/src/nodes/TSL.js +6 -6
- 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 +98 -12
- 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 +20 -1
- package/src/nodes/accessors/InstanceNode.js +148 -43
- package/src/nodes/accessors/MaterialNode.js +9 -1
- 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/Position.js +34 -2
- package/src/nodes/accessors/ReferenceBaseNode.js +4 -4
- package/src/nodes/accessors/ReferenceNode.js +4 -4
- package/src/nodes/accessors/RendererReferenceNode.js +1 -2
- package/src/nodes/accessors/SceneProperties.js +53 -0
- package/src/nodes/accessors/SkinningNode.js +27 -26
- package/src/nodes/accessors/StorageBufferNode.js +4 -21
- package/src/nodes/accessors/StorageTextureNode.js +37 -1
- package/src/nodes/accessors/Tangent.js +4 -14
- package/src/nodes/accessors/Texture3DNode.js +32 -35
- package/src/nodes/accessors/TextureNode.js +58 -22
- package/src/nodes/accessors/UniformArrayNode.js +4 -2
- package/src/nodes/accessors/UserDataNode.js +1 -2
- package/src/nodes/accessors/VertexColorNode.js +1 -2
- package/src/nodes/code/FunctionNode.js +1 -2
- package/src/nodes/core/ArrayNode.js +20 -1
- package/src/nodes/core/AssignNode.js +2 -2
- package/src/nodes/core/AttributeNode.js +2 -2
- package/src/nodes/core/ContextNode.js +103 -4
- package/src/nodes/core/MRTNode.js +48 -2
- package/src/nodes/core/Node.js +29 -3
- package/src/nodes/core/NodeBuilder.js +170 -53
- package/src/nodes/core/NodeError.js +28 -0
- package/src/nodes/core/NodeFrame.js +12 -4
- package/src/nodes/core/NodeUtils.js +10 -8
- package/src/nodes/core/OutputStructNode.js +12 -10
- package/src/nodes/core/ParameterNode.js +3 -3
- package/src/nodes/core/PropertyNode.js +19 -3
- package/src/nodes/core/StackNode.js +65 -16
- package/src/nodes/core/StackTrace.js +139 -0
- package/src/nodes/core/StructNode.js +16 -2
- package/src/nodes/core/StructTypeNode.js +11 -17
- package/src/nodes/core/SubBuildNode.js +1 -1
- package/src/nodes/core/UniformNode.js +21 -5
- package/src/nodes/core/VarNode.js +47 -22
- package/src/nodes/core/VaryingNode.js +1 -18
- 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 +98 -9
- package/src/nodes/display/RenderOutputNode.js +3 -3
- package/src/nodes/display/ScreenNode.js +3 -1
- 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/ViewportTextureNode.js +21 -4
- 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 +1 -1
- package/src/nodes/functions/PhysicalLightingModel.js +126 -45
- package/src/nodes/geometry/RangeNode.js +4 -2
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +1 -2
- package/src/nodes/gpgpu/ComputeNode.js +5 -4
- package/src/nodes/gpgpu/SubgroupFunctionNode.js +1 -1
- 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 +2 -2
- package/src/nodes/lighting/PointShadowNode.js +162 -149
- package/src/nodes/lighting/ShadowFilterNode.js +53 -65
- package/src/nodes/lighting/ShadowNode.js +97 -41
- package/src/nodes/math/BitcountNode.js +433 -0
- package/src/nodes/math/ConditionalNode.js +2 -2
- package/src/nodes/math/MathNode.js +3 -40
- package/src/nodes/math/OperatorNode.js +2 -1
- 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/TSLCore.js +17 -14
- package/src/nodes/utils/ArrayElementNode.js +13 -0
- package/src/nodes/utils/DebugNode.js +11 -11
- package/src/nodes/utils/EventNode.js +1 -2
- package/src/nodes/utils/JoinNode.js +2 -2
- package/src/nodes/utils/LoopNode.js +1 -1
- package/src/nodes/utils/MemberNode.js +1 -1
- 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/SampleNode.js +1 -1
- package/src/nodes/utils/SpriteSheetUV.js +35 -0
- package/src/nodes/utils/UVUtils.js +28 -0
- package/src/objects/BatchedMesh.js +27 -14
- package/src/objects/InstancedMesh.js +11 -0
- 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/renderers/WebGLRenderer.js +178 -92
- package/src/renderers/common/Backend.js +29 -0
- package/src/renderers/common/Background.js +24 -11
- package/src/renderers/common/BindGroup.js +1 -9
- package/src/renderers/common/Binding.js +11 -0
- package/src/renderers/common/Bindings.js +27 -12
- 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/CubeRenderTarget.js +50 -6
- package/src/renderers/common/Geometries.js +29 -3
- package/src/renderers/common/Lighting.js +5 -21
- package/src/renderers/common/Pipelines.js +4 -4
- package/src/renderers/common/PostProcessing.js +8 -206
- package/src/renderers/common/RenderBundles.js +2 -1
- 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 +15 -3
- package/src/renderers/common/RenderObjectPipeline.js +40 -0
- package/src/renderers/common/RenderObjects.js +18 -2
- package/src/renderers/common/RenderPipeline.js +203 -17
- package/src/renderers/common/Renderer.js +257 -72
- package/src/renderers/common/Sampler.js +4 -4
- package/src/renderers/common/StorageBuffer.js +13 -1
- package/src/renderers/common/Textures.js +17 -1
- package/src/renderers/common/TimestampQueryPool.js +5 -3
- package/src/renderers/common/Uniform.js +8 -0
- package/src/renderers/common/UniformsGroup.js +61 -0
- package/src/renderers/common/XRManager.js +3 -2
- package/src/renderers/common/extras/PMREMGenerator.js +2 -8
- package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
- package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +18 -6
- 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_fragment.glsl.js +7 -11
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +5 -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_physical_fragment.glsl.js +8 -4
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +112 -51
- package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +225 -186
- 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 +3 -3
- 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 -5
- package/src/renderers/shaders/UniformsLib.js +0 -3
- package/src/renderers/webgl/WebGLBackground.js +2 -2
- package/src/renderers/webgl/WebGLBindingStates.js +99 -27
- package/src/renderers/webgl/WebGLCapabilities.js +3 -4
- package/src/renderers/webgl/WebGLEnvironments.js +228 -0
- package/src/renderers/webgl/WebGLGeometries.js +10 -7
- package/src/renderers/webgl/WebGLLights.js +18 -1
- package/src/renderers/webgl/WebGLMaterials.js +12 -0
- package/src/renderers/webgl/WebGLObjects.js +3 -1
- package/src/renderers/webgl/WebGLOutput.js +267 -0
- package/src/renderers/webgl/WebGLProgram.js +45 -109
- package/src/renderers/webgl/WebGLPrograms.js +45 -49
- package/src/renderers/webgl/WebGLRenderLists.js +15 -0
- package/src/renderers/webgl/WebGLShadowMap.js +188 -24
- package/src/renderers/webgl/WebGLState.js +32 -37
- package/src/renderers/webgl/WebGLTextures.js +89 -28
- package/src/renderers/webgl/WebGLUniforms.js +40 -3
- package/src/renderers/webgl/WebGLUtils.js +6 -2
- package/src/renderers/webgl-fallback/WebGLBackend.js +148 -18
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +156 -35
- package/src/renderers/webgl-fallback/utils/WebGLState.js +181 -5
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +5 -3
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +9 -9
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +6 -2
- package/src/renderers/webgpu/WebGPUBackend.js +119 -13
- package/src/renderers/webgpu/WebGPURenderer.js +2 -1
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +322 -68
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +4 -17
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +357 -200
- package/src/renderers/webgpu/utils/WebGPUConstants.js +2 -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 +65 -42
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +7 -7
- package/src/renderers/webgpu/utils/WebGPUUtils.js +17 -11
- package/src/renderers/webxr/WebXRManager.js +2 -2
- package/src/textures/CubeDepthTexture.js +76 -0
- package/src/textures/Source.js +1 -1
- package/src/textures/Texture.js +3 -3
- package/src/utils.js +258 -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/SpriteSheetUVNode.js +0 -90
- package/src/renderers/webgl/WebGLCubeMaps.js +0 -99
- package/src/renderers/webgl/WebGLCubeUVMaps.js +0 -134
|
@@ -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
|
`;
|
|
@@ -38,23 +38,19 @@ export default /* glsl */`
|
|
|
38
38
|
|
|
39
39
|
vec4 envColor = textureCube( envMap, envMapRotation * vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );
|
|
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
|
|
|
@@ -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
|
|
@@ -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
|
|
|
@@ -100,7 +105,7 @@ float D_GGX( const in float alpha, const in float dotNH ) {
|
|
|
100
105
|
float gl = dotNV * length( vec3( alphaT * dotTL, alphaB * dotBL, dotNL ) );
|
|
101
106
|
float v = 0.5 / ( gv + gl );
|
|
102
107
|
|
|
103
|
-
return
|
|
108
|
+
return v;
|
|
104
109
|
|
|
105
110
|
}
|
|
106
111
|
|
|
@@ -149,7 +154,7 @@ float D_GGX( const in float alpha, const in float dotNH ) {
|
|
|
149
154
|
|
|
150
155
|
vec3 BRDF_GGX( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in PhysicalMaterial material ) {
|
|
151
156
|
|
|
152
|
-
vec3 f0 = material.
|
|
157
|
+
vec3 f0 = material.specularColorBlended;
|
|
153
158
|
float f90 = material.specularF90;
|
|
154
159
|
float roughness = material.roughness;
|
|
155
160
|
|
|
@@ -354,39 +359,27 @@ vec3 BRDF_Sheen( const in vec3 lightDir, const in vec3 viewDir, const in vec3 no
|
|
|
354
359
|
#endif
|
|
355
360
|
|
|
356
361
|
// 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
|
|
362
|
+
// Estevez and Kulla 2017, "Production Friendly Microfacet Sheen BRDF".
|
|
359
363
|
float IBLSheenBRDF( const in vec3 normal, const in vec3 viewDir, const in float roughness ) {
|
|
360
364
|
|
|
361
365
|
float dotNV = saturate( dot( normal, viewDir ) );
|
|
362
366
|
|
|
363
367
|
float r2 = roughness * roughness;
|
|
368
|
+
float rInv = 1.0 / ( roughness + 0.1 );
|
|
364
369
|
|
|
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
|
-
|
|
369
|
-
float DG = exp( a * dotNV + b ) + ( roughness < 0.25 ? 0.0 : 0.1 * ( roughness - 0.25 ) );
|
|
370
|
+
float a = -1.9362 + 1.0678 * roughness + 0.4573 * r2 - 0.8469 * rInv;
|
|
371
|
+
float b = -0.6014 + 0.5538 * roughness - 0.4670 * r2 - 0.1255 * rInv;
|
|
370
372
|
|
|
371
|
-
|
|
373
|
+
float DG = exp( a * dotNV + b );
|
|
372
374
|
|
|
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;
|
|
375
|
+
return saturate( DG );
|
|
384
376
|
|
|
385
377
|
}
|
|
386
378
|
|
|
387
379
|
vec3 EnvironmentBRDF( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness ) {
|
|
388
380
|
|
|
389
|
-
|
|
381
|
+
float dotNV = saturate( dot( normal, viewDir ) );
|
|
382
|
+
vec2 fab = texture2D( dfgLUT, vec2( roughness, dotNV ) ).rg;
|
|
390
383
|
|
|
391
384
|
return specularColor * fab.x + specularF90 * fab.y;
|
|
392
385
|
|
|
@@ -401,7 +394,8 @@ void computeMultiscatteringIridescence( const in vec3 normal, const in vec3 view
|
|
|
401
394
|
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
395
|
#endif
|
|
403
396
|
|
|
404
|
-
|
|
397
|
+
float dotNV = saturate( dot( normal, viewDir ) );
|
|
398
|
+
vec2 fab = texture2D( dfgLUT, vec2( roughness, dotNV ) ).rg;
|
|
405
399
|
|
|
406
400
|
#ifdef USE_IRIDESCENCE
|
|
407
401
|
|
|
@@ -439,12 +433,12 @@ vec3 BRDF_GGX_Multiscatter( const in vec3 lightDir, const in vec3 viewDir, const
|
|
|
439
433
|
float dotNV = saturate( dot( normal, viewDir ) );
|
|
440
434
|
|
|
441
435
|
// Precomputed DFG values for view and light directions
|
|
442
|
-
vec2 dfgV =
|
|
443
|
-
vec2 dfgL =
|
|
436
|
+
vec2 dfgV = texture2D( dfgLUT, vec2( material.roughness, dotNV ) ).rg;
|
|
437
|
+
vec2 dfgL = texture2D( dfgLUT, vec2( material.roughness, dotNL ) ).rg;
|
|
444
438
|
|
|
445
439
|
// Single-scattering energy for view and light
|
|
446
|
-
vec3 FssEss_V = material.
|
|
447
|
-
vec3 FssEss_L = material.
|
|
440
|
+
vec3 FssEss_V = material.specularColorBlended * dfgV.x + material.specularF90 * dfgV.y;
|
|
441
|
+
vec3 FssEss_L = material.specularColorBlended * dfgL.x + material.specularF90 * dfgL.y;
|
|
448
442
|
|
|
449
443
|
float Ess_V = dfgV.x + dfgV.y;
|
|
450
444
|
float Ess_L = dfgL.x + dfgL.y;
|
|
@@ -454,10 +448,10 @@ vec3 BRDF_GGX_Multiscatter( const in vec3 lightDir, const in vec3 viewDir, const
|
|
|
454
448
|
float Ems_L = 1.0 - Ess_L;
|
|
455
449
|
|
|
456
450
|
// Average Fresnel reflectance
|
|
457
|
-
vec3 Favg = material.
|
|
451
|
+
vec3 Favg = material.specularColorBlended + ( 1.0 - material.specularColorBlended ) * 0.047619; // 1/21
|
|
458
452
|
|
|
459
453
|
// Multiple scattering contribution
|
|
460
|
-
vec3 Fms = FssEss_V * FssEss_L * Favg / ( 1.0 - Ems_V * Ems_L * Favg
|
|
454
|
+
vec3 Fms = FssEss_V * FssEss_L * Favg / ( 1.0 - Ems_V * Ems_L * Favg + EPSILON );
|
|
461
455
|
|
|
462
456
|
// Energy compensation factor
|
|
463
457
|
float compensationFactor = Ems_V * Ems_L;
|
|
@@ -500,11 +494,33 @@ vec3 BRDF_GGX_Multiscatter( const in vec3 lightDir, const in vec3 viewDir, const
|
|
|
500
494
|
|
|
501
495
|
// LTC Fresnel Approximation by Stephen Hill
|
|
502
496
|
// http://blog.selfshadow.com/publications/s2016-advances/s2016_ltc_fresnel.pdf
|
|
503
|
-
vec3 fresnel = ( material.
|
|
497
|
+
vec3 fresnel = ( material.specularColorBlended * t2.x + ( material.specularF90 - material.specularColorBlended ) * t2.y );
|
|
504
498
|
|
|
505
499
|
reflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );
|
|
506
500
|
|
|
507
|
-
reflectedLight.directDiffuse += lightColor * material.
|
|
501
|
+
reflectedLight.directDiffuse += lightColor * material.diffuseContribution * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );
|
|
502
|
+
|
|
503
|
+
#ifdef USE_CLEARCOAT
|
|
504
|
+
|
|
505
|
+
vec3 Ncc = geometryClearcoatNormal;
|
|
506
|
+
|
|
507
|
+
vec2 uvClearcoat = LTC_Uv( Ncc, viewDir, material.clearcoatRoughness );
|
|
508
|
+
|
|
509
|
+
vec4 t1Clearcoat = texture2D( ltc_1, uvClearcoat );
|
|
510
|
+
vec4 t2Clearcoat = texture2D( ltc_2, uvClearcoat );
|
|
511
|
+
|
|
512
|
+
mat3 mInvClearcoat = mat3(
|
|
513
|
+
vec3( t1Clearcoat.x, 0, t1Clearcoat.y ),
|
|
514
|
+
vec3( 0, 1, 0 ),
|
|
515
|
+
vec3( t1Clearcoat.z, 0, t1Clearcoat.w )
|
|
516
|
+
);
|
|
517
|
+
|
|
518
|
+
// LTC Fresnel Approximation for clearcoat
|
|
519
|
+
vec3 fresnelClearcoat = material.clearcoatF0 * t2Clearcoat.x + ( material.clearcoatF90 - material.clearcoatF0 ) * t2Clearcoat.y;
|
|
520
|
+
|
|
521
|
+
clearcoatSpecularDirect += lightColor * fresnelClearcoat * LTC_Evaluate( Ncc, viewDir, position, mInvClearcoat, rectCoords );
|
|
522
|
+
|
|
523
|
+
#endif
|
|
508
524
|
|
|
509
525
|
}
|
|
510
526
|
|
|
@@ -527,19 +543,38 @@ void RE_Direct_Physical( const in IncidentLight directLight, const in vec3 geome
|
|
|
527
543
|
#endif
|
|
528
544
|
|
|
529
545
|
#ifdef USE_SHEEN
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
546
|
+
|
|
547
|
+
sheenSpecularDirect += irradiance * BRDF_Sheen( directLight.direction, geometryViewDir, geometryNormal, material.sheenColor, material.sheenRoughness );
|
|
548
|
+
|
|
549
|
+
float sheenAlbedoV = IBLSheenBRDF( geometryNormal, geometryViewDir, material.sheenRoughness );
|
|
550
|
+
float sheenAlbedoL = IBLSheenBRDF( geometryNormal, directLight.direction, material.sheenRoughness );
|
|
551
|
+
|
|
552
|
+
float sheenEnergyComp = 1.0 - max3( material.sheenColor ) * max( sheenAlbedoV, sheenAlbedoL );
|
|
553
|
+
|
|
554
|
+
irradiance *= sheenEnergyComp;
|
|
555
|
+
|
|
556
|
+
#endif
|
|
534
557
|
|
|
535
558
|
reflectedLight.directSpecular += irradiance * BRDF_GGX_Multiscatter( directLight.direction, geometryViewDir, geometryNormal, material );
|
|
536
559
|
|
|
537
|
-
reflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.
|
|
560
|
+
reflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseContribution );
|
|
538
561
|
}
|
|
539
562
|
|
|
540
563
|
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
564
|
|
|
542
|
-
|
|
565
|
+
vec3 diffuse = irradiance * BRDF_Lambert( material.diffuseContribution );
|
|
566
|
+
|
|
567
|
+
#ifdef USE_SHEEN
|
|
568
|
+
|
|
569
|
+
float sheenAlbedo = IBLSheenBRDF( geometryNormal, geometryViewDir, material.sheenRoughness );
|
|
570
|
+
|
|
571
|
+
float sheenEnergyComp = 1.0 - max3( material.sheenColor ) * sheenAlbedo;
|
|
572
|
+
|
|
573
|
+
diffuse *= sheenEnergyComp;
|
|
574
|
+
|
|
575
|
+
#endif
|
|
576
|
+
|
|
577
|
+
reflectedLight.indirectDiffuse += diffuse;
|
|
543
578
|
|
|
544
579
|
}
|
|
545
580
|
|
|
@@ -553,33 +588,59 @@ void RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradia
|
|
|
553
588
|
|
|
554
589
|
#ifdef USE_SHEEN
|
|
555
590
|
|
|
556
|
-
sheenSpecularIndirect += irradiance * material.sheenColor * IBLSheenBRDF( geometryNormal, geometryViewDir, material.sheenRoughness );
|
|
591
|
+
sheenSpecularIndirect += irradiance * material.sheenColor * IBLSheenBRDF( geometryNormal, geometryViewDir, material.sheenRoughness ) * RECIPROCAL_PI;
|
|
557
592
|
|
|
558
|
-
|
|
593
|
+
#endif
|
|
559
594
|
|
|
560
595
|
// Both indirect specular and indirect diffuse light accumulate here
|
|
596
|
+
// Compute multiscattering separately for dielectric and metallic, then mix
|
|
561
597
|
|
|
562
|
-
vec3
|
|
563
|
-
vec3
|
|
564
|
-
|
|
598
|
+
vec3 singleScatteringDielectric = vec3( 0.0 );
|
|
599
|
+
vec3 multiScatteringDielectric = vec3( 0.0 );
|
|
600
|
+
|
|
601
|
+
vec3 singleScatteringMetallic = vec3( 0.0 );
|
|
602
|
+
vec3 multiScatteringMetallic = vec3( 0.0 );
|
|
565
603
|
|
|
566
604
|
#ifdef USE_IRIDESCENCE
|
|
567
605
|
|
|
568
|
-
computeMultiscatteringIridescence( geometryNormal, geometryViewDir, material.specularColor, material.specularF90, material.iridescence, material.
|
|
606
|
+
computeMultiscatteringIridescence( geometryNormal, geometryViewDir, material.specularColor, material.specularF90, material.iridescence, material.iridescenceFresnelDielectric, material.roughness, singleScatteringDielectric, multiScatteringDielectric );
|
|
607
|
+
computeMultiscatteringIridescence( geometryNormal, geometryViewDir, material.diffuseColor, material.specularF90, material.iridescence, material.iridescenceFresnelMetallic, material.roughness, singleScatteringMetallic, multiScatteringMetallic );
|
|
569
608
|
|
|
570
609
|
#else
|
|
571
610
|
|
|
572
|
-
computeMultiscattering( geometryNormal, geometryViewDir, material.specularColor, material.specularF90, material.roughness,
|
|
611
|
+
computeMultiscattering( geometryNormal, geometryViewDir, material.specularColor, material.specularF90, material.roughness, singleScatteringDielectric, multiScatteringDielectric );
|
|
612
|
+
computeMultiscattering( geometryNormal, geometryViewDir, material.diffuseColor, material.specularF90, material.roughness, singleScatteringMetallic, multiScatteringMetallic );
|
|
573
613
|
|
|
574
614
|
#endif
|
|
575
615
|
|
|
576
|
-
|
|
577
|
-
vec3
|
|
616
|
+
// Mix based on metalness
|
|
617
|
+
vec3 singleScattering = mix( singleScatteringDielectric, singleScatteringMetallic, material.metalness );
|
|
618
|
+
vec3 multiScattering = mix( multiScatteringDielectric, multiScatteringMetallic, material.metalness );
|
|
578
619
|
|
|
579
|
-
|
|
580
|
-
|
|
620
|
+
// Diffuse energy conservation uses dielectric path
|
|
621
|
+
vec3 totalScatteringDielectric = singleScatteringDielectric + multiScatteringDielectric;
|
|
622
|
+
vec3 diffuse = material.diffuseContribution * ( 1.0 - totalScatteringDielectric );
|
|
623
|
+
|
|
624
|
+
vec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;
|
|
625
|
+
|
|
626
|
+
vec3 indirectSpecular = radiance * singleScattering;
|
|
627
|
+
indirectSpecular += multiScattering * cosineWeightedIrradiance;
|
|
628
|
+
|
|
629
|
+
vec3 indirectDiffuse = diffuse * cosineWeightedIrradiance;
|
|
630
|
+
|
|
631
|
+
#ifdef USE_SHEEN
|
|
632
|
+
|
|
633
|
+
float sheenAlbedo = IBLSheenBRDF( geometryNormal, geometryViewDir, material.sheenRoughness );
|
|
634
|
+
|
|
635
|
+
float sheenEnergyComp = 1.0 - max3( material.sheenColor ) * sheenAlbedo;
|
|
636
|
+
|
|
637
|
+
indirectSpecular *= sheenEnergyComp;
|
|
638
|
+
indirectDiffuse *= sheenEnergyComp;
|
|
639
|
+
|
|
640
|
+
#endif
|
|
581
641
|
|
|
582
|
-
reflectedLight.
|
|
642
|
+
reflectedLight.indirectSpecular += indirectSpecular;
|
|
643
|
+
reflectedLight.indirectDiffuse += indirectDiffuse;
|
|
583
644
|
|
|
584
645
|
}
|
|
585
646
|
|
|
@@ -82,8 +82,16 @@ float viewZToOrthographicDepth( const in float viewZ, const in float near, const
|
|
|
82
82
|
}
|
|
83
83
|
|
|
84
84
|
float orthographicDepthToViewZ( const in float depth, const in float near, const in float far ) {
|
|
85
|
-
|
|
86
|
-
|
|
85
|
+
|
|
86
|
+
#ifdef USE_REVERSED_DEPTH_BUFFER
|
|
87
|
+
|
|
88
|
+
return depth * ( far - near ) - far;
|
|
89
|
+
|
|
90
|
+
#else
|
|
91
|
+
|
|
92
|
+
return depth * ( near - far ) - near;
|
|
93
|
+
|
|
94
|
+
#endif
|
|
87
95
|
}
|
|
88
96
|
|
|
89
97
|
// NOTE: https://twitter.com/gonnavis/status/1377183786949959682
|
|
@@ -94,7 +102,15 @@ float viewZToPerspectiveDepth( const in float viewZ, const in float near, const
|
|
|
94
102
|
}
|
|
95
103
|
|
|
96
104
|
float perspectiveDepthToViewZ( const in float depth, const in float near, const in float far ) {
|
|
97
|
-
|
|
98
|
-
|
|
105
|
+
|
|
106
|
+
#ifdef USE_REVERSED_DEPTH_BUFFER
|
|
107
|
+
|
|
108
|
+
return ( near * far ) / ( ( near - far ) * depth - near );
|
|
109
|
+
|
|
110
|
+
#else
|
|
111
|
+
|
|
112
|
+
return ( near * far ) / ( ( far - near ) * depth - far );
|
|
113
|
+
|
|
114
|
+
#endif
|
|
99
115
|
}
|
|
100
116
|
`;
|