Todavía no encontré una pregunta en estas líneas, corríjame si me equivoco.
Los árboles (y la fauna en general) son comunes en los juegos. Debido a su naturaleza, son un buen candidato para la generación de procedimientos.
Hay SpeedTree , por supuesto, si puede pagarlo; Por lo que puedo decir, no ofrece la posibilidad de generar sus mallas de árbol en tiempo de ejecución. Luego está SnappyTree , un generador de árbol en línea basado en webgl basado en proctree.js que tiene unas 500 líneas de javascript.
Uno podría usar cualquiera de los anteriores (o algún otro generador de árbol con el que no me he topado) para crear algunas docenas de mallas de árbol de antemano, o modelarlas desde cero en un modelador 3D, y luego duplicarlas / escalarlas al azar para algunas variantes más ..
Pero prefiero tener un generador de malla de árbol enlazable y gratuito.
Soluciones posibles:
- Porte proctree.js a c ++ y trate con la licencia de código abierto (no parece ser gpl, por lo que podría ser factible; el autor también puede estar dispuesto a cooperar para que la licencia sea aún más gratuita).
- Rollo propio basado en sistemas L.
- No te molestes, solo usa árboles generados fuera de línea.
- Usa algún otro método que aún no haya encontrado.
Actualización 2015 : terminó portando proctree.js a c ++ https://github.com/jarikomppa/proctree
fuente
Respuestas:
He trabajado bastante en esta área, aunque la mayoría de mis demos son antiguas:
(flash 2010)
http://genesisbbs.com/appstem.html (haga clic y arrastre el mouse)
http://genesisbbs.com/appstem2.html
(directX 2006)
http://vimeo.com/5206795
Le recomiendo que haga el suyo, si lo hace por diversión. Seguramente necesitará trabajar con Quaternions . Comprenderlos es muy difícil, pero no necesita profundizar demasiado para usarlos. Piense en un quaternion como un vector con un componente adicional: rotación. Si desea que sus plantas se retuerzan y giren a medida que crecen, necesitarán cuaterniones.
Otras cosas para aprender:
Figuras de Lichtenberg Diagramas de
crecimiento de Laplacia de
Voronoi
Algoritmos de vecinos más cercanos (google ellos)
Yo (personalmente) desaconsejaría el uso de L-Systems, aparte de dictar quizás una gramática para lo que crece donde, es decir, [semilla -> [raíz] / [tronco-> rama -> [flor / hoja]]. Los sistemas L no son buenos para responder a estímulos ambientales como la dirección de la luz solar, la gravedad, los obstáculos, etc.
En cuanto a los problemas de velocidad, se puede generar un solo árbol en tiempo real. Sin embargo, para fines de memoria y rendimiento, es probable que solo desee generar un pequeño conjunto de árboles e instanciarlos un poco si se trata de bosques.
La mayoría de los generadores de árboles existentes no son tan buenos (en mi humilde opinión), además de los de alta gama utilizados para Maya y tal.
También recomiendo encarecidamente el uso de vóxeles para generar el árbol (luego piel con una malla si es necesario). La ventaja de los vóxeles es que puedes simular fácilmente algoritmos de crecimiento usando cosas como el crecimiento laplaciano y varios autómatas (no el juego de la vida de Conway, pero otras reglas producen resultados interesantes).
fuente
Personalmente, probablemente comenzaría con árboles pregenerados y solo una vez que tuviera un motor de renderizado de bosque increíble, completo con arbustos, hierba, hongos y demás, comenzaría a buscar si necesito más mallas de árboles variables.
Dicho esto, puedes echar un vistazo a ngPlant . Incluye una aplicación de modelador de árbol de procedimientos GPL, pero las bibliotecas que realizan todo el trabajo pesado tienen licencia BSD. Está escrito en C ++.
Para el renderizado de bosque, hay Geometría paginada (con licencia MIT) para el motor de renderizado Ogre .
fuente
El principal problema con los árboles de procedimientos no es generarlos, sino representarlos todos los cuadros en tiempo de ejecución. Esta es la razón por la que verás muchos árboles idénticos en los juegos AAA, no es que no puedan implementar o escribir tecnología que haya creado árboles únicos, es que significaría que tendrías que recortar un montón de otras características para el juego correr.
Si tiene muchos árboles idénticos, puede rotarlos y posiblemente escalarlos uniformemente para que se vean diferentes desde todos los ángulos, y dado que son idénticos, puede instanciarlos para ahorrar preciosos milisegundos en cada cuadro.
Solo pensando en este problema por un segundo, puede haber un medio feliz: ¿qué tal si genera algunas partes diferentes de árboles, troncos, ramas, hojas, etc., pero que encajan de manera modular, como el árbol de lego? Entonces podrías tener muchas combinaciones y algunos árboles bastante únicos, pero también podrías instanciar todas las partes para un juego más rápido.
fuente
Me topé con el árbol [d] hace algún tiempo ... Lo usé solo por una pequeña cantidad de tiempo para probar un proyecto, pero eso fue solo porque detuve el desarrollo: la herramienta te ofrece una amplia gama de opciones de generador para jugar y , por lo que recuerdo, es bastante rápido. Un enlace está abajo.
La desventaja es que no se puede incorporar un generador de árbol. Tendría que generar previamente algunos árboles y luego modificar los datos al colocarlos en tiempo de ejecución para modificar su singularidad.
fuente
Esta es una pequeña solución ordenada, y la he usado en un proyecto y puedo decirte que es lo suficientemente rápido como para generar árboles sobre la marcha por qué se está ejecutando el juego. Ciertamente no es detallado, pero si se deshace de las vallas publicitarias, podría ser bastante ordenado.
http://ltrees.codeplex.com/
fuente