@shapediver/viewer.rendering-engine.rendering-engine-threejs 3.6.0 → 3.7.1

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.
Files changed (56) hide show
  1. package/LICENSE +2 -2
  2. package/dist/RenderingEngine.d.ts +1 -0
  3. package/dist/RenderingEngine.d.ts.map +1 -1
  4. package/dist/RenderingEngine.js +8 -4
  5. package/dist/RenderingEngine.js.map +1 -1
  6. package/dist/injectors/Tag3dGeometryCreationInjector.d.ts.map +1 -1
  7. package/dist/injectors/Tag3dGeometryCreationInjector.js +32 -18
  8. package/dist/injectors/Tag3dGeometryCreationInjector.js.map +1 -1
  9. package/dist/loaders/EnvironmentMapLoader.js +1 -1
  10. package/dist/loaders/EnvironmentMapLoader.js.map +1 -1
  11. package/dist/loaders/LightLoader.js +7 -7
  12. package/dist/loaders/LightLoader.js.map +1 -1
  13. package/dist/loaders/MaterialLoader.d.ts +1 -1
  14. package/dist/managers/EnvironmentGeometryManager.js +2 -2
  15. package/dist/managers/EnvironmentGeometryManager.js.map +1 -1
  16. package/dist/managers/PostProcessingManager.d.ts +4 -1
  17. package/dist/managers/PostProcessingManager.d.ts.map +1 -1
  18. package/dist/managers/PostProcessingManager.js +22 -6
  19. package/dist/managers/PostProcessingManager.js.map +1 -1
  20. package/dist/managers/RenderingManager.d.ts.map +1 -1
  21. package/dist/managers/RenderingManager.js +0 -1
  22. package/dist/managers/RenderingManager.js.map +1 -1
  23. package/dist/managers/postprocessing/ao/ao/shader/ao_compose.d.ts +1 -1
  24. package/dist/managers/postprocessing/ao/ao/shader/ao_compose.d.ts.map +1 -1
  25. package/dist/managers/postprocessing/ao/ao/shader/ao_compose.js +2 -2
  26. package/dist/managers/postprocessing/ao/ao/shader/ao_compose.js.map +1 -1
  27. package/dist/managers/postprocessing/ao/ao/shader/ao_utils.d.ts +2 -0
  28. package/dist/managers/postprocessing/ao/ao/shader/ao_utils.d.ts.map +1 -0
  29. package/dist/managers/postprocessing/ao/ao/shader/ao_utils.js +86 -0
  30. package/dist/managers/postprocessing/ao/ao/shader/ao_utils.js.map +1 -0
  31. package/dist/managers/postprocessing/ao/hbao/HBAOEffect.js +2 -2
  32. package/dist/managers/postprocessing/ao/hbao/HBAOEffect.js.map +1 -1
  33. package/dist/managers/postprocessing/ao/hbao/shader/hbao.d.ts +1 -1
  34. package/dist/managers/postprocessing/ao/hbao/shader/hbao.d.ts.map +1 -1
  35. package/dist/managers/postprocessing/ao/hbao/shader/hbao.js +100 -43
  36. package/dist/managers/postprocessing/ao/hbao/shader/hbao.js.map +1 -1
  37. package/dist/managers/postprocessing/ao/poissionDenoise/PoissionDenoisePass.d.ts +1 -1
  38. package/dist/managers/postprocessing/ao/poissionDenoise/PoissionDenoisePass.d.ts.map +1 -1
  39. package/dist/managers/postprocessing/ao/poissionDenoise/PoissionDenoisePass.js +6 -4
  40. package/dist/managers/postprocessing/ao/poissionDenoise/PoissionDenoisePass.js.map +1 -1
  41. package/dist/managers/postprocessing/ao/poissionDenoise/shader/poissionDenoise.d.ts +1 -1
  42. package/dist/managers/postprocessing/ao/poissionDenoise/shader/poissionDenoise.d.ts.map +1 -1
  43. package/dist/managers/postprocessing/ao/poissionDenoise/shader/poissionDenoise.js +67 -41
  44. package/dist/managers/postprocessing/ao/poissionDenoise/shader/poissionDenoise.js.map +1 -1
  45. package/dist/managers/postprocessing/ao/ssao/SSAOEffect.d.ts.map +1 -1
  46. package/dist/managers/postprocessing/ao/ssao/SSAOEffect.js +3 -1
  47. package/dist/managers/postprocessing/ao/ssao/SSAOEffect.js.map +1 -1
  48. package/dist/managers/postprocessing/ao/ssao/shader/ssao.d.ts +1 -1
  49. package/dist/managers/postprocessing/ao/ssao/shader/ssao.d.ts.map +1 -1
  50. package/dist/managers/postprocessing/ao/ssao/shader/ssao.js +38 -52
  51. package/dist/managers/postprocessing/ao/ssao/shader/ssao.js.map +1 -1
  52. package/dist/managers/postprocessing/ao/utils/shader/basic.d.ts +1 -1
  53. package/dist/managers/postprocessing/ao/utils/shader/basic.d.ts.map +1 -1
  54. package/dist/managers/postprocessing/ao/utils/shader/basic.js +3 -0
  55. package/dist/managers/postprocessing/ao/utils/shader/basic.js.map +1 -1
  56. package/package.json +17 -17
@@ -5,10 +5,12 @@ const three_1 = require("three");
5
5
  const AOEffect_1 = require("../ao/AOEffect");
6
6
  const AOPass_1 = require("../ao/AOPass");
7
7
  const ssao_1 = require("./shader/ssao");
8
+ const ao_utils_1 = require("../ao/shader/ao_utils");
9
+ const finalFragmentShader = ssao_1.ssao.replace('#include <ao_utils>', ao_utils_1.ao_utils);
8
10
  class SSAOPass extends AOPass_1.AOPass {
9
11
  // #region Constructors (1)
10
12
  constructor(camera, scene) {
11
- super(camera, scene, ssao_1.ssao);
13
+ super(camera, scene, finalFragmentShader);
12
14
  }
13
15
  }
14
16
  class SSAOEffect extends AOEffect_1.AOEffect {
@@ -1 +1 @@
1
- {"version":3,"file":"SSAOEffect.js","sourceRoot":"","sources":["../../../../../src/managers/postprocessing/ao/ssao/SSAOEffect.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SSAOEffect.js","sourceRoot":"","sources":["../../../../../src/managers/postprocessing/ao/ssao/SSAOEffect.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- export declare const ssao = "\nvarying vec2 vUv;\n\nuniform highp sampler2D depthTexture;\nuniform sampler2D normalTexture;\nuniform mat4 projectionViewMatrix;\nuniform mat4 cameraMatrixWorld;\n\nuniform sampler2D blueNoiseTexture;\nuniform vec2 blueNoiseRepeat;\nuniform vec2 texSize;\nuniform mat4 projectionMatrixInverse;\n\nuniform float aoDistance;\nuniform float distancePower;\nuniform float cameraNear;\nuniform float cameraFar;\nuniform int frame;\n\nuniform vec3[spp] samples;\nuniform float[spp] samplesR;\n\n#include <common>\n#include <packing>\n#include <sampleBlueNoise>\n\n// source: https://github.com/N8python/ssao/blob/master/EffectShader.js#L52\nvec3 getWorldPos(const float depth, const vec2 coord) {\n float z = depth * 2.0 - 1.0;\n vec4 clipSpacePosition = vec4(coord * 2.0 - 1.0, z, 1.0);\n vec4 viewSpacePosition = projectionMatrixInverse * clipSpacePosition;\n\n // Perspective division\n vec4 worldSpacePosition = cameraMatrixWorld * viewSpacePosition;\n worldSpacePosition.xyz /= worldSpacePosition.w;\n\n return worldSpacePosition.xyz;\n}\n\nvec3 computeNormal(vec3 worldPos, vec2 vUv) {\n vec2 size = vec2(textureSize(depthTexture, 0));\n ivec2 p = ivec2(vUv * size);\n float c0 = texelFetch(depthTexture, p, 0).x;\n float l2 = texelFetch(depthTexture, p - ivec2(2, 0), 0).x;\n float l1 = texelFetch(depthTexture, p - ivec2(1, 0), 0).x;\n float r1 = texelFetch(depthTexture, p + ivec2(1, 0), 0).x;\n float r2 = texelFetch(depthTexture, p + ivec2(2, 0), 0).x;\n float b2 = texelFetch(depthTexture, p - ivec2(0, 2), 0).x;\n float b1 = texelFetch(depthTexture, p - ivec2(0, 1), 0).x;\n float t1 = texelFetch(depthTexture, p + ivec2(0, 1), 0).x;\n float t2 = texelFetch(depthTexture, p + ivec2(0, 2), 0).x;\n float dl = abs((2.0 * l1 - l2) - c0);\n float dr = abs((2.0 * r1 - r2) - c0);\n float db = abs((2.0 * b1 - b2) - c0);\n float dt = abs((2.0 * t1 - t2) - c0);\n vec3 ce = getWorldPos(c0, vUv).xyz;\n vec3 dpdx = (dl < dr) ? ce - getWorldPos(l1, (vUv - vec2(1.0 / size.x, 0.0))).xyz\n : -ce + getWorldPos(r1, (vUv + vec2(1.0 / size.x, 0.0))).xyz;\n vec3 dpdy = (db < dt) ? ce - getWorldPos(b1, (vUv - vec2(0.0, 1.0 / size.y))).xyz\n : -ce + getWorldPos(t1, (vUv + vec2(0.0, 1.0 / size.y))).xyz;\n return normalize(cross(dpdx, dpdy));\n}\n\nhighp float linearize_depth(highp float d, highp float zNear, highp float zFar) {\n highp float z_n = 2.0 * d - 1.0;\n return 2.0 * zNear * zFar / (zFar + zNear - z_n * (zFar - zNear));\n}\n\nvoid main() {\n float depth = textureLod(depthTexture, vUv, 0.).x;\n\n // filter out background\n if (depth == 1.0) {\n discard;\n return;\n }\n\n vec3 worldPos = getWorldPos(depth, vUv);\n vec3 normal = computeNormal(worldPos, vUv);\n\n#ifdef animatedNoise\n int seed = frame;\n#else\n int seed = 0;\n#endif\n\n vec4 noise = sampleBlueNoise(blueNoiseTexture, seed, blueNoiseRepeat, texSize);\n\n vec3 randomVec = normalize(noise.rgb * 2.0 - 1.0);\n vec3 tangent = normalize(randomVec - normal * dot(randomVec, normal));\n vec3 bitangent = cross(normal, tangent);\n mat3 tbn = mat3(tangent, bitangent, normal);\n\n float occluded = 0.0;\n float totalWeight = 0.0;\n\n vec3 samplePos;\n\n float sppF = float(spp);\n\n for (float i = 0.0; i < sppF; i++) {\n vec3 sampleDirection = tbn * samples[int(i)];\n\n // make sure sample direction is in the same hemisphere as the normal\n if (dot(sampleDirection, normal) < 0.0) sampleDirection *= -1.0;\n\n float moveAmt = samplesR[int(mod(i + noise.a * sppF, sppF))];\n samplePos = worldPos + aoDistance * moveAmt * sampleDirection;\n\n vec4 offset = projectionViewMatrix * vec4(samplePos, 1.0);\n offset.xyz /= offset.w;\n offset.xyz = offset.xyz * 0.5 + 0.5;\n\n float sampleDepth = textureLod(depthTexture, offset.xy, 0.0).x;\n\n float distSample = linearize_depth(sampleDepth, cameraNear, cameraFar);\n float distWorld = linearize_depth(offset.z, cameraNear, cameraFar);\n\n float rangeCheck = smoothstep(0.0, 1.0, aoDistance / abs(distSample - distWorld));\n rangeCheck = pow(rangeCheck, distancePower);\n float weight = dot(sampleDirection, normal);\n\n occluded += rangeCheck * weight * (distSample < distWorld ? 1.0 : 0.0);\n totalWeight += weight;\n }\n\n float occ = clamp(1.0 - occluded / totalWeight, 0.0, 1.0);\n gl_FragColor = vec4(normal, occ);\n}\n";
1
+ export declare const ssao = "\nvarying vec2 vUv;\n\nuniform highp sampler2D depthTexture;\nuniform mat4 projectionViewMatrix;\nuniform mat4 cameraMatrixWorld;\n\nuniform sampler2D blueNoiseTexture;\nuniform vec2 blueNoiseRepeat;\nuniform vec2 texSize;\nuniform float aoDistance;\nuniform float distancePower;\nuniform float cameraNear;\nuniform float cameraFar;\nuniform int frame;\n\nuniform vec3[spp] samples;\nuniform float[spp] samplesR;\n\n#include <common>\n#include <packing>\n#include <sampleBlueNoise>\n#include <ao_utils>\n\nhighp float linearize_depth(highp float d, highp float zNear, highp float zFar) {\n highp float z_n = 2.0 * d - 1.0;\n return 2.0 * zNear * zFar / (zFar + zNear - z_n * (zFar - zNear));\n}\n\nvoid main() {\n float depth = textureLod(depthTexture, vUv, 0.).x;\n 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 vec3 worldPos = computeWorldPosition(depth, vUv);\n vec3 screenSpaceNormal = getUnpackedNormal(vUv);\n\n #ifdef animatedNoise\n int seed = frame;\n #else\n int seed = 0;\n #endif\n\n vec4 noise = sampleBlueNoise(blueNoiseTexture, seed, blueNoiseRepeat, texSize);\n\n vec3 randomVec = normalize(noise.rgb * 2.0 - 1.0);\n vec3 tangent = normalize(randomVec - normal * dot(randomVec, normal));\n vec3 bitangent = cross(normal, tangent);\n mat3 tbn = mat3(tangent, bitangent, normal);\n\n float occluded = 0.0;\n float totalWeight = 0.0;\n\n vec3 samplePos;\n\n float sppF = float(spp);\n\n for (float i = 0.0; i < sppF; i++) {\n vec3 sampleDirection = tbn * samples[int(i)];\n\n // make sure sample direction is in the same hemisphere as the normal\n if (dot(sampleDirection, normal) < 0.0) sampleDirection *= -1.0;\n\n float moveAmt = samplesR[int(mod(i + noise.a * sppF, sppF))];\n samplePos = worldPos + aoDistance * moveAmt * sampleDirection;\n\n vec4 offset = projectionViewMatrix * vec4(samplePos, 1.0);\n offset.xyz /= offset.w;\n offset.xyz = offset.xyz * 0.5 + 0.5;\n\n float sampleDepth = textureLod(depthTexture, offset.xy, 0.0).x;\n\n if(sampleDepth == 1.0) {\n occluded += 0.0;\n totalWeight += 1.0;\n continue;\n }\n\n vec3 sampleNormal = getUnpackedNormal(offset.xy);\n\n float distSample = linearize_depth(sampleDepth, cameraNear, cameraFar);\n float distWorld = linearize_depth(offset.z, cameraNear, cameraFar);\n\n float depthBias = 0.001;\n float rangeCheck = smoothstep(0.0, 1.0, aoDistance / (abs(distSample - distWorld) + depthBias));\n rangeCheck = pow(rangeCheck, distancePower);\n rangeCheck = clamp(rangeCheck, 0.0, 1.0);\n float weight = dot(sampleDirection, normal);\n weight = clamp(weight, 0.0, 1.0);\n\n \n // check if the normals are in the same direction\n float dotProduct = dot(screenSpaceNormal, normalize(sampleNormal));\n if (dotProduct < 0.9999) {\n occluded += rangeCheck * weight * (distSample < distWorld ? 1.0 : 0.0);\n totalWeight += weight;\n } else {\n if(areDepthsOnSamePlane(depth, sampleDepth, vUv, offset.xy, normal, 0.1)) {\n occluded += 0.0;\n totalWeight += 1.0;\n } else {\n occluded += rangeCheck * weight * (distSample < distWorld ? 1.0 : 0.0);\n totalWeight += weight;\n }\n }\n }\n\n float occ = clamp(1.0 - occluded / totalWeight, 0.0, 1.0);\n gl_FragColor = vec4(normal, occ);\n}\n";
2
2
  //# sourceMappingURL=ssao.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ssao.d.ts","sourceRoot":"","sources":["../../../../../../src/managers/postprocessing/ao/ssao/shader/ssao.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,IAAI,w9IAiIhB,CAAA"}
1
+ {"version":3,"file":"ssao.d.ts","sourceRoot":"","sources":["../../../../../../src/managers/postprocessing/ao/ssao/shader/ssao.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,IAAI,kmHAmHhB,CAAC"}
@@ -5,15 +5,12 @@ exports.ssao = `
5
5
  varying vec2 vUv;
6
6
 
7
7
  uniform highp sampler2D depthTexture;
8
- uniform sampler2D normalTexture;
9
8
  uniform mat4 projectionViewMatrix;
10
9
  uniform mat4 cameraMatrixWorld;
11
10
 
12
11
  uniform sampler2D blueNoiseTexture;
13
12
  uniform vec2 blueNoiseRepeat;
14
13
  uniform vec2 texSize;
15
- uniform mat4 projectionMatrixInverse;
16
-
17
14
  uniform float aoDistance;
18
15
  uniform float distancePower;
19
16
  uniform float cameraNear;
@@ -26,43 +23,7 @@ uniform float[spp] samplesR;
26
23
  #include <common>
27
24
  #include <packing>
28
25
  #include <sampleBlueNoise>
29
-
30
- // source: https://github.com/N8python/ssao/blob/master/EffectShader.js#L52
31
- vec3 getWorldPos(const float depth, const vec2 coord) {
32
- float z = depth * 2.0 - 1.0;
33
- vec4 clipSpacePosition = vec4(coord * 2.0 - 1.0, z, 1.0);
34
- vec4 viewSpacePosition = projectionMatrixInverse * clipSpacePosition;
35
-
36
- // Perspective division
37
- vec4 worldSpacePosition = cameraMatrixWorld * viewSpacePosition;
38
- worldSpacePosition.xyz /= worldSpacePosition.w;
39
-
40
- return worldSpacePosition.xyz;
41
- }
42
-
43
- vec3 computeNormal(vec3 worldPos, vec2 vUv) {
44
- vec2 size = vec2(textureSize(depthTexture, 0));
45
- ivec2 p = ivec2(vUv * size);
46
- float c0 = texelFetch(depthTexture, p, 0).x;
47
- float l2 = texelFetch(depthTexture, p - ivec2(2, 0), 0).x;
48
- float l1 = texelFetch(depthTexture, p - ivec2(1, 0), 0).x;
49
- float r1 = texelFetch(depthTexture, p + ivec2(1, 0), 0).x;
50
- float r2 = texelFetch(depthTexture, p + ivec2(2, 0), 0).x;
51
- float b2 = texelFetch(depthTexture, p - ivec2(0, 2), 0).x;
52
- float b1 = texelFetch(depthTexture, p - ivec2(0, 1), 0).x;
53
- float t1 = texelFetch(depthTexture, p + ivec2(0, 1), 0).x;
54
- float t2 = texelFetch(depthTexture, p + ivec2(0, 2), 0).x;
55
- float dl = abs((2.0 * l1 - l2) - c0);
56
- float dr = abs((2.0 * r1 - r2) - c0);
57
- float db = abs((2.0 * b1 - b2) - c0);
58
- float dt = abs((2.0 * t1 - t2) - c0);
59
- vec3 ce = getWorldPos(c0, vUv).xyz;
60
- vec3 dpdx = (dl < dr) ? ce - getWorldPos(l1, (vUv - vec2(1.0 / size.x, 0.0))).xyz
61
- : -ce + getWorldPos(r1, (vUv + vec2(1.0 / size.x, 0.0))).xyz;
62
- vec3 dpdy = (db < dt) ? ce - getWorldPos(b1, (vUv - vec2(0.0, 1.0 / size.y))).xyz
63
- : -ce + getWorldPos(t1, (vUv + vec2(0.0, 1.0 / size.y))).xyz;
64
- return normalize(cross(dpdx, dpdy));
65
- }
26
+ #include <ao_utils>
66
27
 
67
28
  highp float linearize_depth(highp float d, highp float zNear, highp float zFar) {
68
29
  highp float z_n = 2.0 * d - 1.0;
@@ -71,21 +32,22 @@ highp float linearize_depth(highp float d, highp float zNear, highp float zFar)
71
32
 
72
33
  void main() {
73
34
  float depth = textureLod(depthTexture, vUv, 0.).x;
35
+ vec3 normal = computeNormal(vUv);
74
36
 
75
37
  // filter out background
76
38
  if (depth == 1.0) {
77
- discard;
39
+ gl_FragColor = vec4(normal, 1.0);
78
40
  return;
79
41
  }
80
42
 
81
- vec3 worldPos = getWorldPos(depth, vUv);
82
- vec3 normal = computeNormal(worldPos, vUv);
43
+ vec3 worldPos = computeWorldPosition(depth, vUv);
44
+ vec3 screenSpaceNormal = getUnpackedNormal(vUv);
83
45
 
84
- #ifdef animatedNoise
85
- int seed = frame;
86
- #else
87
- int seed = 0;
88
- #endif
46
+ #ifdef animatedNoise
47
+ int seed = frame;
48
+ #else
49
+ int seed = 0;
50
+ #endif
89
51
 
90
52
  vec4 noise = sampleBlueNoise(blueNoiseTexture, seed, blueNoiseRepeat, texSize);
91
53
 
@@ -116,15 +78,39 @@ void main() {
116
78
 
117
79
  float sampleDepth = textureLod(depthTexture, offset.xy, 0.0).x;
118
80
 
81
+ if(sampleDepth == 1.0) {
82
+ occluded += 0.0;
83
+ totalWeight += 1.0;
84
+ continue;
85
+ }
86
+
87
+ vec3 sampleNormal = getUnpackedNormal(offset.xy);
88
+
119
89
  float distSample = linearize_depth(sampleDepth, cameraNear, cameraFar);
120
90
  float distWorld = linearize_depth(offset.z, cameraNear, cameraFar);
121
91
 
122
- float rangeCheck = smoothstep(0.0, 1.0, aoDistance / abs(distSample - distWorld));
92
+ float depthBias = 0.001;
93
+ float rangeCheck = smoothstep(0.0, 1.0, aoDistance / (abs(distSample - distWorld) + depthBias));
123
94
  rangeCheck = pow(rangeCheck, distancePower);
95
+ rangeCheck = clamp(rangeCheck, 0.0, 1.0);
124
96
  float weight = dot(sampleDirection, normal);
125
-
126
- occluded += rangeCheck * weight * (distSample < distWorld ? 1.0 : 0.0);
127
- totalWeight += weight;
97
+ weight = clamp(weight, 0.0, 1.0);
98
+
99
+
100
+ // check if the normals are in the same direction
101
+ float dotProduct = dot(screenSpaceNormal, normalize(sampleNormal));
102
+ if (dotProduct < 0.9999) {
103
+ occluded += rangeCheck * weight * (distSample < distWorld ? 1.0 : 0.0);
104
+ totalWeight += weight;
105
+ } else {
106
+ if(areDepthsOnSamePlane(depth, sampleDepth, vUv, offset.xy, normal, 0.1)) {
107
+ occluded += 0.0;
108
+ totalWeight += 1.0;
109
+ } else {
110
+ occluded += rangeCheck * weight * (distSample < distWorld ? 1.0 : 0.0);
111
+ totalWeight += weight;
112
+ }
113
+ }
128
114
  }
129
115
 
130
116
  float occ = clamp(1.0 - occluded / totalWeight, 0.0, 1.0);
@@ -1 +1 @@
1
- {"version":3,"file":"ssao.js","sourceRoot":"","sources":["../../../../../../src/managers/postprocessing/ao/ssao/shader/ssao.ts"],"names":[],"mappings":";;;AAAa,QAAA,IAAI,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiInB,CAAA"}
1
+ {"version":3,"file":"ssao.js","sourceRoot":"","sources":["../../../../../../src/managers/postprocessing/ao/ssao/shader/ssao.ts"],"names":[],"mappings":";;;AAAa,QAAA,IAAI,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmHnB,CAAC"}
@@ -1,2 +1,2 @@
1
- export declare const basic = "\nvarying vec2 vUv;\n\nvoid main() {\n vUv = position.xy * 0.5 + 0.5;\n gl_Position = vec4(position.xy, 1.0, 1.0);\n}\n";
1
+ export declare const basic = "\nvarying vec2 vUv;\n\nout mat4 viewMatrixInverse;\n\nvoid main() {\n viewMatrixInverse = inverse(viewMatrix);\n vUv = position.xy * 0.5 + 0.5;\n gl_Position = vec4(position.xy, 1.0, 1.0);\n}\n";
2
2
  //# sourceMappingURL=basic.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"basic.d.ts","sourceRoot":"","sources":["../../../../../../src/managers/postprocessing/ao/utils/shader/basic.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,KAAK,kIAOjB,CAAA"}
1
+ {"version":3,"file":"basic.d.ts","sourceRoot":"","sources":["../../../../../../src/managers/postprocessing/ao/utils/shader/basic.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,KAAK,+MAUjB,CAAA"}
@@ -4,7 +4,10 @@ exports.basic = void 0;
4
4
  exports.basic = `
5
5
  varying vec2 vUv;
6
6
 
7
+ out mat4 viewMatrixInverse;
8
+
7
9
  void main() {
10
+ viewMatrixInverse = inverse(viewMatrix);
8
11
  vUv = position.xy * 0.5 + 0.5;
9
12
  gl_Position = vec4(position.xy, 1.0, 1.0);
10
13
  }
@@ -1 +1 @@
1
- {"version":3,"file":"basic.js","sourceRoot":"","sources":["../../../../../../src/managers/postprocessing/ao/utils/shader/basic.ts"],"names":[],"mappings":";;;AAAa,QAAA,KAAK,GAAG;;;;;;;CAOpB,CAAA"}
1
+ {"version":3,"file":"basic.js","sourceRoot":"","sources":["../../../../../../src/managers/postprocessing/ao/utils/shader/basic.ts"],"names":[],"mappings":";;;AAAa,QAAA,KAAK,GAAG;;;;;;;;;;CAUpB,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shapediver/viewer.rendering-engine.rendering-engine-threejs",
3
- "version": "3.6.0",
3
+ "version": "3.7.1",
4
4
  "description": "",
5
5
  "keywords": [],
6
6
  "author": "Michael Oppitz <michael@shapediver.com>",
@@ -38,21 +38,21 @@
38
38
  "testEnvironment": "node"
39
39
  },
40
40
  "dependencies": {
41
- "@shapediver/viewer.data-engine.gltf-converter": "3.6.0",
42
- "@shapediver/viewer.data-engine.shared-types": "3.6.0",
43
- "@shapediver/viewer.data-engine.tag3d-engine": "3.6.0",
44
- "@shapediver/viewer.rendering-engine.animation-engine": "3.6.0",
45
- "@shapediver/viewer.rendering-engine.animation-frame-engine": "3.6.0",
46
- "@shapediver/viewer.rendering-engine.camera-engine": "3.6.0",
47
- "@shapediver/viewer.rendering-engine.canvas-engine": "3.6.0",
48
- "@shapediver/viewer.rendering-engine.intersection-engine": "3.6.0",
49
- "@shapediver/viewer.rendering-engine.light-engine": "3.6.0",
50
- "@shapediver/viewer.rendering-engine.rendering-engine": "3.6.0",
51
- "@shapediver/viewer.shared.global-access-objects": "3.6.0",
52
- "@shapediver/viewer.shared.math": "3.6.0",
53
- "@shapediver/viewer.shared.node-tree": "3.6.0",
54
- "@shapediver/viewer.shared.services": "3.6.0",
55
- "@shapediver/viewer.shared.types": "3.6.0",
41
+ "@shapediver/viewer.data-engine.gltf-converter": "3.7.1",
42
+ "@shapediver/viewer.data-engine.shared-types": "3.7.1",
43
+ "@shapediver/viewer.data-engine.tag3d-engine": "3.7.1",
44
+ "@shapediver/viewer.rendering-engine.animation-engine": "3.7.1",
45
+ "@shapediver/viewer.rendering-engine.animation-frame-engine": "3.7.1",
46
+ "@shapediver/viewer.rendering-engine.camera-engine": "3.7.1",
47
+ "@shapediver/viewer.rendering-engine.canvas-engine": "3.7.1",
48
+ "@shapediver/viewer.rendering-engine.intersection-engine": "3.7.1",
49
+ "@shapediver/viewer.rendering-engine.light-engine": "3.7.1",
50
+ "@shapediver/viewer.rendering-engine.rendering-engine": "3.7.1",
51
+ "@shapediver/viewer.shared.global-access-objects": "3.7.1",
52
+ "@shapediver/viewer.shared.math": "3.7.1",
53
+ "@shapediver/viewer.shared.node-tree": "3.7.1",
54
+ "@shapediver/viewer.shared.services": "3.7.1",
55
+ "@shapediver/viewer.shared.types": "3.7.1",
56
56
  "@tweenjs/tween.js": "^18.6.4",
57
57
  "@types/stats.js": "^0.17.0",
58
58
  "@types/three": "0.162.0",
@@ -61,5 +61,5 @@
61
61
  "stats.js": "^0.17.0",
62
62
  "three": "0.162.0"
63
63
  },
64
- "gitHead": "55ab8adc3bb462e58542778431c3cfb01e5fc77c"
64
+ "gitHead": "8bbe1cf6dbde5b0cc23f18a9528df5917dfb5435"
65
65
  }