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?
playstation4
force-feedback
franco
fuente
fuente
Respuestas:
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:
fuente
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
PlayVibration
para 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.
fuente
De André LaMothe en Trucos de los gurús de programación de juegos de Windows:
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 :
En términos de la PS4, lo único que encontré fue documentación de Unreal Engine 4 , que dice:
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.
fuente