Das was Du entfernen möchtest ist wahrscheinlich das, was an der RootCollisionNode hängt (Kollisions-Shapes) bzw. den Verweis der Haupt-NiNode des NIFs auf sich selbst (Block-Nummer) als Child damit es inGame zu keiner Kollision mit dem Mesh kommt.
Es gibt zwei Arten von Kollisionen bei MW-Nifs, einmal die mit RootCollisionNode, am häufigsten benutzte, wobei die Kollision mit einer vereinfachten (im Spiel unsichtbaren) Darstellung des Meshes stattfindet. Und es gibt die Kollision ohne RootCollisionNode, wobei die Kollision mit allen sichtbaren Flächen aus Richtung der Fläche stattfindet.
An einer RootCollisionNode hängen ein oder mehrere Shapes (Form, Gestalt) die meistens ein vereinfachtes Modell darstellen.
Lies dazu vieleicht auch in
diesem Thread (mein Post vom 05.01.2013 19:39 + folgenden)
Es ist aber leider nicht ganz so einfach die Kollision aus dem Mesh zu entfernen - es gibt einige umständliche Work-Arounds, ich beschreib mal ein paar Wege:
Ein sicherer Weg, setzt eine RootCollisionNode vorraus:
(Enable "
Render Hidden" im NifSkope um diese Shapes zu sehen!)
-lade Dein zu änderndes Mesh in NifSkope und gehe
zum NiTriShapeData-Block, der unter dem ersten NiTriShape an der RootCollisionNode hängt
- suche die Zeile
NumTriangles und ändere den Wert dort in "1"
- trage darunter bei
NumTrianglePoints 3 ein
- öffne
Triangles indem Du davor auf + klickst und ändere die erste Zeile die nun lauten soll:
"Triangles Triangle 0 0 0", somit benutzt unser erstes und einziges Dreieck 3 mal Eckpunkt 0 (also den ersten)
- markiere nacheinander
NumTriangles,
NumTrianglePoints und
Triangles, rechtsklicke und wähle "
Array\Update" um die neuen Werte zu übernehmen
-setze den
Radius des NiTriShapeData-Blockes auf 0.0
-setze
Center auch auf 0.0, 0.0, 0.0
-öffne
Vertices indem Du auf das davorstehende "+" klickst und trage beim ersten Vertex z.B. die Koordinaten
"-1000000.0, -1000000.0, -1000000.0" ein, somit liegt der einzig kollidierende Eckpunkt so weit weg vom Mesh das man ihm im Normalfall nie "begegnet"
-öffne
Normals indem Du auf "+" klickst und setze dort 0.0, 0.0, 0.0 für den ersten Eckpunkt ein
(somit gibts keine Richtung in die die abweisende Fläche zeigt und man wird nicht zurückgehalten falls man den einen Punkt doch irgendwie trifft)
- markiere NiTriShape über dem NiTriShapeData-Block, rechtsklick darauf und wähle
"
Mesh\Remove Unused Vertices" woraufhin alle Vertizen bis auf Nummer 0 entfernt werden
-hängen mehrere NiTriShape-Blöcke an der RootCollisionNode dann rechtsklick nacheinander auf die überflüssigen
NiTriShape-Blöcke und "
Block\Remove Branch" wählen- dabei am Besten von unten nach oben vorgehen.
Stelle sicher das die zu löschenden Blocks mit dem Highlight markiert sind, sonst löschst Du womöglich versehentlich was Falsches!
-hast Du Blocks entfernt klicke einmal am Menu "
Spells\Sanitize\Check Links" damit die Block-Nummern aktualisiert werden und der NiFooter (ganz unten) wieder die richtige Nummer trägt.
-speichere Nif-Mesh
-fertig. Das Kollisions-Shape wurde durch einen einzelnen Punkt ohne Abprall-Richtung ersetzt. Das Mesh hat zwar noch Kollision aber die ist so unwahrscheinlich wie Dagoth Ur dem Tribunals-Tempel beitreten wird.
Der unsichere/schnelle Weg (mit RootCollisionNode im Ursprungs-Nif):
- lade das Nif in NifSkope,
-
prüfe an der Haupt-NiNode ob unter
Children ein Verweis auf die RootCollisionNode besteht und
merke die Anzahl (
NumChildren). Regulär ist das erste Child bei solchen Nifs ein leerer Verweis und das letzte verweist auf die RootCollisionNode. Ist es hier anders dann musst Du einen anderen Weg wählen.
- markiere nun RootCollisionNode selbst (die an der NiNode hängt - nicht den Verweis in der Children-Liste!)
- rechtsklick auf RootCollisionNode, wähle "
Block\Remove Branch" um den kompletten Zweig mit allem was daran hängt zu löschen.
- klicke nun einmal am Menu "
Spells\Sanitize\Check Links"
- gehe wieder zur obersten NiNode, bei "
Children"
- übertrage die Daten (BlockNummer) des zweiten Childs in die (leere) Zeile darüber, danach setze den Wert aus Zeile 3 in Zeile 2 usw. am Ende hast Du ein oder zwei für uns nutzlose Childrenverweise ganz unten drunter stehen. Hängt von der NifSkope-Version ab- ältere Versionen entfernen Children-Verweise wenn der Block entfernt wurde- deshalb solltest Du eben vorher
prüfen und
merken)
- nun ändere
NumChildren in ursprünglich
gemerkte NumChildren -2
- markiere
Children, rechtsklicke drauf, wähle "
Array\Update" woraufhin die Liste auf die eingegebene Anzahl Elemente reduziert wird.
- klicke erneut einmal am Menu "
Spells\Sanitize\Check Links"
- speichere Nif-Mesh
- fertig. Die Kollisions-Shapes wurden komplett entfernt.
Funktioniert aber nicht immer! Manchmal stürzt das CS beim Laden solcher Nifs ab - keine Ahnung wieso. Wenn's aber im CS lädt, funktioniert es auch inGame einwandfrei.
Ein anderer, aber sehr umständlicher, immer funktionierender Weg:
Auf diese Art gehen eventuelle Vertex-Colors verloren!
Deswegen
vorher mal bei NiTriShapeData schauen ob bei Has Vertex Colors ein Wert ungleich 0 steht, das hiesse JA. Bei neueren NifSkope-Versionen steht da direkt Yes/No. Deine Entscheidung ob Du auf die Vertex-Farben verzichten willst/kannst.
Zunächst benötigst Du ein Original-Mesh welches keine Kollision hat. Das sollte mindestens genau so viele NiTriShape(+Data)-Blöcke und NiTexturingProperties bzw. NiSourceTexture-Einträge haben wie das Mesh welches Du letztendlich benutzt. Am Besten natürlich gleich viele. Fleissaufgabe ein passendes zu finden... Wenn es keins gibt, siehe Abhilfe ganz unten!
Sobald Du eins hast was als "Container" für die gewünschten Dreiecks-Listen herhalten könnte dann kannst Du beginnen:
Zunächst lade das Mesh welches die unerwünschte Kollision hat, rechtsklicke im Nifskope auf jeden NiTriShapeData-Block -
nachdem Du ihn zuvor mit Linksklick markiert (ge-highlighted) hast- und wähle
"
Export Obj" - speichere auf diese Weise alle Dreiecks-Listen einzeln.
Notiere NiSourceTexture der dazugehörigen NiTexturingProperty sowie
Center und
Radius bei NiTriShapeData und evtl.
Translation und
Rotation (if != 0 )beim NiTriShape an dem die Data hängt zu jedem Shape.
Danach lade das Mesh welches keine Kollisionsinformationen enthält, rechtsklicke auf jeden NiTriShapeData-Block -
nachdem Du ihn zuvor mit Linksklick markiert hast- und importiere die einzelnen Shapes mit "
Import Obj".
Am Ende musst Du noch die passenden Texturen (NiSourceTexture) einsetzen. Wenn es hierbei Probleme gibt weil Texturen auf falschen Shapes landen musst Du evtl. die entsprechende Blocknummer des passenden NiSourceTexture-Blocks bei der NiTexturingProperty eintragen. Dazu bei
NiTexturingProperty\BaseTexture\Source die Nummer des gewünschten NiSourceTexture-Blocks einsetzen.
Ausserdem kann es sein das Du wie gesagt
Translation-Werte (Versatz) oder
Rotation vom Original abkucken musst. Schau also ob die einzelnen ursprünglichen Shapes andere Werte als 0.0, 0.0, 0.0 für Translation/Rotation haben (bei NiTriShape) damit Dein Ergebnis-Mesh richtig zusammengebaut wird.
- hat das Mesh nun noch übrige Blocks dann musst Du diese entfernen und die Anzahl der Children in der ersten NiNode richtig stellen, siehe oben wie.
-beim OBJ-Im/Export gibt es wieder Unterschiede zwischen den verschiedenen NifSkope-Versionen: Stelle sicher das notierter
Radius und
Center ordnungsgemäß übernommen wurden
-fertig. Die einzelnen Shape-Daten (Dreiecks-Listen) wurden in ein anderes kollisionsfreies Mesh eingebettet.
Du findest kein passendes Mesh? Theoretisch kannst Du auch alle NiTriShapeData-Blöcke exportieren und alle einzeln in ein kollisionsfreies Mesh mit nur einem Shape importieren. Also aus einem Ursprungsmesh mit 10 Shapes 10 Einzel-Meshes mit je 1 Shape machen, oder aus einem mit 12 Shapes 3 Meshes à 4 Shapes etc. und dann im CS aus den einzelnen Meshes das Gesamtwerk zusammenstellen.
Bei Einzel-Shape-Meshes wären Translation/Rotation dann übrigens total wurstegal da man diese ja im CS bestimmen kann
Weg für NIF ohne RootCollisionNode:
Nicht animierte Meshes die keine RootCollisionNode besitzen aber trotzdem Kollision haben sollen, haben statt dem Verweis auf die RootCollisionNode einen Zeiger auf sich selbst (BlockNummer der NiNode) als Kollision (letztes Child). Im Idealfall kann man die Kollision also auch einfach abschalten indem man die
Children an der Haupt-NiNode entsprechend manipuliert. Ich will jetzt auch nichts durcheinander bringen: Am Besten schau mal ein paar Nifs deren Kollisionsverhalten Du kennst an und prüfe wie das mit den Children an der Parent-NiNode gehandhabt wird. Richte dein Augenmerk auf die leeren Verweise in der ersten Zeile, hier ist irgendwo der Schlüssel.
Ist schon zu lange her als das ich alles noch haarklein wüsste
Edit:
Eins weiss ich noch -
Ohne RootCollisionNode aber mit Kollision sind meistens Meshes die aus nur EINEM simplen Shape bestehen, z.B. terrain_bc_rock_18
mit vielen Shapes und einem Kollisions-Shape sind meist "alte" MW-Exterior-Bauten und viele Interiors
mit vielen Shapes und vielen Kollisions-Shapes sind BM-Objekte von innen wie aussen
sämtliche Meshes die keine Face-Normals verwenden (also "weichgezeichnet" sind) und Kollisionen haben verwenden eine RootCollisionNode
kollisionsfrei sind Bodyparts, Weapons & misc-Items. Wobei von den Bodyparts sich nur solche als Container eignen die keine Animationen besitzen
selten - ganz selten gibt es Nifs die nicht mal eine NiNode haben und nur aus einem Shape bestehen. Hier gehts nur per Ex+Import der Daten
Weg 3 erlaubt es übrigens auch Shapes aus anderen Nifs (z.B. von Oblivion, Civilization, Freedom Force oder Fallout 3) in MW einzubauen. Dazu braucht man aber ein "Container-Nif" ohne RootCollisionNode.