Decals: Unterschied zwischen den Versionen

Aus DGL Wiki
Wechseln zu: Navigation, Suche
 
K (Bot: konvertiere/korrigiere <BR>)
 
(3 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 2: Zeile 2:
 
(z.Deutsch : '''Abziehbild''')
 
(z.Deutsch : '''Abziehbild''')
  
<br>
+
 
 +
 
 
== Begriffsdefinition ==
 
== Begriffsdefinition ==
Unter einem ''Decal'' (Im Deutschen gibt es leider keinen wirklich passenden Begriff) versteht man ein nachträglich auf die Szene aufgebrachtes Objekt, das während der Laufzeit (also nicht, oder nur selten, im Editor) auf die Szene aufgebracht werden soll. Oft werden diese für '''Blutflecken''', '''Einschusslöcher''', etc. benutzt und dürfen v.a. in aktuellen Shooter nicht fehlen, geben sie dem Spieler doch einen gewissen Grad an Interaktion mit den Umgebungsmaterialien, ohne jedoch zu aufwendig zu sein.
+
Unter einem '''Decal''' versteht man nachträglich auf die Szene aufgebrachte [[Textur]]en. Diese werden während der Laufzeit (also nicht, oder nur selten, im Editor) mit der Szene kombiniert. Oft werden diese für '''Blutflecken''', '''Einschusslöcher''', etc. benutzt und dürfen v.a. in aktuellen Shooter nicht fehlen, geben sie dem Spieler doch einen gewissen Grad an Interaktion mit den Umgebungsmaterialien, ohne jedoch zu aufwendig zu sein.
 +
 
 +
 
 +
 
  
<br>
 
 
== Technische Umsetzung ==
 
== Technische Umsetzung ==
 
Da die ''Decals'' genau "auf" der Levelgeometrie aufliegen müssen (Einschusslöcher die irgendwo in der Luft hängen sehen nicht toll aus), ist es unbedingt nötig irgendeine Form von ''Dreiecks-Strahl-Intersektion'' zu implementieren. Schiesst der Spieler nun z.B. auf eine Wand, so muss man von der Spieler(Waffen)position aus einen Strahl "abschiessen" und prüfen an genau welcher Stelle dieser mit der Wand kollidiert. Nun hat man den Mittelpunkt des ''Decals'', was dann fehlt sind noch die vier (wenn das Decal als GL_QUAD dargestellt wird) Eckpunkte, die aber auch über den Intersektionstest herausgefunden werden können. Hat man alle diese Punkt ermittelt kann man dieses Quad in seiner Liste speichern und mit der Tiefentestfunktion '''GL_LEQUAL''' rendern.
 
Da die ''Decals'' genau "auf" der Levelgeometrie aufliegen müssen (Einschusslöcher die irgendwo in der Luft hängen sehen nicht toll aus), ist es unbedingt nötig irgendeine Form von ''Dreiecks-Strahl-Intersektion'' zu implementieren. Schiesst der Spieler nun z.B. auf eine Wand, so muss man von der Spieler(Waffen)position aus einen Strahl "abschiessen" und prüfen an genau welcher Stelle dieser mit der Wand kollidiert. Nun hat man den Mittelpunkt des ''Decals'', was dann fehlt sind noch die vier (wenn das Decal als GL_QUAD dargestellt wird) Eckpunkte, die aber auch über den Intersektionstest herausgefunden werden können. Hat man alle diese Punkt ermittelt kann man dieses Quad in seiner Liste speichern und mit der Tiefentestfunktion '''GL_LEQUAL''' rendern.
 
Einschusslöcher stellen allerdings die einfachste Form der Decals dar. Da sie recht klein sind und im Normalfall wieder verschwinden, reicht oft ein einfaches Rechteck aus.  
 
Einschusslöcher stellen allerdings die einfachste Form der Decals dar. Da sie recht klein sind und im Normalfall wieder verschwinden, reicht oft ein einfaches Rechteck aus.  
Komplexere Decals wie z.B. größere Blutflecken (gutes Beispiel für eine gelungen Umsetzung ist '''Rainbow Six 3 : Ravenshield (PC)''') sind aufwendiger, da diese sich auch z.B. um Ecken oder ganze Objekte "biegen" müssen. Um sowas zu realisieren muss man wie gewohnt die Intersektionspunkt ermitteln und dann ggf. das Quad in kleinere Objekte (z.B. als Dreiecke) aufteilen um es entsprechend um das Objekt legen zu können.
+
Komplexere Decals wie z.B. größere Blutflecken (gutes Beispiel für eine gelungen Umsetzung ist '''Rainbow Six 3 : Ravenshield (PC)''') sind aufwendiger, da diese sich auch z.B. um Ecken oder ganze Objekte "biegen" müssen. Um sowas zu realisieren muss man wie gewohnt die Intersektionspunkt ermitteln und dann ggf. das Quad in kleinere Objekte (z.B. als Dreiecke) aufteilen um es entsprechend um das Objekt legen zu können. Eine andere, aufwändigere Möglichkeit wären hier [[Projezierte Textur]].
 +
 
 +
 
 +
 
  
<br>
 
 
== Verwaltung ==
 
== Verwaltung ==
Im Normalfall müssen die ''Decals'' nicht für immer im Level verbleiben, zumal es davon bei heftigen Gefechten (und größeren Maps) recht viele geben kann. Aus diesem Grund empfiehlt es sich diese in einer '''dynamischen Liste''' (In Delphi : ''TList'') zu verwalten, und langsam über die Zeit auszublenden. Das wird auch in kommerziellen Titeln gemacht und kein Spieler wird sich daran stören. Als Verbesserung kann man z.B. noch einbauen dass kleienre Decals schneller verschwinden als große, oder das diese erste verschwinen wenn sie für einen bestimmten Zeitraum ausserhalb des Spielerblickfeldes liegen.
+
Im Normalfall müssen die ''Decals'' nicht für immer im Level verbleiben, zumal es davon bei heftigen Gefechten (und größeren Maps) recht viele geben kann. Aus diesem Grund empfiehlt es sich diese in einer '''dynamischen Liste''' (In Delphi : ''TList'') zu verwalten, und langsam über die Zeit auszublenden. Das wird auch in kommerziellen Titeln gemacht und kein Spieler wird sich daran stören. Als Verbesserung kann man z.B. noch einbauen dass kleienre Decals schneller verschwinden als große, oder das diese erste verschwinden, wenn sie für einen bestimmten Zeitraum ausserhalb des Spielerblickfeldes liegen.
 +
 
 +
 
 +
 
  
<br>
 
 
== Beispiel ==
 
== Beispiel ==
 
[[Bild:Decals.jpg]]<br>
 
[[Bild:Decals.jpg]]<br>
 
Ein Bild aus RavenShield (© 2002 Red Storm Entertainment, Inc). Die beiden Blutflecken sind Decals, man beachte v.a. den rechten Blutfleck der sich "um" den Türrahmen gelegt hat.
 
Ein Bild aus RavenShield (© 2002 Red Storm Entertainment, Inc). Die beiden Blutflecken sind Decals, man beachte v.a. den rechten Blutfleck der sich "um" den Türrahmen gelegt hat.

Aktuelle Version vom 22. April 2006, 19:09 Uhr

Decals

(z.Deutsch : Abziehbild)


Begriffsdefinition

Unter einem Decal versteht man nachträglich auf die Szene aufgebrachte Texturen. Diese werden während der Laufzeit (also nicht, oder nur selten, im Editor) mit der Szene kombiniert. Oft werden diese für Blutflecken, Einschusslöcher, etc. benutzt und dürfen v.a. in aktuellen Shooter nicht fehlen, geben sie dem Spieler doch einen gewissen Grad an Interaktion mit den Umgebungsmaterialien, ohne jedoch zu aufwendig zu sein.



Technische Umsetzung

Da die Decals genau "auf" der Levelgeometrie aufliegen müssen (Einschusslöcher die irgendwo in der Luft hängen sehen nicht toll aus), ist es unbedingt nötig irgendeine Form von Dreiecks-Strahl-Intersektion zu implementieren. Schiesst der Spieler nun z.B. auf eine Wand, so muss man von der Spieler(Waffen)position aus einen Strahl "abschiessen" und prüfen an genau welcher Stelle dieser mit der Wand kollidiert. Nun hat man den Mittelpunkt des Decals, was dann fehlt sind noch die vier (wenn das Decal als GL_QUAD dargestellt wird) Eckpunkte, die aber auch über den Intersektionstest herausgefunden werden können. Hat man alle diese Punkt ermittelt kann man dieses Quad in seiner Liste speichern und mit der Tiefentestfunktion GL_LEQUAL rendern. Einschusslöcher stellen allerdings die einfachste Form der Decals dar. Da sie recht klein sind und im Normalfall wieder verschwinden, reicht oft ein einfaches Rechteck aus. Komplexere Decals wie z.B. größere Blutflecken (gutes Beispiel für eine gelungen Umsetzung ist Rainbow Six 3 : Ravenshield (PC)) sind aufwendiger, da diese sich auch z.B. um Ecken oder ganze Objekte "biegen" müssen. Um sowas zu realisieren muss man wie gewohnt die Intersektionspunkt ermitteln und dann ggf. das Quad in kleinere Objekte (z.B. als Dreiecke) aufteilen um es entsprechend um das Objekt legen zu können. Eine andere, aufwändigere Möglichkeit wären hier Projezierte Textur.



Verwaltung

Im Normalfall müssen die Decals nicht für immer im Level verbleiben, zumal es davon bei heftigen Gefechten (und größeren Maps) recht viele geben kann. Aus diesem Grund empfiehlt es sich diese in einer dynamischen Liste (In Delphi : TList) zu verwalten, und langsam über die Zeit auszublenden. Das wird auch in kommerziellen Titeln gemacht und kein Spieler wird sich daran stören. Als Verbesserung kann man z.B. noch einbauen dass kleienre Decals schneller verschwinden als große, oder das diese erste verschwinden, wenn sie für einen bestimmten Zeitraum ausserhalb des Spielerblickfeldes liegen.



Beispiel

Decals.jpg
Ein Bild aus RavenShield (© 2002 Red Storm Entertainment, Inc). Die beiden Blutflecken sind Decals, man beachte v.a. den rechten Blutfleck der sich "um" den Türrahmen gelegt hat.