¿Cómo crean los diseñadores de juegos patrones de vibración?

13

Tengo curiosidad por crear e implementar patrones de vibración para controladores de consola (para el controlador PS4, si hace la diferencia).

Hay un parámetro de retraso y velocidad del motor, ¿verdad? Pero también podemos desvanecernos del motor izquierdo al derecho, o hacer que funcionen juntos ...

¿Existe una forma estandarizada de crear esos patrones?

Por ejemplo, pensé en crearlos con audio wav estéreo en un editor de audio y leer el archivo wav en mi código para convertirlos en retrasos y velocidades.

¿Cómo se hace esto en la industria del juego?

franco
fuente
He visto sistemas retumbantes conducidos a través de la canalización de audio del juego, por lo que puede estar en camino allí. Sin embargo, no puedo hablar por experiencia personal sobre los detalles: si hubo una pista de ruido específica o si se dedujo el ruido del volumen del efecto de sonido, o si la conexión fue puramente para activar sonidos y ruidos a través de una interfaz consistente mientras se usaban por separado formatos de datos fuente.
DMGregory
No tienes ese control preciso sobre el ruido. Además, en un DualShock, el rumbler izquierdo es pesado y el derecho es liviano, por lo que obtienes baja frecuencia del que está a la izquierda. (Puede que tenga la izquierda / derecha hacia atrás, pero se entiende la idea).
Almo
@Almo ¿Qué pasa con el sistema de retumbar HD de Nintendo? Seguramente tienes algún tipo de control sobre eso
Bálint
Lo cual revelaría que la pregunta es demasiado amplia. En realidad no sé sobre su sistema.
Almo
1
@DMGregory Los motores de audio que conozco que manejan ruidos / hápticos solo usan los mismos disparadores, envolventes, etc., no formas de onda de audio. Como dice Almo, realmente no tienes ese nivel de control en el nivel API. No puedo imaginar que el sistema de Nintendo sea muy diferente: no querría tener que actualizar ningún sistema de ruidos a una frecuencia tan alta donde los datos de audio reales fueran una buena opción.
Richard Byron

Respuestas:

8

El controlador PS4 dualshock tiene valores de 1 byte para los paquetes de rumble izquierdo y derecho, por lo que esto básicamente funciona como música de 8 bits.

La mayoría de estos están detrás de un NDA, por lo que es muy difícil obtener información sobre esto (incluso la información anterior fue difícil de obtener, solo lo descubrí en un SDK de terceros para node.js). Estas son las informaciones que reuní:

El proceso es literalmente como hacer música estéreo de 1 byte (y supuestamente está hecho por un artista musical). Implica conectar un controlador PS4 a la computadora y usar un programa para crear los patrones retumbantes. Hacen uno basado en adivinar, luego lo ejecutan, luego lo ajustan y repiten estos pasos hasta que el patrón se sienta bien.

Algunos de los ruidos se generan programáticamente (como cuando un automóvil se sale de la carretera), pero generalmente son una función simple (como seno) o un valor constante similar a cómo lo hacen los teléfonos. Incluso los efectos más complejos consisten en multiplicar un patrón de ruido normalizado por la fuerza que deseas.

El SDK de PS4 también viene con algunos patrones predefinidos. Algunos ejemplos son: un patrón de diente de sierra (que aumenta constantemente, luego pasa de 255 a 0), una onda sinusal y triángulos (aumenta a 255 linealmente, luego vuelve a bajar linealmente a 0).

No pude encontrar ningún detalle sobre otros controladores (especialmente el retumbar HD de Switch, ni siquiera la patente describe cómo funciona). Pero probablemente estén usando un enfoque similar con paquetes de rumble más precisos.

Fuentes:

Bálint
fuente
Encontré este artículo hace un tiempo, que establece la estructura del informe para comunicarse de un lado a otro con el controlador , incluidas las compensaciones de bytes de los canales ruidosos y la bandera que los controla. Podría ser el más completo disponible en Internet público, sin acceso a la propia documentación y API de Sony.
DMGregory
@DMGregory ¿Te importaría si agregara eso a una sección de fuentes?
Bálint
Por favor, hazlo. :) Lo compartí esperando ser de utilidad.
DMGregory
4

No hay forma estandarizada.

Los diferentes dispositivos tienen diferentes capacidades y limitaciones.

La gran mayoría de los dispositivos no son compatibles con la "retroalimentación de fuerza" real (por ejemplo: un volante que al golpear una acera / bache permitiría que el programador retroceda a un ángulo específico), sino que simplemente retumba en una dirección incontrolada / arbitraria.

Entonces, la mayoría de las características de Force Feedback mencionadas en MSDN / DirectX y otras API nunca se han materializado en la práctica en el mercado de usuarios o tienen implementaciones tan pobres y / o no portátiles de los controles "inteligentes" (envolvente, repetición, etc.) como ser tan inutilizable que, en la práctica, los desarrolladores a menudo se ven obligados a usar los controles ON / OFF directamente con su propia implementación de efectos.

Los dispositivos más avanzados que permiten la retroalimentación de fuerza controlada por servo necesitan API personalizadas, ya que las API de entrada genéricas no admiten los parámetros necesarios (ángulos exactos, fuerzas exactas, límites, etc.).

Agregar tecnologías emergentes como guantes de realidad virtual a la mezcla hace que esas API genéricas sean aún más insuficientes.


La implementación más común es con dos motores de CC con una carga desequilibrada cada uno, uno pesado más pesado que el otro y sin control de velocidad preciso.

Como mínimo, tiene control de encendido / apagado sobre ellos y puede hacer un control de potencia PWM limitado pero no un control de velocidad exacto. No sabes cuál será la velocidad y la vibración resultante. Diferentes controladores tienen diferentes motores y pesos que funcionarán a diferentes velocidades para la misma configuración.

Los motores tienen que girar primero y requieren potencia completa durante un tiempo, luego pueden ser PWM a una configuración más baja. El retraso de giro limita en gran medida la capacidad de respuesta.

Los controladores a menudo se actualizan una vez por cuadro, lo que le brinda una frecuencia de actualización de aproximadamente 20Hz a 100Hz. Esto limita la resolución de su control PWM ya que no desea que los motores se detengan en la configuración más baja. Y no sabe qué tan bajos pueden ir los motores del controlador de usuario final antes de detenerse (parar), por lo que necesita un buen margen de seguridad.

Algunos requisitos del sistema limitan aún más lo que puede hacer con ellos.

Los dispositivos móviles generalmente solo tienen 1 motor de vibración y PWM puede no ser posible debido a la baja inercia del tamaño del peso y la velocidad de actualización lenta. El sistema puede filtrarlo aún más para evitar abusos o incluso daños (límites del transistor del controlador de potencia y picos de inducción) o simplemente un subsistema GPIO realmente lento.

En el móvil, puede estar limitado o limitarse a "vibrar durante aproximadamente X * 50 milisegundos" sin PWM.

Algunos dispositivos y controladores más nuevos tienen un solenoide accionado como un altavoz por una onda de audio de baja frecuencia de muestreo. Estos le dan más control, pero son completamente diferentes de los controladores más comunes.


Debido a todas estas diferencias es posible que desee abstracta del sistema de vibración para jugar un número limitado de alto nivel macro-efectos por su nombre en un tiroteo y olvidar la moda: PlayVibration(player, "Got Loot");, PlayVibration(player, "Heavy Fall");, StopAllVibrationFor(player);, ...

Luego tendrá que crear efectos de vibración de bajo nivel y un código de control de vibración adaptado a cada plataforma individualmente .

Incluso para un juego de música que requiere un solo golpe PlayVibrationpara cada latido es más fácil de administrar y controlar cuando se tiene en cuenta la pausa del juego y los problemas de volver a sincronizar un generador de efectos periódicos que podría ser inteligente.

Si bien los dispositivos con un ruido real accionado por un solenoide pueden tratarse como un dispositivo de audio y usar API de audio debido a problemas con la batería, esto puede entrar en conflicto con las regulaciones del sistema si el solenoide está constantemente encendido / activo . El "Nivel de potencia 0" puede no ser el mismo que el "Solenoide desactivado", por lo que incluso entonces se necesita un cuidado especial.

Stephane Hockenhull
fuente
3

De André LaMothe en Trucos de los gurús de programación de juegos de Windows:

La programación de estos dispositivos es muy compleja. No solo se necesita una buena comprensión de la fuerza, el resorte y el movimiento, sino que los dispositivos y los eventos o efectos de las fuerzas tienen una relación muy estrecha con las notas musicales. Es decir, pueden tener una envoltura que modula las fuerzas a medida que se aplican a los diversos motores y actuadores en el joystick. Por lo tanto, valores como frecuencia, frecuencia, temporización, etc., juegan un papel importante en el uso y la programación de la retroalimentación de fuerza.

Si bien ese texto es bastante antiguo, una búsqueda rápida a través del MSDN para comentarios de fuerza muestra que los conceptos mencionados no han cambiado mucho; Aquí hay un resumen de los temas cubiertos en sus Conceptos básicos de retroalimentación de fuerza :

  • Fuerza constante: una fuerza constante en una sola dirección
  • Fuerza de rampa: una fuerza que aumenta o disminuye de forma constante en magnitud.
  • Efecto periódico: una fuerza que pulsa de acuerdo con un patrón de onda definido.
  • Condición: una reacción al movimiento o posición a lo largo de un eje.
  • Envoltura: una envolvente define un valor de ataque y un valor de desvanecimiento, que modifican la magnitud inicial y final del efecto.
  • Desplazamiento: define la cantidad en que la forma de onda se desplaza hacia arriba o hacia abajo desde el nivel base.
  • Escala: se puede aplicar un único valor de ganancia a todos los efectos para un dispositivo.

En términos de la PS4, lo único que encontré fue documentación de Unreal Engine 4 , que dice:

Estos (identificadores) se asignarán de acuerdo con la implementación específica de la plataforma. Por ejemplo, la PS4 solo escucha los canales XXX_LARGE e ignora el resto, mientras que la XBox One podría asignar el XXX_LARGE a los motores de la manija y XXX_SMALL a los motores del gatillo. Y iOS puede asignar LEFT_SMALL a su único motor.

Como indica la respuesta de Stephane Hockenhull, cada plataforma es diferente. Y como se sugiere en el chat GDSE , es posible que los detalles de la API de retroalimentación forzada de PS4 estén restringidos por NDA.

Pikalek
fuente