Rééclairer un 3DGS avec un maillage LixelStudio
Le plugin prend en charge le rééclairage hybride : combinez le 3DGS avec un maillage à la même échelle pour que le 3DGS obtienne une réponse à l'éclairage proche de celle d'un maillage, tout en produisant son propre auto-ombrage.
Le résultat dépend de la précision géométrique du maillage placé sous le 3DGS. Mieux le maillage et le 3DGS concordent, plus la réponse à l'éclairage et les ombres sont réalistes.
Pour le principe et les paramètres, voir Maillage proxy ; pour le choix du mode de normales, voir Normales et éclairage.
Quel maillage choisir
LCC Studio et LixelStudio génèrent tous deux des maillages, mais pour des usages différents.
| Maillage LCC Studio | Maillage LixelStudio | |
|---|---|---|
| Précision de surface | Plus grossière | Plus proche de la forme réelle |
| Taille de fichier | Petite | Grande |
| Adapté à | Détection de collision | Rééclairage |
Pour la collision, le maillage LCC Studio suffit, voir Collision. Pour le rééclairage, prenez le maillage LixelStudio.
Maillage LCC Studio :


Maillage LixelStudio :


Étape 1 : rassembler les modèles en tuiles dans un seul dossier
LixelStudio exporte les maillages en tuiles. Sur une grande scène, cela donne de nombreux dossiers, chacun contenant un fichier .obj et ses textures. Avant l'import dans Unreal Engine, il faut les fusionner en un seul maillage, sinon vous obtenez une multitude de .obj indépendants.
Les étapes ci-dessous utilisent Blender, tout autre logiciel 3D fonctionne de la même façon. Blender se télécharge depuis le site officiel.
Blender n'accepte pas un lot de dossiers d'un seul coup : il faut d'abord remonter au même niveau les .obj dispersés dans les sous-dossiers. Faire glisser des dizaines de dossiers à la main est irréaliste, une seule commande PowerShell règle le problème.
Ouvrez le dossier racine qui contient tous les sous-dossiers, saisissez powershell dans la barre d'adresse et appuyez sur Enter. Le terminal s'ouvre dans le répertoire courant.

Saisie de powershell dans la barre d'adresse de l'explorateur
Copiez et collez la commande suivante :
Get-ChildItem -Recurse -File | Move-Item -Destination .
Note : la commande remonte tous les fichiers des sous-dossiers dans le répertoire courant. Vérifiez avant l'exécution que vous êtes dans le bon dossier. Si le dossier A contient B et C, ouvrez PowerShell depuis la barre d'adresse de A ; après l'exécution, tous les fichiers de B et C se trouvent dans A.

Structure des dossiers avant l'exécution

Collage puis exécution de la commande
Après le collage, appuyez sur Enter. Cela prend quelques secondes. Une nouvelle invite indique que la commande est terminée.
Tout est maintenant remonté à plat. Ouvrez quelques sous-dossiers et vérifiez qu'ils sont vides.

Tous les fichiers .obj et les textures sont désormais au même niveau
Étape 2 : fusionner en un seul fichier dans Blender
Appuyez sur Ctrl + A pour sélectionner tous les fichiers, puis faites-les glisser dans Blender.

Sélection de tous les fichiers

Glissement dans Blender
Cliquez sur Import Wavefront OBJ pour importer. Pour garantir la bonne orientation, réglez Up Axis sur Z et Forward Axis sur X.

Up Axis réglé sur Z et Forward Axis sur X
Toutes les tuiles sont maintenant importées.

Toutes les tuiles sont importées
Appuyez sur A pour sélectionner toutes les tuiles, puis sur Ctrl + J pour les fusionner en un seul maillage. Sur une grande scène, comptez environ une minute, laissez l'opération se terminer.

Un seul maillage après fusion
Note : quand la scène entière n'a pas besoin d'être rééclairée, supprimez les parties inutiles. Cela améliore les performances dans Unreal Engine.
Étape 3 : réduire les appels de rendu
Dès que ce maillage arrive dans Unreal Engine pour le rééclairage, aucun de ses matériaux n'est utile. Le 3DGS fournit l'image, le maillage proxy ne sert qu'au calcul : ses matériaux ne servent à rien et consomment des ressources.
Chaque texture d'un maillage LixelStudio est un appel de rendu dans Unreal Engine. À grande échelle, cela produit un très grand nombre d'appels de rendu, et utiliser le maillage tel quel comme proxy provoque des saccades.
Sélectionnez le maillage dans la Collection et vérifiez le nombre d'appels de rendu avec la console Python de Blender.

Passage à la console Python
Collez la commande suivante et appuyez sur Enter :
obj = bpy.context.object
print("Material slots:", len(obj.data.materials))

La valeur affichée correspond au nombre d'appels de rendu
Le maillage de la capture compte 8859 appels de rendu.
Pour faire baisser ce nombre, supprimez tous les matériaux existants et remplacez-les par un seul :
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)))
Vérifiez ensuite que le nombre d'appels de rendu est bien descendu à un.

Appels de rendu réduits à un
Étape 4 : importer dans Unreal Engine
Exportez le maillage en .obj ou .fbx, puis importez-le dans Unreal Engine.

Le maillage après import dans Unreal Engine
Suivez ensuite Maillage proxy pour placer l'Actor ProxyMesh et régler le mode de normales sur ProxyMesh.
Si le résultat n'est pas correct, voir Dépannage du maillage proxy.