diff --git a/package.json b/package.json index 7056392a6..be040f3ac 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ "test:cypress": "cypress run", "test:benchmark": "PERFORMANCE_TEST=true cypress run", "test:cypress:open": "cypress open", - "test-unit": "vitest", + "test-unit": "vitest run", "test:e2e": "start-test http-get://localhost:8080 test:cypress", "prod-start": "node server.js --prod", "test-mc-server": "tsx cypress/minecraft-server.mjs", diff --git a/src/defaultOptions.ts b/src/defaultOptions.ts index 6fdfb991a..7136c5072 100644 --- a/src/defaultOptions.ts +++ b/src/defaultOptions.ts @@ -38,6 +38,7 @@ export const defaultOptions = { debugLogNotFrequentPackets: false, unimplementedContainers: false, ...RENDERER_DEFAULT_OPTIONS, + rendererSmartCull: false as boolean, enabledResourcepack: null as string | null, useVersionsTextures: 'latest', serverResourcePacks: 'prompt' as 'prompt' | 'always' | 'never', @@ -204,6 +205,10 @@ export type OptionMeta = { export const optionsMeta: Partial> = { ...RENDERER_OPTIONS_META, + rendererSmartCull: { + text: 'Smart cull', + tooltip: 'Occlusion-based section culling for better performance in caves and enclosed spaces', + }, activeRenderer: { possibleValues: [ ['threejs', 'Three.js (stable)'], diff --git a/src/optionsGuiScheme.tsx b/src/optionsGuiScheme.tsx index 635555df7..f0414d0fa 100644 --- a/src/optionsGuiScheme.tsx +++ b/src/optionsGuiScheme.tsx @@ -164,6 +164,10 @@ export const guiOptionsScheme: { rendererPerfDebugOverlay: { text: 'Performance Debug', }, + rendererSmartCull: { + text: 'Smart cull', + tooltip: 'Occlusion-based section culling for better performance in caves and enclosed spaces', + }, }, { custom () { diff --git a/src/react/RendererDebugMenu.tsx b/src/react/RendererDebugMenu.tsx index bd8e91b81..fea216508 100644 --- a/src/react/RendererDebugMenu.tsx +++ b/src/react/RendererDebugMenu.tsx @@ -14,9 +14,9 @@ export default () => { const RendererDebugMenu = ({ worldRenderer }: { worldRenderer: WorldRendererCommon }) => { const { reactiveDebugParams } = worldRenderer - const { chunksRenderAboveEnabled, chunksRenderBelowEnabled, chunksRenderDistanceEnabled, chunksRenderAboveOverride, chunksRenderBelowOverride, chunksRenderDistanceOverride, stopRendering, disableEntities, caveCullingDebug, smartCull } = useSnapshot(reactiveDebugParams) + const { chunksRenderAboveEnabled, chunksRenderBelowEnabled, chunksRenderDistanceEnabled, chunksRenderAboveOverride, chunksRenderBelowOverride, chunksRenderDistanceOverride, stopRendering, disableEntities, caveCullingDebug } = useSnapshot(reactiveDebugParams) - const { rendererPerfDebugOverlay } = useSnapshot(options) + const { rendererPerfDebugOverlay, rendererSmartCull } = useSnapshot(options) // Helper to round values to nearest step const roundToStep = (value: number, step: number) => Math.round(value / step) * step @@ -37,9 +37,9 @@ const RendererDebugMenu = ({ worldRenderer }: { worldRenderer: WorldRendererComm overlayColor={disableEntities ? 'red' : undefined} />