minecraft-renderer 0.1.72 → 0.1.73

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 (62) hide show
  1. package/README.md +1 -1
  2. package/dist/mesher.js +81 -81
  3. package/dist/mesher.js.map +3 -3
  4. package/dist/mesherWasm.js +1183 -943
  5. package/dist/minecraft-renderer.js +249 -78
  6. package/dist/minecraft-renderer.js.meta.json +1 -1
  7. package/dist/threeWorker.js +1732 -1001
  8. package/package.json +3 -3
  9. package/src/graphicsBackend/rendererDefaultOptions.ts +2 -7
  10. package/src/graphicsBackend/rendererOptionsSync.ts +1 -1
  11. package/src/lib/bakeLegacyLight.ts +17 -0
  12. package/src/lib/blockEntityLightRegistry.test.ts +18 -0
  13. package/src/lib/blockEntityLightRegistry.ts +75 -0
  14. package/src/lib/blockEntityLighting.test.ts +30 -0
  15. package/src/lib/blockEntityLighting.ts +53 -0
  16. package/src/lib/worldrendererCommon.ts +14 -6
  17. package/src/mesher-shared/blockEntityMetadata.test.ts +33 -0
  18. package/src/mesher-shared/blockEntityMetadata.ts +19 -3
  19. package/src/mesher-shared/exportedGeometryTypes.ts +11 -0
  20. package/src/mesher-shared/models.ts +161 -92
  21. package/src/mesher-shared/shared.ts +15 -4
  22. package/src/mesher-shared/tests/liquidQuadInvariant.test.ts +40 -0
  23. package/src/mesher-shared/world.ts +12 -0
  24. package/src/mesher-shared/worldLighting.test.ts +54 -0
  25. package/src/playground/baseScene.ts +1 -1
  26. package/src/three/bannerRenderer.ts +10 -3
  27. package/src/three/chunkMeshManager.ts +663 -69
  28. package/src/three/cubeDrawSpans.ts +74 -0
  29. package/src/three/cubeMultiDraw.ts +119 -0
  30. package/src/three/documentRenderer.ts +0 -2
  31. package/src/three/entities.ts +5 -6
  32. package/src/three/entity/EntityMesh.ts +7 -5
  33. package/src/three/entity/gltfAnimationUtils.ts +5 -3
  34. package/src/three/globalBlockBuffer.ts +208 -12
  35. package/src/three/globalLegacyBuffer.ts +701 -0
  36. package/src/three/itemMesh.ts +5 -2
  37. package/src/three/legacySectionCull.ts +85 -0
  38. package/src/three/modules/sciFiWorldReveal.ts +347 -703
  39. package/src/three/modules/starfield.ts +3 -2
  40. package/src/three/sectionRaycastAabb.ts +25 -0
  41. package/src/three/shaders/cubeBlockShader.ts +80 -17
  42. package/src/three/shaders/legacyBlockShader.ts +292 -0
  43. package/src/three/skyboxRenderer.ts +1 -1
  44. package/src/three/tests/chunkMeshManagerLegacy.test.ts +286 -0
  45. package/src/three/tests/cubeDrawSpans.test.ts +73 -0
  46. package/src/three/tests/globalLegacyBuffer.test.ts +360 -0
  47. package/src/three/tests/legacySectionCull.test.ts +80 -0
  48. package/src/three/tests/signTextureCache.test.ts +83 -0
  49. package/src/three/threeJsMedia.ts +2 -2
  50. package/src/three/waypointSprite.ts +2 -2
  51. package/src/three/world/cursorBlock.ts +1 -0
  52. package/src/three/world/vr.ts +2 -2
  53. package/src/three/worldGeometryExport.ts +83 -26
  54. package/src/three/worldRendererThree.ts +94 -25
  55. package/src/wasm-mesher/bridge/render-from-wasm.ts +214 -72
  56. package/src/wasm-mesher/bridge/shaderCubeBridge.ts +18 -6
  57. package/src/wasm-mesher/runtime-build/wasm_mesher_bg.wasm +0 -0
  58. package/src/wasm-mesher/tests/sectionRaycastAabb.test.ts +20 -0
  59. package/src/wasm-mesher/tests/shaderCubeInstances.test.ts +67 -5
  60. package/src/wasm-mesher/worker/mesherWasm.ts +70 -14
  61. package/src/wasm-mesher/worker/mesherWasmLightDirty.test.ts +11 -0
  62. package/src/wasm-mesher/worker/mesherWasmLightDirty.ts +15 -0
@@ -257,7 +257,7 @@ export interface ItemMeshResult {
257
257
  * Extracts item texture region to a canvas
258
258
  */
259
259
  export function extractItemTextureToCanvas (
260
- sourceTexture: THREE.Texture,
260
+ sourceTexture: THREE.Texture<HTMLImageElement | ImageBitmap>,
261
261
  textureInfo: ItemTextureInfo
262
262
  ): ItemTextureCanvas {
263
263
  const { u, v, sizeX, sizeY } = textureInfo
@@ -333,7 +333,10 @@ export function createItemMesh (
333
333
  if (use3D) {
334
334
  // Try to create 3D mesh
335
335
  try {
336
- const canvas = extractItemTextureToCanvas(sourceTexture, textureInfo)
336
+ const canvas = extractItemTextureToCanvas(
337
+ sourceTexture as THREE.Texture<HTMLImageElement | ImageBitmap>,
338
+ textureInfo
339
+ )
337
340
  const { geometry } = create3DItemMesh(canvas, { depth })
338
341
 
339
342
  // Create texture from canvas for the 3D mesh
@@ -0,0 +1,85 @@
1
+ //@ts-nocheck
2
+ import * as THREE from 'three'
3
+ import type { RenderOrigin } from './shaders/legacyBlockShader'
4
+
5
+ /** Half-extent of a section mesh AABB in section-local space. */
6
+ export const LEGACY_SECTION_HALF_EXTENT = 8
7
+
8
+ /** Small pad on camera-relative section AABBs for frustum tests. */
9
+ const CULL_BOX_EPSILON = 0.01
10
+
11
+ /**
12
+ * Set a legacy section mesh world translation once at build time.
13
+ * Position proxy is not used — camera-relative math lives in the shader.
14
+ */
15
+ export function setupLegacySectionMatrix (
16
+ mesh: THREE.Mesh,
17
+ sx: number,
18
+ sy: number,
19
+ sz: number,
20
+ renderOrigin: RenderOrigin,
21
+ ): void {
22
+ mesh.matrix.makeTranslation(sx - renderOrigin.x, sy - renderOrigin.y, sz - renderOrigin.z)
23
+ mesh.matrixWorldNeedsUpdate = true
24
+ mesh.frustumCulled = false
25
+ }
26
+
27
+ export function sectionIntersectsFrustum (
28
+ sectionWorldX: number,
29
+ sectionWorldY: number,
30
+ sectionWorldZ: number,
31
+ cameraWorldX: number,
32
+ cameraWorldY: number,
33
+ cameraWorldZ: number,
34
+ frustum: THREE.Frustum,
35
+ box: THREE.Box3,
36
+ boxMin: THREE.Vector3,
37
+ boxMax: THREE.Vector3,
38
+ ): { visible: boolean, distSq: number } {
39
+ const dx = sectionWorldX - cameraWorldX
40
+ const dy = sectionWorldY - cameraWorldY
41
+ const dz = sectionWorldZ - cameraWorldZ
42
+
43
+ const half = LEGACY_SECTION_HALF_EXTENT + CULL_BOX_EPSILON
44
+ boxMin.set(dx - half, dy - half, dz - half)
45
+ boxMax.set(dx + half, dy + half, dz + half)
46
+ box.set(boxMin, boxMax)
47
+
48
+ return {
49
+ visible: frustum.intersectsBox(box),
50
+ distSq: dx * dx + dy * dy + dz * dz,
51
+ }
52
+ }
53
+
54
+ /**
55
+ * Per-frame frustum cull + back-to-front renderOrder for one legacy section.
56
+ * Used for pooled per-section meshes (reveal defer + invariant fallback).
57
+ */
58
+ export function updateLegacySectionCullState (
59
+ mesh: THREE.Mesh,
60
+ sectionWorldX: number,
61
+ sectionWorldY: number,
62
+ sectionWorldZ: number,
63
+ cameraWorldX: number,
64
+ cameraWorldY: number,
65
+ cameraWorldZ: number,
66
+ frustum: THREE.Frustum,
67
+ box: THREE.Box3,
68
+ boxMin: THREE.Vector3,
69
+ boxMax: THREE.Vector3,
70
+ ): void {
71
+ const { visible, distSq } = sectionIntersectsFrustum(
72
+ sectionWorldX,
73
+ sectionWorldY,
74
+ sectionWorldZ,
75
+ cameraWorldX,
76
+ cameraWorldY,
77
+ cameraWorldZ,
78
+ frustum,
79
+ box,
80
+ boxMin,
81
+ boxMax,
82
+ )
83
+ mesh.visible = visible
84
+ mesh.renderOrder = -distSq
85
+ }