Guía de configuración de parámetros de rendimiento de renderizado
Descripción general
Para adaptarse a dispositivos con diferentes niveles de rendimiento, el LCC Unity SDK proporciona varios parámetros de configuración de rendimiento de renderizado. Están distribuidos en la clase LCCManager y la clase Renderer, e implican principalmente los siguientes métodos:
| Clase | Método | Propósito | Momento de llamada |
|---|---|---|---|
LCCManager | SetMaxBufferSplat | Establecer la capacidad máxima del búfer (asignado una vez en la GPU) | Debe ser antes de cualquier Renderer.Load() |
LCCManager | SetFullRenderSplat | Establecer el umbral de recuento de Splats entre renderizado completo/por fragmentos | Debe ser antes de Load() |
LCCManager | SetMaxRenderSplats | Establecer el número total de Splats renderizados en pantalla en el renderizado por fragmentos | En cualquier momento durante el renderizado por fragmentos |
LCCManager | SetStartLod | Establecer el nivel LOD inicial | Surte efecto en tiempo de ejecución, después de Load() |
LCCManager | SetDetailLevel | Establecer el nivel de detalle de renderizado (ajuste fino de la precisión de renderizado) | Puede ajustarse dinámicamente en tiempo de ejecución |
Renderer | SetRenderAll | Establecer si se fuerza el renderizado completo | Debe ser antes de Load() |
Nota:
Entre los parámetros anteriores, las unidades de los métodos relacionados con el recuento de Splats (
SetMaxBufferSplat,SetFullRenderSplat,SetMaxRenderSplats) están todas en decenas de miles, es decir, valor pasado × 10000 = recuento real de Splats.
Nota:
SetMaxBufferSplat establece el máximo espacio de búfer de memoria de CPU y memoria de vídeo de GPU disponible para el renderizado, mientras que SetMaxRenderSplats establece el número de primitivas Splat renderizadas en pantalla durante el renderizado de streaming por fragmentos. Por lo tanto, si el valor establecido por SetMaxRenderSplats supera el valor establecido por SetMaxBufferSplat, se truncará.
Modos de renderizado del SDK
Para adaptarse a diversos datos y plataformas, el SDK tiene 3 modos de renderizado principales. Comprender los modos de renderizado es el requisito previo para establecer correctamente los parámetros de rendimiento, porque diferentes parámetros solo surten efecto en modos específicos.
- Modo SingleRender (por defecto): se usa principalmente en PC/Mac. Este modo no permite crear varios Renderers, lo que significa que solo se puede renderizar una escena LCC a la vez. Cuando el volumen de datos es pequeño y cumple los requisitos, los datos se renderizan por completo (se cargan los datos LOD0 completos, sin cambio dinámico de LOD, mejor calidad de renderizado); cuando las primitivas Splat LOD0 superan la cantidad total que puede renderizarse por completo, los datos se renderizan por fragmentos, usando un mecanismo de renderizado de streaming con LOD dinámico en tiempo de ejecución para adaptarse al renderizado de escenas muy grandes.
- Modo MultiRender: se usa principalmente en PC/Mac. Este modo permite el renderizado mixto en tiempo real de varias escenas LCC; todos los datos de escena se renderizan por fragmentos usando el mecanismo de LOD dinámico.
- Ruta de renderizado por fragmentos: En plataformas Móvil (iOS / Android), VR (Pico 4 / Quest 3), así como fuentes de datos HTTP en PC/Mac, se usa la ruta de renderizado por fragmentos, empleando el mecanismo de LOD dinámico.

Relación entre los tres modos de renderizado del SDK y las rutas de renderizado completo / por fragmentos
Renderizado completo vs renderizado por fragmentos:
- Renderizado completo: carga y renderiza los datos LOD0 completos de una sola vez, mejor calidad de imagen, solo se habilita en el modo SingleRender de PC/Mac cuando el volumen de datos LOD0 cumple las condiciones.
- Renderizado por fragmentos: carga dinámicamente los datos de nivel LOD según el frustum de la cámara de renderizado, controla el número de Splats en pantalla y se adapta a entornos de hardware con memoria de vídeo y rendimiento limitados.
Valores por defecto del SDK
Los valores por defecto, valores mínimos permitidos y valores máximos permitidos de cada plataforma son los siguientes (unidad: decenas de miles):
| Elemento | Valor por defecto | Valor mínimo permitido | Valor máximo permitido | Observaciones |
|---|---|---|---|---|
| Búfer global | PC/Mac: 3000 Móvil: 300 VR: 100 | 100 | PC/Mac: 4450 Móvil: 600 VR: 200 | Controlado mediante SetMaxBufferSplat() |
| Umbral de renderizado completo | 2500 | 100 | 4450 | Controlado mediante SetFullRenderSplat(); solo eficaz para el modo SingleRender de PC/Mac |
| Recuento de renderizado en pantalla por fragmentos | PC/Mac: 2000 Móvil: 200 VR: 60 | 10 | —— | Controlado mediante SetMaxRenderSplats(); el valor máximo está limitado por la cantidad de búfer global |
| Si forzar el renderizado completo | No | —— | —— | Solo eficaz en PC/Mac, y solo para el modo SingleRender |
Estrategia de configuración de PC/Mac
Para PC/Mac, se recomienda configurar los parámetros según los siguientes niveles de calidad (unidad de recuento de Splats: decenas de miles):
| Nivel | Búfer global | Umbral de renderizado completo | Recuento en pantalla por fragmentos | StartLOD | Forzar completo |
|---|---|---|---|---|---|
| Muy bajo | 300 | 300 | 300 | 2 | No |
| Bajo | 1000 | 1000 | 1000 | 1 | No |
| Medio | 3000 | 1900 | 1900 | 1 | No |
| Alto | 3000 | 2500 | 2500 | 0 | No |
| Muy alto | 3000 | 3000 | 3000 | 0 | No |
Notas sobre el cambio de niveles en tiempo de ejecución
- Al cambiar entre los niveles Medio / Alto / Muy alto, puedes dejar el búfer global sin cambios, y la lógica de manejo es muy simple: solo necesitas establecer el umbral de renderizado completo, el recuento de renderizado en pantalla y StartLOD.
- Al cambiar entre los niveles Muy bajo / Bajo y otros niveles, la situación es más compleja: como el búfer global puede ya estar asignado, necesitas destruir primero el búfer global original y luego crear un nuevo búfer. Esta operación requiere descartar todos los Renderers con
Dispose()y liberar el búfer, y luego volver a adquirir el Renderer medianteGetRender(). - Recomendación actual: establece el nivel por defecto en Alto; al cambiar de nivel, deja el búfer global sin cambios, pero sigue manejando el cambio de renderizado completo/por fragmentos.
Notas
SetMaxBufferSplat()debe establecerse al principio, idealmente antes deGetRender(). Si estableces este valor después de que la escena ya esté ejecutándose, necesitas descartar todos los Renderers conDispose()y luego volver a adquirir el Renderer para que surta efecto.SetFullRenderSplat()solo es eficaz para el modo SingleRender de PC/Mac y debe establecerse antes deLoad().SetMaxRenderSplats()se aplica a todo el renderizado por fragmentos y puede establecerse en cualquier momento, pero debe ser posterior aSetMaxBufferSplat()(si se llama a ese método).
API de rendimiento de renderizado
SetMaxBufferSplat
// Valor de retorno: void
public void SetMaxBufferSplat(int _count)
Establece la capacidad máxima del búfer de GPU (recuento de Splats). En la ruta RenderCore (fragmento MultiRender / SingleRender), determina el tamaño del búfer global compartido; en el modo Full Load de SingleRender, se asigna según el volumen de datos real y no hace referencia a este valor. Se asigna una vez y no puede modificarse dinámicamente.
| Parámetro | Tipo | Descripción |
|---|---|---|
_count | int | Tamaño del búfer unificado global, en recuento de Splats 3DGS, unidad: decenas de miles |
Ejemplo de uso:
lccManager.SetMaxBufferSplat(3000); // 30 millones de puntos (PC/Mac por defecto)
lccManager.SetMaxBufferSplat(4450); // 44.5 millones de puntos (PC/Mac máximo)
Descripción:
- La unidad es «decenas de miles»; valor pasado × 10000 = recuento real de Splats.
- Debe llamarse antes de cualquier
Renderer.Load(), de lo contrario produce un error y devuelve. - Debe llamar a
SetPlatformTypeprimero. - Cuanto mayor es la capacidad, mayor es el uso de memoria de vídeo; establécelo según sea necesario.
- Límites de plataforma: PC/Mac 44.5 millones, Android/iOS 6 millones, VR 2 millones; mínimo 1 millón.
- Valores por defecto: PC/Mac 30 millones, Android/iOS 3 millones, VR 1 millón.
SetFullRenderSplat
// Valor de retorno: void
public void SetFullRenderSplat(int _count)
Establece el umbral de recuento de Splats entre el renderizado completo y el renderizado por fragmentos en el modo SingleRender de PC/Mac. Cuando el recuento de Splats LOD0 de los datos es menor que este valor, se usa la ruta de renderizado completo (búfer de GPU dedicado); de lo contrario, se usa la ruta de renderizado por fragmentos.
| Parámetro | Tipo | Descripción |
|---|---|---|
_count | int | Recuento de Splats 3DGS, unidad: decenas de miles |
Ejemplo de uso:
lccManager.SetFullRenderSplat(2500); // 25 millones de puntos
Descripción:
- La unidad es «decenas de miles».
- Solo compatible con plataformas PC/Mac; llamarla en otras plataformas produce un error y devuelve directamente.
- Debe llamarse antes de cualquier
Renderer.Load(). - Debe llamar a
SetPlatformTypeprimero. - Rango de valores
[100, 4450](es decir, 1 millón ~ 44.5 millones).
SetMaxRenderSplats
// Valor de retorno: void
public void SetMaxRenderSplats(int _count)
Establece el número máximo de Splats renderizados en pantalla por fotograma en el renderizado por fragmentos. Puede llamarse dinámicamente después de Load() y está limitado por el límite superior establecido por SetMaxBufferSplat. Llamarla en el modo de renderizado completo de SingleRender no surte efecto (registra una advertencia y devuelve directamente).
| Parámetro | Tipo | Descripción |
|---|---|---|
_count | int | Recuento de Splats 3DGS, unidad: decenas de miles; mínimo 100 mil, máximo no superior al tamaño del búfer establecido por SetMaxBufferSplat() |
Ejemplo de uso:
lccManager.SetMaxRenderSplats(2000); // 20 millones de puntos
Descripción:
- La unidad es «decenas de miles»; valor pasado × 10000 = recuento real de Splats.
- Puede ajustarse dinámicamente en tiempo de ejecución.
- No debe superar el límite superior de capacidad establecido por
SetMaxBufferSplat(si se supera, se limita automáticamente y registra una advertencia). - No se admite el ajuste en tiempo de ejecución en el modo de renderizado completo de SingleRender.
SetStartLod
// Valor de retorno: void
public void SetStartLod(int lod)
Establece el punto de inicio de expansión del LOD (basado en 0). 0 significa el más fino; cuanto mayor es el número, más grueso es el nivel. Este método surte efecto en tiempo de ejecución y debe llamarse después de Load().
| Parámetro | Tipo | Descripción |
|---|---|---|
lod | int | Nivel LOD inicial, rango [0, 10], 0 es el más fino |
Ejemplo de uso:
lccManager.SetStartLod(0);
Descripción:
- Solo eficaz para el renderizado por fragmentos, rango
[0, 10], se limita automáticamente si se supera. - El límite superior efectivo real está restringido por los
totalLevelsde los datos. - El SDK surte efecto inmediatamente después de la llamada.
SetDetailLevel
// Valor de retorno: void
public void SetDetailLevel(float sse)
Establece el nivel de detalle de renderizado, usado para ajustar con precisión la exactitud del renderizado. Cuanto mayor es el valor, más fino es el renderizado y mayor es el coste de rendimiento.
| Parámetro | Tipo | Descripción |
|---|---|---|
sse | float | Factor de subdivisión, rango [1, 100]. 1 = más grueso (sin refinamiento incluso de cerca), 100 = más fino (todos los niveles refinados al más bajo) |
Ejemplo de uso:
lccManager.SetDetailLevel(50f); // Precisión media
Descripción:
- Este parámetro se usa para ajustar con precisión el detalle de la escena, solo se aplica al renderizado por fragmentos, por defecto es 40, rango
[1, 100], se limita automáticamente si se supera. - Usa un mapeo logarítmico: el rango de valores bajos es sensible a los cambios, y el rango de valores altos cambia suavemente.
- Puede ajustarse dinámicamente en tiempo de ejecución.
SetRenderAll
// Valor de retorno: void
public void SetRenderAll(bool _renderAll)
Un método de la clase Renderer. Establece si este Renderer fuerza el renderizado completo, y debe llamarse antes de Load(). Solo se usa para el modo SingleRender de PC/Mac: en tiempo de ejecución compara el volumen de datos LOD0 contra el límite superior de 44.5 millones; si LOD0 < 44.5 millones, los datos completos LOD0 se usan directamente para el renderizado; si LOD0 > 44.5 millones, este ajuste es ineficaz (limitado por el GBuffer máximo de Unity) y se usa el renderizado por fragmentos en su lugar.
| Parámetro | Tipo | Descripción |
|---|---|---|
_renderAll | bool | Si se fuerza el renderizado completo |
Ejemplo de uso:
renderer.SetRenderAll(true);
renderer.Load(filePath, null, () => Debug.Log("Carga completa"));
Descripción:
- Solo compatible con plataformas PC/Mac; llamarla en móvil / VR registra una advertencia y devuelve.
- El ajuste surte efecto en la siguiente llamada a
Load()y no afecta al conjunto de datos cargado actualmente. - Puede usarse junto con la propiedad
IsRenderAllpara consultar el estado actual.