@needle-tools/engine 2.51.0-pre → 2.53.0-pre
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/CHANGELOG.md +18 -0
- package/dist/needle-engine.d.ts +243 -56
- package/dist/needle-engine.js +380 -381
- package/dist/needle-engine.js.map +4 -4
- package/dist/needle-engine.min.js +41 -42
- package/dist/needle-engine.min.js.map +4 -4
- package/lib/engine/engine_components.js +2 -2
- package/lib/engine/engine_components.js.map +1 -1
- package/lib/engine/engine_networking_instantiate.d.ts +1 -1
- package/lib/engine/engine_networking_instantiate.js +3 -0
- package/lib/engine/engine_networking_instantiate.js.map +1 -1
- package/lib/engine/engine_serialization_builtin_serializer.d.ts +6 -0
- package/lib/engine/engine_serialization_builtin_serializer.js +31 -6
- package/lib/engine/engine_serialization_builtin_serializer.js.map +1 -1
- package/lib/engine/engine_serialization_core.d.ts +1 -0
- package/lib/engine/engine_serialization_core.js +6 -0
- package/lib/engine/engine_serialization_core.js.map +1 -1
- package/lib/engine/engine_setup.js +2 -2
- package/lib/engine/engine_setup.js.map +1 -1
- package/lib/engine/engine_texture.d.ts +3 -0
- package/lib/engine/engine_texture.js +4 -0
- package/lib/engine/engine_texture.js.map +1 -0
- package/lib/engine/engine_utils.d.ts +2 -0
- package/lib/engine/engine_utils.js +9 -0
- package/lib/engine/engine_utils.js.map +1 -1
- package/lib/engine/extensions/{NEEDLE_deferred_texture.d.ts → NEEDLE_progressive.d.ts} +2 -2
- package/lib/engine/extensions/{NEEDLE_deferred_texture.js → NEEDLE_progressive.js} +10 -9
- package/lib/engine/extensions/NEEDLE_progressive.js.map +1 -0
- package/lib/engine/extensions/extensions.js +2 -2
- package/lib/engine/extensions/extensions.js.map +1 -1
- package/lib/engine-components/Camera.d.ts +8 -2
- package/lib/engine-components/Camera.js +56 -4
- package/lib/engine-components/Camera.js.map +1 -1
- package/lib/engine-components/EventTrigger.d.ts +10 -1
- package/lib/engine-components/EventTrigger.js +47 -0
- package/lib/engine-components/EventTrigger.js.map +1 -1
- package/lib/engine-components/Light.js +6 -2
- package/lib/engine-components/Light.js.map +1 -1
- package/lib/engine-components/OrbitControls.js +6 -2
- package/lib/engine-components/OrbitControls.js.map +1 -1
- package/lib/engine-components/ParticleSystemModules.js +0 -1
- package/lib/engine-components/ParticleSystemModules.js.map +1 -1
- package/lib/engine-components/Renderer.d.ts +1 -0
- package/lib/engine-components/Renderer.js +13 -6
- package/lib/engine-components/Renderer.js.map +1 -1
- package/lib/engine-components/ShadowCatcher.js +5 -6
- package/lib/engine-components/ShadowCatcher.js.map +1 -1
- package/lib/engine-components/Skybox.d.ts +1 -0
- package/lib/engine-components/Skybox.js +5 -0
- package/lib/engine-components/Skybox.js.map +1 -1
- package/lib/engine-components/SpriteRenderer.d.ts +19 -3
- package/lib/engine-components/SpriteRenderer.js +154 -41
- package/lib/engine-components/SpriteRenderer.js.map +1 -1
- package/lib/engine-components/Voip.js +13 -4
- package/lib/engine-components/Voip.js.map +1 -1
- package/lib/engine-components/WebXRRig.js +12 -0
- package/lib/engine-components/WebXRRig.js.map +1 -1
- package/lib/engine-components/codegen/components.d.ts +7 -2
- package/lib/engine-components/codegen/components.js +7 -2
- package/lib/engine-components/codegen/components.js.map +1 -1
- package/lib/engine-components/export/{GltfExport.d.ts → gltf/GltfExport.d.ts} +2 -2
- package/lib/engine-components/export/{GltfExport.js → gltf/GltfExport.js} +7 -7
- package/lib/engine-components/export/gltf/GltfExport.js.map +1 -0
- package/lib/engine-components/export/usdz/Extension.d.ts +9 -0
- package/lib/engine-components/export/usdz/Extension.js +2 -0
- package/lib/engine-components/export/usdz/Extension.js.map +1 -0
- package/lib/engine-components/export/usdz/USDZExporter.d.ts +25 -0
- package/lib/engine-components/export/usdz/USDZExporter.js +193 -0
- package/lib/engine-components/export/usdz/USDZExporter.js.map +1 -0
- package/lib/engine-components/export/usdz/extensions/Animation.d.ts +44 -0
- package/lib/engine-components/export/usdz/extensions/Animation.js +264 -0
- package/lib/engine-components/export/usdz/extensions/Animation.js.map +1 -0
- package/lib/engine-components/export/usdz/types.d.ts +34 -0
- package/lib/engine-components/export/usdz/types.js +2 -0
- package/lib/engine-components/export/usdz/types.js.map +1 -0
- package/lib/engine-components/export/usdz/utils/animationutils.d.ts +3 -0
- package/lib/engine-components/export/usdz/utils/animationutils.js +46 -0
- package/lib/engine-components/export/usdz/utils/animationutils.js.map +1 -0
- package/lib/engine-components/export/usdz/utils/quicklook.d.ts +2 -0
- package/lib/engine-components/export/usdz/utils/quicklook.js +36 -0
- package/lib/engine-components/export/usdz/utils/quicklook.js.map +1 -0
- package/lib/engine-components/export/usdz/utils/timeutils.d.ts +1 -0
- package/lib/engine-components/export/usdz/utils/timeutils.js +15 -0
- package/lib/engine-components/export/usdz/utils/timeutils.js.map +1 -0
- package/lib/engine-components/timeline/PlayableDirector.js +6 -0
- package/lib/engine-components/timeline/PlayableDirector.js.map +1 -1
- package/lib/engine-components/ui/Graphic.d.ts +2 -0
- package/lib/engine-components/ui/Graphic.js +15 -0
- package/lib/engine-components/ui/Graphic.js.map +1 -1
- package/lib/engine-components/ui/Utils.d.ts +2 -1
- package/lib/engine-components/ui/Utils.js +5 -3
- package/lib/engine-components/ui/Utils.js.map +1 -1
- package/package.json +2 -2
- package/src/engine/codegen/register_types.js +16 -6
- package/src/engine/engine_components.ts +2 -2
- package/src/engine/engine_networking_instantiate.ts +4 -1
- package/src/engine/engine_serialization_builtin_serializer.ts +35 -7
- package/src/engine/engine_serialization_core.ts +7 -1
- package/src/engine/engine_setup.ts +2 -2
- package/src/engine/engine_texture.ts +6 -0
- package/src/engine/engine_utils.ts +13 -2
- package/src/engine/extensions/{NEEDLE_deferred_texture.ts → NEEDLE_progressive.ts} +18 -17
- package/src/engine/extensions/extensions.ts +2 -2
- package/src/engine-components/Camera.ts +53 -5
- package/src/engine-components/EventTrigger.ts +39 -19
- package/src/engine-components/Light.ts +6 -2
- package/src/engine-components/OrbitControls.ts +7 -3
- package/src/engine-components/ParticleSystemModules.ts +0 -3
- package/src/engine-components/Renderer.ts +13 -7
- package/src/engine-components/ShadowCatcher.ts +5 -6
- package/src/engine-components/Skybox.ts +4 -0
- package/src/engine-components/SpriteRenderer.ts +140 -44
- package/src/engine-components/Voip.ts +14 -4
- package/src/engine-components/WebXRRig.ts +14 -1
- package/src/engine-components/codegen/components.ts +7 -2
- package/src/engine-components/export/{GltfExport.ts → gltf/GltfExport.ts} +7 -7
- package/src/engine-components/export/usdz/Extension.ts +12 -0
- package/src/engine-components/export/usdz/USDZExporter.ts +216 -0
- package/src/engine-components/export/usdz/extensions/Animation.ts +306 -0
- package/src/engine-components/export/usdz/types.ts +39 -0
- package/src/engine-components/export/usdz/utils/animationutils.ts +60 -0
- package/src/engine-components/export/usdz/utils/quicklook.ts +43 -0
- package/src/engine-components/export/usdz/utils/timeutils.ts +20 -0
- package/src/engine-components/timeline/PlayableDirector.ts +5 -0
- package/src/engine-components/ui/Graphic.ts +15 -1
- package/src/engine-components/ui/Utils.ts +5 -3
- package/lib/engine/extensions/NEEDLE_deferred_texture.js.map +0 -1
- package/lib/engine-components/export/GltfExport.js.map +0 -1
|
@@ -5,14 +5,13 @@ import { Context } from "../engine_setup";
|
|
|
5
5
|
import { addDracoAndKTX2Loaders } from "../engine_loaders";
|
|
6
6
|
import { getParam, getPath } from "../engine_utils";
|
|
7
7
|
|
|
8
|
-
export const EXTENSION_NAME = "
|
|
8
|
+
export const EXTENSION_NAME = "NEEDLE_progressive";
|
|
9
9
|
|
|
10
10
|
const debug = getParam("debugprogressive");
|
|
11
11
|
|
|
12
|
-
declare type
|
|
12
|
+
declare type ProgressiveTextureSchema = {
|
|
13
13
|
uri: string;
|
|
14
14
|
guid: string;
|
|
15
|
-
usage?: string,
|
|
16
15
|
}
|
|
17
16
|
|
|
18
17
|
const debug_toggle_maps: Map<Material, { [key: string]: { original: Texture, lod0: Texture } }> = new Map();
|
|
@@ -35,22 +34,23 @@ if (debug) {
|
|
|
35
34
|
});
|
|
36
35
|
}
|
|
37
36
|
|
|
38
|
-
export class
|
|
39
|
-
|
|
37
|
+
export class NEEDLE_progressive implements GLTFLoaderPlugin {
|
|
40
38
|
|
|
41
39
|
static assignTextureLOD(context: Context, source: SourceIdentifier | undefined, material: Material, level: number = 0) {
|
|
42
40
|
if (!material) return;
|
|
43
|
-
for (
|
|
41
|
+
for (let slot of Object.keys(material)) {
|
|
44
42
|
const val = material[slot];
|
|
45
43
|
if (val?.isTexture === true) {
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
44
|
+
|
|
45
|
+
if (debug) console.log("-----------\n", "FIND", material.name, slot, val?.name, val?.userData, val, material);
|
|
46
|
+
|
|
47
|
+
NEEDLE_progressive.getOrLoadTexture(context, source, material, slot, val, level).then(t => {
|
|
49
48
|
if (t?.isTexture === true) {
|
|
50
|
-
|
|
51
|
-
if (debug)
|
|
52
|
-
|
|
49
|
+
|
|
50
|
+
if (debug) console.log("Assign LOD", material.name, slot, t.name, t["guid"], material, "Prev:", val, "Now:", t, "\n--------------");
|
|
51
|
+
|
|
53
52
|
material[slot] = t;
|
|
53
|
+
t.needsUpdate = true;
|
|
54
54
|
material.needsUpdate = true;
|
|
55
55
|
|
|
56
56
|
if (debug) {
|
|
@@ -107,14 +107,14 @@ export class NEEDLE_deferred_texture implements GLTFLoaderPlugin {
|
|
|
107
107
|
console.log("AFTER", this.sourceId, gltf);
|
|
108
108
|
this.parser.json.textures?.forEach((textureInfo, index) => {
|
|
109
109
|
if (textureInfo?.extensions) {
|
|
110
|
-
const ext:
|
|
110
|
+
const ext: ProgressiveTextureSchema = textureInfo?.extensions[EXTENSION_NAME];
|
|
111
111
|
if (ext) {
|
|
112
112
|
const prom = this.parser.getDependency("texture", index);
|
|
113
113
|
this._loading.splice(this._loading.indexOf(index), 1);
|
|
114
114
|
prom.then(t => {
|
|
115
115
|
if (debug) console.log("register texture", t.name, t.uuid, ext);
|
|
116
116
|
t.userData.deferred = ext;
|
|
117
|
-
|
|
117
|
+
NEEDLE_progressive.cache.set(t.uuid, ext);
|
|
118
118
|
});
|
|
119
119
|
}
|
|
120
120
|
}
|
|
@@ -123,13 +123,13 @@ export class NEEDLE_deferred_texture implements GLTFLoaderPlugin {
|
|
|
123
123
|
return null;
|
|
124
124
|
}
|
|
125
125
|
|
|
126
|
-
private static cache = new Map<string,
|
|
126
|
+
private static cache = new Map<string, ProgressiveTextureSchema>();
|
|
127
127
|
private static resolved: { [key: string]: Texture } = {};
|
|
128
128
|
|
|
129
129
|
private static async getOrLoadTexture(context: Context, source: SourceIdentifier | undefined, material: Material, slot: string, current: Texture, _level: number): Promise<Texture | null> {
|
|
130
130
|
|
|
131
131
|
const key = current.uuid;
|
|
132
|
-
const ext:
|
|
132
|
+
const ext: ProgressiveTextureSchema | undefined = NEEDLE_progressive.cache.get(key);// || current.userData.deferred;
|
|
133
133
|
if (ext) {
|
|
134
134
|
if (debug)
|
|
135
135
|
console.log(key, ext.uri, ext.guid);
|
|
@@ -156,7 +156,7 @@ export class NEEDLE_deferred_texture implements GLTFLoaderPlugin {
|
|
|
156
156
|
for (const tex of gltf.parser.json.textures) {
|
|
157
157
|
index++;
|
|
158
158
|
if (tex?.extensions) {
|
|
159
|
-
const other:
|
|
159
|
+
const other: ProgressiveTextureSchema = tex?.extensions[EXTENSION_NAME];
|
|
160
160
|
if (other?.guid) {
|
|
161
161
|
if (other.guid === ext.guid) {
|
|
162
162
|
found = true;
|
|
@@ -174,6 +174,7 @@ export class NEEDLE_deferred_texture implements GLTFLoaderPlugin {
|
|
|
174
174
|
|
|
175
175
|
// const index = Number.parseInt(ext.pointer.substring("textures/".length));
|
|
176
176
|
const tex = await parser.getDependency("texture", index);
|
|
177
|
+
tex.encoding = current.encoding;
|
|
177
178
|
if (tex) {
|
|
178
179
|
tex.guid = ext.guid;
|
|
179
180
|
}
|
|
@@ -12,7 +12,7 @@ import { SourceIdentifier } from "../engine_types";
|
|
|
12
12
|
import { Context } from "../engine_setup";
|
|
13
13
|
import { NEEDLE_lighting_settings } from "./NEEDLE_lighting_settings";
|
|
14
14
|
import { NEEDLE_render_objects } from "./NEEDLE_render_objects";
|
|
15
|
-
import {
|
|
15
|
+
import { NEEDLE_progressive } from "./NEEDLE_progressive";
|
|
16
16
|
|
|
17
17
|
export function registerComponentExtension(loader: GLTFLoader): NEEDLE_components {
|
|
18
18
|
const ext = new NEEDLE_components();
|
|
@@ -40,7 +40,7 @@ export function registerExtensions(loader: GLTFLoader, context: Context, sourceI
|
|
|
40
40
|
loader.register(p => new NEEDLE_lighting_settings(p, sourceId, context));
|
|
41
41
|
loader.register(p => new NEEDLE_techniques_webgl(p, sourceId));
|
|
42
42
|
loader.register(p => new NEEDLE_render_objects(p, sourceId));
|
|
43
|
-
loader.register(p => new
|
|
43
|
+
loader.register(p => new NEEDLE_progressive(p, sourceId, context));
|
|
44
44
|
loader.register(p => new EXT_texture_exr(p));
|
|
45
45
|
|
|
46
46
|
const setPointerResolverFunction = loader["setAnimationPointerResolver"];
|
|
@@ -9,6 +9,7 @@ import { XRSessionMode } from "../engine/engine_setup";
|
|
|
9
9
|
import { ICamera } from "../engine/engine_types"
|
|
10
10
|
import { showBalloonMessage } from "../engine/debug/debug";
|
|
11
11
|
import { getWorldPosition } from "../engine/engine_three_utils";
|
|
12
|
+
import { Gizmos } from "../engine/engine_gizmos";
|
|
12
13
|
|
|
13
14
|
export enum ClearFlags {
|
|
14
15
|
Skybox = 1,
|
|
@@ -17,6 +18,7 @@ export enum ClearFlags {
|
|
|
17
18
|
}
|
|
18
19
|
|
|
19
20
|
const debug = getParam("debugcam");
|
|
21
|
+
const debugscreenpointtoray = getParam("debugscreenpointtoray");
|
|
20
22
|
|
|
21
23
|
export class Camera extends Behaviour implements ICamera {
|
|
22
24
|
|
|
@@ -52,6 +54,7 @@ export class Camera extends Behaviour implements ICamera {
|
|
|
52
54
|
this._cam.updateProjectionMatrix();
|
|
53
55
|
}
|
|
54
56
|
}
|
|
57
|
+
private _nearClipPlane: number = 0.1;
|
|
55
58
|
|
|
56
59
|
get farClipPlane(): number { return this._farClipPlane; }
|
|
57
60
|
@serializable()
|
|
@@ -63,6 +66,7 @@ export class Camera extends Behaviour implements ICamera {
|
|
|
63
66
|
this._cam.updateProjectionMatrix();
|
|
64
67
|
}
|
|
65
68
|
}
|
|
69
|
+
private _farClipPlane: number = 1000;
|
|
66
70
|
|
|
67
71
|
@serializable()
|
|
68
72
|
public get clearFlags(): ClearFlags {
|
|
@@ -94,8 +98,33 @@ export class Camera extends Behaviour implements ICamera {
|
|
|
94
98
|
}
|
|
95
99
|
private _cullingMask: number = 0xffffffff;
|
|
96
100
|
|
|
97
|
-
|
|
98
|
-
|
|
101
|
+
@serializable()
|
|
102
|
+
public set backgroundBlurriness(val: number | undefined) {
|
|
103
|
+
if(val === this._backgroundBlurriness) return;
|
|
104
|
+
if (val === undefined)
|
|
105
|
+
this._backgroundBlurriness = undefined;
|
|
106
|
+
else
|
|
107
|
+
this._backgroundBlurriness = Math.min(Math.max(val, 0), 1);
|
|
108
|
+
this.applyClearFlagsIfIsActiveCamera();
|
|
109
|
+
}
|
|
110
|
+
public get backgroundBlurriness() : number | undefined {
|
|
111
|
+
return this._backgroundBlurriness;
|
|
112
|
+
}
|
|
113
|
+
private _backgroundBlurriness?: number;
|
|
114
|
+
|
|
115
|
+
@serializable()
|
|
116
|
+
public set backgroundIntensity(val: number | undefined) {
|
|
117
|
+
if(val === this._backgroundIntensity) return;
|
|
118
|
+
if (val === undefined)
|
|
119
|
+
this._backgroundIntensity = undefined;
|
|
120
|
+
else
|
|
121
|
+
this._backgroundIntensity = Math.min(Math.max(val, 0), 10);
|
|
122
|
+
this.applyClearFlagsIfIsActiveCamera();
|
|
123
|
+
}
|
|
124
|
+
public get backgroundIntensity() : number | undefined {
|
|
125
|
+
return this._backgroundIntensity;
|
|
126
|
+
}
|
|
127
|
+
private _backgroundIntensity?: number;
|
|
99
128
|
|
|
100
129
|
@serializable(RGBAColor)
|
|
101
130
|
public get backgroundColor(): RGBAColor | null {
|
|
@@ -130,14 +159,15 @@ export class Camera extends Behaviour implements ICamera {
|
|
|
130
159
|
private static _origin: THREE.Vector3 = new THREE.Vector3();
|
|
131
160
|
private static _direction: THREE.Vector3 = new THREE.Vector3();
|
|
132
161
|
public screenPointToRay(x: number, y: number, ray?: Ray): Ray {
|
|
162
|
+
let cam = this.cam;
|
|
133
163
|
const origin = Camera._origin;
|
|
134
164
|
origin.set(x, y, -1);
|
|
135
165
|
this.context.input.convertScreenspaceToRaycastSpace(origin);
|
|
166
|
+
if(debugscreenpointtoray) console.log("screenPointToRay", x.toFixed(2), y.toFixed(2), "now:", origin.x.toFixed(2), origin.y.toFixed(2), "isInXR:" + this.context.isInXR);
|
|
136
167
|
origin.z = -1;
|
|
137
|
-
origin.unproject(
|
|
138
|
-
|
|
168
|
+
origin.unproject(cam);
|
|
139
169
|
const dir = Camera._direction.set(origin.x, origin.y, origin.z);
|
|
140
|
-
const camPosition = getWorldPosition(
|
|
170
|
+
const camPosition = getWorldPosition(cam);
|
|
141
171
|
dir.sub(camPosition);
|
|
142
172
|
dir.normalize();
|
|
143
173
|
if (ray) {
|
|
@@ -153,6 +183,17 @@ export class Camera extends Behaviour implements ICamera {
|
|
|
153
183
|
if (!this.sourceId) {
|
|
154
184
|
console.warn("Camera has no source - the camera should be exported inside a gltf", this.name);
|
|
155
185
|
}
|
|
186
|
+
|
|
187
|
+
if(debugscreenpointtoray){
|
|
188
|
+
window.addEventListener("pointerdown", evt => {
|
|
189
|
+
const px = evt.clientX;
|
|
190
|
+
const py = evt.clientY;
|
|
191
|
+
console.log("touch", px.toFixed(2), py.toFixed(2))
|
|
192
|
+
const ray = this.screenPointToRay(px, py);
|
|
193
|
+
const randomHex = "#" + Math.floor(Math.random()*16777215).toString(16);
|
|
194
|
+
Gizmos.DrawRay(ray.origin, ray.direction, randomHex, 10);
|
|
195
|
+
});
|
|
196
|
+
}
|
|
156
197
|
}
|
|
157
198
|
|
|
158
199
|
onEnable(): void {
|
|
@@ -220,6 +261,13 @@ export class Camera extends Behaviour implements ICamera {
|
|
|
220
261
|
}
|
|
221
262
|
}
|
|
222
263
|
this.enableSkybox();
|
|
264
|
+
|
|
265
|
+
if (this._backgroundBlurriness !== undefined)
|
|
266
|
+
this.context.scene.backgroundBlurriness = this._backgroundBlurriness;
|
|
267
|
+
if (this._backgroundIntensity !== undefined)
|
|
268
|
+
//@ts-ignore
|
|
269
|
+
this.context.scene.backgroundIntensity = this._backgroundIntensity;
|
|
270
|
+
|
|
223
271
|
break;
|
|
224
272
|
case ClearFlags.SolidColor:
|
|
225
273
|
if (this._backgroundColor) {
|
|
@@ -1,28 +1,48 @@
|
|
|
1
|
+
import { serializable } from "../engine/engine_serialization";
|
|
2
|
+
import { EventList } from "./EventList";
|
|
3
|
+
import { IPointerEventHandler, PointerEventData } from "./ui/PointerEvents"
|
|
1
4
|
import { Behaviour } from "./Component"
|
|
2
5
|
import { EventType } from "./EventType"
|
|
3
6
|
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
7
|
+
class TriggerEvent {
|
|
8
|
+
@serializable()
|
|
9
|
+
eventID!: EventType;
|
|
10
|
+
@serializable(EventList)
|
|
11
|
+
callback!: EventList;
|
|
12
|
+
}
|
|
8
13
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
+
export class EventTrigger extends Behaviour implements IPointerEventHandler {
|
|
15
|
+
|
|
16
|
+
@serializable(TriggerEvent)
|
|
17
|
+
private triggers?: Array<TriggerEvent>;
|
|
18
|
+
|
|
19
|
+
invoke(type: EventType) {
|
|
20
|
+
if(!this.triggers) return;
|
|
21
|
+
for(const trigger of this.triggers){
|
|
22
|
+
if(trigger.eventID === type){
|
|
23
|
+
trigger.callback.invoke();
|
|
24
|
+
}
|
|
14
25
|
}
|
|
15
|
-
console.log(this);
|
|
16
|
-
// console.log(this.events);
|
|
17
26
|
}
|
|
18
27
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
28
|
+
onPointerClick(_: PointerEventData) {
|
|
29
|
+
this.invoke(EventType.PointerClick);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
onPointerEnter(_: PointerEventData) {
|
|
33
|
+
this.invoke(EventType.PointerEnter);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
onPointerExit(_: PointerEventData) {
|
|
37
|
+
this.invoke(EventType.PointerExit);
|
|
26
38
|
}
|
|
27
|
-
|
|
39
|
+
|
|
40
|
+
onPointerDown(_: PointerEventData) {
|
|
41
|
+
this.invoke(EventType.PointerDown);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
onPointerUp(_: PointerEventData) {
|
|
45
|
+
this.invoke(EventType.PointerUp);
|
|
46
|
+
}
|
|
47
|
+
|
|
28
48
|
}
|
|
@@ -165,7 +165,7 @@ export class Light extends Behaviour implements ILight {
|
|
|
165
165
|
}
|
|
166
166
|
}
|
|
167
167
|
get intensity(): number { return this._intensity; }
|
|
168
|
-
private _intensity: number = 1;
|
|
168
|
+
private _intensity: number = -1;
|
|
169
169
|
|
|
170
170
|
@serializable()
|
|
171
171
|
get shadowDistance(): number {
|
|
@@ -292,6 +292,7 @@ export class Light extends Behaviour implements ILight {
|
|
|
292
292
|
|
|
293
293
|
if (lightAlreadyCreated && !this.light) {
|
|
294
294
|
this.light = this.gameObject as unknown as THREE.Light;
|
|
295
|
+
this._intensity = this.light.intensity;
|
|
295
296
|
|
|
296
297
|
switch (this.type) {
|
|
297
298
|
case LightType.Directional:
|
|
@@ -344,7 +345,10 @@ export class Light extends Behaviour implements ILight {
|
|
|
344
345
|
|
|
345
346
|
|
|
346
347
|
if (this.light) {
|
|
347
|
-
this._intensity
|
|
348
|
+
if (this._intensity >= 0)
|
|
349
|
+
this.light.intensity = this._intensity;
|
|
350
|
+
else
|
|
351
|
+
this._intensity = this.light.intensity;
|
|
348
352
|
|
|
349
353
|
if (this.shadows !== LightShadows.None) {
|
|
350
354
|
this.light.castShadow = true;
|
|
@@ -11,6 +11,9 @@ import { getParam, isMobileDevice } from "../engine/engine_utils";
|
|
|
11
11
|
|
|
12
12
|
const freeCam = getParam("freecam");
|
|
13
13
|
|
|
14
|
+
const disabledKeys = { LEFT: "", UP: "", RIGHT: "", BOTTOM: "" };
|
|
15
|
+
let defaultKeys: any = undefined;
|
|
16
|
+
|
|
14
17
|
export class OrbitControls extends Behaviour {
|
|
15
18
|
public get controls() {
|
|
16
19
|
return this._controls;
|
|
@@ -73,6 +76,7 @@ export class OrbitControls extends Behaviour {
|
|
|
73
76
|
if (cam)
|
|
74
77
|
this._cameraObject = cam;
|
|
75
78
|
this._controls = new ThreeOrbitControls(cam!, this.context.renderer.domElement);
|
|
79
|
+
if (defaultKeys === undefined) defaultKeys = { ...this._controls.keys };
|
|
76
80
|
}
|
|
77
81
|
|
|
78
82
|
if (this._controls) {
|
|
@@ -80,12 +84,11 @@ export class OrbitControls extends Behaviour {
|
|
|
80
84
|
this.enablePan = true;
|
|
81
85
|
this.enableZoom = true;
|
|
82
86
|
this.middleClickToFocus = true;
|
|
83
|
-
if(isMobileDevice()) this.doubleClickToFocus = true;
|
|
87
|
+
if (isMobileDevice()) this.doubleClickToFocus = true;
|
|
84
88
|
}
|
|
85
89
|
|
|
86
90
|
this._controls.enableDamping = this.enableDamping;
|
|
87
|
-
|
|
88
|
-
this._controls.enableKeys = this.enableKeys;
|
|
91
|
+
this._controls.keys = this.enableKeys ? defaultKeys : disabledKeys;
|
|
89
92
|
this._controls.autoRotate = this.autoRotate;
|
|
90
93
|
this._controls.autoRotateSpeed = this.autoRotateSpeed;
|
|
91
94
|
this._controls.enableZoom = this.enableZoom;
|
|
@@ -164,6 +167,7 @@ export class OrbitControls extends Behaviour {
|
|
|
164
167
|
this._inputs += 1;
|
|
165
168
|
}
|
|
166
169
|
if (this._inputs > 0) {
|
|
170
|
+
this.autoRotate = false;
|
|
167
171
|
this._controls.autoRotate = false;
|
|
168
172
|
this._lerpCameraToTarget = false;
|
|
169
173
|
this._lerpToTargetPosition = false;
|
|
@@ -656,8 +656,6 @@ export class ShapeModule implements EmitterShape {
|
|
|
656
656
|
|
|
657
657
|
private randomizeDirection(direction: Vector3, amount: number) {
|
|
658
658
|
if (amount === 0) return;
|
|
659
|
-
console.log('randomizeDirection', amount);
|
|
660
|
-
|
|
661
659
|
const randomQuat = ShapeModule._randomQuat;
|
|
662
660
|
const tempVec = ShapeModule._tempVec;
|
|
663
661
|
tempVec.set(Math.random() - .5, Math.random() - .5, Math.random() - .5).normalize();
|
|
@@ -674,7 +672,6 @@ export class ShapeModule implements EmitterShape {
|
|
|
674
672
|
const z = Math.cos(phi);
|
|
675
673
|
const v = new Vector3(x, y, z);
|
|
676
674
|
dir.lerp(v, amount);
|
|
677
|
-
|
|
678
675
|
}
|
|
679
676
|
|
|
680
677
|
private randomSpherePoint(pos: Vec3, radius: number, thickness: number, arc: number, vec: Vec3) {
|
|
@@ -2,12 +2,12 @@ import { Behaviour, GameObject } from "./Component";
|
|
|
2
2
|
import * as THREE from "three";
|
|
3
3
|
// import { RendererCustomShader } from "./RendererCustomShader";
|
|
4
4
|
import { RendererLightmap } from "./RendererLightmap";
|
|
5
|
-
import { Context } from "../engine/engine_setup";
|
|
5
|
+
import { Context, FrameEvent } from "../engine/engine_setup";
|
|
6
6
|
import { getParam } from "../engine/engine_utils";
|
|
7
7
|
import { serializable } from "../engine/engine_serialization_decorator";
|
|
8
8
|
import { AxesHelper, Material, Mesh, Object3D, SkinnedMesh, Texture, Vector4 } from "three";
|
|
9
9
|
import { NEEDLE_render_objects } from "../engine/extensions/NEEDLE_render_objects";
|
|
10
|
-
import {
|
|
10
|
+
import { NEEDLE_progressive } from "../engine/extensions/NEEDLE_progressive";
|
|
11
11
|
import { NEED_UPDATE_INSTANCE_KEY } from "../engine/engine_instancing";
|
|
12
12
|
import { IRenderer, ISharedMaterials } from "../engine/engine_types";
|
|
13
13
|
import { debug, ReflectionProbe } from "./ReflectionProbe";
|
|
@@ -465,11 +465,11 @@ export class Renderer extends Behaviour implements IRenderer {
|
|
|
465
465
|
if (debugProgressiveLoading) {
|
|
466
466
|
console.log("Load material LOD (with delay)", material.name);
|
|
467
467
|
setTimeout(() => {
|
|
468
|
-
|
|
468
|
+
NEEDLE_progressive.assignTextureLOD(this.context, this.sourceId, material);
|
|
469
469
|
}, 2000);
|
|
470
470
|
}
|
|
471
471
|
else {
|
|
472
|
-
|
|
472
|
+
NEEDLE_progressive.assignTextureLOD(this.context, this.sourceId, material);
|
|
473
473
|
}
|
|
474
474
|
}
|
|
475
475
|
|
|
@@ -546,11 +546,17 @@ export class Renderer extends Behaviour implements IRenderer {
|
|
|
546
546
|
this._reflectionProbe = null;
|
|
547
547
|
if (this.reflectionProbeUsage !== ReflectionProbeUsage.Off) {
|
|
548
548
|
if (!this.probeAnchor) return;
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
549
|
+
// update the reflection probe right before rendering
|
|
550
|
+
// if we do it immediately the reflection probe might not be enabled yet
|
|
551
|
+
// (since this method is called from onEnable)
|
|
552
|
+
this.startCoroutine(this._updateReflectionProbe(), FrameEvent.OnBeforeRender);
|
|
552
553
|
}
|
|
553
554
|
}
|
|
555
|
+
private *_updateReflectionProbe(){
|
|
556
|
+
const obj = this.probeAnchor || this.gameObject;
|
|
557
|
+
const isAnchor = this.probeAnchor ? true : false;
|
|
558
|
+
this._reflectionProbe = ReflectionProbe.get(obj, this.context, isAnchor);
|
|
559
|
+
}
|
|
554
560
|
|
|
555
561
|
private setVisibility(visible: boolean) {
|
|
556
562
|
|
|
@@ -40,7 +40,7 @@ export class ShadowCatcher extends Behaviour {
|
|
|
40
40
|
applyLightBlendMaterial() {
|
|
41
41
|
const renderer = GameObject.getComponent(this.gameObject, Renderer);
|
|
42
42
|
if (renderer) {
|
|
43
|
-
const material = renderer.
|
|
43
|
+
const material = renderer.sharedMaterial;
|
|
44
44
|
material.blending = AdditiveBlending;
|
|
45
45
|
this.applyMaterialOptions(material);
|
|
46
46
|
material.onBeforeCompile = (shader) => {
|
|
@@ -50,9 +50,8 @@ export class ShadowCatcher extends Behaviour {
|
|
|
50
50
|
// see https://github.com/mrdoob/three.js/blob/dev/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js#L2
|
|
51
51
|
// see https://github.com/mrdoob/three.js/blob/dev/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js#L281
|
|
52
52
|
|
|
53
|
-
shader.fragmentShader.replace("vec3 outgoingLight = totalDiffuse + totalSpecular + totalEmissiveRadiance;",
|
|
53
|
+
shader.fragmentShader = shader.fragmentShader.replace("vec3 outgoingLight = totalDiffuse + totalSpecular + totalEmissiveRadiance;",
|
|
54
54
|
`vec3 outgoingLight = totalDiffuse + totalSpecular + totalEmissiveRadiance;
|
|
55
|
-
|
|
56
55
|
// diffuse-only lighting with overdrive to somewhat compensate
|
|
57
56
|
// for the loss of indirect lighting and to make it more visible.
|
|
58
57
|
vec3 direct = reflectedLight.directDiffuse * 3.;
|
|
@@ -73,15 +72,15 @@ export class ShadowCatcher extends Behaviour {
|
|
|
73
72
|
applyShadowMaterial() {
|
|
74
73
|
const renderer = GameObject.getComponent(this.gameObject, Renderer);
|
|
75
74
|
if (renderer) {
|
|
76
|
-
if (renderer.
|
|
75
|
+
if (renderer.sharedMaterial?.type !== "ShadowMaterial") {
|
|
77
76
|
const material = new ShadowMaterial();
|
|
78
77
|
material.color = this.shadowColor;
|
|
79
78
|
material.opacity = this.shadowColor.alpha;
|
|
80
79
|
this.applyMaterialOptions(material);
|
|
81
|
-
renderer.
|
|
80
|
+
renderer.sharedMaterial = material;
|
|
82
81
|
}
|
|
83
82
|
else {
|
|
84
|
-
const material = renderer.
|
|
83
|
+
const material = renderer.sharedMaterial as ShadowMaterial;
|
|
85
84
|
material.color = this.shadowColor;
|
|
86
85
|
material.opacity = this.shadowColor.alpha;
|
|
87
86
|
this.applyMaterialOptions(material);
|
|
@@ -18,6 +18,9 @@ export class RemoteSkybox extends Behaviour {
|
|
|
18
18
|
@serializable()
|
|
19
19
|
background: boolean = true;
|
|
20
20
|
|
|
21
|
+
@serializable()
|
|
22
|
+
backgroundBlurriness: number = 0;
|
|
23
|
+
|
|
21
24
|
@serializable()
|
|
22
25
|
environment: boolean = true;
|
|
23
26
|
|
|
@@ -79,6 +82,7 @@ export class RemoteSkybox extends Behaviour {
|
|
|
79
82
|
this._prevLoadedEnvironment = envMap;
|
|
80
83
|
const nameIndex = url.lastIndexOf("/");
|
|
81
84
|
envMap.name = url.substring(nameIndex >= 0 ? nameIndex + 1 : 0);
|
|
85
|
+
this.context.scene.backgroundBlurriness = this.backgroundBlurriness;
|
|
82
86
|
}
|
|
83
87
|
|
|
84
88
|
|