LCCManager: Manager principal
El manager principal del LCC Unity SDK, responsable de gestionar todas las instancias Renderer, las cámaras, el estado de renderizado global, así como las operaciones de edición (recorte / resaltado / tono), la proyección de decal, el ajuste y las consultas de interacción (raycast / colisión). Debe haber solo una instancia LCCManager en toda la escena.
| Namespace | LCCCore |
| Clase base | MonoBehaviour |
LCCManager no tiene propiedades públicas; toda la funcionalidad se accede mediante métodos. Los métodos están agrupados por propósito:
- Inicialización y configuración
- Control de renderizado en tiempo de ejecución
- Iluminación y sombras
- Gestión de cámaras
- Recorte / Resaltado / Tono
- Proyección de decal
- Ajuste
- Raycasting y consultas de colisión
- Efectos visuales
- Consultas de instancias
Inicialización y configuración
Los siguientes métodos se usan para completar la configuración previa de plataforma, modo de renderizado, capacidad, etc., antes de cargar datos. La mayoría de los métodos deben llamarse antes de cualquier Renderer.Load().
SetPlatformType
public void SetPlatformType(PlatformType _type)
Establece la plataforma de ejecución de destino del SDK, lo que afecta a la estrategia de renderizado interna y a la asignación de recursos.
| Parámetro | Tipo | Descripción |
|---|---|---|
_type | PlatformType | Plataforma de destino; consulta PlatformType |
Notas:
- Debe ejecutarse antes de cualquier llamada a
GetRender().
Ejemplo:
lccManager.SetPlatformType(PlatformType.PC);
SwitchRenderPass
public void SwitchRenderPass(ActiveRenderMode _mode)
Establece el modo de arquitectura de renderizado global. MultiRender usa un búfer de GPU compartido y puede renderizar hasta 255 Renderers simultáneamente; SingleRender permite que el SDK seleccione automáticamente la ruta de renderizado según el tamaño de los datos.
| Parámetro | Tipo | Descripción |
|---|---|---|
_mode | ActiveRenderMode | Modo de renderizado; consulta ActiveRenderMode |
Notas:
- Debe llamarse antes de cualquier
Renderer.Load(). - Solo eficaz en plataformas PC / Mac; las plataformas móviles / VR adoptan automáticamente una estrategia adaptativa y se rechaza la llamada a este método.
- El modo
MultiRenderno admite fuentes de datos HTTP; usaSingleRenderpara datos HTTP. - Una vez que cualquier Renderer completa
Load(), el modo se bloquea y no puede volver a cambiarse.
Ejemplo:
lccManager.SwitchRenderPass(ActiveRenderMode.MultiRender);
GetRender (Sobrecarga 1: vincular Transform)
// Valor de retorno: Renderer, null en caso de error
public Renderer GetRender(Transform _transform)
Crea una nueva instancia de renderizado y la vincula al Transform especificado. Después de la creación, debe llamarse a Renderer.Load() para cargar datos.
| Parámetro | Tipo | Descripción |
|---|---|---|
_transform | Transform | El Transform al que se adjunta la instancia de renderizado |
Notas:
SetPlatformType()ySetMainCamera()deben llamarse primero.- Se admiten hasta 255 Renderers en el modo
MultiRender.
Ejemplo:
var go = new GameObject("LCCScene");
var renderer = lccManager.GetRender(go.transform);
renderer.Load(filePath, null, () => Debug.Log("Cargado"));
GetRender (Sobrecarga 2: crear GameObject automáticamente)
// Valor de retorno: Renderer, null en caso de error
public Renderer GetRender(out GameObject gameObject)
Crea automáticamente un GameObject llamado LCCRenderer y vincula la instancia de renderizado a su Transform.
| Parámetro | Tipo | Descripción |
|---|---|---|
gameObject | out GameObject | Devuelve el GameObject creado automáticamente, null en caso de error |
Ejemplo:
var renderer = lccManager.GetRender(out GameObject go);
renderer.Load(filePath, null, () => Debug.Log("Cargado"));
SetMaxBufferSplat
public void SetMaxBufferSplat(int _count)
Establece la capacidad máxima del búfer de GPU (recuento de Splats). Se asigna una vez y no puede cambiarse dinámicamente.
| Parámetro | Tipo | Descripción |
|---|---|---|
_count | int | Recuento máximo de Splats, unidad: decenas de miles (valor × 10000 = recuento real) |
Notas:
- Debe llamarse antes de cualquier
Renderer.Load(), ySetPlatformType()debe llamarse primero. - Una capacidad mayor significa un mayor uso de memoria de vídeo; establécelo según sea necesario.
- Límites de plataforma: PC / Mac / PCVR 45 millones, Android / iOS 6 millones, VR (Pico / Quest / PicoSwan / AVP / OpenXR) 2 millones.
- Valores por defecto: PC / Mac 30 millones, Android / iOS 3 millones, VR 1 millón.
Ejemplo:
lccManager.SetMaxBufferSplat(3000); // 30 millones de puntos
SetFullRenderSplat
public void SetFullRenderSplat(int _count)
Establece el umbral superior para el renderizado completo de PC / Mac. Cuando el tamaño de los datos está por debajo de este valor, se usa la ruta de renderizado completo; de lo contrario, se usa la ruta de renderizado por fragmentos.
| Parámetro | Tipo | Descripción |
|---|---|---|
_count | int | Límite superior del renderizado completo, unidad: decenas de miles, rango [100, 4500] |
Notas:
- Solo compatible con plataformas PC / Mac / PCVR.
- Debe llamarse antes de cualquier
Renderer.Load(), ySetPlatformType()debe llamarse primero.
Ejemplo:
lccManager.SetFullRenderSplat(2500); // 25 millones de puntos
SetMaxRenderSplats
public void SetMaxRenderSplats(int _count)
Establece el número máximo de Splats renderizados por fotograma en tiempo de ejecución. Puede llamarse dinámicamente después de Load().
| Parámetro | Tipo | Descripción |
|---|---|---|
_count | int | Número máximo de Splats renderizados en tiempo de ejecución, unidad: decenas de miles |
Notas:
- Puede ajustarse dinámicamente en tiempo de ejecución.
- No puede superar la capacidad establecida por
SetMaxBufferSplat(); se limita automáticamente cuando se supera. - No tiene efecto en el modo de renderizado completo.
Ejemplo:
lccManager.SetMaxRenderSplats(2500); // 25 millones de puntos
GetLoadRatio
// Valor de retorno: float, [0,1] progreso de carga de datos actual
public float GetLoadRatio()
Consulta el progreso de carga de los datos de la escena actual.
Notas:
- Devuelve siempre
1.0en el modo de renderizado completo. - En el modo de renderizado por fragmentos, devuelve la relación de nodos cargados bajo la vista actual; el valor cambia en tiempo real con el movimiento de la cámara y no es un progreso general monótonamente creciente.
Ejemplo:
float ratio = lccManager.GetLoadRatio();
progressBar.value = ratio;
SetSelectionMode
public void SetSelectionMode(SelectionMode mode)
Establece la estrategia de selección de nodos.
| Parámetro | Tipo | Descripción |
|---|---|---|
mode | SelectionMode | Estrategia de selección; consulta SelectionMode |
Notas:
Auto(por defecto): se decide automáticamente según la caja delimitadora general de la escena; cuando la dimensión máxima de la escena supera aproximadamente 380 metros, se actualiza automáticamente aLarge.Normal: adecuado para escenas pequeñas y medianas.Large: adecuado para escenas muy grandes (más de 1000 metros).- Surte efecto inmediatamente al cambiar.
Ejemplo:
lccManager.SetSelectionMode(SelectionMode.Auto);
Control de renderizado en tiempo de ejecución
Los siguientes métodos pueden llamarse dinámicamente en tiempo de ejecución para ajustar la precisión del renderizado, los efectos de visualización y los interruptores de renderizado.
SetDetailLevel
public void SetDetailLevel(float sse)
Establece el nivel de precisión del renderizado. Un valor mayor significa un renderizado más fino y un mayor consumo de rendimiento.
| Parámetro | Tipo | Descripción |
|---|---|---|
sse | float | Nivel de precisión, rango [1, 100], se limita automáticamente cuando se supera |
Notas:
- Usa un mapeo logarítmico: los cambios son sensibles en el rango de valores bajos y suaves en el rango de valores altos.
- Puede ajustarse dinámicamente en tiempo de ejecución.
- Solo surte efecto en el modo de selección
Normal.
Ejemplo:
lccManager.SetDetailLevel(50f); // Precisión media
SetStartLod
public void SetStartLod(int lod)
Establece el punto de inicio de expansión del LOD (basado en 0). 0 es el más fino, y un número mayor significa un nivel más grueso.
| Parámetro | Tipo | Descripción |
|---|---|---|
lod | int | Nivel LOD inicial, rango [0, 10], se limita automáticamente cuando se supera |
Notas:
- El límite superior efectivo real está restringido por el número total de niveles de datos.
Ejemplo:
lccManager.SetStartLod(0);
SetAutoFov
public void SetAutoFov(bool _auto)
Establece si se gestiona automáticamente el FOV de renderizado. Cuando está habilitado (por defecto), el SDK bloquea una línea base de distancia focal en píxeles en el primer fotograma y, a continuación, invierte el FOV vertical desde la altura actual del viewport en cada fotograma y lo escribe de vuelta en Camera.fieldOfView; cuando está deshabilitado, fieldOfView se controla externamente (SetFOV() o cambiando directamente la cámara).
| Parámetro | Tipo | Descripción |
|---|---|---|
_auto | bool | Si se usa el FOV automático |
Notas:
- Habilitado por defecto.
- Cuando está habilitado, reescribe continuamente el
Camera.fieldOfViewde la cámara principal, por lo que llamar aSetFOV()se ignora. - Cuando está deshabilitado, debe llamarse a
SetFOV()manualmente para establecer los parámetros.
Ejemplo:
lccManager.SetAutoFov(true);
SetFOV
public void SetFOV(int _width, int _height, float _verticalFov, float _aspect)
Establece manualmente el FOV vertical (en grados). Reescribe directamente el Camera.fieldOfView de la cámara principal para que el FOV del Inspector coincida con el FOV realmente usado para el renderizado. _width / _height / _aspect son parámetros de firma heredados; la proyección real usa el propio viewport de la cámara principal (usa SetRecordMode() para salida fuera de pantalla con un tamaño / FOV diferente).
| Parámetro | Tipo | Descripción |
|---|---|---|
_width | int | Ancho en píxeles |
_height | int | Alto en píxeles |
_verticalFov | float | FOV vertical (grados) |
_aspect | float | Relación de aspecto |
Notas:
SetAutoFov(false)debe llamarse primero, de lo contrario la inversión automática del FOV por fotograma sobrescribe el valor manual.- El FOV vertical se limita a
[1, 179]grados. - Llamarlo en plataformas VR / PCVR, durante la grabación o bajo una cámara ortográfica se rechaza (advierte y devuelve).
Ejemplo:
lccManager.SetFOV(1920, 1080, 60f, 1.778f);
SetRenderEnable
public void SetRenderEnable(Renderer _renderer, bool _isEnable)
Controla el interruptor de renderizado del Renderer especificado en tiempo de ejecución. Cuando está deshabilitado, no participa en el recorrido ni en el dibujado.
| Parámetro | Tipo | Descripción |
|---|---|---|
_renderer | Renderer | Instancia de renderizado de destino |
_isEnable | bool | Si se habilita el renderizado |
Ejemplo:
lccManager.SetRenderEnable(renderer, false); // Ocultar
SetEnvironment
public void SetEnvironment(Renderer _renderer, bool _isRender)
Controla el renderizado de datos de entorno del Renderer especificado. 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 |
|---|---|---|
_renderer | Renderer | Instancia de renderizado de destino |
_isRender | bool | Si se renderizan los datos de entorno |
Notas:
- Los datos deben contener nodos de entorno.
Ejemplo:
lccManager.SetEnvironment(renderer, true);
SetZDepth
public void SetZDepth(bool zwrite)
Activa o desactiva la escritura de profundidad Z y ajusta la cola de renderizado en consecuencia.
| Parámetro | Tipo | Descripción |
|---|---|---|
zwrite | bool | Si se habilita la escritura de profundidad Z |
Ejemplo:
lccManager.SetZDepth(true);
SetAlpha
public void SetAlpha(float alpha)
Establece la opacidad global.
| Parámetro | Tipo | Descripción |
|---|---|---|
alpha | float | Opacidad global, rango [0, 1], se limita automáticamente cuando se supera |
Ejemplo:
lccManager.SetAlpha(0.8f);
SetLightIntensity
public void SetLightIntensity(float intensity)
Establece la intensidad de iluminación global.
| Parámetro | Tipo | Descripción |
|---|---|---|
intensity | float | Intensidad de iluminación, rango [0, 1], se limita automáticamente cuando se supera |
Ejemplo:
lccManager.SetLightIntensity(0.7f);
SetLowPassFilter
public void SetLowPassFilter(float _filter)
Establece la intensidad global del filtro de paso bajo, usada para suprimir el aliasing / ruido de alta frecuencia.
| Parámetro | Tipo | Descripción |
|---|---|---|
_filter | float | Intensidad del filtro de paso bajo, rango [0, 1], se limita automáticamente cuando se supera |
Ejemplo:
lccManager.SetLowPassFilter(0.3f);
SetLockFPS
public void SetLockFPS(bool _isLock)
Activa o desactiva el bloqueo de la tasa de fotogramas (cambio de tasa de fotogramas estático / dinámico).
| Parámetro | Tipo | Descripción |
|---|---|---|
_isLock | bool | Si se bloquea la tasa de fotogramas |
Ejemplo:
lccManager.SetLockFPS(true);
SetRenderLayer
public void SetRenderLayer(int _layer)
Establece la Layer de Unity usada por el renderizado de LCC, para el control de visibilidad del CullingMask de la cámara.
| Parámetro | Tipo | Descripción |
|---|---|---|
_layer | int | Layer de renderizado de Unity, rango [0, 31] |
Notas:
- Puede ajustarse dinámicamente en tiempo de ejecución.
Ejemplo:
lccManager.SetRenderLayer(8); // Usa la Layer 8
SetForceRefresh
public void SetForceRefresh()
Fuerza una actualización de renderizado. Limpia la caché interna de información de la cámara para que el frustum, el LOD y otros parámetros se recalculen en el siguiente fotograma. Adecuado para casos en los que parámetros de cámara modificados externamente deben surtir efecto de inmediato.
Ejemplo:
lccManager.SetForceRefresh();
SetMipMode
public void SetMipMode(MipMode _mipMode)
Cambia el modo de renderizado Mip. El modo Mip usa muestreo de mipmap (por defecto), y el modo Non_Mip desactiva el mipmap.
| Parámetro | Tipo | Descripción |
|---|---|---|
_mipMode | MipMode | Modo de destino; consulta MipMode |
Notas:
- Devuelve inmediatamente si el modo actual es el mismo que el modo pasado.
- Surte efecto inmediatamente al cambiar.
Ejemplo:
lccManager.SetMipMode(MipMode.Non_Mip);
SetGraphicsAPI
public void SetGraphicsAPI(GraphicsDeviceType type)
Establece el tipo de API gráfica. HDR se habilita en modo DX11.
| Parámetro | Tipo | Descripción |
|---|---|---|
type | GraphicsDeviceType | Tipo de API gráfica (enum integrado de Unity) |
Ejemplo:
lccManager.SetGraphicsAPI(GraphicsDeviceType.Direct3D11);
SetDebugMode
public void SetDebugMode(bool debug)
Activa o desactiva el modo de depuración.
| Parámetro | Tipo | Descripción |
|---|---|---|
debug | bool | Si se habilita el modo de depuración |
Notas:
- Solo compatible con plataformas PC / Mac.
Ejemplo:
lccManager.SetDebugMode(true);
SetEditorMode
public void SetEditorMode(bool _isEditor)
Activa o desactiva el modo Editor.
| Parámetro | Tipo | Descripción |
|---|---|---|
_isEditor | bool | Si se habilita el modo Editor |
Notas:
- Solo compatible con plataformas PC / Mac.
Ejemplo:
lccManager.SetEditorMode(true);
SetAECMode
public void SetAECMode(bool _aec)
Activa o desactiva el modo AEC (Arquitectura / Ingeniería / Construcción).
| Parámetro | Tipo | Descripción |
|---|---|---|
_aec | bool | Si se habilita el modo AEC |
Notas:
- Solo compatible con plataformas PC / Mac.
Ejemplo:
lccManager.SetAECMode(true);
SetSemantic
// Valor de retorno: bool, false=parámetro no válido
public bool SetSemantic(bool enable, Vector4[] color = null)
Activa o desactiva el modo de renderizado semántico. Cuando está habilitado, se puede pasar un array de colores para definir el color de visualización de cada categoría semántica.
| Parámetro | Tipo | Descripción |
|---|---|---|
enable | bool | Si se habilita el renderizado semántico |
color | Vector4[] | Array de colores semánticos, la longitud debe ser 100, de lo contrario se devuelve false; pasa null para usar colores por defecto |
Ejemplo:
Vector4[] colors = new Vector4[100];
colors[0] = new Vector4(1, 0, 0, 1); // Categoría 0 = rojo
lccManager.SetSemantic(true, colors);
SwitchRenderMode
public void SwitchRenderMode(RenderMode mode, Texture2D tex = null)
Cambia entre el renderizado de nube de puntos y el renderizado 3DGS. Se puede proporcionar una textura de rampa de color de elevación en el modo de nube de puntos.
| Parámetro | Tipo | Descripción |
|---|---|---|
mode | RenderMode | Modo de renderizado; consulta RenderMode |
tex | Texture2D | Textura de rampa de color de elevación (opcional) |
Notas:
- Solo compatible con plataformas PC / Mac.
Ejemplo:
lccManager.SwitchRenderMode(RenderMode.PointCloud, elevationTex);
SetRecordMode
public void SetRecordMode(bool isRecord, Vector2 renderSize, float verticalFov)
Establece el modo de grabación. En el modo de grabación, se usa una resolución y un FOV fijos para el renderizado, adecuado para la grabación de vídeo en alta definición.
| Parámetro | Tipo | Descripción |
|---|---|---|
isRecord | bool | Si se usa el modo de grabación |
renderSize | Vector2 | Resolución de grabación |
verticalFov | float | FOV vertical (grados) |
Notas:
- Solo compatible con plataformas PC / Mac.
- En el modo de grabación, la distancia focal de la cámara es fija y no cambia con el componente Camera.
- Después de grabar, llama a
SetRecordMode(false, ...)para restaurar.
Ejemplo:
lccManager.SetRecordMode(true, new Vector2(3840, 2160), 60f);
SetVRPerformance
public void SetVRPerformance(bool _enabled)
Establece el modo de ordenamiento de alto rendimiento de VR. true usa el ordenamiento radix de GPU (GpuSorter), y false vuelve a CPU / BitonicSorter.
| Parámetro | Tipo | Descripción |
|---|---|---|
_enabled | bool | Si se habilita el ordenamiento de alto rendimiento de GPU |
Notas:
- Solo afecta a la ruta de ordenamiento de los visores VR (Pico / Quest / PicoSwan / OpenXR); habilitado por defecto.
- Cuando no hay dispositivo de cómputo (como Mali), el ordenamiento aguas arriba vuelve automáticamente a CPU, sin verse afectado por este interruptor.
Ejemplo:
lccManager.SetVRPerformance(true);
Iluminación y sombras
Los siguientes métodos controlan la recepción de sombras y las luces puntuales personalizadas en superficies 3DGS. Los métodos relacionados con las sombras deben llamarse después de que la escena LCC termine de cargarse.
SetShadowReceive
public void SetShadowReceive(bool enable)
Activa o desactiva la recepción de sombras de la nube de puntos. Cuando está activada, las sombras de los objetos Mesh de la escena pueden proyectarse sobre las superficies de la nube de puntos 3DGS.
| Parámetro | Tipo | Descripción |
|---|---|---|
enable | bool | Si se reciben sombras |
Notas:
- Desactivado por defecto.
- Requiere objetos Mesh que proyecten sombras y una Directional Light en la escena.
Ejemplo:
lccManager.SetShadowReceive(true);
SetShadowColor
public void SetShadowColor(Color color)
Establece el color del área de sombra.
| Parámetro | Tipo | Descripción |
|---|---|---|
color | Color | Color de sombra (RGBA) |
Notas:
- Por defecto
(0.3, 0.3, 0.3, 1). SetShadowReceive(true)debe activarse primero.
Ejemplo:
lccManager.SetShadowColor(new Color(0.3f, 0.3f, 0.3f, 1f));
SetShadowStrength
public void SetShadowStrength(float strength)
Establece la intensidad de la sombra. 0 es sin sombra, 1 es la sombra más intensa.
| Parámetro | Tipo | Descripción |
|---|---|---|
strength | float | Intensidad de la sombra, rango [0, 1], se limita automáticamente cuando se supera |
Notas:
- Por defecto
1.0. SetShadowReceive(true)debe activarse primero.
Ejemplo:
lccManager.SetShadowStrength(0.8f);
SetLights
// Valor de retorno: int, 0=éxito, -1=superado el límite máximo de recuento
public int SetLights(List<PointLightData> lights)
Establece la lista personalizada de luces puntuales. Pasar null o una lista vacía desactiva la iluminación personalizada.
| Parámetro | Tipo | Descripción |
|---|---|---|
lights | List<PointLightData> | Lista de luces puntuales; consulta PointLightData |
Notas:
PointLightData.lightType:0es una luz puntual (direction/spotAngleignorados),1es un foco (direction/spotAnglerequeridos).- Pasar
nullo una lista vacía desactiva la iluminación personalizada.
Ejemplo:
using Unity.Mathematics; // float3
var lights = new List<PointLightData>();
lights.Add(new PointLightData {
position = new float3(0, 5, 0),
lightType = 0, // 0=luz puntual, 1=foco
color = new float3(1, 1, 1),
intensity = 2f,
range = 10f
});
lccManager.SetLights(lights);
Gestión de cámaras
SetMainCamera
public void SetMainCamera(Camera _cam)
Establece la cámara de renderizado principal. LCC usa esta cámara para el descarte por frustum, la selección de LOD, el ordenamiento y otras operaciones.
| Parámetro | Tipo | Descripción |
|---|---|---|
_cam | Camera | Cámara de renderizado principal; pasa null para limpiar |
Notas:
- Debe establecerse antes de
Renderer.Load(). - Solo compatible con plataformas PC / Mac.
Ejemplo:
lccManager.SetMainCamera(Camera.main);
AddCamera
public void AddCamera(Camera _cam)
Añade una cámara secundaria. La cámara secundaria participa en el renderizado pero no afecta a la selección de LOD.
| Parámetro | Tipo | Descripción |
|---|---|---|
_cam | Camera | Cámara secundaria |
Notas:
- Solo compatible con plataformas PC / Mac.
- La cámara principal no puede añadirse como cámara secundaria.
Ejemplo:
lccManager.AddCamera(secondCamera);
RemoveCamera
public void RemoveCamera(Camera _cam)
Elimina una cámara secundaria añadida.
| Parámetro | Tipo | Descripción |
|---|---|---|
_cam | Camera | La cámara secundaria a eliminar |
Notas:
- Solo compatible con plataformas PC / Mac.
Ejemplo:
lccManager.RemoveCamera(secondCamera);
Recorte / Resaltado / Tono
El recorte, el resaltado y el tono son tres tipos de operaciones de edición, y todos admiten definir la región afectada mediante textura 2D, geometría 3D o una mezcla de ambas. Consulta Data2D, Data3D, DataMix y ToneMix.
SetClip (recorte por plano)
// Valor de retorno: int, 0=éxito
public int SetClip(Vector3 planePoint, Vector3 planeNormal, bool inside = true)
Recorta la nube de puntos con un plano infinito, manteniendo los puntos del lado de la normal o del lado opuesto.
| Parámetro | Tipo | Descripción |
|---|---|---|
planePoint | Vector3 | Un punto en el plano |
planeNormal | Vector3 | Normal del plano |
inside | bool | true mantiene el lado de la normal |
Notas:
- Mutuamente excluyente con otros modos de recorte.
Ejemplo:
lccManager.SetClip(Vector3.zero, Vector3.up, true); // Mantener por encima del suelo
SetClip (recorte por textura 2D)
// Valor de retorno: int, 0=éxito, 1=lista vacía, 2=superado el recuento máximo
public int SetClip(List<Data2D> _2Ds)
Recorta la nube de puntos usando una máscara de textura proyectada 2D.
| Parámetro | Tipo | Descripción |
|---|---|---|
_2Ds | List<Data2D> | Lista de selección por textura 2D |
Ejemplo:
var clips = new List<Data2D>();
clips.Add(new Data2D {
texture = maskTex,
mv = modelViewMatrix,
mvp = mvpMatrix,
mode = SelectMode.normal
});
lccManager.SetClip(clips);
SetClip (recorte por geometría 3D)
// Valor de retorno: int, 0=éxito, 1=lista vacía, 2=superado el recuento máximo, 3=cero geometrías válidas
public int SetClip(List<Data3D> _3Ds)
Recorta la nube de puntos con geometría 3D, admitiendo operaciones booleanas para combinar varias geometrías.
| Parámetro | Tipo | Descripción |
|---|---|---|
_3Ds | List<Data3D> | Lista de geometría 3D |
Notas:
- Se requiere al menos una geometría con
operation == normal.
Ejemplo:
var clips = new List<Data3D>();
clips.Add(new Data3D {
type = ShapeType.box,
invMat = boxInverseMatrix,
operation = OperationMode.normal,
mode = SelectMode.normal
});
lccManager.SetClip(clips);
SetClip (recorte en modo mixto)
// Valor de retorno: int, 0=éxito, 1=lista vacía, 2=superado el recuento máximo
public int SetClip(List<DataMix> mix)
Define la región de recorte con una mezcla de texturas 2D y geometrías 3D. Cada entrada especifica su tipo mediante editType.
| Parámetro | Tipo | Descripción |
|---|---|---|
mix | List<DataMix> | Lista de selección mixta (2D + 3D) |
Ejemplo:
var mix = new List<DataMix>();
mix.Add(new DataMix {
editType = EditType.Edit3D,
type = ShapeType.box,
invMat = matrix,
operation = OperationMode.normal,
mode = SelectMode.normal
});
lccManager.SetClip(mix);
QuitClipMode
public void QuitClipMode()
Sale del modo de recorte y restaura la visualización completa de la nube de puntos.
Ejemplo:
lccManager.QuitClipMode();
SetHighlight (resaltado por textura 2D)
// Valor de retorno: int, 0=éxito, 1=lista vacía, 2=superado el recuento máximo
public int SetHighlight(List<Data2D> _2Ds)
Resalta la nube de puntos usando una máscara de textura proyectada 2D; la nube de puntos fuera de la región resaltada se atenúa.
| Parámetro | Tipo | Descripción |
|---|---|---|
_2Ds | List<Data2D> | Lista de selección por textura 2D |
Notas:
- Mutuamente excluyente con el resaltado 3D y el resaltado mixto.
Ejemplo:
var highlights = new List<Data2D>();
highlights.Add(new Data2D {
texture = maskTex,
mv = modelViewMatrix,
mvp = mvpMatrix,
mode = SelectMode.normal
});
lccManager.SetHighlight(highlights);
SetHighlight (resaltado por geometría 3D)
// Valor de retorno: int, 0=éxito, 1=lista vacía, 2=superado el recuento máximo, 3=cero geometrías válidas
public int SetHighlight(List<Data3D> _3Ds)
Define la región resaltada con geometría 3D, admitiendo operaciones booleanas para combinar.
| Parámetro | Tipo | Descripción |
|---|---|---|
_3Ds | List<Data3D> | Lista de geometría 3D |
Notas:
- Se requiere al menos una geometría con
operation == normal.
Ejemplo:
var highlights = new List<Data3D>();
highlights.Add(new Data3D {
type = ShapeType.box,
invMat = boxInverseMatrix,
operation = OperationMode.normal,
mode = SelectMode.normal
});
lccManager.SetHighlight(highlights);
SetHighlight (resaltado en modo mixto)
// Valor de retorno: int, 0=éxito, 1=lista vacía, 2=superado el recuento máximo
public int SetHighlight(List<DataMix> mix)
Define la región resaltada con una mezcla de texturas 2D y geometrías 3D.
| Parámetro | Tipo | Descripción |
|---|---|---|
mix | List<DataMix> | Lista de selección mixta |
Ejemplo:
var mix = new List<DataMix>();
mix.Add(new DataMix {
editType = EditType.Edit3D,
type = ShapeType.box,
invMat = matrix,
operation = OperationMode.normal,
mode = SelectMode.normal
});
lccManager.SetHighlight(mix);
QuitHighlightMode
public void QuitHighlightMode()
Sale del modo de resaltado y restaura la visualización normal de la nube de puntos.
Ejemplo:
lccManager.QuitHighlightMode();
SetTone
// Valor de retorno: int, 0=éxito, 1=lista vacía, 2=superado el recuento máximo
public int SetTone(List<ToneMix> mix)
Aplica el ajuste de tono a la región seleccionada, admitiendo filtros de brillo, saturación, contraste y LUT. La región de tono puede definirse mediante textura 2D o geometría 3D.
| Parámetro | Tipo | Descripción |
|---|---|---|
mix | List<ToneMix> | Lista de mezcla de tono |
Notas:
brightness/saturation/contrastpor defecto1.0.lutides el índice del filtro LUT;0significa no usado.
Ejemplo:
var tones = new List<ToneMix>();
tones.Add(new ToneMix {
editType = EditType.Edit3D,
type = ShapeType.box,
invMat = boxMatrix,
operation = OperationMode.normal,
mode = SelectMode.normal,
brightness = 1.2f,
saturation = 1.0f,
contrast = 1.1f,
lutid = 0
});
lccManager.SetTone(tones);
QuitToneMode
public void QuitToneMode()
Sale del modo de tono y restaura el color original de la nube de puntos.
Ejemplo:
lccManager.QuitToneMode();
Proyección de decal
La proyección de decal proyecta una textura sobre las superficies 3DGS a lo largo de la dirección del proyector. El decal es un estado global fijo en el mundo, coherente para todas las cámaras. El flujo de trabajo típico es: habilitar el decal → establecer la textura → establecer la pose del proyector. Los siguientes métodos solo son compatibles con plataformas PC / Mac.
SetDecalEnabled
public void SetDecalEnabled(bool enable)
Activa o desactiva la proyección del decal. SetDecalTexture() y SetDecalProjection() deben llamarse por separado para establecer el contenido y la pose del proyector.
| Parámetro | Tipo | Descripción |
|---|---|---|
enable | bool | Si se habilita la proyección del decal |
Notas:
- Desactivarlo no limpia la textura / parámetros en caché.
Ejemplo:
lccManager.SetDecalEnabled(true);
lccManager.SetDecalTexture(decalTex);
lccManager.SetDecalProjection(projectorPos, projectorRot, 60f, 1.778f, 0.1f, 20f);
SetDecalTexture
public void SetDecalTexture(Texture2D tex)
Establece la textura del decal. RGB es el color, y A es la máscara propia del decal, que se multiplica con la opacidad global y el desvanecimiento del borde.
| Parámetro | Tipo | Descripción |
|---|---|---|
tex | Texture2D | Textura del decal; pasar null limpia la referencia |
Ejemplo:
lccManager.SetDecalTexture(logoTex);
SetDecalProjection
public void SetDecalProjection(Vector3 pos, Quaternion rot, float fov, float aspect, float near, float far)
Establece la pose y los parámetros de perspectiva del proyector del decal. El proyector proyecta a lo largo de su dirección frontal (+Z), y los puntos dentro del frustum quedan cubiertos por el decal.
| Parámetro | Tipo | Descripción |
|---|---|---|
pos | Vector3 | Posición en el mundo del proyector |
rot | Quaternion | Orientación del proyector |
fov | float | FOV vertical (grados), limitado a [1, 179] |
aspect | float | Relación de aspecto, mínimo 1e-4 |
near | float | Plano de recorte cercano, mínimo 1e-3 |
far | float | Plano de recorte lejano, mínimo near + 1e-3 |
Ejemplo:
lccManager.SetDecalProjection(new Vector3(0, 10, 0), Quaternion.Euler(90, 0, 0), 60f, 1.778f, 0.1f, 20f);
SetDecalOpacity
public void SetDecalOpacity(float opacity)
Establece la opacidad general del decal.
| Parámetro | Tipo | Descripción |
|---|---|---|
opacity | float | Opacidad general del decal, rango [0, 1], se limita automáticamente cuando se supera |
Ejemplo:
lccManager.SetDecalOpacity(0.8f);
SetDecalEdgeFade
public void SetDecalEdgeFade(float edgeFade)
Establece el ancho de desvanecimiento del borde del decal. 0 es un borde duro, y un valor mayor hace que la transición del borde sea más suave.
| Parámetro | Tipo | Descripción |
|---|---|---|
edgeFade | float | Ancho de desvanecimiento del borde (relación en espacio UV), rango [0, 0.5), se limita automáticamente cuando se supera |
Ejemplo:
lccManager.SetDecalEdgeFade(0.1f);
SetDecalOcclusion
public void SetDecalOcclusion(bool enable)
Activa o desactiva el culling por oclusión del decal (basado en el mapa de profundidad del proyector). Cuando está activado, las superficies ocluidas no quedan cubiertas por el decal.
| Parámetro | Tipo | Descripción |
|---|---|---|
enable | bool | Si se habilita el culling por oclusión del decal |
Notas:
- Solo plataforma PC / Mac, y solo pipeline URP.
SetDecalProjection()debería haberse llamado para configurar el proyector antes de habilitarlo.- Depende de los parámetros de calidad configurados por
SetDecalOcclusionSettings().
Ejemplo:
lccManager.SetDecalOcclusion(true);
SetDecalOcclusionSettings
public void SetDecalOcclusionSettings(DecalOcclusionSettings settings)
Establece todos los parámetros de calidad del culling por oclusión del decal a la vez. Consulta DecalOcclusionSettings.
| Parámetro | Tipo | Descripción |
|---|---|---|
settings | DecalOcclusionSettings | Parámetros de calidad del culling por oclusión |
Notas:
- Puede ajustarse en cualquier momento; los parámetros surten efecto inmediatamente.
Ejemplo:
lccManager.SetDecalOcclusionSettings(DecalOcclusionSettings.Default);
lccManager.SetDecalOcclusionSettings(new DecalOcclusionSettings {
opacityCutoff = 0.1f,
depthBias = 0.05f,
footprintMaxPx = 2,
resolution = 1024
});
Ajuste
La función de ajuste busca automáticamente bordes / esquinas cercanos para alinearse durante el raycasting, y se usa comúnmente para interacciones precisas como la medición y la anotación. Los siguientes métodos solo son compatibles con plataformas PC / Mac.
SetSnapEnabled
public void SetSnapEnabled(bool enable)
Activa o desactiva la función de ajuste. Cuando está activada, RaycastWithSnap() busca automáticamente bordes / esquinas cercanos a los que ajustarse.
| Parámetro | Tipo | Descripción |
|---|---|---|
enable | bool | Si se habilita el ajuste |
Notas:
- Desactivado por defecto.
- Sin efecto en móvil / VR, y se emite una advertencia.
Ejemplo:
lccManager.SetSnapEnabled(true);
SetSnapRadius
public void SetSnapRadius(float pixels)
Establece el radio de búsqueda del ajuste. Busca el borde / esquina más cercano dentro de este rango de píxeles.
| Parámetro | Tipo | Descripción |
|---|---|---|
pixels | float | Radio de búsqueda del ajuste (píxeles) |
Notas:
- Por defecto 20 píxeles.
- Un valor mayor significa un rango de búsqueda más amplio, pero puede ajustarse a objetivos no deseados.
Ejemplo:
lccManager.SetSnapRadius(30f);
SetEdgeThreshold
public void SetEdgeThreshold(float threshold)
Establece el umbral de detección de bordes. Un valor menor detecta más bordes.
| Parámetro | Tipo | Descripción |
|---|---|---|
threshold | float | Umbral de detección de bordes, rango recomendado [0.1, 0.8] |
Notas:
- Por defecto
0.3. - Un valor demasiado pequeño produce una gran cantidad de bordes ruidosos.
Ejemplo:
lccManager.SetEdgeThreshold(0.2f);
SetSnapPreviewEnabled
public void SetSnapPreviewEnabled(bool enable)
Activa o desactiva la función de previsualización de ajuste. Cuando está activada, el indicador del objetivo de ajuste más cercano se muestra en tiempo real a medida que se mueve el ratón.
| Parámetro | Tipo | Descripción |
|---|---|---|
enable | bool | Si se habilita la previsualización de ajuste |
Notas:
SetSnapEnabled(true)debe llamarse primero.- La previsualización consume continuamente recursos de GPU (detección cada fotograma).
Ejemplo:
lccManager.SetSnapPreviewEnabled(true);
UpdateSnapPreview
public void UpdateSnapPreview(Vector2 mousePos, Camera cam)
Actualiza el estado de la previsualización de ajuste. Se llama a medida que se mueve el ratón para actualizar la posición del indicador de previsualización.
| Parámetro | Tipo | Descripción |
|---|---|---|
mousePos | Vector2 | Coordenadas de pantalla actuales del ratón |
cam | Camera | Cámara |
Notas:
SetSnapPreviewEnabled(true)debe llamarse primero.- Se recomienda llamarla continuamente en
Update.
Ejemplo:
void Update()
{
lccManager.UpdateSnapPreview(Input.mousePosition, Camera.main);
}
GetSnapPreviewState
// Valor de retorno: SnapPreviewState
public SnapPreviewState GetSnapPreviewState()
Obtiene el estado actual de la previsualización de ajuste, incluido si hay un objetivo de ajuste, el tipo de objetivo, la posición en pantalla del objetivo y la distancia en píxeles al ratón. Consulta SnapPreviewState.
Notas:
SetSnapPreviewEnabled(true)yUpdateSnapPreview()deben llamarse primero.- Devuelve
default(SnapPreviewState)cuando no hay objetivo. screenPosestá en coordenadas de pantalla, no en coordenadas de mundo; usaRaycastWithSnap()para obtenerHitResult.hitPospara coordenadas de mundo.
Ejemplo:
var state = lccManager.GetSnapPreviewState();
if (state.hasTarget)
{
// state.snapType: Corner / Edge
// state.screenPos: coordenadas de pantalla del objetivo de ajuste
// state.distanceToMouse: distancia en píxeles
}
Raycasting y consultas de colisión
El raycasting se usa para seleccionar puntos en superficies 3DGS, y las consultas de colisión se usan para la interacción física entre personajes / objetos y la nube de puntos. El resultado del impacto se devuelve mediante HitResult.
Nota:
El campo de coordenadas de mundo del punto de impacto de
HitResultse llamahitPos(noposition).
Raycast (coordenadas de pantalla)
// Valor de retorno: bool, true=impacto
public bool Raycast(Vector3 mousePos, out HitResult _finalResult)
Emite un rayo desde coordenadas de pantalla para detectar impactos en la nube de puntos. El rayo se genera usando la cámara principal establecida por SetMainCamera().
| Parámetro | Tipo | Descripción |
|---|---|---|
mousePos | Vector3 | Coordenadas de pantalla |
_finalResult | out HitResult | Resultado del impacto |
Notas:
SetMainCamera()debe llamarse primero para establecer la cámara principal.- Devuelve el punto de impacto más cercano a la cámara.
- La precisión se ve afectada por
SetRaycastDelta(), y la distancia máxima se controla medianteSetMaxRaycastDistance().
Ejemplo:
if (lccManager.Raycast(Input.mousePosition, out HitResult hit))
{
Debug.Log(hit.hitPos);
}
Raycast (Ray)
// Valor de retorno: bool, true=impacto
public bool Raycast(Ray _ray, out HitResult _finalResult)
Realiza raycasting con un Ray personalizado, iterando sobre todos los Renderers activos y devolviendo el impacto más cercano.
| Parámetro | Tipo | Descripción |
|---|---|---|
_ray | Ray | Ray |
_finalResult | out HitResult | Resultado del impacto |
Ejemplo:
Ray ray = new Ray(origin, direction);
if (lccManager.Raycast(ray, out HitResult hit))
{
Debug.Log(hit.hitPos);
}
RaycastMesh (coordenadas de pantalla)
// Valor de retorno: bool, true=impacto
public bool RaycastMesh(Vector3 mousePos, out HitResult _finalResult, float _distance = 70.0f)
Emite un rayo desde coordenadas de pantalla para detectar impactos contra la malla de colisión de la nube de puntos. Usa datos Collider para la detección, lo que es más rápido que Raycast() pero menos preciso.
| Parámetro | Tipo | Descripción |
|---|---|---|
mousePos | Vector3 | Coordenadas de pantalla |
_finalResult | out HitResult | Resultado del impacto |
_distance | float | Distancia máxima de detección, por defecto 70.0 |
Notas:
- Los datos deben contener nodos Collider, y
Renderer.SetColliderEnable(true)debe llamarse primero.
Ejemplo:
if (lccManager.RaycastMesh(Input.mousePosition, out HitResult hit))
{
Debug.Log(hit.hitPos);
}
RaycastMesh (Ray + Bounds)
// Valor de retorno: bool, true=impacto
public bool RaycastMesh(Ray ray, out HitResult result, out Bounds hitBounds, float maxDist = 70.0f)
Realiza la detección de malla de colisión con un Ray personalizado, devolviendo también la caja delimitadora del nodo impactado.
| Parámetro | Tipo | Descripción |
|---|---|---|
ray | Ray | Ray |
result | out HitResult | Resultado del impacto |
hitBounds | out Bounds | Caja delimitadora del nodo impactado |
maxDist | float | Distancia máxima de detección, por defecto 70.0 |
Notas:
- Los datos deben contener nodos Collider.
Ejemplo:
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
if (lccManager.RaycastMesh(ray, out HitResult hit, out Bounds bounds))
{
Debug.Log(bounds.center);
}
RaycastWithSnap
// Valor de retorno: bool, true=impacto
public bool RaycastWithSnap(Vector2 screenPos, Camera cam, out HitResult result)
Raycasting con ajuste. Primero realiza un raycast normal y luego busca bordes / esquinas cerca del punto de impacto a los que ajustarse.
| Parámetro | Tipo | Descripción |
|---|---|---|
screenPos | Vector2 | Coordenadas de pantalla |
cam | Camera | Cámara |
result | out HitResult | Resultado del impacto (incluye información de ajuste) |
Notas:
SetSnapEnabled(true)debe llamarse primero.- Solo plataformas PC / Mac; no disponible en móvil / VR.
- Prioridad de ajuste: Corner > Edge > None.
HitResult.snapTypees el tipo de ajuste,HitResult.hitPoses la coordenada de mundo después del ajuste, yHitResult.originalHitPoses el punto de impacto original antes del ajuste.
Ejemplo:
if (lccManager.RaycastWithSnap(mousePos, cam, out HitResult hit))
{
// hit.snapType: Corner / Edge / None
// hit.hitPos: coordenada de mundo después del ajuste
// hit.originalHitPos: punto de impacto original antes del ajuste
}
SetRaycastDelta
public void SetRaycastDelta(float delta)
Establece el parámetro de precisión del raycasting. Un valor menor significa mayor precisión pero mayor consumo de rendimiento.
| Parámetro | Tipo | Descripción |
|---|---|---|
delta | float | Precisión del raycasting, rango [0.1, 10.0], se limita automáticamente cuando se supera |
Notas:
- Por defecto
0.1. - Afecta a la precisión de detección de todos los métodos
Raycast().
Ejemplo:
lccManager.SetRaycastDelta(0.5f);
SetMaxRaycastDistance
public void SetMaxRaycastDistance(float _distance)
Establece la distancia máxima de detección de los métodos Raycast().
| Parámetro | Tipo | Descripción |
|---|---|---|
_distance | float | Distancia máxima de raycast, rango [10, 10000], se limita automáticamente cuando se supera |
Notas:
- Afecta a las sobrecargas
Raycast(Vector3)/Raycast(Ray); no afecta aRaycastMesh()(que tiene su propio parámetro de distancia).
Ejemplo:
lccManager.SetMaxRaycastDistance(500f);
IntersectsSphere
// Valor de retorno: bool, true=interseca
public bool IntersectsSphere(Sphere sphere)
// Valor de retorno: bool, true=interseca
public bool IntersectsSphere(Sphere sphere, out Vector3 delta)
Detecta si una esfera interseca con el collider de la nube de puntos. La segunda sobrecarga devuelve además el vector de penetración, que puede usarse para la expulsión física.
| Parámetro | Tipo | Descripción |
|---|---|---|
sphere | Sphere | Esfera |
delta | out Vector3 | Vector de penetración (dirección y distancia de expulsión) |
Notas:
- Los datos deben contener nodos Collider, y
Renderer.SetColliderEnable(true)debe llamarse primero. - Itera sobre todos los Renderers activos.
Ejemplo:
var sphere = new Sphere(transform.position, 0.5f);
if (lccManager.IntersectsSphere(sphere, out Vector3 delta))
{
transform.position += delta;
}
IntersectsCapsule
// Valor de retorno: bool, true=interseca
public bool IntersectsCapsule(Capsule capsule)
// Valor de retorno: bool, true=interseca
public bool IntersectsCapsule(Capsule capsule, out Vector3 delta)
Detecta si una cápsula interseca con el collider de la nube de puntos, comúnmente usado para la detección de colisiones del controlador de personaje. La segunda sobrecarga devuelve el vector de penetración.
| Parámetro | Tipo | Descripción |
|---|---|---|
capsule | Capsule | Cápsula |
delta | out Vector3 | Vector de penetración |
Notas:
- Los datos deben contener nodos Collider, y
Renderer.SetColliderEnable(true)debe llamarse primero.
Ejemplo:
var capsule = new Capsule(footPos, headPos, 0.3f);
if (lccManager.IntersectsCapsule(capsule, out Vector3 delta))
{
characterController.Move(delta);
}
Efectos visuales
TriggerVFX
public void TriggerVFX(Vector3 vfxOriginW, int vfxid = 0)
Activa un efecto visual en la coordenada de mundo especificada, expandiéndose hacia afuera desde esa coordenada.
| Parámetro | Tipo | Descripción |
|---|---|---|
vfxOriginW | Vector3 | Origen en coordenadas de mundo del efecto |
vfxid | int | ID del efecto, por defecto 0 |
Notas:
- Debe llamarse después de que la escena LCC termine de cargarse.
Ejemplo:
lccManager.TriggerVFX(hitPoint, 0);
Consultas de instancias
GetAllRenderers
// Valor de retorno: List<Renderer>, una copia de todas las instancias Renderer registradas
public List<Renderer> GetAllRenderers()
Obtiene la lista de todas las instancias Renderer registradas actualmente (devuelve una copia).
Ejemplo:
var renderers = lccManager.GetAllRenderers();
foreach (var r in renderers) { /* ... */ }