Unity: Global Illumination (Patreon)
Content
Aber was genau ist dieses "Global Illumination"? Grundsätzlich einfach nur das Verhalten von Licht, das Reflektiert wird. Stellt euch vor ihr habt knallrote Pappe und stellt sie neben einem weißen Papier. Wenn jetzt Licht auf die Pappe scheint wird das Papier rot gefärbt, da das Licht von der Pappe abprallt und auf dem Papier landet. Spiele wie Overwatch sind ein gutes Beispiel, wo der Effekt auf 200% gedreht wurde, was ein wichtiger Part davon ist warum das Spiel so cartoony wirkt!
Ich denke man sieht, dass der Unterschied echt enorm ist. Aber warum nutzt es nicht jeder?? Ganz einfach: Es frisst Zeit und man muss alles darauf auslegen. Aber glücklicherweise packt Unity aktuell den ersten Punkt an! Diese kleine Szene die ihr oben seht hat 5 Minuten gebraucht zum baken. Ein riesiges Level kann daher sogar Tage dauern, bis es fertig gebaket ist. Der GPU Progressive Lightmapper wird das Problem bald bekämpfen und spätestens dann sollten ALLE Lightmaps nutzen!
Baked GI ist also eine moderne Lightmap. Und Lightmaps funktionieren logischerweise nur mit statischen Objekten. Aber wir wollen ein cooles dynamisches Spiel basteln! Und wir wollen, dass auch dynamische Objekte cool beleuchtet werden von der Welt um sie herum!
Kein Problem, die Light Probes kommen zur Hilfe!
Lightprobes sind kleine Kugeln, die Beleuchtungen von 6 Richtungen aufnehmen und diese Daten an Objekte weiter geben, die sich in der Nähe befinden. Wenn eine Lightprobe Kugel also in der Nähe einer rot leuchtenden Wand ist, werden Objekte in der Nähe korrekt beleuchtet! Und das ganze auch noch beeindruckend perfomant! Aber es endet hier nicht. Wenn wir Lightmaps nutzen können wir bei einem Material die Emission-Stärke einstellen. Emission bedeutet "Leuchten". Also wie stark ein Material von selbst Leuchtet! Stellt euch Glühlampen, Leuchtreklame oder Lava vor. Und das ganze ist dann auch nicht einfarbig sondern nutzt wirklich die Textur um die Umgebung einzufärben, wodurch man wirklich geniale Beleuchtungen erstellen kann, die Aussehen, als bräuchte man dafür extrem viel Rechenpower, obwohl es nur clevere Tricks sind. Denn wie schon gesagt, die Lightprobes nehmen die Beleuchtung aus der Umgebung auf und geben sie weiter. Somit können Objekte beleuchtet werden, obwohl es keine echte Lichtquelle gibt!
Wenn ihr das ganze noch mit Reflection Probes kombiniert könnt ihr Physically Based Rendering komplett nutzen. Bedeutet ihr müsst anfangen euch zu fragen "ist dieses Material WIRKLICH zu 0% reflektierend?". Denn das ist selten der Fall, in der echten Welt. Fast alles reflektiert zumindest ein klein wenig. Das Resultat spricht denke ich für sich.
Und jetzt noch paar Einstellungs-Tipps. Ich bin ein riesiger Fan von "lasst es uns mit GI komplett übertreiben"! Dadurch habt ihr aber sehr schnell eine mega überleuchtete Szene, denn wenn ihr sagt, dass GI stärker sein soll wird das licht auch stärker reflektiert. Lösung ist simple: Macht die Lichtquellen schwächer und die Indirekte Multiplizierung stärker!
Studiert auch die Lightmap Settings! Dort könnt ihr die grundsätzliche Indirekte Beleuchtungs-Stärke einstellen. Wenn ihr sie auf 5 stellt habt ihr so ziemlich den "Overwatch Effekt"!
Die Light Probes ordnet ihr je nach Situation an. Gibt es an einer Stelle viele farbliche Unterschiede solltet ihr mehr Probes setzen, damit auch jeder Unterschied eingefangen wird. Ist es aber eine riesige Grasfläche oder ähnliches, wo einfach wenig Farbunterschiede existieren, müssen da auch nicht viele Probes hin. Das spart dann nicht nur Perfomance beim spielen sondern auch beim baken!
Solange ihr kein Spiel erstellt, bei dem sich ständig die Lichtverhältnisse ändern, z.B. ein Tag&Nacht wechsel, solltet ihr Lightmaps nutzen und damit auch Global Illumination. BlobCat nutzt GI leider nur um die statischen Objekte korrekt zu beleuchten, da wegen dem dynamischen Laden der Level leider Light Probes unmöglich waren. Das war mir eine große Lehre und alle zukünftigen Spiele werden darauf achten! Denn, ich weiß ja nicht wie ihr es seht, aber sobald man die macht von Global Illumination kennt wirken viele Unity Spiele, die das nicht nutzen, irgendwie leicht altbacken!
Update 1:
Wichtig! Wenn ihr ein Material mit Emission erzeugen wollt (wie hier der Regenbogen Block) dann müsst ihr dieselbe Textur in den Emission-Slot packen. Dieser Slot wird auch verwendet, wenn nur teile einer Textur erleuchtet sein sollen, aber in dem Fall wollen wir, dass alles so leuchtet wie die Textur aufgebaut ist. Ebenso müsst ihr den Modus auf Baked ändern, wenn ihr die Emission in der Lightmap haben wollt!
Update2:
Der Global Illumination Modus im Material (baked/realtime) könnte für einige sehr wichtig sein. Baked bedeutet, dass es in die Lightmap gebacken wird. Das spart Berechnung. Wenn ihr aber z.B. eine Leuchtreklame machen wollt, die sich ständig ändert, dann stellt es auf realtime. Wenn ihr jetzt die textur austauscht (oder z.B. eine Video Textur nutzt) wird auch die Illumination in Echtzeit verändert. Wollt ihr das auch im Spiel haben müsst ihr euch ein wenig mit Scripting auseinander setzen, um das neukalkulieren zu triggern.
Wichtig: Das Objekt muss den Static Flag haben. Daher die Textur darf dynamisch sein, es kann sich jedoch dabei nicht auch noch bewegen!
Files
Previews only