Diseño: La Física no es una palabra sucia

Han habido muchas preguntas sobre cómo funciona el sistema de físicas del juego. ¿Será “ligero en físicas” como Wing Commander, un modelo serio de físicas Newtonianas como juegos más recientes o algo intermedio? Chris Roberts recientemente explicó este tema en un mensaje de los foros y pensamos que sería bueno compartirlo con todo el mundo:

Como alguien que estaba estudiando Física en la Universidad de Manchester antes de dejarlo para dedicarme a hacer juegos a tiempo completo, os puedo asegurar a todos que el modelo de físicas es completamente preciso y es una simulación de cuerpos rígidos. Lo sé porque yo escribí el código.

Quizá debería haber hecho un trabajo mejor durante la demostración de la GDC, pero si estáis volando a una velocidad y marcas la velocidad deseada como cero, verás como se articulan y disparan los impulsores frontales para reducir tu velocidad. Si habéis visto mi demo os daréis cuenta de que hay algo de momentum con el Hornet cuando reduzco la velocidad al acercarme al puente. Puede que no haya sido aparente en pantalla, pero os puedo asegurar que el Hornet no se detiene instantáneamente. Si le cargas con más masa (como armas adicionales) sentirás el efecto de esto.

No hay modelado rozamiento artificial: todo funciona como lo haría en el espacio.

Adicionalmente, en realidad se aplica contra-empuje dentro de las físicas y si tú tuvieses el controlador en tus manos lo sentirías. Si miráis de cerca el vídeo podréis ver la inercia de esto: la nave no deja de alabear o cabecear de repente. Aún así, hay una muy buena razón por la que no veis a los impulsores disparándose de manera completamente precisa.

El problema con mostrar visualmente la impulsión de manera apropiada es que en realidad tendría un aspecto bastante horrible (creedme, probé esto primero mientras lo programaba, y es fácil volver al modo de disparo visual viejo. Ahora estoy haciendo ahora algo de trabajo para que tengan mejor aspecto).

La razón de esto es que no hay rozamiento en el espacio, así que incluso un micro-impulso hace que el Hornet (o cualquier astronave) rote hasta que apliques un contra-impulso. Así que lo que está pasando en realidad es que el sistema de control de vuelo siempre está aplicando micro-impulsos y contra-impulsos para cumplir los deseos del piloto. Esto resulta en que los impulsores no paran de disparar en cantidades variadas de micro-impulsos y contra-impulsos y en realidad no te dan una información decente sobre la aplicación general de la impulsión. Creo que ya sabéis que a mi me gusta que las cosas tengan buen aspecto (seamos sinceros, todos sabemos que probablemente no os estarías enfrentando en dogfights espaciales a velocidades de la Segunda Guerra Mundial, pero es mucho más divertido de lo que la realidad probablemente será), por lo que pasa es que el sistema sigue estando modelado con precisión, pero uso la velocidad del delta angular y linear para controlar la representación visual del empuje.

Aquí están mis comentarios del código, para los interesados:

//Note the thrustGoal is actually the linear velocity delta (desired vel – current vel of
//the vehicle & rotational vel rather than the actual linear & angular acceleration / thrust. //This is because, while inaccurate its cooler to see more constant thrust that gives
//you a visual clue as to what correctional movement / velocity vectors the vehicle is using.
//If we just used the acceleration as opposed to the desired velocity correction, the thruster flames
//would flicker on and off – especially in the Wing Commander use case of Space, where
//there is no atmosphere to provide drag.
//
//Of course if you pass the actual accelerations to SetThrustGoal, then you’ll get an accurate //visual representation of what a thruster would really do

¡Espero que esto clarifique cualquier confusión!

Admitiré que la nave no necesita tener alas o ventiladores en el morro, pero la idea detrás de esto es de que sea posible el vuelo atmosférico (esto no es una promesa de acción planetaria en la versión temprana del juego; pero permitirá que se expanda en esta dirección) y de que sirva de recolector RAMJET. ¡Además de que hace que tenga un aspecto molón!

Chris Roberts

Original.