Automatisiert oder Kontrolliert?

Programmiersprachen, APIs, Bibliotheken, Open Source Engines, Debugging, Quellcode Fehler und alles was mit praktischer Programmierung zu tun hat.
Antworten
Benutzeravatar
Zudomon
Establishment
Beiträge: 2257
Registriert: 25.03.2009, 07:20
Kontaktdaten:

Automatisiert oder Kontrolliert?

Beitrag von Zudomon »

Ich überlege gerade, was im Endeffekt besser ist. Bisher habe ich immer versucht, alles so weit wie möglich zu automatisieren.

Ein aktueller Fall: Man bestimmt die Vertexdeklaration. Nachdem man fertig ist könnte man entweder direkt sagen, kompiliere die Deklaration, oder man könnte abwarten, bis diese wirklich gebraucht wird un die dann kompilieren.
Den Vorteil beim automatisieren sehe ich darin, dass man sich um weniger kümmern muss, was es einfacher macht. Außerdem wirds erst erstellt, wenn es auch angewendet wird. Wird es nie angewendet, wirds auch nie erstellt. Der Nachteil ist allerdings, dass es zu einem Lag kommt ( gut, bei ner Deklaration nicht, aber bei Shader Kompilierung oder bei Texturen bzw. Objekte auf jeden Fall ). Außer man würde vielleicht dann im Hintergrund kompilieren und erst wenns fertig ist, anzeigen. Dadurch kommt es natürlich zu einem Darstellungsverzug. Bei Objekte, die nachträglich in der Szene erscheinen schon nicht so schön.

Was ist eurer Meinung nach besser, effektiver, sinnvoller?
Benutzeravatar
Schrompf
Moderator
Beiträge: 4886
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas
Wohnort: Dresden
Kontaktdaten:

Re: Automatisiert oder Kontrolliert?

Beitrag von Schrompf »

Das Prinzip nennt sich Lazy Evaluation. Ich habe es früher sehr gern benutzt, aber je mehr ich Abstand gewinne, desto schlechter erscheint es mir. Ich würde es mal so beschreiben:

a) Du *musst* es anwenden. Z.B. weil Du 2GB Texturen hast, aber nur 500MB davon realistischerweise gleichzeitig unterbringen kannst. In dem Fall führt kein Weg dran vorbei.
b) Du könntest es anwenden, um etwas Rechenzeit bis zur ersten Benutzung zu verschieben.

Nur b) lohnt überhaupt die Diskussion. Und da würde ich in quasi allen Fallen davon abraten. Die Rechenzeit für die Erstellung der Resource ist immer dieselbe. Dafür holt man sich bei jedem Zugriff noch einen Test rein, ob die Resource schon erstellt ist. Man verliert die const correctness. Und man bekommt potentiell einen Haufen Ärger in einer Multithreading-Umgebung. Ich würde solche verzögerten Arbeiten also nur einbauen, wenn ich dadurch sehr viel sparen könnte.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
kaiserludi
Establishment
Beiträge: 467
Registriert: 18.04.2002, 15:31

Re: Automatisiert oder Kontrolliert?

Beitrag von kaiserludi »

Schrompf hat geschrieben:Das Prinzip nennt sich Lazy Evaluation. Ich habe es früher sehr gern benutzt, aber je mehr ich Abstand gewinne, desto schlechter erscheint es mir. Ich würde es mal so beschreiben:

a) Du *musst* es anwenden. Z.B. weil Du 2GB Texturen hast, aber nur 500MB davon realistischerweise gleichzeitig unterbringen kannst. In dem Fall führt kein Weg dran vorbei.
b) Du könntest es anwenden, um etwas Rechenzeit bis zur ersten Benutzung zu verschieben.

Nur b) lohnt überhaupt die Diskussion. Und da würde ich in quasi allen Fallen davon abraten. Die Rechenzeit für die Erstellung der Resource ist immer dieselbe. Dafür holt man sich bei jedem Zugriff noch einen Test rein, ob die Resource schon erstellt ist. Man verliert die const correctness. Und man bekommt potentiell einen Haufen Ärger in einer Multithreading-Umgebung. Ich würde solche verzögerten Arbeiten also nur einbauen, wenn ich dadurch sehr viel sparen könnte.
c) man möchte es anwenden, weil viele Texturen nur unter bestimmten Bedingungen je benutzt werden, so dass der Test billig ist im Vergleich zu dem Preis, den man für die Texturen zahlt, die man ohne ihn lädt, aber mit ihm nie geladen hätte. Da gilt es dann eben, abzuwegen, wie wahrscheinlich man eine Ressource braucht und wie teuer es ist, sie zu erstellen und wie viel Ärger man sich potentiell damit einhandelt.
"Mir ist auch klar, dass der Tag, an dem ZFX und Developia zusammengehen werden der selbe Tag sein wird, an dem DirectGL rauskommt."
DirectGL, endlich ist es da
:)

"According to the C++ standard, it's "undefined". That's a technical term that means, in theory, anything can happen: the program can crash, or keep running but generate garbage results, or send Bjarne Stroustrup an e-mail saying how ugly you are and how funny your mother dresses you." :shock:[/size]
Benutzeravatar
Schrompf
Moderator
Beiträge: 4886
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas
Wohnort: Dresden
Kontaktdaten:

Re: Automatisiert oder Kontrolliert?

Beitrag von Schrompf »

Das stimmt, gerade Texturen sind bisweilen sehr regional begrenzt in ihrer Verwendung. Wenn der Spieler da nicht hinkommt, hat man sie umsonst geladen. Aber man braucht doch erstaunlich viel Daten - auch Texturen - bereits ab Start. Daher überlege ich z.B. gerade, bei den Splitterwelten wieder ein Precaching einzubauen, um die ersten 20s keine aufploppenden Objekte und Texturen betrachten zu müssen. Abwägungssache.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Benutzeravatar
Krishty
Establishment
Beiträge: 8268
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Automatisiert oder Kontrolliert?

Beitrag von Krishty »

Direct3D führt sowieso eine Lazy Evaluation für dich durch. Darum müssen auch viele Spiele einen oder mehrere Cache-Durchheiz-Frames zeichnen – erst dann werden nämlich die Shader und Vertex-Deklarationen tatsächlich kompiliert. Täte man das nicht, hätte man scheinbar wahlloses Geruckel, sobald ein Shader zum ersten Mal benutzt wird (heute sind die Shader ja komplex und der HLSL-Compiler immernoch Müll). Modern Warfare fällt mir in diesem Zusammenhang ein; ich weiß aber nicht mehr, was genau da vorfiel.

Gruß, Ky
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Antworten