Jump to content

DirectX: Totbox


~cab

Empfohlene Beiträge

Vorab: Ich prog zwar selbst, aber meine Erfahrungen im Game-Design/DirectX/Shader gehen gegen null. Deshalb kann es sein, dass mein Verständnis für die 3D-Modelle etwas falsch und dieser Thread damit obsolet ist.

Annahme: Ich erstelle ein Fahrzeug mit Fahrgestell. Dieses Fahrgestell liegt im Original hinter einer Blechklappe. Das Modell kann ich jetzt so bauen,
a) dass ich das Fahrgestell ignoriere, da man dieses, bedingt durch die Blechklappe eh nie sehen wird, oder
b) ich entscheide mich das Fahrgestell zu modellieren und später über eine animierte Blechklappe sichtbar zu machen (Werkstattaufenthalt etc).

Mich interessiert b); Zustand Klappe geschlossen und Fahrwerk so nicht sichtbar:

Imho hat es keinen Einfluss ob ich das Fahrwerk skaliere oder nicht, die Polygone werden mitgeschleppt und müssen mit jedem Frame neu berechnet werden, selbst wenn ich auf 0 skaliere. Die Normals über Keyframes zu flippen geht imho nicht (zumindest habe ich gerade nichts dazu gefunden) — und selbst wenn, weiß ich nicht, ob die Polygone des zu versteckenden Objektes immer noch berechnet werden, oder ob sich dass nur auf die Texturen bezieht.

Meine Frage: würde die Möglichkeit funktionieren einen speziellen Cube zu definieren, zum Beispiel mit dem Namen _IGNORE, dessen Inhalte nicht gerendert werden?

Zustand Klappe geschlossen und Fahrwerk nicht sichtbar -> Fahrgestell wird über Keyframe in die Koordinaten von _IGNORE gezogen und ist für MBS nicht mehr existent.
Zustand Klappe geöffnet und Fahrwerk sichtbar -> Fahrgestell wird über Keyframe aus dem _IGNORE-Cube gezogen, ist für MBS sichtbar und wird gerendert.

Ich stelle diese Frage, weil ich gerade ein Fahrzeug modelliere, dass ausfahrbare Puffer und andere Geschichten mitbringt, die in der Summe, selbst mit Gewalt, nicht unter 1000 Polygone zu bringen aber im Normalzustand des Fahrzeuges alle unsichtbar sind — und das wäre nur eine Fahrzeugseite.

Gruß
 

 

Bearbeitet von ~cab
Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo @~cab,

nach meinem Verständnis muss alles im Modell, das durch Animationen "Irgendwann" sichbar gemacht wird, auch immer vorhanden sein, kann also im Sinne des Meshes (Frames) nicht ausgeblendet werden. Damit wird es natürlich auch immer gerendert. Ich sehe da nur die Möglichkeit der LoD-Stufen, wobei in den höheren LoD-Stufen (die für die großen Enfernungen) möglicherweise bestimmte Animationen (z.B. Öffnen der Wartungsklappen) nicht mehr notwendig sind und dann auch die sich dahinter verbergenden Modell-Teile ganz weggelassen werden können (man würde bei diesem Beispiel auch die Wartungsklappe selbst ganz weglassen und das Karosserieblech stattdessen durchziehen, da dann auch mögliche Schlitze zwischen Klappe und restlicher Karosserie nicht mehr in Erscheinung treten).

Viele Grüße
BahnLand

Link zu diesem Kommentar
Auf anderen Seiten teilen

40 minutes ago, BahnLand said:

nach meinem Verständnis muss alles im Modell, das durch Animationen "Irgendwann" sichbar gemacht wird, auch immer vorhanden sein

Immer vorhanden sein: im Sinne von "dem Renderer zur Verfügung stehen" oder im Sinne von "am 3D-Modell hängen"?

Ich hab mal ein Dummy in Blender gebaut: Ignore.zip

 

 

Die LOD-Stufen sind nicht das Problem: eher wenn man mit _ENV_X für Glitzerkram herumspielt bzw. Anti-Alias auf höchster Stufe stehen hat. Denn das fällt dort imho auch alles mit rein. Und ich gehe davon aus, dass die Skybox mitgerendert wird, selbst wenn ein Blech darüberliegt.

Edit: Blender-File ausgetauscht. In der ersten Version war _Ignore parent von Torus, was zu Annahme hätte führen können, dass die Elemente eine Beziehung zu einander hätten. Es geht hier aber ausschließlich um die Koordinaten des _Ignore-Cubes und darum, was sich innerhalb dieser Koodinaten befindet und was nicht.

 

Bearbeitet von ~cab
Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo cab,

die Prüfung, ob ein Teilobjekt eines Modells in einem bestimmten Bereich liegt, um es nicht an die 3D-Engine zu senden, wäre aufwendiger als das zusätzliche Rendering des nur selten sichtbaren Objekts. Zudem würde es bedeuten, dass das Fahrgestell unabhängig von den anderen Objekten im Fahrzeug vorliegen müsste, um es auszublenden. Tatsächlich fasst die 3D-Engine aber alle Objekte eines Modells, die das gleiche Material verwenden, zu einem Gesamtobjekt zusammen und schickt dieses Gesamtobjekt immer am Stück an die Grafikkarte, Stichwort Batching.

Du würdest also nichts gewinnen, es wäre aufwendiger, das Fahrgestell extra zu behandeln. Nur das vollständige Entfernen aus dem Modell würde etwas bringen. Eventuell ist ja das Entfernen des Fahrgestell in einer niedrigeren LOD-Stufe eine Option für dich, dann hätte es einen positiven Impact.

Viele Grüße,

Neo

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo @~cab,

vor 2 Minuten schrieb ~cab:

Immer vorhanden sein: im Sinne von "dem Renderer zur Verfügung stehen" oder im Sinne von "am 3D-Modell hängen"?

Was ist da der Unterschied?
Nach meinem Verständnis werden alle im Modell als "zur Verarbeitung" ausgewiesene Flächen die in der x-Datei ausgewiesen sind, auch gerendert (oder ich habe das mit dem Rendern noch nicht so richtig verstanden?).

Leider fange ich mit Deiner Blender-Datei nichts an, weil ich ausschließlich mit Sketchup arbeite und mich mit Blender überhaupt nicht auskenne. In Sketchup (oder genauer im Sketchup-DirectX-Exporter) kann ich allerdings definieren, ob ich nur "bemalte" (also mit einer Farbe oder einer Textur versehene) Flächen oder alle Flächen (z.B. Vorder- und Rückseiten) in der x-Datei aufbereiten möchte. Alles, was beim Export in der x-Datei als Fläche ankommt, wird dann auch an die Grafik-Engine weitergegeben, um dort aufbereitet zu werden (das verstehe ich unter "Rendern").

Viele Grüße
BahnLand

Link zu diesem Kommentar
Auf anderen Seiten teilen

Danke für die Antworten.
 

19 minutes ago, BahnLand said:

Nach meinem Verständnis werden alle im Modell als "zur Verarbeitung" ausgewiesene Flächen die in der x-Datei ausgewiesen sind, auch gerendert (oder ich habe das mit dem Rendern noch nicht so richtig verstanden?).

Doch, alles gut :)

Und das war die Frage gewesen: Könnte man das aushelbeln. Könnte ich als Programmierer einen bestimmten Bereich definieren, von dem die Engine zwar weiß, dass die Flächen da sind, diese aber erst zur Darstellung berechnet, wenn der der Fall eintritt, dass diese Flächen diesen Bereich verlassen und nicht permanent.

Daran, dass eine entsprechende Prüfung allerdings rechenlastiger sein könnte als das eigentliche Rendern, hätte ich nun nicht gedacht. Danke  @Neo für die Info.
 

Edit: Screenshots für @BahnLand:
 

Frame1.jpg

Frame2.jpg

Frame3.jpg

Bearbeitet von ~cab
Link zu diesem Kommentar
Auf anderen Seiten teilen

Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren

Du musst ein Benutzerkonto besitzen, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen.

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde dich hier an.

Jetzt anmelden
×
×
  • Neu erstellen...