DGL
https://delphigl.com/forum/

@[Game] Gael
https://delphigl.com/forum/viewtopic.php?f=14&t=8338
Seite 1 von 28

Autor:  littleDave [ Mi Apr 08, 2009 15:25 ]
Betreff des Beitrags:  @[Game] Gael

So, das hier jetzt der Kommentarthread.

Zum Projekt: -> hier entlang

Grüße

Autor:  Lord Horazont [ Di Apr 14, 2009 11:41 ]
Betreff des Beitrags: 

Hmm.. Das klingt interessant. Ich bin mal gespannt, was dabei rauskommt. So umherschleichen, Schatten ausnutzen und sowas, dafür bin ich zu haben :)

Viel Erfolg!

Gruß Lord Horazont

Autor:  Flash [ So Apr 19, 2009 10:04 ]
Betreff des Beitrags: 

Die Bilder sehen schon richtig gut aus. Was noch auffällt (und ein ständiges Schattenproblem ist) sind die harten kanten der Schatten. Das fällt vor allem bei dem Maschendrahtzaun auf.

Kannst du die Schatten nicht ein bisschen blurren?

Autor:  littleDave [ So Apr 19, 2009 14:08 ]
Betreff des Beitrags: 

Bei der Shadow-Map hab ich schon nen blur-filter drinnen, jedoch nen sehr kleinen wegen der Performance. Wenn ich den Filter noch etwas erweitere, brauche ich sehr viel mehr Texture-Lookups in Shader, was die Performance extrem senkt. Im Moment sind es 4 Depth-Zugriffe pro Texel, ich kann mal schauen, was bei 16 Zugriffen raus kommt.

Bei den Screenshots hab ich ne Shadow-Map-Size von 1024x1024, bei 512x512 sind die Schatten automatisch etwas weicher, jedoch ungenauer. Ich schau mal, welches Verhältniss zwischen Shadow-Map-Size und Blur-Filter die besten Ergebnisse bringt.

Autor:  igel457 [ So Apr 19, 2009 19:43 ]
Betreff des Beitrags: 

Hallo,

deine Arbeit sieht bis jetzt richtig super aus (besonders beeindruckt hat mich das Anformen des Schattens an die Oberfläche), ich hoffe, dass dein Projekt irgendwann mal fertig wird!

Ich drücke dir die Daumen,
Andreas

Autor:  Evil-Devil [ Mo Apr 20, 2009 08:03 ]
Betreff des Beitrags: 

Bei solchen Bildern finde ich Screenshots immer teilschön. Ein Video das alles in Bewegung zeigt wäre viel schöner :)

Autor:  littleDave [ Mo Apr 20, 2009 16:50 ]
Betreff des Beitrags: 

Ok, ich hab mal nen eben nen kurzes Video erstellt (30 Sekunden) :-). In dem Video (de)aktiviere ich nacheinander ein paar Lichter, wobei die Lichter alle unterschiedliche Farben haben.

Ich hab hier mal ne Page mit Videos veröffentlicht.

Autor:  Lord Horazont [ Mo Apr 20, 2009 17:43 ]
Betreff des Beitrags: 

Faszinierend. Die Qualität, die du mit deiner Engine erreichst (Shadows auf der BumpMap, diese ganzen Lichter etc.) ist echt beeindruckend. Was noch fehlt ist sowas wie Motion Blur... Aber das würde wohl zu viel Leistung ziehen.

Gruß Lord Horazont

Autor:  littleDave [ Mo Apr 20, 2009 19:02 ]
Betreff des Beitrags: 

Bevor ich mich mit Post-Scene-Effects kümmere, werd ich mich erstmal um die Tools kümmern, die zum Erstellen/Bearbeiten von Levels notwendig sind ;-). Bisher editier ich alle XML-Daten von Hand, was leider etwas unproduktiv ist :roll:

Ich hab mir gerade nochmal das Video angeschaut und fand es doch seeeehr kurz - daher hab ich noch schnell ein längeres (2 min) gemacht. Link ist der gleiche wie vorhin

Autor:  Flash [ Mo Apr 20, 2009 20:01 ]
Betreff des Beitrags: 

Kannst ja mal ein Video bei Youtube veröffentlichen. Hat den Vorteil, dass man den Nervenden Quicktimeplayer nicht brauch und du bekommst sicherlich ein paar extra Tester. ;)

Autor:  littleDave [ Mo Apr 20, 2009 20:45 ]
Betreff des Beitrags: 

Irgendwie steh ich heut neben mir - warum hab ich nicht gleich an YouTube gedacht :oops:.

Ich hab jetzt ne neue Seite mit Videos erstellt (hier) - ok, im Momenet hab ich nur das lange Video drinnen, jedoch schau ich, dass ich Neuerungen als Video dort auch veröffentlicht.

Das erste Video direkt auf YouTube ist hier

Danke Flash für den guten Tip

Autor:  Flash [ Di Apr 21, 2009 06:53 ]
Betreff des Beitrags: 

Ahh... jetzt konnt ichs mir auch angucken. Das Bumpmapping auf der Wand kommt gut.
Bei sehr hellem Licht siehts sehr künstlich aus. Vermutlich liegt das aber am harten Licht, was einem nicht so alltäglich im echten Leben über den Weg läuft. (Außer man ist berühmt und steht ständig im Blitzlichtgewitter. ;) )

Autor:  Evil-Devil [ Di Apr 21, 2009 11:49 ]
Betreff des Beitrags: 

Wow, schaut richtig gut aus :)
Ich hoffe ich krieg sowas eines Tages auch hingezaubert.

Bin mal gespannt wie das später in deinem Game dann aussehen wird.

Autor:  Sellmann [ Di Apr 21, 2009 13:59 ]
Betreff des Beitrags: 

mir gefällts auch richtig gut, ich würde dazu gern einmal wissen wie du genau das rendering anstellst. Also was du wann ungefähr machst etc. wäre das möglich da mal hinter die Kulissen gucken zu dürfen?

mit besten grüßen, Sellmann

Autor:  littleDave [ Di Apr 21, 2009 16:59 ]
Betreff des Beitrags: 

Danke erstmal für euer Feedback; freut mich, dass es gut ankommt :-)

Flash hat geschrieben:
Ahh... jetzt konnt ichs mir auch angucken. Das Bumpmapping auf der Wand kommt gut.
Bei sehr hellem Licht siehts sehr künstlich aus. Vermutlich liegt das aber am harten Licht, was einem nicht so alltäglich im echten Leben über den Weg läuft. (Außer man ist berühmt und steht ständig im Blitzlichtgewitter. ;) )

Ich hab das Licht der Taschenlampe mehr oder weniger absichtlich etwas hoch eingestellt. Ich kann das Licht stufenlos heller/dunkler machen. Später wollt ich vielleicht noch HDR einbauen - dann wirkt es vielleicht wieder etwas natürlicher.

Sellmann hat geschrieben:
mir gefällts auch richtig gut, ich würde dazu gern einmal wissen wie du genau das rendering anstellst. Also was du wann ungefähr machst etc. wäre das möglich da mal hinter die Kulissen gucken zu dürfen?

mit besten grüßen, Sellmann

Klar kann ich sagen, wie ich es bisher mache - ist an sich nicht so schwer; das erklären ist jedoch schon etwas schwerer, da ich nicht weiß, wo ich anfangen soll ;-) ich versuch es mal:

Also Grundlegend ist es so: ich habe eine Liste von Materials. Jedes Material kann verschiedene Texturen und Einstellungen haben. Die Wand z.B. hat die Wandtextur an sich sowie eine Normal-Height-Map (RGB-Werte: Normalenvektor, Alpha: Height-Value). Zudem ist das Blending der Wand deaktiviert (ist ja nicht durchsichtig ;-)).

So, jetzt hab ich natürlich Shader drinnen - insgesammt sehr viele (im Moment 14 Shader). Das klingt jetzt nach viel, jedoch stimmt das so nicht ganz: eigendlich habe ich 2 Mega-Shader, einen Depth-Pass und einen Color-Pass-Shader. Der Shader-Quelltext besteht aus extrem vielen #ifdef #else #endifs. Für jeden Material-Typ gibt es einen eigenen Shader. Das Material (de)aktiviert einfach nur die #defines und läd dann den Mega-Shader. Somit ist der Mega-Shader universell und gleichzeitig individuell: für ein Material ohne Texturen werden alle Texturen im Shader deaktiviert - und zwar per Quelltext und nicht später erst mit if-Anweisungen, was den Shader natürlich sehr viel schneller macht.

Nun zu den Vertice: Wie ich im Project-Thread schon kurz erklärt habe, gibt es für jedes Material einen VBO. Vor dem Zeichnen des VBOs wird das entsprechende Material gebunden, der VBO gezeichnet und das Material wieder entbunden. Beim binden des Materials wird gleichzeitig noch der endsprechende Shader gebunden.

Jetzt hab ich eine Klasse RenderPass. Diese Klasse hat ein einfaches CallBack-Event, in dem dann die VBOs gezeichnet werden. Zudem hat diese Klasse noch Properties, mit denen ich einstellen kann, was in dem Pass alles gezeichnet werden soll (z.B. keine Texturen, usw).

Für jeden RenderPass gibt es ein Set von Shadern. Das heißt: wenn ich 3 Render-Passes binde, hat jedes Material bis zu 3 Shader. Beim binden des Materials übergeb ich noch den aktuellen RenderPass, so das der korrekte Shader für den jeweiligen RenderPass gebunden wird.

Bei den Shadern gibt es noch eine weitere Unterteilung, die fast genauso funktioniert - ich unterteile die Shader noch nach Anzahl von Lichtern, die in einem RenderPass gezeichnet werden sollen.

Für die Schatten zeichne ich erst für jedes aktive Licht die Tiefentextur per FBO (in dem Video mit einer Auflösung von 512x512). Dabei werden natürlich schon die Shader benutzt: für die normalen Oberflächen nen ganz simpler und bei dem Zaun noch einen mit Alpha-Test.
Code:
  1. if (texture2D(texture0, gl_TexCoord[0].st).a < 0.2)
  2.   discard;
  3.  


Dann zeichne ich einen Tiefen-Pre-Pass ohne ein Material (also auch ohne Shader). Das ist, damit am Ende wirklich nur die sichtbaren Texel durch den Shader müssen.

Dann kommt das eigendliche Zeichnen:
zuerst schaue ich, wieviel Lichter ich zeichnen muss. Dann wählt meine Engine aus, ob die Grafikkarte 1 Licht pro Renderpass oder 2 Lichter pro RenderPass pro Texel bearbeiten soll. Die Auswahl ist bisher noch hardcoded, wird später jedoch anhand der max. verfügbaren varyings ausgewählt. Dann zeichne ich für jedes Licht nacheinander die komplette Szene und blende das Ergebniss einfach zusammen.

Ganz zum schluss mach ich das gleiche nochmal, jedoch diesmal nur die Objekte, die Blending aktiviert haben. Also zusammengefasst: erst zeichne ich alle Materials, die Blending nicht aktiviert haben und dann zeichne ich die Objekte mit Blending.

Die Schattenberechnung an sich mach ich mit GL_ARB_shadow und im Shader benutz ich die ShadowMap einfach als Color-Faktor. Bei den Softshadows benutz ich einfach den Durchschnitt von 4 Shadow-Map-Texel.

Seite 1 von 28 Alle Zeiten sind UTC + 1 Stunde
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/