minecraft-renderer 0.1.46 → 0.1.47
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 +22 -0
- package/dist/mesher.js +17 -17
- package/dist/mesher.js.map +4 -4
- package/dist/mesherWasm.js +18 -18
- package/dist/minecraft-renderer.js +54 -54
- package/dist/minecraft-renderer.js.meta.json +1 -1
- package/dist/threeWorker.js +384 -384
- package/package.json +1 -1
- package/src/graphicsBackend/appViewer.ts +10 -0
- package/src/graphicsBackend/config.ts +0 -1
- package/src/graphicsBackend/index.ts +1 -0
- package/src/graphicsBackend/rendererOptionsSync.ts +243 -0
- package/src/graphicsBackend/types.ts +6 -1
- package/src/mesher-shared/blockPropertiesForMeshing.ts +79 -0
- package/src/mesher-shared/exportedGeometryTypes.ts +26 -0
- package/src/mesher-shared/models.ts +3 -79
- package/src/three/documentRenderer.ts +5 -9
- package/src/three/graphicsBackendBase.ts +1 -2
- package/src/three/menuBackground/defaultOptions.ts +188 -30
- package/src/three/menuBackground/index.ts +10 -2
- package/src/three/worldGeometryExport.ts +3 -24
- package/src/wasm-mesher/bridge/render-from-wasm.ts +5 -10
|
@@ -22,6 +22,19 @@ export type RendererOptionMeta = {
|
|
|
22
22
|
|
|
23
23
|
export type RendererDefaultOptionKey = keyof typeof RENDERER_DEFAULT_OPTIONS
|
|
24
24
|
|
|
25
|
+
export type RendererMesherPipeline = 'wasm' | 'legacy-js'
|
|
26
|
+
|
|
27
|
+
export type RendererGpuPreference = 'default' | 'high-performance' | 'low-power'
|
|
28
|
+
|
|
29
|
+
/** Maps stored `gpuPreference` to WebGL `powerPreference` (undefined = browser default). */
|
|
30
|
+
export function gpuPreferenceToWebGLPowerPreference(
|
|
31
|
+
preference: RendererGpuPreference
|
|
32
|
+
): 'high-performance' | 'low-power' | undefined {
|
|
33
|
+
if (preference === 'high-performance') return 'high-performance'
|
|
34
|
+
if (preference === 'low-power') return 'low-power'
|
|
35
|
+
return undefined
|
|
36
|
+
}
|
|
37
|
+
|
|
25
38
|
const MB = MENU_BACKGROUND_OPTION_DEFAULTS
|
|
26
39
|
|
|
27
40
|
/** Default values for options owned by minecraft-renderer (spread into app `defaultOptions`). */
|
|
@@ -39,9 +52,52 @@ export const RENDERER_DEFAULT_OPTIONS = {
|
|
|
39
52
|
menuBackgroundFuturisticBlockSpeed: MB.futuristicBlockSpeedPercent,
|
|
40
53
|
rendererFuturisticReveal: false,
|
|
41
54
|
rendererPerfDebugOverlay: false,
|
|
42
|
-
disableBlockEntityTextures: false
|
|
55
|
+
disableBlockEntityTextures: false,
|
|
56
|
+
rendererMesher: 'wasm' as RendererMesherPipeline,
|
|
57
|
+
showChunkBorders: false,
|
|
58
|
+
renderEntities: true,
|
|
59
|
+
renderDebug: 'basic' as 'none' | 'basic' | 'advanced',
|
|
60
|
+
frameLimit: false as number | false,
|
|
61
|
+
backgroundRendering: '20fps' as 'full' | '20fps' | '5fps',
|
|
62
|
+
vanillaLook: false,
|
|
63
|
+
smoothLighting: true,
|
|
64
|
+
newVersionsLighting: false,
|
|
65
|
+
vrSupport: true,
|
|
66
|
+
vrPageGameRendering: false,
|
|
67
|
+
clipWorldBelowY: undefined as number | undefined,
|
|
68
|
+
highlightBlockColor: 'auto' as 'auto' | 'blue' | 'classic',
|
|
69
|
+
loadPlayerSkins: true,
|
|
70
|
+
renderEars: true,
|
|
71
|
+
showHand: true,
|
|
72
|
+
viewBobbing: true,
|
|
73
|
+
dayCycleAndLighting: true,
|
|
74
|
+
keepChunksDistance: 1,
|
|
75
|
+
gpuPreference: 'default' as RendererGpuPreference
|
|
43
76
|
} as const
|
|
44
77
|
|
|
78
|
+
/** App options storage shape for renderer-owned keys. */
|
|
79
|
+
export type RendererStorageOptions = typeof RENDERER_DEFAULT_OPTIONS
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Migrate persisted / legacy option keys into current {@link RENDERER_DEFAULT_OPTIONS} shape.
|
|
83
|
+
* Call when loading saved settings (safe to run on every load).
|
|
84
|
+
*/
|
|
85
|
+
export function migrateRendererOptions(saved: Record<string, unknown>): void {
|
|
86
|
+
if (saved.highPerformanceGpu) {
|
|
87
|
+
saved.gpuPreference = 'high-performance'
|
|
88
|
+
delete saved.highPerformanceGpu
|
|
89
|
+
}
|
|
90
|
+
if (saved.rendererMesher !== 'wasm' && saved.rendererMesher !== 'legacy-js') {
|
|
91
|
+
if (typeof saved.rendererWasmMesher === 'boolean') {
|
|
92
|
+
saved.rendererMesher = saved.rendererWasmMesher ? 'wasm' : 'legacy-js'
|
|
93
|
+
} else if (typeof saved.wasmExperimentalMesher === 'boolean') {
|
|
94
|
+
saved.rendererMesher = saved.wasmExperimentalMesher ? 'wasm' : 'legacy-js'
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
delete saved.wasmExperimentalMesher
|
|
98
|
+
delete saved.rendererWasmMesher
|
|
99
|
+
}
|
|
100
|
+
|
|
45
101
|
/** Settings UI metadata for {@link RENDERER_DEFAULT_OPTIONS} keys. */
|
|
46
102
|
export const RENDERER_OPTIONS_META: Partial<Record<RendererDefaultOptionKey, RendererOptionMeta>> = {
|
|
47
103
|
menuBackgroundMode: {
|
|
@@ -102,6 +158,83 @@ export const RENDERER_OPTIONS_META: Partial<Record<RendererDefaultOptionKey, Ren
|
|
|
102
158
|
disableBlockEntityTextures: {
|
|
103
159
|
text: 'Disable block entity textures',
|
|
104
160
|
tooltip: 'Skips signs, banners, heads, maps, etc.'
|
|
161
|
+
},
|
|
162
|
+
rendererMesher: {
|
|
163
|
+
possibleValues: [['wasm', 'WASM'], ['legacy-js', 'Legacy JS']],
|
|
164
|
+
text: 'Mesher pipeline',
|
|
165
|
+
tooltip: 'WASM is faster. Use JS if WASM is not working. Requires reload.',
|
|
166
|
+
requiresRestart: true
|
|
167
|
+
},
|
|
168
|
+
showChunkBorders: {
|
|
169
|
+
text: 'Chunk borders'
|
|
170
|
+
},
|
|
171
|
+
renderEntities: {
|
|
172
|
+
text: 'Render entities'
|
|
173
|
+
},
|
|
174
|
+
renderDebug: {
|
|
175
|
+
possibleValues: ['advanced', 'basic', 'none']
|
|
176
|
+
},
|
|
177
|
+
frameLimit: {
|
|
178
|
+
text: 'Frame limit',
|
|
179
|
+
tooltip: 'false = VSync / unlimited when focused'
|
|
180
|
+
},
|
|
181
|
+
backgroundRendering: {
|
|
182
|
+
text: 'Background FPS limit',
|
|
183
|
+
possibleValues: [
|
|
184
|
+
['full', 'NO'],
|
|
185
|
+
['5fps', '5 FPS'],
|
|
186
|
+
['20fps', '20 FPS']
|
|
187
|
+
]
|
|
188
|
+
},
|
|
189
|
+
vanillaLook: {
|
|
190
|
+
text: 'Vanilla shading',
|
|
191
|
+
tooltip: 'On: Minecraft-style face shading. Off: higher-contrast client shading.'
|
|
192
|
+
},
|
|
193
|
+
smoothLighting: {},
|
|
194
|
+
newVersionsLighting: {
|
|
195
|
+
text: 'Lighting in newer versions'
|
|
196
|
+
},
|
|
197
|
+
vrSupport: {
|
|
198
|
+
text: 'VR support',
|
|
199
|
+
tooltip: 'Shows VR entry; does not force VR on.'
|
|
200
|
+
},
|
|
201
|
+
vrPageGameRendering: {
|
|
202
|
+
text: 'VR page game rendering'
|
|
203
|
+
},
|
|
204
|
+
clipWorldBelowY: {
|
|
205
|
+
text: 'Clip world below Y'
|
|
206
|
+
},
|
|
207
|
+
highlightBlockColor: {
|
|
208
|
+
possibleValues: [
|
|
209
|
+
['auto', 'Auto'],
|
|
210
|
+
['blue', 'Blue'],
|
|
211
|
+
['classic', 'Classic']
|
|
212
|
+
]
|
|
213
|
+
},
|
|
214
|
+
loadPlayerSkins: {},
|
|
215
|
+
renderEars: {
|
|
216
|
+
tooltip: 'Deadmau5 ears when the skin texture includes them'
|
|
217
|
+
},
|
|
218
|
+
showHand: {},
|
|
219
|
+
viewBobbing: {},
|
|
220
|
+
dayCycleAndLighting: {
|
|
221
|
+
text: 'Day cycle'
|
|
222
|
+
},
|
|
223
|
+
keepChunksDistance: {
|
|
224
|
+
text: 'Keep chunks distance',
|
|
225
|
+
tooltip: 'Extra distance before unloading chunks',
|
|
226
|
+
max: 5,
|
|
227
|
+
unit: ''
|
|
228
|
+
},
|
|
229
|
+
gpuPreference: {
|
|
230
|
+
text: 'GPU preference',
|
|
231
|
+
tooltip: 'WebGL power preference. Requires reload / backend restart to apply.',
|
|
232
|
+
requiresRestart: true,
|
|
233
|
+
possibleValues: [
|
|
234
|
+
['default', 'Auto'],
|
|
235
|
+
['high-performance', 'Dedicated'],
|
|
236
|
+
['low-power', 'Low power']
|
|
237
|
+
]
|
|
105
238
|
}
|
|
106
239
|
}
|
|
107
240
|
|
|
@@ -110,32 +243,57 @@ export const RENDERER_RENDER_GUI_SECTIONS: ReadonlyArray<{
|
|
|
110
243
|
title: string
|
|
111
244
|
keys: readonly RendererDefaultOptionKey[]
|
|
112
245
|
}> = [
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
'
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
]
|
|
246
|
+
{
|
|
247
|
+
title: 'World rendering',
|
|
248
|
+
keys: [
|
|
249
|
+
'rendererWorldPerformance',
|
|
250
|
+
'starfieldRendering',
|
|
251
|
+
'defaultSkybox',
|
|
252
|
+
'disableBlockEntityTextures',
|
|
253
|
+
'showChunkBorders',
|
|
254
|
+
'renderEntities',
|
|
255
|
+
'smoothLighting',
|
|
256
|
+
'vanillaLook',
|
|
257
|
+
'newVersionsLighting',
|
|
258
|
+
'dayCycleAndLighting',
|
|
259
|
+
'loadPlayerSkins',
|
|
260
|
+
'renderEars',
|
|
261
|
+
'showHand',
|
|
262
|
+
'viewBobbing',
|
|
263
|
+
'keepChunksDistance',
|
|
264
|
+
'highlightBlockColor',
|
|
265
|
+
'clipWorldBelowY'
|
|
266
|
+
]
|
|
267
|
+
},
|
|
268
|
+
{
|
|
269
|
+
title: 'Frame pacing',
|
|
270
|
+
keys: ['frameLimit', 'backgroundRendering', 'renderDebug', 'gpuPreference']
|
|
271
|
+
},
|
|
272
|
+
{
|
|
273
|
+
title: 'VR',
|
|
274
|
+
keys: ['vrSupport', 'vrPageGameRendering']
|
|
275
|
+
},
|
|
276
|
+
{
|
|
277
|
+
title: 'Menu background',
|
|
278
|
+
keys: [
|
|
279
|
+
'menuBackgroundMode',
|
|
280
|
+
'menuBackgroundMinecraftTextures',
|
|
281
|
+
'menuBackgroundFuturisticScene',
|
|
282
|
+
'menuBackgroundFuturisticCamera',
|
|
283
|
+
'menuBackgroundFuturisticBlockGroup',
|
|
284
|
+
'menuBackgroundFuturisticCameraSpeed',
|
|
285
|
+
'menuBackgroundFuturisticBlockSpeed'
|
|
286
|
+
]
|
|
287
|
+
},
|
|
288
|
+
{
|
|
289
|
+
title: 'Mesher',
|
|
290
|
+
keys: ['rendererMesher']
|
|
291
|
+
},
|
|
292
|
+
{
|
|
293
|
+
title: 'Renderer debug',
|
|
294
|
+
keys: [
|
|
295
|
+
'rendererFuturisticReveal',
|
|
296
|
+
'rendererPerfDebugOverlay'
|
|
297
|
+
]
|
|
298
|
+
}
|
|
299
|
+
]
|
|
@@ -31,6 +31,14 @@ export {
|
|
|
31
31
|
export {
|
|
32
32
|
RENDERER_DEFAULT_OPTIONS,
|
|
33
33
|
RENDERER_OPTIONS_META,
|
|
34
|
-
RENDERER_RENDER_GUI_SECTIONS
|
|
34
|
+
RENDERER_RENDER_GUI_SECTIONS,
|
|
35
|
+
migrateRendererOptions
|
|
35
36
|
} from './defaultOptions'
|
|
36
|
-
export type {
|
|
37
|
+
export type {
|
|
38
|
+
RendererDefaultOptionKey,
|
|
39
|
+
RendererGpuPreference,
|
|
40
|
+
RendererMesherPipeline,
|
|
41
|
+
RendererOptionMeta,
|
|
42
|
+
RendererStorageOptions
|
|
43
|
+
} from './defaultOptions'
|
|
44
|
+
export { gpuPreferenceToWebGLPowerPreference } from './defaultOptions'
|
|
@@ -1,32 +1,11 @@
|
|
|
1
1
|
//@ts-nocheck
|
|
2
2
|
import * as THREE from 'three'
|
|
3
3
|
import type { WorldRendererThree } from './worldRendererThree'
|
|
4
|
+
import type { ExportedSection, ExportedWorldGeometry } from '../mesher-shared/exportedGeometryTypes'
|
|
4
5
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
// Format for exported world geometry
|
|
8
|
-
export interface ExportedWorldGeometry {
|
|
9
|
-
version: string
|
|
10
|
-
exportedAt: string
|
|
11
|
-
camera: {
|
|
12
|
-
position: { x: number, y: number, z: number }
|
|
13
|
-
rotation: { pitch: number, yaw: number }
|
|
14
|
-
}
|
|
15
|
-
sections: ExportedSection[]
|
|
16
|
-
textureAtlasDataUrl?: string
|
|
17
|
-
}
|
|
6
|
+
export type { ExportedSection, ExportedWorldGeometry } from '../mesher-shared/exportedGeometryTypes'
|
|
18
7
|
|
|
19
|
-
|
|
20
|
-
key: string
|
|
21
|
-
position: { x: number, y: number, z: number }
|
|
22
|
-
geometry: {
|
|
23
|
-
positions: number[]
|
|
24
|
-
normals: number[]
|
|
25
|
-
colors: number[]
|
|
26
|
-
uvs: number[]
|
|
27
|
-
indices: number[]
|
|
28
|
-
}
|
|
29
|
-
}
|
|
8
|
+
const GEOMETRY_EXPORT_GROUP_NAME = 'geometry-export-root'
|
|
30
9
|
|
|
31
10
|
/**
|
|
32
11
|
* Export world geometry to a downloadable file
|
|
@@ -10,11 +10,12 @@ import MinecraftData from 'minecraft-data'
|
|
|
10
10
|
import PrismarineBlockLoader from 'prismarine-block'
|
|
11
11
|
import { Vec3 } from 'vec3'
|
|
12
12
|
import { elemFaces, buildRotationMatrix, matmul3, matmulmat3, vecadd3, vecsub3 } from '../../mesher-shared/modelsGeometryCommon'
|
|
13
|
-
import type { ExportedWorldGeometry, ExportedSection } from '../../
|
|
13
|
+
import type { ExportedWorldGeometry, ExportedSection } from '../../mesher-shared/exportedGeometryTypes'
|
|
14
14
|
import type { MesherGeometryOutput } from '../../mesher-shared/shared'
|
|
15
15
|
import type { World } from '../../mesher-shared/world'
|
|
16
|
-
import { resolveBlockPropertiesForMeshing } from '../../mesher-shared/
|
|
16
|
+
import { resolveBlockPropertiesForMeshing } from '../../mesher-shared/blockPropertiesForMeshing'
|
|
17
17
|
import { getSideShading, vertexLightFromAo } from '../../mesher-shared/vertexShading'
|
|
18
|
+
import tintsJson from 'minecraft-data/minecraft-data/data/pc/1.16.2/tints.json'
|
|
18
19
|
|
|
19
20
|
// Handle both default and named export
|
|
20
21
|
const worldBlockProvider = (worldBlockProviderModule as any).default || worldBlockProviderModule
|
|
@@ -25,14 +26,8 @@ let tintsInitialized = false
|
|
|
25
26
|
|
|
26
27
|
function initializeTints() {
|
|
27
28
|
if (tintsInitialized) return
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
tintsData = require('esbuild-data').tints
|
|
31
|
-
} catch (err) {
|
|
32
|
-
tintsData = require('minecraft-data/minecraft-data/data/pc/1.16.2/tints.json')
|
|
33
|
-
}
|
|
34
|
-
for (const key of Object.keys(tintsData)) {
|
|
35
|
-
tints[key] = prepareTints(tintsData[key])
|
|
29
|
+
for (const key of Object.keys(tintsJson as Record<string, unknown>)) {
|
|
30
|
+
tints[key] = prepareTints((tintsJson as Record<string, unknown>)[key])
|
|
36
31
|
}
|
|
37
32
|
tintsInitialized = true
|
|
38
33
|
}
|