Aus Das deutschsprachige Scratch-Wiki
Dieser Artikel beschäftigt sich mit den Methoden, die du benutzen kannst, um in deinen Scratch-Programmen 3D-Grafiken und 3D-Animationen zu erzeugen. Der Begriff „Dreidimensional“ oder kurz „3D“ bezieht sich immer auf etwas, das drei Dimensionen hat, also mit Breite (x), Höhe (y) und Tiefe (z) in einem Raum mit x,y,z-Achse dargestellt werden kann.
Scratch bietet zwar keine Werkzeuge an, um 3D-Modelle direkt anzuzeigen, herzustellen oder zu bearbeiten, jedoch kann man mit den vorhandenen Elementen auf verschiedenste Art 3D-Effekte simulieren. Viele (jedoch nicht alle) 3D-Methoden können mit Scratch Blöcken nachgebaut werden. Hierbei kommen die Blöcke mit denen die 2D-Objekte (Sprites) bewegt und ihr Aussehen gändert wird zum Einsatz, wie z.B. die Bewegungs- und Größenänderungsblöcke. Auch die Malstift-Blöcke können zum Einsatz kommen. Die mathematischen Blöcke und die Scratch Listen werden häufig benutzt, um die 2D Elemente so zu berechnen, dass sie 3D-Grafiken abbilden.
Letzten Endes ist natürlich jedes 3D-Bild auf einem nur zweidimensionalen Medium, wie einem Bildschirm, eine Illusion. Diese 3D-Illusion in Scratch zu erzeugen, ist eine große Herausforderung, von der man zunächst glaubt, dass sie nur mit aufwändigen Algorithmen gelöst werden kann, wie Ray Tracing, Ray Casting oder zumindest mit Drahtgittermodellen. Jedoch gibt es zum Glück für die Programmieranfänger auch ganz einfache Möglichkeiten, wobei die „Nicht drehen“ Methode sehr einfach und die 3D Scheiben Methode etwas kniffeliger ist. Vorab gerenderte 3D-Filme sind eine weitere Möglichkeit, um mit 3D in Scratch loszulegen.
Neue Methoden und Beispiele
Redaktionelle Bemerkung: Dieser Artikel "3D in Scratch" wurde seit seinem Entstehungsjahr 2012 kaum erweitert und gehört zu den meist aufgerufenen Artikeln auf Platz 6 mit >35.000 Aufrufen. Daher ist es m.E. an der Zeit, ihn gründlich zu überarbeiten und zu erweitern, weil es inzwischen neue und Methoden und Beispiele für dieses Thema gibt. Im folgenden die neue Methode "3D-Punktewolken" mit Beispiel als Start. Es wäre schön, wenn die Neuerungen zunächst in diesem Abschnitt eingefügt würden um eine Übersicht zu bekommen.
3D-Punktewolken
Dies könnte als eine komplexere Variante der 3D-Scheiben-Methode verstanden werden: Während bei dieser die Scheiben eigene Objekte sind, sind die Punkte bei der 3D-Punktewolken-Methode gestempelte Punkte ein und desselben Scratch-Objektes. Bei beiden Methoden wird aber die 3D-Figur aus Teilen zusammengesetzt. Während bei Ray Tracing und Ray Casting die Schnitt-Punkte der Lichtstrahlen mit der "Bild-Ebene" unabhängig von den dargestellten 3D-Figuren als Pixel gerendert werden (also mehr oder weniger als ideale farbige Punkte der Bildebene), wird bei 3D-Punktewolken die dargestellte 3D-Figur selber aus Punkten zusammengesetzt, die auch nicht genau "Punktförmig" sind, sondern eine Form, Größe und Farbe haben, je nachdem wo sich das durch einen solchen Punkt dargestellte "Teil-Stückchen" der 3D-Figur im Raum befindet.
Beispiele
Ray Tracing
Raytracing (deutsch Strahlverfolgung) ist ein auf der Aussendung von Strahlen basierender Algorithmus zur Ermittlung der Sichtbarkeit von dreidimensionalen Objekten von einem bestimmten Punkt im Raum aus.
Dies ist sicher die schwierigste Methode mit der jedoch die realistischsten 3D-Computergrafiken erzeugt werden können. Daher wird sie z.B. auch für die großen Hollywood-Computeranimations-Filme verwendet. Der grundlegende Ray Tracing Algorithmus ist gar nicht so schwierig, aber extrem rechenintensiv, so dass man, um die Sache zu Beschleunigen, zu diversen Tricks (wie Raycasting s.u.) greifen muss, was die Komplexität erhöht. Ohne diese Tricks oder sehr viel Rechenpower dauert es sehr lange bis ein einziges 3D-Bild entsteht, so dass 3D-Spiele mit dem einfachen Ray Tracing Algorithmus nicht möglich sind.
In Scratch angewendet, berechnet er mit den Mathematik-Blöcken für jeden Punkt, aus dem die Scratch-Bühne besteht, die Helligkeit oder Farbe, die sich aus dem verwendeten 3D-Modell ergibt und malt jeden dieser Punkte mit den Malstift-Blöcken auf die Bühne.
Beispiele
(Canthiar hat auch eine Reihe von Tutorial-Projekten gemacht, die die Mathematik beim Raytracing erklären)
Ray Casting
In der Computerspielentwicklung bezeichnet der Begriff Raycasting das auf einer zweidimensionalen Karte basierte Berechnen einer Pseudo-3D-Ansicht. Im Gegensatz zur normalen Raytracing-Technik wird hier nur eine einzelne Bildzeile abgetastet, um das gesamte Bild zu berechnen; die Verdeckungsberechnung findet also nur in einer Ebene und nicht im Raum statt.
Da diese Technik keinem echten 3D entspricht, unterliegt sie diversen Einschränkungen: Es können keine dreidimensionalen Objekte wie Personen und Gegenstände dargestellt werden, Boden und Decke sind immer gleich hoch und Schrägen sind nicht möglich.
Es wurden diverse Umgehungslösungen gefunden, die den Eindruck der Dreidimensionalität herstellen sollen. So werden zweidimensionale Grafiken, so genannte Sprites, für beliebige Objekte verwendet, die skaliert in das berechnete Bild eingefügt werden. Texturen für Wände, Böden und Himmel wurden eingebaut, die dreidimensionale Strukturen abbilden. Himmel bzw. Decke und Boden wurden für Abschnitte einer Karte abhängig einstellbar gemacht, sodass Treppen, Durchgänge und ähnliches möglich wurden.
Populär wurde das Raycasting durch die frühen Ego-Shooter Catacomb, Wolfenstein 3D, Doom und Duke Nukem 3D, da es erheblich weniger Berechnungszeit benötigt als echtes 3D.
Beispiele
Drahtgittermodelle
Ein Drahtgittermodell (engl.: wire frame model) ist ein dreidimensionales geometrisches Modell, das einen Körper lediglich durch seine Kanten repräsentiert.
Bei der Darstellung als Drahtgittermodell werden die Eckpunkte eines Objektes durch Linien miteinander verbunden. Bei gewölbten Formen werden zusätzlich sogenannte „Isoparameterlinien“ gezeichnet, weil weiche Formen nicht genügend Eckpunkte oder Kanten haben. Liegt dem darzustellenden Objekt ein Polygonnetz zugrunde, so werden einfach die Kanten desselben dargestellt. In dieser einfachen Version kann man durch das Modell (zwischen den „Drähten“) durchschauen und die ansonsten verdeckten Teile sehen.
Viele Programme in der 3D-Computergrafik besitzen Modi, um die Objekte als Drahtgittermodell darzustellen. Der Vorteil liegt in der äußerst schnellen Berechnung des Bildes. Der Nachteil ist eine untreue Abbildung der Wirklichkeit. [1]
In Scratch lassen sich 3D-Drahtgittermodelle folgendermaßen realisieren: Mit Hilfe der Mathe-Blöcken werden 3D-Punkte oder 3D-Vektoren (gerichtete dreidimensionale Linien), die in Scratch-Listen abgespeichert sind, in die 2D-Ebene der Scratch-Bühne projiziert, so dass die Ansicht mit den Mal-Blöcken aus Linien zusammengesetzt dargestellt werden kann. Als Ergebnis sieht man ein Drahtgittermodell, das häufig - je nach Anzahl der Punkte - flüssig oder Bild-für-Bild - gedreht, bzw. mit einer 3D-Kammera umfahren werden kann, und so von verschiedenen Perspektiven betrachtet werden kann. Das 3D-Drahtgittermodell, also die Inhalte der Scratch-Listen, können entweder vor der Projektion in Scratch berechnet werden (z.B. Zufalls-Punktwolken oder geometrische Körper), oder sie sind bereits Bestandteil des Scratch Programms und mit ihm abgespeichert. Im letzeren Fall können auch komplexe 3D-Drahtmodelle, die z.B. Gegenstände darstellen, abgebildet werden.
Der Block zum berechnen der x/y-Position sieht so aus:
Definiere gehe zu x: (x) y: (y) z: (z) gehe zu x: ((Brennwert) * ((x) / (z))) y: ((Brennwert) * ((y) / (z)))
Beispiele: Einfache Drahtgittemodelle
Beispiele: Drahtgittemodelle kombiniert mit Sprites
Man kann Scratch-Objekte in ein Drahtgittermodell "einbauen" indem man ihre Größe und Ort auf der 2D-Scratch-Bühne so steuert, dass sie der 3D Kammeraperspektive entsprechen und so der Eindruck entsteht, dass sie Teil des 3D-Objektes sind. Natürlich ist der 3D-Eindruck beschränkt, da sie ja flach und immer frontal auf die Kammeraperspektive ausgerichtet bleiben.
Beispiele: Komplexe importierte Drahtgittermodelle
Beispiele: Komplexe in Scratch erzeugte Drahtgitter-Modelle
Beispiele: Spiele mit 3D-Drahtgittermodellen
„Nicht drehen“ Methode
Bei der "nicht drehen"-Methode wird der 3D-Effekt durch Bewegung, Größenänderung und Überlagerung der Scratch-Objekte erzeugt. So sind lineare (also "nicht drehende" Bewegungen in x (links/rechts), y (oben/unten) und z (hinein/hinaus) möglich, aus denen man mit etwas Phantasie schöne Simulationen und 3D-Spiele machen kann. Dass sich die Objekte und Blickwinkel dabei maximal in der xy-Ebene, also ausschließlich senkrecht zur z-Achse drehen lassen, ist eine starke Einschränkung, wird aber häufig vom Betrachter übersehen.
Beispiele: 3D durch Höhen-/Größenänderung "flacher Grafiken"
Wenn man alle Objekte nur aus einer Richtung frontal sieht, reicht eine Höhen und Größenänderung "flacher Grafiken" aus, um einen 3D-Effekt zu simulieren.
Beispiel: 3D Höhen-/Größenänderung von 3D-Grafiken
Wenn Objekte mit einem einzigen Kostüm verwendet werden, das nicht flach sondern eine 3D-Grafiken ist, erzielt man alleine durch Verschieben, Größenänderung und Überlagerung einen wesentlich stärkeren 3D-Effekt.
Beispiel: Paralaxen-Scrolling
Eine besondere Variante der "nicht drehen"-Methode ist der Paralaxen-Scroll-Effekt: Hierbei wird der Effekt ausgenutzt, dass sich bei einer Bewegung entlang der x-Achse (Wahlweise auch y-Achse), die jeweils weiter entfernten Gegenstände langsamer verschieben. Dies kann man verwenden um einen 3D-Effekt allein durch mehrerer hintereinanderliegenden unterschiedlich schnell scrollenden Hintergründe zu erzeugen.
Vorab gerenderte 3D-Filme
Wenn man nicht nur eine 3D-Grafik als Kostüm benutzt, sonderen viele, die aneinandergereiht einen Film ergebenen, in dem das abgebildete 3D-Objekt aus verschiedenen Blickwinkeln gezeigt wird, ist ein völlig faszinierender 3D-Effekt in Scratch zu erzielen.
Im Gegensatz zu einem normalem Film, dessen Bildfolge ja rein zeitgesteuert ist, kann man die Bildfolge abhängig von einer Bewegung oder Drehung des Objektes oder des Blickwinkels wählen, so dass ein interaktiver 3D-Effekt entsteht, den der Anwender mit Maus oder Tastatur steuern kann. In Wirklichkeit läuft nur ein Bild-Für-Bild Film: Daher sind alle Bewegungen beschränkt durch die vorhandenen Bilder, z.B. eine Tunnelfahrt oder eine Drehung um eine Achse.

Methode: Du erzeugst außerhalb von Scratch Bilddateien, die ein dreidimensionales Objekt aus verschiedenen Kameraperspektiven zeigt. Je nachdem welche externe 3D-Software verwendet wird, können diese Bilder natürlich brillant aussehen und mit hohem Raytracingaufwand erzeugt sein und sogar neben der Kammerabewegung komplexe Bewegungen des 3D-Objektes enthalten. Diese vielen Einzel-Bilder werden als Kostüme in ein Objekt importiert (bzw. als Hintergründe der Scratch-Bühne). Der Bildablauf kann dann z.B. per Tastatur oder Maus gesteuert werden. Die "Kunst" liegt hier also meißt nicht in der Scratch-Programmierung sondern in der Beherrschung der externen 3D-Programme. Viele Scratcher nutzen hierzu die freie 3D-Software Blender.
Beispiele: Drehen/Umkreisen von Gegenständen
Beispiele: Tunneleffekt
Für den Tunneleffekt wird eine Reihe von Bildern benutzt, die die Durchfahrt durch eine tunnelartige Umgebung darstellen. Wichtig ist, dass der Tunnel aus einem sich in z-Richtung regelmäßig wiederholendem Muster besteht, damit sich das erste Bild der Folge nahtlos an das letze fügt.
Beispiele: Kombination von Dreh- und Tunneleffekt
In diesem Beispiel werden Tunnel und Dreheffekt kombiniert. Natürlich läßt sich der "Tunnel" nur in exakt einer Drehausrichtung "durchfahren", daher dreht der Dreheffekt zunächst in exakt diese Stellung wenn man von links-/rechts-Drehung (um die y-Achse) auf hinein-/hinaus (Bewegung längs der z-Achse) wechselt.
Beispiele: reine 3D-Filme
Man kann natürlich mit der oben erklärten Methode einen reinen 3D-Film abspielen, wie jeden anderen Film in Scratch, indem man die einzelnen Bilder als Kostüme abspeichert und zwischen ihnen einfach in der richtigen Geschwindigkeit wechselt. Je nach Film kann dies auch beeindruckend aussehen, aber ohne Interaktivität mit dem Nutzer wird schnell klar, das es sich nur um einen reinen Film und keine wirkliche 3D-Scratch-Programmierung handelt.
Beispiele: 3D-Spielfiguren
In den obigen Beispielen wurde meistens ein Objekt mit 3D-Kostümen verwendet, welche die gesamte Bühne ausfüllen. Wenn man mehrere Objekte mit filmartig abspielbaren extern erzeugten 3D-Kostümen verwendet, kann man auch ein ganzes Spiel mit 3D-Spielfiguren bevölkern.
3D Scheiben Methode
Dies ist einen weitere einfache Methode einen 3D-Effekt in Scratch zu erzeugen. Man denkt sich das dreidimensionale Objekt, das man darstellen will, in Scheiben zerschnitten und erzeugt für jede dieser Scheiben ein eigenes Scratch-Objekt mit einem Kostüm, das einer schrägen Draufsicht dieser Scheibe entspricht. Wenn man diese Objekt-Scheiben dann auf der Bühne übereinander anzeigt oder stempelt, sieht es aus, als ob durch die Schichtung ein 3D-Objekt entsteht, das man drehen kann, indem man alle Scheiben-Objekte gleichzeitig dreht. Das aus flachen Objekt-Scheiben zusammengesetzte 3D-Objekt kann in viele Richtungen gedreht werden, indem man die Objekt-Scheiben auf die richtige Art dreht und zueinander anordnet.
Beispiele
Blockbasierte Sprachen mit echten 3D-Modellen
Es gibt inzwischen auch eine blockbasierte Sprache namens Beetle Blocks welche die Erstellung und Bearbeitung von echten 3D-Modellen unterstützt. Diese eignet sich dann z:b. auch zum Erzeugen von 3D-Modellen für 3D-Druck.
[wiki=de:3D in Scratch]3D in Scratch[/wiki]