perf: applique les échelles aux assets instanciés

This commit is contained in:
tom-boullay
2026-05-28 15:49:26 +02:00
parent 0b3d49e8d1
commit fcdbf7270c
3 changed files with 48 additions and 18 deletions
@@ -14,10 +14,13 @@ import {
type MapInstancingAssetConfig,
type MapInstancingAssetType,
} from "@/data/world/mapInstancingConfig";
import {
type MapAssetInstance,
useMapInstancingData,
} from "@/hooks/world/useMapInstancingData";
import { useMapInstancingData } from "@/hooks/world/useMapInstancingData";
import type { MapAssetInstance } from "@/types/map/mapScene";
interface MapInstancingSystemProps {
onlyModelName?: string | null;
streaming?: boolean;
}
interface MapAssetChunk {
key: string;
@@ -72,14 +75,20 @@ function createMapAssetChunks(
});
}
export function MapInstancingSystem(): React.JSX.Element | null {
export function MapInstancingSystem({
onlyModelName = null,
streaming = true,
}: MapInstancingSystemProps): React.JSX.Element | null {
const cameraMode = useCameraMode();
const sceneMode = useSceneMode();
const groups = useMapPerformanceStore((state) => state.groups);
const models = useMapPerformanceStore((state) => state.models);
const { data, isLoading } = useMapInstancingData();
const streamingEnabled =
CHUNK_CONFIG.enabled && sceneMode === "game" && cameraMode === "player";
streaming &&
CHUNK_CONFIG.enabled &&
sceneMode === "game" &&
cameraMode === "player";
const chunks = useMemo(() => {
if (!data) return [];
@@ -87,6 +96,8 @@ export function MapInstancingSystem(): React.JSX.Element | null {
return MAP_INSTANCING_ASSET_TYPES.flatMap((type) => {
const config = MAP_INSTANCING_ASSETS[type];
if (onlyModelName && config.mapName !== onlyModelName) return [];
if (
!config.enabled ||
!isMapModelVisible(config.mapName, { groups, models })
@@ -99,7 +110,7 @@ export function MapInstancingSystem(): React.JSX.Element | null {
return createMapAssetChunks(type, config, instances);
});
}, [data, groups, models]);
}, [data, groups, models, onlyModelName]);
const visibleChunks = useVisibleWorldChunks(chunks, streamingEnabled);
@@ -114,6 +125,7 @@ export function MapInstancingSystem(): React.JSX.Element | null {
<InstancedMapAsset
modelPath={chunk.config.modelPath}
instances={chunk.instances}
scaleMultiplier={chunk.config.scaleMultiplier}
castShadow={chunk.config.castShadow}
receiveShadow={chunk.config.receiveShadow}
/>