minecraft-renderer 0.1.71 → 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.
- package/README.md +3 -3
- package/dist/mesher.js +81 -81
- package/dist/mesher.js.map +3 -3
- package/dist/mesherWasm.js +1183 -943
- package/dist/minecraft-renderer.js +250 -79
- package/dist/minecraft-renderer.js.meta.json +1 -1
- package/dist/threeWorker.js +1732 -1001
- package/package.json +3 -3
- package/src/graphicsBackend/rendererDefaultOptions.ts +5 -10
- package/src/graphicsBackend/rendererOptionsSync.ts +1 -1
- package/src/lib/bakeLegacyLight.ts +17 -0
- package/src/lib/blockEntityLightRegistry.test.ts +18 -0
- package/src/lib/blockEntityLightRegistry.ts +75 -0
- package/src/lib/blockEntityLighting.test.ts +30 -0
- package/src/lib/blockEntityLighting.ts +53 -0
- package/src/lib/worldrendererCommon.reconfigure.test.ts +202 -0
- package/src/lib/worldrendererCommon.ts +152 -22
- package/src/mesher-shared/blockEntityMetadata.test.ts +33 -0
- package/src/mesher-shared/blockEntityMetadata.ts +19 -3
- package/src/mesher-shared/exportedGeometryTypes.ts +11 -0
- package/src/mesher-shared/models.ts +161 -92
- package/src/mesher-shared/shared.ts +15 -4
- package/src/mesher-shared/tests/liquidQuadInvariant.test.ts +40 -0
- package/src/mesher-shared/world.ts +12 -0
- package/src/mesher-shared/worldLighting.test.ts +54 -0
- package/src/playground/baseScene.ts +1 -1
- package/src/three/bannerRenderer.ts +10 -3
- package/src/three/chunkMeshManager.ts +663 -69
- package/src/three/cubeDrawSpans.ts +74 -0
- package/src/three/cubeMultiDraw.ts +119 -0
- package/src/three/documentRenderer.ts +0 -2
- package/src/three/entities.ts +5 -6
- package/src/three/entity/EntityMesh.ts +7 -5
- package/src/three/entity/gltfAnimationUtils.ts +5 -3
- package/src/three/globalBlockBuffer.ts +208 -12
- package/src/three/globalLegacyBuffer.ts +701 -0
- package/src/three/graphicsBackendOffThread.ts +16 -1
- package/src/three/itemMesh.ts +5 -2
- package/src/three/legacySectionCull.ts +85 -0
- package/src/three/modules/sciFiWorldReveal.ts +347 -703
- package/src/three/modules/starfield.ts +3 -2
- package/src/three/sectionRaycastAabb.ts +25 -0
- package/src/three/shaders/cubeBlockShader.ts +80 -17
- package/src/three/shaders/legacyBlockShader.ts +292 -0
- package/src/three/skyboxRenderer.ts +1 -1
- package/src/three/tests/chunkMeshManagerLegacy.test.ts +286 -0
- package/src/three/tests/cubeDrawSpans.test.ts +73 -0
- package/src/three/tests/globalLegacyBuffer.test.ts +360 -0
- package/src/three/tests/legacySectionCull.test.ts +80 -0
- package/src/three/tests/signTextureCache.test.ts +83 -0
- package/src/three/threeJsMedia.ts +2 -2
- package/src/three/waypointSprite.ts +2 -2
- package/src/three/world/cursorBlock.ts +1 -0
- package/src/three/world/vr.ts +2 -2
- package/src/three/worldGeometryExport.ts +83 -26
- package/src/three/worldRendererThree.ts +94 -25
- package/src/wasm-mesher/bridge/render-from-wasm.ts +214 -72
- package/src/wasm-mesher/bridge/shaderCubeBridge.ts +18 -6
- package/src/wasm-mesher/runtime-build/wasm_mesher_bg.wasm +0 -0
- package/src/wasm-mesher/tests/sectionRaycastAabb.test.ts +20 -0
- package/src/wasm-mesher/tests/shaderCubeInstances.test.ts +67 -5
- package/src/wasm-mesher/worker/mesherWasm.ts +70 -14
- package/src/wasm-mesher/worker/mesherWasmLightDirty.test.ts +11 -0
- package/src/wasm-mesher/worker/mesherWasmLightDirty.ts +15 -0
- package/src/worldView/worldView.ts +11 -0
|
@@ -9,6 +9,7 @@ import type { MenuBackgroundOptions } from './menuBackground/types'
|
|
|
9
9
|
import { MENU_BACKGROUND_MC_VERSION } from './menuBackground/shared'
|
|
10
10
|
import { createGraphicsBackendBase, type ThreeJsBackendMethods } from './graphicsBackendBase'
|
|
11
11
|
import { addCanvasForWorker } from './documentRenderer'
|
|
12
|
+
import type { WorldView } from '../worldView'
|
|
12
13
|
|
|
13
14
|
function initThreeWorker(onGotMessage: (data: any) => void) {
|
|
14
15
|
// Node environment needs an absolute path, but browser needs the url of the file
|
|
@@ -31,7 +32,12 @@ function initThreeWorker(onGotMessage: (data: any) => void) {
|
|
|
31
32
|
}
|
|
32
33
|
|
|
33
34
|
export const createGraphicsBackendOffThread: GraphicsBackendLoader = async (initOptions) => {
|
|
34
|
-
const
|
|
35
|
+
const workerSideChannel = {
|
|
36
|
+
onMessage: (_data: unknown) => {},
|
|
37
|
+
}
|
|
38
|
+
const worker = initThreeWorker((data) => {
|
|
39
|
+
workerSideChannel.onMessage(data)
|
|
40
|
+
})
|
|
35
41
|
type WorkerType = ReturnType<ReturnType<typeof createGraphicsBackendBase>['workerProxy']>
|
|
36
42
|
|
|
37
43
|
const proxy = useWorkerProxy<WorkerType>(worker)
|
|
@@ -79,6 +85,15 @@ export const createGraphicsBackendOffThread: GraphicsBackendLoader = async (init
|
|
|
79
85
|
}
|
|
80
86
|
},
|
|
81
87
|
async startWorld(options) {
|
|
88
|
+
const worldView = options.worldView as unknown as WorldView
|
|
89
|
+
workerSideChannel.onMessage = (data: any) => {
|
|
90
|
+
if (data?.type === 'reloadLoadedChunks') {
|
|
91
|
+
void worldView.reloadLoadedChunks().catch((err) => {
|
|
92
|
+
console.error('[Renderer] Failed to reload chunks after mesher reconfigure:', err)
|
|
93
|
+
})
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
82
97
|
const workerThreeSendData = {
|
|
83
98
|
...dynamicMcDataFiles,
|
|
84
99
|
items: 'itemsArray',
|
package/src/three/itemMesh.ts
CHANGED
|
@@ -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(
|
|
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
|
+
}
|