Ermöglicht es dir, Instanzen von Spieltexturen durch benutzerdefinierte PNG-Dateien zu ersetzen.
BeschreibungDiese Mod sollte es dir ermöglichen, Folgendes zu ersetzen:
- Spielermodell-Texturen
- Gegenstands-Inventarsymbole
- Ausrüstungs-Texturen wie Rüstung, Waffen und Werkzeuge
- Gelände- und Wassertexturen
- Umgebungstexturen
- spezielle Orts-Texturen (Dörfer, Krypten, Runensteine usw.)
- Weltobjekt-Texturen, fast alles andere in der Spielwelt
Es unterstützt jetzt auch Ebenen, sodass du mehrere Texturen auf dieselbe Vanilla-Textur anwenden kannst (siehe
Ebenen unten).
Um eigene benutzerdefinierte Texturen zu erstellen, ist grundlegendes Leseverständnis erforderlich! Es ist nicht so schwierig, aber bitte lies alle Informationen unten
sorgfältig bevor du um Hilfe bittest.
Grundlegende VerwendungUm die Vanilla-Texturen als Referenz zu extrahieren, verwende ich
Asset Studio. Die Texturen befinden sich in der
valheim_Data/sharedassets Dateien.
Um eine Textur zu ersetzen, fügst du einfach eine
png Datei in den Ordner
BepInEx/plugins/CustomTextures mit dem unten erklärten Namensformat und lade dann das Spiel.
Du kannst Texturen auch in Unterordnern organisieren! Wenn du ein Texturenpaket veröffentlichst, empfehle ich dir, dies zu tun, um eine einfache Installation und Entfernung zu ermöglichen.
Wenn du also ein Texturpaket veröffentlichst, kannst du deine Texturen vor dem Erstellen der Zip-Datei in einen Ordner namens CustomTextures legen, damit Vortex sie automatisch installieren kann!Um die Welttexturen während des Spiels neu zu laden, gibt es einen Hotkey (standardmäßig
Seite nach unten). Hinweis: Dadurch werden keine Vanilla-Texturen neu geladen. Wenn du also eine benutzerdefinierte Texturdatei entfernst, musst du das Spiel neu starten, um die Vanilla-Textur wieder zu sehen.
Für eine Liste von Mods, die mit dieser Mod benutzerdefinierte Texturen erstellen, klicke auf
Anforderungen Über dieser Beschreibung.
Hier ist das Video einer freundlichen Person, die zeigt, wie man diese Mod mit vorgefertigten Texturpaketen verwendet.FiltermodusValheim-Texturen verwenden
Punkt filterung, was sie aus der Nähe verpixelt aussehen lässt. Wenn du
bilinear oder
trilinear Filterung nach höher aufgelösten Texturen, lege deine Texturen in einem Unterordner namens
bilinear oder
trilinear und die Mod wird den Filtermodus für diese Texturen ändern (sie können sich weiterhin in Unter-Unterordnern befinden, wenn du möchtest).
Zusammenfassung der DateibenennungDateinamen bestehen aus bis zu vier Teilen: Präfixen, Bezeichnern, Eigenschaftsnamen und Ebenennamen. Um die meisten dieser Informationen zu erhalten, verwenden Sie den Szenen-Dump (siehe
Szenenausgabe unten)
Sie erstellen Dateinamen, die mit einem Präfix beginnen, auf das normalerweise ein Unterstrich folgt, dann eine Kennung, dann der Eigenschaftsname (und optional ein Unterstrich gefolgt von einem Ebenennamen, wie unter
Ebenen), d. h. für einen vollständigen Texturersatz:
<prefix>_<identifier><propertyName>.png
oder für eine Ebene:
<prefix>_<identifier><propertyName>_<layerName>.pngSie erhalten dann einen Dateinamen wie diesen, und Sie platzieren ihn irgendwo in der
Benutzerdefinierte Texturen Ordner.
Eigenschaftsnamen haben normalerweise einen Unterstrich als Präfix, also vergiss das auch nicht. Wenn Windows außerdem deine Dateiendungen ausblendet, dann
hinzufügen
.png bis zum Ende, sonst erhalten Sie eine Datei namens
<prefix>_<identifier><propertyName>.png.png was nicht funktionieren wird. Im Ernst, lass Windows einfach Dateiendungen anzeigen, es ist dumm, dass es das nicht tut.
Hier ist eine Erklärung zu jedem der vier Teile:
PräfixeDie folgenden Präfixe sind implementiert, basierend auf der Art des zu ändernden Objekts:
- Spielermodell für Spielertexturen
- atlas_item_icons für Inventarsymbole
- Objekt für Objekttexturen
- Rüstung für Rüstungstexturen
- Zone für Wassertexturen
- Gelände für Geländetexturen
- Umgebung für Umgebungstexturen
- Ort für besondere Orte
Für Objekt-, Wasser-, Gelände-, Umgebungs- und Orts-Texturen kann das Präfix wie folgt weiter angepasst werden:
- <prefix>Renderer - zum Ersetzen von Texturen auf bestimmten benannten Renderern bei bestimmten benannten Dingen
- Präfix - zum Ersetzen von Texturen auf bestimmten benannten Materialien bei bestimmten benannten Dingen
- <prefix>renderermat - zum Ersetzen von Texturen auf bestimmten benannten Materialien auf bestimmten benannten Renderern bei bestimmten benannten Dingen
- <prefix>Textur - zum Ersetzen bestimmter benannter Texturen bei bestimmten benannten Dingen
z. B.:
environmentrenderermat_YggdrasilBranch_branch_Yggdrasil-Zweig (Instanz)_MainTex.png wird die Haupttextur ersetzen auf der
Yggdrasil-Zweig (Instanz) Material auf dem
Zweig Renderer auf der
YggdrasilZweig Umgebungsobjekt.
Du kannst auch die folgenden Präfixe basierend auf dem Namen der Komponente verwenden:
- Textur zum universellen Ersetzen einer Textur (sofern unterstützt)
- Renderer zum Ersetzen der Textur auf jedem benannten Renderer
- Matte zum Ersetzen der Textur auf jedem benannten Material:
Nun, einige einfachere Möglichkeiten, das oben Genannte zu tun, sind:
texture_yggbark_d_MainTex.pngmat_yggdrasil_branch (Instance)_MainTex.pngBezeichnerDie mit den obigen Präfixen verwendeten Bezeichner finden Sie im Szenen-Dump. Mehr dazu in jedem detaillierten Abschnitt unten.
ObjektnamenDie Eigenschaftsnamen findest du auch im Szenen-Dump. Meistens wirst du ersetzen wollen
_MainTex und vielleicht
_BumpMap oder
_SkinBumpMap.
Ebenennamen:Sehen
Ebenen unten.
ErsatztypenHier sind die Details zu jeder Art von Ersatz:
SpielertexturenVerwenden Sie für die Basistextur des Spielercharakters die folgende Syntax:
player_model_<modelNumber><suffix>.pngErsetzen
<Modellnummer> mit entweder
0 für männlich oder
1 für weiblich. Z. B.:
Spieler_model_1_MainTex.pngGegenstands-InventarsymboleDies sind die kleinen Bilder, die in deinem Inventar erscheinen, um einen Gegenstand im Spiel darzustellen. Sie befinden sich alle auf einer einzigen Grafik namens
sactx-2048x2048-Uncompressed-IconAtlas-61238c20 #845.
Um das Inventarsymbolblatt zu ersetzen, erstellen Sie ein entsprechendes Blatt mit dem Namen:
atlas_item_icons.pngDu kannst jede beliebige Auflösung verwenden, da sie automatisch angepasst wird.
Sie können auch ein einzelnes Objektsymbol mithilfe einer Ebene ersetzen (siehe
Ebenen unten).
Objekt und Rüstungstexturen
Hinweis: Ausrüstung und Weltobjekte werden jetzt alle berücksichtigt Objekte. Die Mod wird weiterhin die Gegenstände_ Präfix, nur aus Gründen der Abwärtskompatibilität.Neben Spielermodellen und Inventarsymbolen gilt alles andere, was dieser Mod beeinflusst, als
Objekt.
Zum Beispiel:
- Ressourcen wie Kohle und Holz
- Werkzeuge wie Hämmer und Kultivatoren
- Pflanzen, Bäume, Büsche
- Bausteine
- Feinde
Rüstung ist dafür, wie das Objekt aussieht, wenn du es trägst (im Gegensatz dazu, es mit dem Rest deines Krams auf den Boden zu werfen).
Die allgemeine Dateinamensyntax für all diese Dinge ist:
<prefix>_<identifier><suffix>.pngPräfixe:Die folgenden Präfixe für Objekte und Rüstung sind jetzt implementiert:
- Objekt - wird verwendet, um alle Texturen dieses Typs zu ändern <suffix> für einen bestimmten Weltobjekttyp. <Bezeichner> sollte der Objekt-Spawn-Name sein
- Objekt-Darsteller (Objektnetz funktioniert auch, ist aber veraltet) - wird verwendet, um alle Texturen dieses Typs zu ändern <suffix> an einem bestimmten Renderer an einem bestimmten Objekt. Der <Bezeichner> (sehen Bezeichner) sollte der Objektname und der Renderername sein, getrennt durch einen Unterstrich: <objectName>_<rendererName>
- Objekttextur - wird verwendet, um eine bestimmte benannte Textur des Typs zu ändern <suffix> Bei jedem Renderer auf einem bestimmten Objekt. Der <Bezeichner> (sehen Bezeichner) sollte der Objektname und der Texturname sein, getrennt durch einen Unterstrich: <objectName>_<textureName>
- Objektmatte - wird verwendet, um Texturen auf allen speziell benannten Materialien eines bestimmten Objekts zu ändern. Die <Bezeichner> (sehen Bezeichner) sollte der Objektname und der Materialname sein, getrennt durch einen Unterstrich: <objectName>_<materialName>
- Objekt-Renderer-Mat - wird verwendet, um Texturen auf einem speziell benannten Material auf einem speziell benannten Renderer auf einem bestimmten Objekt zu ändern. Die <Bezeichner> (sehen Bezeichner) sollte der Objektname und der Materialname sein, getrennt durch einen Unterstrich: <objectName>_<Renderer-Name>_<materialName>
- Textur - wird verwendet, um alle Instanzen einer bestimmten Textur des Typs zu ändern <suffix> an allen Objekten und Gegenständen, die diese Textur verwenden. Die <identifier> (sehen Bezeichner) sollte der Texturname sein (nicht unbedingt der exportierte Dateiname!)
- Renderer - wird verwendet, um Texturen des Typs zu ändern <suffix> für alle Instanzen eines bestimmten Renderers auf allen Objekten und Gegenständen. Die <Bezeichner> (sehen Bezeichner) sollte der Name des Renderers sein.
- matte - wird verwendet, um Texturen des Typs zu ändern <suffix> auf allen Instanzen eines bestimmten Materials auf allen Objekten und Gegenständen. Die <Bezeichner> (sehen Bezeichner) sollte der Materialname sein.
- Rüstung - wird verwendet, um die Brust- oder Beinteile von Rüstungsgegenständen zu ändern - beachte, dass die übrigen Teile der Rüstung betroffen sind von objekt_ Eher als dies.
Suffixe:Hinweis: Suffixe wurden überarbeitet. Alte Suffixe von _texture und Anstoßen werden weiterhin erkannt, sollten aber durch den tatsächlichen Eigenschaftsnamen ersetzt werden. Suffixe teilen der Mod mit, welche Textur du ersetzen möchtest, genannt "
Eigenschaften.
Der Szenen-Dump gibt eine Liste von Eigenschaften für jedes Material auf einem Objekt aus, z. B.:
Objekt ArmorIronChest hat 1 SkinnedMeshRenderers:
SkinnedMeshRenderer Name: IronArmor
smr IronArmor hat 1 Material
IronArmorChest_mat (Instanz):
Eigenschaften:
_MainTex IronArmorChest_d
_BumpMap IronArmorChest_n
_Emissionskarte
_MetallicGlossMap IronArmorChest_m
_StyleTex
armor ArmorIronChest hat Material:
Rüstungsname: IronArmorPlayer_chest
Eigenschaften:
_MainTex
_KisteBrustKarte EisenRüstungBrustSpieler_n
_TruheMetall EisenRüstungTruheSpieler_m
_TruheTex EisenRüstungTruheSpieler_d
_LegsBumpMap
_BeineMetall
_LegsTex
_SkinBumpMap
Dieses Objekt hat sowohl einen Skinned-Mesh-Renderer als auch ein Rüstungsmaterial. Sie sind getrennt.
Der
Objekt sind all die schicken Schnörkel, die am Spieler hängen bleiben.
Der
Rüstung ist die Textur, die auf die Beine und die Brust des Spielers aufgetragen wird.
Jede Eigenschaft wird mit ihrem Texturnamen angezeigt (falls vorhanden), z. B. der Name des Objekts
_MainTex ist
EisenrüstungTorso_d.
_MainTex bezieht sich auf die Haupttextur. Meistens ist das diejenige, die du ersetzen möchtest. Bei Rüstungen jedoch bringt das Ersetzen von _MainTex möglicherweise nichts – am besten funktioniert es, sie durch eine transparente Textur zu ersetzen. Um die eigentliche Rüstung zu ändern, musst du verwenden
_ChestTex und / oder
_LegsTex und stelle sicher, dass es nur den Bereich der eigentlichen Rüstung abdeckt (siehe die exportierte
EisenrüstungBrustSpieler_m.png zum Beispiel). Sie sollten also Folgendes erstellen:
object_ArmorIronChest_MainTex.pngRüstung_RüstungEisenTruhe_ChestTex.png
Rüstung ist kompliziert, am besten experimentiert man!
BezeichnerUm Bezeichner für Objekte zu erhalten, verwenden Sie Namen aus der Spawn-Liste hier:
https://www.reddit.com/r/valheim/comments/lig8ml/spawn_item_command_list/Sie werden auch im oben erwähnten Szenen-Dump enthalten sein.
Wasser- und GeländetexturenWasser- und Geländetexturen verwenden eine ähnliche Syntax wie Objekte, d. h.:
<prefix>_<identifier><suffix>.pngWasserWassertexturen befinden sich innerhalb von Zonenobjekten, daher sehen Sie im Szenen-Dump jetzt:
zone _GameMain hat 2 MeshRenderer:
MeshRenderer-Name: WaterSurface
Herr WaterSurface hat 1 Material
Wasser (Instanz):
Eigenschaften:
_SchaumstoffTextur Schaum
_Normal nRHPu
_SchaumHochauflösendeTextur schaum_hochauflösend
_NormalFine normalmap2
_ZufallsSchaumText zufalls_schaum
MeshRenderer name: sub_water_opak_thingyu
Herr Unterwasser-Transportgut hat 1 Materialien
Wasserbodenebene (Instanz):
Eigenschaften:Das Präfix hier ist
Zone, also verwende z. B.:
zone__GameMain_FoamTex.png (beachten Sie den doppelten Unterstrich!)
GeländeDirekt nach dem Betreten der Zone siehst du:
terrain _GameMain, prefab _Zone (UnityEngine.GameObject)
Eigenschaften:
_MainTex Gras
_NoiseTex Noise
_ClearedMaskTex
_CliffNormal gouacherock_big_n
_KultiviertNormal kultiviert_n
_DiffuseTex0 diffuse0
_DirtNormal dirt_normal_generated
_WaldNormal wald_n
_GrasNormal gras_normal_generiert
_PavedNormal gepflastert_n
_RockNormal gouacherock_n
_SchneeNormal schnee_normalDer Präfix hier ist
Gelände, also verwenden Sie z. B.:
terrain__GameMain_DiffuseTex0.pngDer
diffuse0 Die Textur scheint sechzehn Kacheln mit unterschiedlichen Geländetypen zu enthalten. Ein Beispiel für ihre Verwendung ist in den Screenshots zu sehen.
UmgebungstexturenUmgebungstexturen sind Dinge wie Regen, Wolken, Nebel und dieses riesige Baumding am Himmel.
Der Szenen-Dump zeigt zum Beispiel:
Umgebung YggdrasilBranch hat 1 MeshRenderers:
MeshRenderer-Name: branch
Herr Branch hat 2 Materialien
Yggdrasil-Zweig (Instanz):
Eigenschaften:
_MainTex yggbark_d
_BumpMap yggbark_n
_EmissiveTex yggdrasil_emissive
_MossTex ygg_moss
_EmissiveMaskTex yggdrasil_emissivmask
_RefractionNormal
yggdrasil_branch_leafs (Instanz):
Eigenschaften:
_MainTex ygg_leaf_d
_BumpMap ygg_leaf_n
_EmissiveTex
_MoosTex
_EmissiveMaskTex
_RefractionNormalAlso, wie oben erwähnt:
umgebungsrenderer_mat_zweig_Yggdrasil-Zweig (Instanz)_MainTex.png wird die Haupttextur ersetzen auf der
Yggdrasil-Zweig (Instanz) Material auf dem
Zweig Renderer, auf dem
Yggdrasilzweig Umgebungsobjekt.
Besondere OrteLocation-Prefabs sind von den restlichen Spielmodellen getrennt und müssen daher separat behandelt werden. Sie haben viele Renderer, weshalb das Durchlaufen viel Zeit in Anspruch nehmen kann. Aus diesem Grund kannst du die Location-Ersetzung in der Konfiguration deaktivieren. Außerdem müssen Locations das
Ort Präfix (
textur_ wird keine Wirkung haben).
EbenenEbenen ermöglichen es dir, eine partielle Textur über einer bestehenden oder modifizierten Textur anzuwenden. Für alles außer Sprites funktioniert dies auf die gleiche Weise:
TexturschichtenUm einer anderen Textur als einem Sprite-Sheet eine Ebene hinzuzufügen, verwenden Sie dieselbe Syntax wie beim Ersetzen dieses Texturtyps im entsprechenden Abschnitt oben und fügen Sie
_<DeinLayerName> bis zum Ende. Also, für die Spieleraugen-Textur einer Mod namens
RealEyes, wäre es:
player_model_0_MainTex_RealEyes.png<YourLayerName> kann beliebig festgelegt werden, solange er eindeutig ist und
enthält keine Unterstriche.
Sprite-EbenenSprite-Ebenen für das Item-Icon-Sheet funktionieren anders und überschreiben einen Bereich des Sprite-Sheets vollständig. Daher sollte die PNG der Sprite-Ebene nur die Größe des Bereichs haben, den du ersetzen möchtest. Das Dateiformat für Item-Icon-Ebenen ist wie folgt:
atlas_item_icons_<startX>_<startY>_<sheetWidth>_<sheetHeight>.pngDas liegt daran, dass du möglicherweise mit hochskalierten Texturen arbeitest, also musst du die Mod wissen lassen, wie groß das theoretische Sheet ist, mit dem du arbeitest. Die Mod wird es mit dem vorhandenen Sheet (oder dem durch eine andere Textur ersetzten Sheet) vergleichen und daraus den Maßstab deiner Layer-Textur ermitteln. Um beispielsweise die Holzschild-Textur zu ersetzen, verwende ich eine 64x64 Pixel große PNG namens:
atlas_item_icons_1224_1840_2048_2048.pngDas sagt ihm, dass mein PNG aus einem Sheet stammt
2048x2048 Pixel groß (entspricht der Größe des Vanilla-Sheets) und um das vorhandene Sheet durch mein 64x64 Pixel PNG zu ersetzen, beginnend mit Pixel
1224x1840 wie die obere linke Ecke.
BeispieleNehmen wir ein Beispiel aus dem Szenen-Dump:
object VikingShip hat 1 SkinnedMeshRenderers:
SkinnedMeshRenderer Name: sail_full
smr sail_full hat 1 Materialien
segeln (Instanz):
Eigenschaften:
_MainTex sail_diffuse
_BumpMap sail_normal
_EmissiveTex
_MoosTex
Sie können wählen, welches Präfix und welche Kennung verwendet werden sollen, je nachdem, was Sie tun möchten:
1. Alle Texturen für einen Objekttyp festlegenobject_VikingShip_MainTex.pngDies ersetzt die Haupttextur jedes Materials im Objekt. Wenn ein Objekt also mehrere Texturen verwendet, funktioniert es wahrscheinlich nicht gut. Für unser Beispiel würde das nicht gut funktionieren, da sich auch eine Reihe von MeshRenderern auf dem Schiff befinden. Wenn wir die Bump-Map ändern wollen, können wir Folgendes verwenden:
object_VikingShip_BumpMap.png2. Alle Instanzen einer Textur festlegentexture_sail_diffuse_MainTex.pngDies ersetzt alle Texturen mit dem Namen
sail_diffuse, also sollte jedes Objekt, das diese Textur verwendet, betroffen sein. In unserem Beispiel würde es die
Segel auch auf anderen Schiffstypen, wenn sie diese Textur verwenden.
3. Eine Textur für ein einzelnes Mesh auf einem Objekttyp festlegenobjectrenderer_VikingShip_sail_full_MainTex.png Dies ersetzt die Textur jedes Renderers mit dem Namen
Segel voll an alle
Wikingerboot Objekte.
4. Eine Textur nach Name auf einem Objekttyp festlegenObjekttextur
_Wikingerschiff_Segel_Diffus_MainTex.pngDies ersetzt jede Textur mit dem Namen
sail_diffuse auf alle
Wikingerschiff Objekte.
4. Eine partielle Texturschicht festlegenJedes der oben genannten Beispiele könnte alternativ als Teil-Layer hinzugefügt werden, indem man einen Layer-Namen am Ende anhängt. Wenn Sie also nur ein Decal auf das Segel des Wikingerschiffs aufbringen möchten, könnten Sie Folgendes tun:
objecttexture_VikingShip_sail_diffuse_MainTex_CoolSkullAndCrossBones.png
KonfigurationEine Konfigurationsdatei
BepInEx/config/aedenthorn.CustomTextures.cfg wird erstellt, nachdem das Spiel einmal mit diesem Mod gestartet wurde).
Du kannst die Konfigurationswerte anpassen, indem du diese Datei mit einem Texteditor bearbeitest oder im Spiel über die
Konfigurationsverwaltung.
Szenen-DumpUm alle Informationen zu erhalten, die Sie benötigen, um die oben genannten Namen zu erstellen, legen Sie die Konfigurationsoption fest
Szenentexturen ausgeben zu
wahr, dann starte das Spiel und lade einmal deine Welt. Eine Datei
BepInEx/plugins/CustomTextures/scene_dump.txt sollte erstellt werden. Du kannst ihn zurücksetzen auf
falsch Nachdem du die Texturen extrahiert hast, sonst wird die Datei bei jedem Spielstart neu erstellt.
Diese Mod ist noch in Arbeit.
TechnischUm diese Mod zu installieren, ist der einfachste Weg, einfach
Vortex, der Nexus Mods Mod-Manager. Er sollte sich um alle Abhängigkeiten kümmern.
Um manuell zu installieren, platzieren Sie die DLL-Datei im Ordner BepInEx/plugins. Sie benötigen BepInEx.
Der Code ist bei
https://github.com/aedenthorn/ValheimMods.
Wenn du dich beschweren oder um Hilfe bitten möchtest oder mir beim Testen meiner Mods helfen willst, kannst du besuchen
mein Discord-Server.
Klicken Sie hier für eine Liste aller meiner Mods für Valheim.