- Bake BaseColor/Normal/Roughness/AO als PNG - Nahtlos tileable via 4D-Torus-Projektion der UV (cos/sin u,v) - Cycles-Bake mit Zustands-Restore, temporaere Bake-Plane + Cleanup - docs/UE_Material_Triplanar.md: WorldAlignedTexture/Normal-Verdrahtung - _deselect_all gegen transiente None-Refs nach Objekt-Removal gehaertet - Live gegen Blender 5.1.2 getestet (4 Maps, Normal jetzt mit Struktur), Headless gruen Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
3.9 KiB
Unreal-Material: Stylized Rock (Triplanar / World-Aligned)
Ziel: ein Material fuer alle Rocks. Dank Triplanar (world-aligned) wird die Textur nach Weltposition projiziert – unabhaengig von den UVs jedes einzelnen Steins. Du musst also nichts pro Rock texturieren.
Die vier Maps kommen aus dem Addon (Panel Rock Gen → Textur-Bake):
| Datei | Inhalt | UE sRGB | Compression |
|---|---|---|---|
*_BC.png |
BaseColor | an | Default (BC7/DXT1) |
*_N.png |
Normal | aus | Normalmap |
*_R.png |
Roughness | aus | Default/Masks |
*_AO.png |
AO / Cavity | aus | Default/Masks |
Die Normal Map ist OpenGL (+Y). In UE beim Import „Flip Green Channel" aktivieren (oder gruen einmalig invertieren), sonst wirkt das Relief eingedellt.
1. Texturen importieren
- Die vier PNGs in den Content Browser ziehen.
- Fuer
_N: Compression = Normalmap, sRGB aus, Flip Green Channel an. - Fuer
_Rund_AO: sRGB aus (lineare Daten), Compression „Masks" ist ok. _BC: sRGB an (Standard).
(Optional, spart Samples: _AO, _R und ggf. Metallic in eine „ORM"-Textur
packen – R=AO, G=Roughness, B=Metallic. Dann unten die einzelnen Sampler durch
einen ORM-Sampler + Component-Mask ersetzen.)
2. Material anlegen
Neues Material M_Rock_Stylized, Two Sided aus, Shading Model Default Lit.
Parameter (fuer Instanzen)
- ScalarParameter
WorldSize(Default256) → Weltgroesse einer Kachel in cm. Kleiner = Textur wirkt groesser/detaillierter. - (optional) ScalarParameter
NormalIntensity(Default1.0).
BaseColor / Roughness / AO (World Aligned Texture)
Fuer jede der drei Maps einen WorldAlignedTexture-Node:
TextureObject(T_..._BC) ─┐
WorldSize (Scalar) ──────► WorldAlignedTexture ─► XYZTexture ─► BaseColor
WorldAlignedTexture→ Eingang TextureObject = die jeweilige Textur (als TextureObject-Node, nicht TextureSample).- Eingang WorldSize =
WorldSize-Parameter. - Ausgang XYZTexture verbinden:
T_..._BC→ Base ColorT_..._R→ RoughnessT_..._AO→ Ambient Occlusion
Normal (World Aligned Normal)
Normalen brauchen den speziellen Node WorldAlignedNormal:
TextureObject(T_..._N) ─► WorldAlignedNormal ─► XYZNormal ─► (FlattenNormal / Normal)
WorldSize ─────────────►
- Ausgang XYZTexture (Normal) → Normal.
- Intensitaet optional ueber
FlattenNormal(Flatness =1 - NormalIntensity) oder einen Multiply auf den XY-Anteil.
WorldAlignedTexture/WorldAlignedNormalhaben einen Haken „Use World Space Normal to Blend" bzw. eineWorldSpaceNormal-Eingabe – Default passt fuer Rocks. Der Node blendet automatisch die drei Projektions- achsen (Triplanar).
3. Feinschliff (optional)
- Farbvariation pro Instanz: BaseColor mit
PerInstanceRandom* einer leichten Tint-Range multiplizieren → jeder Rock leicht anders, gleiche Textur. - Nahtlos in der Hoehe: Da die Bake-Textur bereits nahtlos tilet, entstehen bei Triplanar keine sichtbaren Kanten.
- LODs: Beim FBX-Import „Import LODs" an – das Material gilt automatisch fuer alle LOD-Stufen.
- Lightmaps: Der UV1-Kanal (Lightmap) aus dem Addon wird von UE fuer statische Beleuchtung genutzt; das Triplanar-Material nutzt ihn nicht, das ist korrekt so.
Kurzfassung der Verdrahtung
WorldSize(Scalar)
├─► WorldAlignedTexture(BC) ─► XYZTexture ─► BaseColor
├─► WorldAlignedTexture(R) ─► XYZTexture ─► Roughness
├─► WorldAlignedTexture(AO) ─► XYZTexture ─► Ambient Occlusion
└─► WorldAlignedNormal(N) ─► XYZNormal ─► Normal
Ein Material, liegt auf jedem Rock. Fertig.