Artikel » MoHAA Tutorials » Der BBMD-Filmprojektor4: Radiant Artikel-Infos
   

MoHAA Tutorials   Der BBMD-Filmprojektor4: Radiant
07.01.2006 von cubus

Projektor Teil 4 - Radiant MoH Projektor-Tutorial: Radiant

Radiant

 

Erstellt im Radiant drei zusammenhängende Räume, welche ihr mit Türen verbindet.

Der Erste ist euer Startraum, wo ihr den Playerstart und später die einzelnen Trigger für die Ablaufsteuerung einsetzt.

Der Zweite Raum ist der eigentliche Kinoraum mit Filmleinwand und Projektor.

Der Dritte Raum ist ein „Hilfsraum“ zum „Spawnen“ und „Vorbelichten“ der Filmbilder.

 

 

Warum nun 3 Räume werdet ihr euch sicherlich fragen. Im vorherigen Teil erwähnte ich bereits das Performance-Problem. In einer kleinen Testmap ist dies noch kein sonderlich großes Problem,

allerdings in einer komplexen Map mit massig Enemy’s und anderer Action wird das Game schon erheblich beansprucht. Daher haben wir die Steuer-Trigger für das verschieben der Pic’s auf die Filmleinwand und das abwechselnde Ein- bzw. Ausblenden der selbigen in verschiede Bereiche unserer Kampagnenmap gelegt. Hier waren die Trigger so angeordnet, dass der Player die Trigger in Momenten auslöst, wo nur eine geringe Action herrscht.

 

Was brauchen wir nun an Elementen für unseren Kinofilm.

 

1.) Die Trigger zum Steuern des Ablaufs

 

1.1)

Entity:  trigger_once

Key:     $targetname

Value:   projector_trigger

 

Dieser Trigger startet später die Projektoranimationen wie Sound, Projektorlampe (Corona) und den Lichtstrahl (Beam)

 

Platziert diesen so in den Startraum, dass der Player diesen Trigger durchlaufen muß.

 

1.2)

Entity:  trigger_once

Key:     $targetname

Value:   movie_effect_trigger

 

Dieser Trigger startet später den thread, der für das Ein- und Ausblenden der Bilder, den eigentlichen Film, verantwortlich ist.

 

Plaziert diesen ebenfalls so in den Startraum, dass der Player diesen Trigger durchlaufen muß. Allerdings sollte dieser Trigger erst als zweites durchlaufen werden, also nach dem durchschreiten des „projector_trigger“.

 

 

 

2.) Die Brushes für die Bilder

Hierfür wählte ich je darzustellendem Bild einen Brush in den Dimensionen x = 128, y = 1 und z = 88 units, die wir nach der Erstellung zum „script_object“ machen.

 

 

Die Abmessungen 128 x 88 entsprechen etwa einem Verhältnis von 1:2,75 des Originalbildes, somit werden Verzerrungen beim Texturfiting vermieden.

Ferner editieren wir das Entitymenü unseres Brushes wie folgt:

 

Entity:  script_object

Key:     $targetname

Value:   projector_face0

Spawnflags:      1                      = not solid

 

Für das zweite Bild ändern wir den targetnamen auf projector_face1, projector_face2 für das dritte usw.

 

Am Ende sollten wir dann insgesamt 40 brushes haben

 

Hilfreich ist es, wenn man zunächst alle brushes nebeneinander erstellt.

 

 

Jeden dieser Brush’s belegen wir zunächst allseitig mit der „NoDraw“-Textur.

 

 

Jetzt markieren wir die sichtbare Seite des ersten script_object-brushes mit [Umschalt+STRG+LMT] und geben im Textursuchfeld das Schlüsselwort „meinfilm“ ein. Nach kurzer Zeit stehen unsere nach Abschnitt 1 erstellten Bilder zur Auswahl. Die selektierte Seite belegen wir dann mit Bild1 und wählen diesen wieder ab, wechseln zum zweiten Brush und wiederholen die Texturauswahl mit dem zweiten Bild usw.

 

 

Wenn wir alle Brushes einseitig belegt haben platzieren wir alle brushes in den, von mir als Belichtungsraum benannten, dritten Raum. Alle 40 brushes werden dann exakt übereinandergeschoben, so dass sie im Radiant nur als ein einziger zu erkennen sind.

Zur Erleichterung habe ich in die Beispiel.pk3 ein Prefab mit den 40 Einzelbrushes nebeneinander hinzugepackt.

 

3.) Lichtquelle zum Vorbelichten

Vor unsere script_objects-brushes setzen wir mit etwas Abstand ein light-entity mit den Einstellungen:

 

Classname:      light

Angles:             0 270 0             bzw. Werte nach der Ausrichtung eurer Map einstellen

Radius:             90                   

 

Mittels dieses Light’s werden alle Bilder beim Mapspawn in diesem Raum belichtet, behalten diese Belichtung bei und leuchten daher schön im Dunkeln, wenn wir sie in die Endposition verschieben.

 

 

4.) Filmleinwand

Im zweiten Raum, dem Kinosaal werden wir nun einige entity’s setzen, um das Ambiente eines Filmsaals ein wenig nachzuempfinden.

Es wird keine eigentliche Leinwand benötigt, da die Bildbrushes selbst dargestellt werden. Also so Geschichten wie Rahmen und Hintergrund sind optische Verzierung und können individuell gestalltet werden. Wir benötigen lediglich ein „script_origin“, an den später die Bildbrushes hin verschoben werden.

Dieses script_origin platzieren wir exakt an die Wand, wo später der Film erscheinen soll. Einträge im Entity-Menü wie folgt:

 

Classname:      script_origin

$targetname:     movie_start_node

Angle:              90                    oder Wert nach eurem Ermessen und Lage der Projektionsfläche

 

 

5.) Der Projektor

5.1) Projektor

Hierbei handelt es sich um den bereits in der MoH:AA erschienenen Version des „static/projector.tik“. Diesen setzt bitte in einiger Entfernung direkt vor das Leinwand-script_origin. Achtet dabei auch auf Höhenposition des Projektors.

Nach dem Ausrichten zum Leinwand-script_origin sind keine weiteren Einträge im Entity-Menü notwendig.

 

 

5.2) Projektorlichtquelle

Nun setzen wir an die Projektorlampenposition ein script_origin mit folgenden Werten:

 

Classname:      script_origin

Model:              static/corona_reg.tik

$targetname:     projector_corona

Scale:              0.70                             passt in der Größe besser zum Projektor

Angle:              90                                Ausrichtung bitte individuell vornehmen

 

5.3) Projektorsoundspeaker

Damit der Projektor während der Filmwiedergabe auch sein typisches Geratter wiedergeben kann, platzieren wir innerhalb des Projektors ein Soundspeaker-entity mit den Einträgen:

 

Classname:      sound_speaker

$targetname:     projector_speaker

 

5.4) Der Lichtstrahl

Eigentlich ist so ein Projektorlichtstrahle eher ein Lichtkegel, aber ungleich schwieriger zu bauen und zu texturieren. Aus diesem Grund habe ich mich entschlossen, hier nur einen waagrecht liegenden Pyramidenstumpf einzusetzen. Die kleinere Stirnfläche setzen wir vor die Projektorlichtquelle, die größere Bodenfläche lassen wir an dem Leinwand_origin enden. Nach dem erstellen machen wir diesen brush zu einem script_object mit nachfolgenden Entity-Einträgen:

 

Classname:      script_object

$targetname:     projector_beam

 

Als Textur wählen wir je Fläche „textures/common/withe_volumetric“ aus. Dies ist eine shader-textur, welche über den shader aus zwei verschieden Bildern zusammengesetzt und im Erscheinungsbild gesteuert wird.

 

5.5) Projektorclip

Als optische Verzierung kann nun noch der Projektor selbst mit einem „metal-clip“ umbaut werden, damit es auch schön metallisch klappert, wenn man draufschießt.

 

 

5.6) Film-Aus-Trigger

Wenn wir auf unseren Projektor schießen, ist die Wahrscheinlichkeit sehr hoch, das dieser seinen Dienst einstellt und der Film sowie der Sound „Logischerweise“ erlöschen. Dies regeln wir mit einem Trigger den wir knapp um den Projektor drumherum bauen. Dieser Trigger wird als Damage-Trigger eingestellt, löst also bei Beschuss oder Explosion aus und stoppt später den Scriptablauf für Projektorlampe, Lichtstrahl und Film.

Die hierfür notwendigen Entity-Einträge:

 

Classname:      trigger_multiple

$targetname:     projector_off_trigger

health:              1                      sehr niedrig, damit bereits ein einzelner Pistolenschuss zur Auslösung ausreicht

spawnflags:       128                  oder DAMAGE-markieren

 

 

5.7) Qualm

Wie jedes andere elektrische Gerät wird auch unser Projektor anfangen zu schmorren, wenn er kaputt geht. Dies simulieren wir mit ein wenig Qualm. Dazu setzen wir innerhalb des Projektormodells ein Smoke-Entity.

 

Die Menüeinträge:

 

Classname:      addon_fx_smoke_debris

Model:              emitters/debris_smoke.tik

$targetname:     projector_smoke

Scale:              0.50

 

Mit „scale 0.50“ wird der Qualm verkleinert, sonst sieht es aus, als ob ihr eine Ölraffinerie in Brand gesetzt habt.

 

 

5.8) Funkenflug

Natürlich fliegen auch die Funken, wenn’s den Projektor zerstört. Auch hierfür haben wir eine Möglichkeit, diesen Effekt zu simulieren. Dazu platzieren wir wiederum innerhalb unseres Projektors ein weiteres Entity. Diesmal ein „emitters/generic_spark.tik“. Dessen Menüeinträge:

 

Classname:      fx_electric_sparks

Model:              emitters/generic_spark.tik

$targetname:     projector_sparks

#set:                500

Scale:              0.70

 

Hier wird ebenfalls mit dem „scale-Faktor“ ein realistischeres Erscheinungsbild des Funkenflugs eingestellt.

 

 

5.9) Steuertrigger für Qualm, Funken und Sound

Damit die Effekte zu 5.3, 5.7 und 5.8 auch funktionieren, benötigen wir noch einen weiteren Trigger, der nach seiner Aktivierung den Sound stoppt, den Qualm und die Funken startet. Letztere zwei werden dann automatisch nach einiger Zeit wieder gestoppt und später gelöscht.

Dazu benutzen wir wieder einen Trigger_multiple, den wir ebenfalls um den Porjektor drumherum legen.

Auch hier müssen wir im Entity-Menü einige Einträge vornehmen.

 

Classname:      trigger_multiple

$targetname:     projector_off_trigger_effect

#set:                500

health:              1                      sehr niedrig, damit bereits ein einzelner Pistolenschuss zur Auslösung ausreicht

spawnflags:       128                  oder DAMAGE-markieren

 

 

Da der Projektor mit allen seinen Bestandteilen doch recht umfangreich ist, hier nochmals im Bild zur Übersicht.

 

 

 

So, dann mal alles speichern und mal compilen. Zum Testen kann man ja schon mal die MAp starten. Allerdings ist vom Film noch nicht viel zu sehen. Dies regeln wir jetzt im Map-Script.

 

 

Einleitung

Vorbereitung

Shader

Radiant

Map-Script

Steuer-Script

Nachwort

 

© Das bbmd-Team / cubus 2005

 



Druckansicht   druckbare Version anzeigen
Seite empfehlen   Seite empfehlen
0 Kommentar(e)   kommentieren
Wertung ø 10,00
1 Stimme(n)
Seitenanfang nach oben