Jump to content
Sign in to follow this  
~cab

DirectX: Totbox

Recommended Posts

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ß
 

 

Edited by ~cab

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
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.

 

Edited by ~cab

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Edited by ~cab

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×