@shapediver/viewer.rendering-engine.rendering-engine-threejs 3.16.7 → 3.16.9
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/dist/RenderingEngine.d.ts +294 -294
- package/dist/RenderingEngine.js +987 -977
- package/dist/RenderingEngine.js.map +1 -1
- package/dist/index.d.ts +16 -16
- package/dist/index.js +57 -57
- package/dist/injectors/TextureUnifierInjector.d.ts +13 -13
- package/dist/injectors/TextureUnifierInjector.js +181 -171
- package/dist/injectors/TextureUnifierInjector.js.map +1 -1
- package/dist/interfaces/ILoader.d.ts +3 -3
- package/dist/interfaces/ILoader.js +2 -2
- package/dist/interfaces/IRenderingEngine.d.ts +45 -45
- package/dist/interfaces/IRenderingEngine.js +2 -2
- package/dist/loaders/EnvironmentMapLoader.d.ts +119 -119
- package/dist/loaders/EnvironmentMapLoader.js +512 -502
- package/dist/loaders/EnvironmentMapLoader.js.map +1 -1
- package/dist/loaders/GeometryLoader.d.ts +39 -39
- package/dist/loaders/GeometryLoader.d.ts.map +1 -1
- package/dist/loaders/GeometryLoader.js +603 -593
- package/dist/loaders/GeometryLoader.js.map +1 -1
- package/dist/loaders/HTMLElementAnchorLoader.d.ts +15 -15
- package/dist/loaders/HTMLElementAnchorLoader.js +98 -98
- package/dist/loaders/HTMLElementAnchorLoader.js.map +1 -1
- package/dist/loaders/LightLoader.d.ts +19 -19
- package/dist/loaders/LightLoader.js +197 -187
- package/dist/loaders/LightLoader.js.map +1 -1
- package/dist/loaders/MaterialLoader.d.ts +115 -115
- package/dist/loaders/MaterialLoader.d.ts.map +1 -1
- package/dist/loaders/MaterialLoader.js +1612 -1602
- package/dist/loaders/MaterialLoader.js.map +1 -1
- package/dist/managers/ARManager.d.ts +17 -17
- package/dist/managers/ARManager.js +128 -128
- package/dist/managers/ARManager.js.map +1 -1
- package/dist/managers/CameraManager.d.ts +19 -19
- package/dist/managers/CameraManager.js +244 -234
- package/dist/managers/CameraManager.js.map +1 -1
- package/dist/managers/EnvironmentGeometryManager.d.ts +32 -32
- package/dist/managers/EnvironmentGeometryManager.js +114 -114
- package/dist/managers/EnvironmentGeometryManager.js.map +1 -1
- package/dist/managers/FlagManager.d.ts +19 -19
- package/dist/managers/FlagManager.js +143 -143
- package/dist/managers/FlagManager.js.map +1 -1
- package/dist/managers/PostProcessingManager.d.ts +1019 -1019
- package/dist/managers/PostProcessingManager.js +1306 -1296
- package/dist/managers/PostProcessingManager.js.map +1 -1
- package/dist/managers/RenderingManager.d.ts +84 -84
- package/dist/managers/RenderingManager.d.ts.map +1 -1
- package/dist/managers/RenderingManager.js +679 -669
- package/dist/managers/RenderingManager.js.map +1 -1
- package/dist/managers/SceneTracingManager.d.ts +28 -28
- package/dist/managers/SceneTracingManager.js +160 -150
- package/dist/managers/SceneTracingManager.js.map +1 -1
- package/dist/managers/SceneTreeManager.d.ts +81 -81
- package/dist/managers/SceneTreeManager.d.ts.map +1 -1
- package/dist/managers/SceneTreeManager.js +500 -490
- package/dist/managers/SceneTreeManager.js.map +1 -1
- package/dist/managers/SettingsManager.d.ts +28 -28
- package/dist/managers/SettingsManager.js +284 -284
- package/dist/managers/SettingsManager.js.map +1 -1
- package/dist/managers/environmentGeometry/ContactShadow.d.ts +42 -42
- package/dist/managers/environmentGeometry/ContactShadow.js +295 -285
- package/dist/managers/environmentGeometry/ContactShadow.js.map +1 -1
- package/dist/managers/environmentGeometry/Grid.d.ts +20 -20
- package/dist/managers/environmentGeometry/Grid.js +110 -100
- package/dist/managers/environmentGeometry/Grid.js.map +1 -1
- package/dist/managers/environmentGeometry/GroundPlane.d.ts +21 -21
- package/dist/managers/environmentGeometry/GroundPlane.js +105 -95
- package/dist/managers/environmentGeometry/GroundPlane.js.map +1 -1
- package/dist/managers/environmentGeometry/GroundPlaneShadow.d.ts +21 -21
- package/dist/managers/environmentGeometry/GroundPlaneShadow.js +96 -86
- package/dist/managers/environmentGeometry/GroundPlaneShadow.js.map +1 -1
- package/dist/managers/environmentGeometry/IEnvironmentGeometry.d.ts +8 -8
- package/dist/managers/environmentGeometry/IEnvironmentGeometry.js +2 -2
- package/dist/managers/postprocessing/GodRaysManager.d.ts +12 -12
- package/dist/managers/postprocessing/GodRaysManager.js +73 -63
- package/dist/managers/postprocessing/GodRaysManager.js.map +1 -1
- package/dist/managers/postprocessing/OutlineManager.d.ts +15 -15
- package/dist/managers/postprocessing/OutlineManager.js +86 -76
- package/dist/managers/postprocessing/OutlineManager.js.map +1 -1
- package/dist/managers/postprocessing/SSAARenderPass.d.ts +53 -53
- package/dist/managers/postprocessing/SSAARenderPass.js +281 -281
- package/dist/managers/postprocessing/SSAARenderPass.js.map +1 -1
- package/dist/managers/postprocessing/SelectiveBloomManager.d.ts +14 -14
- package/dist/managers/postprocessing/SelectiveBloomManager.js +76 -66
- package/dist/managers/postprocessing/SelectiveBloomManager.js.map +1 -1
- package/dist/managers/postprocessing/ao/ao/AOEffect.d.ts +46 -46
- package/dist/managers/postprocessing/ao/ao/AOEffect.js +142 -142
- package/dist/managers/postprocessing/ao/ao/AOEffect.js.map +1 -1
- package/dist/managers/postprocessing/ao/ao/AOPass.d.ts +12 -12
- package/dist/managers/postprocessing/ao/ao/AOPass.js +108 -108
- package/dist/managers/postprocessing/ao/ao/AOPass.js.map +1 -1
- package/dist/managers/postprocessing/ao/ao/shader/ao_compose.d.ts +1 -1
- package/dist/managers/postprocessing/ao/ao/shader/ao_compose.js +4 -4
- package/dist/managers/postprocessing/ao/ao/shader/ao_utils.d.ts +1 -1
- package/dist/managers/postprocessing/ao/ao/shader/ao_utils.js +4 -4
- package/dist/managers/postprocessing/ao/hbao/HBAOEffect.d.ts +14 -14
- package/dist/managers/postprocessing/ao/hbao/HBAOEffect.js +24 -24
- package/dist/managers/postprocessing/ao/hbao/shader/hbao.d.ts +1 -1
- package/dist/managers/postprocessing/ao/hbao/shader/hbao.js +4 -4
- package/dist/managers/postprocessing/ao/poissionDenoise/PoissionDenoisePass.d.ts +33 -33
- package/dist/managers/postprocessing/ao/poissionDenoise/PoissionDenoisePass.js +211 -211
- package/dist/managers/postprocessing/ao/poissionDenoise/PoissionDenoisePass.js.map +1 -1
- package/dist/managers/postprocessing/ao/poissionDenoise/shader/poissionDenoise.d.ts +1 -1
- package/dist/managers/postprocessing/ao/poissionDenoise/shader/poissionDenoise.js +4 -4
- package/dist/managers/postprocessing/ao/ssao/SSAOEffect.d.ts +14 -14
- package/dist/managers/postprocessing/ao/ssao/SSAOEffect.js +82 -82
- package/dist/managers/postprocessing/ao/ssao/SSAOEffect.js.map +1 -1
- package/dist/managers/postprocessing/ao/ssao/shader/ssao.d.ts +1 -1
- package/dist/managers/postprocessing/ao/ssao/shader/ssao.js +4 -4
- package/dist/managers/postprocessing/ao/utils/shader/basic.d.ts +1 -1
- package/dist/managers/postprocessing/ao/utils/shader/basic.js +4 -4
- package/dist/managers/postprocessing/ao/utils/shader/sampleBlueNoise.d.ts +1 -1
- package/dist/managers/postprocessing/ao/utils/shader/sampleBlueNoise.js +4 -4
- package/dist/managers/postprocessing/effects/tone-mapping/ToneMappingEffect.d.ts +165 -165
- package/dist/managers/postprocessing/effects/tone-mapping/ToneMappingEffect.js +299 -299
- package/dist/managers/postprocessing/effects/tone-mapping/ToneMappingEffect.js.map +1 -1
- package/dist/managers/postprocessing/effects/tone-mapping/tone-mapping.d.ts +1 -1
- package/dist/managers/postprocessing/effects/tone-mapping/tone-mapping.js +4 -4
- package/dist/managers/postprocessing/utils/CopyMaterial.d.ts +37 -37
- package/dist/managers/postprocessing/utils/CopyMaterial.js +69 -69
- package/dist/managers/postprocessing/utils/CopyShader.d.ts +13 -13
- package/dist/managers/postprocessing/utils/CopyShader.js +12 -12
- package/dist/managers/postprocessing/utils/FullScreenQuad.d.ts +9 -9
- package/dist/managers/postprocessing/utils/FullScreenQuad.js +28 -28
- package/dist/managers/postprocessing/utils/NormalPass.d.ts +87 -87
- package/dist/managers/postprocessing/utils/NormalPass.js +156 -156
- package/dist/managers/postprocessing/utils/NormalPass.js.map +1 -1
- package/dist/managers/postprocessing/utils/RenderPass.d.ts +114 -114
- package/dist/managers/postprocessing/utils/RenderPass.js +259 -259
- package/dist/managers/postprocessing/utils/RenderPass.js.map +1 -1
- package/dist/managers/sceneTree/SDTFUtils.d.ts +6 -6
- package/dist/managers/sceneTree/SDTFUtils.d.ts.map +1 -1
- package/dist/managers/sceneTree/SDTFUtils.js +50 -50
- package/dist/managers/sceneTree/SDTFUtils.js.map +1 -1
- package/dist/managers/sceneTree/SceenTreeManagerUtils.d.ts +7 -7
- package/dist/managers/sceneTree/SceenTreeManagerUtils.d.ts.map +1 -1
- package/dist/managers/sceneTree/SceenTreeManagerUtils.js +175 -165
- package/dist/managers/sceneTree/SceenTreeManagerUtils.js.map +1 -1
- package/dist/managers/sceneTree/ThreeJsDataUtils.d.ts +6 -6
- package/dist/managers/sceneTree/ThreeJsDataUtils.d.ts.map +1 -1
- package/dist/managers/sceneTree/ThreeJsDataUtils.js +80 -70
- package/dist/managers/sceneTree/ThreeJsDataUtils.js.map +1 -1
- package/dist/materials/GemMaterial.d.ts +37 -37
- package/dist/materials/GemMaterial.js +262 -252
- package/dist/materials/GemMaterial.js.map +1 -1
- package/dist/materials/MeshUnlitMaterialParameters.d.ts +3 -3
- package/dist/materials/MeshUnlitMaterialParameters.js +2 -2
- package/dist/materials/MultiPointsMaterial.d.ts +93 -93
- package/dist/materials/MultiPointsMaterial.js +577 -567
- package/dist/materials/MultiPointsMaterial.js.map +1 -1
- package/dist/materials/SpecularGlossinessMaterial.d.ts +13 -13
- package/dist/materials/SpecularGlossinessMaterial.js +171 -161
- package/dist/materials/SpecularGlossinessMaterial.js.map +1 -1
- package/dist/objects/SDColor.d.ts +16 -16
- package/dist/objects/SDColor.js +52 -52
- package/dist/objects/SDColor.js.map +1 -1
- package/dist/objects/SDObject.d.ts +27 -27
- package/dist/objects/SDObject.js +112 -102
- package/dist/objects/SDObject.js.map +1 -1
- package/dist/shaders/PCSS.d.ts +2 -2
- package/dist/shaders/PCSS.js +5 -5
- package/dist/shaders/gem.d.ts +2 -2
- package/dist/shaders/gem.js +5 -5
- package/dist/shaders/multi_points.d.ts +2 -2
- package/dist/shaders/multi_points.js +5 -5
- package/dist/styling/viewport-css.d.ts +1 -1
- package/dist/styling/viewport-css.js +4 -4
- package/dist/three/CSS2DRenderer.d.ts +31 -31
- package/dist/three/CSS2DRenderer.d.ts.map +1 -1
- package/dist/three/CSS2DRenderer.js +152 -152
- package/dist/three/CSS2DRenderer.js.map +1 -1
- package/dist/three/geometries/TextGeometry.d.ts +21 -21
- package/dist/three/geometries/TextGeometry.js +45 -45
- package/dist/three/geometries/TextGeometry.js.map +1 -1
- package/dist/three/loaders/RGBELoader.d.ts +23 -23
- package/dist/three/loaders/RGBELoader.js +311 -311
- package/dist/three/loaders/RGBELoader.js.map +1 -1
- package/dist/types/IThreejsData.d.ts +6 -6
- package/dist/types/IThreejsData.js +2 -2
- package/dist/types/ThreejsData.d.ts +10 -10
- package/dist/types/ThreejsData.js +41 -41
- package/package.json +18 -18
|
@@ -1,109 +1,109 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.AOPass = void 0;
|
|
4
|
-
const postprocessing_1 = require("postprocessing");
|
|
5
|
-
const three_1 = require("three");
|
|
6
|
-
const PoissionDenoisePass_1 = require("../poissionDenoise/PoissionDenoisePass");
|
|
7
|
-
const basic_1 = require("../utils/shader/basic");
|
|
8
|
-
const sampleBlueNoise_1 = require("../utils/shader/sampleBlueNoise");
|
|
9
|
-
// a general AO pass that can be used for any AO algorithm
|
|
10
|
-
class AOPass extends postprocessing_1.Pass {
|
|
11
|
-
// #endregion Properties (3)
|
|
12
|
-
// #region Constructors (1)
|
|
13
|
-
constructor(camera, scene, fragmentShader) {
|
|
14
|
-
super();
|
|
15
|
-
this._camera = camera;
|
|
16
|
-
this._scene = scene;
|
|
17
|
-
this.renderTarget = new three_1.WebGLRenderTarget(1, 1, {
|
|
18
|
-
type: three_1.HalfFloatType,
|
|
19
|
-
depthBuffer: false,
|
|
20
|
-
});
|
|
21
|
-
const finalFragmentShader = fragmentShader.replace("#include <sampleBlueNoise>", sampleBlueNoise_1.sampleBlueNoise);
|
|
22
|
-
this.fullscreenMaterial = new three_1.ShaderMaterial({
|
|
23
|
-
fragmentShader: finalFragmentShader,
|
|
24
|
-
vertexShader: basic_1.basic,
|
|
25
|
-
uniforms: {
|
|
26
|
-
depthTexture: { value: null },
|
|
27
|
-
normalTexture: { value: null },
|
|
28
|
-
cameraNear: { value: 0 },
|
|
29
|
-
cameraFar: { value: 0 },
|
|
30
|
-
viewMatrix: { value: this._camera.matrixWorldInverse },
|
|
31
|
-
projectionViewMatrix: { value: new three_1.Matrix4() },
|
|
32
|
-
projectionMatrixInverse: {
|
|
33
|
-
value: this._camera.projectionMatrixInverse,
|
|
34
|
-
},
|
|
35
|
-
cameraMatrixWorld: { value: this._camera.matrixWorld },
|
|
36
|
-
texSize: { value: new three_1.Vector2() },
|
|
37
|
-
blueNoiseTexture: { value: null },
|
|
38
|
-
blueNoiseRepeat: { value: new three_1.Vector2() },
|
|
39
|
-
aoDistance: { value: 0 },
|
|
40
|
-
distancePower: { value: 0 },
|
|
41
|
-
bias: { value: 0 },
|
|
42
|
-
thickness: { value: 0 },
|
|
43
|
-
power: { value: 0 },
|
|
44
|
-
frame: { value: 0 },
|
|
45
|
-
},
|
|
46
|
-
blending: three_1.NoBlending,
|
|
47
|
-
depthWrite: false,
|
|
48
|
-
depthTest: false,
|
|
49
|
-
toneMapped: false,
|
|
50
|
-
});
|
|
51
|
-
if (PoissionDenoisePass_1.PoissionDenoisePass.blueNoiseTexture) {
|
|
52
|
-
this.fullscreenMaterial.uniforms.blueNoiseTexture.value =
|
|
53
|
-
PoissionDenoisePass_1.PoissionDenoisePass.blueNoiseTexture;
|
|
54
|
-
}
|
|
55
|
-
else {
|
|
56
|
-
PoissionDenoisePass_1.PoissionDenoisePass.loadBlueNoiseTexture().then(() => {
|
|
57
|
-
this.fullscreenMaterial.uniforms.blueNoiseTexture.value =
|
|
58
|
-
PoissionDenoisePass_1.PoissionDenoisePass.blueNoiseTexture;
|
|
59
|
-
});
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
// #endregion Constructors (1)
|
|
63
|
-
// #region Public Accessors (1)
|
|
64
|
-
get texture() {
|
|
65
|
-
return this.renderTarget.texture;
|
|
66
|
-
}
|
|
67
|
-
// #endregion Public Accessors (1)
|
|
68
|
-
// #region Public Methods (2)
|
|
69
|
-
render(renderer) {
|
|
70
|
-
const spp = +this.fullscreenMaterial.defines.spp;
|
|
71
|
-
this.fullscreenMaterial.uniforms.frame.value =
|
|
72
|
-
(this.fullscreenMaterial.uniforms.frame.value +
|
|
73
|
-
spp) %
|
|
74
|
-
65536;
|
|
75
|
-
this.fullscreenMaterial.uniforms.cameraNear.value =
|
|
76
|
-
this._camera.near;
|
|
77
|
-
this.fullscreenMaterial.uniforms.cameraFar.value =
|
|
78
|
-
this._camera.far;
|
|
79
|
-
this.fullscreenMaterial.uniforms.projectionViewMatrix.value.multiplyMatrices(this._camera.projectionMatrix, this._camera.matrixWorldInverse);
|
|
80
|
-
const noiseTexture = this.fullscreenMaterial
|
|
81
|
-
.uniforms.blueNoiseTexture.value;
|
|
82
|
-
if (noiseTexture) {
|
|
83
|
-
const { width, height } = noiseTexture.source.data;
|
|
84
|
-
this.fullscreenMaterial.uniforms.blueNoiseRepeat.value.set(this.renderTarget.width / width, this.renderTarget.height / height);
|
|
85
|
-
}
|
|
86
|
-
else {
|
|
87
|
-
if (PoissionDenoisePass_1.PoissionDenoisePass.blueNoiseTexture) {
|
|
88
|
-
this.fullscreenMaterial.uniforms.blueNoiseTexture.value =
|
|
89
|
-
PoissionDenoisePass_1.PoissionDenoisePass.blueNoiseTexture;
|
|
90
|
-
const { width, height } = PoissionDenoisePass_1.PoissionDenoisePass.blueNoiseTexture.source.data;
|
|
91
|
-
this.fullscreenMaterial.uniforms.blueNoiseRepeat.value.set(this.renderTarget.width / width, this.renderTarget.height / height);
|
|
92
|
-
}
|
|
93
|
-
else {
|
|
94
|
-
PoissionDenoisePass_1.PoissionDenoisePass.loadBlueNoiseTexture().then(() => {
|
|
95
|
-
this.fullscreenMaterial.uniforms.blueNoiseTexture.value =
|
|
96
|
-
PoissionDenoisePass_1.PoissionDenoisePass.blueNoiseTexture;
|
|
97
|
-
});
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
renderer.setRenderTarget(this.renderTarget);
|
|
101
|
-
renderer.render(this.scene, this.camera);
|
|
102
|
-
}
|
|
103
|
-
setSize(width, height) {
|
|
104
|
-
this.renderTarget.setSize(width, height);
|
|
105
|
-
this.fullscreenMaterial.uniforms.texSize.value.set(this.renderTarget.width, this.renderTarget.height);
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
exports.AOPass = AOPass;
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AOPass = void 0;
|
|
4
|
+
const postprocessing_1 = require("postprocessing");
|
|
5
|
+
const three_1 = require("three");
|
|
6
|
+
const PoissionDenoisePass_1 = require("../poissionDenoise/PoissionDenoisePass");
|
|
7
|
+
const basic_1 = require("../utils/shader/basic");
|
|
8
|
+
const sampleBlueNoise_1 = require("../utils/shader/sampleBlueNoise");
|
|
9
|
+
// a general AO pass that can be used for any AO algorithm
|
|
10
|
+
class AOPass extends postprocessing_1.Pass {
|
|
11
|
+
// #endregion Properties (3)
|
|
12
|
+
// #region Constructors (1)
|
|
13
|
+
constructor(camera, scene, fragmentShader) {
|
|
14
|
+
super();
|
|
15
|
+
this._camera = camera;
|
|
16
|
+
this._scene = scene;
|
|
17
|
+
this.renderTarget = new three_1.WebGLRenderTarget(1, 1, {
|
|
18
|
+
type: three_1.HalfFloatType,
|
|
19
|
+
depthBuffer: false,
|
|
20
|
+
});
|
|
21
|
+
const finalFragmentShader = fragmentShader.replace("#include <sampleBlueNoise>", sampleBlueNoise_1.sampleBlueNoise);
|
|
22
|
+
this.fullscreenMaterial = new three_1.ShaderMaterial({
|
|
23
|
+
fragmentShader: finalFragmentShader,
|
|
24
|
+
vertexShader: basic_1.basic,
|
|
25
|
+
uniforms: {
|
|
26
|
+
depthTexture: { value: null },
|
|
27
|
+
normalTexture: { value: null },
|
|
28
|
+
cameraNear: { value: 0 },
|
|
29
|
+
cameraFar: { value: 0 },
|
|
30
|
+
viewMatrix: { value: this._camera.matrixWorldInverse },
|
|
31
|
+
projectionViewMatrix: { value: new three_1.Matrix4() },
|
|
32
|
+
projectionMatrixInverse: {
|
|
33
|
+
value: this._camera.projectionMatrixInverse,
|
|
34
|
+
},
|
|
35
|
+
cameraMatrixWorld: { value: this._camera.matrixWorld },
|
|
36
|
+
texSize: { value: new three_1.Vector2() },
|
|
37
|
+
blueNoiseTexture: { value: null },
|
|
38
|
+
blueNoiseRepeat: { value: new three_1.Vector2() },
|
|
39
|
+
aoDistance: { value: 0 },
|
|
40
|
+
distancePower: { value: 0 },
|
|
41
|
+
bias: { value: 0 },
|
|
42
|
+
thickness: { value: 0 },
|
|
43
|
+
power: { value: 0 },
|
|
44
|
+
frame: { value: 0 },
|
|
45
|
+
},
|
|
46
|
+
blending: three_1.NoBlending,
|
|
47
|
+
depthWrite: false,
|
|
48
|
+
depthTest: false,
|
|
49
|
+
toneMapped: false,
|
|
50
|
+
});
|
|
51
|
+
if (PoissionDenoisePass_1.PoissionDenoisePass.blueNoiseTexture) {
|
|
52
|
+
this.fullscreenMaterial.uniforms.blueNoiseTexture.value =
|
|
53
|
+
PoissionDenoisePass_1.PoissionDenoisePass.blueNoiseTexture;
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
PoissionDenoisePass_1.PoissionDenoisePass.loadBlueNoiseTexture().then(() => {
|
|
57
|
+
this.fullscreenMaterial.uniforms.blueNoiseTexture.value =
|
|
58
|
+
PoissionDenoisePass_1.PoissionDenoisePass.blueNoiseTexture;
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
// #endregion Constructors (1)
|
|
63
|
+
// #region Public Accessors (1)
|
|
64
|
+
get texture() {
|
|
65
|
+
return this.renderTarget.texture;
|
|
66
|
+
}
|
|
67
|
+
// #endregion Public Accessors (1)
|
|
68
|
+
// #region Public Methods (2)
|
|
69
|
+
render(renderer) {
|
|
70
|
+
const spp = +this.fullscreenMaterial.defines.spp;
|
|
71
|
+
this.fullscreenMaterial.uniforms.frame.value =
|
|
72
|
+
(this.fullscreenMaterial.uniforms.frame.value +
|
|
73
|
+
spp) %
|
|
74
|
+
65536;
|
|
75
|
+
this.fullscreenMaterial.uniforms.cameraNear.value =
|
|
76
|
+
this._camera.near;
|
|
77
|
+
this.fullscreenMaterial.uniforms.cameraFar.value =
|
|
78
|
+
this._camera.far;
|
|
79
|
+
this.fullscreenMaterial.uniforms.projectionViewMatrix.value.multiplyMatrices(this._camera.projectionMatrix, this._camera.matrixWorldInverse);
|
|
80
|
+
const noiseTexture = this.fullscreenMaterial
|
|
81
|
+
.uniforms.blueNoiseTexture.value;
|
|
82
|
+
if (noiseTexture) {
|
|
83
|
+
const { width, height } = noiseTexture.source.data;
|
|
84
|
+
this.fullscreenMaterial.uniforms.blueNoiseRepeat.value.set(this.renderTarget.width / width, this.renderTarget.height / height);
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
if (PoissionDenoisePass_1.PoissionDenoisePass.blueNoiseTexture) {
|
|
88
|
+
this.fullscreenMaterial.uniforms.blueNoiseTexture.value =
|
|
89
|
+
PoissionDenoisePass_1.PoissionDenoisePass.blueNoiseTexture;
|
|
90
|
+
const { width, height } = PoissionDenoisePass_1.PoissionDenoisePass.blueNoiseTexture.source.data;
|
|
91
|
+
this.fullscreenMaterial.uniforms.blueNoiseRepeat.value.set(this.renderTarget.width / width, this.renderTarget.height / height);
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
PoissionDenoisePass_1.PoissionDenoisePass.loadBlueNoiseTexture().then(() => {
|
|
95
|
+
this.fullscreenMaterial.uniforms.blueNoiseTexture.value =
|
|
96
|
+
PoissionDenoisePass_1.PoissionDenoisePass.blueNoiseTexture;
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
renderer.setRenderTarget(this.renderTarget);
|
|
101
|
+
renderer.render(this.scene, this.camera);
|
|
102
|
+
}
|
|
103
|
+
setSize(width, height) {
|
|
104
|
+
this.renderTarget.setSize(width, height);
|
|
105
|
+
this.fullscreenMaterial.uniforms.texSize.value.set(this.renderTarget.width, this.renderTarget.height);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
exports.AOPass = AOPass;
|
|
109
109
|
//# sourceMappingURL=AOPass.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AOPass.js","sourceRoot":"","sources":["../../../../../src/managers/postprocessing/ao/ao/AOPass.ts"],"names":[],"mappings":";;;AAAA,mDAAoC;AACpC,iCAWe;AACf,gFAA2E;AAC3E,iDAA4D;AAC5D,qEAAgE;AAEhE,0DAA0D;AAC1D,MAAM,MAAO,SAAQ,qBAAI;IAQxB,4BAA4B;IAE5B,2BAA2B;IAE3B,YAAY,MAAc,EAAE,KAAY,EAAE,cAAsB;QAC/D,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,OAAO,GAAG,MAA2B,CAAC;QAC3C,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QAEpB,IAAI,CAAC,YAAY,GAAG,IAAI,yBAAiB,CAAC,CAAC,EAAE,CAAC,EAAE;YAC/C,IAAI,EAAE,qBAAa;YACnB,WAAW,EAAE,KAAK;SAClB,CAAC,CAAC;QAEH,MAAM,mBAAmB,GAAG,cAAc,CAAC,OAAO,CACjD,4BAA4B,EAC5B,iCAAe,CACf,CAAC;QAEF,IAAI,CAAC,kBAAkB,GAAG,IAAI,sBAAc,CAAC;YAC5C,cAAc,EAAE,mBAAmB;YACnC,YAAY,EAAZ,aAAY;YAEZ,QAAQ,EAAE;gBACT,YAAY,EAAE,EAAC,KAAK,EAAE,IAAI,EAAC;gBAC3B,aAAa,EAAE,EAAC,KAAK,EAAE,IAAI,EAAC;gBAC5B,UAAU,EAAE,EAAC,KAAK,EAAE,CAAC,EAAC;gBACtB,SAAS,EAAE,EAAC,KAAK,EAAE,CAAC,EAAC;gBACrB,UAAU,EAAE,EAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAC;gBACpD,oBAAoB,EAAE,EAAC,KAAK,EAAE,IAAI,eAAO,EAAE,EAAC;gBAC5C,uBAAuB,EAAE;oBACxB,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,uBAAuB;iBAC3C;gBACD,iBAAiB,EAAE,EAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,EAAC;gBACpD,OAAO,EAAE,EAAC,KAAK,EAAE,IAAI,eAAO,EAAE,EAAC;gBAC/B,gBAAgB,EAAE,EAAC,KAAK,EAAE,IAAI,EAAC;gBAC/B,eAAe,EAAE,EAAC,KAAK,EAAE,IAAI,eAAO,EAAE,EAAC;gBACvC,UAAU,EAAE,EAAC,KAAK,EAAE,CAAC,EAAC;gBACtB,aAAa,EAAE,EAAC,KAAK,EAAE,CAAC,EAAC;gBACzB,IAAI,EAAE,EAAC,KAAK,EAAE,CAAC,EAAC;gBAChB,SAAS,EAAE,EAAC,KAAK,EAAE,CAAC,EAAC;gBACrB,KAAK,EAAE,EAAC,KAAK,EAAE,CAAC,EAAC;gBACjB,KAAK,EAAE,EAAC,KAAK,EAAE,CAAC,EAAC;aACjB;YAED,QAAQ,EAAE,kBAAU;YACpB,UAAU,EAAE,KAAK;YACjB,SAAS,EAAE,KAAK;YAChB,UAAU,EAAE,KAAK;SACjB,CAAC,CAAC;QAEH,IAAI,yCAAmB,CAAC,gBAAgB,EAAE;
|
|
1
|
+
{"version":3,"file":"AOPass.js","sourceRoot":"","sources":["../../../../../src/managers/postprocessing/ao/ao/AOPass.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const ao_compose = "\nuniform highp sampler2D inputTexture;\nuniform highp sampler2D depthTexture;\nuniform float power;\nuniform vec3 color;\n\nvoid mainImage(const in vec4 inputColor, const in vec2 uv, out vec4 outputColor) {\n float unpackedDepth = textureLod(depthTexture, uv, 0.).r;\n\n float ao = unpackedDepth > 0.99975 ? 1.0 : textureLod(inputTexture, uv, 0.0).a;\n ao = pow(ao, power);\n\n vec3 aoColor = mix(color, vec3(1.), ao);\n\n aoColor *= inputColor.rgb;\n\n outputColor = vec4(aoColor, inputColor.a);\n}\n";
|
|
1
|
+
export declare const ao_compose = "\nuniform highp sampler2D inputTexture;\nuniform highp sampler2D depthTexture;\nuniform float power;\nuniform vec3 color;\n\nvoid mainImage(const in vec4 inputColor, const in vec2 uv, out vec4 outputColor) {\n float unpackedDepth = textureLod(depthTexture, uv, 0.).r;\n\n float ao = unpackedDepth > 0.99975 ? 1.0 : textureLod(inputTexture, uv, 0.0).a;\n ao = pow(ao, power);\n\n vec3 aoColor = mix(color, vec3(1.), ao);\n\n aoColor *= inputColor.rgb;\n\n outputColor = vec4(aoColor, inputColor.a);\n}\n";
|
|
2
2
|
//# sourceMappingURL=ao_compose.d.ts.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ao_compose = void 0;
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ao_compose = void 0;
|
|
4
4
|
exports.ao_compose = `
|
|
5
5
|
uniform highp sampler2D inputTexture;
|
|
6
6
|
uniform highp sampler2D depthTexture;
|
|
@@ -19,5 +19,5 @@ void mainImage(const in vec4 inputColor, const in vec2 uv, out vec4 outputColor)
|
|
|
19
19
|
|
|
20
20
|
outputColor = vec4(aoColor, inputColor.a);
|
|
21
21
|
}
|
|
22
|
-
`;
|
|
22
|
+
`;
|
|
23
23
|
//# sourceMappingURL=ao_compose.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const ao_utils = "\nuniform mat4 projectionMatrixInverse;\nuniform sampler2D normalTexture;\n\nin mat4 viewMatrixInverse;\n\nvec3 computeWorldPosition(float depth, vec2 coord) {\n // Convert screen coordinates to normalized device coordinates (NDC)\n vec2 ndc = coord * 2.0 - 1.0;\n\n // Convert depth to clip space z\n float z = depth * 2.0 - 1.0;\n\n // Create clip space position\n vec4 clipSpacePosition = vec4(ndc, z, 1.0);\n\n // Transform to view space\n vec4 viewSpacePosition = projectionMatrixInverse * clipSpacePosition;\n\n // Perspective division\n viewSpacePosition /= viewSpacePosition.w;\n\n // Transform to world space using the full inverse view matrix\n vec4 worldSpacePosition = viewMatrixInverse * viewSpacePosition;\n\n return worldSpacePosition.xyz;\n}\n\nvec3 computeNormal(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 = computeWorldPosition(c0, vUv).xyz;\n vec3 dpdx = (dl < dr) ? ce - computeWorldPosition(l1, (vUv - vec2(1.0 / size.x, 0.0))).xyz\n : -ce + computeWorldPosition(r1, (vUv + vec2(1.0 / size.x, 0.0))).xyz;\n vec3 dpdy = (db < dt) ? ce - computeWorldPosition(b1, (vUv - vec2(0.0, 1.0 / size.y))).xyz\n : -ce + computeWorldPosition(t1, (vUv + vec2(0.0, 1.0 / size.y))).xyz;\n return normalize(cross(dpdx, dpdy));\n}\n\nbool areDepthsOnSamePlane(\n float depth1, \n float depth2, \n vec2 coord1, \n vec2 coord2,\n vec3 planeNormalScreenSpace, \n float epsilon\n) {\n // Reconstruct world positions\n vec3 worldPos1 = computeWorldPosition(depth1, coord1);\n vec3 worldPos2 = computeWorldPosition(depth2, coord2);\n\n // Compute the vector between the two positions\n vec3 pointVector = worldPos2 - worldPos1;\n\n if (length(pointVector) < 1e-6) {\n return true; // Indicates invalid inputs\n }\n\n // Compute the normal in world space\n vec3 planeNormal = mat3(viewMatrixInverse) * planeNormalScreenSpace;\n\n // Check if the vector is orthogonal to the plane normal\n return abs(dot(pointVector, planeNormal)) < epsilon;\n}\n\nvec3 getUnpackedNormal(vec2 uv) {\n return normalize(textureLod(normalTexture, uv, 0.).xyz * 2.0 - 1.0);\n}\n";
|
|
1
|
+
export declare const ao_utils = "\nuniform mat4 projectionMatrixInverse;\nuniform sampler2D normalTexture;\n\nin mat4 viewMatrixInverse;\n\nvec3 computeWorldPosition(float depth, vec2 coord) {\n // Convert screen coordinates to normalized device coordinates (NDC)\n vec2 ndc = coord * 2.0 - 1.0;\n\n // Convert depth to clip space z\n float z = depth * 2.0 - 1.0;\n\n // Create clip space position\n vec4 clipSpacePosition = vec4(ndc, z, 1.0);\n\n // Transform to view space\n vec4 viewSpacePosition = projectionMatrixInverse * clipSpacePosition;\n\n // Perspective division\n viewSpacePosition /= viewSpacePosition.w;\n\n // Transform to world space using the full inverse view matrix\n vec4 worldSpacePosition = viewMatrixInverse * viewSpacePosition;\n\n return worldSpacePosition.xyz;\n}\n\nvec3 computeNormal(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 = computeWorldPosition(c0, vUv).xyz;\n vec3 dpdx = (dl < dr) ? ce - computeWorldPosition(l1, (vUv - vec2(1.0 / size.x, 0.0))).xyz\n : -ce + computeWorldPosition(r1, (vUv + vec2(1.0 / size.x, 0.0))).xyz;\n vec3 dpdy = (db < dt) ? ce - computeWorldPosition(b1, (vUv - vec2(0.0, 1.0 / size.y))).xyz\n : -ce + computeWorldPosition(t1, (vUv + vec2(0.0, 1.0 / size.y))).xyz;\n return normalize(cross(dpdx, dpdy));\n}\n\nbool areDepthsOnSamePlane(\n float depth1, \n float depth2, \n vec2 coord1, \n vec2 coord2,\n vec3 planeNormalScreenSpace, \n float epsilon\n) {\n // Reconstruct world positions\n vec3 worldPos1 = computeWorldPosition(depth1, coord1);\n vec3 worldPos2 = computeWorldPosition(depth2, coord2);\n\n // Compute the vector between the two positions\n vec3 pointVector = worldPos2 - worldPos1;\n\n if (length(pointVector) < 1e-6) {\n return true; // Indicates invalid inputs\n }\n\n // Compute the normal in world space\n vec3 planeNormal = mat3(viewMatrixInverse) * planeNormalScreenSpace;\n\n // Check if the vector is orthogonal to the plane normal\n return abs(dot(pointVector, planeNormal)) < epsilon;\n}\n\nvec3 getUnpackedNormal(vec2 uv) {\n return normalize(textureLod(normalTexture, uv, 0.).xyz * 2.0 - 1.0);\n}\n";
|
|
2
2
|
//# sourceMappingURL=ao_utils.d.ts.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ao_utils = void 0;
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ao_utils = void 0;
|
|
4
4
|
exports.ao_utils = `
|
|
5
5
|
uniform mat4 projectionMatrixInverse;
|
|
6
6
|
uniform sampler2D normalTexture;
|
|
@@ -82,5 +82,5 @@ bool areDepthsOnSamePlane(
|
|
|
82
82
|
vec3 getUnpackedNormal(vec2 uv) {
|
|
83
83
|
return normalize(textureLod(normalTexture, uv, 0.).xyz * 2.0 - 1.0);
|
|
84
84
|
}
|
|
85
|
-
`;
|
|
85
|
+
`;
|
|
86
86
|
//# sourceMappingURL=ao_utils.js.map
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
import { EffectComposer } from "postprocessing";
|
|
2
|
-
import { Camera, Scene } from "three";
|
|
3
|
-
import { AOEffect } from "../ao/AOEffect";
|
|
4
|
-
declare class HBAOEffect extends AOEffect {
|
|
5
|
-
lastSize: {
|
|
6
|
-
width: number;
|
|
7
|
-
height: number;
|
|
8
|
-
resolutionScale: number;
|
|
9
|
-
};
|
|
10
|
-
constructor(composer: EffectComposer, camera: Camera, scene: Scene, options?: {
|
|
11
|
-
[key: string]: unknown;
|
|
12
|
-
});
|
|
13
|
-
}
|
|
14
|
-
export { HBAOEffect };
|
|
1
|
+
import { EffectComposer } from "postprocessing";
|
|
2
|
+
import { Camera, Scene } from "three";
|
|
3
|
+
import { AOEffect } from "../ao/AOEffect";
|
|
4
|
+
declare class HBAOEffect extends AOEffect {
|
|
5
|
+
lastSize: {
|
|
6
|
+
width: number;
|
|
7
|
+
height: number;
|
|
8
|
+
resolutionScale: number;
|
|
9
|
+
};
|
|
10
|
+
constructor(composer: EffectComposer, camera: Camera, scene: Scene, options?: {
|
|
11
|
+
[key: string]: unknown;
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
export { HBAOEffect };
|
|
15
15
|
//# sourceMappingURL=HBAOEffect.d.ts.map
|
|
@@ -1,25 +1,25 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.HBAOEffect = void 0;
|
|
4
|
-
const AOEffect_1 = require("../ao/AOEffect");
|
|
5
|
-
const AOPass_1 = require("../ao/AOPass");
|
|
6
|
-
const ao_utils_1 = require("../ao/shader/ao_utils");
|
|
7
|
-
const hbao_1 = require("./shader/hbao");
|
|
8
|
-
const finalFragmentShader = hbao_1.hbao.replace("#include <ao_utils>", ao_utils_1.ao_utils);
|
|
9
|
-
class HBAOPass extends AOPass_1.AOPass {
|
|
10
|
-
// #region Constructors (1)
|
|
11
|
-
constructor(camera, scene) {
|
|
12
|
-
super(camera, scene, finalFragmentShader);
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
class HBAOEffect extends AOEffect_1.AOEffect {
|
|
16
|
-
// #endregion Properties (1)
|
|
17
|
-
// #region Constructors (1)
|
|
18
|
-
constructor(composer, camera, scene, options = AOEffect_1.AOEffect.DefaultOptions) {
|
|
19
|
-
super(composer, camera, scene, new HBAOPass(camera, scene), Object.assign(Object.assign(Object.assign({}, AOEffect_1.AOEffect.DefaultOptions), HBAOEffect.DefaultOptions), options));
|
|
20
|
-
// #region Properties (1)
|
|
21
|
-
this.lastSize = { width: 0, height: 0, resolutionScale: 0 };
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
exports.HBAOEffect = HBAOEffect;
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.HBAOEffect = void 0;
|
|
4
|
+
const AOEffect_1 = require("../ao/AOEffect");
|
|
5
|
+
const AOPass_1 = require("../ao/AOPass");
|
|
6
|
+
const ao_utils_1 = require("../ao/shader/ao_utils");
|
|
7
|
+
const hbao_1 = require("./shader/hbao");
|
|
8
|
+
const finalFragmentShader = hbao_1.hbao.replace("#include <ao_utils>", ao_utils_1.ao_utils);
|
|
9
|
+
class HBAOPass extends AOPass_1.AOPass {
|
|
10
|
+
// #region Constructors (1)
|
|
11
|
+
constructor(camera, scene) {
|
|
12
|
+
super(camera, scene, finalFragmentShader);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
class HBAOEffect extends AOEffect_1.AOEffect {
|
|
16
|
+
// #endregion Properties (1)
|
|
17
|
+
// #region Constructors (1)
|
|
18
|
+
constructor(composer, camera, scene, options = AOEffect_1.AOEffect.DefaultOptions) {
|
|
19
|
+
super(composer, camera, scene, new HBAOPass(camera, scene), Object.assign(Object.assign(Object.assign({}, AOEffect_1.AOEffect.DefaultOptions), HBAOEffect.DefaultOptions), options));
|
|
20
|
+
// #region Properties (1)
|
|
21
|
+
this.lastSize = { width: 0, height: 0, resolutionScale: 0 };
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
exports.HBAOEffect = HBAOEffect;
|
|
25
25
|
//# sourceMappingURL=HBAOEffect.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const hbao = "\n#define PI 3.14159265358979323846264338327950288\n\nvarying vec2 vUv;\n\nuniform highp sampler2D depthTexture;\n\nuniform mat4 projectionViewMatrix;\nuniform int frame;\n\nuniform sampler2D blueNoiseTexture;\nuniform vec2 blueNoiseRepeat;\nuniform vec2 texSize;\n\nuniform float aoDistance;\nuniform float distancePower;\nuniform float bias;\nuniform float thickness;\n\n#include <packing>\n#include <sampleBlueNoise>\n\nuniform float cameraNear;\nuniform float cameraFar;\nuniform mat4 cameraMatrixWorld;\n\n#include <ao_utils>\n\n// source: https://github.com/mrdoob/three.js/blob/342946c8392639028da439b6dc0597e58209c696/examples/js/shaders/SAOShader.js#L123\nfloat getViewZ(const float depth) {\n#ifdef PERSPECTIVE_CAMERA\n return perspectiveDepthToViewZ(depth, cameraNear, cameraFar);\n#else\n return orthographicDepthToViewZ(depth, cameraNear, cameraFar);\n#endif\n}\n\nvec3 slerp(const vec3 a, const vec3 b, const float t) {\n float cosAngle = dot(a, b);\n float angle = acos(cosAngle);\n\n if (abs(angle) < 0.001) {\n return mix(a, b, t);\n }\n\n float sinAngle = sin(angle);\n float t1 = sin((1.0 - t) * angle) / sinAngle;\n float t2 = sin(t * angle) / sinAngle;\n\n return (a * t1) + (b * t2);\n}\n\n// source: https://www.shadertoy.com/view/cll3R4\nvec3 cosineSampleHemisphere(const vec3 n, const vec2 u) {\n float r = sqrt(u.x);\n float theta = 2.0 * PI * u.y;\n\n vec3 b = normalize(cross(n, vec3(0.0, 1.0, 1.0)));\n vec3 t = cross(b, n);\n\n return normalize(r * sin(theta) * b + sqrt(1.0 - u.x) * n + r * cos(theta) * t);\n}\n\nvoid main() {\n float depth = textureLod(depthTexture, vUv, 0.0).r;\n vec3 normal = computeNormal(vUv);\n\n // filter out background\n if (depth == 1.0) {\n gl_FragColor = vec4(normal, 1.0);\n return;\n }\n\n vec4 cameraPosition = cameraMatrixWorld * vec4(0.0, 0.0, 0.0, 1.0);\n\n vec3 worldPos = computeWorldPosition(depth, vUv);\n vec3 screenSpaceNormal = getUnpackedNormal(vUv);\n\n float ao = 0.0, totalWeight = 0.0;\n\n for (int i = 0; i < spp; i++) {\n int seed = i;\n #ifdef animatedNoise\n seed += frame;\n #endif\n\n vec4 blueNoise = sampleBlueNoise(blueNoiseTexture, seed, blueNoiseRepeat, texSize);\n\n vec3 sampleWorldDir = cosineSampleHemisphere(normal, blueNoise.rg);\n\n vec3 sampleWorldPos = worldPos + aoDistance * pow(blueNoise.b, distancePower + 1.0) * sampleWorldDir;\n\n // Project the sample position to screen space\n vec4 sampleUv = projectionViewMatrix * vec4(sampleWorldPos, 1.);\n sampleUv.xy /= sampleUv.w;\n sampleUv.xy = sampleUv.xy * 0.5 + 0.5;\n\n // Get the depth of the sample position\n float sampleDepth = textureLod(depthTexture, sampleUv.xy, 0.0).r;\n\n if(sampleDepth < 1.0) {\n vec3 sampleNormal = getUnpackedNormal(sampleUv.xy);\n\n // Compute the horizon line\n float deltaDepth = depth - sampleDepth;\n\n // distance based bias\n float d = distance(sampleWorldPos, cameraPosition.xyz) / aoDistance;\n deltaDepth *= 0.001 * d * d;\n\n float th = thickness * 0.01;\n\n float theta = dot(normal, sampleWorldDir);\n totalWeight += theta;\n\n if (deltaDepth < th) {\n\n\n float horizon = sampleDepth + deltaDepth * bias * 1000.;\n\n float occlusion = max(0.0, horizon - depth) * theta;\n\n float m = max(0., 1. - deltaDepth / th);\n occlusion = 10. * occlusion * m / d;\n\n occlusion = max(0.0, occlusion);\n \n // check if the normals are in the same direction\n float dotProduct = dot(screenSpaceNormal, sampleNormal);\n if (dotProduct < 0.9999) {\n \n occlusion = sqrt(occlusion);\n ao += occlusion;\n } else {\n if(areDepthsOnSamePlane(depth, sampleDepth, vUv, sampleUv.xy, screenSpaceNormal, 0.1)) {\n // occluded += 0.0;\n // totalWeight += 1.0;\n } else {\n \n occlusion = sqrt(occlusion);\n ao += occlusion;\n }\n }\n }\n }\n }\n\n if (totalWeight > 0.) ao /= totalWeight;\n\n // clamp ao to [0, 1]\n ao = clamp(1. - ao, 0., 1.);\n\n gl_FragColor = vec4(normal, ao);\n}\n";
|
|
1
|
+
export declare const hbao = "\n#define PI 3.14159265358979323846264338327950288\n\nvarying vec2 vUv;\n\nuniform highp sampler2D depthTexture;\n\nuniform mat4 projectionViewMatrix;\nuniform int frame;\n\nuniform sampler2D blueNoiseTexture;\nuniform vec2 blueNoiseRepeat;\nuniform vec2 texSize;\n\nuniform float aoDistance;\nuniform float distancePower;\nuniform float bias;\nuniform float thickness;\n\n#include <packing>\n#include <sampleBlueNoise>\n\nuniform float cameraNear;\nuniform float cameraFar;\nuniform mat4 cameraMatrixWorld;\n\n#include <ao_utils>\n\n// source: https://github.com/mrdoob/three.js/blob/342946c8392639028da439b6dc0597e58209c696/examples/js/shaders/SAOShader.js#L123\nfloat getViewZ(const float depth) {\n#ifdef PERSPECTIVE_CAMERA\n return perspectiveDepthToViewZ(depth, cameraNear, cameraFar);\n#else\n return orthographicDepthToViewZ(depth, cameraNear, cameraFar);\n#endif\n}\n\nvec3 slerp(const vec3 a, const vec3 b, const float t) {\n float cosAngle = dot(a, b);\n float angle = acos(cosAngle);\n\n if (abs(angle) < 0.001) {\n return mix(a, b, t);\n }\n\n float sinAngle = sin(angle);\n float t1 = sin((1.0 - t) * angle) / sinAngle;\n float t2 = sin(t * angle) / sinAngle;\n\n return (a * t1) + (b * t2);\n}\n\n// source: https://www.shadertoy.com/view/cll3R4\nvec3 cosineSampleHemisphere(const vec3 n, const vec2 u) {\n float r = sqrt(u.x);\n float theta = 2.0 * PI * u.y;\n\n vec3 b = normalize(cross(n, vec3(0.0, 1.0, 1.0)));\n vec3 t = cross(b, n);\n\n return normalize(r * sin(theta) * b + sqrt(1.0 - u.x) * n + r * cos(theta) * t);\n}\n\nvoid main() {\n float depth = textureLod(depthTexture, vUv, 0.0).r;\n vec3 normal = computeNormal(vUv);\n\n // filter out background\n if (depth == 1.0) {\n gl_FragColor = vec4(normal, 1.0);\n return;\n }\n\n vec4 cameraPosition = cameraMatrixWorld * vec4(0.0, 0.0, 0.0, 1.0);\n\n vec3 worldPos = computeWorldPosition(depth, vUv);\n vec3 screenSpaceNormal = getUnpackedNormal(vUv);\n\n float ao = 0.0, totalWeight = 0.0;\n\n for (int i = 0; i < spp; i++) {\n int seed = i;\n #ifdef animatedNoise\n seed += frame;\n #endif\n\n vec4 blueNoise = sampleBlueNoise(blueNoiseTexture, seed, blueNoiseRepeat, texSize);\n\n vec3 sampleWorldDir = cosineSampleHemisphere(normal, blueNoise.rg);\n\n vec3 sampleWorldPos = worldPos + aoDistance * pow(blueNoise.b, distancePower + 1.0) * sampleWorldDir;\n\n // Project the sample position to screen space\n vec4 sampleUv = projectionViewMatrix * vec4(sampleWorldPos, 1.);\n sampleUv.xy /= sampleUv.w;\n sampleUv.xy = sampleUv.xy * 0.5 + 0.5;\n\n // Get the depth of the sample position\n float sampleDepth = textureLod(depthTexture, sampleUv.xy, 0.0).r;\n\n if(sampleDepth < 1.0) {\n vec3 sampleNormal = getUnpackedNormal(sampleUv.xy);\n\n // Compute the horizon line\n float deltaDepth = depth - sampleDepth;\n\n // distance based bias\n float d = distance(sampleWorldPos, cameraPosition.xyz) / aoDistance;\n deltaDepth *= 0.001 * d * d;\n\n float th = thickness * 0.01;\n\n float theta = dot(normal, sampleWorldDir);\n totalWeight += theta;\n\n if (deltaDepth < th) {\n\n\n float horizon = sampleDepth + deltaDepth * bias * 1000.;\n\n float occlusion = max(0.0, horizon - depth) * theta;\n\n float m = max(0., 1. - deltaDepth / th);\n occlusion = 10. * occlusion * m / d;\n\n occlusion = max(0.0, occlusion);\n \n // check if the normals are in the same direction\n float dotProduct = dot(screenSpaceNormal, sampleNormal);\n if (dotProduct < 0.9999) {\n \n occlusion = sqrt(occlusion);\n ao += occlusion;\n } else {\n if(areDepthsOnSamePlane(depth, sampleDepth, vUv, sampleUv.xy, screenSpaceNormal, 0.1)) {\n // occluded += 0.0;\n // totalWeight += 1.0;\n } else {\n \n occlusion = sqrt(occlusion);\n ao += occlusion;\n }\n }\n }\n }\n }\n\n if (totalWeight > 0.) ao /= totalWeight;\n\n // clamp ao to [0, 1]\n ao = clamp(1. - ao, 0., 1.);\n\n gl_FragColor = vec4(normal, ao);\n}\n";
|
|
2
2
|
//# sourceMappingURL=hbao.d.ts.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.hbao = void 0;
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.hbao = void 0;
|
|
4
4
|
exports.hbao = `
|
|
5
5
|
#define PI 3.14159265358979323846264338327950288
|
|
6
6
|
|
|
@@ -155,5 +155,5 @@ void main() {
|
|
|
155
155
|
|
|
156
156
|
gl_FragColor = vec4(normal, ao);
|
|
157
157
|
}
|
|
158
|
-
`;
|
|
158
|
+
`;
|
|
159
159
|
//# sourceMappingURL=hbao.js.map
|
|
@@ -1,34 +1,34 @@
|
|
|
1
|
-
import { Pass } from "postprocessing";
|
|
2
|
-
import { Camera, Texture, Vector2, WebGLRenderer, WebGLRenderTarget } from "three";
|
|
3
|
-
export declare class PoissionDenoisePass extends Pass {
|
|
4
|
-
static DefaultOptions: {
|
|
5
|
-
iterations: number;
|
|
6
|
-
radius: number;
|
|
7
|
-
rings: number;
|
|
8
|
-
lumaPhi: number;
|
|
9
|
-
depthPhi: number;
|
|
10
|
-
normalPhi: number;
|
|
11
|
-
samples: number;
|
|
12
|
-
distance: number;
|
|
13
|
-
normalTexture: null;
|
|
14
|
-
};
|
|
15
|
-
static blueNoiseTexture?: Texture;
|
|
16
|
-
index: number;
|
|
17
|
-
inputTexture: Texture;
|
|
18
|
-
iterations: number;
|
|
19
|
-
radius: number;
|
|
20
|
-
renderTargetA: WebGLRenderTarget;
|
|
21
|
-
renderTargetB: WebGLRenderTarget;
|
|
22
|
-
rings: number;
|
|
23
|
-
samples: number;
|
|
24
|
-
constructor(camera: Camera, inputTexture: Texture, depthTexture: Texture, options?: {
|
|
25
|
-
[key: string]: unknown;
|
|
26
|
-
});
|
|
27
|
-
static loadBlueNoiseTexture(): Promise<void>;
|
|
28
|
-
get texture(): Texture;
|
|
29
|
-
generateDenoiseSamples(numSamples: number, numRings: number, r: number, texelSize: Vector2): Vector2[];
|
|
30
|
-
generatePoissonDiskConstant(poissonDisk: Vector2[]): string;
|
|
31
|
-
render(renderer: WebGLRenderer): void;
|
|
32
|
-
setSize(width: number, height: number): void;
|
|
33
|
-
}
|
|
1
|
+
import { Pass } from "postprocessing";
|
|
2
|
+
import { Camera, Texture, Vector2, WebGLRenderer, WebGLRenderTarget } from "three";
|
|
3
|
+
export declare class PoissionDenoisePass extends Pass {
|
|
4
|
+
static DefaultOptions: {
|
|
5
|
+
iterations: number;
|
|
6
|
+
radius: number;
|
|
7
|
+
rings: number;
|
|
8
|
+
lumaPhi: number;
|
|
9
|
+
depthPhi: number;
|
|
10
|
+
normalPhi: number;
|
|
11
|
+
samples: number;
|
|
12
|
+
distance: number;
|
|
13
|
+
normalTexture: null;
|
|
14
|
+
};
|
|
15
|
+
static blueNoiseTexture?: Texture;
|
|
16
|
+
index: number;
|
|
17
|
+
inputTexture: Texture;
|
|
18
|
+
iterations: number;
|
|
19
|
+
radius: number;
|
|
20
|
+
renderTargetA: WebGLRenderTarget;
|
|
21
|
+
renderTargetB: WebGLRenderTarget;
|
|
22
|
+
rings: number;
|
|
23
|
+
samples: number;
|
|
24
|
+
constructor(camera: Camera, inputTexture: Texture, depthTexture: Texture, options?: {
|
|
25
|
+
[key: string]: unknown;
|
|
26
|
+
});
|
|
27
|
+
static loadBlueNoiseTexture(): Promise<void>;
|
|
28
|
+
get texture(): Texture;
|
|
29
|
+
generateDenoiseSamples(numSamples: number, numRings: number, r: number, texelSize: Vector2): Vector2[];
|
|
30
|
+
generatePoissonDiskConstant(poissonDisk: Vector2[]): string;
|
|
31
|
+
render(renderer: WebGLRenderer): void;
|
|
32
|
+
setSize(width: number, height: number): void;
|
|
33
|
+
}
|
|
34
34
|
//# sourceMappingURL=PoissionDenoisePass.d.ts.map
|