Städte mit einem Mausklick mit Houdini und Python bauen



Bei der Entwicklung von Spielen werden ständig Pipelines, Algorithmen und kleine Prozesse erstellt und angewendet, was viel Zeit und Mühe spart. Oft sind diese Lösungen einfach, aber elegant.

In diesem Artikel geht es darum. Der Autor hat eine Methode zum Aufbau virtueller Städte entwickelt, die er in Zukunft zu einem vollwertigen Werkzeug eines Leveldesigners machen möchte.

In diesem Artikel gehe ich auf die Grundeinstellungen des City Builder-Tools in Houdini ein, mit dem Städte mit einfachen Mausklicks erstellt werden können. Beachten Sie, dass es nur in Houdini mit den Python Viewer-Status funktioniert.

Referenz


Die größte Inspiration für mich war Oscar Stolberg . Seine Arbeit war beeindruckend und ich fragte mich, ob es möglich ist, dies in Houdini zu wiederholen. Mein Versuch kann auch als Beweis dafür angesehen werden, dass es durchaus realistisch ist, eine Idee in einer anderen Software zu reproduzieren.



Ersteinrichtung


Das erste, was zu tun ist, ist das Gitter oder die Ebene, auf der die Häuser gebaut werden. Theoretisch könnte es alles sein, zum Beispiel Dreiecke, Sechsecke und so weiter. Der einfachste Weg, den ich gefunden habe, ist die Verwendung von Quad Mesher.

Beginnen Sie mit dem Kreisknoten und platzieren Sie einen Sofortnetzknoten darunter (er stammt aus den Labs-Tools, stellen Sie also sicher, dass Sie ihn installiert haben).



Danach platzieren Sie den Extrudierknoten - später wird er verwendet, um die mit der Maus ausgewählten Grundelemente zu extrudieren.



Das Setup wird in HDA minimiert, darin erstellen Sie einen Parameter für die Arbeit mit Python-Code. In diesem Fall müssen Sie den Gruppenparameter steuern, um die Grundelemente zu erweitern und zu füllen, auf die die Maus klickt.



Python Viewer-Status


Jetzt können Sie zum Python-Code gehen. Wenn Sie neu in den Zuschauerstaaten sind, habe ich zuvor ein grundlegendes Intro dazu geschrieben.

Erstellen Sie einen neuen Viewer-Status und beginnen Sie mit einer leeren Vorlage. Dadurch wird nur der Code generiert, der wirklich benötigt wird.



Es gibt ein paar Dinge hinzuzufügen. Sie können sie in 2 Teile teilen:

  • Geometrie mit Mausklicks anzeigen lassen.
  • Mit einem Mausklick primitiv werden.

Fügen Sie im Init-Teil zunächst eine neue Variable für die Geometrie mit dem Namen self.geometry = None hinzu. Fügen Sie dann die OnEnter-Funktion hinzu. Diese Methode wird aufgerufen, wenn der Status vom Benutzer aktiviert wird, der den Knoten erstellt / auswählt und im Ansichtsfenster die Eingabetaste drückt.

Hier wird die aktuelle Geometrie in self.geometry selbst gespeichert. Fertig mit node.geometry ().



Jetzt besteht ein Zusammenhang mit der Geometrie.

Der nächste Teil ist das Erhalten einer primitiven Zahl basierend auf der Position der Maus beim Klicken. Erstellen Sie dazu die OnMouseEvent-Funktion - dies ist die Verarbeitung von Mausereignissen (z. B. Klicks oder Mausposition).

Erstellen Sie zu Beginn des Mausereignisses Variablen, die funktionieren sollen. Ermitteln Sie dann den Schnittpunkt mit der Geometrie mithilfe der GeometryIntersector-Funktion und verwenden Sie self.geometry.

An dieser Kreuzung erhalten Sie die erforderlichen Informationen, finden eine primitive Zahl heraus und drucken sie aus.



Wenn alles richtig gemacht wurde, stellt sich Folgendes heraus:



Die letzte Einstellung besteht darin, eine primitive Zahl im Gruppenparameter zu verwenden, was Sie zu Beginn getan haben. Ersetzen Sie die Zeichenfolge durch eine neue, rufen Sie den Gruppenparameter auf und legen Sie die Grundnummer als Wert fest. Beachten Sie, dass es auch in eine Zeichenfolge konvertiert wird, da group ein Zeichenfolgenparameter ist.



Es wird sich herausstellen:



Dies ist die Hauptidee, mit der ich begann, ein Werkzeug zu erstellen. Von nun an speichern Sie Informationen und schreiben sie nicht mehr neu. Dieser Aufbau bietet eine Grundlage für den Start und weitere Experimente.

Detail


Sobald Sie diese Würfel haben, können Sie alles damit machen. Wenn Sie eine Stadt benötigen, erstellen Sie einen Hausgenerator - es gibt viele Tutorials zu diesem Thema im Internet. In der Zwischenzeit mein Beispiel.

Auf jeder Seite des Würfels wird eine modulare Wand kopiert.



Ein Rand, der mit UV abgeschrägt und entfaltet wird.



Leistung ist hier sehr wichtig. Damit das Tool schnell funktioniert und wenn Sie sofort auf das Haus drücken, müssen Sie eine Optimierung durchführen. Zu diesem Zweck können Sie versuchen, die Mindestanzahl von Schleifenknoten und Booleschen Knoten im Netzwerk zu verwenden.

Instrument Zukunft


Ich möchte noch weiter gehen und es zu einem Werkzeug zum Erstellen von Ebenen machen. Die Idee ist, dass Sie mit ein paar Klicks schnell fertige Levels prototypisieren können. Ich wurde vom Kochfeld inspiriert .



Zum Schluss noch eine kleine Demo von dem, was ich gerade bekommen habe:


All Articles