¿Cómo puedo hacer que el terreno en 3D se "caiga" como Animal Crossing?


15

Animal Crossing tiene una forma única de desplazarse por el mapa del mundo: cuando el personaje se mueve hacia abajo, el mundo gira y gira en la parte superior, como si estuviera pegado a un tubo de cartón:

Animal Crossing es el mundo de los cilindros

Este video muestra cómo se mueve.

¿Cómo puedo crear este efecto?


1
No me parece un efecto, parece un mundo 3D muy simple que la cámara solo está siguiendo.
James

Hackear el juego puede producir una falla de colisión que te permite caminar hacia el océano donde termina el mundo. Puedes ver partes del mundo "curvadas hacia atrás" en el vacío más allá del borde del mundo. Video aquí .
Anko

Respuestas:


6

Estaba experimentando un poco después de jugar Deathspank, que tiene un efecto similar. Aunque nunca profundicé lo suficiente como para ver si podría ajustarse para que funcione súper bien, una posibilidad es simplemente modificar elementos en su sombreador de vértices en función de la profundidad. Una función de mapeo cos (profundidad) a una modificación del eje Y funciona. Puede ajustarlo de modo que el mundo no solo se caiga en la distancia, sino también si está más cerca de cierta profundidad, haciendo que el mundo se sienta especialmente redondo. Puede hacer lo mismo para el valor del eje X para que parezca más esférico. No estoy seguro si así es como realmente lo hacen estos juegos; mis experimentos dieron resultados insatisfactorios, pero no jugué mucho con las proporciones, por lo que puede haber sido tan simple como cambiar la tasa de caída para mejorarla.


+1 porque así es como lo haría. Sin embargo, es posible que desee aclarar lo que quiere decir con "profundidad". Podría ser la distancia de la cámara o la distancia del personaje. Creo que sería bueno experimentar con ambos.
DaleyPaley

Lo siento, llego tarde a la fiesta, como 6 años tarde, pero en el caso de CA, la 'profundidad' se calcula en función de la distancia desde la cámara ... pero como la posición de la cámara se basa en la posición del personaje, todo es un poco conectado.
lvictorino

5

Parece que solo está tomando un "mundo plano" y mapeado en coordenadas cilíndricas . Esencialmente envolviendo el mundo en un cilindro. Hice algo similar con un mundo plano, pero lo envolví en una esfera:

ingrese la descripción de la imagen aquí ingrese la descripción de la imagen aquí

La forma en que lo hice para una esfera es similar a la forma en que lo haría para un cilindro. Elija un radio adecuado (ρ o "rho" en coordenadas cilíndricas) para su mundo. Para cada vértice, tome las coordenadas XZ de su mundo (suponiendo que Y es la altura), luego encubra las coordenadas cilíndricas usando XZ y el radio más Y. Si no agrega la Y, obtendrá un cilindro plano. Luego vuelve a convertir las coordenadas cartesianas para dibujar en el juego.


3
Otra cosa para mencionar, la dimensión Y del mundo en Animal Crossing es mucho más grande que la circunferencia del cilindro (solo al mirarlo, porque la línea del horizonte está muy cerca). Por lo tanto, parte del mapa mundial se recorta solo en las áreas más cercanas al personaje y esa área recortada se envuelve alrededor de todo el cilindro. Es similar a recortar un mapa basado en mosaicos 2D solo en las partes visibles.
ChrisC

Excelente punto Me imagino que eso también podría usarse para mantener la huella de memoria pequeña al cargar / descargar el mundo según sea necesario.
MichaelHouse

5

Quieres pasar de un mundo plano a uno cilíndrico.

Una rotación alrededor del eje x (en coordenadas homogéneas) se ve así:

     | 1   0   0   0 |
Rx = | 0  ca  -sa  0 |
     | 0  sa   ca  0 |
     | 0   0    0  1 |

Dónde:

ca = cos(angle) and sa = sin(angle)

Para calcular el ángulo, mira la imagen. El pi / 2 se cancela y te quedan:

angle = offset_from_character.z - radius

Además, mira la imagen. El ángulo del punto proyectado depende de la distancia horizontal desde el personaje, la distancia desde la esfera depende de la vertical.

new_position = character_position - vec3(0,radius,0) + Rx * vec3(0,radius+_old_position.y,0)

asegúrese de seleccionar cosas que están en el horizonte, de lo contrario, el mundo entero se envolverá.

Descargo de responsabilidad: no he probado esto y no soy un experto en matemáticas, pero la respuesta es algo como esto. Alguien corríjame si me equivoco.

mundo esférico

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.