viral-viewer-2 3.7.9 → 3.8.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.
@@ -0,0 +1,11 @@
1
+ import { EffectComposer } from "../../threejs-addon/post-processing/effect-composer";
2
+ import { RenderPass } from "../../threejs-addon/post-processing/render-pass";
3
+ import { SAOPass } from "../../threejs-addon/post-processing/sao-pass";
4
+ import { ViralViewerApi } from "../../viral-viewer-api";
5
+ export declare class AmbientOcclusionEffect {
6
+ private viralViewerApi;
7
+ composer: EffectComposer | null;
8
+ renderPass: RenderPass | null;
9
+ saoPass: SAOPass | null;
10
+ constructor(viralViewerApi: ViralViewerApi);
11
+ }
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AmbientOcclusionEffect = void 0;
4
+ const effect_composer_1 = require("../../threejs-addon/post-processing/effect-composer");
5
+ const render_pass_1 = require("../../threejs-addon/post-processing/render-pass");
6
+ const sao_pass_1 = require("../../threejs-addon/post-processing/sao-pass");
7
+ class AmbientOcclusionEffect {
8
+ constructor(viralViewerApi) {
9
+ this.viralViewerApi = viralViewerApi;
10
+ this.composer = null;
11
+ //effect
12
+ this.renderPass = null;
13
+ this.saoPass = null;
14
+ if (this.viralViewerApi.viralScene) {
15
+ this.composer = new effect_composer_1.EffectComposer(this.viralViewerApi.viralRenderer.renderer);
16
+ this.renderPass = new render_pass_1.RenderPass(this.viralViewerApi.viralScene.scene, this.viralViewerApi.viralCamera.camera);
17
+ this.saoPass = new sao_pass_1.SAOPass(this.viralViewerApi.viralScene.scene, this.viralViewerApi.viralCamera.camera);
18
+ this.composer.addPass(this.renderPass);
19
+ this.composer.addPass(this.saoPass);
20
+ }
21
+ }
22
+ }
23
+ exports.AmbientOcclusionEffect = AmbientOcclusionEffect;
24
+ //# sourceMappingURL=ambient-occlusion-effect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ambient-occlusion-effect.js","sourceRoot":"","sources":["../../../src/components/post-processing/ambient-occlusion-effect.ts"],"names":[],"mappings":";;;AAAA,yFAAqF;AACrF,iFAA6E;AAC7E,2EAAuE;AAGvE,MAAa,sBAAsB;IAMjC,YAAoB,cAA8B;QAA9B,mBAAc,GAAd,cAAc,CAAgB;QALlD,aAAQ,GAA0B,IAAI,CAAC;QACvC,QAAQ;QACR,eAAU,GAAsB,IAAI,CAAC;QACrC,YAAO,GAAmB,IAAI,CAAC;QAG7B,IAAI,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE;YAClC,IAAI,CAAC,QAAQ,GAAG,IAAI,gCAAc,CAChC,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,QAAQ,CAC3C,CAAC;YAEF,IAAI,CAAC,UAAU,GAAG,IAAI,wBAAU,CAC9B,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,KAAK,EACpC,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,MAAM,CACvC,CAAC;YAEF,IAAI,CAAC,OAAO,GAAG,IAAI,kBAAO,CACxB,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,KAAK,EACpC,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,MAAM,CACvC,CAAC;YAEF,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACvC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;SACrC;IACH,CAAC;CACF;AA1BD,wDA0BC"}
@@ -21,13 +21,16 @@ class ViralRenderer {
21
21
  this.viralViewerApi.targetElement.appendChild(this.renderer.domElement);
22
22
  }
23
23
  render() {
24
- var _a;
24
+ var _a, _b;
25
25
  if (this.viralViewerApi.viralCamera &&
26
26
  this.viralViewerApi.viralCamera.camera) {
27
27
  //force update without wait for next frame
28
28
  (_a = this.viralViewerApi.viralCamera.camera) === null || _a === void 0 ? void 0 : _a.updateMatrixWorld(true);
29
- this.renderer.render(this.viralViewerApi.viralScene.scene, this.viralViewerApi.viralCamera.camera);
30
- // this.viralViewerApi.outlineEffect.composer?.render();
29
+ // this.renderer.render(
30
+ // this.viralViewerApi.viralScene.scene,
31
+ // this.viralViewerApi.viralCamera.camera
32
+ // );
33
+ (_b = this.viralViewerApi.ambientOcclusionEffect.composer) === null || _b === void 0 ? void 0 : _b.render();
31
34
  if (this.viralViewerApi.viralTools.viralToolMeasure.isActivated) {
32
35
  this.renderer.autoClear = false;
33
36
  this.renderer.clearDepth();
@@ -1 +1 @@
1
- {"version":3,"file":"viral-renderer.js","sourceRoot":"","sources":["../../../src/components/renderer/viral-renderer.ts"],"names":[],"mappings":";;;AAAA,iCAA+D;AAG/D,MAAa,aAAa;IAOxB,YAAmB,cAA8B;QAA9B,mBAAc,GAAd,cAAc,CAAgB;QANjD,aAAQ,GAAkB,IAAI,qBAAa,CAAC;YAC1C,KAAK,EAAE,IAAI;YACX,SAAS,EAAE,IAAI;YACf,sBAAsB,EAAE,IAAI;YAC5B,eAAe,EAAE,kBAAkB;SACpC,CAAC,CAAC;QAED,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;IACM,aAAa;QAClB,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC;QACvC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,GAAG,wBAAgB,CAAC;QAChD,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QACzC,IAAI,CAAC,QAAQ,CAAC,OAAO,CACnB,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,WAAW,EAC7C,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,YAAY,CAC/C,CAAC;QACF,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IAC1E,CAAC;IACM,MAAM;;QACX,IACE,IAAI,CAAC,cAAc,CAAC,WAAW;YAC/B,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,MAAM,EACtC;YACA,0CAA0C;YAC1C,MAAA,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,MAAM,0CAAE,iBAAiB,CAAC,IAAI,CAAC,CAAC;YAChE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAClB,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,KAAK,EACpC,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,MAAM,CACvC,CAAC;YACF,wDAAwD;YACxD,IAAI,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,gBAAgB,CAAC,WAAW,EAAE;gBAC/D,IAAI,CAAC,QAAQ,CAAC,SAAS,GAAG,KAAK,CAAC;gBAChC,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;gBAC3B,IAAI,CAAC,QAAQ,CAAC,MAAM,CAClB,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,gBAAgB,CAAC,qBAAqB,EACrE,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,MAAM,CACvC,CAAC;gBACF,IAAI,CAAC,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC;aAChC;SACF;IACH,CAAC;CACF;AA3CD,sCA2CC"}
1
+ {"version":3,"file":"viral-renderer.js","sourceRoot":"","sources":["../../../src/components/renderer/viral-renderer.ts"],"names":[],"mappings":";;;AAAA,iCAA+D;AAG/D,MAAa,aAAa;IAOxB,YAAmB,cAA8B;QAA9B,mBAAc,GAAd,cAAc,CAAgB;QANjD,aAAQ,GAAkB,IAAI,qBAAa,CAAC;YAC1C,KAAK,EAAE,IAAI;YACX,SAAS,EAAE,IAAI;YACf,sBAAsB,EAAE,IAAI;YAC5B,eAAe,EAAE,kBAAkB;SACpC,CAAC,CAAC;QAED,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;IACM,aAAa;QAClB,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC;QACvC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,GAAG,wBAAgB,CAAC;QAChD,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QACzC,IAAI,CAAC,QAAQ,CAAC,OAAO,CACnB,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,WAAW,EAC7C,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,YAAY,CAC/C,CAAC;QACF,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IAC1E,CAAC;IACM,MAAM;;QACX,IACE,IAAI,CAAC,cAAc,CAAC,WAAW;YAC/B,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,MAAM,EACtC;YACA,0CAA0C;YAC1C,MAAA,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,MAAM,0CAAE,iBAAiB,CAAC,IAAI,CAAC,CAAC;YAChE,wBAAwB;YACxB,0CAA0C;YAC1C,2CAA2C;YAC3C,KAAK;YACL,MAAA,IAAI,CAAC,cAAc,CAAC,sBAAsB,CAAC,QAAQ,0CAAE,MAAM,EAAE,CAAC;YAC9D,IAAI,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,gBAAgB,CAAC,WAAW,EAAE;gBAC/D,IAAI,CAAC,QAAQ,CAAC,SAAS,GAAG,KAAK,CAAC;gBAChC,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;gBAC3B,IAAI,CAAC,QAAQ,CAAC,MAAM,CAClB,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,gBAAgB,CAAC,qBAAqB,EACrE,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,MAAM,CACvC,CAAC;gBACF,IAAI,CAAC,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC;aAChC;SACF;IACH,CAAC;CACF;AA3CD,sCA2CC"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * SAO implementation inspired from bhouston previous SAO work
3
+ */
4
+ export class SAOPass extends Pass {
5
+ constructor(scene: any, camera: any, useDepthTexture?: boolean, useNormals?: boolean, resolution?: Vector2);
6
+ scene: any;
7
+ camera: any;
8
+ supportsDepthTextureExtension: boolean;
9
+ supportsNormalTexture: boolean;
10
+ originalClearColor: Color;
11
+ _oldClearColor: Color;
12
+ oldClearAlpha: number;
13
+ params: {
14
+ output: number;
15
+ saoBias: number;
16
+ saoIntensity: number;
17
+ saoScale: number;
18
+ saoKernelRadius: number;
19
+ saoMinResolution: number;
20
+ saoBlur: boolean;
21
+ saoBlurRadius: number;
22
+ saoBlurStdDev: number;
23
+ saoBlurDepthCutoff: number;
24
+ };
25
+ resolution: Vector2;
26
+ saoRenderTarget: WebGLRenderTarget;
27
+ blurIntermediateRenderTarget: WebGLRenderTarget;
28
+ beautyRenderTarget: WebGLRenderTarget;
29
+ normalRenderTarget: WebGLRenderTarget;
30
+ depthRenderTarget: WebGLRenderTarget;
31
+ depthMaterial: MeshDepthMaterial;
32
+ normalMaterial: MeshNormalMaterial;
33
+ saoMaterial: ShaderMaterial;
34
+ vBlurMaterial: ShaderMaterial;
35
+ hBlurMaterial: ShaderMaterial;
36
+ materialCopy: ShaderMaterial;
37
+ depthCopy: ShaderMaterial;
38
+ fsQuad: FullScreenQuad;
39
+ render(renderer: any, writeBuffer: any, readBuffer: any): void;
40
+ prevStdDev: any;
41
+ prevNumSamples: number | undefined;
42
+ renderPass(renderer: any, passMaterial: any, renderTarget: any, clearColor: any, clearAlpha: any): void;
43
+ renderOverride(renderer: any, overrideMaterial: any, renderTarget: any, clearColor: any, clearAlpha: any): void;
44
+ setSize(width: any, height: any): void;
45
+ }
46
+ export namespace SAOPass {
47
+ namespace OUTPUT {
48
+ const Beauty: number;
49
+ const Default: number;
50
+ const SAO: number;
51
+ const Depth: number;
52
+ const Normal: number;
53
+ }
54
+ }
55
+ import { Pass } from './pass';
56
+ import { Color } from 'three';
57
+ import { Vector2 } from 'three';
58
+ import { WebGLRenderTarget } from 'three';
59
+ import { MeshDepthMaterial } from 'three';
60
+ import { MeshNormalMaterial } from 'three';
61
+ import { ShaderMaterial } from 'three';
62
+ import { FullScreenQuad } from './pass';
@@ -0,0 +1,296 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SAOPass = void 0;
4
+ const three_1 = require("three");
5
+ const pass_1 = require("./pass");
6
+ const SAOShader_js_1 = require("../shaders/SAOShader.js");
7
+ const depth_limited_blur_shader_1 = require("../shaders/depth-limited-blur-shader");
8
+ const depth_limited_blur_shader_2 = require("../shaders/depth-limited-blur-shader");
9
+ const copy_shader_1 = require("../shaders/copy-shader");
10
+ const unpack_depth_rgba_shader_1 = require("../shaders/unpack-depth-rgba-shader");
11
+ /**
12
+ * SAO implementation inspired from bhouston previous SAO work
13
+ */
14
+ class SAOPass extends pass_1.Pass {
15
+ constructor(scene, camera, useDepthTexture = false, useNormals = false, resolution = new three_1.Vector2(256, 256)) {
16
+ super();
17
+ this.scene = scene;
18
+ this.camera = camera;
19
+ this.clear = true;
20
+ this.needsSwap = false;
21
+ this.supportsDepthTextureExtension = useDepthTexture;
22
+ this.supportsNormalTexture = useNormals;
23
+ this.originalClearColor = new three_1.Color();
24
+ this._oldClearColor = new three_1.Color();
25
+ this.oldClearAlpha = 1;
26
+ this.params = {
27
+ output: 0,
28
+ saoBias: 0.5,
29
+ saoIntensity: 0.18,
30
+ saoScale: 1,
31
+ saoKernelRadius: 100,
32
+ saoMinResolution: 0,
33
+ saoBlur: true,
34
+ saoBlurRadius: 8,
35
+ saoBlurStdDev: 4,
36
+ saoBlurDepthCutoff: 0.01
37
+ };
38
+ this.resolution = new three_1.Vector2(resolution.x, resolution.y);
39
+ this.saoRenderTarget = new three_1.WebGLRenderTarget(this.resolution.x, this.resolution.y);
40
+ this.blurIntermediateRenderTarget = this.saoRenderTarget.clone();
41
+ this.beautyRenderTarget = this.saoRenderTarget.clone();
42
+ this.normalRenderTarget = new three_1.WebGLRenderTarget(this.resolution.x, this.resolution.y, {
43
+ minFilter: three_1.NearestFilter,
44
+ magFilter: three_1.NearestFilter
45
+ });
46
+ this.depthRenderTarget = this.normalRenderTarget.clone();
47
+ let depthTexture;
48
+ if (this.supportsDepthTextureExtension) {
49
+ depthTexture = new three_1.DepthTexture();
50
+ depthTexture.type = three_1.UnsignedShortType;
51
+ this.beautyRenderTarget.depthTexture = depthTexture;
52
+ this.beautyRenderTarget.depthBuffer = true;
53
+ }
54
+ this.depthMaterial = new three_1.MeshDepthMaterial();
55
+ this.depthMaterial.depthPacking = three_1.RGBADepthPacking;
56
+ this.depthMaterial.blending = three_1.NoBlending;
57
+ this.normalMaterial = new three_1.MeshNormalMaterial();
58
+ this.normalMaterial.blending = three_1.NoBlending;
59
+ this.saoMaterial = new three_1.ShaderMaterial({
60
+ defines: Object.assign({}, SAOShader_js_1.SAOShader.defines),
61
+ fragmentShader: SAOShader_js_1.SAOShader.fragmentShader,
62
+ vertexShader: SAOShader_js_1.SAOShader.vertexShader,
63
+ uniforms: three_1.UniformsUtils.clone(SAOShader_js_1.SAOShader.uniforms)
64
+ });
65
+ this.saoMaterial.extensions.derivatives = true;
66
+ this.saoMaterial.defines['DEPTH_PACKING'] = this.supportsDepthTextureExtension ? 0 : 1;
67
+ this.saoMaterial.defines['NORMAL_TEXTURE'] = this.supportsNormalTexture ? 1 : 0;
68
+ this.saoMaterial.defines['PERSPECTIVE_CAMERA'] = this.camera.isPerspectiveCamera ? 1 : 0;
69
+ this.saoMaterial.uniforms['tDepth'].value = (this.supportsDepthTextureExtension) ? depthTexture : this.depthRenderTarget.texture;
70
+ this.saoMaterial.uniforms['tNormal'].value = this.normalRenderTarget.texture;
71
+ this.saoMaterial.uniforms['size'].value.set(this.resolution.x, this.resolution.y);
72
+ this.saoMaterial.uniforms['cameraInverseProjectionMatrix'].value.copy(this.camera.projectionMatrixInverse);
73
+ this.saoMaterial.uniforms['cameraProjectionMatrix'].value = this.camera.projectionMatrix;
74
+ this.saoMaterial.blending = three_1.NoBlending;
75
+ this.vBlurMaterial = new three_1.ShaderMaterial({
76
+ uniforms: three_1.UniformsUtils.clone(depth_limited_blur_shader_1.DepthLimitedBlurShader.uniforms),
77
+ defines: Object.assign({}, depth_limited_blur_shader_1.DepthLimitedBlurShader.defines),
78
+ vertexShader: depth_limited_blur_shader_1.DepthLimitedBlurShader.vertexShader,
79
+ fragmentShader: depth_limited_blur_shader_1.DepthLimitedBlurShader.fragmentShader
80
+ });
81
+ this.vBlurMaterial.defines['DEPTH_PACKING'] = this.supportsDepthTextureExtension ? 0 : 1;
82
+ this.vBlurMaterial.defines['PERSPECTIVE_CAMERA'] = this.camera.isPerspectiveCamera ? 1 : 0;
83
+ this.vBlurMaterial.uniforms['tDiffuse'].value = this.saoRenderTarget.texture;
84
+ this.vBlurMaterial.uniforms['tDepth'].value = (this.supportsDepthTextureExtension) ? depthTexture : this.depthRenderTarget.texture;
85
+ this.vBlurMaterial.uniforms['size'].value.set(this.resolution.x, this.resolution.y);
86
+ this.vBlurMaterial.blending = three_1.NoBlending;
87
+ this.hBlurMaterial = new three_1.ShaderMaterial({
88
+ uniforms: three_1.UniformsUtils.clone(depth_limited_blur_shader_1.DepthLimitedBlurShader.uniforms),
89
+ defines: Object.assign({}, depth_limited_blur_shader_1.DepthLimitedBlurShader.defines),
90
+ vertexShader: depth_limited_blur_shader_1.DepthLimitedBlurShader.vertexShader,
91
+ fragmentShader: depth_limited_blur_shader_1.DepthLimitedBlurShader.fragmentShader
92
+ });
93
+ this.hBlurMaterial.defines['DEPTH_PACKING'] = this.supportsDepthTextureExtension ? 0 : 1;
94
+ this.hBlurMaterial.defines['PERSPECTIVE_CAMERA'] = this.camera.isPerspectiveCamera ? 1 : 0;
95
+ this.hBlurMaterial.uniforms['tDiffuse'].value = this.blurIntermediateRenderTarget.texture;
96
+ this.hBlurMaterial.uniforms['tDepth'].value = (this.supportsDepthTextureExtension) ? depthTexture : this.depthRenderTarget.texture;
97
+ this.hBlurMaterial.uniforms['size'].value.set(this.resolution.x, this.resolution.y);
98
+ this.hBlurMaterial.blending = three_1.NoBlending;
99
+ this.materialCopy = new three_1.ShaderMaterial({
100
+ uniforms: three_1.UniformsUtils.clone(copy_shader_1.CopyShader.uniforms),
101
+ vertexShader: copy_shader_1.CopyShader.vertexShader,
102
+ fragmentShader: copy_shader_1.CopyShader.fragmentShader,
103
+ blending: three_1.NoBlending
104
+ });
105
+ this.materialCopy.transparent = true;
106
+ this.materialCopy.depthTest = false;
107
+ this.materialCopy.depthWrite = false;
108
+ this.materialCopy.blending = three_1.CustomBlending;
109
+ this.materialCopy.blendSrc = three_1.DstColorFactor;
110
+ this.materialCopy.blendDst = three_1.ZeroFactor;
111
+ this.materialCopy.blendEquation = three_1.AddEquation;
112
+ this.materialCopy.blendSrcAlpha = three_1.DstAlphaFactor;
113
+ this.materialCopy.blendDstAlpha = three_1.ZeroFactor;
114
+ this.materialCopy.blendEquationAlpha = three_1.AddEquation;
115
+ this.depthCopy = new three_1.ShaderMaterial({
116
+ uniforms: three_1.UniformsUtils.clone(unpack_depth_rgba_shader_1.UnpackDepthRGBAShader.uniforms),
117
+ vertexShader: unpack_depth_rgba_shader_1.UnpackDepthRGBAShader.vertexShader,
118
+ fragmentShader: unpack_depth_rgba_shader_1.UnpackDepthRGBAShader.fragmentShader,
119
+ blending: three_1.NoBlending
120
+ });
121
+ this.fsQuad = new pass_1.FullScreenQuad(null);
122
+ }
123
+ render(renderer, writeBuffer, readBuffer /*, deltaTime, maskActive*/) {
124
+ // Rendering readBuffer first when rendering to screen
125
+ if (this.renderToScreen) {
126
+ this.materialCopy.blending = three_1.NoBlending;
127
+ this.materialCopy.uniforms['tDiffuse'].value = readBuffer.texture;
128
+ this.materialCopy.needsUpdate = true;
129
+ this.renderPass(renderer, this.materialCopy, null);
130
+ }
131
+ if (this.params.output === 1) {
132
+ return;
133
+ }
134
+ renderer.getClearColor(this._oldClearColor);
135
+ this.oldClearAlpha = renderer.getClearAlpha();
136
+ const oldAutoClear = renderer.autoClear;
137
+ renderer.autoClear = false;
138
+ renderer.setRenderTarget(this.depthRenderTarget);
139
+ renderer.clear();
140
+ this.saoMaterial.uniforms['bias'].value = this.params.saoBias;
141
+ this.saoMaterial.uniforms['intensity'].value = this.params.saoIntensity;
142
+ this.saoMaterial.uniforms['scale'].value = this.params.saoScale;
143
+ this.saoMaterial.uniforms['kernelRadius'].value = this.params.saoKernelRadius;
144
+ this.saoMaterial.uniforms['minResolution'].value = this.params.saoMinResolution;
145
+ this.saoMaterial.uniforms['cameraNear'].value = this.camera.near;
146
+ this.saoMaterial.uniforms['cameraFar'].value = this.camera.far;
147
+ // this.saoMaterial.uniforms['randomSeed'].value = Math.random();
148
+ const depthCutoff = this.params.saoBlurDepthCutoff * (this.camera.far - this.camera.near);
149
+ this.vBlurMaterial.uniforms['depthCutoff'].value = depthCutoff;
150
+ this.hBlurMaterial.uniforms['depthCutoff'].value = depthCutoff;
151
+ this.vBlurMaterial.uniforms['cameraNear'].value = this.camera.near;
152
+ this.vBlurMaterial.uniforms['cameraFar'].value = this.camera.far;
153
+ this.hBlurMaterial.uniforms['cameraNear'].value = this.camera.near;
154
+ this.hBlurMaterial.uniforms['cameraFar'].value = this.camera.far;
155
+ this.params.saoBlurRadius = Math.floor(this.params.saoBlurRadius);
156
+ if ((this.prevStdDev !== this.params.saoBlurStdDev) || (this.prevNumSamples !== this.params.saoBlurRadius)) {
157
+ depth_limited_blur_shader_2.BlurShaderUtils.configure(this.vBlurMaterial, this.params.saoBlurRadius, this.params.saoBlurStdDev, new three_1.Vector2(0, 1));
158
+ depth_limited_blur_shader_2.BlurShaderUtils.configure(this.hBlurMaterial, this.params.saoBlurRadius, this.params.saoBlurStdDev, new three_1.Vector2(1, 0));
159
+ this.prevStdDev = this.params.saoBlurStdDev;
160
+ this.prevNumSamples = this.params.saoBlurRadius;
161
+ }
162
+ // Rendering scene to depth texture
163
+ renderer.setClearColor(0x000000);
164
+ renderer.setRenderTarget(this.beautyRenderTarget);
165
+ renderer.clear();
166
+ renderer.render(this.scene, this.camera);
167
+ // Re-render scene if depth texture extension is not supported
168
+ if (!this.supportsDepthTextureExtension) {
169
+ // Clear rule : far clipping plane in both RGBA and Basic encoding
170
+ this.renderOverride(renderer, this.depthMaterial, this.depthRenderTarget, 0x000000, 1.0);
171
+ }
172
+ if (this.supportsNormalTexture) {
173
+ // Clear rule : default normal is facing the camera
174
+ this.renderOverride(renderer, this.normalMaterial, this.normalRenderTarget, 0x7777ff, 1.0);
175
+ }
176
+ // Rendering SAO texture
177
+ this.renderPass(renderer, this.saoMaterial, this.saoRenderTarget, 0xffffff, 1.0);
178
+ // Blurring SAO texture
179
+ if (this.params.saoBlur) {
180
+ this.renderPass(renderer, this.vBlurMaterial, this.blurIntermediateRenderTarget, 0xffffff, 1.0);
181
+ this.renderPass(renderer, this.hBlurMaterial, this.saoRenderTarget, 0xffffff, 1.0);
182
+ }
183
+ let outputMaterial = this.materialCopy;
184
+ // Setting up SAO rendering
185
+ if (this.params.output === 3) {
186
+ if (this.supportsDepthTextureExtension) {
187
+ this.materialCopy.uniforms['tDiffuse'].value = this.beautyRenderTarget.depthTexture;
188
+ this.materialCopy.needsUpdate = true;
189
+ }
190
+ else {
191
+ this.depthCopy.uniforms['tDiffuse'].value = this.depthRenderTarget.texture;
192
+ this.depthCopy.needsUpdate = true;
193
+ outputMaterial = this.depthCopy;
194
+ }
195
+ }
196
+ else if (this.params.output === 4) {
197
+ this.materialCopy.uniforms['tDiffuse'].value = this.normalRenderTarget.texture;
198
+ this.materialCopy.needsUpdate = true;
199
+ }
200
+ else {
201
+ this.materialCopy.uniforms['tDiffuse'].value = this.saoRenderTarget.texture;
202
+ this.materialCopy.needsUpdate = true;
203
+ }
204
+ // Blending depends on output, only want a CustomBlending when showing SAO
205
+ if (this.params.output === 0) {
206
+ outputMaterial.blending = three_1.CustomBlending;
207
+ }
208
+ else {
209
+ outputMaterial.blending = three_1.NoBlending;
210
+ }
211
+ // Rendering SAOPass result on top of previous pass
212
+ this.renderPass(renderer, outputMaterial, this.renderToScreen ? null : readBuffer);
213
+ renderer.setClearColor(this._oldClearColor, this.oldClearAlpha);
214
+ renderer.autoClear = oldAutoClear;
215
+ }
216
+ renderPass(renderer, passMaterial, renderTarget, clearColor, clearAlpha) {
217
+ // save original state
218
+ renderer.getClearColor(this.originalClearColor);
219
+ const originalClearAlpha = renderer.getClearAlpha();
220
+ const originalAutoClear = renderer.autoClear;
221
+ renderer.setRenderTarget(renderTarget);
222
+ // setup pass state
223
+ renderer.autoClear = false;
224
+ if ((clearColor !== undefined) && (clearColor !== null)) {
225
+ renderer.setClearColor(clearColor);
226
+ renderer.setClearAlpha(clearAlpha || 0.0);
227
+ renderer.clear();
228
+ }
229
+ this.fsQuad.material = passMaterial;
230
+ this.fsQuad.render(renderer);
231
+ // restore original state
232
+ renderer.autoClear = originalAutoClear;
233
+ renderer.setClearColor(this.originalClearColor);
234
+ renderer.setClearAlpha(originalClearAlpha);
235
+ }
236
+ renderOverride(renderer, overrideMaterial, renderTarget, clearColor, clearAlpha) {
237
+ renderer.getClearColor(this.originalClearColor);
238
+ const originalClearAlpha = renderer.getClearAlpha();
239
+ const originalAutoClear = renderer.autoClear;
240
+ renderer.setRenderTarget(renderTarget);
241
+ renderer.autoClear = false;
242
+ clearColor = overrideMaterial.clearColor || clearColor;
243
+ clearAlpha = overrideMaterial.clearAlpha || clearAlpha;
244
+ if ((clearColor !== undefined) && (clearColor !== null)) {
245
+ renderer.setClearColor(clearColor);
246
+ renderer.setClearAlpha(clearAlpha || 0.0);
247
+ renderer.clear();
248
+ }
249
+ this.scene.overrideMaterial = overrideMaterial;
250
+ renderer.render(this.scene, this.camera);
251
+ this.scene.overrideMaterial = null;
252
+ // restore original state
253
+ renderer.autoClear = originalAutoClear;
254
+ renderer.setClearColor(this.originalClearColor);
255
+ renderer.setClearAlpha(originalClearAlpha);
256
+ }
257
+ setSize(width, height) {
258
+ this.beautyRenderTarget.setSize(width, height);
259
+ this.saoRenderTarget.setSize(width, height);
260
+ this.blurIntermediateRenderTarget.setSize(width, height);
261
+ this.normalRenderTarget.setSize(width, height);
262
+ this.depthRenderTarget.setSize(width, height);
263
+ this.saoMaterial.uniforms['size'].value.set(width, height);
264
+ this.saoMaterial.uniforms['cameraInverseProjectionMatrix'].value.copy(this.camera.projectionMatrixInverse);
265
+ this.saoMaterial.uniforms['cameraProjectionMatrix'].value = this.camera.projectionMatrix;
266
+ this.saoMaterial.needsUpdate = true;
267
+ this.vBlurMaterial.uniforms['size'].value.set(width, height);
268
+ this.vBlurMaterial.needsUpdate = true;
269
+ this.hBlurMaterial.uniforms['size'].value.set(width, height);
270
+ this.hBlurMaterial.needsUpdate = true;
271
+ }
272
+ dispose() {
273
+ this.saoRenderTarget.dispose();
274
+ this.blurIntermediateRenderTarget.dispose();
275
+ this.beautyRenderTarget.dispose();
276
+ this.normalRenderTarget.dispose();
277
+ this.depthRenderTarget.dispose();
278
+ this.depthMaterial.dispose();
279
+ this.normalMaterial.dispose();
280
+ this.saoMaterial.dispose();
281
+ this.vBlurMaterial.dispose();
282
+ this.hBlurMaterial.dispose();
283
+ this.materialCopy.dispose();
284
+ this.depthCopy.dispose();
285
+ this.fsQuad.dispose();
286
+ }
287
+ }
288
+ exports.SAOPass = SAOPass;
289
+ SAOPass.OUTPUT = {
290
+ 'Beauty': 1,
291
+ 'Default': 0,
292
+ 'SAO': 2,
293
+ 'Depth': 3,
294
+ 'Normal': 4
295
+ };
296
+ //# sourceMappingURL=sao-pass.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sao-pass.js","sourceRoot":"","sources":["../../../src/threejs-addon/post-processing/sao-pass.js"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ export namespace DepthLimitedBlurShader {
2
+ namespace defines {
3
+ const KERNEL_RADIUS: number;
4
+ const DEPTH_PACKING: number;
5
+ const PERSPECTIVE_CAMERA: number;
6
+ }
7
+ namespace uniforms {
8
+ namespace tDiffuse {
9
+ const value: null;
10
+ }
11
+ namespace size {
12
+ const value_1: Vector2;
13
+ export { value_1 as value };
14
+ }
15
+ namespace sampleUvOffsets {
16
+ const value_2: Vector2[];
17
+ export { value_2 as value };
18
+ }
19
+ namespace sampleWeights {
20
+ const value_3: number[];
21
+ export { value_3 as value };
22
+ }
23
+ namespace tDepth {
24
+ const value_4: null;
25
+ export { value_4 as value };
26
+ }
27
+ namespace cameraNear {
28
+ const value_5: number;
29
+ export { value_5 as value };
30
+ }
31
+ namespace cameraFar {
32
+ const value_6: number;
33
+ export { value_6 as value };
34
+ }
35
+ namespace depthCutoff {
36
+ const value_7: number;
37
+ export { value_7 as value };
38
+ }
39
+ }
40
+ const vertexShader: string;
41
+ const fragmentShader: string;
42
+ }
43
+ export namespace BlurShaderUtils {
44
+ function createSampleWeights(kernelRadius: any, stdDev: any): number[];
45
+ function createSampleOffsets(kernelRadius: any, uvIncrement: any): any[];
46
+ function configure(material: any, kernelRadius: any, stdDev: any, uvIncrement: any): void;
47
+ }
48
+ import { Vector2 } from 'three';
@@ -0,0 +1,142 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BlurShaderUtils = exports.DepthLimitedBlurShader = void 0;
4
+ const three_1 = require("three");
5
+ /**
6
+ * TODO
7
+ */
8
+ const DepthLimitedBlurShader = {
9
+ defines: {
10
+ 'KERNEL_RADIUS': 4,
11
+ 'DEPTH_PACKING': 1,
12
+ 'PERSPECTIVE_CAMERA': 1
13
+ },
14
+ uniforms: {
15
+ 'tDiffuse': { value: null },
16
+ 'size': { value: new three_1.Vector2(512, 512) },
17
+ 'sampleUvOffsets': { value: [new three_1.Vector2(0, 0)] },
18
+ 'sampleWeights': { value: [1.0] },
19
+ 'tDepth': { value: null },
20
+ 'cameraNear': { value: 10 },
21
+ 'cameraFar': { value: 1000 },
22
+ 'depthCutoff': { value: 10 },
23
+ },
24
+ vertexShader: /* glsl */ `
25
+
26
+ #include <common>
27
+
28
+ uniform vec2 size;
29
+
30
+ varying vec2 vUv;
31
+ varying vec2 vInvSize;
32
+
33
+ void main() {
34
+ vUv = uv;
35
+ vInvSize = 1.0 / size;
36
+
37
+ gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
38
+ }`,
39
+ fragmentShader: /* glsl */ `
40
+
41
+ #include <common>
42
+ #include <packing>
43
+
44
+ uniform sampler2D tDiffuse;
45
+ uniform sampler2D tDepth;
46
+
47
+ uniform float cameraNear;
48
+ uniform float cameraFar;
49
+ uniform float depthCutoff;
50
+
51
+ uniform vec2 sampleUvOffsets[ KERNEL_RADIUS + 1 ];
52
+ uniform float sampleWeights[ KERNEL_RADIUS + 1 ];
53
+
54
+ varying vec2 vUv;
55
+ varying vec2 vInvSize;
56
+
57
+ float getDepth( const in vec2 screenPosition ) {
58
+ #if DEPTH_PACKING == 1
59
+ return unpackRGBAToDepth( texture2D( tDepth, screenPosition ) );
60
+ #else
61
+ return texture2D( tDepth, screenPosition ).x;
62
+ #endif
63
+ }
64
+
65
+ float getViewZ( const in float depth ) {
66
+ #if PERSPECTIVE_CAMERA == 1
67
+ return perspectiveDepthToViewZ( depth, cameraNear, cameraFar );
68
+ #else
69
+ return orthographicDepthToViewZ( depth, cameraNear, cameraFar );
70
+ #endif
71
+ }
72
+
73
+ void main() {
74
+ float depth = getDepth( vUv );
75
+ if( depth >= ( 1.0 - EPSILON ) ) {
76
+ discard;
77
+ }
78
+
79
+ float centerViewZ = -getViewZ( depth );
80
+ bool rBreak = false, lBreak = false;
81
+
82
+ float weightSum = sampleWeights[0];
83
+ vec4 diffuseSum = texture2D( tDiffuse, vUv ) * weightSum;
84
+
85
+ for( int i = 1; i <= KERNEL_RADIUS; i ++ ) {
86
+
87
+ float sampleWeight = sampleWeights[i];
88
+ vec2 sampleUvOffset = sampleUvOffsets[i] * vInvSize;
89
+
90
+ vec2 sampleUv = vUv + sampleUvOffset;
91
+ float viewZ = -getViewZ( getDepth( sampleUv ) );
92
+
93
+ if( abs( viewZ - centerViewZ ) > depthCutoff ) rBreak = true;
94
+
95
+ if( ! rBreak ) {
96
+ diffuseSum += texture2D( tDiffuse, sampleUv ) * sampleWeight;
97
+ weightSum += sampleWeight;
98
+ }
99
+
100
+ sampleUv = vUv - sampleUvOffset;
101
+ viewZ = -getViewZ( getDepth( sampleUv ) );
102
+
103
+ if( abs( viewZ - centerViewZ ) > depthCutoff ) lBreak = true;
104
+
105
+ if( ! lBreak ) {
106
+ diffuseSum += texture2D( tDiffuse, sampleUv ) * sampleWeight;
107
+ weightSum += sampleWeight;
108
+ }
109
+
110
+ }
111
+
112
+ gl_FragColor = diffuseSum / weightSum;
113
+ }`
114
+ };
115
+ exports.DepthLimitedBlurShader = DepthLimitedBlurShader;
116
+ const BlurShaderUtils = {
117
+ createSampleWeights: function (kernelRadius, stdDev) {
118
+ const weights = [];
119
+ for (let i = 0; i <= kernelRadius; i++) {
120
+ weights.push(gaussian(i, stdDev));
121
+ }
122
+ return weights;
123
+ },
124
+ createSampleOffsets: function (kernelRadius, uvIncrement) {
125
+ const offsets = [];
126
+ for (let i = 0; i <= kernelRadius; i++) {
127
+ offsets.push(uvIncrement.clone().multiplyScalar(i));
128
+ }
129
+ return offsets;
130
+ },
131
+ configure: function (material, kernelRadius, stdDev, uvIncrement) {
132
+ material.defines['KERNEL_RADIUS'] = kernelRadius;
133
+ material.uniforms['sampleUvOffsets'].value = BlurShaderUtils.createSampleOffsets(kernelRadius, uvIncrement);
134
+ material.uniforms['sampleWeights'].value = BlurShaderUtils.createSampleWeights(kernelRadius, stdDev);
135
+ material.needsUpdate = true;
136
+ }
137
+ };
138
+ exports.BlurShaderUtils = BlurShaderUtils;
139
+ function gaussian(x, stdDev) {
140
+ return Math.exp(-(x * x) / (2.0 * (stdDev * stdDev))) / (Math.sqrt(2.0 * Math.PI) * stdDev);
141
+ }
142
+ //# sourceMappingURL=depth-limited-blur-shader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"depth-limited-blur-shader.js","sourceRoot":"","sources":["../../../src/threejs-addon/shaders/depth-limited-blur-shader.js"],"names":[],"mappings":";;;AAAA,iCAEe;AAEf;;GAEG;AAEH,MAAM,sBAAsB,GAAG;IAC3B,OAAO,EAAE;QACL,eAAe,EAAE,CAAC;QAClB,eAAe,EAAE,CAAC;QAClB,oBAAoB,EAAE,CAAC;KAC1B;IACD,QAAQ,EAAE;QACN,UAAU,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE;QAC3B,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,eAAO,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE;QACxC,iBAAiB,EAAE,EAAE,KAAK,EAAE,CAAC,IAAI,eAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;QACjD,eAAe,EAAE,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE;QACjC,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE;QACzB,YAAY,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;QAC3B,WAAW,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE;QAC5B,aAAa,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;KAC/B;IACD,YAAY,EAAE,UAAU,CAAC;;;;;;;;;;;;;;IAczB;IAEA,cAAc,EAAE,UAAU,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA0E3B;CAEH,CAAC;AAiDO,wDAAsB;AA/C/B,MAAM,eAAe,GAAG;IAEpB,mBAAmB,EAAE,UAAS,YAAY,EAAE,MAAM;QAE9C,MAAM,OAAO,GAAG,EAAE,CAAC;QAEnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,YAAY,EAAE,CAAC,EAAE,EAAE;YAEpC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;SAErC;QAED,OAAO,OAAO,CAAC;IAEnB,CAAC;IAED,mBAAmB,EAAE,UAAS,YAAY,EAAE,WAAW;QAEnD,MAAM,OAAO,GAAG,EAAE,CAAC;QAEnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,YAAY,EAAE,CAAC,EAAE,EAAE;YAEpC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;SAEvD;QAED,OAAO,OAAO,CAAC;IAEnB,CAAC;IAED,SAAS,EAAE,UAAS,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,WAAW;QAE3D,QAAQ,CAAC,OAAO,CAAC,eAAe,CAAC,GAAG,YAAY,CAAC;QACjD,QAAQ,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,KAAK,GAAG,eAAe,CAAC,mBAAmB,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;QAC5G,QAAQ,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,KAAK,GAAG,eAAe,CAAC,mBAAmB,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;QACrG,QAAQ,CAAC,WAAW,GAAG,IAAI,CAAC;IAEhC,CAAC;CAEJ,CAAC;AAQ+B,0CAAe;AANhD,SAAS,QAAQ,CAAC,CAAC,EAAE,MAAM;IAEvB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC;AAEhG,CAAC"}
@@ -0,0 +1,13 @@
1
+ export namespace UnpackDepthRGBAShader {
2
+ namespace uniforms {
3
+ namespace tDiffuse {
4
+ const value: null;
5
+ }
6
+ namespace opacity {
7
+ const value_1: number;
8
+ export { value_1 as value };
9
+ }
10
+ }
11
+ const vertexShader: string;
12
+ const fragmentShader: string;
13
+ }
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ /**
3
+ * Unpack RGBA depth shader
4
+ * - show RGBA encoded depth as monochrome color
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.UnpackDepthRGBAShader = void 0;
8
+ const UnpackDepthRGBAShader = {
9
+ uniforms: {
10
+ 'tDiffuse': { value: null },
11
+ 'opacity': { value: 1.0 }
12
+ },
13
+ vertexShader: /* glsl */ `
14
+
15
+ varying vec2 vUv;
16
+
17
+ void main() {
18
+
19
+ vUv = uv;
20
+ gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
21
+
22
+ }`,
23
+ fragmentShader: /* glsl */ `
24
+
25
+ uniform float opacity;
26
+
27
+ uniform sampler2D tDiffuse;
28
+
29
+ varying vec2 vUv;
30
+
31
+ #include <packing>
32
+
33
+ void main() {
34
+
35
+ float depth = 1.0 - unpackRGBAToDepth( texture2D( tDiffuse, vUv ) );
36
+ gl_FragColor = vec4( vec3( depth ), opacity );
37
+
38
+ }`
39
+ };
40
+ exports.UnpackDepthRGBAShader = UnpackDepthRGBAShader;
41
+ //# sourceMappingURL=unpack-depth-rgba-shader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unpack-depth-rgba-shader.js","sourceRoot":"","sources":["../../../src/threejs-addon/shaders/unpack-depth-rgba-shader.js"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,MAAM,qBAAqB,GAAG;IAE1B,QAAQ,EAAE;QAEN,UAAU,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE;QAC3B,SAAS,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE;KAE5B;IAED,YAAY,EAAE,UAAU,CAAC;;;;;;;;;IASzB;IAEA,cAAc,EAAE,UAAU,CAAC;;;;;;;;;;;;;;;IAe3B;CAEH,CAAC;AAEO,sDAAqB"}
@@ -16,6 +16,7 @@ import { ViralCentralizedEventHandler } from "./components/centralized-event-han
16
16
  import { ViralLoader } from "./components/loader/viral.loader";
17
17
  import { ViralStats } from "./components/stats/viral-stats";
18
18
  import { ViralBVH } from "./components/bvh/viral-bvh";
19
+ import { AmbientOcclusionEffect } from "./components/post-processing/ambient-occlusion-effect";
19
20
  export declare class ViralViewerApi {
20
21
  options: ViewerOptions;
21
22
  targetElement: HTMLElement;
@@ -33,6 +34,7 @@ export declare class ViralViewerApi {
33
34
  viralLoader: ViralLoader;
34
35
  viralCompressProcessor: ViralCompressProcessor;
35
36
  viralBVH: ViralBVH;
37
+ ambientOcclusionEffect: AmbientOcclusionEffect;
36
38
  worker3: ViralViewerWorker3;
37
39
  localStorageService: LocalStorageService;
38
40
  viralStats: ViralStats | null;
@@ -18,6 +18,7 @@ const viral_centralized_event_handler_1 = require("./components/centralized-even
18
18
  const viral_loader_1 = require("./components/loader/viral.loader");
19
19
  const viral_stats_1 = require("./components/stats/viral-stats");
20
20
  const viral_bvh_1 = require("./components/bvh/viral-bvh");
21
+ const ambient_occlusion_effect_1 = require("./components/post-processing/ambient-occlusion-effect");
21
22
  class ViralViewerApi {
22
23
  constructor(options = {
23
24
  isDev: false,
@@ -43,6 +44,7 @@ class ViralViewerApi {
43
44
  this.viralCentralizedEventHandler = new viral_centralized_event_handler_1.ViralCentralizedEventHandler(this);
44
45
  this.viralLoader = new viral_loader_1.ViralLoader(this);
45
46
  this.viralBVH = new viral_bvh_1.ViralBVH();
47
+ this.ambientOcclusionEffect = new ambient_occlusion_effect_1.AmbientOcclusionEffect(this);
46
48
  this.worker3 = new viral_viewer_3_worker_1.ViralViewerWorker3(this);
47
49
  if (this.options.isDev) {
48
50
  this.viralStats = new viral_stats_1.ViralStats(this);
@@ -1 +1 @@
1
- {"version":3,"file":"viral-viewer-api.js","sourceRoot":"","sources":["../src/viral-viewer-api.ts"],"names":[],"mappings":";;;AACA,6FAAwF;AACxF,mEAA+D;AAC/D,gEAA4D;AAC5D,gEAA4D;AAC5D,yEAAqE;AACrE,8FAAyF;AACzF,4EAAwE;AACxE,gEAA4D;AAC5D,sEAAkE;AAClE,4EAAuE;AACvE,yEAAqE;AACrE,qFAA+E;AAC/E,qFAAgF;AAChF,4HAAsH;AACtH,mEAA+D;AAC/D,gEAA4D;AAC5D,0DAAsD;AAEtD,MAAa,cAAc;IAoBzB,YACE,UAAyB;QACvB,KAAK,EAAE,KAAK;QACZ,SAAS,EAAE,KAAK;QAChB,cAAc,EAAE,CAAC;QACjB,SAAS,EAAE,IAAI,WAAW,EAAE;KAC7B;QAXH,2BAAsB,GAA2B,IAAI,iDAAsB,EAAE,CAAC;QAG9E,wBAAmB,GAAwB,IAAI,2CAAmB,EAAE,CAAC;QACrE,eAAU,GAAsB,IAAI,CAAC;QASnC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,SAAS,CAAC;QACvC,IAAI,CAAC,mBAAmB,GAAG,IAAI,2CAAmB,CAAC,IAAI,CAAC,CAAC;QACzD,IAAI,CAAC,UAAU,GAAG,IAAI,wBAAU,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,CAAC,YAAY,GAAG,IAAI,4BAAY,CAAC,IAAI,CAAC,CAAC;QAC3C,IAAI,CAAC,gBAAgB,GAAG,IAAI,qCAAgB,CAAC,IAAI,CAAC,CAAC;QACnD,IAAI,CAAC,UAAU,GAAG,IAAI,wBAAU,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,CAAC,aAAa,GAAG,IAAI,8BAAa,CAAC,IAAI,CAAC,CAAC;QAC7C,IAAI,CAAC,WAAW,GAAG,IAAI,0BAAW,CAAC,IAAI,CAAC,CAAC;QACzC,IAAI,CAAC,UAAU,GAAG,IAAI,wBAAU,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,CAAC,aAAa,GAAG,IAAI,8BAAa,CAAC,IAAI,CAAC,CAAC;QAC7C,IAAI,CAAC,cAAc,GAAG,IAAI,gCAAc,CAAC,IAAI,CAAC,CAAC;QAC/C,IAAI,CAAC,4BAA4B,GAAG,IAAI,8DAA4B,CAAC,IAAI,CAAC,CAAC;QAC3E,IAAI,CAAC,WAAW,GAAG,IAAI,0BAAW,CAAC,IAAI,CAAC,CAAC;QACzC,IAAI,CAAC,QAAQ,GAAG,IAAI,oBAAQ,EAAE,CAAC;QAC/B,IAAI,CAAC,OAAO,GAAG,IAAI,0CAAkB,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;YACtB,IAAI,CAAC,UAAU,GAAG,IAAI,wBAAU,CAAC,IAAI,CAAC,CAAC;SACxC;QACD,IAAI,CAAC,OAAO,CAAC,KAAK;YAChB,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE;YACpC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,CAAC;IACtC,CAAC;CACF;AAnDD,wCAmDC"}
1
+ {"version":3,"file":"viral-viewer-api.js","sourceRoot":"","sources":["../src/viral-viewer-api.ts"],"names":[],"mappings":";;;AACA,6FAAwF;AACxF,mEAA+D;AAC/D,gEAA4D;AAC5D,gEAA4D;AAC5D,yEAAqE;AACrE,8FAAyF;AACzF,4EAAwE;AACxE,gEAA4D;AAC5D,sEAAkE;AAClE,4EAAuE;AACvE,yEAAqE;AACrE,qFAA+E;AAC/E,qFAAgF;AAChF,4HAAsH;AACtH,mEAA+D;AAC/D,gEAA4D;AAC5D,0DAAsD;AACtD,oGAA+F;AAE/F,MAAa,cAAc;IAqBzB,YACE,UAAyB;QACvB,KAAK,EAAE,KAAK;QACZ,SAAS,EAAE,KAAK;QAChB,cAAc,EAAE,CAAC;QACjB,SAAS,EAAE,IAAI,WAAW,EAAE;KAC7B;QAZH,2BAAsB,GAA2B,IAAI,iDAAsB,EAAE,CAAC;QAI9E,wBAAmB,GAAwB,IAAI,2CAAmB,EAAE,CAAC;QACrE,eAAU,GAAsB,IAAI,CAAC;QASnC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,SAAS,CAAC;QACvC,IAAI,CAAC,mBAAmB,GAAG,IAAI,2CAAmB,CAAC,IAAI,CAAC,CAAC;QACzD,IAAI,CAAC,UAAU,GAAG,IAAI,wBAAU,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,CAAC,YAAY,GAAG,IAAI,4BAAY,CAAC,IAAI,CAAC,CAAC;QAC3C,IAAI,CAAC,gBAAgB,GAAG,IAAI,qCAAgB,CAAC,IAAI,CAAC,CAAC;QACnD,IAAI,CAAC,UAAU,GAAG,IAAI,wBAAU,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,CAAC,aAAa,GAAG,IAAI,8BAAa,CAAC,IAAI,CAAC,CAAC;QAC7C,IAAI,CAAC,WAAW,GAAG,IAAI,0BAAW,CAAC,IAAI,CAAC,CAAC;QACzC,IAAI,CAAC,UAAU,GAAG,IAAI,wBAAU,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,CAAC,aAAa,GAAG,IAAI,8BAAa,CAAC,IAAI,CAAC,CAAC;QAC7C,IAAI,CAAC,cAAc,GAAG,IAAI,gCAAc,CAAC,IAAI,CAAC,CAAC;QAC/C,IAAI,CAAC,4BAA4B,GAAG,IAAI,8DAA4B,CAAC,IAAI,CAAC,CAAC;QAC3E,IAAI,CAAC,WAAW,GAAG,IAAI,0BAAW,CAAC,IAAI,CAAC,CAAC;QACzC,IAAI,CAAC,QAAQ,GAAG,IAAI,oBAAQ,EAAE,CAAC;QAC/B,IAAI,CAAC,sBAAsB,GAAG,IAAI,iDAAsB,CAAC,IAAI,CAAC,CAAA;QAC9D,IAAI,CAAC,OAAO,GAAG,IAAI,0CAAkB,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;YACtB,IAAI,CAAC,UAAU,GAAG,IAAI,wBAAU,CAAC,IAAI,CAAC,CAAC;SACxC;QACD,IAAI,CAAC,OAAO,CAAC,KAAK;YAChB,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE;YACpC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,CAAC;IACtC,CAAC;CACF;AArDD,wCAqDC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "viral-viewer-2",
3
- "version": "3.7.9",
3
+ "version": "3.8.0",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",