@shapediver/viewer.rendering-engine.rendering-engine-threejs 3.0.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 +73 -0
- package/README.md +3 -0
- package/dist/RenderingEngine.d.ts +296 -0
- package/dist/RenderingEngine.d.ts.map +1 -0
- package/dist/RenderingEngine.js +1079 -0
- package/dist/RenderingEngine.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +47 -0
- package/dist/index.js.map +1 -0
- package/dist/injectors/Tag3dGeometryCreationInjector.d.ts +11 -0
- package/dist/injectors/Tag3dGeometryCreationInjector.d.ts.map +1 -0
- package/dist/injectors/Tag3dGeometryCreationInjector.js +169 -0
- package/dist/injectors/Tag3dGeometryCreationInjector.js.map +1 -0
- package/dist/injectors/TextureUnifierInjector.d.ts +14 -0
- package/dist/injectors/TextureUnifierInjector.d.ts.map +1 -0
- package/dist/injectors/TextureUnifierInjector.js +227 -0
- package/dist/injectors/TextureUnifierInjector.js.map +1 -0
- package/dist/interfaces/ILoader.d.ts +4 -0
- package/dist/interfaces/ILoader.d.ts.map +1 -0
- package/dist/interfaces/ILoader.js +3 -0
- package/dist/interfaces/ILoader.js.map +1 -0
- package/dist/interfaces/IPostProcessingEffectDefinitions.d.ts +307 -0
- package/dist/interfaces/IPostProcessingEffectDefinitions.d.ts.map +1 -0
- package/dist/interfaces/IPostProcessingEffectDefinitions.js +31 -0
- package/dist/interfaces/IPostProcessingEffectDefinitions.js.map +1 -0
- package/dist/interfaces/IRenderingEngine.d.ts +43 -0
- package/dist/interfaces/IRenderingEngine.d.ts.map +1 -0
- package/dist/interfaces/IRenderingEngine.js +3 -0
- package/dist/interfaces/IRenderingEngine.js.map +1 -0
- package/dist/loaders/EnvironmentMapLoader.d.ts +98 -0
- package/dist/loaders/EnvironmentMapLoader.d.ts.map +1 -0
- package/dist/loaders/EnvironmentMapLoader.js +348 -0
- package/dist/loaders/EnvironmentMapLoader.js.map +1 -0
- package/dist/loaders/GeometryLoader.d.ts +38 -0
- package/dist/loaders/GeometryLoader.d.ts.map +1 -0
- package/dist/loaders/GeometryLoader.js +505 -0
- package/dist/loaders/GeometryLoader.js.map +1 -0
- package/dist/loaders/HTMLElementAnchorLoader.d.ts +17 -0
- package/dist/loaders/HTMLElementAnchorLoader.d.ts.map +1 -0
- package/dist/loaders/HTMLElementAnchorLoader.js +84 -0
- package/dist/loaders/HTMLElementAnchorLoader.js.map +1 -0
- package/dist/loaders/LightLoader.d.ts +19 -0
- package/dist/loaders/LightLoader.d.ts.map +1 -0
- package/dist/loaders/LightLoader.js +152 -0
- package/dist/loaders/LightLoader.js.map +1 -0
- package/dist/loaders/MaterialLoader.d.ts +99 -0
- package/dist/loaders/MaterialLoader.d.ts.map +1 -0
- package/dist/loaders/MaterialLoader.js +1175 -0
- package/dist/loaders/MaterialLoader.js.map +1 -0
- package/dist/managers/CameraManager.d.ts +20 -0
- package/dist/managers/CameraManager.d.ts.map +1 -0
- package/dist/managers/CameraManager.js +195 -0
- package/dist/managers/CameraManager.js.map +1 -0
- package/dist/managers/EnvironmentGeometryManager.d.ts +43 -0
- package/dist/managers/EnvironmentGeometryManager.d.ts.map +1 -0
- package/dist/managers/EnvironmentGeometryManager.js +210 -0
- package/dist/managers/EnvironmentGeometryManager.js.map +1 -0
- package/dist/managers/PostProcessingManager.d.ts +1014 -0
- package/dist/managers/PostProcessingManager.d.ts.map +1 -0
- package/dist/managers/PostProcessingManager.js +1013 -0
- package/dist/managers/PostProcessingManager.js.map +1 -0
- package/dist/managers/RenderingManager.d.ts +83 -0
- package/dist/managers/RenderingManager.d.ts.map +1 -0
- package/dist/managers/RenderingManager.js +567 -0
- package/dist/managers/RenderingManager.js.map +1 -0
- package/dist/managers/SceneTracingManager.d.ts +26 -0
- package/dist/managers/SceneTracingManager.d.ts.map +1 -0
- package/dist/managers/SceneTracingManager.js +122 -0
- package/dist/managers/SceneTracingManager.js.map +1 -0
- package/dist/managers/SceneTreeManager.d.ts +55 -0
- package/dist/managers/SceneTreeManager.d.ts.map +1 -0
- package/dist/managers/SceneTreeManager.js +501 -0
- package/dist/managers/SceneTreeManager.js.map +1 -0
- package/dist/managers/postprocessing/GodRaysManager.d.ts +13 -0
- package/dist/managers/postprocessing/GodRaysManager.d.ts.map +1 -0
- package/dist/managers/postprocessing/GodRaysManager.js +64 -0
- package/dist/managers/postprocessing/GodRaysManager.js.map +1 -0
- package/dist/managers/postprocessing/OutlineManager.d.ts +15 -0
- package/dist/managers/postprocessing/OutlineManager.d.ts.map +1 -0
- package/dist/managers/postprocessing/OutlineManager.js +67 -0
- package/dist/managers/postprocessing/OutlineManager.js.map +1 -0
- package/dist/managers/postprocessing/SSAARenderPass.d.ts +54 -0
- package/dist/managers/postprocessing/SSAARenderPass.d.ts.map +1 -0
- package/dist/managers/postprocessing/SSAARenderPass.js +234 -0
- package/dist/managers/postprocessing/SSAARenderPass.js.map +1 -0
- package/dist/managers/postprocessing/SelectiveBloomManager.d.ts +15 -0
- package/dist/managers/postprocessing/SelectiveBloomManager.d.ts.map +1 -0
- package/dist/managers/postprocessing/SelectiveBloomManager.js +67 -0
- package/dist/managers/postprocessing/SelectiveBloomManager.js.map +1 -0
- package/dist/managers/postprocessing/ao/ao/AOEffect.d.ts +47 -0
- package/dist/managers/postprocessing/ao/ao/AOEffect.d.ts.map +1 -0
- package/dist/managers/postprocessing/ao/ao/AOEffect.js +134 -0
- package/dist/managers/postprocessing/ao/ao/AOEffect.js.map +1 -0
- package/dist/managers/postprocessing/ao/ao/AOPass.d.ts +13 -0
- package/dist/managers/postprocessing/ao/ao/AOPass.d.ts.map +1 -0
- package/dist/managers/postprocessing/ao/ao/AOPass.js +78 -0
- package/dist/managers/postprocessing/ao/ao/AOPass.js.map +1 -0
- package/dist/managers/postprocessing/ao/ao/shader/ao_compose.d.ts +2 -0
- package/dist/managers/postprocessing/ao/ao/shader/ao_compose.d.ts.map +1 -0
- package/dist/managers/postprocessing/ao/ao/shader/ao_compose.js +23 -0
- package/dist/managers/postprocessing/ao/ao/shader/ao_compose.js.map +1 -0
- package/dist/managers/postprocessing/ao/hbao/HBAOEffect.d.ts +15 -0
- package/dist/managers/postprocessing/ao/hbao/HBAOEffect.d.ts.map +1 -0
- package/dist/managers/postprocessing/ao/hbao/HBAOEffect.js +25 -0
- package/dist/managers/postprocessing/ao/hbao/HBAOEffect.js.map +1 -0
- package/dist/managers/postprocessing/ao/hbao/shader/hbao.d.ts +2 -0
- package/dist/managers/postprocessing/ao/hbao/shader/hbao.d.ts.map +1 -0
- package/dist/managers/postprocessing/ao/hbao/shader/hbao.js +102 -0
- package/dist/managers/postprocessing/ao/hbao/shader/hbao.js.map +1 -0
- package/dist/managers/postprocessing/ao/hbao/shader/hbao_utils.d.ts +2 -0
- package/dist/managers/postprocessing/ao/hbao/shader/hbao_utils.d.ts.map +1 -0
- package/dist/managers/postprocessing/ao/hbao/shader/hbao_utils.js +99 -0
- package/dist/managers/postprocessing/ao/hbao/shader/hbao_utils.js.map +1 -0
- package/dist/managers/postprocessing/ao/poissionDenoise/PoissionDenoisePass.d.ts +37 -0
- package/dist/managers/postprocessing/ao/poissionDenoise/PoissionDenoisePass.d.ts.map +1 -0
- package/dist/managers/postprocessing/ao/poissionDenoise/PoissionDenoisePass.js +171 -0
- package/dist/managers/postprocessing/ao/poissionDenoise/PoissionDenoisePass.js.map +1 -0
- package/dist/managers/postprocessing/ao/poissionDenoise/shader/poissionDenoise.d.ts +2 -0
- package/dist/managers/postprocessing/ao/poissionDenoise/shader/poissionDenoise.d.ts.map +1 -0
- package/dist/managers/postprocessing/ao/poissionDenoise/shader/poissionDenoise.js +131 -0
- package/dist/managers/postprocessing/ao/poissionDenoise/shader/poissionDenoise.js.map +1 -0
- package/dist/managers/postprocessing/ao/ssao/SSAOEffect.d.ts +15 -0
- package/dist/managers/postprocessing/ao/ssao/SSAOEffect.d.ts.map +1 -0
- package/dist/managers/postprocessing/ao/ssao/SSAOEffect.js +76 -0
- package/dist/managers/postprocessing/ao/ssao/SSAOEffect.js.map +1 -0
- package/dist/managers/postprocessing/ao/ssao/shader/ssao.d.ts +2 -0
- package/dist/managers/postprocessing/ao/ssao/shader/ssao.d.ts.map +1 -0
- package/dist/managers/postprocessing/ao/ssao/shader/ssao.js +134 -0
- package/dist/managers/postprocessing/ao/ssao/shader/ssao.js.map +1 -0
- package/dist/managers/postprocessing/ao/utils/shader/basic.d.ts +2 -0
- package/dist/managers/postprocessing/ao/utils/shader/basic.d.ts.map +1 -0
- package/dist/managers/postprocessing/ao/utils/shader/basic.js +12 -0
- package/dist/managers/postprocessing/ao/utils/shader/basic.js.map +1 -0
- package/dist/managers/postprocessing/ao/utils/shader/sampleBlueNoise.d.ts +2 -0
- package/dist/managers/postprocessing/ao/utils/shader/sampleBlueNoise.d.ts.map +1 -0
- package/dist/managers/postprocessing/ao/utils/shader/sampleBlueNoise.js +42 -0
- package/dist/managers/postprocessing/ao/utils/shader/sampleBlueNoise.js.map +1 -0
- package/dist/managers/postprocessing/utils/CopyMaterial.d.ts +38 -0
- package/dist/managers/postprocessing/utils/CopyMaterial.d.ts.map +1 -0
- package/dist/managers/postprocessing/utils/CopyMaterial.js +106 -0
- package/dist/managers/postprocessing/utils/CopyMaterial.js.map +1 -0
- package/dist/managers/postprocessing/utils/CopyShader.d.ts +14 -0
- package/dist/managers/postprocessing/utils/CopyShader.d.ts.map +1 -0
- package/dist/managers/postprocessing/utils/CopyShader.js +36 -0
- package/dist/managers/postprocessing/utils/CopyShader.js.map +1 -0
- package/dist/managers/postprocessing/utils/FullScreenQuad.d.ts +10 -0
- package/dist/managers/postprocessing/utils/FullScreenQuad.d.ts.map +1 -0
- package/dist/managers/postprocessing/utils/FullScreenQuad.js +29 -0
- package/dist/managers/postprocessing/utils/FullScreenQuad.js.map +1 -0
- package/dist/managers/postprocessing/utils/NormalPass.d.ts +88 -0
- package/dist/managers/postprocessing/utils/NormalPass.d.ts.map +1 -0
- package/dist/managers/postprocessing/utils/NormalPass.js +157 -0
- package/dist/managers/postprocessing/utils/NormalPass.js.map +1 -0
- package/dist/managers/postprocessing/utils/RenderPass.d.ts +115 -0
- package/dist/managers/postprocessing/utils/RenderPass.d.ts.map +1 -0
- package/dist/managers/postprocessing/utils/RenderPass.js +251 -0
- package/dist/managers/postprocessing/utils/RenderPass.js.map +1 -0
- package/dist/materials/GemMaterial.d.ts +38 -0
- package/dist/materials/GemMaterial.d.ts.map +1 -0
- package/dist/materials/GemMaterial.js +253 -0
- package/dist/materials/GemMaterial.js.map +1 -0
- package/dist/materials/MeshUnlitMaterialParameters.d.ts +4 -0
- package/dist/materials/MeshUnlitMaterialParameters.d.ts.map +1 -0
- package/dist/materials/MeshUnlitMaterialParameters.js +3 -0
- package/dist/materials/MeshUnlitMaterialParameters.js.map +1 -0
- package/dist/materials/MultiPointsMaterial.d.ts +94 -0
- package/dist/materials/MultiPointsMaterial.d.ts.map +1 -0
- package/dist/materials/MultiPointsMaterial.js +567 -0
- package/dist/materials/MultiPointsMaterial.js.map +1 -0
- package/dist/materials/SpecularGlossinessMaterial.d.ts +14 -0
- package/dist/materials/SpecularGlossinessMaterial.d.ts.map +1 -0
- package/dist/materials/SpecularGlossinessMaterial.js +162 -0
- package/dist/materials/SpecularGlossinessMaterial.js.map +1 -0
- package/dist/objects/SDBone.d.ts +13 -0
- package/dist/objects/SDBone.d.ts.map +1 -0
- package/dist/objects/SDBone.js +75 -0
- package/dist/objects/SDBone.js.map +1 -0
- package/dist/objects/SDColor.d.ts +17 -0
- package/dist/objects/SDColor.d.ts.map +1 -0
- package/dist/objects/SDColor.js +49 -0
- package/dist/objects/SDColor.js.map +1 -0
- package/dist/objects/SDData.d.ts +19 -0
- package/dist/objects/SDData.d.ts.map +1 -0
- package/dist/objects/SDData.js +48 -0
- package/dist/objects/SDData.js.map +1 -0
- package/dist/objects/SDObject.d.ts +14 -0
- package/dist/objects/SDObject.d.ts.map +1 -0
- package/dist/objects/SDObject.js +81 -0
- package/dist/objects/SDObject.js.map +1 -0
- package/dist/shaders/PCSS.d.ts +3 -0
- package/dist/shaders/PCSS.d.ts.map +1 -0
- package/dist/shaders/PCSS.js +127 -0
- package/dist/shaders/PCSS.js.map +1 -0
- package/dist/shaders/gem.d.ts +3 -0
- package/dist/shaders/gem.d.ts.map +1 -0
- package/dist/shaders/gem.js +578 -0
- package/dist/shaders/gem.js.map +1 -0
- package/dist/shaders/multi_points.d.ts +3 -0
- package/dist/shaders/multi_points.d.ts.map +1 -0
- package/dist/shaders/multi_points.js +294 -0
- package/dist/shaders/multi_points.js.map +1 -0
- package/dist/styling/viewport-css.d.ts +2 -0
- package/dist/styling/viewport-css.d.ts.map +1 -0
- package/dist/styling/viewport-css.js +117 -0
- package/dist/styling/viewport-css.js.map +1 -0
- package/dist/three/font.d.ts +2365 -0
- package/dist/three/font.d.ts.map +1 -0
- package/dist/three/font.js +6 -0
- package/dist/three/font.js.map +1 -0
- package/dist/three/geometries/TextGeometry.d.ts +22 -0
- package/dist/three/geometries/TextGeometry.d.ts.map +1 -0
- package/dist/three/geometries/TextGeometry.js +45 -0
- package/dist/three/geometries/TextGeometry.js.map +1 -0
- package/dist/three/loaders/FontLoader.d.ts +15 -0
- package/dist/three/loaders/FontLoader.d.ts.map +1 -0
- package/dist/three/loaders/FontLoader.js +118 -0
- package/dist/three/loaders/FontLoader.js.map +1 -0
- package/dist/three/loaders/RGBELoader.d.ts +24 -0
- package/dist/three/loaders/RGBELoader.d.ts.map +1 -0
- package/dist/three/loaders/RGBELoader.js +299 -0
- package/dist/three/loaders/RGBELoader.js.map +1 -0
- package/dist/types/IThreejsData.d.ts +7 -0
- package/dist/types/IThreejsData.d.ts.map +1 -0
- package/dist/types/IThreejsData.js +3 -0
- package/dist/types/IThreejsData.js.map +1 -0
- package/dist/types/ThreejsData.d.ts +11 -0
- package/dist/types/ThreejsData.d.ts.map +1 -0
- package/dist/types/ThreejsData.js +42 -0
- package/dist/types/ThreejsData.js.map +1 -0
- package/package.json +65 -0
- package/src/RenderingEngine.ts +1342 -0
- package/src/index.ts +23 -0
- package/src/injectors/Tag3dGeometryCreationInjector.ts +170 -0
- package/src/injectors/TextureUnifierInjector.ts +224 -0
- package/src/interfaces/ILoader.ts +3 -0
- package/src/interfaces/IPostProcessingEffectDefinitions.ts +402 -0
- package/src/interfaces/IRenderingEngine.ts +48 -0
- package/src/loaders/EnvironmentMapLoader.ts +355 -0
- package/src/loaders/GeometryLoader.ts +565 -0
- package/src/loaders/HTMLElementAnchorLoader.ts +107 -0
- package/src/loaders/LightLoader.ts +171 -0
- package/src/loaders/MaterialLoader.ts +1418 -0
- package/src/managers/CameraManager.ts +178 -0
- package/src/managers/EnvironmentGeometryManager.ts +224 -0
- package/src/managers/PostProcessingManager.ts +1169 -0
- package/src/managers/RenderingManager.ts +657 -0
- package/src/managers/SceneTracingManager.ts +120 -0
- package/src/managers/SceneTreeManager.ts +569 -0
- package/src/managers/postprocessing/GodRaysManager.ts +52 -0
- package/src/managers/postprocessing/OutlineManager.ts +58 -0
- package/src/managers/postprocessing/SSAARenderPass.ts +339 -0
- package/src/managers/postprocessing/SelectiveBloomManager.ts +58 -0
- package/src/managers/postprocessing/ao/ao/AOEffect.ts +180 -0
- package/src/managers/postprocessing/ao/ao/AOPass.ts +128 -0
- package/src/managers/postprocessing/ao/ao/shader/ao_compose.glsl +17 -0
- package/src/managers/postprocessing/ao/ao/shader/ao_compose.ts +19 -0
- package/src/managers/postprocessing/ao/hbao/HBAOEffect.ts +41 -0
- package/src/managers/postprocessing/ao/hbao/shader/hbao.glsl +96 -0
- package/src/managers/postprocessing/ao/hbao/shader/hbao.ts +98 -0
- package/src/managers/postprocessing/ao/hbao/shader/hbao_utils.glsl +92 -0
- package/src/managers/postprocessing/ao/hbao/shader/hbao_utils.ts +95 -0
- package/src/managers/postprocessing/ao/poissionDenoise/PoissionDenoisePass.ts +245 -0
- package/src/managers/postprocessing/ao/poissionDenoise/shader/poissionDenoise.glsl +125 -0
- package/src/managers/postprocessing/ao/poissionDenoise/shader/poissionDenoise.ts +127 -0
- package/src/managers/postprocessing/ao/ssao/SSAOEffect.ts +106 -0
- package/src/managers/postprocessing/ao/ssao/shader/ssao.glsl +128 -0
- package/src/managers/postprocessing/ao/ssao/shader/ssao.ts +130 -0
- package/src/managers/postprocessing/ao/utils/shader/basic.glsl +6 -0
- package/src/managers/postprocessing/ao/utils/shader/basic.ts +8 -0
- package/src/managers/postprocessing/ao/utils/shader/sampleBlueNoise.glsl +36 -0
- package/src/managers/postprocessing/ao/utils/shader/sampleBlueNoise.ts +38 -0
- package/src/managers/postprocessing/utils/CopyMaterial.ts +130 -0
- package/src/managers/postprocessing/utils/CopyShader.ts +39 -0
- package/src/managers/postprocessing/utils/FullScreenQuad.ts +47 -0
- package/src/managers/postprocessing/utils/NormalPass.ts +222 -0
- package/src/managers/postprocessing/utils/RenderPass.ts +366 -0
- package/src/materials/GemMaterial.ts +268 -0
- package/src/materials/MeshUnlitMaterialParameters.ts +4 -0
- package/src/materials/MultiPointsMaterial.ts +646 -0
- package/src/materials/SpecularGlossinessMaterial.ts +182 -0
- package/src/objects/SDBone.ts +51 -0
- package/src/objects/SDColor.ts +54 -0
- package/src/objects/SDData.ts +44 -0
- package/src/objects/SDObject.ts +58 -0
- package/src/shaders/PCSS.ts +124 -0
- package/src/shaders/gem.ts +575 -0
- package/src/shaders/gem_frag.glsl +517 -0
- package/src/shaders/gem_vert.glsl +53 -0
- package/src/shaders/multi_points.ts +291 -0
- package/src/shaders/multi_points_frag.glsl +166 -0
- package/src/shaders/multi_points_vert.glsl +120 -0
- package/src/styling/viewport-css.ts +113 -0
- package/src/styling/viewport.css +111 -0
- package/src/three/font.ts +2 -0
- package/src/three/geometries/TextGeometry.ts +58 -0
- package/src/three/loaders/FontLoader.ts +205 -0
- package/src/three/loaders/RGBELoader.ts +496 -0
- package/src/types/IThreejsData.ts +16 -0
- package/src/types/ThreejsData.ts +43 -0
- package/tsconfig.json +20 -0
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PoissionDenoisePass = void 0;
|
|
4
|
+
const postprocessing_1 = require("postprocessing");
|
|
5
|
+
const three_1 = require("three");
|
|
6
|
+
const basic_1 = require("../utils/shader/basic");
|
|
7
|
+
const sampleBlueNoise_1 = require("../utils/shader/sampleBlueNoise");
|
|
8
|
+
const poissionDenoise_1 = require("./shader/poissionDenoise");
|
|
9
|
+
const viewer_shared_services_1 = require("@shapediver/viewer.shared.services");
|
|
10
|
+
const finalFragmentShader = poissionDenoise_1.poissionDenoise.replace('#include <sampleBlueNoise>', sampleBlueNoise_1.sampleBlueNoise);
|
|
11
|
+
const defaultPoissonBlurOptions = {
|
|
12
|
+
iterations: 1,
|
|
13
|
+
radius: 8,
|
|
14
|
+
rings: 5.625,
|
|
15
|
+
lumaPhi: 10,
|
|
16
|
+
depthPhi: 2,
|
|
17
|
+
normalPhi: 3.25,
|
|
18
|
+
samples: 16,
|
|
19
|
+
distance: 1,
|
|
20
|
+
normalTexture: null
|
|
21
|
+
};
|
|
22
|
+
class PoissionDenoisePass extends postprocessing_1.Pass {
|
|
23
|
+
// #endregion Properties (9)
|
|
24
|
+
// #region Constructors (1)
|
|
25
|
+
constructor(camera, inputTexture, depthTexture, options = defaultPoissonBlurOptions) {
|
|
26
|
+
super('PoissionBlurPass');
|
|
27
|
+
this.index = 0;
|
|
28
|
+
this.iterations = defaultPoissonBlurOptions.iterations;
|
|
29
|
+
this.radius = 8;
|
|
30
|
+
this.rings = 5.625;
|
|
31
|
+
this.samples = 16;
|
|
32
|
+
if (!PoissionDenoisePass.blueNoiseTexture) {
|
|
33
|
+
PoissionDenoisePass.blueNoiseTextureImage.then((response) => {
|
|
34
|
+
viewer_shared_services_1.Converter.instance.responseToImage(response).then((image) => {
|
|
35
|
+
PoissionDenoisePass.blueNoiseTexture = new three_1.Texture(image);
|
|
36
|
+
PoissionDenoisePass.blueNoiseTexture.minFilter = three_1.NearestFilter;
|
|
37
|
+
PoissionDenoisePass.blueNoiseTexture.magFilter = three_1.NearestFilter;
|
|
38
|
+
PoissionDenoisePass.blueNoiseTexture.wrapS = three_1.RepeatWrapping;
|
|
39
|
+
PoissionDenoisePass.blueNoiseTexture.wrapT = three_1.RepeatWrapping;
|
|
40
|
+
PoissionDenoisePass.blueNoiseTexture.colorSpace = three_1.NoColorSpace;
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
options = Object.assign(Object.assign({}, defaultPoissonBlurOptions), options);
|
|
45
|
+
this.inputTexture = inputTexture;
|
|
46
|
+
this.fullscreenMaterial = new three_1.ShaderMaterial({
|
|
47
|
+
fragmentShader: finalFragmentShader,
|
|
48
|
+
vertexShader: basic_1.basic,
|
|
49
|
+
uniforms: {
|
|
50
|
+
depthTexture: { value: null },
|
|
51
|
+
inputTexture: { value: null },
|
|
52
|
+
projectionMatrixInverse: { value: new three_1.Matrix4() },
|
|
53
|
+
cameraMatrixWorld: { value: new three_1.Matrix4() },
|
|
54
|
+
lumaPhi: { value: 5.0 },
|
|
55
|
+
depthPhi: { value: 5.0 },
|
|
56
|
+
normalPhi: { value: 5.0 },
|
|
57
|
+
distance: { value: 1.0 },
|
|
58
|
+
resolution: { value: new three_1.Vector2() },
|
|
59
|
+
blueNoiseTexture: { value: null },
|
|
60
|
+
index: { value: 0 },
|
|
61
|
+
blueNoiseRepeat: { value: new three_1.Vector2() }
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
const renderTargetOptions = {
|
|
65
|
+
type: three_1.HalfFloatType,
|
|
66
|
+
depthBuffer: false
|
|
67
|
+
};
|
|
68
|
+
this.renderTargetA = new three_1.WebGLRenderTarget(1, 1, renderTargetOptions);
|
|
69
|
+
this.renderTargetB = new three_1.WebGLRenderTarget(1, 1, renderTargetOptions);
|
|
70
|
+
const { uniforms } = this.fullscreenMaterial;
|
|
71
|
+
uniforms['inputTexture'].value = this.inputTexture;
|
|
72
|
+
uniforms['depthTexture'].value = depthTexture;
|
|
73
|
+
uniforms['projectionMatrixInverse'].value = camera.projectionMatrixInverse;
|
|
74
|
+
uniforms['cameraMatrixWorld'].value = camera.matrixWorld;
|
|
75
|
+
uniforms['depthPhi'].value = options.depthPhi;
|
|
76
|
+
uniforms['normalPhi'].value = options.normalPhi;
|
|
77
|
+
uniforms['distance'].value = options.distance;
|
|
78
|
+
if (options.normalTexture) {
|
|
79
|
+
uniforms['normalTexture'] = { value: options.normalTexture };
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
this.fullscreenMaterial.defines.NORMAL_IN_RGB = '';
|
|
83
|
+
}
|
|
84
|
+
// these properties need the shader to be recompiled
|
|
85
|
+
for (const prop of ['radius', 'rings', 'samples']) {
|
|
86
|
+
Object.defineProperty(this, prop, {
|
|
87
|
+
get: () => options[prop],
|
|
88
|
+
set: value => {
|
|
89
|
+
options[prop] = value;
|
|
90
|
+
this.setSize(this.renderTargetA.width, this.renderTargetA.height);
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
this.fullscreenMaterial.uniforms.blueNoiseTexture.value = PoissionDenoisePass.blueNoiseTexture;
|
|
95
|
+
}
|
|
96
|
+
// #endregion Constructors (1)
|
|
97
|
+
// #region Public Accessors (1)
|
|
98
|
+
get texture() {
|
|
99
|
+
return this.renderTargetB.texture;
|
|
100
|
+
}
|
|
101
|
+
// #endregion Public Accessors (1)
|
|
102
|
+
// #region Public Methods (4)
|
|
103
|
+
generateDenoiseSamples(numSamples, numRings, r, texelSize) {
|
|
104
|
+
const angleStep = (2 * Math.PI * numRings) / numSamples;
|
|
105
|
+
const invNumSamples = 1.0 / numSamples;
|
|
106
|
+
const radiusStep = invNumSamples;
|
|
107
|
+
const samples = [];
|
|
108
|
+
let radius = invNumSamples;
|
|
109
|
+
let angle = 0;
|
|
110
|
+
for (let i = 0; i < numSamples; i++) {
|
|
111
|
+
const v = new three_1.Vector2(Math.cos(angle), Math.sin(angle))
|
|
112
|
+
.multiplyScalar(Math.pow(radius, 0.75))
|
|
113
|
+
.multiply(texelSize)
|
|
114
|
+
.multiplyScalar(r);
|
|
115
|
+
if (isNaN(v.x) || v.x === Infinity || v.x === -Infinity)
|
|
116
|
+
v.x = 0;
|
|
117
|
+
if (isNaN(v.y) || v.y === Infinity || v.y === -Infinity)
|
|
118
|
+
v.y = 0;
|
|
119
|
+
samples.push(v);
|
|
120
|
+
radius += radiusStep;
|
|
121
|
+
angle += angleStep;
|
|
122
|
+
}
|
|
123
|
+
return samples;
|
|
124
|
+
}
|
|
125
|
+
generatePoissonDiskConstant(poissonDisk) {
|
|
126
|
+
const samples = poissonDisk.length;
|
|
127
|
+
let glslCode = 'const vec2 poissonDisk[samples] = vec2[samples](\n';
|
|
128
|
+
for (let i = 0; i < samples; i++) {
|
|
129
|
+
const sample = poissonDisk[i];
|
|
130
|
+
glslCode += ` vec2(${sample.x}, ${sample.y})`;
|
|
131
|
+
if (i < samples - 1) {
|
|
132
|
+
glslCode += ',';
|
|
133
|
+
}
|
|
134
|
+
glslCode += '\n';
|
|
135
|
+
}
|
|
136
|
+
glslCode += ');';
|
|
137
|
+
return glslCode;
|
|
138
|
+
}
|
|
139
|
+
render(renderer) {
|
|
140
|
+
this.fullscreenMaterial.uniforms.index.value = 0;
|
|
141
|
+
const noiseTexture = this.fullscreenMaterial.uniforms.blueNoiseTexture.value;
|
|
142
|
+
if (noiseTexture) {
|
|
143
|
+
const { width, height } = noiseTexture.source.data;
|
|
144
|
+
this.fullscreenMaterial.uniforms.blueNoiseRepeat.value.set(this.renderTargetA.width / width, this.renderTargetA.height / height);
|
|
145
|
+
}
|
|
146
|
+
for (let i = 0; i < 2 * this.iterations; i++) {
|
|
147
|
+
const horizontal = i % 2 === 0;
|
|
148
|
+
const inputRenderTarget = horizontal ? this.renderTargetB : this.renderTargetA;
|
|
149
|
+
this.fullscreenMaterial.uniforms['inputTexture'].value = i === 0 ? this.inputTexture : inputRenderTarget.texture;
|
|
150
|
+
const renderTarget = horizontal ? this.renderTargetA : this.renderTargetB;
|
|
151
|
+
renderer.setRenderTarget(renderTarget);
|
|
152
|
+
renderer.render(this.scene, this.camera);
|
|
153
|
+
this.fullscreenMaterial.uniforms.index.value = (this.fullscreenMaterial.uniforms.index.value + 1) % 4;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
setSize(width, height) {
|
|
157
|
+
this.renderTargetA.setSize(width, height);
|
|
158
|
+
this.renderTargetB.setSize(width, height);
|
|
159
|
+
this.fullscreenMaterial.uniforms.resolution.value.set(width, height);
|
|
160
|
+
const poissonDisk = this.generateDenoiseSamples(this.samples, this.rings, this.radius, new three_1.Vector2(1 / width, 1 / height));
|
|
161
|
+
const sampleDefine = `const int samples = ${this.samples};\n`;
|
|
162
|
+
const poissonDiskConstant = this.generatePoissonDiskConstant(poissonDisk);
|
|
163
|
+
this.fullscreenMaterial.fragmentShader = sampleDefine + poissonDiskConstant + '\n' + finalFragmentShader;
|
|
164
|
+
this.fullscreenMaterial.needsUpdate = true;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
exports.PoissionDenoisePass = PoissionDenoisePass;
|
|
168
|
+
// #region Properties (9)
|
|
169
|
+
PoissionDenoisePass.DefaultOptions = defaultPoissonBlurOptions;
|
|
170
|
+
PoissionDenoisePass.blueNoiseTextureImage = viewer_shared_services_1.HttpClient.instance.loadTexture('https://viewer.shapediver.com/v3/graphics/LDR_RGBA_0.png');
|
|
171
|
+
//# sourceMappingURL=PoissionDenoisePass.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PoissionDenoisePass.js","sourceRoot":"","sources":["../../../../../src/managers/postprocessing/ao/poissionDenoise/PoissionDenoisePass.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export declare const poissionDenoise = "\nvarying vec2 vUv;\n\nuniform sampler2D inputTexture;\nuniform highp sampler2D depthTexture;\nuniform sampler2D normalTexture;\nuniform mat4 projectionMatrixInverse;\nuniform mat4 cameraMatrixWorld;\nuniform float lumaPhi;\nuniform float depthPhi;\nuniform float normalPhi;\nuniform float distance;\nuniform sampler2D blueNoiseTexture;\nuniform vec2 blueNoiseRepeat;\nuniform int index;\nuniform vec2 resolution;\n\n#include <common>\n#include <sampleBlueNoise>\n\nvec3 getWorldPos(float depth, vec2 coord) {\n float z = depth * 2.0 - 1.0;\n vec4 clipSpacePosition = vec4(coord * 2.0 - 1.0, z, 1.0);\n vec4 viewSpacePosition = projectionMatrixInverse * clipSpacePosition;\n\n // Perspective division\n vec4 worldSpacePosition = cameraMatrixWorld * viewSpacePosition;\n worldSpacePosition.xyz /= worldSpacePosition.w;\n return worldSpacePosition.xyz;\n}\n\n#define luminance(a) dot(vec3(0.2125, 0.7154, 0.0721), a)\n\nvec3 getNormal(vec2 uv, vec4 texel) {\n#ifdef NORMAL_IN_RGB\n // in case the normal is stored in the RGB channels of the texture\n return texel.rgb;\n#else\n return normalize(textureLod(normalTexture, uv, 0.).xyz * 2.0 - 1.0);\n#endif\n}\n\nfloat distToPlane(const vec3 worldPos, const vec3 neighborWorldPos, const vec3 worldNormal) {\n vec3 toCurrent = worldPos - neighborWorldPos;\n float distToPlane = abs(dot(toCurrent, worldNormal));\n\n return distToPlane;\n}\n\nvoid main() {\n vec4 depthTexel = textureLod(depthTexture, vUv, 0.);\n\n if (depthTexel.r == 1.0 || dot(depthTexel.rgb, depthTexel.rgb) == 0.) {\n discard;\n return;\n }\n\n vec4 texel = textureLod(inputTexture, vUv, 0.0);\n\n vec3 normal = getNormal(vUv, texel);\n\n#ifdef NORMAL_IN_RGB\n float denoised = texel.a;\n float center = texel.a;\n#else\n vec3 denoised = texel.rgb;\n vec3 center = texel.rgb;\n#endif\n\n float depth = depthTexel.x;\n vec3 worldPos = getWorldPos(depth, vUv);\n\n float totalWeight = 1.0;\n\n vec4 blueNoise = sampleBlueNoise(blueNoiseTexture, 0, blueNoiseRepeat, resolution);\n float angle = blueNoise[index];\n\n float s = sin(angle), c = cos(angle);\n\n mat2 rotationMatrix = mat2(c, -s, s, c);\n\n for (int i = 0; i < samples; i++) {\n vec2 offset = rotationMatrix * poissonDisk[i];\n vec2 neighborUv = vUv + offset;\n\n vec4 neighborTexel = textureLod(inputTexture, neighborUv, 0.0);\n\n vec3 neighborNormal = getNormal(neighborUv, neighborTexel);\n#ifdef NORMAL_IN_RGB\n float neighborColor = neighborTexel.a;\n#else\n vec3 neighborColor = neighborTexel.rgb;\n#endif\n\n float sampleDepth = textureLod(depthTexture, neighborUv, 0.0).x;\n\n vec3 worldPosSample = getWorldPos(sampleDepth, neighborUv);\n float tangentPlaneDist = abs(dot(worldPos - worldPosSample, normal));\n\n float normalDiff = dot(normal, neighborNormal);\n float normalSimilarity = pow(max(normalDiff, 0.), normalPhi);\n\n#ifdef NORMAL_IN_RGB\n float lumaDiff = abs(neighborColor - center);\n#else\n float lumaDiff = abs(luminance(neighborColor) - luminance(center));\n#endif\n float lumaSimilarity = max(1.0 - lumaDiff / lumaPhi, 0.0);\n\n float depthDiff = 1. - (distToPlane(worldPos, worldPosSample, normal) / distance);\n float depthSimilarity = max(depthDiff / depthPhi, 0.);\n\n float w = lumaSimilarity * depthSimilarity * normalSimilarity;\n\n denoised += w * neighborColor;\n totalWeight += w;\n }\n\n if (totalWeight > 0.) denoised /= totalWeight;\n\n#ifdef NORMAL_IN_RGB\n gl_FragColor = vec4(normal, denoised);\n#else\n gl_FragColor = vec4(denoised, 1.);\n#endif\n}\n";
|
|
2
|
+
//# sourceMappingURL=poissionDenoise.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"poissionDenoise.d.ts","sourceRoot":"","sources":["../../../../../../src/managers/postprocessing/ao/poissionDenoise/shader/poissionDenoise.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,eAAe,2oHA8H3B,CAAA"}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.poissionDenoise = void 0;
|
|
4
|
+
exports.poissionDenoise = `
|
|
5
|
+
varying vec2 vUv;
|
|
6
|
+
|
|
7
|
+
uniform sampler2D inputTexture;
|
|
8
|
+
uniform highp sampler2D depthTexture;
|
|
9
|
+
uniform sampler2D normalTexture;
|
|
10
|
+
uniform mat4 projectionMatrixInverse;
|
|
11
|
+
uniform mat4 cameraMatrixWorld;
|
|
12
|
+
uniform float lumaPhi;
|
|
13
|
+
uniform float depthPhi;
|
|
14
|
+
uniform float normalPhi;
|
|
15
|
+
uniform float distance;
|
|
16
|
+
uniform sampler2D blueNoiseTexture;
|
|
17
|
+
uniform vec2 blueNoiseRepeat;
|
|
18
|
+
uniform int index;
|
|
19
|
+
uniform vec2 resolution;
|
|
20
|
+
|
|
21
|
+
#include <common>
|
|
22
|
+
#include <sampleBlueNoise>
|
|
23
|
+
|
|
24
|
+
vec3 getWorldPos(float depth, vec2 coord) {
|
|
25
|
+
float z = depth * 2.0 - 1.0;
|
|
26
|
+
vec4 clipSpacePosition = vec4(coord * 2.0 - 1.0, z, 1.0);
|
|
27
|
+
vec4 viewSpacePosition = projectionMatrixInverse * clipSpacePosition;
|
|
28
|
+
|
|
29
|
+
// Perspective division
|
|
30
|
+
vec4 worldSpacePosition = cameraMatrixWorld * viewSpacePosition;
|
|
31
|
+
worldSpacePosition.xyz /= worldSpacePosition.w;
|
|
32
|
+
return worldSpacePosition.xyz;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
#define luminance(a) dot(vec3(0.2125, 0.7154, 0.0721), a)
|
|
36
|
+
|
|
37
|
+
vec3 getNormal(vec2 uv, vec4 texel) {
|
|
38
|
+
#ifdef NORMAL_IN_RGB
|
|
39
|
+
// in case the normal is stored in the RGB channels of the texture
|
|
40
|
+
return texel.rgb;
|
|
41
|
+
#else
|
|
42
|
+
return normalize(textureLod(normalTexture, uv, 0.).xyz * 2.0 - 1.0);
|
|
43
|
+
#endif
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
float distToPlane(const vec3 worldPos, const vec3 neighborWorldPos, const vec3 worldNormal) {
|
|
47
|
+
vec3 toCurrent = worldPos - neighborWorldPos;
|
|
48
|
+
float distToPlane = abs(dot(toCurrent, worldNormal));
|
|
49
|
+
|
|
50
|
+
return distToPlane;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
void main() {
|
|
54
|
+
vec4 depthTexel = textureLod(depthTexture, vUv, 0.);
|
|
55
|
+
|
|
56
|
+
if (depthTexel.r == 1.0 || dot(depthTexel.rgb, depthTexel.rgb) == 0.) {
|
|
57
|
+
discard;
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
vec4 texel = textureLod(inputTexture, vUv, 0.0);
|
|
62
|
+
|
|
63
|
+
vec3 normal = getNormal(vUv, texel);
|
|
64
|
+
|
|
65
|
+
#ifdef NORMAL_IN_RGB
|
|
66
|
+
float denoised = texel.a;
|
|
67
|
+
float center = texel.a;
|
|
68
|
+
#else
|
|
69
|
+
vec3 denoised = texel.rgb;
|
|
70
|
+
vec3 center = texel.rgb;
|
|
71
|
+
#endif
|
|
72
|
+
|
|
73
|
+
float depth = depthTexel.x;
|
|
74
|
+
vec3 worldPos = getWorldPos(depth, vUv);
|
|
75
|
+
|
|
76
|
+
float totalWeight = 1.0;
|
|
77
|
+
|
|
78
|
+
vec4 blueNoise = sampleBlueNoise(blueNoiseTexture, 0, blueNoiseRepeat, resolution);
|
|
79
|
+
float angle = blueNoise[index];
|
|
80
|
+
|
|
81
|
+
float s = sin(angle), c = cos(angle);
|
|
82
|
+
|
|
83
|
+
mat2 rotationMatrix = mat2(c, -s, s, c);
|
|
84
|
+
|
|
85
|
+
for (int i = 0; i < samples; i++) {
|
|
86
|
+
vec2 offset = rotationMatrix * poissonDisk[i];
|
|
87
|
+
vec2 neighborUv = vUv + offset;
|
|
88
|
+
|
|
89
|
+
vec4 neighborTexel = textureLod(inputTexture, neighborUv, 0.0);
|
|
90
|
+
|
|
91
|
+
vec3 neighborNormal = getNormal(neighborUv, neighborTexel);
|
|
92
|
+
#ifdef NORMAL_IN_RGB
|
|
93
|
+
float neighborColor = neighborTexel.a;
|
|
94
|
+
#else
|
|
95
|
+
vec3 neighborColor = neighborTexel.rgb;
|
|
96
|
+
#endif
|
|
97
|
+
|
|
98
|
+
float sampleDepth = textureLod(depthTexture, neighborUv, 0.0).x;
|
|
99
|
+
|
|
100
|
+
vec3 worldPosSample = getWorldPos(sampleDepth, neighborUv);
|
|
101
|
+
float tangentPlaneDist = abs(dot(worldPos - worldPosSample, normal));
|
|
102
|
+
|
|
103
|
+
float normalDiff = dot(normal, neighborNormal);
|
|
104
|
+
float normalSimilarity = pow(max(normalDiff, 0.), normalPhi);
|
|
105
|
+
|
|
106
|
+
#ifdef NORMAL_IN_RGB
|
|
107
|
+
float lumaDiff = abs(neighborColor - center);
|
|
108
|
+
#else
|
|
109
|
+
float lumaDiff = abs(luminance(neighborColor) - luminance(center));
|
|
110
|
+
#endif
|
|
111
|
+
float lumaSimilarity = max(1.0 - lumaDiff / lumaPhi, 0.0);
|
|
112
|
+
|
|
113
|
+
float depthDiff = 1. - (distToPlane(worldPos, worldPosSample, normal) / distance);
|
|
114
|
+
float depthSimilarity = max(depthDiff / depthPhi, 0.);
|
|
115
|
+
|
|
116
|
+
float w = lumaSimilarity * depthSimilarity * normalSimilarity;
|
|
117
|
+
|
|
118
|
+
denoised += w * neighborColor;
|
|
119
|
+
totalWeight += w;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
if (totalWeight > 0.) denoised /= totalWeight;
|
|
123
|
+
|
|
124
|
+
#ifdef NORMAL_IN_RGB
|
|
125
|
+
gl_FragColor = vec4(normal, denoised);
|
|
126
|
+
#else
|
|
127
|
+
gl_FragColor = vec4(denoised, 1.);
|
|
128
|
+
#endif
|
|
129
|
+
}
|
|
130
|
+
`;
|
|
131
|
+
//# sourceMappingURL=poissionDenoise.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"poissionDenoise.js","sourceRoot":"","sources":["../../../../../../src/managers/postprocessing/ao/poissionDenoise/shader/poissionDenoise.ts"],"names":[],"mappings":";;;AAAa,QAAA,eAAe,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8H9B,CAAA"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { EffectComposer } from 'postprocessing';
|
|
2
|
+
import { Camera, Scene, Vector3 } from 'three';
|
|
3
|
+
import { AOEffect } from '../ao/AOEffect';
|
|
4
|
+
declare class SSAOEffect extends AOEffect {
|
|
5
|
+
spp: number;
|
|
6
|
+
constructor(composer: EffectComposer, camera: Camera, scene: Scene, options?: {
|
|
7
|
+
[key: string]: unknown;
|
|
8
|
+
});
|
|
9
|
+
getPointsOnSphere(n: number): Vector3[];
|
|
10
|
+
makeOptionsReactive(options: {
|
|
11
|
+
[key: string]: unknown;
|
|
12
|
+
}): void;
|
|
13
|
+
}
|
|
14
|
+
export { SSAOEffect };
|
|
15
|
+
//# sourceMappingURL=SSAOEffect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SSAOEffect.d.ts","sourceRoot":"","sources":["../../../../../src/managers/postprocessing/ao/ssao/SSAOEffect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAc1C,cAAM,UAAW,SAAQ,QAAQ;IAGzB,GAAG,SAAM;gBAMJ,QAAQ,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE;IAuBjG,iBAAiB,CAAC,CAAC,EAAE,MAAM;IAe3B,mBAAmB,CAAC,OAAO,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE;CAwC9D;AAED,OAAO,EAAE,UAAU,EAAE,CAAC"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SSAOEffect = void 0;
|
|
4
|
+
const three_1 = require("three");
|
|
5
|
+
const AOEffect_1 = require("../ao/AOEffect");
|
|
6
|
+
const AOPass_1 = require("../ao/AOPass");
|
|
7
|
+
const ssao_1 = require("./shader/ssao");
|
|
8
|
+
class SSAOPass extends AOPass_1.AOPass {
|
|
9
|
+
// #region Constructors (1)
|
|
10
|
+
constructor(camera, scene) {
|
|
11
|
+
super(camera, scene, ssao_1.ssao);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
class SSAOEffect extends AOEffect_1.AOEffect {
|
|
15
|
+
// #endregion Properties (1)
|
|
16
|
+
// #region Constructors (1)
|
|
17
|
+
constructor(composer, camera, scene, options) {
|
|
18
|
+
super(composer, camera, scene, new SSAOPass(camera, scene), options);
|
|
19
|
+
// #region Properties (1)
|
|
20
|
+
this.spp = 16;
|
|
21
|
+
SSAOEffect.DefaultOptions = Object.assign(Object.assign({}, AOEffect_1.AOEffect.DefaultOptions), {
|
|
22
|
+
spp: 16,
|
|
23
|
+
distance: 1,
|
|
24
|
+
distancePower: 0.25,
|
|
25
|
+
power: 2
|
|
26
|
+
});
|
|
27
|
+
options = Object.assign(Object.assign({}, SSAOEffect.DefaultOptions), options);
|
|
28
|
+
}
|
|
29
|
+
// #endregion Constructors (1)
|
|
30
|
+
// #region Public Methods (2)
|
|
31
|
+
getPointsOnSphere(n) {
|
|
32
|
+
const points = [];
|
|
33
|
+
const inc = Math.PI * (3 - Math.sqrt(5));
|
|
34
|
+
const off = 2 / n;
|
|
35
|
+
for (let k = 0; k < n; k++) {
|
|
36
|
+
const y = k * off - 1 + off / 2;
|
|
37
|
+
const r = Math.sqrt(1 - y * y);
|
|
38
|
+
const phi = k * inc;
|
|
39
|
+
points.push(new three_1.Vector3(Math.cos(phi) * r, y, Math.sin(phi) * r));
|
|
40
|
+
}
|
|
41
|
+
return points;
|
|
42
|
+
}
|
|
43
|
+
makeOptionsReactive(options) {
|
|
44
|
+
super.makeOptionsReactive(options);
|
|
45
|
+
for (const key of ['spp']) {
|
|
46
|
+
Object.defineProperty(this, key, {
|
|
47
|
+
get() {
|
|
48
|
+
return options[key];
|
|
49
|
+
},
|
|
50
|
+
set(value) {
|
|
51
|
+
if (value === null || value === undefined)
|
|
52
|
+
return;
|
|
53
|
+
options[key] = value;
|
|
54
|
+
switch (key) {
|
|
55
|
+
case 'spp': {
|
|
56
|
+
this.aoPass.fullscreenMaterial.defines.spp = value.toFixed(0);
|
|
57
|
+
const samples = this.getPointsOnSphere(value);
|
|
58
|
+
const samplesR = [];
|
|
59
|
+
for (let i = 0; i < value; i++) {
|
|
60
|
+
samplesR.push((i + 1) / value);
|
|
61
|
+
}
|
|
62
|
+
this.aoPass.fullscreenMaterial.uniforms.samples = { value: samples };
|
|
63
|
+
this.aoPass.fullscreenMaterial.uniforms.samplesR = { value: samplesR };
|
|
64
|
+
this.aoPass.fullscreenMaterial.needsUpdate = true;
|
|
65
|
+
break;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
},
|
|
69
|
+
configurable: true
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
this.spp = options['spp'];
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
exports.SSAOEffect = SSAOEffect;
|
|
76
|
+
//# sourceMappingURL=SSAOEffect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SSAOEffect.js","sourceRoot":"","sources":["../../../../../src/managers/postprocessing/ao/ssao/SSAOEffect.ts"],"names":[],"mappings":";;;AACA,iCAA+C;AAC/C,6CAA0C;AAC1C,yCAAsC;AACtC,wCAAuD;AAEvD,MAAM,QAAS,SAAQ,eAAM;IAC5B,2BAA2B;IAE3B,YAAY,MAAc,EAAE,KAAY;QACvC,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,WAAc,CAAC,CAAC;IACtC,CAAC;CAGD;AAED,MAAM,UAAW,SAAQ,mBAAQ;IAKhC,4BAA4B;IAE5B,2BAA2B;IAE3B,YAAY,QAAwB,EAAE,MAAc,EAAE,KAAY,EAAE,OAAoC;QACvG,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC;QATtE,yBAAyB;QAElB,QAAG,GAAG,EAAE,CAAC;QASf,UAAU,CAAC,cAAc,mCACrB,mBAAQ,CAAC,cAAc,GACvB;YACF,GAAG,EAAE,EAAE;YACP,QAAQ,EAAE,CAAC;YACX,aAAa,EAAE,IAAI;YACnB,KAAK,EAAE,CAAC;SACR,CACD,CAAC;QAEF,OAAO,mCACH,UAAU,CAAC,cAAc,GACzB,OAAO,CACV,CAAC;IACH,CAAC;IAED,8BAA8B;IAE9B,6BAA6B;IAEtB,iBAAiB,CAAC,CAAS;QACjC,MAAM,MAAM,GAAG,EAAE,CAAC;QAClB,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QACzC,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;QAElB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;YAC3B,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;YAChC,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;YAC/B,MAAM,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;YACpB,MAAM,CAAC,IAAI,CAAC,IAAI,eAAO,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;SAClE;QAED,OAAO,MAAM,CAAC;IACf,CAAC;IAEM,mBAAmB,CAAC,OAAmC;QAC7D,KAAK,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAEnC,KAAK,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE;YAC1B,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,EAAE;gBAChC,GAAG;oBACF,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC;gBACrB,CAAC;gBACD,GAAG,CAAC,KAAK;oBACR,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;wBAAE,OAAO;oBAElD,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;oBAErB,QAAQ,GAAG,EAAE;wBACZ,KAAK,KAAK,CAAC,CAAC;4BACX,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,OAAO,CAAC,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;4BAE9D,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;4BAE9C,MAAM,QAAQ,GAAG,EAAE,CAAC;4BACpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;gCAC/B,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;6BAC/B;4BAED,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,QAAQ,CAAC,OAAO,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;4BACrE,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,QAAQ,CAAC,QAAQ,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;4BAEvE,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,WAAW,GAAG,IAAI,CAAC;4BAClD,MAAM;yBACN;qBACD;gBACF,CAAC;gBACD,YAAY,EAAE,IAAI;aAClB,CAAC,CAAC;SACH;QAED,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,KAAK,CAAW,CAAC;IACrC,CAAC;CAGD;AAEQ,gCAAU"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export declare const ssao = "\nvarying vec2 vUv;\n\nuniform highp sampler2D depthTexture;\nuniform sampler2D normalTexture;\nuniform mat4 projectionViewMatrix;\nuniform mat4 cameraMatrixWorld;\n\nuniform sampler2D blueNoiseTexture;\nuniform vec2 blueNoiseRepeat;\nuniform vec2 texSize;\nuniform mat4 projectionMatrixInverse;\n\nuniform float aoDistance;\nuniform float distancePower;\nuniform float cameraNear;\nuniform float cameraFar;\nuniform int frame;\n\nuniform vec3[spp] samples;\nuniform float[spp] samplesR;\n\n#include <common>\n#include <packing>\n#include <sampleBlueNoise>\n\n// source: https://github.com/N8python/ssao/blob/master/EffectShader.js#L52\nvec3 getWorldPos(const float depth, const vec2 coord) {\n float z = depth * 2.0 - 1.0;\n vec4 clipSpacePosition = vec4(coord * 2.0 - 1.0, z, 1.0);\n vec4 viewSpacePosition = projectionMatrixInverse * clipSpacePosition;\n\n // Perspective division\n vec4 worldSpacePosition = cameraMatrixWorld * viewSpacePosition;\n worldSpacePosition.xyz /= worldSpacePosition.w;\n\n return worldSpacePosition.xyz;\n}\n\nvec3 computeNormal(vec3 worldPos, vec2 vUv) {\n vec2 size = vec2(textureSize(depthTexture, 0));\n ivec2 p = ivec2(vUv * size);\n float c0 = texelFetch(depthTexture, p, 0).x;\n float l2 = texelFetch(depthTexture, p - ivec2(2, 0), 0).x;\n float l1 = texelFetch(depthTexture, p - ivec2(1, 0), 0).x;\n float r1 = texelFetch(depthTexture, p + ivec2(1, 0), 0).x;\n float r2 = texelFetch(depthTexture, p + ivec2(2, 0), 0).x;\n float b2 = texelFetch(depthTexture, p - ivec2(0, 2), 0).x;\n float b1 = texelFetch(depthTexture, p - ivec2(0, 1), 0).x;\n float t1 = texelFetch(depthTexture, p + ivec2(0, 1), 0).x;\n float t2 = texelFetch(depthTexture, p + ivec2(0, 2), 0).x;\n float dl = abs((2.0 * l1 - l2) - c0);\n float dr = abs((2.0 * r1 - r2) - c0);\n float db = abs((2.0 * b1 - b2) - c0);\n float dt = abs((2.0 * t1 - t2) - c0);\n vec3 ce = getWorldPos(c0, vUv).xyz;\n vec3 dpdx = (dl < dr) ? ce - getWorldPos(l1, (vUv - vec2(1.0 / size.x, 0.0))).xyz\n : -ce + getWorldPos(r1, (vUv + vec2(1.0 / size.x, 0.0))).xyz;\n vec3 dpdy = (db < dt) ? ce - getWorldPos(b1, (vUv - vec2(0.0, 1.0 / size.y))).xyz\n : -ce + getWorldPos(t1, (vUv + vec2(0.0, 1.0 / size.y))).xyz;\n return normalize(cross(dpdx, dpdy));\n}\n\nhighp float linearize_depth(highp float d, highp float zNear, highp float zFar) {\n highp float z_n = 2.0 * d - 1.0;\n return 2.0 * zNear * zFar / (zFar + zNear - z_n * (zFar - zNear));\n}\n\nvoid main() {\n float depth = textureLod(depthTexture, vUv, 0.).x;\n\n // filter out background\n if (depth == 1.0) {\n discard;\n return;\n }\n\n vec3 worldPos = getWorldPos(depth, vUv);\n vec3 normal = computeNormal(worldPos, vUv);\n\n#ifdef animatedNoise\n int seed = frame;\n#else\n int seed = 0;\n#endif\n\n vec4 noise = sampleBlueNoise(blueNoiseTexture, seed, blueNoiseRepeat, texSize);\n\n vec3 randomVec = normalize(noise.rgb * 2.0 - 1.0);\n vec3 tangent = normalize(randomVec - normal * dot(randomVec, normal));\n vec3 bitangent = cross(normal, tangent);\n mat3 tbn = mat3(tangent, bitangent, normal);\n\n float occluded = 0.0;\n float totalWeight = 0.0;\n\n vec3 samplePos;\n\n float sppF = float(spp);\n\n for (float i = 0.0; i < sppF; i++) {\n vec3 sampleDirection = tbn * samples[int(i)];\n\n // make sure sample direction is in the same hemisphere as the normal\n if (dot(sampleDirection, normal) < 0.0) sampleDirection *= -1.0;\n\n float moveAmt = samplesR[int(mod(i + noise.a * sppF, sppF))];\n samplePos = worldPos + aoDistance * moveAmt * sampleDirection;\n\n vec4 offset = projectionViewMatrix * vec4(samplePos, 1.0);\n offset.xyz /= offset.w;\n offset.xyz = offset.xyz * 0.5 + 0.5;\n\n float sampleDepth = textureLod(depthTexture, offset.xy, 0.0).x;\n\n float distSample = linearize_depth(sampleDepth, cameraNear, cameraFar);\n float distWorld = linearize_depth(offset.z, cameraNear, cameraFar);\n\n float rangeCheck = smoothstep(0.0, 1.0, aoDistance / abs(distSample - distWorld));\n rangeCheck = pow(rangeCheck, distancePower);\n float weight = dot(sampleDirection, normal);\n\n occluded += rangeCheck * weight * (distSample < distWorld ? 1.0 : 0.0);\n totalWeight += weight;\n }\n\n float occ = clamp(1.0 - occluded / totalWeight, 0.0, 1.0);\n gl_FragColor = vec4(normal, occ);\n}\n";
|
|
2
|
+
//# sourceMappingURL=ssao.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ssao.d.ts","sourceRoot":"","sources":["../../../../../../src/managers/postprocessing/ao/ssao/shader/ssao.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,IAAI,w9IAiIhB,CAAA"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ssao = void 0;
|
|
4
|
+
exports.ssao = `
|
|
5
|
+
varying vec2 vUv;
|
|
6
|
+
|
|
7
|
+
uniform highp sampler2D depthTexture;
|
|
8
|
+
uniform sampler2D normalTexture;
|
|
9
|
+
uniform mat4 projectionViewMatrix;
|
|
10
|
+
uniform mat4 cameraMatrixWorld;
|
|
11
|
+
|
|
12
|
+
uniform sampler2D blueNoiseTexture;
|
|
13
|
+
uniform vec2 blueNoiseRepeat;
|
|
14
|
+
uniform vec2 texSize;
|
|
15
|
+
uniform mat4 projectionMatrixInverse;
|
|
16
|
+
|
|
17
|
+
uniform float aoDistance;
|
|
18
|
+
uniform float distancePower;
|
|
19
|
+
uniform float cameraNear;
|
|
20
|
+
uniform float cameraFar;
|
|
21
|
+
uniform int frame;
|
|
22
|
+
|
|
23
|
+
uniform vec3[spp] samples;
|
|
24
|
+
uniform float[spp] samplesR;
|
|
25
|
+
|
|
26
|
+
#include <common>
|
|
27
|
+
#include <packing>
|
|
28
|
+
#include <sampleBlueNoise>
|
|
29
|
+
|
|
30
|
+
// source: https://github.com/N8python/ssao/blob/master/EffectShader.js#L52
|
|
31
|
+
vec3 getWorldPos(const float depth, const vec2 coord) {
|
|
32
|
+
float z = depth * 2.0 - 1.0;
|
|
33
|
+
vec4 clipSpacePosition = vec4(coord * 2.0 - 1.0, z, 1.0);
|
|
34
|
+
vec4 viewSpacePosition = projectionMatrixInverse * clipSpacePosition;
|
|
35
|
+
|
|
36
|
+
// Perspective division
|
|
37
|
+
vec4 worldSpacePosition = cameraMatrixWorld * viewSpacePosition;
|
|
38
|
+
worldSpacePosition.xyz /= worldSpacePosition.w;
|
|
39
|
+
|
|
40
|
+
return worldSpacePosition.xyz;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
vec3 computeNormal(vec3 worldPos, vec2 vUv) {
|
|
44
|
+
vec2 size = vec2(textureSize(depthTexture, 0));
|
|
45
|
+
ivec2 p = ivec2(vUv * size);
|
|
46
|
+
float c0 = texelFetch(depthTexture, p, 0).x;
|
|
47
|
+
float l2 = texelFetch(depthTexture, p - ivec2(2, 0), 0).x;
|
|
48
|
+
float l1 = texelFetch(depthTexture, p - ivec2(1, 0), 0).x;
|
|
49
|
+
float r1 = texelFetch(depthTexture, p + ivec2(1, 0), 0).x;
|
|
50
|
+
float r2 = texelFetch(depthTexture, p + ivec2(2, 0), 0).x;
|
|
51
|
+
float b2 = texelFetch(depthTexture, p - ivec2(0, 2), 0).x;
|
|
52
|
+
float b1 = texelFetch(depthTexture, p - ivec2(0, 1), 0).x;
|
|
53
|
+
float t1 = texelFetch(depthTexture, p + ivec2(0, 1), 0).x;
|
|
54
|
+
float t2 = texelFetch(depthTexture, p + ivec2(0, 2), 0).x;
|
|
55
|
+
float dl = abs((2.0 * l1 - l2) - c0);
|
|
56
|
+
float dr = abs((2.0 * r1 - r2) - c0);
|
|
57
|
+
float db = abs((2.0 * b1 - b2) - c0);
|
|
58
|
+
float dt = abs((2.0 * t1 - t2) - c0);
|
|
59
|
+
vec3 ce = getWorldPos(c0, vUv).xyz;
|
|
60
|
+
vec3 dpdx = (dl < dr) ? ce - getWorldPos(l1, (vUv - vec2(1.0 / size.x, 0.0))).xyz
|
|
61
|
+
: -ce + getWorldPos(r1, (vUv + vec2(1.0 / size.x, 0.0))).xyz;
|
|
62
|
+
vec3 dpdy = (db < dt) ? ce - getWorldPos(b1, (vUv - vec2(0.0, 1.0 / size.y))).xyz
|
|
63
|
+
: -ce + getWorldPos(t1, (vUv + vec2(0.0, 1.0 / size.y))).xyz;
|
|
64
|
+
return normalize(cross(dpdx, dpdy));
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
highp float linearize_depth(highp float d, highp float zNear, highp float zFar) {
|
|
68
|
+
highp float z_n = 2.0 * d - 1.0;
|
|
69
|
+
return 2.0 * zNear * zFar / (zFar + zNear - z_n * (zFar - zNear));
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
void main() {
|
|
73
|
+
float depth = textureLod(depthTexture, vUv, 0.).x;
|
|
74
|
+
|
|
75
|
+
// filter out background
|
|
76
|
+
if (depth == 1.0) {
|
|
77
|
+
discard;
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
vec3 worldPos = getWorldPos(depth, vUv);
|
|
82
|
+
vec3 normal = computeNormal(worldPos, vUv);
|
|
83
|
+
|
|
84
|
+
#ifdef animatedNoise
|
|
85
|
+
int seed = frame;
|
|
86
|
+
#else
|
|
87
|
+
int seed = 0;
|
|
88
|
+
#endif
|
|
89
|
+
|
|
90
|
+
vec4 noise = sampleBlueNoise(blueNoiseTexture, seed, blueNoiseRepeat, texSize);
|
|
91
|
+
|
|
92
|
+
vec3 randomVec = normalize(noise.rgb * 2.0 - 1.0);
|
|
93
|
+
vec3 tangent = normalize(randomVec - normal * dot(randomVec, normal));
|
|
94
|
+
vec3 bitangent = cross(normal, tangent);
|
|
95
|
+
mat3 tbn = mat3(tangent, bitangent, normal);
|
|
96
|
+
|
|
97
|
+
float occluded = 0.0;
|
|
98
|
+
float totalWeight = 0.0;
|
|
99
|
+
|
|
100
|
+
vec3 samplePos;
|
|
101
|
+
|
|
102
|
+
float sppF = float(spp);
|
|
103
|
+
|
|
104
|
+
for (float i = 0.0; i < sppF; i++) {
|
|
105
|
+
vec3 sampleDirection = tbn * samples[int(i)];
|
|
106
|
+
|
|
107
|
+
// make sure sample direction is in the same hemisphere as the normal
|
|
108
|
+
if (dot(sampleDirection, normal) < 0.0) sampleDirection *= -1.0;
|
|
109
|
+
|
|
110
|
+
float moveAmt = samplesR[int(mod(i + noise.a * sppF, sppF))];
|
|
111
|
+
samplePos = worldPos + aoDistance * moveAmt * sampleDirection;
|
|
112
|
+
|
|
113
|
+
vec4 offset = projectionViewMatrix * vec4(samplePos, 1.0);
|
|
114
|
+
offset.xyz /= offset.w;
|
|
115
|
+
offset.xyz = offset.xyz * 0.5 + 0.5;
|
|
116
|
+
|
|
117
|
+
float sampleDepth = textureLod(depthTexture, offset.xy, 0.0).x;
|
|
118
|
+
|
|
119
|
+
float distSample = linearize_depth(sampleDepth, cameraNear, cameraFar);
|
|
120
|
+
float distWorld = linearize_depth(offset.z, cameraNear, cameraFar);
|
|
121
|
+
|
|
122
|
+
float rangeCheck = smoothstep(0.0, 1.0, aoDistance / abs(distSample - distWorld));
|
|
123
|
+
rangeCheck = pow(rangeCheck, distancePower);
|
|
124
|
+
float weight = dot(sampleDirection, normal);
|
|
125
|
+
|
|
126
|
+
occluded += rangeCheck * weight * (distSample < distWorld ? 1.0 : 0.0);
|
|
127
|
+
totalWeight += weight;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
float occ = clamp(1.0 - occluded / totalWeight, 0.0, 1.0);
|
|
131
|
+
gl_FragColor = vec4(normal, occ);
|
|
132
|
+
}
|
|
133
|
+
`;
|
|
134
|
+
//# sourceMappingURL=ssao.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ssao.js","sourceRoot":"","sources":["../../../../../../src/managers/postprocessing/ao/ssao/shader/ssao.ts"],"names":[],"mappings":";;;AAAa,QAAA,IAAI,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiInB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"basic.d.ts","sourceRoot":"","sources":["../../../../../../src/managers/postprocessing/ao/utils/shader/basic.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,KAAK,kIAOjB,CAAA"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.basic = void 0;
|
|
4
|
+
exports.basic = `
|
|
5
|
+
varying vec2 vUv;
|
|
6
|
+
|
|
7
|
+
void main() {
|
|
8
|
+
vUv = position.xy * 0.5 + 0.5;
|
|
9
|
+
gl_Position = vec4(position.xy, 1.0, 1.0);
|
|
10
|
+
}
|
|
11
|
+
`;
|
|
12
|
+
//# sourceMappingURL=basic.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"basic.js","sourceRoot":"","sources":["../../../../../../src/managers/postprocessing/ao/utils/shader/basic.ts"],"names":[],"mappings":";;;AAAa,QAAA,KAAK,GAAG;;;;;;;CAOpB,CAAA"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export declare const sampleBlueNoise = "\nconst float g = 1.6180339887498948482;\nconst float a1 = 1.0 / g;\n\n// reference: https://extremelearning.com.au/unreasonable-effectiveness-of-quasirandom-sequences/\nfloat r1(float n) {\n // 7th harmonious number\n return fract(1.1127756842787055 + a1 * n);\n}\n\nconst vec4 hn = vec4(0.618033988749895, 0.3247179572447458, 0.2207440846057596, 0.1673039782614187);\n\nvec4 sampleBlueNoise(sampler2D texture, int seed, vec2 repeat, vec2 texSize) {\n vec2 size = vUv * texSize;\n vec2 blueNoiseSize = texSize / repeat;\n float blueNoiseIndex = floor(floor(size.y / blueNoiseSize.y) * repeat.x) + floor(size.x / blueNoiseSize.x);\n\n // get the offset of this pixel's blue noise tile\n // int blueNoiseTileOffset = int(r1(blueNoiseIndex + 1.0) * 65536.);\n\n vec2 blueNoiseUv = vUv * repeat;\n\n // fetch blue noise for this pixel\n vec4 blueNoise = textureLod(texture, blueNoiseUv, 0.);\n\n // animate blue noise\n if (seed != 0) {\n blueNoise = fract(blueNoise + hn * float(seed));\n\n blueNoise.r = (blueNoise.r > 0.5 ? 1.0 - blueNoise.r : blueNoise.r) * 2.0;\n blueNoise.g = (blueNoise.g > 0.5 ? 1.0 - blueNoise.g : blueNoise.g) * 2.0;\n blueNoise.b = (blueNoise.b > 0.5 ? 1.0 - blueNoise.b : blueNoise.b) * 2.0;\n blueNoise.a = (blueNoise.a > 0.5 ? 1.0 - blueNoise.a : blueNoise.a) * 2.0;\n }\n\n return blueNoise;\n}\n";
|
|
2
|
+
//# sourceMappingURL=sampleBlueNoise.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sampleBlueNoise.d.ts","sourceRoot":"","sources":["../../../../../../src/managers/postprocessing/ao/utils/shader/sampleBlueNoise.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,eAAe,+3CAqC3B,CAAA"}
|