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.
@@ -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
- title: 'Menu background',
115
- keys: [
116
- 'menuBackgroundMode',
117
- 'menuBackgroundMinecraftTextures',
118
- 'menuBackgroundFuturisticScene',
119
- 'menuBackgroundFuturisticCamera',
120
- 'menuBackgroundFuturisticBlockGroup',
121
- 'menuBackgroundFuturisticCameraSpeed',
122
- 'menuBackgroundFuturisticBlockSpeed'
123
- ]
124
- },
125
- {
126
- title: 'World rendering',
127
- keys: [
128
- 'rendererWorldPerformance',
129
- 'starfieldRendering',
130
- 'defaultSkybox',
131
- 'disableBlockEntityTextures'
132
- ]
133
- },
134
- {
135
- title: 'Renderer debug',
136
- keys: [
137
- 'rendererFuturisticReveal',
138
- 'rendererPerfDebugOverlay'
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 { RendererDefaultOptionKey, RendererOptionMeta } from './defaultOptions'
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
- const GEOMETRY_EXPORT_GROUP_NAME = 'geometry-export-root'
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
- export interface ExportedSection {
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 '../../three/worldGeometryExport'
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/models'
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
- let tintsData
29
- try {
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
  }