Como os designers de jogos criam padrões de vibração?

13

Estou curioso para criar e implementar padrões de vibração para os controladores de console (para o controlador PS4, se isso fizer alguma diferença).

Existe um parâmetro de atraso e velocidade do motor, certo? Mas também podemos desaparecer do motor esquerdo para a direita ou fazê-los trabalhar juntos ...

Existe uma maneira padronizada de criar esses padrões?

Por exemplo, pensei em criá-los com áudio wav estéreo em um editor de áudio e ler o arquivo wav no meu código para convertê-los em atrasos e velocidades.

Como isso é feito na indústria de jogos?

franco
fonte
Vi sistemas de vibração sendo acionados pelo canal de áudio do jogo, então você pode estar no caminho certo. Porém, não posso falar da experiência pessoal sobre os detalhes - se havia uma faixa específica de ruído ou se o ruído era inferido a partir do volume do efeito sonoro ou se a conexão era apenas para acionar sons e ruídos através de uma interface consistente enquanto eles usavam componentes totalmente separados. formatos de dados de origem.
DMGregory
Você não tem esse controle preciso sobre o estrondo. Além disso, em um DualShock, o rumbler esquerdo é pesado e o direito é leve, de modo que você obtém baixa frequência do lado esquerdo. (Eu posso ter a esquerda / direita para trás, mas você entendeu).
Almo
@Almo E o sistema de vibração HD da Nintendo. Você certamente tem alguma forma de controle sobre isso
Bálint
O que revelaria que a pergunta era muito ampla. Na verdade, eu não sei sobre o sistema deles.
Almo
1
@DMGregory Os mecanismos de áudio que eu conheço que lidam com rumble / haptics usam apenas os mesmos gatilhos, envelopes, etc. - não formas de onda de áudio. Como Almo diz, você realmente não tem esse nível de controle no nível da API. Não posso imaginar que o sistema da Nintendo seja muito diferente - você não gostaria de atualizar nenhum sistema de vibração com uma frequência tão alta, onde dados de áudio reais eram uma boa escolha.
Richard Byron

Respostas:

8

O controle dualshock do PS4 possui valores de 1 byte para os pacotes de ruído esquerdo e direito, então isso basicamente funciona como música de 8 bits.

A maioria deles está protegida por um NDA, por isso é muito difícil obter informações sobre isso (mesmo as informações acima eram difíceis de obter, eu só descobri isso em um SDK de terceiros para o node.js.). Estas são as informações que reuni:

O processo é literalmente como fazer música estéreo de 1 byte (e supostamente é feita por um artista). Isso envolve conectar um controlador PS4 ao computador e usar um programa para criar os padrões de vibração. Eles fazem um baseado em adivinhação, depois executam, ajustam e repetem essas etapas até que o padrão pareça bom.

Alguns dos estrondos são gerados de forma programática (como quando um carro sai da estrada), mas geralmente são uma função simples (como seio) ou um valor constante semelhante à maneira como os telefones fazem isso. Até os efeitos mais complexos consistem em multiplicar um padrão de estrondo normalizado pela força que você deseja.

O PS4 SDK também vem com alguns padrões predefinidos. Alguns exemplos são: um padrão de dente de serra (aumentando constantemente, passando de 255 para 0), uma onda sinusal e triângulos (aumenta para 255 linearmente e depois volta para 0 linearmente).

Não consegui encontrar detalhes sobre outros controladores (especialmente o ruído HD do Switch, nem mesmo a patente descreve como isso funciona). Mas eles provavelmente estão usando uma abordagem semelhante com pacotes de rumble mais precisos.

Fontes:

Bálint
fonte
Encontrei este artigo há algum tempo, que apresenta a estrutura do relatório para a comunicação com o controlador , incluindo as compensações de bytes dos canais de vibração e a bandeira que os controla. Pode ser o mais abrangente disponível na Internet pública, sem acesso à documentação e APIs da própria Sony.
DMGregory
@DMGregory Você se importaria se eu adicionasse isso a uma seção de fontes?
Bálint
Por favor faça. :) Eu compartilhei esperando ser útil.
DMGregory
4

Não existe uma maneira padronizada.

Dispositivos diferentes têm diferentes capacidades e limitações de vibração.

A grande maioria dos dispositivos não suporta "feedback de força" real (por exemplo: um volante que ao bater em um meio-fio / calçada permitiria que o programador voltasse para um ângulo específico), mas apenas ria em alguma direção descontrolada / arbitrária.

Portanto, a maioria dos recursos Force Feedback mencionados no MSDN / DirectX e em outras APIs nunca se materializaram na prática no mercado de usuários ou possuem implementações ruins e / ou não portáteis dos controles "inteligentes" (envelope, repetição, etc.) como ser tão inutilizável que, na prática, os desenvolvedores geralmente são obrigados a usar os controles ON / OFF diretamente com sua própria implementação de efeito.

Os dispositivos mais avançados que permitem feedback de força servo-controlado precisam de APIs personalizadas, pois as APIs de entrada genéricas não suportam os parâmetros necessários (ângulos exatos, forças exatas, limites etc.).

A adição de tecnologias emergentes, como luvas de proteção VR, faz com que essas APIs genéricas sejam ainda mais ausentes.


A implementação mais comum é com dois motores DC com uma carga desbalanceada cada um, sendo um mais pesado que o outro e sem controle preciso da velocidade.

No mínimo, você tem controle liga / desliga sobre eles e pode executar algum controle limitado de energia PWM, mas não o controle exato da velocidade. Você não sabe qual será a velocidade e a vibração resultante. Controladores diferentes têm motores e pesos diferentes que serão executados em velocidades diferentes para a mesma configuração.

Os motores precisam girar primeiro e requerem potência total por um tempo, podendo ser PWM para uma configuração mais baixa. O atraso de rotação limita muito a capacidade de resposta.

Os controladores geralmente são atualizados uma vez por quadro, fornecendo uma frequência de atualização de aproximadamente 20Hz a 100Hz. Isso limita a resolução do seu controle PWM, pois você não deseja que os motores parem na configuração mais baixa. E você não sabe o quão baixo os motores do controlador do usuário final podem ficar antes de parar (parar), para que você precise de uma boa margem de segurança.

Alguns requisitos do sistema limitam ainda mais o que você pode fazer com eles.

Os dispositivos móveis geralmente têm apenas 1 motor de vibração e o PWM pode não ser possível devido à baixa inércia do tamanho do peso e à lenta taxa de atualização. O sistema pode filtrá-lo ainda mais para evitar abusos ou até danos (limites do transistor do driver de força e picos de indução) ou apenas um subsistema GPIO realmente lento.

No celular, você pode estar limitado ou querer limitar-se a "vibrar por aproximadamente X * 50 milissegundos" sem PWM.

Alguns dispositivos e controladores mais novos têm um solenóide acionado como um alto-falante por uma onda de áudio de baixa taxa de amostragem. Eles oferecem mais controle, mas são completamente diferentes dos controladores mais comuns.


Devido a todas essas diferenças que você pode querer resumo do sistema de vibração para jogar um número limitado de alto nível macro-efeitos pelo nome em um shoot-e-esqueça de moda: PlayVibration(player, "Got Loot");, PlayVibration(player, "Heavy Fall");, StopAllVibrationFor(player);, ...

Então você terá que criar efeitos de vibração de baixo nível e código de controle de vibração adaptados a cada plataforma individualmente .

Mesmo para um jogo de música que exige apenas um tiro PlayVibrationpara cada batida, é mais fácil gerenciar e controlar ao considerar a pausa do jogo e os problemas de ressincronização de um gerador de efeito periódico potencialmente inteligente.

Embora os dispositivos com um ruído real acionado por solenóide possam ser tratados como um dispositivo de áudio e usar APIs de áudio devido a preocupações com a bateria, isso pode violar os regulamentos do sistema se o solenóide estiver constantemente ligado / ativo . O "nível de potência 0" pode não ser o mesmo que o "solenóide desligado"; mesmo assim, é necessário um cuidado especial.

Stephane Hockenhull
fonte
3

De André LaMothe em Truques dos gurus da programação de jogos para Windows:

A programação desses dispositivos é muito complexa. Não é necessário apenas um bom entendimento de força, mola e movimento, mas os dispositivos e os eventos ou efeitos das forças têm uma relação muito próxima com as notas musicais. Ou seja, eles podem ter um envelope que modula as forças conforme são aplicadas aos vários motores e atuadores no joystick. Assim, valores como taxa, frequência, tempo etc. desempenham um papel no uso e na programação do feedback da força.

Embora esse texto seja bastante antigo, uma pesquisa rápida no MSDN por feedback de força mostra que os conceitos mencionados não mudaram muito; Aqui está um resumo dos tópicos abordados em seus Conceitos básicos de feedback de força :

  • Força constante: uma força constante em uma única direção
  • Força de rampa: força que aumenta ou diminui constantemente de magnitude.
  • Efeito periódico: força que pulsa de acordo com um padrão de onda definido.
  • Condição: Uma reação ao movimento ou posição ao longo de um eixo.
  • Envelope: Um envelope define um valor de ataque e um valor de desvanecimento, que modificam a magnitude inicial e final do efeito.
  • Deslocamento: define a quantidade pela qual a forma de onda é deslocada para cima ou para baixo a partir do nível base.
  • Escala: Um único valor de ganho pode ser aplicado a todos os efeitos de um dispositivo.

Em termos de PS4, a única coisa que descobri foi alguma documentação do Unreal Engine 4 , que afirma:

Esses (identificadores) serão mapeados de acordo com a implementação específica da plataforma. Por exemplo, o PS4 apenas escuta os canais XXX_LARGE e ignora o resto, enquanto o XBox One pode mapear o XXX_LARGE para os motores de manivela e XXX_SMALL para os motores de acionamento. E o iOS pode mapear LEFT_SMALL para seu único motor.

Como a resposta de Stephane Hockenhull indica, cada plataforma é diferente. E, como sugerido no bate - papo do GDSE , é possível que os detalhes da API de feedback de força do PS4 sejam restritos ao NDA.

Pikalek
fonte