@zephyr3d/scene 0.4.0 → 0.5.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/dist/animation/animation.js +25 -117
- package/dist/animation/animation.js.map +1 -1
- package/dist/animation/animationset.js +164 -24
- package/dist/animation/animationset.js.map +1 -1
- package/dist/animation/animationtrack.js +6 -18
- package/dist/animation/animationtrack.js.map +1 -1
- package/dist/animation/eulerrotationtrack.js +16 -6
- package/dist/animation/eulerrotationtrack.js.map +1 -1
- package/dist/animation/morphtarget.js +104 -0
- package/dist/animation/morphtarget.js.map +1 -0
- package/dist/animation/morphtrack.js +68 -0
- package/dist/animation/morphtrack.js.map +1 -0
- package/dist/animation/rotationtrack.js +15 -7
- package/dist/animation/rotationtrack.js.map +1 -1
- package/dist/animation/scaletrack.js +15 -7
- package/dist/animation/scaletrack.js.map +1 -1
- package/dist/animation/skeleton.js +101 -1
- package/dist/animation/skeleton.js.map +1 -1
- package/dist/animation/translationtrack.js +15 -7
- package/dist/animation/translationtrack.js.map +1 -1
- package/dist/animation/usertrack.js +2 -2
- package/dist/app.js +4 -26
- package/dist/app.js.map +1 -1
- package/dist/asset/assetmanager.js +58 -107
- package/dist/asset/assetmanager.js.map +1 -1
- package/dist/asset/loaders/dds/dds.js +77 -3
- package/dist/asset/loaders/dds/dds.js.map +1 -1
- package/dist/asset/loaders/dds/dds_loader.js +1 -1
- package/dist/asset/loaders/gltf/gltf_loader.js +280 -37
- package/dist/asset/loaders/gltf/gltf_loader.js.map +1 -1
- package/dist/asset/loaders/image/tga_Loader.js +1 -1
- package/dist/asset/model.js +13 -0
- package/dist/asset/model.js.map +1 -1
- package/dist/blitter/blitter.js +2 -2
- package/dist/camera/camera.js +58 -3
- package/dist/camera/camera.js.map +1 -1
- package/dist/index.d.ts +3026 -2839
- package/dist/index.js +2 -5
- package/dist/index.js.map +1 -1
- package/dist/material/blinn.js +9 -4
- package/dist/material/blinn.js.map +1 -1
- package/dist/material/lambert.js +22 -17
- package/dist/material/lambert.js.map +1 -1
- package/dist/material/material.js +11 -2
- package/dist/material/material.js.map +1 -1
- package/dist/material/meshmaterial.js +36 -4
- package/dist/material/meshmaterial.js.map +1 -1
- package/dist/material/mixins/albedocolor.js +1 -1
- package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +3 -3
- package/dist/material/mixins/lightmodel/pbrspecularglossness.js +3 -3
- package/dist/material/mixins/lit.js +2 -2
- package/dist/material/mixins/pbr/common.js +433 -10
- package/dist/material/mixins/pbr/common.js.map +1 -1
- package/dist/material/pbrmr.js +17 -6
- package/dist/material/pbrmr.js.map +1 -1
- package/dist/material/pbrsg.js +16 -9
- package/dist/material/pbrsg.js.map +1 -1
- package/dist/material/shader/helper.js +94 -4
- package/dist/material/shader/helper.js.map +1 -1
- package/dist/material/unlit.js +8 -4
- package/dist/material/unlit.js.map +1 -1
- package/dist/posteffect/bloom.js +33 -43
- package/dist/posteffect/bloom.js.map +1 -1
- package/dist/posteffect/compositor.js +8 -37
- package/dist/posteffect/compositor.js.map +1 -1
- package/dist/posteffect/sao.js +11 -24
- package/dist/posteffect/sao.js.map +1 -1
- package/dist/posteffect/water.js +2 -4
- package/dist/posteffect/water.js.map +1 -1
- package/dist/render/cull_visitor.js +3 -3
- package/dist/render/depthpass.js +13 -13
- package/dist/render/drawable_mixin.js +48 -6
- package/dist/render/drawable_mixin.js.map +1 -1
- package/dist/render/envlight.js +165 -31
- package/dist/render/envlight.js.map +1 -1
- package/dist/render/lightpass.js +35 -27
- package/dist/render/lightpass.js.map +1 -1
- package/dist/render/objectcolorpass.js +50 -0
- package/dist/render/objectcolorpass.js.map +1 -0
- package/dist/render/objectpool.js +295 -0
- package/dist/render/objectpool.js.map +1 -0
- package/dist/render/render_queue.js +189 -156
- package/dist/render/render_queue.js.map +1 -1
- package/dist/render/renderer.js +97 -20
- package/dist/render/renderer.js.map +1 -1
- package/dist/render/renderpass.js +18 -14
- package/dist/render/renderpass.js.map +1 -1
- package/dist/render/shadowmap_pass.js +14 -14
- package/dist/render/weightedblended_oit.js +11 -28
- package/dist/render/weightedblended_oit.js.map +1 -1
- package/dist/scene/environment.js +22 -1
- package/dist/scene/environment.js.map +1 -1
- package/dist/scene/graph_node.js +0 -9
- package/dist/scene/graph_node.js.map +1 -1
- package/dist/scene/mesh.js +32 -1
- package/dist/scene/mesh.js.map +1 -1
- package/dist/scene/scene.js +5 -8
- package/dist/scene/scene.js.map +1 -1
- package/dist/scene/scene_node.js +2 -3
- package/dist/scene/scene_node.js.map +1 -1
- package/dist/scene/terrain/grass.js +9 -0
- package/dist/scene/terrain/grass.js.map +1 -1
- package/dist/scene/terrain/patch.js +9 -0
- package/dist/scene/terrain/patch.js.map +1 -1
- package/dist/scene/terrain/quadtree.js +2 -2
- package/dist/shadow/esm.js +4 -22
- package/dist/shadow/esm.js.map +1 -1
- package/dist/shadow/shadowmapper.js +45 -20
- package/dist/shadow/shadowmapper.js.map +1 -1
- package/dist/shadow/vsm.js +4 -24
- package/dist/shadow/vsm.js.map +1 -1
- package/dist/utility/draco/decoder.js +116 -0
- package/dist/utility/draco/decoder.js.map +1 -0
- package/dist/values.js +18 -1
- package/dist/values.js.map +1 -1
- package/package.json +7 -6
|
@@ -63,7 +63,7 @@ const defaultInstanceBindGroupAlloator = new InstanceBindGroupAllocator();
|
|
|
63
63
|
* A queue that contains the items to be rendered
|
|
64
64
|
* @public
|
|
65
65
|
*/ class RenderQueue {
|
|
66
|
-
/** @internal */
|
|
66
|
+
/** @internal */ _itemList;
|
|
67
67
|
/** @internal */ _renderPass;
|
|
68
68
|
/** @internal */ _shadowedLightList;
|
|
69
69
|
/** @internal */ _unshadowedLightList;
|
|
@@ -71,12 +71,15 @@ const defaultInstanceBindGroupAlloator = new InstanceBindGroupAllocator();
|
|
|
71
71
|
/** @internal */ _bindGroupAllocator;
|
|
72
72
|
/** @internal */ _ref;
|
|
73
73
|
/** @internal */ _instanceInfo;
|
|
74
|
+
/** @internal */ _needSceneColor;
|
|
75
|
+
/** @internal */ _drawTransparent;
|
|
76
|
+
/** @internal */ _objectColorMaps;
|
|
74
77
|
/**
|
|
75
78
|
* Creates an instance of a render queue
|
|
76
79
|
* @param renderPass - The render pass to which the render queue belongs
|
|
77
80
|
*/ constructor(renderPass, bindGroupAllocator){
|
|
78
81
|
this._bindGroupAllocator = bindGroupAllocator ?? defaultInstanceBindGroupAlloator;
|
|
79
|
-
this.
|
|
82
|
+
this._itemList = null;
|
|
80
83
|
this._renderPass = renderPass;
|
|
81
84
|
this._shadowedLightList = [];
|
|
82
85
|
this._unshadowedLightList = [];
|
|
@@ -85,6 +88,11 @@ const defaultInstanceBindGroupAlloator = new InstanceBindGroupAllocator();
|
|
|
85
88
|
ref: this
|
|
86
89
|
};
|
|
87
90
|
this._instanceInfo = new Map();
|
|
91
|
+
this._needSceneColor = false;
|
|
92
|
+
this._drawTransparent = false;
|
|
93
|
+
this._objectColorMaps = [
|
|
94
|
+
new Map()
|
|
95
|
+
];
|
|
88
96
|
}
|
|
89
97
|
/** The sun light */ get sunLight() {
|
|
90
98
|
return this._sunLight;
|
|
@@ -92,13 +100,19 @@ const defaultInstanceBindGroupAlloator = new InstanceBindGroupAllocator();
|
|
|
92
100
|
set sunLight(light) {
|
|
93
101
|
this._sunLight = light;
|
|
94
102
|
}
|
|
103
|
+
/** Whether this render queue requires scene color pass */ get needSceneColor() {
|
|
104
|
+
return this._needSceneColor;
|
|
105
|
+
}
|
|
106
|
+
/** Whether this render queue has transparent objects to be drawn */ get drawTransparent() {
|
|
107
|
+
return this._drawTransparent;
|
|
108
|
+
}
|
|
95
109
|
/** The render pass to which the render queue belongs */ get renderPass() {
|
|
96
110
|
return this._renderPass;
|
|
97
111
|
}
|
|
98
112
|
/**
|
|
99
113
|
* Gets the items of the render queue
|
|
100
|
-
*/ get
|
|
101
|
-
return this.
|
|
114
|
+
*/ get itemList() {
|
|
115
|
+
return this._itemList;
|
|
102
116
|
}
|
|
103
117
|
/**
|
|
104
118
|
* Gets the shadowed lights
|
|
@@ -147,35 +161,43 @@ const defaultInstanceBindGroupAlloator = new InstanceBindGroupAllocator();
|
|
|
147
161
|
* Push items from another render queue
|
|
148
162
|
* @param queue - The render queue to be pushed
|
|
149
163
|
*/ pushRenderQueue(queue) {
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
itemLists = this.newRenderItemList(true);
|
|
154
|
-
this._itemLists[order] = itemLists;
|
|
155
|
-
}
|
|
156
|
-
const newItemLists = queue._itemLists[order];
|
|
157
|
-
itemLists.opaque.lit.push(...newItemLists.opaque.lit);
|
|
158
|
-
itemLists.opaque.unlit.push(...newItemLists.opaque.unlit);
|
|
159
|
-
itemLists.transparent.lit.push(...newItemLists.transparent.lit);
|
|
160
|
-
itemLists.transparent.unlit.push(...newItemLists.transparent.unlit);
|
|
164
|
+
const newItemLists = queue._itemList;
|
|
165
|
+
if (!newItemLists) {
|
|
166
|
+
return;
|
|
161
167
|
}
|
|
168
|
+
if (!this._itemList) {
|
|
169
|
+
this._itemList = this.newRenderItemList();
|
|
170
|
+
}
|
|
171
|
+
this._itemList.opaque.lit.push(...newItemLists.opaque.lit);
|
|
172
|
+
this._itemList.opaque.unlit.push(...newItemLists.opaque.unlit);
|
|
173
|
+
this._itemList.transmission.lit.push(...newItemLists.transmission.lit);
|
|
174
|
+
this._itemList.transmission.unlit.push(...newItemLists.transmission.unlit);
|
|
175
|
+
this._itemList.transparent.lit.push(...newItemLists.transparent.lit);
|
|
176
|
+
this._itemList.transparent.unlit.push(...newItemLists.transparent.unlit);
|
|
177
|
+
this._needSceneColor ||= queue._needSceneColor;
|
|
178
|
+
this._drawTransparent ||= queue._drawTransparent;
|
|
179
|
+
this._objectColorMaps.push(...queue._objectColorMaps);
|
|
162
180
|
}
|
|
163
181
|
/**
|
|
164
182
|
* Push an item to the render queue
|
|
165
183
|
* @param camera - The camera for drawing the item
|
|
166
184
|
* @param drawable - The object to be drawn
|
|
167
|
-
|
|
168
|
-
*/ push(camera, drawable, renderOrder) {
|
|
185
|
+
*/ push(camera, drawable) {
|
|
169
186
|
if (drawable) {
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
itemList = this.newRenderItemList(false);
|
|
173
|
-
this._itemLists[renderOrder] = itemList;
|
|
187
|
+
if (!this._itemList) {
|
|
188
|
+
this._itemList = this.newRenderItemList();
|
|
174
189
|
}
|
|
175
190
|
const trans = drawable.getQueueType() === QUEUE_TRANSPARENT;
|
|
176
191
|
const unlit = drawable.isUnlit();
|
|
192
|
+
const transmission = !trans && drawable.needSceneColor();
|
|
193
|
+
this._needSceneColor ||= transmission;
|
|
194
|
+
this._drawTransparent ||= trans;
|
|
195
|
+
if (camera.enablePicking) {
|
|
196
|
+
drawable.getMaterial().objectColor = drawable.getObjectColor();
|
|
197
|
+
this._objectColorMaps[0].set(drawable.getId(), drawable);
|
|
198
|
+
}
|
|
177
199
|
if (drawable.isBatchable()) {
|
|
178
|
-
const instanceList = trans ? unlit ?
|
|
200
|
+
const instanceList = trans ? unlit ? this._itemList.transparent.unlit[0].instanceList : this._itemList.transparent.lit[0].instanceList : unlit ? transmission ? this._itemList.transmission.unlit[0].instanceList : this._itemList.opaque.unlit[0].instanceList : transmission ? this._itemList.transmission.lit[0].instanceList : this._itemList.opaque.lit[0].instanceList;
|
|
179
201
|
const hash = drawable.getInstanceId(this._renderPass);
|
|
180
202
|
let drawableList = instanceList[hash];
|
|
181
203
|
if (!drawableList) {
|
|
@@ -184,8 +206,20 @@ const defaultInstanceBindGroupAlloator = new InstanceBindGroupAllocator();
|
|
|
184
206
|
}
|
|
185
207
|
drawableList.push(drawable);
|
|
186
208
|
} else {
|
|
187
|
-
const list = trans ? unlit ?
|
|
188
|
-
|
|
209
|
+
const list = trans ? unlit ? this._itemList.transparent.unlit[0] : this._itemList.transparent.lit[0] : unlit ? transmission ? this._itemList.transmission.unlit[0] : this._itemList.opaque.unlit[0] : transmission ? this._itemList.transmission.lit[0] : this._itemList.opaque.lit[0];
|
|
210
|
+
const skinAnimation = !!drawable.getBoneMatrices();
|
|
211
|
+
const morphAnimation = !!drawable.getMorphData();
|
|
212
|
+
let queue;
|
|
213
|
+
if (skinAnimation && morphAnimation) {
|
|
214
|
+
queue = list.skinAndMorphItemList;
|
|
215
|
+
} else if (skinAnimation) {
|
|
216
|
+
queue = list.skinItemList;
|
|
217
|
+
} else if (morphAnimation) {
|
|
218
|
+
queue = list.morphItemList;
|
|
219
|
+
} else {
|
|
220
|
+
queue = list.itemList;
|
|
221
|
+
}
|
|
222
|
+
this.binaryInsert(queue, {
|
|
189
223
|
drawable,
|
|
190
224
|
sortDistance: drawable.getSortDistance(camera),
|
|
191
225
|
instanceData: null
|
|
@@ -199,13 +233,25 @@ const defaultInstanceBindGroupAlloator = new InstanceBindGroupAllocator();
|
|
|
199
233
|
drawable.pushRenderQueueRef(this._ref);
|
|
200
234
|
}
|
|
201
235
|
}
|
|
236
|
+
/** @internal */ getDrawableByColor(c) {
|
|
237
|
+
const id = (c[0] << 24) + (c[1] << 16) + (c[2] << 8) + c[3];
|
|
238
|
+
for (const m of this._objectColorMaps){
|
|
239
|
+
const drawable = m.get(id);
|
|
240
|
+
if (drawable) {
|
|
241
|
+
return drawable;
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
return null;
|
|
245
|
+
}
|
|
202
246
|
/**
|
|
203
247
|
* Removes all items in the render queue
|
|
204
248
|
*/ reset() {
|
|
205
|
-
this.
|
|
249
|
+
this._itemList = null;
|
|
206
250
|
this._shadowedLightList = [];
|
|
207
251
|
this._unshadowedLightList = [];
|
|
208
252
|
this._sunLight = null;
|
|
253
|
+
this._needSceneColor = false;
|
|
254
|
+
this._drawTransparent = false;
|
|
209
255
|
}
|
|
210
256
|
/** @internal */ dispose() {
|
|
211
257
|
this._ref.ref = null;
|
|
@@ -214,95 +260,97 @@ const defaultInstanceBindGroupAlloator = new InstanceBindGroupAllocator();
|
|
|
214
260
|
}
|
|
215
261
|
/** @internal */ end(camera, createRenderBundles) {
|
|
216
262
|
const frameCounter = Application.instance.device.frameInfo.frameCounter;
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
drawables[0]
|
|
241
|
-
|
|
263
|
+
const itemList = this._itemList;
|
|
264
|
+
if (!this.itemList) {
|
|
265
|
+
return this;
|
|
266
|
+
}
|
|
267
|
+
const lists = [
|
|
268
|
+
itemList.opaque.lit,
|
|
269
|
+
itemList.opaque.unlit,
|
|
270
|
+
itemList.transmission.lit,
|
|
271
|
+
itemList.transmission.unlit,
|
|
272
|
+
itemList.transparent.lit,
|
|
273
|
+
itemList.transparent.unlit
|
|
274
|
+
];
|
|
275
|
+
for(let i = 0; i < lists.length; i++){
|
|
276
|
+
const list = lists[i];
|
|
277
|
+
for (const info of list){
|
|
278
|
+
if (info.renderQueue !== this) {
|
|
279
|
+
continue;
|
|
280
|
+
}
|
|
281
|
+
const instanceList = info.instanceList;
|
|
282
|
+
for(const x in instanceList){
|
|
283
|
+
const drawables = instanceList[x];
|
|
284
|
+
if (drawables.length === 1) {
|
|
285
|
+
this.binaryInsert(info.itemList, {
|
|
286
|
+
drawable: drawables[0],
|
|
287
|
+
sortDistance: drawables[0].getSortDistance(camera),
|
|
288
|
+
instanceData: null
|
|
289
|
+
});
|
|
290
|
+
drawables[0].applyTransformUniforms(this);
|
|
291
|
+
const mat = drawables[0].getMaterial();
|
|
292
|
+
if (mat) {
|
|
293
|
+
info.materialList.add(mat.coreMaterial);
|
|
294
|
+
}
|
|
295
|
+
} else {
|
|
296
|
+
let bindGroup = null;
|
|
297
|
+
let item = null;
|
|
298
|
+
for(let i = 0; i < drawables.length; i++){
|
|
299
|
+
const drawable = drawables[i];
|
|
300
|
+
const instanceUniforms = drawable.getInstanceUniforms();
|
|
301
|
+
const instanceUniformsSize = instanceUniforms?.length ?? 0;
|
|
302
|
+
const stride = 16 + instanceUniformsSize;
|
|
303
|
+
if (!bindGroup || bindGroup.offset + stride > maxBufferSizeInFloats) {
|
|
304
|
+
bindGroup = this._bindGroupAllocator.allocateInstanceBindGroup(frameCounter, stride);
|
|
305
|
+
item = {
|
|
306
|
+
drawable,
|
|
307
|
+
sortDistance: drawable.getSortDistance(camera),
|
|
308
|
+
instanceData: {
|
|
309
|
+
bindGroup,
|
|
310
|
+
offset: bindGroup.offset,
|
|
311
|
+
numInstances: 0,
|
|
312
|
+
stride
|
|
313
|
+
}
|
|
314
|
+
};
|
|
315
|
+
this.binaryInsert(info.instanceItemList, item);
|
|
316
|
+
drawable.applyInstanceOffsetAndStride(this, stride, bindGroup.offset);
|
|
317
|
+
}
|
|
318
|
+
const instanceInfo = {
|
|
319
|
+
bindGroup,
|
|
320
|
+
offset: bindGroup.offset
|
|
321
|
+
};
|
|
322
|
+
this._instanceInfo.set(drawable, instanceInfo);
|
|
323
|
+
drawable.applyTransformUniforms(this);
|
|
324
|
+
drawable.applyMaterialUniforms(instanceInfo);
|
|
325
|
+
bindGroup.offset += stride;
|
|
326
|
+
item.instanceData.numInstances++;
|
|
327
|
+
const mat = drawable.getMaterial();
|
|
242
328
|
if (mat) {
|
|
243
329
|
info.materialList.add(mat.coreMaterial);
|
|
244
330
|
}
|
|
245
|
-
} else {
|
|
246
|
-
let bindGroup = null;
|
|
247
|
-
let item = null;
|
|
248
|
-
for(let i = 0; i < drawables.length; i++){
|
|
249
|
-
const drawable = drawables[i];
|
|
250
|
-
const instanceUniforms = drawable.getInstanceUniforms();
|
|
251
|
-
const instanceUniformsSize = instanceUniforms?.length ?? 0;
|
|
252
|
-
const stride = 16 + instanceUniformsSize;
|
|
253
|
-
if (!bindGroup || bindGroup.offset + stride > maxBufferSizeInFloats) {
|
|
254
|
-
bindGroup = this._bindGroupAllocator.allocateInstanceBindGroup(frameCounter, stride);
|
|
255
|
-
item = {
|
|
256
|
-
drawable,
|
|
257
|
-
sortDistance: drawable.getSortDistance(camera),
|
|
258
|
-
instanceData: {
|
|
259
|
-
bindGroup,
|
|
260
|
-
offset: bindGroup.offset,
|
|
261
|
-
numInstances: 0,
|
|
262
|
-
stride
|
|
263
|
-
}
|
|
264
|
-
};
|
|
265
|
-
this.binaryInsert(info.instanceItemList, item);
|
|
266
|
-
drawable.applyInstanceOffsetAndStride(this, stride, bindGroup.offset);
|
|
267
|
-
}
|
|
268
|
-
const instanceInfo = {
|
|
269
|
-
bindGroup,
|
|
270
|
-
offset: bindGroup.offset
|
|
271
|
-
};
|
|
272
|
-
this._instanceInfo.set(drawable, instanceInfo);
|
|
273
|
-
drawable.applyTransformUniforms(this);
|
|
274
|
-
drawable.applyMaterialUniforms(instanceInfo);
|
|
275
|
-
bindGroup.offset += stride;
|
|
276
|
-
item.instanceData.numInstances++;
|
|
277
|
-
const mat = drawable.getMaterial();
|
|
278
|
-
if (mat) {
|
|
279
|
-
info.materialList.add(mat.coreMaterial);
|
|
280
|
-
}
|
|
281
|
-
}
|
|
282
331
|
}
|
|
283
332
|
}
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
333
|
+
}
|
|
334
|
+
info.instanceList = {};
|
|
335
|
+
if (createRenderBundles) {
|
|
336
|
+
if (info.itemList.length > 0) {
|
|
337
|
+
info.renderBundle = new RenderBundleWrapper();
|
|
338
|
+
}
|
|
339
|
+
if (info.skinItemList.length > 0) {
|
|
340
|
+
info.skinRenderBundle = new RenderBundleWrapper();
|
|
341
|
+
}
|
|
342
|
+
if (info.morphItemList.length > 0) {
|
|
343
|
+
info.morphRenderBundle = new RenderBundleWrapper();
|
|
344
|
+
}
|
|
345
|
+
if (info.skinAndMorphItemList.length > 0) {
|
|
346
|
+
info.skinAndMorphRenderBundle = new RenderBundleWrapper();
|
|
347
|
+
}
|
|
348
|
+
if (info.instanceItemList.length > 0) {
|
|
349
|
+
info.instanceRenderBundle = new RenderBundleWrapper();
|
|
295
350
|
}
|
|
296
351
|
}
|
|
297
352
|
}
|
|
298
|
-
|
|
299
|
-
itemList.opaque.lit.forEach(info => {
|
|
300
|
-
info.itemList.sort((a, b) => (a.drawable.getMaterial()?.instanceId ?? 0) - (b.drawable.getMaterial()?.instanceId ?? 0))
|
|
301
|
-
});
|
|
302
|
-
itemList.opaque.unlit.forEach(info => {
|
|
303
|
-
info.itemList.sort((a, b) => (a.drawable.getMaterial()?.instanceId ?? 0) - (b.drawable.getMaterial()?.instanceId ?? 0))
|
|
304
|
-
});
|
|
305
|
-
*/ }
|
|
353
|
+
}
|
|
306
354
|
return this;
|
|
307
355
|
}
|
|
308
356
|
binaryInsert(itemList, item) {
|
|
@@ -326,63 +374,48 @@ const defaultInstanceBindGroupAlloator = new InstanceBindGroupAllocator();
|
|
|
326
374
|
/**
|
|
327
375
|
* Sorts the items in the render queue for rendering
|
|
328
376
|
*/ sortTransparentItems(cameraPos) {
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
377
|
+
if (this._itemList) {
|
|
378
|
+
this._itemList.transparent.lit[0].itemList.sort((a, b)=>this.drawableDistanceToCamera(b.drawable, cameraPos) - this.drawableDistanceToCamera(a.drawable, cameraPos));
|
|
379
|
+
this._itemList.transparent.lit[0].skinItemList.sort((a, b)=>this.drawableDistanceToCamera(b.drawable, cameraPos) - this.drawableDistanceToCamera(a.drawable, cameraPos));
|
|
380
|
+
this._itemList.transparent.lit[0].morphItemList.sort((a, b)=>this.drawableDistanceToCamera(b.drawable, cameraPos) - this.drawableDistanceToCamera(a.drawable, cameraPos));
|
|
381
|
+
this._itemList.transparent.lit[0].skinAndMorphItemList.sort((a, b)=>this.drawableDistanceToCamera(b.drawable, cameraPos) - this.drawableDistanceToCamera(a.drawable, cameraPos));
|
|
382
|
+
this._itemList.transparent.unlit[0].itemList.sort((a, b)=>this.drawableDistanceToCamera(b.drawable, cameraPos) - this.drawableDistanceToCamera(a.drawable, cameraPos));
|
|
383
|
+
this._itemList.transparent.unlit[0].skinItemList.sort((a, b)=>this.drawableDistanceToCamera(b.drawable, cameraPos) - this.drawableDistanceToCamera(a.drawable, cameraPos));
|
|
384
|
+
this._itemList.transparent.unlit[0].morphItemList.sort((a, b)=>this.drawableDistanceToCamera(b.drawable, cameraPos) - this.drawableDistanceToCamera(a.drawable, cameraPos));
|
|
385
|
+
this._itemList.transparent.unlit[0].skinAndMorphItemList.sort((a, b)=>this.drawableDistanceToCamera(b.drawable, cameraPos) - this.drawableDistanceToCamera(a.drawable, cameraPos));
|
|
334
386
|
}
|
|
335
387
|
}
|
|
336
388
|
drawableDistanceToCamera(drawable, cameraPos) {
|
|
337
389
|
const drawablePos = drawable.getXForm().position;
|
|
338
390
|
return Vector3.distanceSq(drawablePos, cameraPos);
|
|
339
391
|
}
|
|
340
|
-
|
|
392
|
+
newRenderItemListInfo() {
|
|
341
393
|
return {
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
itemList: [],
|
|
368
|
-
skinItemList: [],
|
|
369
|
-
instanceItemList: [],
|
|
370
|
-
materialList: new Set(),
|
|
371
|
-
instanceList: {},
|
|
372
|
-
renderQueue: this
|
|
373
|
-
}
|
|
374
|
-
],
|
|
375
|
-
unlit: empty ? [] : [
|
|
376
|
-
{
|
|
377
|
-
itemList: [],
|
|
378
|
-
skinItemList: [],
|
|
379
|
-
instanceItemList: [],
|
|
380
|
-
materialList: new Set(),
|
|
381
|
-
instanceList: {},
|
|
382
|
-
renderQueue: this
|
|
383
|
-
}
|
|
384
|
-
]
|
|
385
|
-
}
|
|
394
|
+
itemList: [],
|
|
395
|
+
skinItemList: [],
|
|
396
|
+
morphItemList: [],
|
|
397
|
+
skinAndMorphItemList: [],
|
|
398
|
+
instanceItemList: [],
|
|
399
|
+
materialList: new Set(),
|
|
400
|
+
instanceList: {},
|
|
401
|
+
renderQueue: this
|
|
402
|
+
};
|
|
403
|
+
}
|
|
404
|
+
newRenderItemListBundle() {
|
|
405
|
+
return {
|
|
406
|
+
lit: [
|
|
407
|
+
this.newRenderItemListInfo()
|
|
408
|
+
],
|
|
409
|
+
unlit: [
|
|
410
|
+
this.newRenderItemListInfo()
|
|
411
|
+
]
|
|
412
|
+
};
|
|
413
|
+
}
|
|
414
|
+
newRenderItemList() {
|
|
415
|
+
return {
|
|
416
|
+
opaque: this.newRenderItemListBundle(),
|
|
417
|
+
transmission: this.newRenderItemListBundle(),
|
|
418
|
+
transparent: this.newRenderItemListBundle()
|
|
386
419
|
};
|
|
387
420
|
}
|
|
388
421
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render_queue.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"render_queue.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|