Jump to content
UnitySpain

Aceptamos donaciones vía Paypal.

UnitySpain.com es un servicio gratuito, pero mantener la Comunidad conlleva una serie de gastos.

Fondo Anual Unityspain: Donados 15,00€ de 150,00€

  • Servidor: Dominio.com y Hosting Web
  • Mantenimiento de los Foros
  • Contenido y Servicios Extras
  • Mantenimiento para Redes Sociales
Jeko37

Generar aleatoriamente un planeta

Recommended Posts

Buenas! les comento, mi idea es poder crear un universo generado aleatoriamente a partir de un "seed" o semilla, para desarrollar digamos un framework base que nos permita generar un universo entero, explorable como base para cualquier juego que se base en exploración espacial, pero bueno llegar a eso ya es algo más ambicioso y como recien estoy empezando me gustaria abordar las cosas una por una.

Mi idea es empezar creando un script capaz de generar un planeta entero, con sus fallas geograficas, oceanos, montañas, etc e ir afinando el codigo de dicho generador para hacerlo lo más realista posible, que genere paisajes lo más parecidos a los que podemos encontrar en nuestro planeta.

Como referencia les dejo estos dos videos descriptivos de planetas generados aleatoriamente utilizando OpenGL y Java, mi idea es poder hacer esto como punto de partida:

Bueno, acá necesitaria de su ayuda, ¿alguien alguna vez realizo algo como esto? ¿tiene conocimiento de generacion de terrenos aleatorios o algo con lo que pueda empezar a documentarme? obviamente, paralelo a este hilo yo estoy buscando información por mi mismo en google y a medida que vaya avanzando iré publicando los avances para quien esté interesado.

Share this post


Link to post
Share on other sites

Podrias empezar con un sistema de voxel para entender los conceptos básicos matemáticos y la implementación de técnicas para la optimización como los CHUNK.

Si logras algo decente con esta técnica entonces podrias pasarte a produceral mesh e intentar aplicar las mismas técnicas pero esta vez con matemáticas más complejas, recuerda que tambien un entorno tiene componentes físicos, por lo requiere un sistema que pueda manejarse de manera estable y simular sus propiedades.

Por ejemplo, una idea que se me ocurre es realizar un VOXEL con una cuadrícula de 100x100x100 y que cada bloque ocupe 1 unidad, luego dividir la unidad que cada bloque ocupa, con cada división obtendrás más "calidad", en este punto puedes implementar "shaders" para convertir el voxel en una malla. 

 

Te dejo un tutorial que recomiendo lo sigas para entender algunos puntos complejos de estas implementaciones. 

https://forum.unity.com/threads/tutorial-procedural-meshes-and-voxel-terrain-c.198651/

Y otro para entender un poco más sobre shaders (No se aplica en su totalidad a Unity pero sirve para los conceptos)

 

Desde ya te digo, si tu conocimiento matemático es bajo, trata de aprender cada fórmula, para que en un futuro entiendas que estás haciendo. 

Edited by francoe1

Share this post


Link to post
Share on other sites

Hola muchas gracias, cuando llegue a casa (ahora estoy en el trabajo) voy a revisar lo que me pasaste y tratar de aplicar los conceptos, mi conocimiento matematico es bajo pero si tengo que sentarme a leer las formulas, lo hago, ya vengo mentalizado de que la resolución para este problema viene muy ligado a la parte matematica asi que no me queda otra que aprender. Gracias por la información!

Share this post


Link to post
Share on other sites
7 hours ago, Jeko37 said:

poder crear un universo generado aleatoriamente a partir de un "seed" o semilla, para desarrollar digamos un framework base que nos permita generar un universo entero, explorable como base para cualquier juego que se base en exploración espacial, pero bueno llegar a eso ya es algo más ambicioso y como recien estoy empezando me gustaria abordar las cosas una por una.

El proyecto está genial, solo acordate de que, una vez que tengas todo cocinado hacé la parte del gameplay, diseño e historia del juego xD, no como:

maxresdefault.jpg

fuera de joda, sumando a lo que dijo francoe tenés charlas de este Tipo (el de la foto, no francoe) diciendo como funciona la matemática de No man sky, supongo está interesante. sobretodo cuando estés con el foco en el planeta y el ruido para generar esas fallas geográficas.

 

Share this post


Link to post
Share on other sites

toma en cuenta q unity basa casi todos sus calculos en floats, q pierden precision alrededor del 100,000 en adelante… si piensas en 100mil años luz no es ni un grano en los 47billones de años luz del universo… tendras q ingeniartela para dividir el espacio

1 hour ago, lightbug said:

…como funciona la matemática de No man sky, supongo está interesante. sobretodo cuando estés con el foco en el planeta y el ruido para generar esas fallas geográficas.

 

q buena!

Share this post


Link to post
Share on other sites
13 minutes ago, Braltor said:

toma en cuenta q unity basa casi todos sus calculos en floats, q pierden precision alrededor del 100,000 en adelante… si piensas en 100mil años luz no es ni un grano en los 47billones de años luz del universo… tendras q ingeniartela para dividir el espacio

Sí, buen punto. me acuerdo de este Topic que trata de eso (hay un vid que demuestra el efecto, si es que todavía está el link intacto):

 

Share this post


Link to post
Share on other sites

para mi este tema es como el santo grial de la programacion... otros lo han logrado.... asi que seguire intentandolo... 

Share this post


Link to post
Share on other sites

Ayer estuve revisando información, me vi los vídeos que me pasaron y encontré alguna que otra porción de código que no llevó a buen puerto, con respecto al problema de los floats se puede resolver dividiendo el espacio en cuadriculas y reiniciando las coordenadas de las cosas cuando se pase de una cuadricula espacial a la otra, pero desconozco si Unity me permite hacer algo así, en su momento supongo que se podrá abordar el problema pero por ejemplo imaginen que están dentro de un área espacial y van a pasar a la siguiente, simplemente trasladas el personaje de su coordenada actual y lo mandas más atrás mucho mas atrás (como una teletransportacion digamos jaja) y en ese interín borras todo el contenido 3D del area espacial y cargas los nuevos elementos (previamente procesados) y das la sensación de "infinitud" espacial sin llegar a tener problemas con el calculo de los floats, para poder volver para atras y cargar contenidos virtuales viejos como estaban antes es que ayudaria el seed. No se si me hago entender.

Por lo que estuve viendo en la documentación de Unity no hay porque creer que esto sea una tarea imposible, lo primero es lograr un pequeño algoritmo que deforme una esfera, después la idea es aumentar el detalle a medida que uno se acerca (si hacemos todo de una no hay manera que el procesador lo aguante) y después vendría la parte mas divertida, diseñar un algoritmo matemático que genere un ruido que de como resultado paisajes que den la sensación de reales, yo vi en No Man Sky los planetas y me aprecio muy descuidado el algoritmo que genera los mundos, da la sensación de que todos los planetas son iguales cuando para mi la gracia es entender que los planetas son muy diferentes entre si, por ejemplo vas a tener planetas como la tierra, con variedad de biomas muy distintos según las áreas donde aterrices, planetas como marte donde el paisaje va a ser mas bien monótono, planetas golpeados por asteroides con gran cantidad de crateres, planetas gaseosos que serian los mas fáciles de hacer ya que no hay calculo de terreno.

Con el tema de la historia del juego, no tengo en mente hacer un juego a partir de esto, sino crear un framework de base para que quien quiera crear un juego con un universo explorable lo pueda hacer facilmente.

En fin, cuando tenga algún avance voy a ir publicando las imágenes y el código así me ayudan a ir afinándolo.

Aca va un poco de matemáticas para empezar a sudar frio: http://mathproofs.blogspot.com.ar/2005/07/mapping-cube-to-sphere.html

Share this post


Link to post
Share on other sites
hace 11 minutos, Jeko37 said:

Ayer estuve revisando información, me vi los vídeos que me pasaron y encontré alguna que otra porción de código que no llevó a buen puerto, con respecto al problema de los floats se puede resolver dividiendo el espacio en cuadriculas y reiniciando las coordenadas de las cosas cuando se pase de una cuadricula espacial a la otra, pero desconozco si Unity me permite hacer algo así, en su momento supongo que se podrá abordar el problema pero por ejemplo imaginen que están dentro de un área espacial y van a pasar a la siguiente, simplemente trasladas el personaje de su coordenada actual y lo mandas más atrás mucho mas atrás (como una teletransportacion digamos jaja) y en ese interín borras todo el contenido 3D del area espacial y cargas los nuevos elementos (previamente procesados) y das la sensación de "infinitud" espacial sin llegar a tener problemas con el calculo de los floats, para poder volver para atras y cargar contenidos virtuales viejos como estaban antes es que ayudaria el seed. No se si me hago entender.

Por lo que estuve viendo en la documentación de Unity no hay porque creer que esto sea una tarea imposible, lo primero es lograr un pequeño algoritmo que deforme una esfera, después la idea es aumentar el detalle a medida que uno se acerca (si hacemos todo de una no hay manera que el procesador lo aguante) y después vendría la parte mas divertida, diseñar un algoritmo matemático que genere un ruido que de como resultado paisajes que den la sensación de reales, yo vi en No Man Sky los planetas y me aprecio muy descuidado el algoritmo que genera los mundos, da la sensación de que todos los planetas son iguales cuando para mi la gracia es entender que los planetas son muy diferentes entre si, por ejemplo vas a tener planetas como la tierra, con variedad de biomas muy distintos según las áreas donde aterrices, planetas como marte donde el paisaje va a ser mas bien monótono, planetas golpeados por asteroides con gran cantidad de crateres, planetas gaseosos que serian los mas fáciles de hacer ya que no hay calculo de terreno.

Con el tema de la historia del juego, no tengo en mente hacer un juego a partir de esto, sino crear un framework de base para que quien quiera crear un juego con un universo explorable lo pueda hacer facilmente.

En fin, cuando tenga algún avance voy a ir publicando las imágenes y el código así me ayudan a ir afinándolo.

¿Por qué no empezar con algo más simple?, me comentaste que tus conocimientos en matemáticas son bajos y esto es matemática avanzada, empieza con simulación de olas deformación de mallas planas.

Share this post


Link to post
Share on other sites
hace 37 minutos, Jeko37 said:

Ayer estuve revisando información, me vi los vídeos que me pasaron y encontré alguna que otra porción de código que no llevó a buen puerto, con respecto al problema de los floats se puede resolver dividiendo el espacio en cuadriculas y reiniciando las coordenadas de las cosas cuando se pase de una cuadricula espacial a la otra, pero desconozco si Unity me permite hacer algo así, en su momento supongo que se podrá abordar el problema pero por ejemplo imaginen que están dentro de un área espacial y van a pasar a la siguiente, simplemente trasladas el personaje de su coordenada actual y lo mandas más atrás mucho mas atrás (como una teletransportacion digamos jaja) y en ese interín borras todo el contenido 3D del area espacial y cargas los nuevos elementos (previamente procesados) y das la sensación de "infinitud" espacial sin llegar a tener problemas con el calculo de los floats, para poder volver para atras y cargar contenidos virtuales viejos como estaban antes es que ayudaria el seed. No se si me hago entender.

Por lo que estuve viendo en la documentación de Unity no hay porque creer que esto sea una tarea imposible, lo primero es lograr un pequeño algoritmo que deforme una esfera, después la idea es aumentar el detalle a medida que uno se acerca (si hacemos todo de una no hay manera que el procesador lo aguante) y después vendría la parte mas divertida, diseñar un algoritmo matemático que genere un ruido que de como resultado paisajes que den la sensación de reales, yo vi en No Man Sky los planetas y me aprecio muy descuidado el algoritmo que genera los mundos, da la sensación de que todos los planetas son iguales cuando para mi la gracia es entender que los planetas son muy diferentes entre si, por ejemplo vas a tener planetas como la tierra, con variedad de biomas muy distintos según las áreas donde aterrices, planetas como marte donde el paisaje va a ser mas bien monótono, planetas golpeados por asteroides con gran cantidad de crateres, planetas gaseosos que serian los mas fáciles de hacer ya que no hay calculo de terreno.

entonces tienes q enfrentarte a estas cosas entre otras:

* como procesas las fisicas en los limites de esas cuadriculas?
* como procesas los objetos en cada cuadricula en todo el universo en tiempo real para q hagan sus tareas segundo a segundo?
* como procesas los movimientos y los sistemas de ecuaciones de gravedad entre todos los objetos de diferentes masas en todas las cuadriculas?
* hacer el perlin de un planeta es sencillo, pero como le aplicaras erosion para q el entorno se vea real?
* como vas a simular las dinamicas de fluidos para aguas y atmosferas?
* como vas a procesar los datos de suelos plantables y los q no son aptos para la vida?
* como vas a generar formas de vida diferentes adaptadas a sus planetas y entornos?

 

Share this post


Link to post
Share on other sites
hace 3 minutos, Braltor said:

entonces tienes q enfrentarte a estas cosas entre otras:

* como procesas las fisicas en los limites de esas cuadriculas?
* como procesas los objetos en cada cuadricula en todo el universo en tiempo real para q hagan sus tareas segundo a segundo?
* como procesas los movimientos y los sistemas de ecuaciones de gravedad entre todos los objetos de diferentes masas en todas las cuadriculas?
* hacer el perlin de un planeta es sencillo, pero como le aplicaras erosion para q el entorno se vea real?
* como vas a simular las dinamicas de fluidos para aguas y atmosferas?
* como vas a procesar los datos de suelos plantables y los q no son aptos para la vida?
* como vas a generar formas de vida diferentes adaptadas a sus planetas y entornos?

 

Como.. Para una persona y agregado a esto sin conocimientos es IMPOSIBLE. Uno tiene que ser sincero .

Share this post


Link to post
Share on other sites
hace 7 minutos, francoe1 said:

Como.. Para una persona y agregado a esto sin conocimientos es IMPOSIBLE. Uno tiene que ser sincero .

jajaj si… si alguien me dijera "te pago mes a mes por hacer eso hasta q lo termines" eso me daria una gran alegria xq tendria trabajo pagado para el resto de mi vida!

Edited by Braltor

Share this post


Link to post
Share on other sites
Ahora, Braltor said:

jajaj si… si alguien me dijera "te pago mes a mes por hacer eso hasta q lo termines" eso me daria una gran alegria xq tendria trabajo pagado para el resto de mi vida!

Jajajjaja Exactamente... 

Share this post


Link to post
Share on other sites

jeje, tampoco es tanto... toda la vida no... yo creo que lo acabarias antes... jeje

yo poco a poco voy avanzando en el tema... tengo varios proyectos diferentes sobre esto... 

redondear un cubo es facil (no es un cubo, son seis planos individuales) 

aplicar ruido tambien es muy facil... a la vez que aplicas ese ruido, cojes el valor que te ha dado ruido para generar una textura tipo splash (pudiendo mexlar cuatro texturas, una por cada canal de la textura splash (rgba)... cada una con su bumpMap)

ya esta texturizado todo... 

meto otra esfera para el oceano y otra para la atmosfera

el problema de la suvdivision es lo que mas me esta costando... se te acercas cada plano de divide en cuatro, que son echos sus hijos, y desactivo el render del pader.... y asi sucesibamente... hasta que cada "poligono" mide 1 unidad de lado... si te alejas desactivo los hijos y activo los padres... pero luego me di cuenta de que los bordes de los planos no encajan bien con los que tienen diferente "LOD" ("nivel de detalle"... por llamarlo de alguna forma)... y opte por esta solucion chapuzera pero rapida... (encontrada en la web)

Screenshot_20180523-195527.png

la imagenes son solo para hacerte una idea... ya que los planos son 16*16..

izquierda: mi problema

derecha: la solucion que he usado

...haciendola despues de recalcular las "normals" para que no haya cambio de iluminacion al "inclinar" ese ultimo poligono del borde/union...

claro, ahora los planos son de 18*18... en vez de 16*16... pero asi ademas ya coinciden tambien las normales de los bordes con los de los bordes vecinos ya que hay poligonos solapados que luego inclino (al final del todo del calculo)

pero ahora lo que si que no se como voy a haces es para llenar el planeta de vegetacion... o de algo...:7_sweat_smile:

y luego tendria que solucionar el problema ese de la precision...:7_sweat_smile:

Edited by Igor

Share this post


Link to post
Share on other sites

×
×
  • Create New...