@zephyr3d/scene 0.5.0 → 0.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (199) hide show
  1. package/README.md +1 -1
  2. package/dist/animation/animationset.js +37 -37
  3. package/dist/animation/morphtrack.js +7 -5
  4. package/dist/animation/morphtrack.js.map +1 -1
  5. package/dist/animation/skeleton.js +11 -9
  6. package/dist/animation/skeleton.js.map +1 -1
  7. package/dist/asset/assetmanager.js +2 -2
  8. package/dist/asset/loaders/gltf/gltf_loader.js +7 -3
  9. package/dist/asset/loaders/gltf/gltf_loader.js.map +1 -1
  10. package/dist/asset/loaders/image/webimage_loader.js +16 -0
  11. package/dist/asset/loaders/image/webimage_loader.js.map +1 -1
  12. package/dist/asset/model.js +3 -9
  13. package/dist/asset/model.js.map +1 -1
  14. package/dist/blitter/bilateralblur.js +222 -0
  15. package/dist/{render/temporalcache.js.map → blitter/bilateralblur.js.map} +1 -1
  16. package/dist/blitter/blitter.js +7 -1
  17. package/dist/blitter/blitter.js.map +1 -1
  18. package/dist/blitter/depthlimitedgaussion.js +96 -39
  19. package/dist/blitter/depthlimitedgaussion.js.map +1 -1
  20. package/dist/blitter/gaussianblur.js +21 -21
  21. package/dist/camera/camera.js +142 -1
  22. package/dist/camera/camera.js.map +1 -1
  23. package/dist/index.d.ts +1178 -745
  24. package/dist/index.js +11 -6
  25. package/dist/index.js.map +1 -1
  26. package/dist/material/blinn.js +9 -3
  27. package/dist/material/blinn.js.map +1 -1
  28. package/dist/material/lambert.js +6 -2
  29. package/dist/material/lambert.js.map +1 -1
  30. package/dist/material/material.js +3 -1
  31. package/dist/material/material.js.map +1 -1
  32. package/dist/material/meshmaterial.js +73 -33
  33. package/dist/material/meshmaterial.js.map +1 -1
  34. package/dist/material/mixins/albedocolor.js +5 -4
  35. package/dist/material/mixins/albedocolor.js.map +1 -1
  36. package/dist/material/mixins/lightmodel/blinnphong.js +17 -7
  37. package/dist/material/mixins/lightmodel/blinnphong.js.map +1 -1
  38. package/dist/material/mixins/lightmodel/lambert.js +5 -5
  39. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +13 -4
  40. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
  41. package/dist/material/mixins/lightmodel/pbrspecularglossness.js +13 -4
  42. package/dist/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -1
  43. package/dist/material/mixins/pbr/common.js +27 -15
  44. package/dist/material/mixins/pbr/common.js.map +1 -1
  45. package/dist/material/pbrmr.js +14 -3
  46. package/dist/material/pbrmr.js.map +1 -1
  47. package/dist/material/pbrsg.js +14 -3
  48. package/dist/material/pbrsg.js.map +1 -1
  49. package/dist/material/shader/helper.js +36 -21
  50. package/dist/material/shader/helper.js.map +1 -1
  51. package/dist/posteffect/bloom.js +1 -10
  52. package/dist/posteffect/bloom.js.map +1 -1
  53. package/dist/posteffect/compositor.js +43 -24
  54. package/dist/posteffect/compositor.js.map +1 -1
  55. package/dist/posteffect/fxaa.js +3 -11
  56. package/dist/posteffect/fxaa.js.map +1 -1
  57. package/dist/posteffect/grayscale.js +3 -11
  58. package/dist/posteffect/grayscale.js.map +1 -1
  59. package/dist/posteffect/posteffect.js +4 -0
  60. package/dist/posteffect/posteffect.js.map +1 -1
  61. package/dist/posteffect/sao.js +44 -24
  62. package/dist/posteffect/sao.js.map +1 -1
  63. package/dist/posteffect/ssr.js +536 -0
  64. package/dist/{material/lit.js.map → posteffect/ssr.js.map} +1 -1
  65. package/dist/posteffect/tonemap.js +3 -11
  66. package/dist/posteffect/tonemap.js.map +1 -1
  67. package/dist/posteffect/water.js +305 -337
  68. package/dist/posteffect/water.js.map +1 -1
  69. package/dist/render/abuffer_oit.js +2 -2
  70. package/dist/render/clipmap.js +16 -19
  71. package/dist/render/clipmap.js.map +1 -1
  72. package/dist/render/cull_visitor.js +5 -3
  73. package/dist/render/cull_visitor.js.map +1 -1
  74. package/dist/render/depthpass.js +17 -1
  75. package/dist/render/depthpass.js.map +1 -1
  76. package/dist/render/drawable_mixin.js +25 -19
  77. package/dist/render/drawable_mixin.js.map +1 -1
  78. package/dist/render/envlight.js +4 -2
  79. package/dist/render/envlight.js.map +1 -1
  80. package/dist/render/fft_wavegenerator.js +989 -0
  81. package/dist/{shaders/framework.js.map → render/fft_wavegenerator.js.map} +1 -1
  82. package/dist/render/gerstner_wavegenerator.js +265 -0
  83. package/dist/{material/standard.js.map → render/gerstner_wavegenerator.js.map} +1 -1
  84. package/dist/render/globalbindgroup_allocator.js +2 -1
  85. package/dist/render/globalbindgroup_allocator.js.map +1 -1
  86. package/dist/render/hzb.js +273 -0
  87. package/dist/{material/terrainlightmodel.js.map → render/hzb.js.map} +1 -1
  88. package/dist/render/lightpass.js +35 -3
  89. package/dist/render/lightpass.js.map +1 -1
  90. package/dist/render/objectcolorpass.js +2 -1
  91. package/dist/render/objectcolorpass.js.map +1 -1
  92. package/dist/render/render_queue.js +72 -52
  93. package/dist/render/render_queue.js.map +1 -1
  94. package/dist/render/renderbundle_wrapper.js +79 -0
  95. package/dist/render/renderbundle_wrapper.js.map +1 -1
  96. package/dist/render/renderer.js +75 -36
  97. package/dist/render/renderer.js.map +1 -1
  98. package/dist/render/renderpass.js +16 -13
  99. package/dist/render/renderpass.js.map +1 -1
  100. package/dist/render/shadowmap_pass.js +6 -0
  101. package/dist/render/shadowmap_pass.js.map +1 -1
  102. package/dist/render/sky.js +12 -13
  103. package/dist/render/sky.js.map +1 -1
  104. package/dist/render/watermesh.js +94 -828
  105. package/dist/render/watermesh.js.map +1 -1
  106. package/dist/render/wavegenerator.js +8 -0
  107. package/dist/render/wavegenerator.js.map +1 -0
  108. package/dist/scene/batchgroup.js +60 -14
  109. package/dist/scene/batchgroup.js.map +1 -1
  110. package/dist/scene/environment.js +2 -2
  111. package/dist/scene/graph_node.js +0 -5
  112. package/dist/scene/graph_node.js.map +1 -1
  113. package/dist/scene/light.js +5 -5
  114. package/dist/scene/mesh.js +34 -18
  115. package/dist/scene/mesh.js.map +1 -1
  116. package/dist/scene/octree.js +5 -2
  117. package/dist/scene/octree.js.map +1 -1
  118. package/dist/scene/raycast_visitor.js +4 -2
  119. package/dist/scene/raycast_visitor.js.map +1 -1
  120. package/dist/scene/scene.js +1 -1
  121. package/dist/scene/scene_node.js +9 -5
  122. package/dist/scene/scene_node.js.map +1 -1
  123. package/dist/scene/terrain/grass.js +3 -4
  124. package/dist/scene/terrain/grass.js.map +1 -1
  125. package/dist/scene/terrain/heightfield.js +135 -53
  126. package/dist/scene/terrain/heightfield.js.map +1 -1
  127. package/dist/scene/terrain/patch.js +3 -4
  128. package/dist/scene/terrain/patch.js.map +1 -1
  129. package/dist/scene/terrain/terrain.js +1 -1
  130. package/dist/scene/xform.js +7 -9
  131. package/dist/scene/xform.js.map +1 -1
  132. package/dist/shaders/misc.js +10 -1
  133. package/dist/shaders/misc.js.map +1 -1
  134. package/dist/shaders/noise.js +81 -16
  135. package/dist/shaders/noise.js.map +1 -1
  136. package/dist/shaders/shadow.js +1 -9
  137. package/dist/shaders/shadow.js.map +1 -1
  138. package/dist/shaders/ssr.js +442 -0
  139. package/dist/{material/terrainmat.js.map → shaders/ssr.js.map} +1 -1
  140. package/dist/shaders/water.js +377 -250
  141. package/dist/shaders/water.js.map +1 -1
  142. package/dist/shadow/shadowmapper.js +11 -11
  143. package/dist/shapes/cylinder.js +6 -5
  144. package/dist/shapes/cylinder.js.map +1 -1
  145. package/dist/utility/bounding_volume.js +1 -53
  146. package/dist/utility/bounding_volume.js.map +1 -1
  147. package/dist/utility/misc.js +93 -0
  148. package/dist/utility/misc.js.map +1 -0
  149. package/dist/utility/shprojection.js +2 -7
  150. package/dist/utility/shprojection.js.map +1 -1
  151. package/dist/utility/textures/ggxlut.js +213 -0
  152. package/dist/utility/textures/ggxlut.js.map +1 -0
  153. package/dist/utility/textures/gradientnoise.js +61 -0
  154. package/dist/utility/textures/gradientnoise.js.map +1 -0
  155. package/dist/utility/textures/randomnoise.js +41 -0
  156. package/dist/utility/textures/randomnoise.js.map +1 -0
  157. package/dist/values.js +8 -1
  158. package/dist/values.js.map +1 -1
  159. package/package.json +4 -8
  160. package/dist/animation/usertrack.js +0 -47
  161. package/dist/animation/usertrack.js.map +0 -1
  162. package/dist/material/grassmat.js +0 -127
  163. package/dist/material/grassmat.js.map +0 -1
  164. package/dist/material/lightmodel.js +0 -2074
  165. package/dist/material/lightmodel.js.map +0 -1
  166. package/dist/material/lit.js +0 -578
  167. package/dist/material/mixins/pbr/metallicroughness.js +0 -126
  168. package/dist/material/mixins/pbr/metallicroughness.js.map +0 -1
  169. package/dist/material/mixins/pbr/specularglossness.js +0 -104
  170. package/dist/material/mixins/pbr/specularglossness.js.map +0 -1
  171. package/dist/material/pbr.js +0 -27
  172. package/dist/material/pbr.js.map +0 -1
  173. package/dist/material/standard.js +0 -282
  174. package/dist/material/terrainlightmodel.js +0 -259
  175. package/dist/material/terrainmat.js +0 -357
  176. package/dist/render/depth_pass.js +0 -47
  177. package/dist/render/depth_pass.js.map +0 -1
  178. package/dist/render/forward.js +0 -186
  179. package/dist/render/forward.js.map +0 -1
  180. package/dist/render/forward_pass.js +0 -137
  181. package/dist/render/forward_pass.js.map +0 -1
  182. package/dist/render/helper.js +0 -38
  183. package/dist/render/helper.js.map +0 -1
  184. package/dist/render/objectpool.js +0 -295
  185. package/dist/render/objectpool.js.map +0 -1
  186. package/dist/render/renderscheme.js +0 -61
  187. package/dist/render/renderscheme.js.map +0 -1
  188. package/dist/render/temporalcache.js +0 -222
  189. package/dist/scene/model.js +0 -111
  190. package/dist/scene/model.js.map +0 -1
  191. package/dist/scene/octree_update_visitor.js +0 -20
  192. package/dist/scene/octree_update_visitor.js.map +0 -1
  193. package/dist/shaders/builtins.js +0 -110
  194. package/dist/shaders/builtins.js.map +0 -1
  195. package/dist/shaders/framework.js +0 -723
  196. package/dist/shaders/lighting.js +0 -335
  197. package/dist/shaders/lighting.js.map +0 -1
  198. package/dist/utility/sheenlut.js +0 -196
  199. package/dist/utility/sheenlut.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"water.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"water.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -5,13 +5,14 @@ import '../material/lambert.js';
5
5
  import '../material/blinn.js';
6
6
  import '../material/unlit.js';
7
7
  import '@zephyr3d/device';
8
+ import '../values.js';
9
+ import '../app.js';
8
10
  import '../material/meshmaterial.js';
9
11
  import '../material/grassmaterial.js';
10
12
  import '../material/terrainmaterial.js';
11
13
  import '../material/pbrmr.js';
12
14
  import '../material/pbrsg.js';
13
15
  import '@zephyr3d/base';
14
- import '../app.js';
15
16
 
16
17
  /**
17
18
  * per-pixel linked list OIT renderer using ABuffer.
@@ -342,7 +343,6 @@ import '../app.js';
342
343
  stencilStates.setBackOp('keep', 'keep', 'replace');
343
344
  stencilStates.setReference(0);
344
345
  stencilStates.setReadMask(0xff);
345
- console.log(this._compositeProgram.getShaderSource('fragment'));
346
346
  }
347
347
  return this._compositeProgram;
348
348
  }
@@ -1,8 +1,7 @@
1
- import { AABB, Vector2, Matrix4x4, Vector3, ClipState } from '@zephyr3d/base';
1
+ import { AABB, Matrix4x4, Vector3, ClipState, Vector2 } from '@zephyr3d/base';
2
2
  import { Primitive } from './primitive.js';
3
3
 
4
4
  const tmpAABB = new AABB();
5
- const tmpExtents = new Vector2(0, 0);
6
5
  const modelMatrices = [
7
6
  Matrix4x4.identity(),
8
7
  // rotation z 270
@@ -358,37 +357,35 @@ const modelMatrices = [
358
357
  intervalsOverlap(a0, a1, b0, b1) {
359
358
  return a0 <= b1 && b0 <= a1;
360
359
  }
361
- visible(aabb, camera, modelMatrix, offset, scale, AABBExtents, gridScale) {
360
+ visible(ctx, aabb, camera, modelMatrix, offset, scale, gridScale) {
362
361
  if (!modelMatrix) {
363
362
  tmpAABB.minPoint.set(aabb.minPoint);
364
363
  tmpAABB.maxPoint.set(aabb.maxPoint);
365
364
  } else {
366
365
  AABB.transform(aabb, modelMatrix, tmpAABB);
367
366
  }
368
- tmpAABB.minPoint.x = (tmpAABB.minPoint.x * scale + offset.x) * gridScale - AABBExtents.x;
369
- tmpAABB.minPoint.z = (tmpAABB.minPoint.y * scale + offset.y) * gridScale - AABBExtents.x;
370
- tmpAABB.minPoint.y = -AABBExtents.y;
371
- tmpAABB.maxPoint.x = (tmpAABB.maxPoint.x * scale + offset.x) * gridScale + AABBExtents.x;
372
- tmpAABB.maxPoint.z = (tmpAABB.maxPoint.y * scale + offset.y) * gridScale + AABBExtents.x;
373
- tmpAABB.maxPoint.y = AABBExtents.y;
367
+ const minX = (tmpAABB.minPoint.x * scale + offset.x) * gridScale;
368
+ const maxX = (tmpAABB.maxPoint.x * scale + offset.x) * gridScale;
369
+ const minZ = (tmpAABB.minPoint.y * scale + offset.y) * gridScale;
370
+ const maxZ = (tmpAABB.maxPoint.y * scale + offset.y) * gridScale;
371
+ ctx.calcAABB(ctx.userData, minX, maxX, minZ, maxZ, tmpAABB);
374
372
  return tmpAABB.getClipStateWithFrustum(camera.frustum) !== ClipState.NOT_CLIPPED;
375
373
  }
376
374
  draw(context, numMipmaps) {
377
375
  let drawn = 0;
378
- const distX = Math.max(Math.abs(context.position.x - context.minWorldPos.x), Math.abs(context.position.x - context.maxWorldPos.x));
379
- const distY = Math.max(Math.abs(context.position.y - context.minWorldPos.y), Math.abs(context.position.y - context.maxWorldPos.y));
376
+ const distX = Math.max(Math.abs(context.position.x - context.minMaxWorldPos.x), Math.abs(context.position.x - context.minMaxWorldPos.z));
377
+ const distY = Math.max(Math.abs(context.position.y - context.minMaxWorldPos.y), Math.abs(context.position.y - context.minMaxWorldPos.w));
380
378
  const maxDist = Math.min(Math.max(distX, distY), context.camera.getFarPlane());
381
- const mipLevels = Math.ceil(Math.log2(maxDist / (this._tileResolution * context.gridScale))) + 1;
379
+ const mipLevels = Math.max(Math.ceil(Math.log2(maxDist / (this._tileResolution * context.gridScale))), 0) + 1;
382
380
  const snappedPos = new Vector2();
383
381
  const tileSize = new Vector2();
384
382
  const base = new Vector2();
385
383
  const offset = new Vector2();
386
384
  const posX = context.position.x / context.gridScale;
387
385
  const posY = context.position.y / context.gridScale;
388
- const h = context.AABBExtents ?? tmpExtents;
389
386
  // draw cross
390
387
  snappedPos.setXY(Math.floor(posX), Math.floor(posY));
391
- if (this.visible(this._crossMeshAABB, context.camera, null, snappedPos, 1, h, context.gridScale)) {
388
+ if (this.visible(context, this._crossMeshAABB, context.camera, null, snappedPos, 1, context.gridScale)) {
392
389
  context.drawPrimitive(this._crossMesh, modelMatrices[0], snappedPos, 1, context.gridScale);
393
390
  drawn++;
394
391
  }
@@ -406,8 +403,8 @@ const modelMatrices = [
406
403
  const fillX = x >= 2 ? scale : 0;
407
404
  const fillY = y >= 2 ? scale : 0;
408
405
  offset.setXY(base.x + x * tileSize.x + fillX, base.y + y * tileSize.y + fillY);
409
- if (this.intervalsOverlap(offset.x * context.gridScale, (offset.x + tileSize.x) * context.gridScale, context.minWorldPos.x, context.maxWorldPos.x) && this.intervalsOverlap(offset.y * context.gridScale, (offset.y + tileSize.y) * context.gridScale, context.minWorldPos.y, context.maxWorldPos.y)) {
410
- if (this.visible(this._tileMeshBBox, context.camera, null, offset, scale, h, context.gridScale)) {
406
+ if (this.intervalsOverlap(offset.x * context.gridScale, (offset.x + tileSize.x) * context.gridScale, context.minMaxWorldPos.x, context.minMaxWorldPos.z) && this.intervalsOverlap(offset.y * context.gridScale, (offset.y + tileSize.y) * context.gridScale, context.minMaxWorldPos.y, context.minMaxWorldPos.w)) {
407
+ if (this.visible(context, this._tileMeshBBox, context.camera, null, offset, scale, context.gridScale)) {
411
408
  context.drawPrimitive(this._tileMesh, modelMatrices[0], offset, scale, context.gridScale);
412
409
  drawn++;
413
410
  }
@@ -415,7 +412,7 @@ const modelMatrices = [
415
412
  }
416
413
  }
417
414
  // draw filler
418
- if (this.visible(this._fillerMeshAABB, context.camera, null, snappedPos, scale, h, context.gridScale)) {
415
+ if (this.visible(context, this._fillerMeshAABB, context.camera, null, snappedPos, scale, context.gridScale)) {
419
416
  context.drawPrimitive(this._fillerMesh, modelMatrices[0], snappedPos, scale, context.gridScale);
420
417
  drawn++;
421
418
  }
@@ -428,13 +425,13 @@ const modelMatrices = [
428
425
  let r = 0;
429
426
  r |= d.x >= scale ? 0 : 2;
430
427
  r |= d.y >= scale ? 0 : 1;
431
- if (this.visible(this._trimMeshAABB, context.camera, r === 0 ? null : modelMatrices[r], tileCentre, scale, h, context.gridScale)) {
428
+ if (this.visible(context, this._trimMeshAABB, context.camera, r === 0 ? null : modelMatrices[r], tileCentre, scale, context.gridScale)) {
432
429
  context.drawPrimitive(this._trimMesh, modelMatrices[r], tileCentre, scale, context.gridScale);
433
430
  drawn++;
434
431
  }
435
432
  // draw seam
436
433
  const nextBase = new Vector2(nextSnappedPos.x - (this._tileResolution << l + 1), nextSnappedPos.y - (this._tileResolution << l + 1));
437
- if (this.visible(this._seamMeshAABB, context.camera, null, nextBase, scale, h, context.gridScale)) {
434
+ if (this.visible(context, this._seamMeshAABB, context.camera, null, nextBase, scale, context.gridScale)) {
438
435
  context.drawPrimitive(this._seamMesh, modelMatrices[0], nextBase, scale, context.gridScale);
439
436
  drawn++;
440
437
  }
@@ -1 +1 @@
1
- {"version":3,"file":"clipmap.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"clipmap.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -94,9 +94,11 @@ import { RENDER_PASS_TYPE_SHADOWMAP } from '../values.js';
94
94
  }
95
95
  /** @internal */ visitBatchGroup(node) {
96
96
  if (!node.hidden) {
97
- const renderQueue = node.getRenderQueue(this);
98
- this.pushRenderQueue(renderQueue);
99
- return true;
97
+ const clipState = this.getClipStateWithNode(node);
98
+ if (clipState !== ClipState.NOT_CLIPPED) {
99
+ node.cull(this);
100
+ return true;
101
+ }
100
102
  }
101
103
  return false;
102
104
  }
@@ -1 +1 @@
1
- {"version":3,"file":"cull_visitor.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"cull_visitor.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -9,13 +9,29 @@ import { ShaderHelper } from '../material/shader/helper.js';
9
9
  *
10
10
  * @public
11
11
  */ class DepthPass extends RenderPass {
12
+ _renderBackface;
13
+ _encodeDepth;
12
14
  /**
13
15
  * Creates an instance of DepthRenderPass
14
16
  */ constructor(){
15
17
  super(RENDER_PASS_TYPE_DEPTH);
18
+ this._renderBackface = false;
19
+ this._encodeDepth = false;
20
+ }
21
+ get renderBackface() {
22
+ return this._renderBackface;
23
+ }
24
+ set renderBackface(val) {
25
+ this._renderBackface = !!val;
26
+ }
27
+ get encodeDepth() {
28
+ return this._encodeDepth;
29
+ }
30
+ set encodeDepth(val) {
31
+ this._encodeDepth = !!val;
16
32
  }
17
33
  /** @internal */ _getGlobalBindGroupHash(ctx) {
18
- return '';
34
+ return `${Number(this._renderBackface)}:${Number(this._encodeDepth)}`;
19
35
  }
20
36
  /** @internal */ renderItems(ctx, renderQueue) {
21
37
  const items = renderQueue.itemList;
@@ -1 +1 @@
1
- {"version":3,"file":"depthpass.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"depthpass.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1,17 +1,20 @@
1
1
  import { Vector4 } from '@zephyr3d/base';
2
- import { ProgramBuilder } from '@zephyr3d/device';
3
2
  import { ShaderHelper } from '../material/shader/helper.js';
4
3
  import '../material/lambert.js';
5
4
  import '../material/blinn.js';
6
5
  import '../material/unlit.js';
6
+ import '@zephyr3d/device';
7
+ import { MaterialVaryingFlags } from '../values.js';
8
+ import { Application } from '../app.js';
7
9
  import '../material/meshmaterial.js';
8
10
  import '../material/grassmaterial.js';
9
11
  import '../material/terrainmaterial.js';
10
12
  import '../material/pbrmr.js';
11
13
  import '../material/pbrsg.js';
12
- import { Application } from '../app.js';
13
14
 
14
15
  let _drawableId = 0;
16
+ const instanceBindGroupTransfromTags = new WeakMap();
17
+ const drawableBindGroupTransfromTags = new WeakMap();
15
18
  function mixinDrawable(baseCls) {
16
19
  const cls = class extends baseCls {
17
20
  _mdRenderQueueRef;
@@ -75,11 +78,23 @@ function mixinDrawable(baseCls) {
75
78
  }
76
79
  applyTransformUniforms(renderQueue) {
77
80
  const instanceInfo = renderQueue.getInstanceInfo(this);
78
- const drawableBindGroup = this.getDrawableBindGroup(Application.instance.device, !!instanceInfo, renderQueue);
81
+ const currentTag = this.getXForm().transformTag;
79
82
  if (instanceInfo) {
80
- instanceInfo.bindGroup.bindGroup.setRawData(ShaderHelper.getInstanceDataUniformName(), instanceInfo.offset * 4, this.getXForm().worldMatrix, 0, 16);
83
+ const tag = instanceBindGroupTransfromTags.get(instanceInfo) ?? -1;
84
+ if (tag !== currentTag) {
85
+ instanceInfo.bindGroup.bindGroup.setRawData(ShaderHelper.getInstanceDataUniformName(), instanceInfo.offset * 4, this.getXForm().worldMatrix, 0, 16);
86
+ instanceBindGroupTransfromTags.set(instanceInfo, tag);
87
+ }
81
88
  } else {
82
- drawableBindGroup.setValue(ShaderHelper.getWorldMatrixUniformName(), this.getXForm().worldMatrix);
89
+ const drawableBindGroup = this.getDrawableBindGroup(Application.instance.device, false, renderQueue);
90
+ const tag = drawableBindGroupTransfromTags.get(drawableBindGroup) ?? -1;
91
+ if (tag !== currentTag) {
92
+ drawableBindGroup.setValue(ShaderHelper.getWorldMatrixUniformName(), this.getXForm().worldMatrix);
93
+ if (this.getBoneMatrices()) {
94
+ drawableBindGroup.setValue(ShaderHelper.getBoneInvBindMatrixUniformName(), this.invWorldMatrix);
95
+ }
96
+ drawableBindGroupTransfromTags.set(drawableBindGroup, tag);
97
+ }
83
98
  }
84
99
  }
85
100
  applyMaterialUniforms(instanceInfo) {
@@ -93,13 +108,13 @@ function mixinDrawable(baseCls) {
93
108
  const drawableBindGroup = this.getDrawableBindGroup(device, !!ctx.instanceData, ctx.renderQueue);
94
109
  device.setBindGroup(1, drawableBindGroup);
95
110
  device.setBindGroup(3, ctx.instanceData ? ctx.instanceData.bindGroup.bindGroup : null);
96
- if (ctx.skinAnimation) {
111
+ if (ctx.materialFlags & MaterialVaryingFlags.SKIN_ANIMATION) {
97
112
  const boneTexture = this.getBoneMatrices();
98
113
  drawableBindGroup.setTexture(ShaderHelper.getBoneMatricesUniformName(), boneTexture);
99
- drawableBindGroup.setValue(ShaderHelper.getBoneInvBindMatrixUniformName(), this.getInvBindMatrix());
114
+ drawableBindGroup.setValue(ShaderHelper.getBoneInvBindMatrixUniformName(), this.invWorldMatrix);
100
115
  drawableBindGroup.setValue(ShaderHelper.getBoneTextureSizeUniformName(), boneTexture.width);
101
116
  }
102
- if (ctx.morphAnimation) {
117
+ if (ctx.materialFlags & MaterialVaryingFlags.MORPH_ANIMATION) {
103
118
  const morphData = this.getMorphData();
104
119
  const morphInfo = this.getMorphInfo();
105
120
  drawableBindGroup.setTexture(ShaderHelper.getMorphDataUniformName(), morphData);
@@ -111,16 +126,8 @@ function mixinDrawable(baseCls) {
111
126
  const morphing = !!this.getMorphData();
112
127
  let bindGroup = instancing ? this._mdDrawableBindGroupInstanced.get(renderQueue) : skinning && morphing ? this._mdDrawableBindGroupSkinMorph : skinning ? this._mdDrawableBindGroupSkin : morphing ? this._mdDrawableBindGroupMorph : this._mdDrawableBindGroup;
113
128
  if (!bindGroup) {
114
- const buildInfo = new ProgramBuilder(device).buildRender({
115
- vertex (pb) {
116
- ShaderHelper.vertexShaderDrawableStuff(this, skinning, morphing, instancing);
117
- pb.main(function() {});
118
- },
119
- fragment (pb) {
120
- pb.main(function() {});
121
- }
122
- });
123
- bindGroup = device.createBindGroup(buildInfo[2][1]);
129
+ const layout = ShaderHelper.getDrawableBindGroupLayout(skinning, morphing, instancing);
130
+ bindGroup = device.createBindGroup(layout);
124
131
  if (instancing) {
125
132
  this._mdDrawableBindGroupInstanced.set(renderQueue, bindGroup);
126
133
  } else if (skinning && morphing) {
@@ -128,7 +135,6 @@ function mixinDrawable(baseCls) {
128
135
  } else if (skinning) {
129
136
  this._mdDrawableBindGroupSkin = bindGroup;
130
137
  } else if (morphing) {
131
- const layout = buildInfo[2][1];
132
138
  const bindName = layout.nameMap?.[ShaderHelper.getMorphInfoUniformName()] ?? ShaderHelper.getMorphInfoUniformName();
133
139
  for(let binding = 0; binding < layout.entries.length; binding++){
134
140
  const bindingPoint = layout.entries[binding];
@@ -1 +1 @@
1
- {"version":3,"file":"drawable_mixin.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"drawable_mixin.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -390,7 +390,9 @@ import { Application } from '../app.js';
390
390
  * {@inheritDoc EnvironmentLighting.getRadiance}
391
391
  * @override
392
392
  */ getRadiance(scope, refl, roughness) {
393
- return null;
393
+ const pb = scope.$builder;
394
+ const factor = pb.add(pb.mul(refl.y, 0.5), 0.5);
395
+ return pb.mix(scope[EnvHemisphericAmbient.UNIFORM_NAME_AMBIENT_DOWN], scope[EnvHemisphericAmbient.UNIFORM_NAME_AMBIENT_UP], factor).rgb;
394
396
  }
395
397
  /**
396
398
  * {@inheritDoc EnvironmentLighting.getIrradiance}
@@ -404,7 +406,7 @@ import { Application } from '../app.js';
404
406
  * {@inheritDoc EnvironmentLighting.hasRadiance}
405
407
  * @override
406
408
  */ hasRadiance() {
407
- return false;
409
+ return true;
408
410
  }
409
411
  /**
410
412
  * {@inheritDoc EnvironmentLighting.hasIrradiance}
@@ -1 +1 @@
1
- {"version":3,"file":"envlight.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"envlight.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}