Dynamische Schatten faken

So heute mal ein kleiner Spezialeffekt: Wir faken dynamische Schattem am Beispiel eine Schatten werfenden Ventilators. Da bewegliche Schatten bzw bewegliches Licht nichts für die alte HL-Engine sind, müssen wir etwas tricksen. Wir brauchen also:

  • Wissen um die Erstellung von func_rotating und um das Verstellen von Rendermodi.
  • ZHLT mit der Null-Textur.

Schritt 1

func_rotating Nummer 1 ist unser Ventilator. Wir bauen ihn uns zusammen, verpassen ihm einen Origin-Brush und stellen ihn unseren jeweiligen Vorstellungen entsprechend ein.

Schritt 2

Von diesem func_rotating erstellen wir uns nun ein Klon. Dieses reduzrieren wir auf genau 1 Unit dicke und belegen den ganzen Ventilator (natürlich mit Ausnahme des Origin-Brushes) mit der Null-Textur.

Schritt 3

Den nun mehr nur noch 1 Unit dicken, komplett mit der Nulltextur belegten Ventilator-Klon (unser func_rotating Nr 2) platzieren wir jetzt an der Stelle, an der später der Schatten sein soll. Unebene Fläche sind dafür nicht geeignet. Jetzt bekommt unser Schatten eine Textur. Alle Flächen des func_rotating Nr 2 die direkt zum Ventilator (func_rotating Nr 1) zeigen bekommen jetzt eine einfache, schwarze Textur, z.B. die Textur „BLACK“ aus der halflife.wad. Alles was an den Seiten liegt oder zu der Fläche, auf der der Schatten nacher sein soll gehört, behält die Nulltextur.

Schritt 4

Jetzt haben wir zwei func_rotatings: Den „normalen“ Ventilator und den Schatten, den wir in Schritt 3 mit Null- und Blacktextur belegt haben. Damit der Schatten nun auch wie ein Schatten aussieht, und nicht wie ein schwarzer, dünner Klon vom eigentlichen Ventilator müssen wir am Schatten-Rotating noch etwas einstellen:

  • render mode - texture
  • fx amount - 100

Den FX Amout kann man variieren. Je höher der FX Amount ist, um so dunkler ist der Schatten. Bei den Flags müssen wir noch „not solid“ anhaken.

An allen anderen Werten besser nichts ändern, damit sich der Schatten synchron zum Ventilator bewegt.

fake_schatten_01.jpg

Zusammenfassung

Unter/über dem eigentlichen Ventilator (jedenfalls dicht an der Fläche, an der sich der Schatten befinden soll) befindet sich ein weiteres func_rotating, das die gleiche Fläche wie der Ventilator hat, aber nur 1 Unit tief ist. Die für den Schattenwurf relevante Fläche ist mit der BLACK-Textur belegt. Alle anderen Flächen (Originbrush ausgeschlossen) tragen die NULL-Textur der ZHLT und sind deshalb unsichbar bzw nach dem kompilieren nicht mehr vorhanden. Es bleibt also eine quasi-zweidimensionale schwarze Fläche über. Wenn wir den FX Amount und den Render Mode verstellen, machen wir diese 2D-Fläche transparent. Bewegt sich diese Fläche nun synchron mit dem eigentlichen Ventilator, entsteht die illusion eines Schattenwurfs.

Dieses System lässt sich auch auf andere HL-Entities übertragen. z.B. bei func_trains ließe es sich sinnvoll einsetzen, wenn sich neben dem „normalen“ Train noch ein „Schatten-Train“ synchron bewegen würde. Auch statische Schattem kann man so erzeugen (logisch) nur ob sich das nicht zu sehr auf die r_speeds auswirkt und/oder sich mit den „normalen“ Schatten optisch beißt sei dahingestellt.

Anhang

Anstelle von Brushkonstruktionen lassen sich auch natürlich auch Alphatexturen verwenden. Das sieht unter Umständen besser aus und schont auch die r_speeds mehr, kostet dafür mehr wertvollen Texturspeicher. Auch ist es möglich, anders herum Lichteffekte per additiven Rendermode zu machen.

Die Verwendung aller Dokumente einschließlich der Abbildungen ausschließlich zu nichtkommerziellen Zwecken. Verbreitung des Dokuments auf Speichermedien, (insbesondere auf CD-ROMs als Beilage zu Zeitschriften und Magazinen oder sog. "Mission-Packs" etc.) ist untersagt.
 
half-life/tutorials/dynamische_schatten_faken.txt · Zuletzt geändert: 2006/03/15 16:29 von Richman