Reiluminar 3DGS con una malla de LixelStudio
El plugin admite reiluminación híbrida: combina el 3DGS con una malla de la misma escala para que el 3DGS reciba una respuesta de luz cercana a la de una malla y pueda proyectar autosombras.
El resultado depende de la precisión geométrica de la malla situada bajo el 3DGS. Cuanto mejor se alineen malla y 3DGS, más creíbles serán la respuesta de luz y las sombras.
Para el mecanismo y los parámetros, consulta Malla proxy. Para elegir entre modos de normales, consulta Normales e iluminación.
Qué malla usar
LCC Studio y LixelStudio generan mallas, pero con propósitos distintos.
| Malla de LCC Studio | Malla de LixelStudio | |
|---|---|---|
| Precisión de superficie | Más tosca | Más fiel a la forma real |
| Tamaño de archivo | Pequeño | Grande |
| Adecuada para | Detección de colisión | Reiluminación |
Para colisión basta la malla de LCC Studio, consulta Colisión. Para reiluminar usa la malla de LixelStudio.
Malla de LCC Studio:


Malla de LixelStudio:


Paso 1: reunir los modelos en mosaicos en una carpeta
LixelStudio exporta las mallas en mosaicos. En una escena grande acabas con muchas carpetas, cada una con un archivo .obj y sus texturas. Hay que combinarlas en una sola malla antes de importar, si no obtendrás muchos .obj independientes.
Los pasos siguientes usan Blender; cualquier herramienta 3D funciona igual. Descarga Blender desde el sitio oficial.
Blender no admite arrastrar un lote de carpetas de una vez, así que primero hay que subir al mismo nivel los .obj repartidos por las subcarpetas. Arrastrar decenas de carpetas a mano no es práctico, así que usa un único comando de PowerShell.
Abre la carpeta raíz que contiene todas las subcarpetas, escribe powershell en la barra de direcciones y pulsa Enter. La terminal se abre en el directorio actual.

Escribe powershell en la barra de direcciones del explorador
Copia y pega este comando:
Get-ChildItem -Recurse -File | Move-Item -Destination .
Nota: el comando mueve todos los archivos de las subcarpetas al directorio actual, así que confirma que estás en la carpeta correcta antes de ejecutarlo. Por ejemplo, si la carpeta A contiene B y C, abre PowerShell desde la barra de direcciones de A; al terminar, todos los archivos de B y C quedan en A.

Estructura de carpetas antes de ejecutar

Pega el comando y ejecútalo
Pulsa Enter tras pegarlo. Tarda unos segundos. Cuando aparece un nuevo símbolo del sistema, el comando ha terminado.
Ya está todo extraído. Abre algunas subcarpetas para confirmar que están vacías.

Todos los .obj y las texturas están ahora en el mismo nivel
Paso 2: combinar en un solo archivo en Blender
Pulsa Ctrl + A para seleccionar todos los archivos y arrástralos a Blender.

Selecciona todos los archivos

Arrastra a Blender
Haz clic en Import Wavefront OBJ. Para que la orientación sea correcta, pon Up Axis en Z y Forward Axis en X.

Pon Up Axis en Z y Forward Axis en X
Ya están importados todos los mosaicos.

Todos los mosaicos importados
Pulsa A para seleccionar todos los mosaicos y Ctrl + J para combinarlos en una sola malla. En una escena grande puede tardar cerca de un minuto, deja que termine.

Una sola malla combinada
Nota: si no hace falta reiluminar toda la escena, borra las partes que no necesites para ganar rendimiento en Unreal Engine.
Paso 3: reducir las llamadas de dibujo
Cuando esta malla entra en Unreal Engine para reiluminar, ninguno de sus materiales es necesario. El 3DGS se encarga de lo que se ve y la malla proxy solo alimenta el cálculo, así que los materiales no aportan nada y consumen recursos.
Cada textura de una malla de LixelStudio es una llamada de dibujo en Unreal Engine. A gran escala eso suma muchísimas llamadas, y usar la malla directamente como proxy provoca tirones.
Selecciona la malla en la Collection y consulta el número de llamadas de dibujo desde la consola de Python de Blender.

Cambia a la consola de Python
Pega el comando siguiente y pulsa Enter:
obj = bpy.context.object
print("Material slots:", len(obj.data.materials))

El valor impreso es el número de llamadas de dibujo
La malla de la captura tiene 8859 llamadas de dibujo.
Para bajarlo, elimina todos los materiales existentes y sustitúyelos por uno solo:
import bpy
# Get the currently selected object in Blender
obj = bpy.context.object
# Make sure a valid Mesh object is selected
if obj is None or obj.type != "MESH":
raise Exception("Please select a Mesh object first.")
# Create a new white clay material
mat = bpy.data.materials.new("M_White_Clay")
mat.use_nodes = True
# Configure the Principled BSDF shader settings
bsdf = mat.node_tree.nodes.get("Principled BSDF")
if bsdf:
bsdf.inputs["Base Color"].default_value = (1, 1, 1, 1) # White color
bsdf.inputs["Roughness"].default_value = 1.0 # Fully rough / matte surface
bsdf.inputs["Metallic"].default_value = 0.0 # Non-metallic material
bsdf.inputs["Alpha"].default_value = 1.0 # Fully opaque
# Remove all existing material slots from the mesh
obj.data.materials.clear()
# Add the single new white material
obj.data.materials.append(mat)
# Assign every face to material slot 0
for poly in obj.data.polygons:
poly.material_index = 0
# Print the result for verification
print("Done")
print("Material slots:", len(obj.data.materials))
print("Used material indices:", len(set(p.material_index for p in obj.data.polygons)))
print("Estimated draw calls:", len(set(p.material_index for p in obj.data.polygons)))
Después de ejecutarlo, confirma que el número de llamadas de dibujo ha bajado a una.

Llamadas de dibujo reducidas a una
Paso 4: importar en Unreal Engine
Exporta la malla como .obj o .fbx e impórtala en Unreal Engine.

La malla después de importarla en Unreal Engine
A continuación sigue Malla proxy para colocar el ProxyMesh Actor y poner el modo de normales en ProxyMesh.
Si el resultado no es el esperado, consulta Resolución de problemas de la malla proxy.