Ein UV-Kanal ist ein Datensatz innerhalb eines Statisches Mesh, der die einzelnen Scheitelpunkte des Mesh zu Koordinaten im 2D-Raum mappt. Diese Mappings definieren, wie 2D-Textur-Maps beim Rendering des Mesh um die 3D-Geometrie gewickelt werden.
Normalerweise erstellen und verwalten Sie Ihre UV-Mappings in einem speziellen Modellierungswerkzeug – demselben Werkzeug, das Sie zum Erstellen der Geometrie Ihres Statisches Mesh verwenden. Allerdings bietet der Editor einige Möglichkeiten für die Arbeit mit den UV-Kanälen Ihrer Modelle, die unten auf dieser Seite erläutert werden.
UV-Kanäle haben in der Engine zwei Hauptanwendungen:
-
Textur-Koordinaten in Materialien: Wenn Sie ein Material erstellen, das eine Textur-Map abtastet und sie auf die Oberfläche eines Statisches Mesh anwendet, können Sie einen Texturkoordinatenknoten (oder Texcoord) verwenden, um einen UV-Kanal anzugeben. Das Material verwendet das Mapping zwischen 2D-Koordinaten und 3D-Scheitelpunktpositionen im ausgewählten UV-Kanal, um zu bestimmen, welche Bereiche der Textur zum Schattieren welcher Dreiecke im 3D-Modell verwendet werden sollen.
Beispiel: UV-Kanal 0 in diesem einfachen ebenen Statisches Mesh (oben rechts im folgenden Bild dargestellt) zeigt die einfachste Möglichkeit, die beiden Dreiecke des Mesh (A und B) in den Texturraum abzubilden. Wenn Sie diesen UV-Kanal verwenden (festgelegt durch die Eigenschaft Coordinate Index des Knotens TexCoord), wendet das Material die volle Breite und Höhe einer Textur auf die Ebene an.
Bild für Großansicht anklicken.
Andererseits zeigt das Bild unten UV-Kanal 1, der das Mapping zwischen den Dreiecken und dem UV-Texturraum dreht und verzerrt. Wenn dieselbe Bildtextur auf das Statisches Mesh angewendet wird, ändert sich, welche Teile der Textur auf welche Teile des Statisches Mesh angewendet werden.
Bild für Großansicht anklicken.
Dreiecke im UV-Mapping können sich überlappen. Eine Überlappung bedeutet nur, dass derselbe Teil der Textur auf mehrere Teile Ihrer 3D-Statisches Mesh-Geometrie angewendet wird.
Das U in „UV-Kanal“ bezieht sich auf die horizontale Achse der Textur. Das V bezieht sich auf die vertikale Achse. Textur-Koordinaten liegen normalerweise zwischen 0 und 1, wobei (0,0) die untere linke Ecke der Textur und (1,1) die obere rechte Ecke repräsentiert. Dies ist jedoch nicht immer der Fall. Wenn ein U- oder V- Wert 1 übersteigt oder unter 0 liegt, „wickelt“ das Material standardmäßig auf die andere Seite der Textur ab. Zum Beispiel wird ein V-Wert von 1,25 normalerweise als 0,25 behandelt. Allerdings können Sie diese Werte auch in Ihrem Material festlegen und so auf einen Wert von 0 und einen Wert von 1 begrenzen.
-
Light-Maps: UV -Kanäle werden auch verwendet, um Light-Maps zu speichern und anzuwenden. Eine Light-Map ist eine spezielle Art von Textur, die vorberechnete Beleuchtungsinformationen für Statisches Meshs speichert. Wenn Sie in Ihrem Level Lichter haben, deren Mobilitätseinstellung auf „Stationary“ oder „Static“ festgelegt ist, und Sie die Beleuchtung für Ihr Level erstellen, speichert das Lightmass-Werkzeug die indirekte Beleuchtung (und die direkte Beleuchtung für statische Lichtquellen) in Light-Map-Texturen und verwendet dabei einen UV-Kanal, um das Mapping zwischen der 3D-Geometrie des Statisches Mesh und dem 2D-Texturraum zu bestimmen.
UV-Kanäle, die für Light-Maps verwendet werden, müssen einigen speziellen Regeln folgen. Da jeder Teil eines Objekts normalerweise eine unterschiedliche Beleuchtung erhält, können sich im 2D-Texturraum keine zwei Dreiecke im Mesh überlappen. Jedes Dreieck muss seinen eigenen Bereich in der Textur abdecken. Außerdem müssen alle UV-Koordinatenwerte zwischen 0 und 1 liegen. Light-Map Texturen können nicht auf die gleiche Weise wie reguläre Textur-Mappings „eingewickelt“ werden. Aus diesen Gründen werden Light-Map-UVs in der Regel aus einfacheren UV-Mappings generiert oder gepackt.
Beispielsweise bildet der UV-Kanal des Textur-Mapping dieser Säule die Geometrie jeder der vier Seiten auf dieselben überlappenden Bereiche der Textur ab. Wenn Sie diesen UV-Kanal verwenden, um eine Textur auf die Geometrie anzuwenden, verwendet jede Seite dieselben Teile der Textur.
Bild für Großansicht anklicken.
Allerdings muss in der Light-Map-UV des Objekts jede Seite ihren eigenen eindeutigen Bereich im 2D-Raum abdecken:
Bild für Großansicht anklicken.
Weitere Informationen zu Light-Map-UVs und deren Erstellung finden Sie unter Light-Mapping in Unreal Engine verstehen und Light-Map-UVs generieren.
Jedes Statisches Mesh in der Engine kann bis zu sieben verschiedene UV-Kanäle haben, sodass Sie mehrere verschiedene Möglichkeiten zum Umwickeln von Texturen für unterschiedliche Materialien (oder für unterschiedliche Textur-Sampling-Knoten innerhalb eines einzelnen Materials) einrichten können.
UV-Kanäle im Statisches-Mesh-Editor
In der Benutzeroberfläche des Statisches-Mesh-Editor können Sie UV-Kanäle auflisten, visualisieren und entfernen.
UV-Kanäle auflisten
Wenn Sie ein beliebiges Statisches-Mesh-Asset im Statisches-Mesh-Editor geöffnet haben, können Sie mit der Schaltfläche UV in der Werkzeugleiste alle vom aktuellen Statisches Mesh verwendeten UV-Kanäle auflisten.
Bild für Großansicht anklicken.
Visualisieren eines UV-Kanals
Wählen Sie einen UV-Kanal in der Liste aus, um das Mapping der Mesh-Dreiecke im 2D-Textur-Raum als Overlay im Viewport zu visualisieren:
Bild für Großansicht anklicken.
Wählen Sie None oben in der Liste aus, um das UV-Overlay auszublenden.
Einen UV-Kanal entfernen
Wenn Sie einen Kanal in der Liste ausgewählt haben, können Sie ihn entfernen. Jeder UV-Kanal speichert Textur-Koordinaten für jeden Scheitelpunkt als Teil des Statisches Mesh. Sie können also Laufzeit-Speicher sparen, indem Sie ungenutzte Mappings entfernen.
Bild für Großansicht anklicken.
Bild für Großansicht anklicken.
Alle anderen UV-Kanäle, die nach dem gelöschten Kanal in der Liste vorhanden waren, rücken um eine Position nach oben, um den durch den entfernten Kanal entstandenen leeren Platz zu füllen.
Bild für Großansicht anklicken.
Sie können keinen UV-Kanal löschen, wenn Ihr Statisches-Mesh-Asset für die Generierung von Lightmap-UVs eingerichtet ist und der von Ihnen ausgewählte UV-Kanal bereits als Quell- oder Ziel-Kanal für Lightmap-UVs verwendet wird. Deaktivieren Sie entweder die Option Build Settings > Generate Lightmap UVs, oder ändern Sie die Einstellungen Build Settings > Source Lightmap Index und Build Settings > Destination Lightmap Index, sodass sie auf andere UV-Kanäle verweisen.
UV-Mappings erstellen
Wenn ein Material Texturen als Quelldaten für seine Kanäle verwendet (wie Basisfarbe, Normal-Map, Rauheit und so weiter), nutzt es typischerweise das UV-Mapping des Modells, um zu bestimmen, welche Teile dieser Texturen auf welche Teile der Geometrie projiziert werden. Wenn ein Modell keine UV-Mappings hat oder diese schlecht angelegt sind, werden Sie daher oft sichtbare Probleme feststellen, wenn Sie versuchen, ein texturiertes Material zu verwenden. Wenn das UV-Mapping zum Beispiel viele Nähte aufweist – Stellen, an denen Dreiecke, die in der Mesh-Geometrie benachbart sind, im UV-Mapping nicht benachbart sind – wird die Textur an diesen Nähten eine sichtbare Verbindungsstelle aufweisen. Oder wenn Ihr UV-Mapping Bereiche des UV-Raums ungleichmäßig den Dreiecken des Meshs zuweist – sodass große Dreiecke auf dem Mesh auf kleine Bereiche der Textur abgebildet werden oder umgekehrt – wird die Textur auf verschiedenen Teilen des Meshs gestreckt oder verzerrt aussehen.
Für beste künstlerische Ergebnisse sollten Sie die UV-Mappings für Ihre 3D-Objekte immer in einem eigenen Modellierungswerkzeug erstellen. Dies ist jedoch nicht immer möglich. Wenn Sie zum Beispiel Daten aus bestimmten CAD-Modellierungsanwendungen in die Unreal Engine importieren, gibt es möglicherweise keine Möglichkeit, in Ihrer Quellanwendung ein hochwertiges UV-Mapping zu erstellen. Für diese Fälle können Sie UV-Mappings im Unreal Editor erstellen.
Der Unreal Editor bietet zwei Möglichkeiten, UV-Mappings für ein Statisches Mesh zu erstellen:
Projekteinrichtung: Um eine der unten beschriebenen UV-Kanal-Generierungsmethoden nutzen zu können, müssen Sie das UV Editor-Plugin für Ihr Unreal-Engine-Projekt installieren.
Bild für Großansicht anklicken.
Option 1: Auspacken der Mesh-Geometrie
Bei diesem Ansatz werden die Dreiecke, aus denen Ihre Statisches-Mesh-Geometrie besteht, automatisch ausgepackt und abgeflacht. Die Oberfläche der Dreiecke wird automatisch angepasst, um die Nachbarschaft angrenzender Dreiecke zu erhalten, und Nähte werden überall dort eingefügt, wo der Winkel zwischen angrenzenden Oberflächen einen von Ihnen festgelegten Schwellenwert überschreitet.
So packen Sie ein Statisches Mesh in ein neues UV-Mapping aus:
-
Wählen Sie das Statische Mesh aus, das Sie auspacken möchten, und führen Sie einen der folgenden Schritte aus:
-
Klicken Sie mit der rechten Maustaste im Inhaltsbrowser auf Ihr Statisches Mesh und wählen Sie Unwrap UV aus dem Kontextmenü.
Bild für Großansicht anklicken.
-
Öffnen Sie das Statische Mesh, das Sie generieren möchten, im Statisches-Mesh-Editor. Wählen Sie dann in der Werkzeugleiste des Statisches-Mesh-Editors UV > Unwrap UVs.
Bild für Großansicht anklicken.
Wenn Sie keine der beiden Menüoptionen sehen, stellen Sie sicher, dass Sie das Polygon Editing-Plugin für Ihr Projekt aktiviert haben.
-
-
Legen Sie die Parameter fest, um die Ergebnisse des Auspackens zu steuern:
Bild für Großansicht anklicken.
Einstellung Beschreibung Channel Selection Bestimmt, wie der Auspackprozess auswählt, in welchen Kanal das neue UV-Mapping gespeichert wird.
- Automatic Lightmap Setup: Speichert das ausgepackte UV-Mapping in dem Kanal, der für dieses Statische Mesh als Quelle für Lightmap-UVs festgelegt ist, und generiert dann neue Lightmap-UVs aus dem neuen UV-Mapping.
- First Empty Channel: Speichert das ausgepackte UV-Mapping im ersten leeren UV-Kanal des Statischen Meshs.
- Specify Channel: Wählen Sie diese Option, um einen Kanalindex in der Einstellung UVChannel festzulegen.Index
UVChannel Wenn Channel Selection auf Specify Channel gesetzt ist, verwenden Sie diese Einstellung, um den Index des UV-Kanals festzulegen, in dem die ausgepackte UV gespeichert wird. Angle Threshold Bestimmt den maximalen Winkel zwischen zwei benachbarten Flächen, damit diese Flächen nach dem Auspacken verbunden bleiben. Das Erhöhen dieses Wertes minimiert die Anzahl der separaten UV-„Inseln“, indem mehr Dreiecke mit ihren Nachbarn verbunden bleiben und die Anzahl der Nähte reduziert wird, die zu Brüchen im Textur-Mapping führen können. Dies kann jedoch auch zu mehr Verzerrung in den gepackten Texturen führen, da Dreiecke im 2D-Raum möglicherweise aggressiver in ihrer Größe angepasst werden müssen, um mit ihren Nachbarn verbunden zu bleiben. -
Klicken Sie auf Proceed.
Option 2: Projektion der Mesh-Geometrie in einen UV-Kanal
Sie können die 3D-Geometrie Ihres Statischen Meshs mithilfe eines Projektionsvolumens in den 2D-Texturraum projizieren: eine Ebene, Box oder Kugel. Bei diesem Ansatz wird jede Fläche Ihres Statischen Meshs nach außen auf die Flächen des Projektionsvolumens projiziert, dann wird das Projektionsvolumen in den 2D-Texturraum ausgepackt.
-
Öffnen Sie das Statische Mesh, das Sie generieren möchten, im Statisches-Mesh-Editor.
Doppelklicken Sie zum Beispiel auf das Statisches-Mesh-Asset im Inhaltsbrowser.
-
Wählen Sie in der Werkzeugleiste des Statisches-Mesh-Editors die Option UV > Generate UVs.
Wenn Sie diese Menüoption nicht sehen, stellen Sie sicher, dass Sie das Polygon Editing-Plugin für Ihr Projekt aktiviert haben.
-
Das Generate UV-Panel erscheint und bietet Ihnen eine Reihe von Steuerelementen, mit denen Sie die Ergebnisse der UV-Projektion kontrollieren können.
Bild für Großansicht anklicken.
Außerdem wird im Viewport ein grünes Volumen um Ihr Statisches Mesh herum angezeigt, mit einem Standard-Manipulator-Gizmo des Unreal Editors.
Wenn das Volumen und der Manipulator nicht sofort erscheinen, aktivieren Sie die Schaltfläche Show Gizmo am unteren Rand des Generate UV-Panels.
-
Wählen Sie in der Einstellung Projection Type das Volumen aus, das am besten zu den Abmessungen Ihres Statischen Meshs passt.
-
Passen Sie die Größe, Position und Rotation des Volumens an die Grenzen Ihres Statischen Meshs an.
Dazu können Sie den Manipulator im Viewport oder die Textfelder im Generate UV-Panel verwenden. Sie können auch die Schaltfläche Fit verwenden, um das Volumen automatisch an die Grenzen der Statisches-Mesh-Geometrie anzupassen, was einen guten Ausgangspunkt darstellt.
-
Legen Sie in der Einstellung Target Channel den Index des Kanals fest, in dem Sie das projizierte UV-Mapping speichern möchten.
Die meisten Materialien beziehen ihre Texturkoordinaten aus Kanal 0. Wenn Sie ein UV-Mapping generieren, um die Texturierung um Ihre Statisches-Mesh-Geometrie zu verbessern, sollten Sie in diesem Feld typischerweise
0einstellen. -
Klicken Sie auf Apply, um das UV-Mapping zu generieren und im Zielkanal des Statischen Meshs zu speichern.
Die folgende Tabelle beschreibt alle Einstellungen im Panel Generate UV:
| Einstellung | Beschreibung | |
|---|---|---|
| Projection Type | Das Volumen, auf das die Statisches-Mesh-Geometrie projiziert wird. | |
| Size | Die Dimensionen des Projektionsvolumens. | |
| Position | Die Position des Projektionsvolumens relativ zum Drehpunkt des Statischen Meshs. | |
| Rotation | Die Rotation des Projektionsvolumens relativ zum Drehpunkt des Statischen Meshs. | |
| UV Tiling Scale | Die Skalierung der Projektion im UV-Raum. Größere Werte vergrößern die Projektion im Texturraum, wodurch Texturdetails kleiner erscheinen, wenn sie um die Oberfläche des Meshs gewickelt werden. | |
| UV Offset | Steuert die Platzierung der Projektion im 2D-Texturraum. Kleinere Werte auf der X-Achse verschieben die Projektion im UV-Mapping nach links; größere Werte verschieben die Projektion nach rechts. Kleinere Werte auf der Y-Achse verschieben die Projektion im UV-Mapping nach oben; größere Werte verschieben die Projektion nach unten. | |
| Target Channel | Der Index des UV-Kanals, in dem die Projektion gespeichert wird. Dieser kann nicht derselbe Kanal sein, der vom Statisches-Mesh-Editor zum Speichern generierter Lightmap-UVs verwendet wird. Wenn der Ziel-Kanal bereits Daten enthält, wird der Editor um Bestätigung bitten, bevor er fortfährt. | |
| Show Gizmo | Schaltet die Darstellung des Projektionsvolumens und des Manipulator-Gizmos im Viewport ein/aus. | |
| Apply | Generiert die UV-Projektion gemäß den obigen Einstellungen und speichert das Ergebnis im Target Channel. | |
| Fit | Passt die Größe des Projektionsvolumens so an, dass es die gesamte Geometrie des Statischen Meshs umschließt. |
Sie können auch mit UV-Kanälen in Blueprint- und Python-Skripten arbeiten, die Sie im Unreal Editor ausführen.
Sie können alles tun, was Sie auch im Statisches-Mesh-Editor machen können, und zusätzlich neue Kanäle hinzufügen und neue UV-Mappings generieren. Sie können alles tun, was Sie auch im Statisches-Mesh-Editor tun können, und zusätzlich neue Kanäle hinzufügen und neue UV-Mappings erstellen.
Voraussetzung: Falls Sie es noch nicht getan haben, müssen Sie das Editor Scripting Utilities-Plugin installieren. Weitere Details finden Sie unter Scripting und Automatisierung des Editors.
Die benötigten Knoten zur Verwaltung von UV-Kanälen finden Sie in der Kategorie Editor Scripting > Static Mesh.
Um diese Knoten zu verwenden, muss Ihre Blueprint-Klasse von einer Editor-exklusiven Klasse abgeleitet sein, wie zum Beispiel der Klasse PlacedEditorUtilityBase. Weitere Details finden Sie unter Scripting des Editors mit Blueprints.
Alle diese Funktionen arbeiten mit einem Statisches-Mesh-Asset, welches Sie typischerweise durch Aufruf des Knotens Editor Scripting > Asset Library > Load Asset laden müssen.
Das Modifizieren von UV-Kanälen verändert das Asset. Wenn Sie die vorgenommenen Änderungen beibehalten möchten, müssen Sie anschließend einen Knoten wie Editor Scripting > Asset Library > Save Asset oder Save Loaded Asset verwenden. Sehen Sie sich die folgenden Beispiele an.
UV-Kanäle auflisten
Sie können den Knoten Get Num UV Channels verwenden, um herauszufinden, wie viele UV-Kanäle derzeit in einem bestimmten Statisches-Mesh-Asset existieren.
Zum Beispiel:
Bild für Großansicht anklicken.
Einen UV-Kanal entfernen
Jeder UV-Kanal speichert Textur-Koordinaten für jeden Scheitelpunkt als Teil des Statisches Mesh. Sie können also Laufzeit-Speicher sparen, indem Sie ungenutzte Mappings entfernen.
Um einen UV-Kanal zu entfernen, rufen Sie den Knoten Remove UV Channel auf. Übergeben Sie dem Statisches-Mesh-Asset den Index des UV-Kanals, den Sie entfernen möchten.
Zum Beispiel:
Bild für Großansicht anklicken.
Alle anderen UV-Kanäle, die bereits in der Liste nach dem angegebenen Index vorhanden waren, rücken um eine Position nach oben, um den durch den entfernten Eintrag freigewordenen Platz zu füllen.
Sie können keinen UV-Kanal löschen, wenn Ihr Statisches-Mesh-Asset für die Generierung von Lightmap-UVs eingerichtet ist und der von Ihnen ausgewählte UV-Kanal bereits als Quell- oder Ziel-Kanal für Lightmap-UVs verwendet wird. Deaktivieren Sie entweder die Option Build Settings > Generate Lightmap UVs, oder ändern Sie die Einstellungen Build Settings > Source Lightmap Index und Build Settings > Destination Lightmap Index, sodass sie auf andere UV-Kanäle verweisen.
Einen neuen UV-Kanal hinzufügen
Sie können Ihrem Statisches-Mesh-Asset einen neuen UV-Kanal hinzufügen, indem Sie einen der folgenden Knoten aufrufen:
- Add UV Channel - Fügt den neuen Kanal am Ende der bestehenden Kanalliste hinzu.
- Insert UV Channel - Fügt den neuen Kanal an dem von Ihnen angegebenen Index ein, wobei alle anderen UV-Kanäle in der Liste um eine Nummer nach unten verschoben werden. Beachten Sie, dass das Array der UV-Kanäle keine Lücken haben kann: Sie können einen neuen Kanal nur an einer Position in der Liste einfügen, die sich neben einem bereits vorhandenen Kanal befindet. Wenn zum Beispiel drei UV-Kanäle in der Liste vorhanden sind (Indizes 0, 1 und 2), können Sie einen neuen mit Index 3 hinzufügen, aber nicht mit Index 4.
Bild für Großansicht anklicken.
Das neue Mapping ist leer. Sie sollten es vor der Verwendung auf irgendeine Weise füllen – entweder durch Projektion der Mesh-Geometrie (siehe unten) oder durch Verwendung als Ziel für die Lightmap-Generierung.
Mesh-Geometrie in einen UV-Kanal auspacken
Sie können neue UV-Mappings erstellen, indem Sie den Statisches-Mesh-Editor die Dreiecke, aus denen Ihre Statisches-Mesh-Geometrie besteht, automatisch auspacken und abflachen lassen. Die Oberfläche der Dreiecke wird automatisch angepasst, um die Nachbarschaft angrenzender Dreiecke zu erhalten, und Nähte werden überall dort eingefügt, wo der Winkel zwischen angrenzenden Oberflächen einen von Ihnen festgelegten Schwellenwert überschreitet.
Projekteinrichtung: Um die unten beschriebene UV-Kanal-Generierungsmethode zu verwenden, müssen Sie das Polygon Editing-Plugin für Ihr Unreal-Engine-Projekt installieren.
Verwenden Sie den Knoten Generate Unwrapped UVs. Sie müssen diesem Knoten Folgendes geben:
- Eine Referenz zum Statisches-Mesh-Asset, das Sie modifizieren möchten,
- Den Index des UV-Kanals, in dem die ausgepackte UV gespeichert werden soll. Falls dieser Kanal noch nicht existiert, wird er während des Auspackprozesses erstellt.
- Den maximalen Winkel zwischen zwei benachbarten Flächen, damit diese Flächen nach dem Auspacken verbunden bleiben. Das Erhöhen dieses Wertes minimiert die Anzahl der separaten UV-„Inseln“, indem mehr Dreiecke mit ihren Nachbarn verbunden bleiben und die Anzahl der Nähte reduziert wird, die zu Brüchen im Textur-Mapping führen können. Dies kann jedoch auch zu mehr Verzerrung in den gepackten Texturen führen, da Dreiecke im 2D-Raum möglicherweise aggressiver in ihrer Größe angepasst werden müssen, um mit ihren Nachbarn verbunden zu bleiben.
Zum Beispiel:
Bild für Großansicht anklicken.
Projektion der Mesh-Geometrie in einen UV-Kanal
Sie können neue UV-Mappings erstellen, indem Sie die Dreiecke im Statischen Mesh auf eine 2D-Ebene oder ein einfaches 3D-Volumen projizieren.
Jeder der unten beschriebenen Knoten speichert das von ihm erstellte UV-Mapping in einem UV-Kanal, den Sie festlegen. Dieser UV-Kanal muss bereits existieren; wenn er nicht existiert, wird die Funktion ihn nicht erstellen.
Planare Projektion
Verwenden Sie den Knoten Generate Planar UV Channel, um Ihre Statisches-Mesh-Geometrie auf eine Ebene zu projizieren. Verwenden Sie diese Art der Projektion, wenn nur eine Seite Ihres Statischen Meshs mit Texturen eingewickelt werden muss.
Zum Beispiel:
Bild für Großansicht anklicken.
Zylindrische Projektion
Verwenden Sie den Knoten Generate Cylindrical UV Channel, um Ihre Statisches-Mesh-Geometrie auf die Seiten, Ober- und Unterseite eines Zylinders zu projizieren.
Zum Beispiel:
Bild für Großansicht anklicken.
Box-Projektion
Verwenden Sie den Knoten Generate Box UV Channel, um Ihre Statisches-Mesh-Geometrie auf die Flächen eines Würfels zu projizieren.
Das folgende Skript erstellt beispielsweise eine Box in der ungefähren Größe des Statischen Meshs und erzeugt dann ein neues UV-Mapping, indem die Geometrie des Statischen Meshs auf die Seiten dieser Box projiziert wird:
Bild für Großansicht anklicken.
Die LOD-Verwaltungsfunktionen finden Sie in der Klasse unreal.EditorStaticMeshLibrary.
Alle diese Funktionen arbeiten mit einem Statisches-Mesh-Asset, welches Sie typischerweise durch den Aufruf einer Funktion wie unreal.EditorAssetLibrary.load_asset laden müssen.
Das Modifizieren von UV-Kanälen verändert das Asset. Wenn Sie die vorgenommenen Änderungen beibehalten möchten, müssen Sie anschließend eine Funktion wie unreal.EditorAssetLibrary.save_asset oder unreal.EditorAssetLibrary.save_loaded_asset verwenden.
UV-Kanäle auflisten
Sie können die Funktion unreal.EditorStaticMeshLibrary.get_num_uv_channels verwenden, um herauszufinden, wie viele UV-Kanäle derzeit in einem bestimmten Statisches-Mesh-Asset existieren.
Zum Beispiel:
import unreal
asset_name = '/Game/Path/MyStaticMeshAsset'
# Statisches-Mesh-Asset laden.
loaded_asset = unreal.EditorAssetLibrary.load_asset(asset_name)
# Ermitteln der Anzahl der im Asset gespeicherten UV-Kanäle.
num_uv_channels = unreal.EditorStaticMeshLibrary.get_num_uv_channels(asset_name)
print("Anzahl der UV-Kanäle: " + str(num_uv_channels))
Einen UV-Kanal entfernen
Jeder UV-Kanal speichert Textur-Koordinaten für jeden Scheitelpunkt als Teil des Statisches Mesh. Sie können also Laufzeit-Speicher sparen, indem Sie ungenutzte Mappings entfernen.
Um einen UV-Kanal zu entfernen, rufen Sie die Funktion unreal.EditorStaticMeshLibrary.remove_uv_channel auf. Übergeben Sie dem Statisches-Mesh-Asset den Index des UV-Kanals, den Sie entfernen möchten.
Zum Beispiel:
import unreal
asset_name = '/Game/Path/MyStaticMeshAsset'
# Statisches-Mesh-Asset laden.
loaded_asset = unreal.EditorAssetLibrary.load_asset(asset_name)
# Ermitteln der Anzahl der im Asset gespeicherten UV-Kanäle.
num_uv_channels = unreal.EditorStaticMeshLibrary.get_num_uv_channels(asset_name)
# Entfernen des letzten Eintrags in der Liste.
channel_to_remove = num_uv_channels - 1
unreal.EditorStaticMeshLibrary.remove_uv_channel(asset_name, channel_to_remove)
# Modifiziertes Asset speichern.
unreal.EditorAssetLibrary.save_asset(asset_name)
Alle anderen UV-Kanäle, die bereits in der Liste nach dem angegebenen Index vorhanden waren, rücken um eine Position nach oben, um den durch den entfernten Eintrag freigewordenen Platz zu füllen.
Sie können keinen UV-Kanal löschen, wenn Ihr Statisches-Mesh-Asset für die Generierung von Lightmap-UVs eingerichtet ist und der von Ihnen ausgewählte UV-Kanal bereits als Quell- oder Ziel-Kanal für Lightmap-UVs verwendet wird. Deaktivieren Sie entweder die Option Build Settings > Generate Lightmap UVs, oder ändern Sie die Einstellungen Build Settings > Source Lightmap Index und Build Settings >Destination Lightmap Index, sodass sie auf andere UV-Kanäle verweisen.
Einen neuen UV-Kanal hinzufügen
Sie können einen neuen UV-Kanal zu Ihrem Statisches-Mesh-Asset hinzufügen, indem Sie eine der folgenden Funktionen aufrufen:
unreal.EditorStaticMeshLibrary.add_uv_channel- Fügt den neuen Kanal am Ende der bestehenden Kanalliste hinzu.unreal.EditorStaticMeshLibrary.insert_uv_channel- Fügt den neuen Kanal an dem von Ihnen angegebenen Index hinzu, wobei jeder andere UV-Kanal in der Liste um eine Nummer nach unten verschoben wird. Beachten Sie, dass das Array der UV-Kanäle keine Lücken haben kann: Sie können einen neuen Kanal nur an einer Position in der Liste einfügen, die sich neben einem bereits vorhandenen Kanal befindet. Wenn zum Beispiel drei UV-Kanäle in der Liste vorhanden sind (Indizes 0, 1 und 2), können Sie einen neuen mit Index 3 hinzufügen, aber nicht mit Index 4.
Zum Beispiel:
import unreal
asset_name = '/Game/Path/MyStaticMeshAsset'
# Statisches-Mesh-Asset laden.
loaded_asset = unreal.EditorAssetLibrary.load_asset(asset_name)
# Ermitteln der Anzahl der im Asset gespeicherten UV-Kanäle.
num_uv_channels = unreal.EditorStaticMeshLibrary.get_num_uv_channels(asset_name)
print("Anzahl der UV-Kanäle vorher: " + str(num_uv_channels))
# Einen UV-Kanal am Ende der Liste hinzufügen.
unreal.EditorStaticMeshLibrary.add_uv_channel(asset_name)
# Einen UV-Kanal am Anfang der Liste hinzufügen.
unreal.EditorStaticMeshLibrary.insert_uv_channel(asset_name, 0)
# Neue Anzahl der im Asset gespeicherten UV-Kanäle ermitteln.
num_uv_channels = unreal.EditorStaticMeshLibrary.get_num_uv_channels(asset_name)
print("Anzahl der UV-Kanäle nachher: " + str(num_uv_channels))
# Modifiziertes Asset speichern.
unreal.EditorAssetLibrary.save_asset(asset_name)
Das neue Mapping ist leer. Sie sollten es vor der Verwendung auf irgendeine Weise füllen – entweder durch Projektion der Mesh-Geometrie (siehe unten) oder durch Verwendung als Ziel für die Lightmap-Generierung.
Mesh-Geometrie in einen UV-Kanal auspacken
Sie können neue UV-Mappings erstellen, indem Sie den Statisches-Mesh-Editor die Dreiecke, aus denen Ihre Statisches-Mesh-Geometrie besteht, automatisch auspacken und abflachen lassen. Die Oberfläche der Dreiecke wird automatisch angepasst, um die Nachbarschaft angrenzender Dreiecke zu erhalten, und Nähte werden überall dort eingefügt, wo der Winkel zwischen angrenzenden Oberflächen einen von Ihnen festgelegten Schwellenwert überschreitet.
Projekteinrichtung: Um die unten beschriebene UV-Kanal-Generierungsmethode zu verwenden, müssen Sie das Polygon Editing-Plugin für Ihr Unreal-Engine-Projekt installieren.
Verwenden Sie die Funktion unreal.UVGenerationFlattenMapping.generate_flatten_mapping_u_vs() . Übergeben Sie:
- Eine Referenz zum Statisches-Mesh-Asset, das Sie modifizieren möchten,
- Den Index des UV-Kanals, in dem die ausgepackte UV gespeichert werden soll. Falls dieser Kanal noch nicht existiert, wird er während des Auspackprozesses erstellt.
- Den maximalen Winkel in Grad zwischen zwei benachbarten Flächen, damit diese Flächen nach dem Auspacken verbunden bleiben. Das Erhöhen dieses Wertes minimiert die Anzahl der separaten UV-„Inseln“, indem mehr Dreiecke mit ihren Nachbarn verbunden bleiben und die Anzahl der Nähte reduziert wird, die zu Brüchen im Textur-Mapping führen können. Dies kann jedoch auch zu mehr Verzerrung in den gepackten Texturen führen, da Dreiecke im 2D-Raum möglicherweise aggressiver in ihrer Größe angepasst werden müssen, um mit ihren Nachbarn verbunden zu bleiben.
Zum Beispiel:
import unreal
asset_name = '/Game/Meshes/StaticMesh'
# Statisches-Mesh-Asset laden.
loaded_asset = unreal.EditorAssetLibrary.load_asset(asset_name)
# UV-Kanal zum Speichern angeben.
channel_index = 2
# Winkel-Schwellenwert festlegen
angle_threshold = 55
# Mesh in den UV-Kanal auspacken
unreal.UVGenerationFlattenMapping.generate_flatten_mapping_u_vs(loaded_asset, channel_index, angle_threshold)
# Modifiziertes Asset speichern.
unreal.EditorAssetLibrary.save_asset(asset_name)
Projektion der Mesh-Geometrie in einen UV-Kanal
Sie können neue UV-Mappings erstellen, indem Sie die Dreiecke im Statischen Mesh auf eine 2D-Ebene oder ein einfaches 3D-Volumen projizieren.
Dies ist derzeit nur in den Unreal-Editor-Scripting-APIs verfügbar, nicht in der Benutzeroberfläche des Statisches-Mesh-Editors. Der Prozess und die vom API benötigten Einstellungen sind jedoch leichter zu verstehen, wenn Sie bereits mit visuellen Werkzeugen für die Mesh-Projektion vertraut sind, wie sie beispielsweise in 3ds Max zu finden sind. Weitere Hintergrundinformationen finden Sie im UVW Map Modifier in der 3ds-Max-Hilfe.
Jede der unten beschriebenen Funktionen speichert das erstellte UV-Mapping in einem von Ihnen festgelegten UV-Kanal. Dieser UV-Kanal muss bereits existieren; wenn er nicht existiert, wird die Funktion ihn nicht erstellen.
Planare Projektion
Verwenden Sie die Funktion unreal.EditorStaticMeshLibrary.generate_planar_uv_channel, um Ihre Statisches-Mesh-Geometrieauf eine Ebene zu projizieren. Verwenden Sie diese Art der Projektion, wenn nur eine Seite Ihres Statischen Meshs mit Texturen eingewickelt werden muss.
Zum Beispiel:
import unreal
asset_name = '/Game/Path/MyStaticMeshAsset'
# Statisches-Mesh-Asset laden.
loaded_asset = unreal.EditorAssetLibrary.load_asset(asset_name)
# Zu projizierenden LOD festlegen.
lod_index = 0
# Einen neuen UV-Kanal für unsere Projektion hinzufügen.
num_uv_channels = unreal.EditorStaticMeshLibrary.get_num_uv_channels(asset_name)
unreal.EditorStaticMeshLibrary.add_uv_channel(asset_name)
channel_index = num_uv_channels
# Die Projektionsebene oder das „Gizmo“ einrichten.
bbox = loaded_asset.get_bounding_box()
gizmo_pos = ((bbox.min + bbox.max) * 0.5) # Mittelpunkt des Begrenzungsrahmens des Objekts finden.
# Rotationswinkel in Grad festlegen.
pitch = 0 # Um die X-Achse
yaw = 0 # Um die Y-Achse
roll = 0 # Um die Z-Achse
gizmo_orientation = unreal.Rotator(pitch, yaw, roll)
# Erhöhen oder verringern Sie die Werte, um die Projektion zu vergrößern oder zu verkleinern.
tiling = unreal.Vector2D(1, 1)
# Statisches-Mesh-Geometrie in den UV-Kanal projizieren.
unreal.EditorStaticMeshLibrary.generate_planar_uv_channel(loaded_asset, lod_index, channel_index, gizmo_pos, gizmo_orientation, tiling)
# Modifiziertes Asset speichern.
unreal.EditorAssetLibrary.save_asset(asset_name)
Zylindrische Projektion
Verwenden Sie die Funktion unreal.EditorStaticMeshLibrary.generate_cylindrical_uv_channel, um Ihre Statisches-Mesh-Geometrie auf die Seiten, die Ober- und Unterseite eines Zylinders zu projizieren.
Zum Beispiel:
import unreal
asset_name = '/Game/Path/MyStaticMeshAsset'
# Statisches-Mesh-Asset laden.
loaded_asset = unreal.EditorAssetLibrary.load_asset(asset_name)
# Zu projizierenden LOD festlegen.
lod_index = 0
# Einen neuen UV-Kanal für unsere Projektion hinzufügen.
num_uv_channels = unreal.EditorStaticMeshLibrary.get_num_uv_channels(asset_name)
unreal.EditorStaticMeshLibrary.add_uv_channel(asset_name)
channel_index = num_uv_channels
# Den Projektionszylinder oder das „Gizmo“ einrichten.
bbox = loaded_asset.get_bounding_box()
gizmo_pos = ((bbox.min + bbox.max) * 0.5) # Mittelpunkt des Begrenzungsrahmens des Objekts finden.
# Rotationswinkel in Grad festlegen.
pitch = 0 # Um die X-Achse
yaw = 0 # Um die Y-Achse
roll = 0 # Um die Z-Achse
gizmo_orientation = unreal.Rotator(pitch, yaw, roll)
# Erhöhen oder verringern Sie die Werte, um die Projektion zu vergrößern oder zu verkleinern.
tiling = unreal.Vector2D(1, 1)
# Statisches-Mesh-Geometrie in den UV-Kanal projizieren.
unreal.EditorStaticMeshLibrary.generate_cylindrical_uv_channel(teapot, lod_index, channel_index, gizmo_pos, gizmo_orientation, tiling)
# Modifiziertes Asset speichern.
unreal.EditorAssetLibrary.save_asset(asset_name)
Box-Projektion
Verwenden Sie die Funktion unreal.EditorStaticMeshLibrary.generate_box_uv_channel, um Ihre Statisches-Mesh-Geometrie auf die Flächen eines Würfels zu projizieren.
Das folgende Skript erstellt beispielsweise eine Box in der ungefähren Größe des Statischen Meshs und erzeugt dann ein neues UV-Mapping, indem die Geometrie des Statischen Meshs auf die Seiten dieser Box projiziert wird:
import unreal
asset_name = '/Game/Path/MyStaticMeshAsset'
# Statisches-Mesh-Asset laden.
loaded_asset = unreal.EditorAssetLibrary.load_asset(asset_name)
# Zu projizierenden LOD festlegen.
lod_index = 0
# Einen neuen UV-Kanal für unsere Projektion hinzufügen.
num_uv_channels = unreal.EditorStaticMeshLibrary.get_num_uv_channels(asset_name)
unreal.EditorStaticMeshLibrary.add_uv_channel(asset_name)
channel_index = num_uv_channels
# Das Projektionsvolumen oder das „Gizmo“ einrichten.
bbox = loaded_asset.get_bounding_box()
gizmo_pos = ((bbox.min + bbox.max) * 0.5) # Mittelpunkt des Begrenzungsrahmens des Objekts finden.
# Rotationswinkel in Grad festlegen.
pitch = 0 # Um die X-Achse
yaw = 0 # Um die Y-Achse
roll = 0 # Um die Z-Achse
gizmo_orientation = unreal.Rotator(pitch, yaw, roll)
# Größe der Box abrufen.
gizmo_size = bbox.max - bbox.min
# Statisches-Mesh-Geometrie in den UV-Kanal projizieren.
unreal.EditorStaticMeshLibrary.generate_box_uv_channel(box, channel_index, lod_index, gizmo_pos, gizmo_orientation, gizmo_size)
# Modifiziertes Asset speichern.
unreal.EditorAssetLibrary.save_asset(asset_name)