Construyendo ciudades con un clic del mouse con Houdini y Python



En el desarrollo de juegos, constantemente se crean y aplican tuberías, algoritmos y pequeños procesos, lo que ahorra mucho tiempo y esfuerzo. A menudo, estas soluciones son simples pero elegantes.

Este artículo es sobre esto. Al autor se le ocurrió un método para construir ciudades virtuales, que en el futuro quiere convertir en una herramienta completa de un diseñador de niveles.

En este artículo, repasaré la configuración básica de la herramienta City Builder en Houdini, que puede construir ciudades con simples clics del mouse. Tenga en cuenta que solo funciona dentro de Houdini usando los estados de Python Viewer.

Referencia


La mayor inspiración para mí fue Oscar Stolberg . Su trabajo fue impresionante y me hizo preguntarme si es posible repetir esto en Houdini. Mi intento también puede considerarse como una prueba de que es bastante realista reproducir cualquier idea en otro software.



Configuración inicial


Lo primero que debe hacer es la cuadrícula o el plano en el que se construirán las casas. Teóricamente, podría ser cualquier cosa, por ejemplo, triángulos, hexágonos, etc. La forma más fácil que he encontrado es usar quad mallas.

Comience con el nodo circular y coloque un nodo de malla instantánea debajo de él (es de las herramientas de Labs, así que asegúrese de tenerlos instalados).



Después de eso, coloque el nodo de extrusión; más tarde se utilizará para extruir las primitivas seleccionadas por el mouse.



La configuración se minimizará en HDA, en ella creará un parámetro para trabajar con código Python. En este caso, debe controlar el parámetro de grupo para extender y completar las primitivas en las que hace clic el mouse.



Estados del visor de Python


Ahora puedes ir al código de Python. Si eres nuevo en los estados del espectador, entonces anteriormente escribí una introducción básica .

Cree un nuevo estado de visor y comience con una plantilla vacía. Esto solo generará el fragmento de código que realmente se necesita.



Hay algunas cosas para agregar. Puedes dividirlos en 2 partes:

  • Obtención de geometría para ver con clics del mouse.
  • Volverse primitivo con un clic del mouse.

Para comenzar, en la parte init, agregue una nueva variable para la geometría llamada self.geometry = None. A continuación, agregue la función OnEnter: se llama a este método cuando el usuario activa / selecciona el estado al crear / seleccionar el nodo y presionar Entrar en la ventana gráfica.

Aquí es donde la geometría actual se almacena en self.geometry. Hecho usando node.geometry ().



Ahora hay una conexión con la geometría.

La siguiente parte es obtener un número primitivo basado en la posición del mouse al hacer clic. Para hacer esto, cree la función OnMouseEvent: este es el procesamiento de eventos del mouse (como clics o posición del mouse).

Al comienzo del evento del mouse, cree variables para trabajar. Luego obtenga la intersección con la geometría usando la función GeometryIntersector y use self.geometry.

De esta intersección obtendrá la información que necesita, descubrirá e imprimirá un número primitivo.



Si todo se hace correctamente, resultará esto:



la última configuración es usar un número primitivo en el parámetro de grupo, lo que hizo al principio. Reemplace la cadena con una nueva, llame al parámetro de grupo y establezca el número primitivo como el valor. Tenga en cuenta que también se convierte en una cadena, porque el grupo es un parámetro de cadena.



Resultara esto:



esta es la idea principal con la que comencé a crear una herramienta. A partir de ahora, almacenará información, no la reescribirá. Esta configuración proporcionará una base para comenzar y realizar más experimentos.

Detalle


Una vez que tenga estos cubos, puede hacer cualquier cosa con ellos. Si necesita una ciudad, cree un generador de casa: hay muchos tutoriales sobre este tema en Internet. Mientras tanto, mi ejemplo.

Se copia una pared modular a cada lado del cubo.



Un borde biselado y desplegado con UV.



El rendimiento es muy importante aquí. Para que la herramienta funcione rápidamente y cuando presionas la pantalla aparece instantáneamente, tendrás que hacer la optimización. Para hacer esto, puede intentar usar el número mínimo de nodos de bucle y nodos booleanos en la red.

Instrumento futuro


Quiero ir más allá y convertirlo en una herramienta para crear niveles. La idea es que puede crear rápidamente prototipos de niveles terminados con un par de clics. Me inspiró la encimera .



Finalmente, una pequeña demostración de lo que obtuve en este momento:


All Articles