Das sieht doch schon richtig gut aus! Wenn Du soweit bist, ist Schatten für Point Lights auch kein Problem mehr. Einfach 6 Passes in eine CubeMap und dann anhand des Vektors "Lichtquelle zu Weltposition" daraus sampeln. Mehr ist es nicht. Ich denke nicht, dass Du dafür ein Buch kaufen musst.
Ich habe aber auch was zu zeigen. Ich habe die letzten Wochen entgegen der Vernunft an dem Ufo/Minecraft/Fallout-Spiel geschraubt, dass ich zusammen mit einem Herrn bastle, den ich hier im Forum kennengelernt habe. "Entgegen der Vernunft", weil ich ja eigentlich mit mehr als voller Kraft an Splatter bauen sollte, aber das Thema hat mich leider völlig in Beschlag genommen. Zur Illustration ein Bild:
Was man hier sieht, ist eine aus 5cm-Voxeln aufgebaute Welt, die komplett zerstörbar und bebaubar ist. Auch wenn die Änderungen entweder klein bleiben müssen oder mathematisch generierbar sein müssen, damit die Datenmengen über's Netzwerk klein bleiben. Aktuell ist das Speicherlimit bei etwa 1km^2 bei 250m Höhe, aber ich habe schon Ideen, wie ich da nochmal etwa Faktor 10 rausholen kann. Was man hier auch sieht, ist dass der bisherige Renderer, den ich mehr oder minder unverändert aus den Splitterwelten übernommen habe, etwas ungeeignet für das Szenario ist. Die Splitterwelten-Engine nutzt im Kern einen Forward Renderer, der hier bei einer globalen Sonne und den zwei Taschenlampen in den Händen der zwei Spieler bereits einen zweiten Pass anfangen muss. Und Multipass-Rendering ist bei dem abartigen Polycount, den ein splatting-basierender VoxelRenderer hat, eine ganz schlechte Idee. Das wird sich später aber noch ändern.
Was ich primär zeigen will, mit nur einem Bild aber eigentlich nicht zeigen kann, ist die neue Netzwerk-Logik! Und darauf bin ich mächtig stolz gerade, weswegen ich das unbedingt zeigen wollte. Es gibt jetzt ein abstraktes Event-System, bei dem kurze Skript-Schnipsel auf dem Server oder Client laufen können, und deren Stattfinden und deren Parameter bandbreitensparend übers Netzwerk übertragen werden. Ein Spieler-Eintritt z.B. ist ein serverseitiges Event, dass eine Spawn-Position ermittelt, dort ein VoxelModell für den Körper und eins für den Kopf erstellt, und die Position als Spawn-Event an den Client schickt, der dann das Gleiche tut. Und es gibt jetzt ein System zur Übermittlung von Wertänderungen in netzwerk-synchronisierten Variablen. Man kann im Code die abgleich-würdigen Objekte und Variablen beschreiben und die Werte werden dann wieder bandbreitensparend synchronisiert zwischen Server und Client.
Das Ergebnis ist, dass man jetzt einem Server per IP beitreten kann, zusammen mit den anderen Spielern die Startwelt bestimmt, dann das Spiel startet und schon rumlaufen kann und andere Spieler rumlaufen sieht. Es wird natürlich noch einige Arbeit nötig sein für bessere Behandlung von Werte-Sync-Konflikten und Lag-Kompensation, aber ich freu mich trotzdem mächtig! Damit habe ich ein System geschaffen, mit dem sich später praktisch alle Spiellogik bequem mit ein paar Zeilen Skriptlogik bauen lassen sollte. Das wird jetzt aber erstmal ein paar Monate warten müssen, aber jetzt wird mit Hochdruck an der Splatter-Fertigstellung weitergebaut.