procedural generation - juego - ¿Cómo se puede comenzar con la generación de procedimientos?
juego procedural (8)
La generación de procedimientos ha sido puesta en el punto de mira recientemente (por Spore, MMO, etc.), y parece una técnica de programación interesante / poderosa.
Mis preguntas son estas:
- ¿Conoce algún proyecto de tamaño medio que utilice técnicas de generación de procedimientos?
- ¿Qué idioma / clase de idiomas es mejor para la generación de procedimientos?
- ¿Se puede usar la generación de procedimientos para el código "serio"? (es decir, no es un juego)
Hay un excelente libro sobre el tema:
http://www.amazon.com/Texturing-Modeling-Third-Procedural-Approach/dp/1558608486
Está sesgado hacia los efectos visuales no en tiempo real y la generación de animación, pero la teoría y las ideas son utilizables fuera de estos campos, supongo.
También vale la pena mencionar que existe un paquete de software profesional que implementa un flujo de trabajo de procedimientos completo llamado Houdini de SideFX. Puede usarlo para inventar y crear prototipos de soluciones de procedimientos para problemas, que luego puede traducir al código.
Si bien es un paquete bastante caro, tiene una licencia de evaluación gratuita, que se puede utilizar como una muy buena herramienta educativa y / o de ingeniería.
La generación de contenido procesal ahora está escrita para la GPU, por lo que deberá conocer un lenguaje de sombreado. Eso significa GLSL o HLSL. Estos son idiomas vinculados a OpenGL y DirectX, respectivamente.
Si bien mi preferencia personal es Dx11 / HLSL debido a la velocidad, una curva de aprendizaje más fácil y Frank D Luna , OpenGL es compatible con más plataformas.
También debe consultar WebGL si desea acceder directamente a la escritura de sombreadores sin tener que pasar el tiempo (considerable) necesario para configurar un motor de juegos OpenGL / DirectX.
El contenido de procedimiento comienza con ruido.
Por lo tanto, tendrá que aprender sobre el ruido de Perlin (y su sucesor de ruido Simplex ).
Shadertoy es una excelente referencia para aprender sobre la programación de sombreadores. Yo recomendaría que lo hicieras una vez que le hayas dado a shader la codificación, porque el código allí no es para los matemáticamente aprensivos, pero así es como se hace el contenido de los procedimientos.
Shadertoy fue creado por un genio de procedimiento, Inigo Quilez , un producto de la escena demo que trabaja en Pixar. Él tiene algunos videos de youtube ( gran ejemplo ) de sesiones de codificación en vivo y también puedo recomendar estos.
La generación de procedimientos se usa mucho en la demostración para crear gráficos complejos en un ejecutable pequeño. Will Wright incluso dijo que se inspiró en la demoscene mientras hacía Spore. Ese puede ser tu mejor lugar para comenzar.
Probablemente deberías comenzar con un poco de teoría y ejemplos simples como el algoritmo de desplazamiento del punto medio . También debería aprender un poco sobre Perlin Noise si está interesado en generar gráficos. Lo usé para comenzar con mi proyecto de último año sobre generación de procedimientos.
Fractals están estrechamente relacionados con la generación de procedimientos.
Terragen y SpeedTree le mostrarán algunas sorprendentes posibilidades de generación de procedimientos.
La generación de procedimientos es una técnica que se puede usar en cualquier idioma (definitivamente no está restringido a lenguajes de procedimiento como C, ya que se puede usar en lenguajes OO como Java, y en lenguajes lógicos como Prolog). Una buena comprensión de la recursión en cualquier idioma fortalecerá su comprensión de la generación de procedimientos.
En cuanto al código "serio" o no relacionado con el juego, las técnicas de generación de procedimientos se han utilizado para:
- simular el crecimiento de las ciudades para planificar la gestión del tráfico
- para simular el crecimiento de los vasos sanguíneos
- SpeedTree se usa en películas y presentaciones arquitectónicas
Si desea un ejemplo de placas de simulación de un generador mundial, tectónica, erosión, sombra de lluvia, etc., consulte: https://github.com/ftomassetti/lands
Además de eso, también hay un simulador de evolución de civilizaciones:
https://github.com/ftomassetti/civs
Un blog lleno de recursos interesantes es:
dungeonleague.com/
Ahora está abandonado, pero debes leer todas sus publicaciones
Wiki de Generación de Contenido Procesal:
si lo que quieres no está allí, entonces agrégalo;)
lo más importante es analizar cómo se estructuran las carreteras, las ciudades, los bloques y los edificios. descubra lo que todos los edificios tienen, por ejemplo, en común. mira fotos, mapas, planos y realidad. Si lo hace, estará un paso por delante de las personas que consideran la construcción de la ciudad como un asunto puramente informático.
a continuación, debe desarrollar soluciones sobre cómo crear esa geometría en pasos pequeños y distintos. tienes que definir reglas que conforman una ciudad creíble. si te gusta el modelado 3D, tienes que reconsiderar mucho de lo que has aprendido para que la computadora pueda seguir tus instrucciones en cualquier situación.
para no perder la ruta, debe configurar una gran cantidad de operadores que solo sean responsables de pequeñas partes de todo el proceso. eso hace que la depuración, la expansión y la mejora de su sistema sean mucho más fáciles. en el siguiente paso, debe vincular esos operadores y verificar los resultados cambiando los parámetros.
He visto demasiados "generadores de ciudades" que consisten principalmente en cajas de forma aleatoria con algunas texturas de ventanas:
No soy un experto en esto, pero puedo intentar y aportar algunas respuestas:
NetHack y su brethern son de código abierto y dependen en gran medida de la generación de niveles de procedimientos (mapas). Link a las descargas de este. Si está más interesado en la generación de paisajes / texturas / nubes, le recomiendo que busque Gamasutra y GameDev, que tienen bastantes artículos sobre esos temas.
AFAIK No creo que haya mucha diferencia entre los idiomas. La mayor parte del código que ve estará en C / CPP porque sigue siendo el idioma oficial de Game Developers, pero puede usar cualquier cosa que desee ...
Bueno, depende si tienes un proyecto que puede beneficiarse de dicha tecnología. Vi la generación de procedimientos utilizada en simuladores para el ejército (que puede considerarse un juego, aunque no son muy jugables :)).
Y una pequeña nota: mi definición, si la generación de procedimientos es algo que genera una gran cantidad de datos a partir de una pequeña cantidad de reglas o patrones y mucha aleatoriedad, sus resultados pueden variar :)