@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.
Files changed (185) hide show
  1. package/dist/RenderingEngine.d.ts +294 -294
  2. package/dist/RenderingEngine.js +987 -977
  3. package/dist/RenderingEngine.js.map +1 -1
  4. package/dist/index.d.ts +16 -16
  5. package/dist/index.js +57 -57
  6. package/dist/injectors/TextureUnifierInjector.d.ts +13 -13
  7. package/dist/injectors/TextureUnifierInjector.js +181 -171
  8. package/dist/injectors/TextureUnifierInjector.js.map +1 -1
  9. package/dist/interfaces/ILoader.d.ts +3 -3
  10. package/dist/interfaces/ILoader.js +2 -2
  11. package/dist/interfaces/IRenderingEngine.d.ts +45 -45
  12. package/dist/interfaces/IRenderingEngine.js +2 -2
  13. package/dist/loaders/EnvironmentMapLoader.d.ts +119 -119
  14. package/dist/loaders/EnvironmentMapLoader.js +512 -502
  15. package/dist/loaders/EnvironmentMapLoader.js.map +1 -1
  16. package/dist/loaders/GeometryLoader.d.ts +39 -39
  17. package/dist/loaders/GeometryLoader.d.ts.map +1 -1
  18. package/dist/loaders/GeometryLoader.js +603 -593
  19. package/dist/loaders/GeometryLoader.js.map +1 -1
  20. package/dist/loaders/HTMLElementAnchorLoader.d.ts +15 -15
  21. package/dist/loaders/HTMLElementAnchorLoader.js +98 -98
  22. package/dist/loaders/HTMLElementAnchorLoader.js.map +1 -1
  23. package/dist/loaders/LightLoader.d.ts +19 -19
  24. package/dist/loaders/LightLoader.js +197 -187
  25. package/dist/loaders/LightLoader.js.map +1 -1
  26. package/dist/loaders/MaterialLoader.d.ts +115 -115
  27. package/dist/loaders/MaterialLoader.d.ts.map +1 -1
  28. package/dist/loaders/MaterialLoader.js +1612 -1602
  29. package/dist/loaders/MaterialLoader.js.map +1 -1
  30. package/dist/managers/ARManager.d.ts +17 -17
  31. package/dist/managers/ARManager.js +128 -128
  32. package/dist/managers/ARManager.js.map +1 -1
  33. package/dist/managers/CameraManager.d.ts +19 -19
  34. package/dist/managers/CameraManager.js +244 -234
  35. package/dist/managers/CameraManager.js.map +1 -1
  36. package/dist/managers/EnvironmentGeometryManager.d.ts +32 -32
  37. package/dist/managers/EnvironmentGeometryManager.js +114 -114
  38. package/dist/managers/EnvironmentGeometryManager.js.map +1 -1
  39. package/dist/managers/FlagManager.d.ts +19 -19
  40. package/dist/managers/FlagManager.js +143 -143
  41. package/dist/managers/FlagManager.js.map +1 -1
  42. package/dist/managers/PostProcessingManager.d.ts +1019 -1019
  43. package/dist/managers/PostProcessingManager.js +1306 -1296
  44. package/dist/managers/PostProcessingManager.js.map +1 -1
  45. package/dist/managers/RenderingManager.d.ts +84 -84
  46. package/dist/managers/RenderingManager.d.ts.map +1 -1
  47. package/dist/managers/RenderingManager.js +679 -669
  48. package/dist/managers/RenderingManager.js.map +1 -1
  49. package/dist/managers/SceneTracingManager.d.ts +28 -28
  50. package/dist/managers/SceneTracingManager.js +160 -150
  51. package/dist/managers/SceneTracingManager.js.map +1 -1
  52. package/dist/managers/SceneTreeManager.d.ts +81 -81
  53. package/dist/managers/SceneTreeManager.d.ts.map +1 -1
  54. package/dist/managers/SceneTreeManager.js +500 -490
  55. package/dist/managers/SceneTreeManager.js.map +1 -1
  56. package/dist/managers/SettingsManager.d.ts +28 -28
  57. package/dist/managers/SettingsManager.js +284 -284
  58. package/dist/managers/SettingsManager.js.map +1 -1
  59. package/dist/managers/environmentGeometry/ContactShadow.d.ts +42 -42
  60. package/dist/managers/environmentGeometry/ContactShadow.js +295 -285
  61. package/dist/managers/environmentGeometry/ContactShadow.js.map +1 -1
  62. package/dist/managers/environmentGeometry/Grid.d.ts +20 -20
  63. package/dist/managers/environmentGeometry/Grid.js +110 -100
  64. package/dist/managers/environmentGeometry/Grid.js.map +1 -1
  65. package/dist/managers/environmentGeometry/GroundPlane.d.ts +21 -21
  66. package/dist/managers/environmentGeometry/GroundPlane.js +105 -95
  67. package/dist/managers/environmentGeometry/GroundPlane.js.map +1 -1
  68. package/dist/managers/environmentGeometry/GroundPlaneShadow.d.ts +21 -21
  69. package/dist/managers/environmentGeometry/GroundPlaneShadow.js +96 -86
  70. package/dist/managers/environmentGeometry/GroundPlaneShadow.js.map +1 -1
  71. package/dist/managers/environmentGeometry/IEnvironmentGeometry.d.ts +8 -8
  72. package/dist/managers/environmentGeometry/IEnvironmentGeometry.js +2 -2
  73. package/dist/managers/postprocessing/GodRaysManager.d.ts +12 -12
  74. package/dist/managers/postprocessing/GodRaysManager.js +73 -63
  75. package/dist/managers/postprocessing/GodRaysManager.js.map +1 -1
  76. package/dist/managers/postprocessing/OutlineManager.d.ts +15 -15
  77. package/dist/managers/postprocessing/OutlineManager.js +86 -76
  78. package/dist/managers/postprocessing/OutlineManager.js.map +1 -1
  79. package/dist/managers/postprocessing/SSAARenderPass.d.ts +53 -53
  80. package/dist/managers/postprocessing/SSAARenderPass.js +281 -281
  81. package/dist/managers/postprocessing/SSAARenderPass.js.map +1 -1
  82. package/dist/managers/postprocessing/SelectiveBloomManager.d.ts +14 -14
  83. package/dist/managers/postprocessing/SelectiveBloomManager.js +76 -66
  84. package/dist/managers/postprocessing/SelectiveBloomManager.js.map +1 -1
  85. package/dist/managers/postprocessing/ao/ao/AOEffect.d.ts +46 -46
  86. package/dist/managers/postprocessing/ao/ao/AOEffect.js +142 -142
  87. package/dist/managers/postprocessing/ao/ao/AOEffect.js.map +1 -1
  88. package/dist/managers/postprocessing/ao/ao/AOPass.d.ts +12 -12
  89. package/dist/managers/postprocessing/ao/ao/AOPass.js +108 -108
  90. package/dist/managers/postprocessing/ao/ao/AOPass.js.map +1 -1
  91. package/dist/managers/postprocessing/ao/ao/shader/ao_compose.d.ts +1 -1
  92. package/dist/managers/postprocessing/ao/ao/shader/ao_compose.js +4 -4
  93. package/dist/managers/postprocessing/ao/ao/shader/ao_utils.d.ts +1 -1
  94. package/dist/managers/postprocessing/ao/ao/shader/ao_utils.js +4 -4
  95. package/dist/managers/postprocessing/ao/hbao/HBAOEffect.d.ts +14 -14
  96. package/dist/managers/postprocessing/ao/hbao/HBAOEffect.js +24 -24
  97. package/dist/managers/postprocessing/ao/hbao/shader/hbao.d.ts +1 -1
  98. package/dist/managers/postprocessing/ao/hbao/shader/hbao.js +4 -4
  99. package/dist/managers/postprocessing/ao/poissionDenoise/PoissionDenoisePass.d.ts +33 -33
  100. package/dist/managers/postprocessing/ao/poissionDenoise/PoissionDenoisePass.js +211 -211
  101. package/dist/managers/postprocessing/ao/poissionDenoise/PoissionDenoisePass.js.map +1 -1
  102. package/dist/managers/postprocessing/ao/poissionDenoise/shader/poissionDenoise.d.ts +1 -1
  103. package/dist/managers/postprocessing/ao/poissionDenoise/shader/poissionDenoise.js +4 -4
  104. package/dist/managers/postprocessing/ao/ssao/SSAOEffect.d.ts +14 -14
  105. package/dist/managers/postprocessing/ao/ssao/SSAOEffect.js +82 -82
  106. package/dist/managers/postprocessing/ao/ssao/SSAOEffect.js.map +1 -1
  107. package/dist/managers/postprocessing/ao/ssao/shader/ssao.d.ts +1 -1
  108. package/dist/managers/postprocessing/ao/ssao/shader/ssao.js +4 -4
  109. package/dist/managers/postprocessing/ao/utils/shader/basic.d.ts +1 -1
  110. package/dist/managers/postprocessing/ao/utils/shader/basic.js +4 -4
  111. package/dist/managers/postprocessing/ao/utils/shader/sampleBlueNoise.d.ts +1 -1
  112. package/dist/managers/postprocessing/ao/utils/shader/sampleBlueNoise.js +4 -4
  113. package/dist/managers/postprocessing/effects/tone-mapping/ToneMappingEffect.d.ts +165 -165
  114. package/dist/managers/postprocessing/effects/tone-mapping/ToneMappingEffect.js +299 -299
  115. package/dist/managers/postprocessing/effects/tone-mapping/ToneMappingEffect.js.map +1 -1
  116. package/dist/managers/postprocessing/effects/tone-mapping/tone-mapping.d.ts +1 -1
  117. package/dist/managers/postprocessing/effects/tone-mapping/tone-mapping.js +4 -4
  118. package/dist/managers/postprocessing/utils/CopyMaterial.d.ts +37 -37
  119. package/dist/managers/postprocessing/utils/CopyMaterial.js +69 -69
  120. package/dist/managers/postprocessing/utils/CopyShader.d.ts +13 -13
  121. package/dist/managers/postprocessing/utils/CopyShader.js +12 -12
  122. package/dist/managers/postprocessing/utils/FullScreenQuad.d.ts +9 -9
  123. package/dist/managers/postprocessing/utils/FullScreenQuad.js +28 -28
  124. package/dist/managers/postprocessing/utils/NormalPass.d.ts +87 -87
  125. package/dist/managers/postprocessing/utils/NormalPass.js +156 -156
  126. package/dist/managers/postprocessing/utils/NormalPass.js.map +1 -1
  127. package/dist/managers/postprocessing/utils/RenderPass.d.ts +114 -114
  128. package/dist/managers/postprocessing/utils/RenderPass.js +259 -259
  129. package/dist/managers/postprocessing/utils/RenderPass.js.map +1 -1
  130. package/dist/managers/sceneTree/SDTFUtils.d.ts +6 -6
  131. package/dist/managers/sceneTree/SDTFUtils.d.ts.map +1 -1
  132. package/dist/managers/sceneTree/SDTFUtils.js +50 -50
  133. package/dist/managers/sceneTree/SDTFUtils.js.map +1 -1
  134. package/dist/managers/sceneTree/SceenTreeManagerUtils.d.ts +7 -7
  135. package/dist/managers/sceneTree/SceenTreeManagerUtils.d.ts.map +1 -1
  136. package/dist/managers/sceneTree/SceenTreeManagerUtils.js +175 -165
  137. package/dist/managers/sceneTree/SceenTreeManagerUtils.js.map +1 -1
  138. package/dist/managers/sceneTree/ThreeJsDataUtils.d.ts +6 -6
  139. package/dist/managers/sceneTree/ThreeJsDataUtils.d.ts.map +1 -1
  140. package/dist/managers/sceneTree/ThreeJsDataUtils.js +80 -70
  141. package/dist/managers/sceneTree/ThreeJsDataUtils.js.map +1 -1
  142. package/dist/materials/GemMaterial.d.ts +37 -37
  143. package/dist/materials/GemMaterial.js +262 -252
  144. package/dist/materials/GemMaterial.js.map +1 -1
  145. package/dist/materials/MeshUnlitMaterialParameters.d.ts +3 -3
  146. package/dist/materials/MeshUnlitMaterialParameters.js +2 -2
  147. package/dist/materials/MultiPointsMaterial.d.ts +93 -93
  148. package/dist/materials/MultiPointsMaterial.js +577 -567
  149. package/dist/materials/MultiPointsMaterial.js.map +1 -1
  150. package/dist/materials/SpecularGlossinessMaterial.d.ts +13 -13
  151. package/dist/materials/SpecularGlossinessMaterial.js +171 -161
  152. package/dist/materials/SpecularGlossinessMaterial.js.map +1 -1
  153. package/dist/objects/SDColor.d.ts +16 -16
  154. package/dist/objects/SDColor.js +52 -52
  155. package/dist/objects/SDColor.js.map +1 -1
  156. package/dist/objects/SDObject.d.ts +27 -27
  157. package/dist/objects/SDObject.js +112 -102
  158. package/dist/objects/SDObject.js.map +1 -1
  159. package/dist/shaders/PCSS.d.ts +2 -2
  160. package/dist/shaders/PCSS.js +5 -5
  161. package/dist/shaders/gem.d.ts +2 -2
  162. package/dist/shaders/gem.js +5 -5
  163. package/dist/shaders/multi_points.d.ts +2 -2
  164. package/dist/shaders/multi_points.js +5 -5
  165. package/dist/styling/viewport-css.d.ts +1 -1
  166. package/dist/styling/viewport-css.js +4 -4
  167. package/dist/three/CSS2DRenderer.d.ts +31 -31
  168. package/dist/three/CSS2DRenderer.d.ts.map +1 -1
  169. package/dist/three/CSS2DRenderer.js +152 -152
  170. package/dist/three/CSS2DRenderer.js.map +1 -1
  171. package/dist/three/geometries/TextGeometry.d.ts +21 -21
  172. package/dist/three/geometries/TextGeometry.js +45 -45
  173. package/dist/three/geometries/TextGeometry.js.map +1 -1
  174. package/dist/three/loaders/RGBELoader.d.ts +23 -23
  175. package/dist/three/loaders/RGBELoader.js +311 -311
  176. package/dist/three/loaders/RGBELoader.js.map +1 -1
  177. package/dist/types/IThreejsData.d.ts +6 -6
  178. package/dist/types/IThreejsData.js +2 -2
  179. package/dist/types/ThreejsData.d.ts +10 -10
  180. package/dist/types/ThreejsData.js +41 -41
  181. package/package.json +18 -18
  182. package/dist/managers/InstanceGroupManager.d.ts +0 -58
  183. package/dist/managers/InstanceGroupManager.d.ts.map +0 -1
  184. package/dist/managers/InstanceGroupManager.js +0 -372
  185. package/dist/managers/InstanceGroupManager.js.map +0 -1
@@ -1,289 +1,299 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
- Object.defineProperty(exports, "__esModule", { value: true });
26
- exports.ContactShadow = void 0;
27
- const THREE = __importStar(require("three"));
28
- const HorizontalBlurShader_js_1 = require("three/examples/jsm/shaders/HorizontalBlurShader.js");
29
- const VerticalBlurShader_js_1 = require("three/examples/jsm/shaders/VerticalBlurShader.js");
30
- const SDObject_1 = require("../../objects/SDObject");
31
- class ContactShadow {
32
- // #endregion Properties (16)
33
- // #region Constructors (1)
34
- constructor(_renderingEngine, _parent) {
35
- this._renderingEngine = _renderingEngine;
36
- this._parent = _parent;
37
- // #region Properties (16)
38
- this._blur = 1.5;
39
- this._color = "#ffffff";
40
- this._darkness = 2.5;
41
- this._height = 0.25;
42
- this._opacity = 1;
43
- this._currentGridExtents = 1;
44
- this._originalMaterials = new Map();
45
- this._contactShadowObject = new SDObject_1.SDObject("contactShadow", "");
46
- this._contactShadowObject.visible = false;
47
- this._contactShadowObject.userData.ambientOcclusion = false;
48
- this._parent.add(this._contactShadowObject);
49
- this.createContactShadow();
50
- }
51
- // #endregion Constructors (1)
52
- // #region Public Getters And Setters (10)
53
- get blur() {
54
- return this._blur;
55
- }
56
- set blur(value) {
57
- this._blur = value;
58
- }
59
- get darkness() {
60
- return this._darkness;
61
- }
62
- set darkness(value) {
63
- this._darkness = value;
64
- }
65
- get height() {
66
- return this._height;
67
- }
68
- set height(value) {
69
- this._height = value;
70
- this._shadowCamera.far = this._currentGridExtents * value;
71
- this._shadowCamera.updateProjectionMatrix();
72
- // const cameraHelper = new THREE.CameraHelper(this._shadowCamera);
73
- // this._parent.add(cameraHelper);
74
- this._renderingEngine.renderingManager.updateShadowMap();
75
- }
76
- get opacity() {
77
- return this._opacity;
78
- }
79
- set opacity(value) {
80
- this._opacity = value;
81
- this._plane.material.opacity = value;
82
- }
83
- get visible() {
84
- return this._contactShadowObject.visible;
85
- }
86
- set visible(value) {
87
- this._contactShadowObject.visible = value;
88
- }
89
- // #endregion Public Getters And Setters (10)
90
- // #region Public Methods (3)
91
- changeSceneExtents(position, divisions, gridExtents) {
92
- this._currentGridExtents = gridExtents;
93
- const widthAndHeight = 2 * gridExtents;
94
- const planeGeometry = new THREE.PlaneGeometry(widthAndHeight, widthAndHeight);
95
- this._plane.geometry.dispose();
96
- this._plane.geometry = planeGeometry;
97
- this._fillPlane.geometry.dispose();
98
- this._fillPlane.geometry = planeGeometry;
99
- this._blurPlane.geometry.dispose();
100
- this._blurPlane.geometry = planeGeometry;
101
- this._shadowCamera = new THREE.OrthographicCamera(-widthAndHeight / 2, widthAndHeight / 2, widthAndHeight / 2, -widthAndHeight / 2, 0, gridExtents * this._height);
102
- this._shadowCamera.up.set(0, 1, 0);
103
- this._shadowCamera.position.set(0, 0, -gridExtents / 50);
104
- this._shadowCamera.lookAt(0, 0, 1);
105
- this._shadowCamera.updateProjectionMatrix();
106
- this._shadowGroup.add(this._shadowCamera);
107
- // const cameraHelper = new THREE.CameraHelper(this._shadowCamera);
108
- // this._parent.add(cameraHelper);
109
- this._contactShadowObject.position.set(position[0], position[1], position[2]);
110
- this._renderingEngine.renderingManager.updateShadowMap();
111
- }
112
- render() {
113
- const initialGridVisibility = this._renderingEngine.gridVisibility;
114
- this._renderingEngine.gridVisibility = false;
115
- const initialGroundPlaneVisibility = this._renderingEngine.groundPlaneVisibility;
116
- this._renderingEngine.groundPlaneVisibility = false;
117
- const initialGroundPlaneShadowVisibility = this._renderingEngine.groundPlaneShadowVisibility;
118
- this._renderingEngine.groundPlaneShadowVisibility = false;
119
- this._blurPlane.visible = false;
120
- this._fillPlane.visible = false;
121
- this._plane.visible = false;
122
- const excludedObjects = [];
123
- this._renderingEngine.scene.traverse(function (object) {
124
- if (object.visible === true) {
125
- if (object instanceof THREE.Line ||
126
- object instanceof THREE.LineLoop ||
127
- object instanceof THREE.LineSegments ||
128
- object instanceof THREE.Points) {
129
- excludedObjects.push(object);
130
- object.visible = false;
131
- }
132
- }
133
- });
134
- // remove the background
135
- const initialBackground = this._renderingEngine.scene.background;
136
- this._renderingEngine.scene.background = null;
137
- // Apply transparency-aware depth materials to all mesh objects
138
- this._originalMaterials.clear();
139
- this._renderingEngine.scene.traverse((object) => {
140
- if (object instanceof THREE.Mesh && object.material) {
141
- this._originalMaterials.set(object, object.material);
142
- object.material = this.createTransparencyAwareDepthMaterial(object.material);
143
- }
144
- });
145
- // set renderer clear alpha
146
- const initialClearAlpha = this._renderingEngine.renderer.getClearAlpha();
147
- this._renderingEngine.renderer.setClearAlpha(0);
148
- // render to the render target to get the depths
149
- this._renderingEngine.renderer.setRenderTarget(this._renderTarget);
150
- this._renderingEngine.renderer.render(this._renderingEngine.scene, this._shadowCamera);
151
- // Restore original materials
152
- this._originalMaterials.forEach((originalMaterial, object) => {
153
- if (object instanceof THREE.Mesh) {
154
- object.material = originalMaterial;
155
- }
156
- });
157
- this._originalMaterials.clear();
158
- this.blurShadow(this._blur);
159
- // // a second pass to reduce the artifacts
160
- // // (0.4 is the minimum blur amount so that the artifacts are gone)
161
- this.blurShadow(this._blur * 0.4);
162
- // reset and render the normal scene
163
- this._renderingEngine.renderer.setRenderTarget(null);
164
- this._renderingEngine.renderer.setClearAlpha(initialClearAlpha);
165
- this._renderingEngine.scene.background = initialBackground;
166
- for (const object of excludedObjects)
167
- object.visible = true;
168
- this._plane.visible = true;
169
- this._renderingEngine.gridVisibility = initialGridVisibility;
170
- this._renderingEngine.groundPlaneVisibility =
171
- initialGroundPlaneVisibility;
172
- this._renderingEngine.groundPlaneShadowVisibility =
173
- initialGroundPlaneShadowVisibility;
174
- }
175
- updatePosition(position) {
176
- this._contactShadowObject.position.set(position[0], position[1], position[2]);
177
- }
178
- // #endregion Public Methods (3)
179
- // #region Private Methods (3)
180
- createTransparencyAwareDepthMaterial(originalMaterial) {
181
- let materialOpacity = 1.0;
182
- let isTransparent = false;
183
- // Extract opacity and transparency from the original material
184
- if (Array.isArray(originalMaterial)) {
185
- // For multi-materials, use the opacity of the first material that has opacity
186
- const materialWithOpacity = originalMaterial.find((mat) => "opacity" in mat &&
187
- typeof mat.opacity === "number");
188
- if (materialWithOpacity) {
189
- materialOpacity = materialWithOpacity.opacity;
190
- isTransparent =
191
- materialWithOpacity.transparent ||
192
- materialOpacity < 1.0;
193
- }
194
- }
195
- else if ("opacity" in originalMaterial &&
196
- typeof originalMaterial.opacity === "number") {
197
- materialOpacity = originalMaterial.opacity;
198
- isTransparent =
199
- originalMaterial.transparent || materialOpacity < 1.0;
200
- }
201
- // If the material is not transparent or has full opacity, treat it as opaque for shadows
202
- if (!isTransparent || materialOpacity >= 1.0) {
203
- materialOpacity = 1.0;
204
- }
205
- // Calculate adjusted darkness based on material opacity
206
- const adjustedDarkness = this._darkness * materialOpacity;
207
- // Create a new depth material for this specific object
208
- const depthMaterial = new THREE.MeshDepthMaterial();
209
- depthMaterial.side = THREE.DoubleSide;
210
- depthMaterial.userData.darkness = { value: adjustedDarkness };
211
- depthMaterial.onBeforeCompile = (shader) => {
212
- shader.uniforms.darkness = depthMaterial.userData.darkness;
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.ContactShadow = void 0;
37
+ const THREE = __importStar(require("three"));
38
+ const HorizontalBlurShader_js_1 = require("three/examples/jsm/shaders/HorizontalBlurShader.js");
39
+ const VerticalBlurShader_js_1 = require("three/examples/jsm/shaders/VerticalBlurShader.js");
40
+ const SDObject_1 = require("../../objects/SDObject");
41
+ class ContactShadow {
42
+ // #endregion Properties (16)
43
+ // #region Constructors (1)
44
+ constructor(_renderingEngine, _parent) {
45
+ this._renderingEngine = _renderingEngine;
46
+ this._parent = _parent;
47
+ // #region Properties (16)
48
+ this._blur = 1.5;
49
+ this._color = "#ffffff";
50
+ this._darkness = 2.5;
51
+ this._height = 0.25;
52
+ this._opacity = 1;
53
+ this._currentGridExtents = 1;
54
+ this._originalMaterials = new Map();
55
+ this._contactShadowObject = new SDObject_1.SDObject("contactShadow", "");
56
+ this._contactShadowObject.visible = false;
57
+ this._contactShadowObject.userData.ambientOcclusion = false;
58
+ this._parent.add(this._contactShadowObject);
59
+ this.createContactShadow();
60
+ }
61
+ // #endregion Constructors (1)
62
+ // #region Public Getters And Setters (10)
63
+ get blur() {
64
+ return this._blur;
65
+ }
66
+ set blur(value) {
67
+ this._blur = value;
68
+ }
69
+ get darkness() {
70
+ return this._darkness;
71
+ }
72
+ set darkness(value) {
73
+ this._darkness = value;
74
+ }
75
+ get height() {
76
+ return this._height;
77
+ }
78
+ set height(value) {
79
+ this._height = value;
80
+ this._shadowCamera.far = this._currentGridExtents * value;
81
+ this._shadowCamera.updateProjectionMatrix();
82
+ // const cameraHelper = new THREE.CameraHelper(this._shadowCamera);
83
+ // this._parent.add(cameraHelper);
84
+ this._renderingEngine.renderingManager.updateShadowMap();
85
+ }
86
+ get opacity() {
87
+ return this._opacity;
88
+ }
89
+ set opacity(value) {
90
+ this._opacity = value;
91
+ this._plane.material.opacity = value;
92
+ }
93
+ get visible() {
94
+ return this._contactShadowObject.visible;
95
+ }
96
+ set visible(value) {
97
+ this._contactShadowObject.visible = value;
98
+ }
99
+ // #endregion Public Getters And Setters (10)
100
+ // #region Public Methods (3)
101
+ changeSceneExtents(position, divisions, gridExtents) {
102
+ this._currentGridExtents = gridExtents;
103
+ const widthAndHeight = 2 * gridExtents;
104
+ const planeGeometry = new THREE.PlaneGeometry(widthAndHeight, widthAndHeight);
105
+ this._plane.geometry.dispose();
106
+ this._plane.geometry = planeGeometry;
107
+ this._fillPlane.geometry.dispose();
108
+ this._fillPlane.geometry = planeGeometry;
109
+ this._blurPlane.geometry.dispose();
110
+ this._blurPlane.geometry = planeGeometry;
111
+ this._shadowCamera = new THREE.OrthographicCamera(-widthAndHeight / 2, widthAndHeight / 2, widthAndHeight / 2, -widthAndHeight / 2, 0, gridExtents * this._height);
112
+ this._shadowCamera.up.set(0, 1, 0);
113
+ this._shadowCamera.position.set(0, 0, -gridExtents / 50);
114
+ this._shadowCamera.lookAt(0, 0, 1);
115
+ this._shadowCamera.updateProjectionMatrix();
116
+ this._shadowGroup.add(this._shadowCamera);
117
+ // const cameraHelper = new THREE.CameraHelper(this._shadowCamera);
118
+ // this._parent.add(cameraHelper);
119
+ this._contactShadowObject.position.set(position[0], position[1], position[2]);
120
+ this._renderingEngine.renderingManager.updateShadowMap();
121
+ }
122
+ render() {
123
+ const initialGridVisibility = this._renderingEngine.gridVisibility;
124
+ this._renderingEngine.gridVisibility = false;
125
+ const initialGroundPlaneVisibility = this._renderingEngine.groundPlaneVisibility;
126
+ this._renderingEngine.groundPlaneVisibility = false;
127
+ const initialGroundPlaneShadowVisibility = this._renderingEngine.groundPlaneShadowVisibility;
128
+ this._renderingEngine.groundPlaneShadowVisibility = false;
129
+ this._blurPlane.visible = false;
130
+ this._fillPlane.visible = false;
131
+ this._plane.visible = false;
132
+ const excludedObjects = [];
133
+ this._renderingEngine.scene.traverse(function (object) {
134
+ if (object.visible === true) {
135
+ if (object instanceof THREE.Line ||
136
+ object instanceof THREE.LineLoop ||
137
+ object instanceof THREE.LineSegments ||
138
+ object instanceof THREE.Points) {
139
+ excludedObjects.push(object);
140
+ object.visible = false;
141
+ }
142
+ }
143
+ });
144
+ // remove the background
145
+ const initialBackground = this._renderingEngine.scene.background;
146
+ this._renderingEngine.scene.background = null;
147
+ // Apply transparency-aware depth materials to all mesh objects
148
+ this._originalMaterials.clear();
149
+ this._renderingEngine.scene.traverse((object) => {
150
+ if (object instanceof THREE.Mesh && object.material) {
151
+ this._originalMaterials.set(object, object.material);
152
+ object.material = this.createTransparencyAwareDepthMaterial(object.material);
153
+ }
154
+ });
155
+ // set renderer clear alpha
156
+ const initialClearAlpha = this._renderingEngine.renderer.getClearAlpha();
157
+ this._renderingEngine.renderer.setClearAlpha(0);
158
+ // render to the render target to get the depths
159
+ this._renderingEngine.renderer.setRenderTarget(this._renderTarget);
160
+ this._renderingEngine.renderer.render(this._renderingEngine.scene, this._shadowCamera);
161
+ // Restore original materials
162
+ this._originalMaterials.forEach((originalMaterial, object) => {
163
+ if (object instanceof THREE.Mesh) {
164
+ object.material = originalMaterial;
165
+ }
166
+ });
167
+ this._originalMaterials.clear();
168
+ this.blurShadow(this._blur);
169
+ // // a second pass to reduce the artifacts
170
+ // // (0.4 is the minimum blur amount so that the artifacts are gone)
171
+ this.blurShadow(this._blur * 0.4);
172
+ // reset and render the normal scene
173
+ this._renderingEngine.renderer.setRenderTarget(null);
174
+ this._renderingEngine.renderer.setClearAlpha(initialClearAlpha);
175
+ this._renderingEngine.scene.background = initialBackground;
176
+ for (const object of excludedObjects)
177
+ object.visible = true;
178
+ this._plane.visible = true;
179
+ this._renderingEngine.gridVisibility = initialGridVisibility;
180
+ this._renderingEngine.groundPlaneVisibility =
181
+ initialGroundPlaneVisibility;
182
+ this._renderingEngine.groundPlaneShadowVisibility =
183
+ initialGroundPlaneShadowVisibility;
184
+ }
185
+ updatePosition(position) {
186
+ this._contactShadowObject.position.set(position[0], position[1], position[2]);
187
+ }
188
+ // #endregion Public Methods (3)
189
+ // #region Private Methods (3)
190
+ createTransparencyAwareDepthMaterial(originalMaterial) {
191
+ let materialOpacity = 1.0;
192
+ let isTransparent = false;
193
+ // Extract opacity and transparency from the original material
194
+ if (Array.isArray(originalMaterial)) {
195
+ // For multi-materials, use the opacity of the first material that has opacity
196
+ const materialWithOpacity = originalMaterial.find((mat) => "opacity" in mat &&
197
+ typeof mat.opacity === "number");
198
+ if (materialWithOpacity) {
199
+ materialOpacity = materialWithOpacity.opacity;
200
+ isTransparent =
201
+ materialWithOpacity.transparent ||
202
+ materialOpacity < 1.0;
203
+ }
204
+ }
205
+ else if ("opacity" in originalMaterial &&
206
+ typeof originalMaterial.opacity === "number") {
207
+ materialOpacity = originalMaterial.opacity;
208
+ isTransparent =
209
+ originalMaterial.transparent || materialOpacity < 1.0;
210
+ }
211
+ // If the material is not transparent or has full opacity, treat it as opaque for shadows
212
+ if (!isTransparent || materialOpacity >= 1.0) {
213
+ materialOpacity = 1.0;
214
+ }
215
+ // Calculate adjusted darkness based on material opacity
216
+ const adjustedDarkness = this._darkness * materialOpacity;
217
+ // Create a new depth material for this specific object
218
+ const depthMaterial = new THREE.MeshDepthMaterial();
219
+ depthMaterial.side = THREE.DoubleSide;
220
+ depthMaterial.userData.darkness = { value: adjustedDarkness };
221
+ depthMaterial.onBeforeCompile = (shader) => {
222
+ shader.uniforms.darkness = depthMaterial.userData.darkness;
213
223
  shader.fragmentShader = /* glsl */ `
214
224
  uniform float darkness;
215
225
  ${shader.fragmentShader.replace("gl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );", "gl_FragColor = vec4( vec3( 0.0 ), ( 1.0 - fragCoordZ ) * darkness );")}
216
- `;
217
- };
218
- depthMaterial.depthTest = false;
219
- depthMaterial.depthWrite = false;
220
- return depthMaterial;
221
- }
222
- blurShadow(amount) {
223
- this._blurPlane.visible = true;
224
- // blur horizontally and draw in the renderTargetBlur
225
- this._blurPlane.material = this._horizontalBlurMaterial;
226
- this._blurPlane.material.uniforms.tDiffuse.value = this._renderTarget.texture;
227
- this._horizontalBlurMaterial.uniforms.h.value = (amount * 1) / 256;
228
- this._renderingEngine.renderer.setRenderTarget(this._renderTargetBlur);
229
- this._renderingEngine.renderer.render(this._blurPlane, this._shadowCamera);
230
- // blur vertically and draw in the main renderTarget
231
- this._blurPlane.material = this._verticalBlurMaterial;
232
- this._blurPlane.material.uniforms.tDiffuse.value = this._renderTargetBlur.texture;
233
- this._verticalBlurMaterial.uniforms.v.value = (amount * 1) / 256;
234
- this._renderingEngine.renderer.setRenderTarget(this._renderTarget);
235
- this._renderingEngine.renderer.render(this._blurPlane, this._shadowCamera);
236
- this._blurPlane.visible = false;
237
- }
238
- createContactShadow() {
239
- const widthAndHeight = 1;
240
- // the container, if you need to move the plane just move this
241
- this._shadowGroup = new THREE.Group();
242
- this._contactShadowObject.add(this._shadowGroup);
243
- // the render target that will show the shadows in the plane texture
244
- this._renderTarget = new THREE.WebGLRenderTarget(512, 512);
245
- this._renderTarget.texture.generateMipmaps = false;
246
- // the render target that we will use to blur the first render target
247
- this._renderTargetBlur = new THREE.WebGLRenderTarget(512, 512);
248
- this._renderTargetBlur.texture.generateMipmaps = false;
249
- // make a plane and make it face up
250
- const planeGeometry = new THREE.PlaneGeometry(widthAndHeight, widthAndHeight);
251
- const planeMaterial = new THREE.MeshBasicMaterial({
252
- map: this._renderTarget.texture,
253
- opacity: this._opacity,
254
- transparent: true,
255
- depthWrite: false,
256
- });
257
- this._plane = new THREE.Mesh(planeGeometry, planeMaterial);
258
- // make sure it's rendered after the fillPlane
259
- this._plane.renderOrder = 1;
260
- this._shadowGroup.add(this._plane);
261
- // // the y from the texture is flipped!
262
- // this._plane.rotateZ(-Math.PI/2);
263
- this._plane.scale.x = -1;
264
- // this._plane.scale.y = -1;
265
- // the plane onto which to blur the texture
266
- this._blurPlane = new THREE.Mesh(planeGeometry);
267
- this._blurPlane.rotateX(Math.PI);
268
- this._blurPlane.visible = false;
269
- this._shadowGroup.add(this._blurPlane);
270
- // the plane with the color of the ground
271
- const fillPlaneMaterial = new THREE.MeshBasicMaterial({
272
- color: this._color,
273
- opacity: 0,
274
- transparent: true,
275
- depthWrite: false,
276
- });
277
- this._fillPlane = new THREE.Mesh(planeGeometry, fillPlaneMaterial);
278
- this._shadowGroup.add(this._fillPlane);
279
- // the camera to render the depth material from
280
- this._shadowCamera = new THREE.OrthographicCamera(-widthAndHeight / 2, widthAndHeight / 2, widthAndHeight / 2, -widthAndHeight / 2, 0, 1);
281
- this._shadowGroup.add(this._shadowCamera);
282
- this._horizontalBlurMaterial = new THREE.ShaderMaterial(HorizontalBlurShader_js_1.HorizontalBlurShader);
283
- this._horizontalBlurMaterial.depthTest = false;
284
- this._verticalBlurMaterial = new THREE.ShaderMaterial(VerticalBlurShader_js_1.VerticalBlurShader);
285
- this._verticalBlurMaterial.depthTest = false;
286
- }
287
- }
288
- exports.ContactShadow = ContactShadow;
226
+ `;
227
+ };
228
+ depthMaterial.depthTest = false;
229
+ depthMaterial.depthWrite = false;
230
+ return depthMaterial;
231
+ }
232
+ blurShadow(amount) {
233
+ this._blurPlane.visible = true;
234
+ // blur horizontally and draw in the renderTargetBlur
235
+ this._blurPlane.material = this._horizontalBlurMaterial;
236
+ this._blurPlane.material.uniforms.tDiffuse.value = this._renderTarget.texture;
237
+ this._horizontalBlurMaterial.uniforms.h.value = (amount * 1) / 256;
238
+ this._renderingEngine.renderer.setRenderTarget(this._renderTargetBlur);
239
+ this._renderingEngine.renderer.render(this._blurPlane, this._shadowCamera);
240
+ // blur vertically and draw in the main renderTarget
241
+ this._blurPlane.material = this._verticalBlurMaterial;
242
+ this._blurPlane.material.uniforms.tDiffuse.value = this._renderTargetBlur.texture;
243
+ this._verticalBlurMaterial.uniforms.v.value = (amount * 1) / 256;
244
+ this._renderingEngine.renderer.setRenderTarget(this._renderTarget);
245
+ this._renderingEngine.renderer.render(this._blurPlane, this._shadowCamera);
246
+ this._blurPlane.visible = false;
247
+ }
248
+ createContactShadow() {
249
+ const widthAndHeight = 1;
250
+ // the container, if you need to move the plane just move this
251
+ this._shadowGroup = new THREE.Group();
252
+ this._contactShadowObject.add(this._shadowGroup);
253
+ // the render target that will show the shadows in the plane texture
254
+ this._renderTarget = new THREE.WebGLRenderTarget(512, 512);
255
+ this._renderTarget.texture.generateMipmaps = false;
256
+ // the render target that we will use to blur the first render target
257
+ this._renderTargetBlur = new THREE.WebGLRenderTarget(512, 512);
258
+ this._renderTargetBlur.texture.generateMipmaps = false;
259
+ // make a plane and make it face up
260
+ const planeGeometry = new THREE.PlaneGeometry(widthAndHeight, widthAndHeight);
261
+ const planeMaterial = new THREE.MeshBasicMaterial({
262
+ map: this._renderTarget.texture,
263
+ opacity: this._opacity,
264
+ transparent: true,
265
+ depthWrite: false,
266
+ });
267
+ this._plane = new THREE.Mesh(planeGeometry, planeMaterial);
268
+ // make sure it's rendered after the fillPlane
269
+ this._plane.renderOrder = 1;
270
+ this._shadowGroup.add(this._plane);
271
+ // // the y from the texture is flipped!
272
+ // this._plane.rotateZ(-Math.PI/2);
273
+ this._plane.scale.x = -1;
274
+ // this._plane.scale.y = -1;
275
+ // the plane onto which to blur the texture
276
+ this._blurPlane = new THREE.Mesh(planeGeometry);
277
+ this._blurPlane.rotateX(Math.PI);
278
+ this._blurPlane.visible = false;
279
+ this._shadowGroup.add(this._blurPlane);
280
+ // the plane with the color of the ground
281
+ const fillPlaneMaterial = new THREE.MeshBasicMaterial({
282
+ color: this._color,
283
+ opacity: 0,
284
+ transparent: true,
285
+ depthWrite: false,
286
+ });
287
+ this._fillPlane = new THREE.Mesh(planeGeometry, fillPlaneMaterial);
288
+ this._shadowGroup.add(this._fillPlane);
289
+ // the camera to render the depth material from
290
+ this._shadowCamera = new THREE.OrthographicCamera(-widthAndHeight / 2, widthAndHeight / 2, widthAndHeight / 2, -widthAndHeight / 2, 0, 1);
291
+ this._shadowGroup.add(this._shadowCamera);
292
+ this._horizontalBlurMaterial = new THREE.ShaderMaterial(HorizontalBlurShader_js_1.HorizontalBlurShader);
293
+ this._horizontalBlurMaterial.depthTest = false;
294
+ this._verticalBlurMaterial = new THREE.ShaderMaterial(VerticalBlurShader_js_1.VerticalBlurShader);
295
+ this._verticalBlurMaterial.depthTest = false;
296
+ }
297
+ }
298
+ exports.ContactShadow = ContactShadow;
289
299
  //# sourceMappingURL=ContactShadow.js.map