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?
playstation4
force-feedback
franco
fonte
fonte
Respostas:
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:
fonte
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
PlayVibration
para 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.
fonte
De André LaMothe em Truques dos gurus da programação de jogos para Windows:
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 :
Em termos de PS4, a única coisa que descobri foi alguma documentação do Unreal Engine 4 , que afirma:
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.
fonte