Tja, Voxel sind gerade mitten im Umbau und daher mächtig demotivierend. Das hier ist stattdessen ein Renderer für einen grid-based Dungeon Crawler so wie das uuuuralte Dungeon Master oder in neuerer Zeit Grimrock. Vielleicht mache ich daraus wirklich noch ein Spiel, aber aktuell ist es eine Grafikspielwiese. Ich dachte, regelmäßige 2m quadratische, senkrecht aufeinander stehende Flächen wären eine einfache Basis, um mal den ersten Versuch meiner Oberflächengenerierungs-Lib zu wagen. Die soll einen groben Vorgabemesh mit Metadaten zu einer glaubwürdigen Naturmaterial-Oberfläche aufpusten. Rauer Fels, hier und da Moos drauf, Sand oder Wiese aufm Boden, gefugte Steinmauern - all diese Oberflächen sehen ja so aus, weil sie durch physikalische Prozesse und handwerkliche Bearbeitung entstanden sind. Ich wollte also mal probieren, ob ich diese Sachen prozedural generieren kann.
Ne Ziegelmauer oder eine Holztextur prozedural zu generieren machen ja schon viele. Aber wenn ich bei der Generierung den Kontext berücksichtige, kriege ich vielleicht eine Oberfläche hin, die wie aus einem Guss aussieht. Mit Fugen überall da, wo Mauersteine in den Fels eingesetzt wurden. Oder mit Moss nur unter der Stelle, wo ein Rohr aus der Wand kommt, und die Steine rund ums Rohr enden rechtzeitig in Mörtel. Finale Ausbaustufe dieser Lib wäre dann OnDemand-Generierung in genau der Texturauflösung und dem Detail, wie es für den aktuellen Abstand zur Kamera gerade nötig ist. So dass die Spielerin während ihrer Wanderung durch den Dungeon immer pixelperfekte Details zu Gesicht bekommt, die erst nach Bedarf bei Annäherung überhaupt berechnet werden.
Wenn es funktioniert, hätte es außerdem den Vorteil, dass ich mich um die komplette Abteilung "Landschaft" der Assets nicht mehr kümmern muss. Ist natürlich ein sehr fernes Ziel und bislang nur Wunschdenken, aber ich guck mal, wie weit ich komme.
Jedenfalls habe ich jetzt einen Basismesh aus meinem Dungeon generiert, der nur aus 2m^2 Quadraten besteht. Und damit ich daraus jetzt rauen Stein machen kann, muss ich die Oberfläche erstmal runden. Sonst kriege ich beim Extrudieren nahe der Kanten Geometrie, die einander durchdringt, und das sieht nicht aus. Und diese Rundung war überraschend mühsam. Alle Tricks, die ich kannte oder genannt bekam (z.B. Chamfer -
https://en.wikipedia.org/wiki/Chamfer_(geometry), Danke an xTrim), versagt bei Punkten, wo konvexe und konkave Kanten aufeinander treffen. Ich habe jetzt aber eine Lösung gefunden, die nur auf dem Kontrast Flächennormale vs. Vertexnormalen basiert, und die akzeptabel aussieht. "Rund" ist schon noch anders, aber es ist ne Arbeitsbasis.