User Tag List

Ergebnis 1 bis 1 von 1

Thema: 41 | Einstieg in Shader

  1. #1
    Super-Moderator Avatar von DaEngineer
    Registriert seit
    23.06.2010
    Beiträge
    1.544
    Blog-Einträge
    2
    Renommee-Modifikator
    20

    41 | Einstieg in Shader

    Was ist ein Shader?

    Shader werden immer dann benötigt, wenn eine Textur mehr sein soll, als nur ein Standbild. Mithilfe eines Shaders lassen sich Effekte wie Transparenz, Bewegung, Spiegelung oder Verformung sowie die Materialeigenschaften konfigurieren.

    Der Shader selbst ist Text in einer einfachen Textdatei, die das Spiel versteht und umsetzt. Die im Spiel verwendeten Shaderdateien befinden sich im Ordner baseq3/scripts. Sie haben die Endung .shader. Damit eine Shaderdatei vom Spiel erkannt wird, muss ihr Name in die shaderlist.txt eingetragen werden, die sich auch im scripts Ordner befindet. In einer einzelnen Shaderdatei befinden sich mehrere Shader.

    Was benötige ich zum Erstellen eines Shaders?


    Einen einfachen Texteditor und das Wissen um die Befehle, die benutzt werden können. Da es sehr mühsam und anfangs durch kleine Fehler enorm schwierig ist, einen funktionierenden Shader selbst zu schreiben, rate ich dazu, das Tool Q3ASE (Quake 3 Arena Shader Editor) zu benutzen. Dazu im nächsten Tutorial mehr.


    Der Aufbau eines Shaders


    Shader folgen genau einzuhaltenden Regeln und Reihenfolgen. Hier seht ihr den Shader der Metallgerüsttextur base_support/x_support2.

    Name:  41_01.jpg
Hits: 183
Größe:  38,5 KB



    Die Zahlen links gehören nicht zum Shader, dabei handelt es sich um Zeilenangaben. Die Einschübe am Zeilenanfang dienen nur der besseren Lesbarkeit.

    Code:
    01 textures/base_support/x_support2
    02 {
    03    surfaceparm metalsteps    
    04    surfaceparm trans    
    05    surfaceparm alphashadow
    06    surfaceparm playerclip
    07    surfaceparm nonsolid
    08    surfaceparm nomarks    
    09    cull none
    10    nopicmip
    11       {
    12          map textures/base_support/x_support2.tga
    13          blendFunc GL_ONE GL_ZERO
    14          alphaFunc GE128
    15          depthWrite
    16          rgbGen identity
    17       }
    18       {
    19          map $lightmap
    20          rgbGen identity
    21          blendFunc GL_DST_COLOR GL_ZERO
    22          depthFunc equal
    23       }
    24 }
    • Zeile 1: Name und Pfad der Textur. Diese Zeile gibt an, in welchem Ordner die Textur im Radiant zu finden sein soll und wie ihr Name lautet
    • Zeile 2: Die geöffnete geschweifte Klammer gibt an, dass jetzt der eigentliche Inhalt des Shaders kommt. Sie wird in Zeile 24 wieder geschlossen und schließt den Shader damit ab
    • Zeile 3-8: mehrere surfaceparms ( = Oberflächenparameter). Diese Angaben definieren die Eigenschaften des Brushes, auf dem die Textur liegt
    • Zeile 9: cull none bedeutet, dass die Textur auch sichtbar ist, wenn man den Brush von der Rückseite betrachtet. Normalerweise wird sie dann unsichtbar (das gleiche Verhalten wie bei der Rückseite von Patches)
    • Zeile 10: nopicmip bewirkt, dass diese Textur auch bei niedrig eingestellten Texturdetails immer mit maximalen Details dargestellt wird
    • Zeile 11: Hier wird der erste Texturblock geöffnet. Er schließt sich in Zeile 17
    • Zeile 12: Der Befehl "map" gefolgt vom Pfad einer Textur samt Dateiendung gibt eine Textur an, die verwendet werden soll. In diesem Fall ist es das Gerüst oben auf dem Bild
    • Zeile 13: blendFunc GL_ONE GL_ZERO heißt übersetzt "stell die Textur dar" und könnte auch weggelassen werden, da es die standard Darstellungsmethode ist. Zu blendFuncs später mehr
    • Zeile 14: Dieser Befehl steuert die Darstellung der Alphakanäle. Die Gittertextur hat einen unsichtbaren Kanal, der die Transparenz kontrolliert. Zeile 14 aktiviert diesen Kanal und ermöglicht es, an manchen Stellen durch die Textur zu sehen
    • Zeile 15: depthwrite ist wegen des verwendeten Befehls "alphaFunc" nötig, damit es bei der Darstellung der Schatten keine Probleme gibt
    • Zeile 16: Sollte in jeder Texturebene mit angegeben werden. Ohne diesen Befehl zeigt r_overbrightbits 1 keine Wirkung auf der Textur (siehe Tutorial 19 => r_overbrightbits)
    • Zeile 18: Hier wird der zweite Texturblock geöffnet. Er schließt sich in Zeile 23
    • Zeile 19: map $lightmap sagt dem Shader, dass hier die Lightmap konfiguriert wird (siehe Tutorial 19 => r_lightmap)
    • Zeile 21: Diese blendFunc bewirkt, dass die Lightmap wie ein Filter über die eigentliche Textur gelegt wird. Eine ebenfalls gültige Schreibweise ist "blendFunc filter"
    • Zeile 22: Wird aus dem gleichen Grund wie Zeile 15 benötigt


    Ich werde euch im folgenden Tutorial zeigen, wie ihr Q3ASE dazu verwenden könnt, alle Shader des Spiels komfortabel anzusehen, zu modifizieren und euch das Ergebnis in Echtzeit anzeigen zu lassen.
    Geändert von DaEngineer (10.01.2016 um 16:27:05 Uhr)

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  
[email protected]