Estoy haciendo un proyecto en el que necesito generar un mapa bastante grande. Necesito generar muchos bloques de suelo con árboles o rocas, algo similar a Minecraft (debe poder hacer clic en cada bloque). Pero tengo un problema con la optimización. Intenté reducir la distancia de renderizado, agregar niebla y jugar con tres instancias (estoy usando la biblioteca de fibra threejs para reaccionar). ¿Alguien podría ayudarme a explicar cómo funcionan las instancias y decirme cómo aplicarlas a mi proyecto? Aquí está el código para generarlo de forma normal, sin instanciar.
import React, { Suspense } from "react"; import { useEffect, useState } from "react"; import Box from "./Box"; export default function Ground({ layout, selectBox, selectedBox, position, }) { const [boxArray, setBoxArray] = useState([]); const size = 20; let id = 0; useEffect(() => { const boxArrayCopy = []; for (let i = -(size / 2); i < size / 2; i++) { let hasTree = Math.random() > 0.99; for (let j = -(size / 2); j < size / 2; j++) { const layoutObject = layout.filter( (layoutObject) => layoutObject.x === i && layoutObject.y === j ); const box = ( <Box key={id} coords={{ x: j * 5, y: 0, z: i * 5 }} color={layoutObject.length > 0 ? layoutObject[0].color : 0x61892f} selectBox={selectBox} selectedBox={selectedBox} hasTree={hasTree} hasStone={Math.random() < 0.2} // just a random condition to add tree to box /> ); boxArrayCopy.push(box); id++; if (hasTree) hasTree = Math.random() > 0.5; } setBoxArray([...boxArrayCopy]); } console.log("GROUND DONE"); }, []); return ( <group position={position ?? [0, 0, 0]}> <Suspense fallback={null}>{boxArray}</Suspense> </group> ); }