@shapediver/viewer.rendering-engine.rendering-engine-threejs 3.16.8 → 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
- package/dist/managers/InstanceGroupManager.d.ts +0 -58
- package/dist/managers/InstanceGroupManager.d.ts.map +0 -1
- package/dist/managers/InstanceGroupManager.js +0 -372
- package/dist/managers/InstanceGroupManager.js.map +0 -1
|
@@ -1,212 +1,212 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.PoissionDenoisePass = void 0;
|
|
13
|
-
const viewer_shared_services_1 = require("@shapediver/viewer.shared.services");
|
|
14
|
-
const postprocessing_1 = require("postprocessing");
|
|
15
|
-
const three_1 = require("three");
|
|
16
|
-
const basic_1 = require("../utils/shader/basic");
|
|
17
|
-
const sampleBlueNoise_1 = require("../utils/shader/sampleBlueNoise");
|
|
18
|
-
const poissionDenoise_1 = require("./shader/poissionDenoise");
|
|
19
|
-
const finalFragmentShader = poissionDenoise_1.poissionDenoise.replace("#include <sampleBlueNoise>", sampleBlueNoise_1.sampleBlueNoise);
|
|
20
|
-
const defaultPoissonBlurOptions = {
|
|
21
|
-
iterations: 1,
|
|
22
|
-
radius: 12,
|
|
23
|
-
rings: 11,
|
|
24
|
-
lumaPhi: 10,
|
|
25
|
-
depthPhi: 2,
|
|
26
|
-
normalPhi: 3.25,
|
|
27
|
-
samples: 16,
|
|
28
|
-
distance: 1,
|
|
29
|
-
normalTexture: null,
|
|
30
|
-
};
|
|
31
|
-
class PoissionDenoisePass extends postprocessing_1.Pass {
|
|
32
|
-
// #endregion Properties (11)
|
|
33
|
-
// #region Constructors (1)
|
|
34
|
-
constructor(camera, inputTexture, depthTexture, options = defaultPoissonBlurOptions) {
|
|
35
|
-
super("PoissionBlurPass");
|
|
36
|
-
this.index = 0;
|
|
37
|
-
this.iterations = defaultPoissonBlurOptions.iterations;
|
|
38
|
-
this.radius = 12;
|
|
39
|
-
this.rings = 11;
|
|
40
|
-
this.samples = 16;
|
|
41
|
-
if (PoissionDenoisePass.blueNoiseTexture === undefined) {
|
|
42
|
-
PoissionDenoisePass.loadBlueNoiseTexture().then(() => {
|
|
43
|
-
this.fullscreenMaterial.uniforms.blueNoiseTexture.value =
|
|
44
|
-
PoissionDenoisePass.blueNoiseTexture;
|
|
45
|
-
});
|
|
46
|
-
}
|
|
47
|
-
options = Object.assign(Object.assign({}, defaultPoissonBlurOptions), options);
|
|
48
|
-
this.inputTexture = inputTexture;
|
|
49
|
-
this.fullscreenMaterial = new three_1.ShaderMaterial({
|
|
50
|
-
fragmentShader: finalFragmentShader,
|
|
51
|
-
vertexShader: basic_1.basic,
|
|
52
|
-
uniforms: {
|
|
53
|
-
depthTexture: { value: null },
|
|
54
|
-
inputTexture: { value: null },
|
|
55
|
-
projectionMatrixInverse: { value: new three_1.Matrix4() },
|
|
56
|
-
cameraMatrixWorld: { value: new three_1.Matrix4() },
|
|
57
|
-
lumaPhi: { value: 5.0 },
|
|
58
|
-
depthPhi: { value: 5.0 },
|
|
59
|
-
normalPhi: { value: 5.0 },
|
|
60
|
-
distance: { value: 1.0 },
|
|
61
|
-
resolution: { value: new three_1.Vector2() },
|
|
62
|
-
blueNoiseTexture: { value: null },
|
|
63
|
-
index: { value: 0 },
|
|
64
|
-
blueNoiseRepeat: { value: new three_1.Vector2() },
|
|
65
|
-
},
|
|
66
|
-
});
|
|
67
|
-
const renderTargetOptions = {
|
|
68
|
-
type: three_1.HalfFloatType,
|
|
69
|
-
depthBuffer: false,
|
|
70
|
-
};
|
|
71
|
-
this.renderTargetA = new three_1.WebGLRenderTarget(1, 1, renderTargetOptions);
|
|
72
|
-
this.renderTargetB = new three_1.WebGLRenderTarget(1, 1, renderTargetOptions);
|
|
73
|
-
const { uniforms } = this.fullscreenMaterial;
|
|
74
|
-
uniforms["inputTexture"].value = this.inputTexture;
|
|
75
|
-
uniforms["depthTexture"].value = depthTexture;
|
|
76
|
-
uniforms["projectionMatrixInverse"].value =
|
|
77
|
-
camera.projectionMatrixInverse;
|
|
78
|
-
uniforms["cameraMatrixWorld"].value = camera.matrixWorld;
|
|
79
|
-
uniforms["depthPhi"].value = options.depthPhi;
|
|
80
|
-
uniforms["normalPhi"].value = options.normalPhi;
|
|
81
|
-
uniforms["distance"].value = options.distance;
|
|
82
|
-
if (options.normalTexture) {
|
|
83
|
-
uniforms["normalTexture"] = { value: options.normalTexture };
|
|
84
|
-
}
|
|
85
|
-
else {
|
|
86
|
-
this.fullscreenMaterial.defines.NORMAL_IN_RGB =
|
|
87
|
-
"";
|
|
88
|
-
}
|
|
89
|
-
// these properties need the shader to be recompiled
|
|
90
|
-
for (const prop of ["radius", "rings", "samples"]) {
|
|
91
|
-
Object.defineProperty(this, prop, {
|
|
92
|
-
get: () => options[prop],
|
|
93
|
-
set: (value) => {
|
|
94
|
-
options[prop] = value;
|
|
95
|
-
this.setSize(this.renderTargetA.width, this.renderTargetA.height);
|
|
96
|
-
},
|
|
97
|
-
});
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
static loadBlueNoiseTexture() {
|
|
101
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
102
|
-
const result = yield viewer_shared_services_1.HttpClient.instance.loadTexture("https://viewer.shapediver.com/v3/graphics/LDR_RGBA_0.png");
|
|
103
|
-
if (result && result.data && result.data.blob) {
|
|
104
|
-
const url = URL.createObjectURL(result.data.blob);
|
|
105
|
-
new three_1.TextureLoader().load(url, (texture) => {
|
|
106
|
-
URL.revokeObjectURL(url);
|
|
107
|
-
PoissionDenoisePass.blueNoiseTexture = texture;
|
|
108
|
-
PoissionDenoisePass.blueNoiseTexture.minFilter = three_1.NearestFilter;
|
|
109
|
-
PoissionDenoisePass.blueNoiseTexture.magFilter = three_1.NearestFilter;
|
|
110
|
-
PoissionDenoisePass.blueNoiseTexture.wrapS = three_1.RepeatWrapping;
|
|
111
|
-
PoissionDenoisePass.blueNoiseTexture.wrapT = three_1.RepeatWrapping;
|
|
112
|
-
PoissionDenoisePass.blueNoiseTexture.colorSpace = three_1.NoColorSpace;
|
|
113
|
-
PoissionDenoisePass.blueNoiseTexture.needsUpdate = true;
|
|
114
|
-
});
|
|
115
|
-
}
|
|
116
|
-
else if (!result) {
|
|
117
|
-
viewer_shared_services_1.Logger.instance.warn("The blue noise texture could not be loaded. This may result in a suboptimal denoising quality. Retrying in 1 second...");
|
|
118
|
-
// if there was an issue loading the texture
|
|
119
|
-
// set a timeout with 1 second to try again
|
|
120
|
-
setTimeout(() => {
|
|
121
|
-
this.loadBlueNoiseTexture();
|
|
122
|
-
}, 1000);
|
|
123
|
-
}
|
|
124
|
-
});
|
|
125
|
-
}
|
|
126
|
-
// #endregion Constructors (1)
|
|
127
|
-
// #region Public Getters And Setters (1)
|
|
128
|
-
get texture() {
|
|
129
|
-
return this.renderTargetB.texture;
|
|
130
|
-
}
|
|
131
|
-
// #endregion Public Getters And Setters (1)
|
|
132
|
-
// #region Public Methods (4)
|
|
133
|
-
generateDenoiseSamples(numSamples, numRings, r, texelSize) {
|
|
134
|
-
const angleStep = (2 * Math.PI * numRings) / numSamples;
|
|
135
|
-
const invNumSamples = 1.0 / numSamples;
|
|
136
|
-
const radiusStep = invNumSamples;
|
|
137
|
-
const samples = [];
|
|
138
|
-
let radius = invNumSamples;
|
|
139
|
-
let angle = 0;
|
|
140
|
-
for (let i = 0; i < numSamples; i++) {
|
|
141
|
-
const v = new three_1.Vector2(Math.cos(angle), Math.sin(angle))
|
|
142
|
-
.multiplyScalar(Math.pow(radius, 0.75))
|
|
143
|
-
.multiply(texelSize)
|
|
144
|
-
.multiplyScalar(r);
|
|
145
|
-
if (isNaN(v.x) || v.x === Infinity || v.x === -Infinity)
|
|
146
|
-
v.x = 0;
|
|
147
|
-
if (isNaN(v.y) || v.y === Infinity || v.y === -Infinity)
|
|
148
|
-
v.y = 0;
|
|
149
|
-
samples.push(v);
|
|
150
|
-
radius += radiusStep;
|
|
151
|
-
angle += angleStep;
|
|
152
|
-
}
|
|
153
|
-
return samples;
|
|
154
|
-
}
|
|
155
|
-
generatePoissonDiskConstant(poissonDisk) {
|
|
156
|
-
const samples = poissonDisk.length;
|
|
157
|
-
let glslCode = "const vec2 poissonDisk[samples] = vec2[samples](\n";
|
|
158
|
-
for (let i = 0; i < samples; i++) {
|
|
159
|
-
const sample = poissonDisk[i];
|
|
160
|
-
glslCode += ` vec2(${sample.x}, ${sample.y})`;
|
|
161
|
-
if (i < samples - 1) {
|
|
162
|
-
glslCode += ",";
|
|
163
|
-
}
|
|
164
|
-
glslCode += "\n";
|
|
165
|
-
}
|
|
166
|
-
glslCode += ");";
|
|
167
|
-
return glslCode;
|
|
168
|
-
}
|
|
169
|
-
render(renderer) {
|
|
170
|
-
this.fullscreenMaterial.uniforms.index.value = 0;
|
|
171
|
-
const noiseTexture = this.fullscreenMaterial
|
|
172
|
-
.uniforms.blueNoiseTexture.value;
|
|
173
|
-
if (noiseTexture !== undefined &&
|
|
174
|
-
noiseTexture !== null &&
|
|
175
|
-
noiseTexture instanceof three_1.Texture) {
|
|
176
|
-
const { width, height } = noiseTexture.source.data;
|
|
177
|
-
this.fullscreenMaterial.uniforms.blueNoiseRepeat.value.set(this.renderTargetA.width / width, this.renderTargetA.height / height);
|
|
178
|
-
}
|
|
179
|
-
for (let i = 0; i < 2 * this.iterations; i++) {
|
|
180
|
-
const horizontal = i % 2 === 0;
|
|
181
|
-
const inputRenderTarget = horizontal
|
|
182
|
-
? this.renderTargetB
|
|
183
|
-
: this.renderTargetA;
|
|
184
|
-
this.fullscreenMaterial.uniforms["inputTexture"].value = i === 0 ? this.inputTexture : inputRenderTarget.texture;
|
|
185
|
-
const renderTarget = horizontal
|
|
186
|
-
? this.renderTargetA
|
|
187
|
-
: this.renderTargetB;
|
|
188
|
-
renderer.setRenderTarget(renderTarget);
|
|
189
|
-
renderer.render(this.scene, this.camera);
|
|
190
|
-
this.fullscreenMaterial.uniforms.index.value =
|
|
191
|
-
(this.fullscreenMaterial.uniforms.index
|
|
192
|
-
.value +
|
|
193
|
-
1) %
|
|
194
|
-
4;
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
setSize(width, height) {
|
|
198
|
-
this.renderTargetA.setSize(width, height);
|
|
199
|
-
this.renderTargetB.setSize(width, height);
|
|
200
|
-
this.fullscreenMaterial.uniforms.resolution.value.set(width, height);
|
|
201
|
-
const poissonDisk = this.generateDenoiseSamples(this.samples, this.rings, this.radius, new three_1.Vector2(1 / width, 1 / height));
|
|
202
|
-
const sampleDefine = `const int samples = ${this.samples};\n`;
|
|
203
|
-
const poissonDiskConstant = this.generatePoissonDiskConstant(poissonDisk);
|
|
204
|
-
this.fullscreenMaterial.fragmentShader =
|
|
205
|
-
sampleDefine + poissonDiskConstant + "\n" + finalFragmentShader;
|
|
206
|
-
this.fullscreenMaterial.needsUpdate = true;
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
exports.PoissionDenoisePass = PoissionDenoisePass;
|
|
210
|
-
// #region Properties (11)
|
|
211
|
-
PoissionDenoisePass.DefaultOptions = defaultPoissonBlurOptions;
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.PoissionDenoisePass = void 0;
|
|
13
|
+
const viewer_shared_services_1 = require("@shapediver/viewer.shared.services");
|
|
14
|
+
const postprocessing_1 = require("postprocessing");
|
|
15
|
+
const three_1 = require("three");
|
|
16
|
+
const basic_1 = require("../utils/shader/basic");
|
|
17
|
+
const sampleBlueNoise_1 = require("../utils/shader/sampleBlueNoise");
|
|
18
|
+
const poissionDenoise_1 = require("./shader/poissionDenoise");
|
|
19
|
+
const finalFragmentShader = poissionDenoise_1.poissionDenoise.replace("#include <sampleBlueNoise>", sampleBlueNoise_1.sampleBlueNoise);
|
|
20
|
+
const defaultPoissonBlurOptions = {
|
|
21
|
+
iterations: 1,
|
|
22
|
+
radius: 12,
|
|
23
|
+
rings: 11,
|
|
24
|
+
lumaPhi: 10,
|
|
25
|
+
depthPhi: 2,
|
|
26
|
+
normalPhi: 3.25,
|
|
27
|
+
samples: 16,
|
|
28
|
+
distance: 1,
|
|
29
|
+
normalTexture: null,
|
|
30
|
+
};
|
|
31
|
+
class PoissionDenoisePass extends postprocessing_1.Pass {
|
|
32
|
+
// #endregion Properties (11)
|
|
33
|
+
// #region Constructors (1)
|
|
34
|
+
constructor(camera, inputTexture, depthTexture, options = defaultPoissonBlurOptions) {
|
|
35
|
+
super("PoissionBlurPass");
|
|
36
|
+
this.index = 0;
|
|
37
|
+
this.iterations = defaultPoissonBlurOptions.iterations;
|
|
38
|
+
this.radius = 12;
|
|
39
|
+
this.rings = 11;
|
|
40
|
+
this.samples = 16;
|
|
41
|
+
if (PoissionDenoisePass.blueNoiseTexture === undefined) {
|
|
42
|
+
PoissionDenoisePass.loadBlueNoiseTexture().then(() => {
|
|
43
|
+
this.fullscreenMaterial.uniforms.blueNoiseTexture.value =
|
|
44
|
+
PoissionDenoisePass.blueNoiseTexture;
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
options = Object.assign(Object.assign({}, defaultPoissonBlurOptions), options);
|
|
48
|
+
this.inputTexture = inputTexture;
|
|
49
|
+
this.fullscreenMaterial = new three_1.ShaderMaterial({
|
|
50
|
+
fragmentShader: finalFragmentShader,
|
|
51
|
+
vertexShader: basic_1.basic,
|
|
52
|
+
uniforms: {
|
|
53
|
+
depthTexture: { value: null },
|
|
54
|
+
inputTexture: { value: null },
|
|
55
|
+
projectionMatrixInverse: { value: new three_1.Matrix4() },
|
|
56
|
+
cameraMatrixWorld: { value: new three_1.Matrix4() },
|
|
57
|
+
lumaPhi: { value: 5.0 },
|
|
58
|
+
depthPhi: { value: 5.0 },
|
|
59
|
+
normalPhi: { value: 5.0 },
|
|
60
|
+
distance: { value: 1.0 },
|
|
61
|
+
resolution: { value: new three_1.Vector2() },
|
|
62
|
+
blueNoiseTexture: { value: null },
|
|
63
|
+
index: { value: 0 },
|
|
64
|
+
blueNoiseRepeat: { value: new three_1.Vector2() },
|
|
65
|
+
},
|
|
66
|
+
});
|
|
67
|
+
const renderTargetOptions = {
|
|
68
|
+
type: three_1.HalfFloatType,
|
|
69
|
+
depthBuffer: false,
|
|
70
|
+
};
|
|
71
|
+
this.renderTargetA = new three_1.WebGLRenderTarget(1, 1, renderTargetOptions);
|
|
72
|
+
this.renderTargetB = new three_1.WebGLRenderTarget(1, 1, renderTargetOptions);
|
|
73
|
+
const { uniforms } = this.fullscreenMaterial;
|
|
74
|
+
uniforms["inputTexture"].value = this.inputTexture;
|
|
75
|
+
uniforms["depthTexture"].value = depthTexture;
|
|
76
|
+
uniforms["projectionMatrixInverse"].value =
|
|
77
|
+
camera.projectionMatrixInverse;
|
|
78
|
+
uniforms["cameraMatrixWorld"].value = camera.matrixWorld;
|
|
79
|
+
uniforms["depthPhi"].value = options.depthPhi;
|
|
80
|
+
uniforms["normalPhi"].value = options.normalPhi;
|
|
81
|
+
uniforms["distance"].value = options.distance;
|
|
82
|
+
if (options.normalTexture) {
|
|
83
|
+
uniforms["normalTexture"] = { value: options.normalTexture };
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
this.fullscreenMaterial.defines.NORMAL_IN_RGB =
|
|
87
|
+
"";
|
|
88
|
+
}
|
|
89
|
+
// these properties need the shader to be recompiled
|
|
90
|
+
for (const prop of ["radius", "rings", "samples"]) {
|
|
91
|
+
Object.defineProperty(this, prop, {
|
|
92
|
+
get: () => options[prop],
|
|
93
|
+
set: (value) => {
|
|
94
|
+
options[prop] = value;
|
|
95
|
+
this.setSize(this.renderTargetA.width, this.renderTargetA.height);
|
|
96
|
+
},
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
static loadBlueNoiseTexture() {
|
|
101
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
102
|
+
const result = yield viewer_shared_services_1.HttpClient.instance.loadTexture("https://viewer.shapediver.com/v3/graphics/LDR_RGBA_0.png");
|
|
103
|
+
if (result && result.data && result.data.blob) {
|
|
104
|
+
const url = URL.createObjectURL(result.data.blob);
|
|
105
|
+
new three_1.TextureLoader().load(url, (texture) => {
|
|
106
|
+
URL.revokeObjectURL(url);
|
|
107
|
+
PoissionDenoisePass.blueNoiseTexture = texture;
|
|
108
|
+
PoissionDenoisePass.blueNoiseTexture.minFilter = three_1.NearestFilter;
|
|
109
|
+
PoissionDenoisePass.blueNoiseTexture.magFilter = three_1.NearestFilter;
|
|
110
|
+
PoissionDenoisePass.blueNoiseTexture.wrapS = three_1.RepeatWrapping;
|
|
111
|
+
PoissionDenoisePass.blueNoiseTexture.wrapT = three_1.RepeatWrapping;
|
|
112
|
+
PoissionDenoisePass.blueNoiseTexture.colorSpace = three_1.NoColorSpace;
|
|
113
|
+
PoissionDenoisePass.blueNoiseTexture.needsUpdate = true;
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
else if (!result) {
|
|
117
|
+
viewer_shared_services_1.Logger.instance.warn("The blue noise texture could not be loaded. This may result in a suboptimal denoising quality. Retrying in 1 second...");
|
|
118
|
+
// if there was an issue loading the texture
|
|
119
|
+
// set a timeout with 1 second to try again
|
|
120
|
+
setTimeout(() => {
|
|
121
|
+
this.loadBlueNoiseTexture();
|
|
122
|
+
}, 1000);
|
|
123
|
+
}
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
// #endregion Constructors (1)
|
|
127
|
+
// #region Public Getters And Setters (1)
|
|
128
|
+
get texture() {
|
|
129
|
+
return this.renderTargetB.texture;
|
|
130
|
+
}
|
|
131
|
+
// #endregion Public Getters And Setters (1)
|
|
132
|
+
// #region Public Methods (4)
|
|
133
|
+
generateDenoiseSamples(numSamples, numRings, r, texelSize) {
|
|
134
|
+
const angleStep = (2 * Math.PI * numRings) / numSamples;
|
|
135
|
+
const invNumSamples = 1.0 / numSamples;
|
|
136
|
+
const radiusStep = invNumSamples;
|
|
137
|
+
const samples = [];
|
|
138
|
+
let radius = invNumSamples;
|
|
139
|
+
let angle = 0;
|
|
140
|
+
for (let i = 0; i < numSamples; i++) {
|
|
141
|
+
const v = new three_1.Vector2(Math.cos(angle), Math.sin(angle))
|
|
142
|
+
.multiplyScalar(Math.pow(radius, 0.75))
|
|
143
|
+
.multiply(texelSize)
|
|
144
|
+
.multiplyScalar(r);
|
|
145
|
+
if (isNaN(v.x) || v.x === Infinity || v.x === -Infinity)
|
|
146
|
+
v.x = 0;
|
|
147
|
+
if (isNaN(v.y) || v.y === Infinity || v.y === -Infinity)
|
|
148
|
+
v.y = 0;
|
|
149
|
+
samples.push(v);
|
|
150
|
+
radius += radiusStep;
|
|
151
|
+
angle += angleStep;
|
|
152
|
+
}
|
|
153
|
+
return samples;
|
|
154
|
+
}
|
|
155
|
+
generatePoissonDiskConstant(poissonDisk) {
|
|
156
|
+
const samples = poissonDisk.length;
|
|
157
|
+
let glslCode = "const vec2 poissonDisk[samples] = vec2[samples](\n";
|
|
158
|
+
for (let i = 0; i < samples; i++) {
|
|
159
|
+
const sample = poissonDisk[i];
|
|
160
|
+
glslCode += ` vec2(${sample.x}, ${sample.y})`;
|
|
161
|
+
if (i < samples - 1) {
|
|
162
|
+
glslCode += ",";
|
|
163
|
+
}
|
|
164
|
+
glslCode += "\n";
|
|
165
|
+
}
|
|
166
|
+
glslCode += ");";
|
|
167
|
+
return glslCode;
|
|
168
|
+
}
|
|
169
|
+
render(renderer) {
|
|
170
|
+
this.fullscreenMaterial.uniforms.index.value = 0;
|
|
171
|
+
const noiseTexture = this.fullscreenMaterial
|
|
172
|
+
.uniforms.blueNoiseTexture.value;
|
|
173
|
+
if (noiseTexture !== undefined &&
|
|
174
|
+
noiseTexture !== null &&
|
|
175
|
+
noiseTexture instanceof three_1.Texture) {
|
|
176
|
+
const { width, height } = noiseTexture.source.data;
|
|
177
|
+
this.fullscreenMaterial.uniforms.blueNoiseRepeat.value.set(this.renderTargetA.width / width, this.renderTargetA.height / height);
|
|
178
|
+
}
|
|
179
|
+
for (let i = 0; i < 2 * this.iterations; i++) {
|
|
180
|
+
const horizontal = i % 2 === 0;
|
|
181
|
+
const inputRenderTarget = horizontal
|
|
182
|
+
? this.renderTargetB
|
|
183
|
+
: this.renderTargetA;
|
|
184
|
+
this.fullscreenMaterial.uniforms["inputTexture"].value = i === 0 ? this.inputTexture : inputRenderTarget.texture;
|
|
185
|
+
const renderTarget = horizontal
|
|
186
|
+
? this.renderTargetA
|
|
187
|
+
: this.renderTargetB;
|
|
188
|
+
renderer.setRenderTarget(renderTarget);
|
|
189
|
+
renderer.render(this.scene, this.camera);
|
|
190
|
+
this.fullscreenMaterial.uniforms.index.value =
|
|
191
|
+
(this.fullscreenMaterial.uniforms.index
|
|
192
|
+
.value +
|
|
193
|
+
1) %
|
|
194
|
+
4;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
setSize(width, height) {
|
|
198
|
+
this.renderTargetA.setSize(width, height);
|
|
199
|
+
this.renderTargetB.setSize(width, height);
|
|
200
|
+
this.fullscreenMaterial.uniforms.resolution.value.set(width, height);
|
|
201
|
+
const poissonDisk = this.generateDenoiseSamples(this.samples, this.rings, this.radius, new three_1.Vector2(1 / width, 1 / height));
|
|
202
|
+
const sampleDefine = `const int samples = ${this.samples};\n`;
|
|
203
|
+
const poissonDiskConstant = this.generatePoissonDiskConstant(poissonDisk);
|
|
204
|
+
this.fullscreenMaterial.fragmentShader =
|
|
205
|
+
sampleDefine + poissonDiskConstant + "\n" + finalFragmentShader;
|
|
206
|
+
this.fullscreenMaterial.needsUpdate = true;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
exports.PoissionDenoisePass = PoissionDenoisePass;
|
|
210
|
+
// #region Properties (11)
|
|
211
|
+
PoissionDenoisePass.DefaultOptions = defaultPoissonBlurOptions;
|
|
212
212
|
//# sourceMappingURL=PoissionDenoisePass.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PoissionDenoisePass.js","sourceRoot":"","sources":["../../../../../src/managers/postprocessing/ao/poissionDenoise/PoissionDenoisePass.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,+EAAsE;AACtE,mDAAoC;AACpC,iCAae;AACf,iDAA4D;AAC5D,qEAAgE;AAChE,8DAA2E;AAE3E,MAAM,mBAAmB,GAAG,iCAAc,CAAC,OAAO,CACjD,4BAA4B,EAC5B,iCAAe,CACf,CAAC;AAEF,MAAM,yBAAyB,GAAG;IACjC,UAAU,EAAE,CAAC;IACb,MAAM,EAAE,EAAE;IACV,KAAK,EAAE,EAAE;IACT,OAAO,EAAE,EAAE;IACX,QAAQ,EAAE,CAAC;IACX,SAAS,EAAE,IAAI;IACf,OAAO,EAAE,EAAE;IACX,QAAQ,EAAE,CAAC;IACX,aAAa,EAAE,IAAI;CACnB,CAAC;AAEF,MAAa,mBAAoB,SAAQ,qBAAI;IAe5C,6BAA6B;IAE7B,2BAA2B;IAE3B,YACC,MAAc,EACd,YAAqB,EACrB,YAAqB,EACrB,UAAoC,yBAAyB;QAE7D,KAAK,CAAC,kBAAkB,CAAC,CAAC;QAnBpB,UAAK,GAAG,CAAC,CAAC;QAEV,eAAU,GAAG,yBAAyB,CAAC,UAAU,CAAC;QAClD,WAAM,GAAG,EAAE,CAAC;QAGZ,UAAK,GAAG,EAAE,CAAC;QACX,YAAO,GAAG,EAAE,CAAC;QAcnB,IAAI,mBAAmB,CAAC,gBAAgB,KAAK,SAAS,EAAE;
|
|
1
|
+
{"version":3,"file":"PoissionDenoisePass.js","sourceRoot":"","sources":["../../../../../src/managers/postprocessing/ao/poissionDenoise/PoissionDenoisePass.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const poissionDenoise = "\nvarying vec2 vUv;\n\nuniform sampler2D inputTexture;\nuniform highp sampler2D depthTexture;\nuniform highp sampler2D normalTexture;\nuniform mat4 projectionMatrixInverse;\nuniform mat4 viewMatrixInverse;\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 computeWorldPosition(float depth, vec2 coord, bool useCameraMatrixWorld) {\n // Convert depth to normalized device coordinates (NDC)\n float z = depth * 2.0 - 1.0;\n vec4 clipSpacePosition = vec4(coord * 2.0 - 1.0, 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 selected method\n vec4 worldSpacePosition;\n if (useCameraMatrixWorld) {\n // Use cameraMatrixWorld directly\n worldSpacePosition = cameraMatrixWorld * viewSpacePosition;\n } else {\n // Use viewMatrixInverse\n worldSpacePosition = viewMatrixInverse * viewSpacePosition;\n }\n\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 vec4 texel = textureLod(inputTexture, vUv, 0.0);\n vec3 normal = getNormal(vUv, texel);\n\n if (depthTexel.r == 1.0 || dot(depthTexel.rgb, depthTexel.rgb) == 0.) {\n #ifdef NORMAL_IN_RGB\n gl_FragColor = vec4(normal, 1.0);\n #else\n gl_FragColor = vec4(1.0);\n #endif\n\n return;\n }\n\n #ifdef NORMAL_IN_RGB\n float inputTexel = texel.a;\n float center = texel.a;\n #else\n vec3 inputTexel = texel.rgb;\n vec3 center = texel.rgb;\n #endif\n\n float depth = depthTexel.x;\n vec3 worldPos = computeWorldPosition(depth, vUv, true);\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 \n #ifdef NORMAL_IN_RGB\n float denoised = inputTexel;\n #else\n vec3 denoised = inputTexel;\n #endif\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 = computeWorldPosition(sampleDepth, neighborUv, true);\n float tangentPlaneDist = abs(dot(worldPos - worldPosSample, normal));\n\n if (sampleDepth < 1.0) {\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\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";
|
|
1
|
+
export declare const poissionDenoise = "\nvarying vec2 vUv;\n\nuniform sampler2D inputTexture;\nuniform highp sampler2D depthTexture;\nuniform highp sampler2D normalTexture;\nuniform mat4 projectionMatrixInverse;\nuniform mat4 viewMatrixInverse;\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 computeWorldPosition(float depth, vec2 coord, bool useCameraMatrixWorld) {\n // Convert depth to normalized device coordinates (NDC)\n float z = depth * 2.0 - 1.0;\n vec4 clipSpacePosition = vec4(coord * 2.0 - 1.0, 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 selected method\n vec4 worldSpacePosition;\n if (useCameraMatrixWorld) {\n // Use cameraMatrixWorld directly\n worldSpacePosition = cameraMatrixWorld * viewSpacePosition;\n } else {\n // Use viewMatrixInverse\n worldSpacePosition = viewMatrixInverse * viewSpacePosition;\n }\n\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 vec4 texel = textureLod(inputTexture, vUv, 0.0);\n vec3 normal = getNormal(vUv, texel);\n\n if (depthTexel.r == 1.0 || dot(depthTexel.rgb, depthTexel.rgb) == 0.) {\n #ifdef NORMAL_IN_RGB\n gl_FragColor = vec4(normal, 1.0);\n #else\n gl_FragColor = vec4(1.0);\n #endif\n\n return;\n }\n\n #ifdef NORMAL_IN_RGB\n float inputTexel = texel.a;\n float center = texel.a;\n #else\n vec3 inputTexel = texel.rgb;\n vec3 center = texel.rgb;\n #endif\n\n float depth = depthTexel.x;\n vec3 worldPos = computeWorldPosition(depth, vUv, true);\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 \n #ifdef NORMAL_IN_RGB\n float denoised = inputTexel;\n #else\n vec3 denoised = inputTexel;\n #endif\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 = computeWorldPosition(sampleDepth, neighborUv, true);\n float tangentPlaneDist = abs(dot(worldPos - worldPosSample, normal));\n\n if (sampleDepth < 1.0) {\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\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
2
|
//# sourceMappingURL=poissionDenoise.d.ts.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.poissionDenoise = void 0;
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.poissionDenoise = void 0;
|
|
4
4
|
exports.poissionDenoise = `
|
|
5
5
|
varying vec2 vUv;
|
|
6
6
|
|
|
@@ -153,5 +153,5 @@ void main() {
|
|
|
153
153
|
gl_FragColor = vec4(denoised, 1.);
|
|
154
154
|
#endif
|
|
155
155
|
}
|
|
156
|
-
`;
|
|
156
|
+
`;
|
|
157
157
|
//# sourceMappingURL=poissionDenoise.js.map
|
|
@@ -1,15 +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 };
|
|
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
15
|
//# sourceMappingURL=SSAOEffect.d.ts.map
|