super-three 0.157.1 → 0.160.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/README.md +6 -4
- package/build/three.cjs +3100 -1537
- package/build/three.js +3100 -1537
- package/build/three.min.js +1 -1
- package/build/three.module.js +3093 -1538
- package/build/three.module.min.js +1 -1
- package/examples/jsm/Addons.js +291 -0
- package/examples/jsm/controls/FlyControls.js +26 -0
- package/examples/jsm/controls/OrbitControls.js +62 -41
- package/examples/jsm/controls/TransformControls.js +27 -11
- package/examples/jsm/csm/CSMShader.js +53 -48
- package/examples/jsm/exporters/GLTFExporter.js +151 -3
- package/examples/jsm/exporters/USDZExporter.js +27 -19
- package/examples/jsm/geometries/InstancedPointsGeometry.js +174 -0
- package/examples/jsm/geometries/SDFGeometryGenerator.js +144 -0
- package/examples/jsm/helpers/TextureHelper.js +237 -0
- package/examples/jsm/interactive/HTMLMesh.js +9 -2
- package/examples/jsm/libs/lottie_canvas.module.js +6 -1
- package/examples/jsm/libs/opentype.module.js +13 -75
- package/examples/jsm/libs/surfaceNet.js +201 -0
- package/examples/jsm/lines/LineMaterial.js +16 -33
- package/examples/jsm/loaders/ColladaLoader.js +0 -6
- package/examples/jsm/loaders/DRACOLoader.js +4 -3
- package/examples/jsm/loaders/FBXLoader.js +294 -124
- package/examples/jsm/loaders/GLTFLoader.js +83 -6
- package/examples/jsm/loaders/LUTImageLoader.js +162 -0
- package/examples/jsm/loaders/MaterialXLoader.js +73 -54
- package/examples/jsm/loaders/NRRDLoader.js +0 -13
- package/examples/jsm/loaders/SVGLoader.js +4 -4
- package/examples/jsm/loaders/USDZLoader.js +3 -17
- package/examples/jsm/loaders/lwo/IFFParser.js +89 -93
- package/examples/jsm/materials/MeshGouraudMaterial.js +2 -0
- package/examples/jsm/math/Capsule.js +0 -55
- package/examples/jsm/math/Octree.js +85 -7
- package/examples/jsm/misc/Timer.js +119 -0
- package/examples/jsm/misc/TubePainter.js +3 -6
- package/examples/jsm/modifiers/CurveModifier.js +20 -2
- package/examples/jsm/modifiers/SimplifyModifier.js +103 -11
- package/examples/jsm/modifiers/TessellateModifier.js +3 -3
- package/examples/jsm/nodes/Nodes.js +16 -12
- package/examples/jsm/nodes/accessors/CameraNode.js +18 -2
- package/examples/jsm/nodes/accessors/CubeTextureNode.js +5 -73
- package/examples/jsm/nodes/accessors/InstanceNode.js +3 -3
- package/examples/jsm/nodes/accessors/InstancedPointsMaterialNode.js +21 -0
- package/examples/jsm/nodes/accessors/MaterialNode.js +68 -31
- package/examples/jsm/nodes/accessors/MaterialReferenceNode.js +11 -2
- package/examples/jsm/nodes/accessors/ModelNode.js +1 -2
- package/examples/jsm/nodes/accessors/ModelViewProjectionNode.js +12 -3
- package/examples/jsm/nodes/accessors/MorphNode.js +191 -16
- package/examples/jsm/nodes/accessors/NormalNode.js +1 -1
- package/examples/jsm/nodes/accessors/PositionNode.js +1 -1
- package/examples/jsm/nodes/accessors/ReferenceNode.js +25 -1
- package/examples/jsm/nodes/accessors/SkinningNode.js +13 -3
- package/examples/jsm/nodes/accessors/TextureNode.js +123 -37
- package/examples/jsm/nodes/code/CodeNode.js +3 -3
- package/examples/jsm/nodes/code/FunctionNode.js +1 -1
- package/examples/jsm/nodes/core/AssignNode.js +72 -0
- package/examples/jsm/nodes/core/AttributeNode.js +7 -1
- package/examples/jsm/nodes/core/CacheNode.js +4 -1
- package/examples/jsm/nodes/core/ConstNode.js +1 -1
- package/examples/jsm/nodes/core/LightingModel.js +3 -1
- package/examples/jsm/nodes/core/Node.js +13 -15
- package/examples/jsm/nodes/core/NodeBuilder.js +209 -42
- package/examples/jsm/nodes/core/NodeFrame.js +10 -8
- package/examples/jsm/nodes/core/NodeUniform.js +12 -0
- package/examples/jsm/nodes/core/NodeUtils.js +7 -9
- package/examples/jsm/nodes/core/OutputStructNode.js +4 -4
- package/examples/jsm/nodes/core/ParameterNode.js +33 -0
- package/examples/jsm/nodes/core/PropertyNode.js +15 -6
- package/examples/jsm/nodes/core/StackNode.js +7 -17
- package/examples/jsm/nodes/core/StructTypeNode.js +4 -4
- package/examples/jsm/nodes/core/TempNode.js +1 -1
- package/examples/jsm/nodes/core/UniformGroup.js +13 -0
- package/examples/jsm/nodes/core/UniformGroupNode.js +36 -0
- package/examples/jsm/nodes/core/UniformNode.js +17 -0
- package/examples/jsm/nodes/core/VarNode.js +7 -34
- package/examples/jsm/nodes/core/VaryingNode.js +3 -7
- package/examples/jsm/nodes/display/BumpMapNode.js +35 -13
- package/examples/jsm/nodes/display/ColorAdjustmentNode.js +6 -10
- package/examples/jsm/nodes/display/GaussianBlurNode.js +170 -0
- package/examples/jsm/nodes/display/NormalMapNode.js +3 -1
- package/examples/jsm/nodes/display/PassNode.js +182 -0
- package/examples/jsm/nodes/display/ViewportDepthNode.js +31 -3
- package/examples/jsm/nodes/display/ViewportDepthTextureNode.js +2 -2
- package/examples/jsm/nodes/display/ViewportNode.js +17 -10
- package/examples/jsm/nodes/functions/BSDF/BRDF_Sheen.js +20 -6
- package/examples/jsm/nodes/functions/BSDF/DFGApprox.js +8 -7
- package/examples/jsm/nodes/functions/BSDF/D_GGX.js +8 -3
- package/examples/jsm/nodes/functions/BSDF/Schlick_to_F0.js +8 -0
- package/examples/jsm/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +8 -0
- package/examples/jsm/nodes/functions/PhysicalLightingModel.js +93 -43
- package/examples/jsm/nodes/gpgpu/ComputeNode.js +2 -2
- package/examples/jsm/nodes/lighting/AmbientLightNode.js +1 -1
- package/examples/jsm/nodes/lighting/AnalyticLightNode.js +55 -6
- package/examples/jsm/nodes/lighting/DirectionalLightNode.js +1 -1
- package/examples/jsm/nodes/lighting/EnvironmentNode.js +8 -18
- package/examples/jsm/nodes/lighting/LightingContextNode.js +21 -57
- package/examples/jsm/nodes/lighting/LightsNode.js +80 -20
- package/examples/jsm/nodes/lighting/PointLightNode.js +1 -1
- package/examples/jsm/nodes/lighting/SpotLightNode.js +1 -1
- package/examples/jsm/nodes/materials/InstancedPointsNodeMaterial.js +162 -0
- package/examples/jsm/nodes/materials/Line2NodeMaterial.js +76 -77
- package/examples/jsm/nodes/materials/LineDashedNodeMaterial.js +5 -5
- package/examples/jsm/nodes/materials/Materials.js +1 -0
- package/examples/jsm/nodes/materials/MeshBasicNodeMaterial.js +1 -0
- package/examples/jsm/nodes/materials/MeshNormalNodeMaterial.js +3 -3
- package/examples/jsm/nodes/materials/MeshPhongNodeMaterial.js +3 -3
- package/examples/jsm/nodes/materials/MeshPhysicalNodeMaterial.js +47 -20
- package/examples/jsm/nodes/materials/MeshStandardNodeMaterial.js +6 -6
- package/examples/jsm/nodes/materials/NodeMaterial.js +82 -60
- package/examples/jsm/nodes/materials/PointsNodeMaterial.js +0 -10
- package/examples/jsm/nodes/materials/SpriteNodeMaterial.js +0 -7
- package/examples/jsm/nodes/materialx/MaterialXNodes.js +10 -10
- package/examples/jsm/nodes/materialx/lib/mx_hsv.js +128 -54
- package/examples/jsm/nodes/materialx/lib/mx_noise.js +1430 -618
- package/examples/jsm/nodes/materialx/lib/mx_transform_color.js +24 -14
- package/examples/jsm/nodes/math/MathNode.js +2 -0
- package/examples/jsm/nodes/math/OperatorNode.js +24 -27
- package/examples/jsm/nodes/shadernode/ShaderNode.js +158 -10
- package/examples/jsm/nodes/utils/ArrayElementNode.js +2 -0
- package/examples/jsm/nodes/utils/DiscardNode.js +3 -2
- package/examples/jsm/nodes/utils/FunctionOverloadingNode.js +95 -0
- package/examples/jsm/nodes/utils/JoinNode.js +11 -1
- package/examples/jsm/nodes/utils/LoopNode.js +36 -24
- package/examples/jsm/nodes/utils/RemapNode.js +2 -2
- package/examples/jsm/nodes/utils/SplitNode.js +10 -2
- package/examples/jsm/nodes/utils/TriplanarTexturesNode.js +3 -3
- package/examples/jsm/objects/InstancedPoints.js +21 -0
- package/examples/jsm/objects/Lensflare.js +20 -0
- package/examples/jsm/objects/QuadMesh.js +60 -0
- package/examples/jsm/objects/ReflectorForSSRPass.js +3 -0
- package/examples/jsm/objects/Refractor.js +3 -0
- package/examples/jsm/objects/Sky.js +5 -3
- package/examples/jsm/objects/Water.js +5 -2
- package/examples/jsm/objects/Water2.js +3 -0
- package/examples/jsm/physics/AmmoPhysics.js +21 -0
- package/examples/jsm/physics/RapierPhysics.js +21 -0
- package/examples/jsm/postprocessing/BokehPass.js +3 -2
- package/examples/jsm/postprocessing/GTAOPass.js +572 -0
- package/examples/jsm/postprocessing/LUTPass.js +2 -1
- package/examples/jsm/postprocessing/OutputPass.js +3 -0
- package/examples/jsm/postprocessing/Pass.js +14 -3
- package/examples/jsm/postprocessing/SAOPass.js +0 -1
- package/examples/jsm/postprocessing/SMAAPass.js +0 -2
- package/examples/jsm/postprocessing/TAARenderPass.js +1 -2
- package/examples/jsm/renderers/CSS3DRenderer.js +3 -9
- package/examples/jsm/renderers/SVGRenderer.js +9 -6
- package/examples/jsm/renderers/common/Animation.js +10 -21
- package/examples/jsm/renderers/common/Backend.js +19 -3
- package/examples/jsm/renderers/common/Background.js +20 -22
- package/examples/jsm/renderers/common/Bindings.js +31 -22
- package/examples/jsm/renderers/common/ChainMap.js +3 -3
- package/examples/jsm/renderers/common/Color4.js +37 -0
- package/examples/jsm/renderers/common/Geometries.js +4 -4
- package/examples/jsm/renderers/common/Info.js +12 -2
- package/examples/jsm/renderers/common/Pipelines.js +3 -51
- package/examples/jsm/renderers/common/PostProcessing.js +25 -0
- package/examples/jsm/renderers/common/RenderContext.js +1 -1
- package/examples/jsm/renderers/common/RenderContexts.js +1 -1
- package/examples/jsm/renderers/common/RenderObject.js +21 -2
- package/examples/jsm/renderers/common/RenderObjects.js +5 -3
- package/examples/jsm/renderers/common/Renderer.js +137 -37
- package/examples/jsm/renderers/common/StorageTexture.js +1 -0
- package/examples/jsm/renderers/common/Textures.js +8 -37
- package/examples/jsm/renderers/common/nodes/NodeBuilderState.js +10 -2
- package/examples/jsm/renderers/common/nodes/NodeUniformsGroup.js +44 -0
- package/examples/jsm/renderers/common/nodes/Nodes.js +121 -19
- package/examples/jsm/renderers/webgl/WebGLBackend.js +366 -67
- package/examples/jsm/renderers/webgl/nodes/GLSLNodeBuilder.js +183 -38
- package/examples/jsm/renderers/webgl/utils/WebGLAttributeUtils.js +92 -5
- package/examples/jsm/renderers/webgl/utils/WebGLCapabilities.js +36 -0
- package/examples/jsm/renderers/webgl/utils/WebGLExtensions.js +11 -1
- package/examples/jsm/renderers/webgl/utils/WebGLState.js +14 -2
- package/examples/jsm/renderers/webgl/utils/WebGLTextureUtils.js +71 -2
- package/examples/jsm/renderers/webgl/utils/WebGLUtils.js +42 -0
- package/examples/jsm/renderers/webgl-legacy/nodes/SlotNode.js +1 -1
- package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodeBuilder.js +33 -3
- package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodes.js +4 -14
- package/examples/jsm/renderers/webgpu/WebGPUBackend.js +188 -137
- package/examples/jsm/renderers/webgpu/WebGPURenderer.js +1 -1
- package/examples/jsm/renderers/webgpu/nodes/WGSLNodeBuilder.js +241 -90
- package/examples/jsm/renderers/webgpu/utils/WebGPUAttributeUtils.js +15 -10
- package/examples/jsm/renderers/webgpu/utils/WebGPUBindingUtils.js +11 -3
- package/examples/jsm/renderers/webgpu/utils/WebGPUPipelineUtils.js +2 -3
- package/examples/jsm/renderers/webgpu/utils/WebGPUTextureUtils.js +88 -6
- package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +2 -0
- package/examples/jsm/shaders/AfterimageShader.js +2 -0
- package/examples/jsm/shaders/BasicShader.js +2 -0
- package/examples/jsm/shaders/BlendShader.js +2 -0
- package/examples/jsm/shaders/BokehShader.js +2 -0
- package/examples/jsm/shaders/BokehShader2.js +4 -0
- package/examples/jsm/shaders/BrightnessContrastShader.js +2 -0
- package/examples/jsm/shaders/ColorCorrectionShader.js +2 -0
- package/examples/jsm/shaders/DOFMipMapShader.js +2 -0
- package/examples/jsm/shaders/DepthLimitedBlurShader.js +5 -0
- package/examples/jsm/shaders/FXAAShader.js +135 -133
- package/examples/jsm/shaders/FilmShader.js +1 -1
- package/examples/jsm/shaders/FocusShader.js +2 -0
- package/examples/jsm/shaders/FreiChenShader.js +2 -0
- package/examples/jsm/shaders/GTAOShader.js +424 -0
- package/examples/jsm/shaders/GodRaysShader.js +8 -0
- package/examples/jsm/shaders/HalftoneShader.js +2 -0
- package/examples/jsm/shaders/HorizontalTiltShiftShader.js +2 -0
- package/examples/jsm/shaders/HueSaturationShader.js +2 -0
- package/examples/jsm/shaders/KaleidoShader.js +2 -0
- package/examples/jsm/shaders/LuminosityHighPassShader.js +2 -0
- package/examples/jsm/shaders/LuminosityShader.js +2 -0
- package/examples/jsm/shaders/MMDToonShader.js +2 -0
- package/examples/jsm/shaders/MirrorShader.js +2 -0
- package/examples/jsm/shaders/NormalMapShader.js +2 -0
- package/examples/jsm/shaders/OutputShader.js +8 -5
- package/examples/jsm/shaders/PoissonDenoiseShader.js +226 -0
- package/examples/jsm/shaders/SAOShader.js +7 -3
- package/examples/jsm/shaders/SMAAShader.js +6 -0
- package/examples/jsm/shaders/SSAOShader.js +8 -3
- package/examples/jsm/shaders/SSRShader.js +6 -0
- package/examples/jsm/shaders/SobelOperatorShader.js +2 -0
- package/examples/jsm/shaders/SubsurfaceScatteringShader.js +2 -0
- package/examples/jsm/shaders/TechnicolorShader.js +2 -0
- package/examples/jsm/shaders/TriangleBlurShader.js +2 -0
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +2 -0
- package/examples/jsm/shaders/VelocityShader.js +2 -0
- package/examples/jsm/shaders/VerticalTiltShiftShader.js +2 -0
- package/examples/jsm/shaders/WaterRefractionShader.js +2 -0
- package/examples/jsm/transpiler/AST.js +270 -0
- package/examples/jsm/transpiler/GLSLDecoder.js +941 -0
- package/examples/jsm/transpiler/ShaderToyDecoder.js +49 -0
- package/examples/jsm/transpiler/TSLEncoder.js +715 -0
- package/examples/jsm/transpiler/Transpiler.js +18 -0
- package/examples/jsm/utils/SortUtils.js +158 -0
- package/examples/jsm/utils/TextureUtils.js +33 -21
- package/examples/jsm/webxr/ARButton.js +14 -0
- package/examples/jsm/webxr/VRButton.js +24 -9
- package/examples/jsm/webxr/XRButton.js +27 -11
- package/examples/jsm/webxr/XREstimatedLight.js +1 -1
- package/package.json +8 -6
- package/src/Three.js +1 -0
- package/src/constants.js +8 -1
- package/src/core/BufferAttribute.js +21 -2
- package/src/core/InterleavedBuffer.js +21 -1
- package/src/core/Object3D.js +60 -12
- package/src/core/UniformsGroup.js +7 -1
- package/src/extras/PMREMGenerator.js +7 -1
- package/src/extras/curves/LineCurve3.js +4 -0
- package/src/loaders/AudioLoader.js +1 -1
- package/src/loaders/BufferGeometryLoader.js +0 -7
- package/src/loaders/ImageBitmapLoader.js +25 -1
- package/src/loaders/MaterialLoader.js +10 -2
- package/src/loaders/ObjectLoader.js +49 -0
- package/src/materials/Material.js +27 -13
- package/src/materials/ShaderMaterial.js +2 -1
- package/src/math/Box3.js +35 -18
- package/src/math/ColorManagement.js +0 -16
- package/src/math/Quaternion.js +5 -4
- package/src/math/Sphere.js +2 -0
- package/src/math/Triangle.js +17 -5
- package/src/math/Vector3.js +11 -12
- package/src/objects/BatchedMesh.js +1020 -0
- package/src/objects/Skeleton.js +1 -3
- package/src/objects/SkinnedMesh.js +6 -7
- package/src/renderers/WebGL3DRenderTarget.js +2 -2
- package/src/renderers/WebGLArrayRenderTarget.js +2 -2
- package/src/renderers/WebGLRenderer.js +165 -43
- package/src/renderers/shaders/ShaderChunk/aomap_fragment.glsl.js +8 -0
- package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +19 -0
- package/src/renderers/shaders/ShaderChunk/batching_vertex.glsl.js +5 -0
- package/src/renderers/shaders/ShaderChunk/bumpmap_pars_fragment.glsl.js +3 -2
- package/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js +0 -5
- package/src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl.js +31 -4
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +9 -4
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +8 -6
- package/src/renderers/shaders/ShaderChunk/project_vertex.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk/skinning_pars_vertex.glsl.js +9 -17
- package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +84 -0
- package/src/renderers/shaders/ShaderChunk/worldpos_vertex.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk.js +4 -0
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/distanceRGBA.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/meshbasic.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/meshmatcap.glsl.js +3 -0
- package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -2
- package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/shadow.glsl.js +3 -0
- package/src/renderers/webgl/WebGLAttributes.js +39 -5
- package/src/renderers/webgl/WebGLBufferRenderer.js +31 -0
- package/src/renderers/webgl/WebGLCubeMaps.js +1 -1
- package/src/renderers/webgl/WebGLExtensions.js +1 -0
- package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +31 -0
- package/src/renderers/webgl/WebGLLights.js +11 -2
- package/src/renderers/webgl/WebGLProgram.js +100 -51
- package/src/renderers/webgl/WebGLPrograms.js +8 -0
- package/src/renderers/webgl/WebGLShadowMap.js +35 -0
- package/src/renderers/webgl/WebGLState.js +25 -4
- package/src/renderers/webgl/WebGLTextures.js +7 -11
- package/src/renderers/webgl/WebGLUniforms.js +11 -1
- package/src/renderers/webgl/WebGLUniformsGroups.js +72 -93
- package/src/renderers/webxr/WebXRManager.js +16 -0
- package/examples/jsm/nodes/accessors/ExtendedMaterialNode.js +0 -76
- package/examples/jsm/nodes/accessors/LineMaterialNode.js +0 -29
|
@@ -0,0 +1,424 @@
|
|
|
1
|
+
import {
|
|
2
|
+
DataTexture,
|
|
3
|
+
Matrix4,
|
|
4
|
+
RepeatWrapping,
|
|
5
|
+
Vector2,
|
|
6
|
+
Vector3,
|
|
7
|
+
} from 'three';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* References:
|
|
11
|
+
* - implemented algorithm - GTAO
|
|
12
|
+
* - https://iryoku.com/downloads/Practical-Realtime-Strategies-for-Accurate-Indirect-Occlusion.pdf
|
|
13
|
+
* - https://github.com/Patapom/GodComplex/blob/master/Tests/TestHBIL/2018%20Mayaux%20-%20Horizon-Based%20Indirect%20Lighting%20(HBIL).pdf
|
|
14
|
+
*
|
|
15
|
+
* - other AO algorithms that are not implemented here:
|
|
16
|
+
* - Screen Space Ambient Occlusion (SSAO), see also SSAOShader.js
|
|
17
|
+
* - http://john-chapman-graphics.blogspot.com/2013/01/ssao-tutorial.html
|
|
18
|
+
* - https://learnopengl.com/Advanced-Lighting/SSAO
|
|
19
|
+
* - https://creativecoding.soe.ucsc.edu/courses/cmpm164/_schedule/AmbientOcclusion.pdf
|
|
20
|
+
* - https://drive.google.com/file/d/1SyagcEVplIm2KkRD3WQYSO9O0Iyi1hfy/edit
|
|
21
|
+
* - Scalable Ambient Occlusion (SAO), see also SAOShader.js
|
|
22
|
+
* - https://casual-effects.com/research/McGuire2012SAO/index.html
|
|
23
|
+
* - https://research.nvidia.com/sites/default/files/pubs/2012-06_Scalable-Ambient-Obscurance/McGuire12SAO.pdf
|
|
24
|
+
* - N8HO
|
|
25
|
+
* - https://github.com/N8python/n8ao
|
|
26
|
+
* - Horizon Based Ambient Occlusion (HBAO)
|
|
27
|
+
* - http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.577.2286&rep=rep1&type=pdf
|
|
28
|
+
* - https://www.derschmale.com/2013/12/20/an-alternative-implementation-for-hbao-2/
|
|
29
|
+
*
|
|
30
|
+
* - further reading
|
|
31
|
+
* - https://ceur-ws.org/Vol-3027/paper5.pdf
|
|
32
|
+
* - https://www.comp.nus.edu.sg/~lowkl/publications/mssao_visual_computer_2012.pdf
|
|
33
|
+
* - https://web.ics.purdue.edu/~tmcgraw/papers/mcgraw-ao-2008.pdf
|
|
34
|
+
* - https://www.activision.com/cdn/research/Practical_Real_Time_Strategies_for_Accurate_Indirect_Occlusion_NEW%20VERSION_COLOR.pdf
|
|
35
|
+
* - https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.390.2463&rep=rep1&type=pdf
|
|
36
|
+
* - https://www.intel.com/content/www/us/en/developer/articles/technical/adaptive-screen-space-ambient-occlusion.html
|
|
37
|
+
*/
|
|
38
|
+
|
|
39
|
+
const GTAOShader = {
|
|
40
|
+
|
|
41
|
+
name: 'GTAOShader',
|
|
42
|
+
|
|
43
|
+
defines: {
|
|
44
|
+
PERSPECTIVE_CAMERA: 1,
|
|
45
|
+
SAMPLES: 16,
|
|
46
|
+
NORMAL_VECTOR_TYPE: 1,
|
|
47
|
+
DEPTH_SWIZZLING: 'x',
|
|
48
|
+
SCREEN_SPACE_RADIUS: 0,
|
|
49
|
+
SCREEN_SPACE_RADIUS_SCALE: 100.0,
|
|
50
|
+
SCENE_CLIP_BOX: 0,
|
|
51
|
+
},
|
|
52
|
+
|
|
53
|
+
uniforms: {
|
|
54
|
+
tNormal: { value: null },
|
|
55
|
+
tDepth: { value: null },
|
|
56
|
+
tNoise: { value: null },
|
|
57
|
+
resolution: { value: new Vector2() },
|
|
58
|
+
cameraNear: { value: null },
|
|
59
|
+
cameraFar: { value: null },
|
|
60
|
+
cameraProjectionMatrix: { value: new Matrix4() },
|
|
61
|
+
cameraProjectionMatrixInverse: { value: new Matrix4() },
|
|
62
|
+
cameraWorldMatrix: { value: new Matrix4() },
|
|
63
|
+
radius: { value: 0.25 },
|
|
64
|
+
distanceExponent: { value: 1. },
|
|
65
|
+
thickness: { value: 1. },
|
|
66
|
+
distanceFallOff: { value: 1. },
|
|
67
|
+
scale: { value: 1. },
|
|
68
|
+
sceneBoxMin: { value: new Vector3( - 1, - 1, - 1 ) },
|
|
69
|
+
sceneBoxMax: { value: new Vector3( 1, 1, 1 ) },
|
|
70
|
+
},
|
|
71
|
+
|
|
72
|
+
vertexShader: /* glsl */`
|
|
73
|
+
|
|
74
|
+
varying vec2 vUv;
|
|
75
|
+
|
|
76
|
+
void main() {
|
|
77
|
+
vUv = uv;
|
|
78
|
+
gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
|
|
79
|
+
}`,
|
|
80
|
+
|
|
81
|
+
fragmentShader: /* glsl */`
|
|
82
|
+
varying vec2 vUv;
|
|
83
|
+
uniform highp sampler2D tNormal;
|
|
84
|
+
uniform highp sampler2D tDepth;
|
|
85
|
+
uniform sampler2D tNoise;
|
|
86
|
+
uniform vec2 resolution;
|
|
87
|
+
uniform float cameraNear;
|
|
88
|
+
uniform float cameraFar;
|
|
89
|
+
uniform mat4 cameraProjectionMatrix;
|
|
90
|
+
uniform mat4 cameraProjectionMatrixInverse;
|
|
91
|
+
uniform mat4 cameraWorldMatrix;
|
|
92
|
+
uniform float radius;
|
|
93
|
+
uniform float distanceExponent;
|
|
94
|
+
uniform float thickness;
|
|
95
|
+
uniform float distanceFallOff;
|
|
96
|
+
uniform float scale;
|
|
97
|
+
#if SCENE_CLIP_BOX == 1
|
|
98
|
+
uniform vec3 sceneBoxMin;
|
|
99
|
+
uniform vec3 sceneBoxMax;
|
|
100
|
+
#endif
|
|
101
|
+
|
|
102
|
+
#include <common>
|
|
103
|
+
#include <packing>
|
|
104
|
+
|
|
105
|
+
#ifndef FRAGMENT_OUTPUT
|
|
106
|
+
#define FRAGMENT_OUTPUT vec4(vec3(ao), 1.)
|
|
107
|
+
#endif
|
|
108
|
+
|
|
109
|
+
vec3 getViewPosition(const in vec2 screenPosition, const in float depth) {
|
|
110
|
+
vec4 clipSpacePosition = vec4(vec3(screenPosition, depth) * 2.0 - 1.0, 1.0);
|
|
111
|
+
vec4 viewSpacePosition = cameraProjectionMatrixInverse * clipSpacePosition;
|
|
112
|
+
return viewSpacePosition.xyz / viewSpacePosition.w;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
float getDepth(const vec2 uv) {
|
|
116
|
+
return textureLod(tDepth, uv.xy, 0.0).DEPTH_SWIZZLING;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
float fetchDepth(const ivec2 uv) {
|
|
120
|
+
return texelFetch(tDepth, uv.xy, 0).DEPTH_SWIZZLING;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
float getViewZ(const in float depth) {
|
|
124
|
+
#if PERSPECTIVE_CAMERA == 1
|
|
125
|
+
return perspectiveDepthToViewZ(depth, cameraNear, cameraFar);
|
|
126
|
+
#else
|
|
127
|
+
return orthographicDepthToViewZ(depth, cameraNear, cameraFar);
|
|
128
|
+
#endif
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
vec3 computeNormalFromDepth(const vec2 uv) {
|
|
132
|
+
vec2 size = vec2(textureSize(tDepth, 0));
|
|
133
|
+
ivec2 p = ivec2(uv * size);
|
|
134
|
+
float c0 = fetchDepth(p);
|
|
135
|
+
float l2 = fetchDepth(p - ivec2(2, 0));
|
|
136
|
+
float l1 = fetchDepth(p - ivec2(1, 0));
|
|
137
|
+
float r1 = fetchDepth(p + ivec2(1, 0));
|
|
138
|
+
float r2 = fetchDepth(p + ivec2(2, 0));
|
|
139
|
+
float b2 = fetchDepth(p - ivec2(0, 2));
|
|
140
|
+
float b1 = fetchDepth(p - ivec2(0, 1));
|
|
141
|
+
float t1 = fetchDepth(p + ivec2(0, 1));
|
|
142
|
+
float t2 = fetchDepth(p + ivec2(0, 2));
|
|
143
|
+
float dl = abs((2.0 * l1 - l2) - c0);
|
|
144
|
+
float dr = abs((2.0 * r1 - r2) - c0);
|
|
145
|
+
float db = abs((2.0 * b1 - b2) - c0);
|
|
146
|
+
float dt = abs((2.0 * t1 - t2) - c0);
|
|
147
|
+
vec3 ce = getViewPosition(uv, c0).xyz;
|
|
148
|
+
vec3 dpdx = (dl < dr) ? ce - getViewPosition((uv - vec2(1.0 / size.x, 0.0)), l1).xyz : -ce + getViewPosition((uv + vec2(1.0 / size.x, 0.0)), r1).xyz;
|
|
149
|
+
vec3 dpdy = (db < dt) ? ce - getViewPosition((uv - vec2(0.0, 1.0 / size.y)), b1).xyz : -ce + getViewPosition((uv + vec2(0.0, 1.0 / size.y)), t1).xyz;
|
|
150
|
+
return normalize(cross(dpdx, dpdy));
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
vec3 getViewNormal(const vec2 uv) {
|
|
154
|
+
#if NORMAL_VECTOR_TYPE == 2
|
|
155
|
+
return normalize(textureLod(tNormal, uv, 0.).rgb);
|
|
156
|
+
#elif NORMAL_VECTOR_TYPE == 1
|
|
157
|
+
return unpackRGBToNormal(textureLod(tNormal, uv, 0.).rgb);
|
|
158
|
+
#else
|
|
159
|
+
return computeNormalFromDepth(uv);
|
|
160
|
+
#endif
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
vec3 getSceneUvAndDepth(vec3 sampleViewPos) {
|
|
164
|
+
vec4 sampleClipPos = cameraProjectionMatrix * vec4(sampleViewPos, 1.);
|
|
165
|
+
vec2 sampleUv = sampleClipPos.xy / sampleClipPos.w * 0.5 + 0.5;
|
|
166
|
+
float sampleSceneDepth = getDepth(sampleUv);
|
|
167
|
+
return vec3(sampleUv, sampleSceneDepth);
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
void main() {
|
|
171
|
+
float depth = getDepth(vUv.xy);
|
|
172
|
+
if (depth >= 1.0) {
|
|
173
|
+
discard;
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
176
|
+
vec3 viewPos = getViewPosition(vUv, depth);
|
|
177
|
+
vec3 viewNormal = getViewNormal(vUv);
|
|
178
|
+
|
|
179
|
+
float radiusToUse = radius;
|
|
180
|
+
float distanceFalloffToUse = thickness;
|
|
181
|
+
#if SCREEN_SPACE_RADIUS == 1
|
|
182
|
+
float radiusScale = getViewPosition(vec2(0.5 + float(SCREEN_SPACE_RADIUS_SCALE) / resolution.x, 0.0), depth).x;
|
|
183
|
+
radiusToUse *= radiusScale;
|
|
184
|
+
distanceFalloffToUse *= radiusScale;
|
|
185
|
+
#endif
|
|
186
|
+
|
|
187
|
+
#if SCENE_CLIP_BOX == 1
|
|
188
|
+
vec3 worldPos = (cameraWorldMatrix * vec4(viewPos, 1.0)).xyz;
|
|
189
|
+
float boxDistance = length(max(vec3(0.0), max(sceneBoxMin - worldPos, worldPos - sceneBoxMax)));
|
|
190
|
+
if (boxDistance > radiusToUse) {
|
|
191
|
+
discard;
|
|
192
|
+
return;
|
|
193
|
+
}
|
|
194
|
+
#endif
|
|
195
|
+
|
|
196
|
+
vec2 noiseResolution = vec2(textureSize(tNoise, 0));
|
|
197
|
+
vec2 noiseUv = vUv * resolution / noiseResolution;
|
|
198
|
+
vec4 noiseTexel = textureLod(tNoise, noiseUv, 0.0);
|
|
199
|
+
vec3 randomVec = noiseTexel.xyz * 2.0 - 1.0;
|
|
200
|
+
vec3 tangent = normalize(vec3(randomVec.xy, 0.));
|
|
201
|
+
vec3 bitangent = vec3(-tangent.y, tangent.x, 0.);
|
|
202
|
+
mat3 kernelMatrix = mat3(tangent, bitangent, vec3(0., 0., 1.));
|
|
203
|
+
|
|
204
|
+
const int DIRECTIONS = SAMPLES < 30 ? 3 : 5;
|
|
205
|
+
const int STEPS = (SAMPLES + DIRECTIONS - 1) / DIRECTIONS;
|
|
206
|
+
float ao = 0.0, totalWeight = 0.0;
|
|
207
|
+
for (int i = 0; i < DIRECTIONS; ++i) {
|
|
208
|
+
|
|
209
|
+
float angle = float(i) / float(DIRECTIONS) * PI;
|
|
210
|
+
vec4 sampleDir = vec4(cos(angle), sin(angle), 0., 0.5 + 0.5 * noiseTexel.w);
|
|
211
|
+
sampleDir.xyz = normalize(kernelMatrix * sampleDir.xyz);
|
|
212
|
+
|
|
213
|
+
vec3 viewDir = normalize(-viewPos.xyz);
|
|
214
|
+
vec3 sliceBitangent = normalize(cross(sampleDir.xyz, viewDir));
|
|
215
|
+
vec3 sliceTangent = cross(sliceBitangent, viewDir);
|
|
216
|
+
vec3 normalInSlice = normalize(viewNormal - sliceBitangent * dot(viewNormal, sliceBitangent));
|
|
217
|
+
|
|
218
|
+
vec3 tangentToNormalInSlice = cross(normalInSlice, sliceBitangent);
|
|
219
|
+
vec2 cosHorizons = vec2(dot(viewDir, tangentToNormalInSlice), dot(viewDir, -tangentToNormalInSlice));
|
|
220
|
+
|
|
221
|
+
for (int j = 0; j < STEPS; ++j) {
|
|
222
|
+
vec3 sampleViewOffset = sampleDir.xyz * radiusToUse * sampleDir.w * pow(float(j + 1) / float(STEPS), distanceExponent);
|
|
223
|
+
|
|
224
|
+
vec3 sampleSceneUvDepth = getSceneUvAndDepth(viewPos + sampleViewOffset);
|
|
225
|
+
vec3 sampleSceneViewPos = getViewPosition(sampleSceneUvDepth.xy, sampleSceneUvDepth.z);
|
|
226
|
+
vec3 viewDelta = sampleSceneViewPos - viewPos;
|
|
227
|
+
if (abs(viewDelta.z) < thickness) {
|
|
228
|
+
float sampleCosHorizon = dot(viewDir, normalize(viewDelta));
|
|
229
|
+
cosHorizons.x += max(0., (sampleCosHorizon - cosHorizons.x) * mix(1., 2. / float(j + 2), distanceFallOff));
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
sampleSceneUvDepth = getSceneUvAndDepth(viewPos - sampleViewOffset);
|
|
233
|
+
sampleSceneViewPos = getViewPosition(sampleSceneUvDepth.xy, sampleSceneUvDepth.z);
|
|
234
|
+
viewDelta = sampleSceneViewPos - viewPos;
|
|
235
|
+
if (abs(viewDelta.z) < thickness) {
|
|
236
|
+
float sampleCosHorizon = dot(viewDir, normalize(viewDelta));
|
|
237
|
+
cosHorizons.y += max(0., (sampleCosHorizon - cosHorizons.y) * mix(1., 2. / float(j + 2), distanceFallOff));
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
vec2 sinHorizons = sqrt(1. - cosHorizons * cosHorizons);
|
|
242
|
+
float nx = dot(normalInSlice, sliceTangent);
|
|
243
|
+
float ny = dot(normalInSlice, viewDir);
|
|
244
|
+
float nxb = 1. / 2. * (acos(cosHorizons.y) - acos(cosHorizons.x) + sinHorizons.x * cosHorizons.x - sinHorizons.y * cosHorizons.y);
|
|
245
|
+
float nyb = 1. / 2. * (2. - cosHorizons.x * cosHorizons.x - cosHorizons.y * cosHorizons.y);
|
|
246
|
+
float occlusion = nx * nxb + ny * nyb;
|
|
247
|
+
ao += occlusion;
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
ao = clamp(ao / float(DIRECTIONS), 0., 1.);
|
|
251
|
+
#if SCENE_CLIP_BOX == 1
|
|
252
|
+
ao = mix(ao, 1., smoothstep(0., radiusToUse, boxDistance));
|
|
253
|
+
#endif
|
|
254
|
+
ao = pow(ao, scale);
|
|
255
|
+
|
|
256
|
+
gl_FragColor = FRAGMENT_OUTPUT;
|
|
257
|
+
}`
|
|
258
|
+
|
|
259
|
+
};
|
|
260
|
+
|
|
261
|
+
const GTAODepthShader = {
|
|
262
|
+
|
|
263
|
+
name: 'GTAODepthShader',
|
|
264
|
+
|
|
265
|
+
defines: {
|
|
266
|
+
PERSPECTIVE_CAMERA: 1
|
|
267
|
+
},
|
|
268
|
+
|
|
269
|
+
uniforms: {
|
|
270
|
+
tDepth: { value: null },
|
|
271
|
+
cameraNear: { value: null },
|
|
272
|
+
cameraFar: { value: null },
|
|
273
|
+
},
|
|
274
|
+
|
|
275
|
+
vertexShader: /* glsl */`
|
|
276
|
+
varying vec2 vUv;
|
|
277
|
+
|
|
278
|
+
void main() {
|
|
279
|
+
vUv = uv;
|
|
280
|
+
gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
|
|
281
|
+
}`,
|
|
282
|
+
|
|
283
|
+
fragmentShader: /* glsl */`
|
|
284
|
+
uniform sampler2D tDepth;
|
|
285
|
+
uniform float cameraNear;
|
|
286
|
+
uniform float cameraFar;
|
|
287
|
+
varying vec2 vUv;
|
|
288
|
+
|
|
289
|
+
#include <packing>
|
|
290
|
+
|
|
291
|
+
float getLinearDepth( const in vec2 screenPosition ) {
|
|
292
|
+
#if PERSPECTIVE_CAMERA == 1
|
|
293
|
+
float fragCoordZ = texture2D( tDepth, screenPosition ).x;
|
|
294
|
+
float viewZ = perspectiveDepthToViewZ( fragCoordZ, cameraNear, cameraFar );
|
|
295
|
+
return viewZToOrthographicDepth( viewZ, cameraNear, cameraFar );
|
|
296
|
+
#else
|
|
297
|
+
return texture2D( tDepth, screenPosition ).x;
|
|
298
|
+
#endif
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
void main() {
|
|
302
|
+
float depth = getLinearDepth( vUv );
|
|
303
|
+
gl_FragColor = vec4( vec3( 1.0 - depth ), 1.0 );
|
|
304
|
+
|
|
305
|
+
}`
|
|
306
|
+
|
|
307
|
+
};
|
|
308
|
+
|
|
309
|
+
const GTAOBlendShader = {
|
|
310
|
+
|
|
311
|
+
name: 'GTAOBlendShader',
|
|
312
|
+
|
|
313
|
+
uniforms: {
|
|
314
|
+
tDiffuse: { value: null },
|
|
315
|
+
intensity: { value: 1.0 }
|
|
316
|
+
},
|
|
317
|
+
|
|
318
|
+
vertexShader: /* glsl */`
|
|
319
|
+
varying vec2 vUv;
|
|
320
|
+
|
|
321
|
+
void main() {
|
|
322
|
+
vUv = uv;
|
|
323
|
+
gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
|
|
324
|
+
}`,
|
|
325
|
+
|
|
326
|
+
fragmentShader: /* glsl */`
|
|
327
|
+
uniform float intensity;
|
|
328
|
+
uniform sampler2D tDiffuse;
|
|
329
|
+
varying vec2 vUv;
|
|
330
|
+
|
|
331
|
+
void main() {
|
|
332
|
+
vec4 texel = texture2D( tDiffuse, vUv );
|
|
333
|
+
gl_FragColor = vec4(mix(vec3(1.), texel.rgb, intensity), texel.a);
|
|
334
|
+
}`
|
|
335
|
+
|
|
336
|
+
};
|
|
337
|
+
|
|
338
|
+
|
|
339
|
+
function generateMagicSquareNoise( size = 5 ) {
|
|
340
|
+
|
|
341
|
+
const noiseSize = Math.floor( size ) % 2 === 0 ? Math.floor( size ) + 1 : Math.floor( size );
|
|
342
|
+
const magicSquare = generateMagicSquare( noiseSize );
|
|
343
|
+
const noiseSquareSize = magicSquare.length;
|
|
344
|
+
const data = new Uint8Array( noiseSquareSize * 4 );
|
|
345
|
+
|
|
346
|
+
for ( let inx = 0; inx < noiseSquareSize; ++ inx ) {
|
|
347
|
+
|
|
348
|
+
const iAng = magicSquare[ inx ];
|
|
349
|
+
const angle = ( 2 * Math.PI * iAng ) / noiseSquareSize;
|
|
350
|
+
const randomVec = new Vector3(
|
|
351
|
+
Math.cos( angle ),
|
|
352
|
+
Math.sin( angle ),
|
|
353
|
+
0
|
|
354
|
+
).normalize();
|
|
355
|
+
data[ inx * 4 ] = ( randomVec.x * 0.5 + 0.5 ) * 255;
|
|
356
|
+
data[ inx * 4 + 1 ] = ( randomVec.y * 0.5 + 0.5 ) * 255;
|
|
357
|
+
data[ inx * 4 + 2 ] = 127;
|
|
358
|
+
data[ inx * 4 + 3 ] = 255;
|
|
359
|
+
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
const noiseTexture = new DataTexture( data, noiseSize, noiseSize );
|
|
363
|
+
noiseTexture.wrapS = RepeatWrapping;
|
|
364
|
+
noiseTexture.wrapT = RepeatWrapping;
|
|
365
|
+
noiseTexture.needsUpdate = true;
|
|
366
|
+
|
|
367
|
+
return noiseTexture;
|
|
368
|
+
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
function generateMagicSquare( size ) {
|
|
372
|
+
|
|
373
|
+
const noiseSize = Math.floor( size ) % 2 === 0 ? Math.floor( size ) + 1 : Math.floor( size );
|
|
374
|
+
const noiseSquareSize = noiseSize * noiseSize;
|
|
375
|
+
const magicSquare = Array( noiseSquareSize ).fill( 0 );
|
|
376
|
+
let i = Math.floor( noiseSize / 2 );
|
|
377
|
+
let j = noiseSize - 1;
|
|
378
|
+
|
|
379
|
+
for ( let num = 1; num <= noiseSquareSize; ) {
|
|
380
|
+
|
|
381
|
+
if ( i === - 1 && j === noiseSize ) {
|
|
382
|
+
|
|
383
|
+
j = noiseSize - 2;
|
|
384
|
+
i = 0;
|
|
385
|
+
|
|
386
|
+
} else {
|
|
387
|
+
|
|
388
|
+
if ( j === noiseSize ) {
|
|
389
|
+
|
|
390
|
+
j = 0;
|
|
391
|
+
|
|
392
|
+
}
|
|
393
|
+
|
|
394
|
+
if ( i < 0 ) {
|
|
395
|
+
|
|
396
|
+
i = noiseSize - 1;
|
|
397
|
+
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
if ( magicSquare[ i * noiseSize + j ] !== 0 ) {
|
|
403
|
+
|
|
404
|
+
j -= 2;
|
|
405
|
+
i ++;
|
|
406
|
+
continue;
|
|
407
|
+
|
|
408
|
+
} else {
|
|
409
|
+
|
|
410
|
+
magicSquare[ i * noiseSize + j ] = num ++;
|
|
411
|
+
|
|
412
|
+
}
|
|
413
|
+
|
|
414
|
+
j ++;
|
|
415
|
+
i --;
|
|
416
|
+
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
return magicSquare;
|
|
420
|
+
|
|
421
|
+
}
|
|
422
|
+
|
|
423
|
+
|
|
424
|
+
export { generateMagicSquareNoise, GTAOShader, GTAODepthShader, GTAOBlendShader };
|
|
@@ -23,6 +23,8 @@ import {
|
|
|
23
23
|
|
|
24
24
|
const GodRaysDepthMaskShader = {
|
|
25
25
|
|
|
26
|
+
name: 'GodRaysDepthMaskShader',
|
|
27
|
+
|
|
26
28
|
uniforms: {
|
|
27
29
|
|
|
28
30
|
tInput: {
|
|
@@ -74,6 +76,8 @@ const GodRaysDepthMaskShader = {
|
|
|
74
76
|
|
|
75
77
|
const GodRaysGenerateShader = {
|
|
76
78
|
|
|
79
|
+
name: 'GodRaysGenerateShader',
|
|
80
|
+
|
|
77
81
|
uniforms: {
|
|
78
82
|
|
|
79
83
|
tInput: {
|
|
@@ -194,6 +198,8 @@ const GodRaysGenerateShader = {
|
|
|
194
198
|
|
|
195
199
|
const GodRaysCombineShader = {
|
|
196
200
|
|
|
201
|
+
name: 'GodRaysCombineShader',
|
|
202
|
+
|
|
197
203
|
uniforms: {
|
|
198
204
|
|
|
199
205
|
tColors: {
|
|
@@ -251,6 +257,8 @@ const GodRaysCombineShader = {
|
|
|
251
257
|
|
|
252
258
|
const GodRaysFakeSunShader = {
|
|
253
259
|
|
|
260
|
+
name: 'GodRaysFakeSunShader',
|
|
261
|
+
|
|
254
262
|
uniforms: {
|
|
255
263
|
|
|
256
264
|
vSunPositionScreenSpace: {
|
|
@@ -1,9 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
ShaderChunk
|
|
3
|
-
} from 'three';
|
|
4
|
-
|
|
5
1
|
const OutputShader = {
|
|
6
2
|
|
|
3
|
+
name: 'OutputShader',
|
|
4
|
+
|
|
7
5
|
uniforms: {
|
|
8
6
|
|
|
9
7
|
'tDiffuse': { value: null },
|
|
@@ -35,7 +33,8 @@ const OutputShader = {
|
|
|
35
33
|
|
|
36
34
|
uniform sampler2D tDiffuse;
|
|
37
35
|
|
|
38
|
-
|
|
36
|
+
#include <tonemapping_pars_fragment>
|
|
37
|
+
#include <colorspace_pars_fragment>
|
|
39
38
|
|
|
40
39
|
varying vec2 vUv;
|
|
41
40
|
|
|
@@ -61,6 +60,10 @@ const OutputShader = {
|
|
|
61
60
|
|
|
62
61
|
gl_FragColor.rgb = ACESFilmicToneMapping( gl_FragColor.rgb );
|
|
63
62
|
|
|
63
|
+
#elif defined( AGX_TONE_MAPPING )
|
|
64
|
+
|
|
65
|
+
gl_FragColor.rgb = AgXToneMapping( gl_FragColor.rgb );
|
|
66
|
+
|
|
64
67
|
#endif
|
|
65
68
|
|
|
66
69
|
// color space
|