@woosh/meep-engine 2.141.0 → 2.142.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.
- package/package.json +1 -1
- package/src/engine/control/first-person/prototype_first_person_controller.js +5 -0
- package/src/engine/graphics/render/buffer/simple-fx/ao/AmbientOcclusionPostProcessEffect.d.ts.map +1 -1
- package/src/engine/graphics/render/buffer/simple-fx/ao/AmbientOcclusionPostProcessEffect.js +67 -42
- package/src/engine/graphics/render/buffer/simple-fx/ao/SAOShader.d.ts +12 -22
- package/src/engine/graphics/render/buffer/simple-fx/ao/SAOShader.d.ts.map +1 -1
- package/src/engine/graphics/render/buffer/simple-fx/ao/SAOShader.js +340 -186
- package/src/engine/graphics/render/buffer/simple-fx/ao/SAOUpscaleShader.d.ts +44 -0
- package/src/engine/graphics/render/buffer/simple-fx/ao/SAOUpscaleShader.d.ts.map +1 -0
- package/src/engine/graphics/render/buffer/simple-fx/ao/SAOUpscaleShader.js +151 -0
- package/src/engine/graphics/render/buffer/simple-fx/ao/generateHilbertNoiseTexture.d.ts +14 -0
- package/src/engine/graphics/render/buffer/simple-fx/ao/generateHilbertNoiseTexture.d.ts.map +1 -0
- package/src/engine/graphics/render/buffer/simple-fx/ao/generateHilbertNoiseTexture.js +78 -0
- package/src/engine/physics/PLAN.md +705 -578
- package/src/engine/physics/REVIEW_003.md +166 -0
- package/src/engine/physics/constraint/solve_constraints.d.ts +24 -2
- package/src/engine/physics/constraint/solve_constraints.d.ts.map +1 -1
- package/src/engine/physics/constraint/solve_constraints.js +402 -165
- package/src/engine/physics/ecs/Joint.d.ts +115 -0
- package/src/engine/physics/ecs/Joint.d.ts.map +1 -1
- package/src/engine/physics/ecs/Joint.js +168 -0
- package/src/engine/physics/narrowphase/ray_shapes.d.ts +66 -0
- package/src/engine/physics/narrowphase/ray_shapes.d.ts.map +1 -0
- package/src/engine/physics/narrowphase/ray_shapes.js +187 -0
- package/src/engine/physics/narrowphase/refine_ray_concave.d.ts +16 -0
- package/src/engine/physics/narrowphase/refine_ray_concave.d.ts.map +1 -0
- package/src/engine/physics/narrowphase/refine_ray_concave.js +145 -0
- package/src/engine/physics/narrowphase/refine_ray_hit.d.ts +39 -0
- package/src/engine/physics/narrowphase/refine_ray_hit.d.ts.map +1 -0
- package/src/engine/physics/narrowphase/refine_ray_hit.js +78 -0
- package/src/engine/physics/queries/raycast.d.ts +11 -9
- package/src/engine/physics/queries/raycast.d.ts.map +1 -1
- package/src/engine/physics/queries/raycast.js +108 -159
- package/src/engine/physics/vehicle/RaycastVehicle.d.ts +114 -0
- package/src/engine/physics/vehicle/RaycastVehicle.d.ts.map +1 -0
- package/src/engine/physics/vehicle/RaycastVehicle.js +333 -0
package/package.json
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
"description": "Pure JavaScript game engine. Fully featured and production ready.",
|
|
7
7
|
"type": "module",
|
|
8
8
|
"author": "Alexander Goldring",
|
|
9
|
-
"version": "2.
|
|
9
|
+
"version": "2.142.0",
|
|
10
10
|
"main": "build/meep.module.js",
|
|
11
11
|
"module": "build/meep.module.js",
|
|
12
12
|
"exports": {
|
|
@@ -16,6 +16,9 @@ import { CameraSystem } from "../../graphics/ecs/camera/CameraSystem.js";
|
|
|
16
16
|
import { ShadedGeometry } from "../../graphics/ecs/mesh-v2/ShadedGeometry.js";
|
|
17
17
|
import { ShadedGeometryFlags } from "../../graphics/ecs/mesh-v2/ShadedGeometryFlags.js";
|
|
18
18
|
import { ShadedGeometrySystem } from "../../graphics/ecs/mesh-v2/ShadedGeometrySystem.js";
|
|
19
|
+
import {
|
|
20
|
+
AmbientOcclusionPostProcessEffect
|
|
21
|
+
} from "../../graphics/render/buffer/simple-fx/ao/AmbientOcclusionPostProcessEffect.js";
|
|
19
22
|
import InputController from "../../input/ecs/components/InputController.js";
|
|
20
23
|
import InputControllerSystem from "../../input/ecs/systems/InputControllerSystem.js";
|
|
21
24
|
import { BodyKind } from "../../physics/ecs/BodyKind.js";
|
|
@@ -97,6 +100,8 @@ async function main(engine) {
|
|
|
97
100
|
sunShadowDistance: 30,
|
|
98
101
|
});
|
|
99
102
|
|
|
103
|
+
engine.plugins.acquire(AmbientOcclusionPostProcessEffect);
|
|
104
|
+
|
|
100
105
|
if (em.getSystem(CameraSystem) === null) {
|
|
101
106
|
await em.addSystem(new CameraSystem(engine.graphics));
|
|
102
107
|
}
|
package/src/engine/graphics/render/buffer/simple-fx/ao/AmbientOcclusionPostProcessEffect.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AmbientOcclusionPostProcessEffect.d.ts","sourceRoot":"","sources":["../../../../../../../../src/engine/graphics/render/buffer/simple-fx/ao/AmbientOcclusionPostProcessEffect.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"AmbientOcclusionPostProcessEffect.d.ts","sourceRoot":"","sources":["../../../../../../../../src/engine/graphics/render/buffer/simple-fx/ao/AmbientOcclusionPostProcessEffect.js"],"names":[],"mappings":"AAoBA;IAIQ,WAA0C;IAI1C,2BAQE;IAyBF;;;;OAIG;IACH,sBAA0B;IAE1B;;;;OAIG;IACH,2BAA6B;IAG7B;;;;OAIG;IACH,yBAA4B;IAE5B;;;;OAIG;IACH,wBAA2B;IAE3B,8CAUE;IAEF;;;;OAIG;IACH,uBAAwB;IAExB;;;;;OAKG;IACH,2BASE;IAKF;;;;OAIG;IACH,0BAAwD;IAK5D;;;OAGG;IACH,2BAEC;IAED;;;OAGG;IACH,wBAEC;IAED;;;;OAIG;IACH,oBAeC;IAED,iBAEC;IAED,2BAkCC;IAED,uBASC;IAED;;;OAGG;IACH,iBAwBC;IAED;;;OAGG;IACH,4BAFW,OAAO,QAiCjB;IAED;;;;OAIG;IACH,gCASC;IAED;;;;OAIG;IACH,mCAUC;IAGD,oCAcC;IAED,wBA2CC;IAED,yBAiBC;CAEJ;6BA/Y4B,uCAAuC;+BAD7D,OAAO;6CAAP,OAAO"}
|
|
@@ -14,8 +14,9 @@ import { CompositLayer } from "../../../../composit/CompositLayer.js";
|
|
|
14
14
|
import { StandardFrameBuffers } from "../../../../StandardFrameBuffers.js";
|
|
15
15
|
import { BlendingType } from "../../../../texture/sampler/BlendingType.js";
|
|
16
16
|
import { renderScreenSpace } from "../../../utils/renderScreenSpace.js";
|
|
17
|
-
import {
|
|
17
|
+
import { generateHilbertNoiseTexture } from "./generateHilbertNoiseTexture.js";
|
|
18
18
|
import { SAOShader } from "./SAOShader.js";
|
|
19
|
+
import { SAOUpscaleShader } from "./SAOUpscaleShader.js";
|
|
19
20
|
|
|
20
21
|
export class AmbientOcclusionPostProcessEffect extends EnginePlugin {
|
|
21
22
|
constructor() {
|
|
@@ -37,11 +38,12 @@ export class AmbientOcclusionPostProcessEffect extends EnginePlugin {
|
|
|
37
38
|
|
|
38
39
|
// AO parameters
|
|
39
40
|
const uniforms = this.__material.uniforms;
|
|
40
|
-
uniforms.bias.value = 0.5;
|
|
41
|
-
uniforms.intensity.value = 2;
|
|
42
41
|
|
|
43
|
-
|
|
44
|
-
uniforms.
|
|
42
|
+
// artistic darkening control; 1.0 == physically plausible
|
|
43
|
+
uniforms.intensity.value = 1.0;
|
|
44
|
+
|
|
45
|
+
// sampling hemisphere radius (also the max occluder distance), in world units (scene dependent)
|
|
46
|
+
uniforms.kernelRadius.value = 0.5;
|
|
45
47
|
|
|
46
48
|
this.__material.blending = NoBlending;
|
|
47
49
|
|
|
@@ -55,10 +57,7 @@ export class AmbientOcclusionPostProcessEffect extends EnginePlugin {
|
|
|
55
57
|
defines.PERSPECTIVE_CAMERA = 1;
|
|
56
58
|
|
|
57
59
|
// More samples = better quality
|
|
58
|
-
defines.NUM_SAMPLES =
|
|
59
|
-
|
|
60
|
-
// More rings = better quality
|
|
61
|
-
defines.NUM_RINGS = 5;
|
|
60
|
+
defines.NUM_SAMPLES = 24;
|
|
62
61
|
|
|
63
62
|
/**
|
|
64
63
|
* Should normal buffer be used or not? Using normal buffer might be significantly more expensive, as this would require normal buffer to be built every frame. If there are other users of the buffer - this is not an issue
|
|
@@ -109,11 +108,33 @@ export class AmbientOcclusionPostProcessEffect extends EnginePlugin {
|
|
|
109
108
|
this.__used_buffers = [];
|
|
110
109
|
|
|
111
110
|
/**
|
|
112
|
-
*
|
|
113
|
-
*
|
|
111
|
+
* Edge-aware upscale + denoise: a single non-separable pass that resolves the half-res AO
|
|
112
|
+
* into the full-res composit layer using plane-distance weights.
|
|
113
|
+
* @type {ShaderMaterial}
|
|
114
|
+
* @private
|
|
115
|
+
*/
|
|
116
|
+
this.__upscale_material = new ShaderMaterial({
|
|
117
|
+
defines: Object.assign({}, SAOUpscaleShader.defines),
|
|
118
|
+
fragmentShader: SAOUpscaleShader.fragmentShader,
|
|
119
|
+
vertexShader: SAOUpscaleShader.vertexShader,
|
|
120
|
+
uniforms: UniformsUtils.clone(SAOUpscaleShader.uniforms),
|
|
121
|
+
glslVersion: GLSL3,
|
|
122
|
+
depthWrite: false,
|
|
123
|
+
depthTest: false,
|
|
124
|
+
blending: NoBlending
|
|
125
|
+
});
|
|
126
|
+
this.__upscale_material.extensions.derivatives = true;
|
|
127
|
+
// depth is stored unpacked, matching the AO material
|
|
128
|
+
this.__upscale_material.defines.DEPTH_PACKING = 0;
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* Hilbert-index permutation LUT, shared by the AO sampling and upscale dithers.
|
|
132
|
+
* @type {DataTexture}
|
|
114
133
|
* @private
|
|
115
134
|
*/
|
|
116
|
-
this.
|
|
135
|
+
this.__hilbert_texture = generateHilbertNoiseTexture(64);
|
|
136
|
+
this.__material.uniforms.tHilbert.value = this.__hilbert_texture;
|
|
137
|
+
this.__upscale_material.uniforms.tHilbert.value = this.__hilbert_texture;
|
|
117
138
|
}
|
|
118
139
|
|
|
119
140
|
/**
|
|
@@ -140,29 +161,18 @@ export class AmbientOcclusionPostProcessEffect extends EnginePlugin {
|
|
|
140
161
|
__setCamera(camera) {
|
|
141
162
|
this.__render_camera = camera;
|
|
142
163
|
|
|
143
|
-
const
|
|
144
|
-
const defines = material.defines;
|
|
145
|
-
|
|
146
|
-
if (camera.isPerspectiveCamera === true && defines.PERSPECTIVE_CAMERA !== 1) {
|
|
147
|
-
defines.PERSPECTIVE_CAMERA = 1;
|
|
164
|
+
const desired = camera.isPerspectiveCamera === true ? 1 : 0;
|
|
148
165
|
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
defines.PERSPECTIVE_CAMERA
|
|
166
|
+
// the AO and upscale materials both reconstruct view-Z, so both track the projection type
|
|
167
|
+
const materials = [this.__material, this.__upscale_material];
|
|
168
|
+
for (const material of materials) {
|
|
169
|
+
if (material.defines.PERSPECTIVE_CAMERA !== desired) {
|
|
170
|
+
material.defines.PERSPECTIVE_CAMERA = desired;
|
|
153
171
|
|
|
154
|
-
|
|
155
|
-
|
|
172
|
+
// material has changed and will need to be re-compiled
|
|
173
|
+
material.needsUpdate = true;
|
|
174
|
+
}
|
|
156
175
|
}
|
|
157
|
-
|
|
158
|
-
this.__blur.setRenderCamera(camera);
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
initialize(engine) {
|
|
162
|
-
|
|
163
|
-
this.__blur.configureMaterials();
|
|
164
|
-
|
|
165
|
-
super.initialize(engine);
|
|
166
176
|
}
|
|
167
177
|
|
|
168
178
|
finalize() {
|
|
@@ -192,6 +202,17 @@ export class AmbientOcclusionPostProcessEffect extends EnginePlugin {
|
|
|
192
202
|
|
|
193
203
|
// trigger uniform update
|
|
194
204
|
material.uniformsNeedUpdate = true;
|
|
205
|
+
|
|
206
|
+
// upscale runs at full resolution (the composit layer), reading the half-res AO target
|
|
207
|
+
const upscale = this.__upscale_material;
|
|
208
|
+
const upscaleUniforms = upscale.uniforms;
|
|
209
|
+
const output = this.__composit_layer.renderTarget;
|
|
210
|
+
|
|
211
|
+
upscaleUniforms.size.value.set(output.width, output.height);
|
|
212
|
+
upscaleUniforms.cameraNear.value = near;
|
|
213
|
+
upscaleUniforms.cameraFar.value = far;
|
|
214
|
+
|
|
215
|
+
upscale.uniformsNeedUpdate = true;
|
|
195
216
|
}
|
|
196
217
|
|
|
197
218
|
__prepare_draw() {
|
|
@@ -219,17 +240,20 @@ export class AmbientOcclusionPostProcessEffect extends EnginePlugin {
|
|
|
219
240
|
|
|
220
241
|
const __old_state_rt = renderer.getRenderTarget();
|
|
221
242
|
|
|
222
|
-
//
|
|
243
|
+
// render AO at half resolution
|
|
223
244
|
renderer.setRenderTarget(this.__render_target);
|
|
224
245
|
renderer.clearColor();
|
|
225
246
|
|
|
226
247
|
renderScreenSpace(renderer, this.__material);
|
|
227
248
|
|
|
228
|
-
//
|
|
229
|
-
|
|
249
|
+
// edge-aware upscale + denoise into the full-res composit layer (single non-separable pass;
|
|
250
|
+
// the fullscreen draw writes every pixel, so no clear is required)
|
|
251
|
+
renderer.setRenderTarget(this.__composit_layer.renderTarget);
|
|
252
|
+
|
|
253
|
+
renderScreenSpace(renderer, this.__upscale_material);
|
|
230
254
|
|
|
231
|
-
//
|
|
232
|
-
|
|
255
|
+
// restore rt
|
|
256
|
+
renderer.setRenderTarget(__old_state_rt);
|
|
233
257
|
}
|
|
234
258
|
|
|
235
259
|
/**
|
|
@@ -356,10 +380,10 @@ export class AmbientOcclusionPostProcessEffect extends EnginePlugin {
|
|
|
356
380
|
|
|
357
381
|
this.__update_render_target_size();
|
|
358
382
|
|
|
359
|
-
//
|
|
360
|
-
this.
|
|
361
|
-
|
|
362
|
-
|
|
383
|
+
// bind upscale inputs: half-res AO target + full-res depth
|
|
384
|
+
const upscaleUniforms = this.__upscale_material.uniforms;
|
|
385
|
+
upscaleUniforms.tAO.value = this.__render_target.texture;
|
|
386
|
+
upscaleUniforms.tDepth.value = depthTexture;
|
|
363
387
|
|
|
364
388
|
return super.startup();
|
|
365
389
|
}
|
|
@@ -376,7 +400,8 @@ export class AmbientOcclusionPostProcessEffect extends EnginePlugin {
|
|
|
376
400
|
graphics.viewport.size.onChanged.add(this.__update_render_target_size, this);
|
|
377
401
|
|
|
378
402
|
// release memory
|
|
379
|
-
this.
|
|
403
|
+
this.__upscale_material.dispose();
|
|
404
|
+
this.__hilbert_texture.dispose();
|
|
380
405
|
this.__render_target.dispose();
|
|
381
406
|
|
|
382
407
|
return super.shutdown();
|
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
export namespace SAOShader {
|
|
2
2
|
namespace defines {
|
|
3
3
|
let NUM_SAMPLES: number;
|
|
4
|
-
let NUM_RINGS: number;
|
|
5
4
|
let NORMAL_TEXTURE: number;
|
|
6
|
-
let DIFFUSE_TEXTURE: number;
|
|
7
5
|
let DEPTH_PACKING: number;
|
|
8
6
|
let PERSPECTIVE_CAMERA: number;
|
|
9
7
|
}
|
|
@@ -15,46 +13,38 @@ export namespace SAOShader {
|
|
|
15
13
|
let value_1: any;
|
|
16
14
|
export { value_1 as value };
|
|
17
15
|
}
|
|
18
|
-
namespace
|
|
19
|
-
let value_2:
|
|
16
|
+
namespace tHilbert {
|
|
17
|
+
let value_2: any;
|
|
20
18
|
export { value_2 as value };
|
|
21
19
|
}
|
|
22
|
-
namespace
|
|
23
|
-
let value_3:
|
|
20
|
+
namespace size {
|
|
21
|
+
let value_3: Vector2;
|
|
24
22
|
export { value_3 as value };
|
|
25
23
|
}
|
|
26
|
-
namespace
|
|
24
|
+
namespace cameraNear {
|
|
27
25
|
let value_4: number;
|
|
28
26
|
export { value_4 as value };
|
|
29
27
|
}
|
|
30
|
-
namespace
|
|
31
|
-
let value_5:
|
|
28
|
+
namespace cameraFar {
|
|
29
|
+
let value_5: number;
|
|
32
30
|
export { value_5 as value };
|
|
33
31
|
}
|
|
34
|
-
namespace
|
|
32
|
+
namespace cameraProjectionMatrix {
|
|
35
33
|
let value_6: Matrix4;
|
|
36
34
|
export { value_6 as value };
|
|
37
35
|
}
|
|
38
|
-
namespace
|
|
39
|
-
let value_7:
|
|
36
|
+
namespace cameraInverseProjectionMatrix {
|
|
37
|
+
let value_7: Matrix4;
|
|
40
38
|
export { value_7 as value };
|
|
41
39
|
}
|
|
42
|
-
namespace
|
|
40
|
+
namespace intensity {
|
|
43
41
|
let value_8: number;
|
|
44
42
|
export { value_8 as value };
|
|
45
43
|
}
|
|
46
|
-
namespace
|
|
44
|
+
namespace kernelRadius {
|
|
47
45
|
let value_9: number;
|
|
48
46
|
export { value_9 as value };
|
|
49
47
|
}
|
|
50
|
-
namespace kernelRadius {
|
|
51
|
-
let value_10: number;
|
|
52
|
-
export { value_10 as value };
|
|
53
|
-
}
|
|
54
|
-
namespace randomSeed {
|
|
55
|
-
let value_11: number;
|
|
56
|
-
export { value_11 as value };
|
|
57
|
-
}
|
|
58
48
|
}
|
|
59
49
|
let vertexShader: string;
|
|
60
50
|
let fragmentShader: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SAOShader.d.ts","sourceRoot":"","sources":["../../../../../../../../src/engine/graphics/render/buffer/simple-fx/ao/SAOShader.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"SAOShader.d.ts","sourceRoot":"","sources":["../../../../../../../../src/engine/graphics/render/buffer/simple-fx/ao/SAOShader.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wBAAiC,OAAO;wBAAP,OAAO"}
|