3DGS mit einem LixelStudio-Mesh neu beleuchten
Das Plugin unterstützt hybride Neubeleuchtung: Kombiniere 3DGS mit einem Mesh gleicher Skalierung, damit das 3DGS eine Lichtreaktion nahe an der eines Meshes erhält und Eigenschatten werfen kann.
Das Ergebnis hängt von der geometrischen Genauigkeit des Meshes unter dem 3DGS ab. Je besser Mesh und 3DGS zueinander passen, desto überzeugender fallen Lichtreaktion und Schatten aus.
Zum Prinzip und zu den Parametern siehe Proxy Mesh, zur Wahl des Normalenmodus siehe Normalen und Beleuchtung.
Welches Mesh verwenden
LCC Studio und LixelStudio erzeugen beide Meshes, verfolgen aber unterschiedliche Zwecke.
| LCC Studio Mesh | LixelStudio Mesh | |
|---|---|---|
| Oberflächengenauigkeit | Gröber | Näher an der echten Form |
| Dateigröße | Klein | Groß |
| Geeignet für | Kollisionserkennung | Neubeleuchtung |
Für Kollision reicht das LCC Studio Mesh, siehe Kollision. Für die Neubeleuchtung nimm das LixelStudio Mesh.
LCC Studio Mesh:


LixelStudio Mesh:


Schritt 1: Die gekachelten Modelle in einem Ordner sammeln
LixelStudio exportiert Meshes in Kacheln. Bei einer großen Szene entstehen viele Ordner, jeder mit einer .obj-Datei und den zugehörigen Texturen. Vor dem Import müssen sie zu einem Mesh zusammengeführt werden, sonst bekommst du viele einzelne .obj-Dateien.
Die Schritte unten nutzen Blender, jedes andere 3D-Werkzeug funktioniert genauso. Blender gibt es auf der offiziellen Seite.
Blender kann keinen Stapel Ordner auf einmal aufnehmen, also müssen die über die Unterordner verteilten .obj-Dateien zuerst auf dieselbe Ebene geholt werden. Dutzende Ordner per Hand zu ziehen ist unpraktisch, deshalb ein einzelner PowerShell-Befehl.
Öffne den Wurzelordner mit allen Unterordnern, tippe powershell in die Adressleiste und drücke Enter. Das Terminal öffnet sich im aktuellen Verzeichnis.

powershell in die Adressleiste des Explorers eingeben
Kopiere diesen Befehl und füge ihn ein:
Get-ChildItem -Recurse -File | Move-Item -Destination .
Hinweis: Der Befehl holt jede Datei aus den Unterordnern in das aktuelle Verzeichnis. Prüfe vor dem Ausführen, dass du im richtigen Ordner bist. Enthält Ordner A etwa B und C, öffne PowerShell aus der Adressleiste von A; nach dem Lauf liegen alle Dateien aus B und C in A.

Ordnerstruktur vor dem Lauf

Befehl einfügen und ausführen
Drücke nach dem Einfügen Enter. Es dauert einige Sekunden. Eine neue Eingabeaufforderung zeigt, dass der Befehl durchgelaufen ist.
Jetzt liegt alles offen. Öffne einige Unterordner und prüfe, dass sie leer sind.

Alle .obj-Dateien und Texturen liegen nun auf derselben Ebene
Schritt 2: In Blender zu einer Datei zusammenführen
Drücke Ctrl + A, um alle Dateien auszuwählen, und zieh sie in Blender.

Alle Dateien auswählen

In Blender ziehen
Klicke auf Import Wavefront OBJ. Für die richtige Ausrichtung setze Up Axis auf Z und Forward Axis auf X.

Up Axis auf Z und Forward Axis auf X setzen
Nun sind alle Kacheln importiert.

Alle Kacheln importiert
Drücke A, um alle Kacheln auszuwählen, dann Ctrl + J, um sie zu einem Mesh zusammenzuführen. Bei einer großen Szene dauert das etwa eine Minute, lass es durchlaufen.

Ein einzelnes zusammengeführtes Mesh
Hinweis: Wenn nicht die ganze Szene neu beleuchtet werden muss, lösche die nicht benötigten Teile. Das bringt Performance in Unreal Engine.
Schritt 3: Draw Calls senken
Sobald dieses Mesh zur Neubeleuchtung in Unreal Engine landet, sind keine seiner Materialien mehr nötig. Das 3DGS liefert das Bild, das Proxy Mesh dient nur der Berechnung, die Materialien haben keinen Nutzen und kosten Ressourcen.
Jede Textur in einem LixelStudio-Mesh ist in Unreal Engine ein Draw Call. In größerem Maßstab summiert sich das zu sehr vielen Draw Calls, und das Mesh direkt als Proxy zu nutzen ruckelt.
Wähle das Mesh in der Collection aus und prüfe die Anzahl der Draw Calls über die Python-Konsole von Blender.

Zur Python-Konsole wechseln
Füge den folgenden Befehl ein und drücke Enter:
obj = bpy.context.object
print("Material slots:", len(obj.data.materials))

Der ausgegebene Wert ist die Anzahl der Draw Calls
Das Mesh im Screenshot hat 8859 Draw Calls.
Um das zu senken, entferne alle vorhandenen Materialien und ersetze sie durch ein einziges:
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)))
Prüfe danach, dass die Anzahl der Draw Calls auf eins gesunken ist.

Draw Calls auf eins reduziert
Schritt 4: In Unreal Engine importieren
Exportiere das Mesh als .obj oder .fbx und importiere es in Unreal Engine.

Das Mesh nach dem Import in Unreal Engine
Folge dann Proxy Mesh, um den ProxyMesh Actor zu platzieren und den Normalenmodus auf ProxyMesh zu setzen.
Wenn das Ergebnis nicht passt, siehe Fehlerbehebung zum Proxy Mesh.