lahme Effekte machen



  • Auf Anfrage eines Einzelnen möchte ich ein bischen was über die technischen Detail meiner 4k Intros erzählen. Da es haupsächlich um grafische Effekte geht, passt das IMHO ganz gut hier her (rapso, korrigier mich! 8).

    Alles ist soweit in ziemlich miesem C geschrieben.

    CMath:
    Das Teil basiert noch auf DDraw (wie alt...) und reproduziert einen schon ewig bekannten Effekt. Man erstellt eine 2D-Grafik in verschiedenen Größen (hier Kugeln) und simuliert so deren Tiefe. Dazu berechnet man einfach eine 3D Positition und projeziert diese wie bekannt auf den 2D Screen. Dann wählt man nur noch das passende Bild nach dem Z-Wert. Die Reflexionen werden nach dem gleichen Prinzip erstellt, einfach mit einer etwas dunkleren Grafik.
    Die Grafiken der Kugeln müssen (wegen der Größenbeschränkung) zunächst auch noch generiert werden. Dazu dient ein simpler Raytracer, der nur Kugeln kann und der dann für die verschiedenen Farben und Größen angeworfen wird.
    Die Bewegungen der Kugeln basieren dann nur noch auf den bekannten Formeln zur Schwerkraft, d.h. gleichförmige Bewegung in x/z- und beschleunigte in y-Richtung. Zum "Springen" wird einfach in einer bestimmten Höhe, die y-Geschwindigkeit negiert und etwas runterskaliert.

    CMath2:
    Der größte Teil des Intros beschäftigt sich eigentlich mit der Texturgeneration. Dazu habe ich einen Satz Funktionen geschrieben, der einige simplere Sachen kann, wie Füllen in einer Farbe, Noise oder Blur Filter. Dann kommen noch einige spezielle Sachen, wie Farbverlauf oder den "Nietenkopf" generieren. Diese Funktionen arbeiten alle auf einen simplen byte Array in ARGB Kodierung. Do ist es einfach möglich, eine gelockte Surface Textur von D3D8 zu benutzen.
    Also zu Darstellung wird D3D8 benutzt. Das 3D Objekt ist einfach ein Schlauch, der etwas "ausgebeult" ist. D.h. er besteht aus Ringen, deren Größe nicht koonstant ist. Die Beleuchtung wird über Vertexfarben simuliert, was schrecklich ineffizient war. Es war eigentlich geplant, die Geometry auch zu Animieren, dann hätte das ständige Neuschreiben der Eckpunkte (und ihrer Farben) einen tieferen Sinn. Im Hinter grund sieht man eigentlich nur noch zwei Dreiecke. Ab und an wird dort noch eine weitere Grafiken (ein weißer Streifen) drübergeblendet, die man mit viel Fantasie als Reklektion auffassen kann.

    CMath xm03:
    Das Intro basiert schon auf D3D9. Es handelt sich um einen speziellen Renderer, der eine kleine Landschaft darstellt. Die Idee war einen Zeichner, der mit Tinte und Feder arbeitet, zu imitieren. Ein Technik ist (nein, ich hab im Kunstunterricht nie aufgepasst) mit der Feder immer nur klein Häckchen zu zeichnen (ehrlich nicht!) und deren Anzahl je nach gewünschter Helligkeit zu variieren (war so öd).
    Um das zu erreichen wird zunächst mal eine Textur vorbereitet, die lauter Häckchen enthält. Aber nicht im RGB Kanal, der bleibt schwarz, sondern im Alpha-Kanal. Der Trick ist, das schon alle Haken übereinander geblendet sind, nur mit verschiedener Transparenz. Schaut man nun mit einen Alphatest in diese Textur, d.h. zeichnet alle Texel mit Alpha größerr n, so hat man je nach n viele oder wenige Häckchen.
    Nun wird eine Heightmap erzeugt (mit Perlin Noise) und daraus auf die bekannte Art eine Landschaft erstellt. Größe ist so gewählt, das alles in einen VB passt bzw. mit einem Rendercall gezeichnet wird. Die Beleuchtung kommt aber in den Alphakanal! Gerendert wird dann einfach in eine Textur, welche mit der Häckchentextur multipliziert auf den Screen kommt. Per Alphatest werden dabei die Häckchen aus dem (eigentlich komplett schwarzen) Gesamtbild gefiltert. Der Rest bleibt alles was den Alphatest nicht schafft, bleibt in der Hintergrundfarbe (hier weiss). Der Vorgang ist recht fragil, es wird ohne PS gearbeitet, was es einigermassen schwer macht, die Ergebnisse in genau den benötigten Wertebereich zu bekommen. Da alles in 8Bit gerechnet wird kommt es auch zu leichten Bandbreiten-artefakten. Letzendlich gibt es aber nur 8 "Häckchen"-helligkeiten, wodurch dies weniger ins Gewicht fällt.
    Das Ganze ist dann noch mit der 5. Sinfonie von Beethoven synchronisiert, die spielt aber leider nur auf Win2k (da die Musik aus dem winnt Ordner kommt).

    So, das waren die Infos, die für wichtig erachte. Lest sie, schmeisst sie weg, vergesst sie, denkt Euch selbst was aus!

    Bye, TGGC (Denken, und gut ist.)


  • Mod

    👍

    rapso->greets();


Anmelden zum Antworten