Renderer: Instancia de renderizado
Una instancia de renderizado LCC, responsable de la carga de datos y el control de renderizado de una sola escena 3DGS. Se crea mediante LCCManager.GetRender() y no puede instanciarse directamente.
| Namespace | LCCCore |
Propiedades
| Propiedad | Tipo | Acceso | Descripción |
|---|---|---|---|
Transform | Transform | Solo lectura | El componente Transform al que se adjunta la instancia de renderizado |
IsEnable | bool | Solo lectura | Si la instancia de renderizado está activa; por defecto true |
IsRenderAll | bool | Solo lectura | Si se están renderizando los datos LOD0 completos (frente al modo de streaming / recorrido LOD); por defecto false |
Métodos
Los métodos están agrupados por propósito:
Carga de datos y ciclo de vida
Load
public void Load(string _filePath, Action<float> _onProgress, Action _onComplete, Action<string> _onError = null)
Carga un archivo de datos 3DGS. Admite .lcc2 (archivo local o remoto HTTP) y los formatos nativos .ply / .sog / .spz / .splat / .ksplat (solo archivos locales).
| Parámetro | Tipo | Descripción |
|---|---|---|
_filePath | string | Ruta del archivo de datos (ruta local o URL HTTP) |
_onProgress | Action<float> | Devolución de llamada de progreso de carga, puede ser null |
_onComplete | Action | Devolución de llamada de finalización de carga, puede ser null |
_onError | Action<string> | Devolución de llamada de error de carga (opcional), con la descripción del error como parámetro |
Notas:
- La devolución de llamada
_onCompletese dispara después de que los datos aterrizan realmente en la GPU. - Operaciones como la recepción de sombras y la activación de efectos deben llamarse dentro de la devolución de llamada
_onComplete. - Los formatos nativos siempre usan la ruta de carga completa de SingleRender (sin fragmentación LOD); el progreso se informa mediante
_onProgressy los errores mediante_onError. - El modo
MultiRenderno permite fuentes de datos HTTP ni formatos nativos. - HTTP solo admite
.lcc2; los formatos nativos son solo rutas locales y solo en modo SingleRender. SetPlatformType()/SwitchRenderPass()/SetMainCamera()y otros requisitos previos deben completarse primero.- Debes llamar a
Unload()oDispose()antes de llamar aLoad()de nuevo; llamar aLoad()mientras una carga está en progreso se rechaza y dispara_onError.
Ejemplo:
renderer.Load("D:/data/scene.lcc2",
p => Debug.Log($"Cargando {p:P0}"),
() => {
Debug.Log("Carga completa");
lccManager.SetShadowReceive(true);
});
Unload
public void Unload()
Libera los datos cargados actualmente y vuelve al estado de "creado pero no cargado", manteniendo el registro del manager de la instancia. La misma instancia Renderer puede reutilizarse ciclando repetidamente Load → Unload → Load.
Notas:
- Diferencia con
Dispose(): no se elimina el registro del manager y la instancia puede reutilizarse. - Después de
Unload(),IsEnableesfalse; llamar aLoad()de nuevo restablece todo el estado de datos. - Solo se ejecuta cuando los datos han terminado de cargarse; devuelve inmediatamente cuando no está cargado o ya se hizo
Dispose().
Ejemplo:
renderer.Unload();
renderer.Load(newFilePath, null, () => Debug.Log("Recargado"));
Dispose
public void Dispose()
Destruye la instancia de renderizado y libera todos los recursos de GPU y la memoria. La instancia no puede usarse después de la destrucción, y todos los métodos públicos se vuelven ineficaces automáticamente.
Notas:
- Notifica automáticamente al LCCManager para eliminar la referencia después de la llamada.
Ejemplo:
renderer.Dispose();
renderer = null;
Control en tiempo de ejecución y consultas
SetEnable
public void SetEnable(bool _enable)
Establece el estado de activación de la instancia de renderizado. Cuando está deshabilitada, no participa en el renderizado ni en la selección de LOD.
| Parámetro | Tipo | Descripción |
|---|---|---|
_enable | bool | Si se activa |
Notas:
- No libera recursos y puede reactivarse en cualquier momento.
Ejemplo:
renderer.SetEnable(false); // Ocultar
renderer.SetEnable(true); // Mostrar
SetAlpha
public void SetAlpha(float alpha)
Establece la opacidad independiente del Renderer actual. A diferencia del alfa global a nivel de proceso de LCCManager.SetAlpha(), esta API solo afecta al Renderer actual. Alfa final = cobertura de splat × alfa global de LCCManager × alfa de este Renderer.
| Parámetro | Tipo | Descripción |
|---|---|---|
alpha | float | Opacidad independiente del Renderer actual, rango [0, 1], se limita automáticamente cuando se supera |
Notas:
- Solo surte efecto en la ruta MultiRender / RenderCore (PC / Mac); en esa ruta cada splat lleva un renderID, y el shader indexa el array de alfa por Renderer mediante renderID.
- La ruta FullRender / Mobile no tiene renderID, por lo que esta API es una operación nula allí (el valor se almacena en caché y se aplica automáticamente cuando se cambia a la ruta RenderCore más tarde).
Ejemplo:
renderer.SetAlpha(0.5f);
SetRenderAll
public void SetRenderAll(bool _renderAll)
Establece si se usa el modo de renderizado completo (renderizar completamente los datos LOD0). Surte efecto en la siguiente llamada a Load() y no afecta al conjunto de datos cargado actualmente.
| Parámetro | Tipo | Descripción |
|---|---|---|
_renderAll | bool | Si se renderiza por completo |
Notas:
- Solo compatible con plataformas PC / Mac; sin efecto en móvil / VR.
- Consulta el estado actual con la propiedad
IsRenderAll.
Ejemplo:
renderer.SetRenderAll(true);
renderer.Load(filePath, null, () => Debug.Log("Carga completa"));
SetColliderEnable
// Valor de retorno: bool, true=configurado correctamente, false=los datos no tienen collider o la instancia está inactiva
public bool SetColliderEnable(bool _enable)
Activa o desactiva la función de collider. Una vez activada, IntersectsSphere() / IntersectsCapsule() y RaycastMesh() pasan a estar disponibles.
| Parámetro | Tipo | Descripción |
|---|---|---|
_enable | bool | Si se habilita el collider |
Notas:
- Los datos deben contener un nodo Collider, de lo contrario se devuelve
false. - El Renderer debe estar activo.
Ejemplo:
bool ok = renderer.SetColliderEnable(true);
if (!ok) Debug.LogWarning("Los datos no contienen un collider");
SetEnvironment
public void SetEnvironment(bool _env)
Activa o desactiva el renderizado de datos de entorno. Los datos de entorno son una nube de puntos de fondo de baja precisión utilizada para rellenar vistas lejanas.
| Parámetro | Tipo | Descripción |
|---|---|---|
_env | bool | Si se renderizan los datos de entorno |
Notas:
- Los datos deben contener nodos de entorno.
- Los datos de entorno son independientes del sistema LOD de los datos principales.
Ejemplo:
renderer.SetEnvironment(true);
GetBounds
public void GetBounds(out Vector3 max, out Vector3 min)
Obtiene la caja delimitadora alineada con los ejes (coordenadas de mundo) de los datos renderizados.
| Parámetro | Tipo | Descripción |
|---|---|---|
max | out Vector3 | Punto máximo de la caja delimitadora (coordenadas de mundo) |
min | out Vector3 | Punto mínimo de la caja delimitadora (coordenadas de mundo) |
Notas:
- Devuelve
Vector3.zerocuando los datos no están completamente cargados. - Puede usarse para el posicionamiento de la cámara y el cálculo del ángulo de visión.
Ejemplo:
renderer.GetBounds(out Vector3 max, out Vector3 min);
Vector3 center = (max + min) / 2f;
Vector3 size = max - min;
GetSourceType
// Valor de retorno: SourceType
public SourceType GetSourceType()
Obtiene el tipo de origen de los datos cargados; consulta SourceType.
Notas:
- Devuelve
SourceType.Nonecuando los datos no están cargados.
GetDataType
// Valor de retorno: DataType
public DataType GetDataType()
Obtiene el tipo de formato de los datos cargados; consulta DataType.
Notas:
- Devuelve
DataType.Nonecuando los datos no están cargados.
GetMeta (desde la ruta del archivo)
// Valor de retorno: bool, true=leído correctamente
public bool GetMeta(string _filePath, out SplatMeta _metaData)
Lee los metadatos de los datos 3DGS desde la ruta del archivo especificado sin cargar completamente los datos.
| Parámetro | Tipo | Descripción |
|---|---|---|
_filePath | string | Ruta del archivo de datos |
_metaData | out SplatMeta | Metadatos de salida |
Notas:
- Admite rutas locales y URL HTTP.
- Solo lee los metadatos de la cabecera del archivo y no carga los datos de la nube de puntos.
- Devuelve
falsecuando la ruta está vacía o el archivo no existe.
Ejemplo:
if (renderer.GetMeta(filePath, out SplatMeta meta))
{
Debug.Log(meta.source);
Debug.Log(meta.dataType);
}
GetMeta (desde los datos cargados)
// Valor de retorno: bool, true=leído correctamente
public bool GetMeta(out SplatMeta _metaData)
Obtiene los metadatos de los datos cargados actualmente. Si los datos no han terminado de cargarse, intenta leer desde la ruta del archivo.
| Parámetro | Tipo | Descripción |
|---|---|---|
_metaData | out SplatMeta | Metadatos de salida |
Ejemplo:
if (renderer.GetMeta(out SplatMeta meta))
{
Debug.Log(meta.source);
}
GetMeshBlockInfos
// Valor de retorno: List<LCCMeshBlockInfo>, metadatos de los bloques Mesh de colisión; null cuando no hay Mesh o no está disponible
public List<LCCMeshBlockInfo> GetMeshBlockInfos()
Devuelve los metadatos de todos los bloques de malla de colisión (id, caja delimitadora de mundo / local, recuento de vértices, recuento de caras). Sin I/O, sin análisis — solo lee los metadatos ya en memoria. Consulta LCCMeshBlockInfo.
Notas:
- Solo plataforma PC / Mac + fuente de datos local; debe llamarse en el hilo principal.
- Uso típico: primero úsalo para obtener la caja delimitadora de mundo de cada bloque, elige los ids necesarios y luego llama a
GetMeshes(ids)para leer solo esos bloques. - Los formatos nativos (PLY / SOG / SPZ / splat / ksplat) no tienen Mesh y devuelven
null(normal, sin log).
Ejemplo:
var infos = renderer.GetMeshBlockInfos();
foreach (var info in infos)
{
Debug.Log($"{info.id}: verts={info.vertexCount}, faces={info.faceCount}");
}
GetMeshes
// Valor de retorno: List<LCCMeshBlock>, todos los datos de geometría de la Mesh de colisión; null cuando no está disponible
public List<LCCMeshBlock> GetMeshes()
Devuelve síncronamente los datos de geometría de todos los bloques de malla de colisión (vértices + índices de triángulos, en coordenadas locales). Es una operación pesada (lectura síncrona del disco + análisis + asignación), así que llámala una vez y almacena en caché tú mismo — nunca en cada fotograma. Consulta LCCMeshBlock.
Notas:
- Solo plataforma PC / Mac + fuente de datos local; debe llamarse en el hilo principal.
- Para escenas grandes, usa
GetMeshBlockInfos()para elegir ids +GetMeshes(ids)para evitar asignar una gran cantidad de memoria administrada de una sola vez. - Un solo bloque puede tener más de 65535 vértices, por lo que
mesh.indexFormat = IndexFormat.UInt32debe establecerse antes de construir la Mesh.
Ejemplo:
var meshes = renderer.GetMeshes();
foreach (var block in meshes)
{
// block.vertices / block.triangles están en el sistema de coordenadas local del objeto
}
GetMeshes (por id)
// Valor de retorno: List<LCCMeshBlock>, datos de geometría de la Mesh de colisión de los ids especificados; null cuando no hay impacto
public List<LCCMeshBlock> GetMeshes(IEnumerable<string> _ids)
Devuelve síncronamente los datos de geometría del bloque de malla de colisión (en coordenadas locales) de los ids especificados. Los ids los proporciona GetMeshBlockInfos().
| Parámetro | Tipo | Descripción |
|---|---|---|
_ids | IEnumerable<string> | El conjunto de ids de bloque de destino (proporcionado por GetMeshBlockInfos()) |
Notas:
- Los ids desconocidos se omiten con una advertencia; los ids duplicados se deduplican (sin lecturas repetidas del disco); el orden de retorno es el orden de recorrido de los ids (después de la deduplicación).
- Devuelve
nullcon una advertencia cuando la entrada esnull, vacía o no tiene impactos. - Otras restricciones son las mismas que
GetMeshes().
Ejemplo:
var ids = new List<string> { "block-0", "block-3" };
var meshes = renderer.GetMeshes(ids);