Ich arbeite an einem Voxel-Spiel und habe einige Probleme mit der Texturierung. Ich habe die zugehörigen Fragen zu diesem Stapelaustausch gelesen, aber sie scheinen ein allgemeines Problem (unter Verwendung der triplanaren Texturierung) anzusprechen, und ich denke, meine ist einfacher.
Sie können sehen, dass die resultierende Geometrie einen begrenzten Satz von Polygonen enthält. Zuletzt habe ich überprüft, dass ich nur 44 von ihnen gesehen habe. Meine Idee war es, diese Polygone mithilfe einer statischen Kartentabelle einer regulären Textur zuzuordnen, ohne eine triplanare Texturierung verwenden zu müssen (derzeit wird jedes Polygon denselben Werten zugeordnet, daher ist es hässlich).
Meine Fragen :
- Ist es gültig? Es scheint viel einfacher zu sein als die triplanare Texturierung, aber ich kann keine einzige Ressource zu diesem Thema finden, daher frage ich mich, ob es ein richtiger Ansatz ist.
- Wo finde ich / Wie kann ich eine UV-Karte für diese Art von geometrischer Figur erstellen? Ich habe versucht, Mixer zu verwenden, aber es scheint, dass mein Mixer-Fu nicht stark genug ist. Gibt es eine einfachere Software zum Generieren von UV-Karten mit Modellen wie diesem?
3d
voxels
uv-mapping
Nison Maël
quelle
quelle
Antworten:
Eine andere Möglichkeit wäre, Ihre Texturen prozedural zu generieren. Dieser Ansatz hat seine Vor- und Nachteile. Der wichtigste Nachteil ist, dass Sie Ihre Texturen nicht in einem Editor zeichnen können, sondern sie mithilfe von Rauschfunktionen codieren müssen.
Der große Vorteil Ihrer Situation besteht darin, dass Sie Ihr Gelände völlig unabhängig von der Ausrichtung strukturieren können. Dies geschieht unter Verwendung von sogenanntem festem Rauschen. Es ist eine dreidimensionale Rauschfunktion.
Damit können Sie eine Funktion codieren, um den Farbwert einer bestimmten Position im 3D-Raum zu generieren . Dann probieren Sie nur die Punkte aus, die auf den Netzflächen liegen. Mit anderen Worten, Sie schnitzen aus der dreidimensionalen Textur heraus.
Dies ist aus dem libnoise Glossar .
Ich weiß, dass es möglicherweise nicht Ihr Ziel ist, Anweisungen zum Generieren jeder Textur zu codieren, die Sie verwenden möchten. Es kann aber auch eine Herausforderung sein und bringt nicht nur den orientierungsunabhängigen Vorteil mit sich, sondern auch den stark reduzierten Speicherplatz und die unbegrenzten Vergrößerungsdetails.
Es würde mich sehr interessieren, wenn Sie versuchen würden, solide Geräuschstrukturen für Ihr Gelände zu implementieren.
quelle
So dies bietet keine Details zu jedem Problem , das Sie mit Ihrem Ansatz begegnen werden, aber , wenn Sie jede Ecke zur nächsten nicht-Luft Voxel , um zu schaben Informationen von ihm (wie die Textur Probe) zuordnen mögen, Hier ist ein Beweis für die effiziente Methode, die ich mir ausgedacht habe:
Hier ist meine Implementierung in Java, vorausgesetzt, Ecken und Kanten werden wie in Paul Bourkes populärem Artikel beschrieben indiziert (Ecke Null ist -X -Y -Z):
..und unter der Annahme, dass
blockIds
es sich um a handelt,long
dessen Bytes jeweils einer Ecke entsprechen, von höchst bis niedrigstwertig, 0, 1, 4, 5, 3, 2, 7 und 6. (In Bezug auf die Neigungen XYZ sind die geordneten Werte 000 100, 010, 110, 001, 101, 011 und 111.)In C / C ++ kann es sinnvoll sein,
long blockIds
in ein Array von Bytes / Kurzschlüssen / Zeigern zu wechseln und jeden Vier-Bit-Wert in der Tabelle entsprechend neu zuzuordnenbits = 7 - bits
. Ich habe es jedoch nicht profiliert, daher ist eslong
möglicherweise noch schneller , alles in ein zu packen . Schließlich wird eine Luftblock-ID ungleich Null neu angeordnet, sodass bei einer großen Domäne von Block-IDs kein Überlauf auftritt. Würde im obigen Code nicht passieren, da ichints
blockIds speichere, die es sindbytes
, aber es ist etwas zu beachten.(Um 100% klar zu sein, trage ich diese Methode zur Public Domain bei und verzichte auf die Haftung gemäß der hier beschriebenen vollständigen Lizenz: http://unlicense.org/ )
quelle
UV-Mapping scheint der richtige Weg zu sein. Ich glaube, dies beantwortet Ihre erste Frage (aber ich kann mich irren). Der Grund, warum Blender dies nicht für Sie UV-kartiert, liegt darin, dass versucht wird, es als ein riesiges Klumpensache auszupacken. Sie müssen dem Modell Nähte hinzufügen, damit Blender es entsprechend aufteilen kann. Weitere Informationen hierzu finden Sie im offiziellen Blender- Handbuch für UV-Mapping .
quelle