Simulación agua / océano y física


42

Estoy buscando algunas referencias sobre la simulación del agua y cómo modelar su interacción con los cuerpos (como barcos, barcos, submarinos).

He encontrado muchas referencias sobre los aspectos visuales del agua (olas, reflejos, etc.), pero muy poco sobre cómo lidiar con la forma en que debería interactuar con los cuerpos. Mi experiencia con el desarrollo de juegos es muy limitada, y estoy realmente atrapado aquí.

Básicamente, me gustaría poder hacer que la posición de un barco varíe según las olas. ¿Cómo puedo hacer esto?

Estoy usando Panda3D, pero espero escuchar sobre las técnicas e implementaciones utilizadas en cualquier tecnología disponible.

Respuestas:


79

Básicamente estás buscando modelar 6 cosas para un barco: cabeceo, guiñada, balanceo, levantamiento, balanceo y sobretensión.

texto alternativo

La inclinación, el guiñada y el balanceo son rotaciones que el barco puede hacer mientras gira y gira subiendo y bajando por la pendiente de las olas. La inclinación, el balanceo y la marejada son movimientos inducidos por las olas que empujan a la nave y / o la nave se desliza por la cara de una ola.

"Como un auto conduciendo en colinas ..."

Imagine un bote en el agua como un automóvil que circula por un terreno montañoso. Si el automóvil conduce sobre colinas ondulantes (como un barco que pasa sobre olas), se inclinará y se inclinará a medida que sube y baja las colinas. Este es el tono, guiñada y rodar. Si las colinas (olas) son grandes, el automóvil (barco) conducirá hacia arriba y hacia abajo, lanzando, guiñando y rodando a medida que avanza. Si las colinas (olas) son realmente pequeñas (más pequeñas que el automóvil / barco), entonces el automóvil (barco) simplemente va a pasar sobre ellas y no se inclinará, guiñará ni rodará mucho.

Un barco grande puede atravesar olas más pequeñas, mientras que un barco pequeño se moverá hacia arriba y hacia abajo de las olas. Tomando el ejemplo de nuestro automóvil, imagine a alguien montando una bicicleta (pequeño barco) sobre un conjunto de pequeñas colinas (olas). Rodarán hacia arriba y hacia abajo a medida que avanzan. Entonces alguien conduce un gran camión (barco) sobre ellos. El camión es más grande que las colinas, por lo que realmente no sube y baja al pasar sobre ellas.

Sin embargo, a diferencia del automóvil, un barco está a medio camino en el agua, por lo que sus movimientos se verán algo amortiguados. Imagine un automóvil con neumáticos esponjosos realmente suaves. Cuando se conduce sobre pequeñas colinas, los neumáticos esponjosos simplemente lo suavizan. Los movimientos de un barco también se amortiguan, por lo que las pequeñas olas no lo harán rebotar como un automóvil en una carretera rocosa. Un submarino es una especie de barco amortiguado definitivo, ya que cuando está sumergido es bastante inmune a las ondas de superficie. Pero si está en la superficie, las olas lo moverán.

Un barco también se deslizará sobre las olas. Un barco que desciende por la ola se lanzará hacia adelante, por ejemplo. Por lo tanto, para ampliar nuestro ejemplo de automóvil, conviértalo en un automóvil con grandes ruedas esponjosas que conduzcan sobre una superficie algo resbaladiza. A menos que el automóvil esté haciendo funcionar el motor para compensar el deslizamiento, se deslizará por la ladera de una colina. Incluso si está ejecutando el motor, habrá algún deslizamiento.

El único lugar donde la analogía del automóvil y la colina tiene problemas es el hecho de que las olas cambian de forma con el tiempo. Una nave estacionaria subirá y bajará a medida que las olas suban y bajen.

Olas moviendo el barco

Si no hay viento que sopla sobre el barco para moverlo, y las olas tienen una forma de onda sinusoidal perfecta, entonces el barco básicamente no se moverá a ningún lado ya que se balancea en las olas. Se desliza hacia un lado a medida que sube por la cara de una ola, luego se desliza hacia el otro lado a medida que baja por la cara posterior de una ola.

Sin embargo, si las olas NO son simétricas (como la imagen de abajo), entonces las olas moverán la nave. Debido a que un lado de la ola es empinado, la nave se deslizará rápidamente por esa cara y será empujada por la cara de la ola. Sin embargo, la suave pendiente de la ola no tendrá mucho movimiento.

texto alternativo

Este no es el modelo más perfecto de movimiento de onda y forma que afecta el movimiento de un barco, pero probablemente lo hará para una simulación aproximada.

Efectos del viento

El viento también va a empujar su nave de manera independiente del movimiento de las olas o del movimiento de la nave. La dirección y la fuerza del viento pueden ser diferentes a la dirección y la fuerza de las olas.

Flotabilidad

La flotabilidad es lo bien que flota tu nave. Los barcos muy flotantes flotan en lo alto del agua, y los que no son flotantes se hunden. Los barcos (submarinos) con flotabilidad neutral pueden básicamente "flotar" en cualquier punto bajo el agua, sin hundirse ni elevarse. Si desea simular el hundimiento de un barco, hágalo flotar negativamente y comenzará a hundirse.

La flotabilidad también afecta la amortiguación del movimiento del barco. Un barco que es extremadamente flotante se moverá sobre la superficie del agua y se verá muy afectado por las olas. Una nave que sea menos flotante estará parcialmente sumergida y no se verá afectada tanto. Piense en la diferencia entre una pelota de ping-pong que flota en la superficie y una manzana, que flota pero está parcialmente bajo el agua. La pelota de pingpong se balancea hacia arriba y hacia abajo con cada movimiento de onda. La manzana, por otro lado, no responde a cada detalle de onda.

Volcando

Si el cabeceo, la guiñada y / o el balanceo exceden algún valor, tu nave se volcará. Cuando se vuelca, puede llenarse de agua, lo que reduce la flotabilidad y, por lo tanto, no flota más.

Enfermo de mar: o ~

Una nave que viaja paralela a la dirección del movimiento de las olas está "en el canal", y producirá los efectos más nauseabundos, al menos en mi experiencia :) Si viaja en la dirección de las olas, puede tener conducción suave, como tener el viento a tu espalda. Si viaja en la dirección opuesta a las olas, tendrá un paseo bastante duro mientras golpea cada "colina" de las olas a medida que se acerca. ¡Sin embargo, es un viaje bastante emocionante!

Otras lecturas

Aquí hay tres artículos que cubren la ciencia detrás de esto, que podrían darle algunas ideas. Aunque pesados ​​en matemáticas y ciencias, podrían darle una idea de cuáles son los diferentes factores.

Artículo 1: Modelado de la dinámica del balanceo del barco y su acoplamiento con el cielo y la inclinación

Artículo 2: Modelado y simulación de la dinámica de los buques de superficie marina

Artículo 3: Modelado y simulación de la dinámica de los buques de superficie marina

El autor haciendo investigación de campo

Aquí estoy yo hace unos 15 años cuando trabajé en barcos de investigación :)

texto alternativo


13
¿Cómo es posible que te veas exactamente igual que el perro de tu perfil? :-P
Notabene

jaja no me había dado cuenta de eso, pero ...
Tim Holt

Esto es muy gracioso !
BlueTrin

4

¿Tienes una simulación de agua?

Mis sugerencias son

  • finge con resortes. Cada vértice en la superficie del agua está acoplado en una malla de resorte. Tire uno hacia abajo y todos comenzarán a oscilar. Puede restringir el movimiento x, z y solo permitir y (o movimiento arriba / abajo)
  • finge sumando ondas sinusoidales de diferentes amplitudes y frecuencias. Algo como esto:

    rez = 32;
    for(i=-rez; i<rez; i++)
       for(j=-rez; j<rez; j++)
       {
          yofs = 0;
          yofs += 1.0 * sin( t + j*0.5 + i*0.125);
          yofs += 2.0 * sin( t + (rez-j)*0.125 + i*0.25 );
          yofs += 2.0 * sin( t + (j)*0.125 + (rez-i)*0.125 );
          yofs += 0.5 * sin( t + (rez+j)*0.125 + (rez+i)*0.125 );
          glVertex(i/rez, yofs, j/rez);
       }
    
  • simule la ecuación de onda 2D, esto puede ser muy rápido en la GPU. Consulte esta página para ver un applet de Java y algunos pseudocódigos . También revise esta versión, la misma pero aún más simple. Un boceto de procesamiento con código.

Desde el simulador de ecuaciones de onda puede obtener la dirección (dx, dz) de la onda en la que viaja

dx = h[x-1][z] - h[x+1][z] 
dz = h[x][z-1]- h[x][x+1] 

donde ha una matriz 2D con la altura de la ola en [x] [z]

Podría agregar esto a la posición de los botes para que viaje con la ola ... Lo he intentado, pero el movimiento se vuelve desigual, así que lo alisé con un simple filtro de caja de 3x3 (suavizando las diferencias / velocidades dx dz)

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.