Oyun tasarımcıları titreşim kalıplarını nasıl oluştururlar?


13

Konsol denetleyicileri için (fark yaratıyorsa PS4 denetleyicisi için) titreşim desenleri oluşturmayı ve uygulamayı merak ediyorum.

Gecikme ve motor hızı parametresi var mı? Ama aynı zamanda sol motordan sağa doğru kaybolabilir veya birlikte çalışmasını sağlayabiliriz ....

Bu kalıpları oluşturmanın standart bir yolu var mı?

Örneğin, bir ses düzenleyicide stereo wav ses ile oluşturmayı ve gecikme ve hızlara dönüştürmek için kodumdaki wav dosyasını okumayı düşündüm.

Oyun endüstrisinde bu nasıl yapılır?


Oyunun ses kanalından geçen gürültülü sistemler gördüm, bu yüzden yolda olabilirsiniz. Bununla birlikte, kişisel deneyimlerden ayrıntılar hakkında konuşamam - belirli bir rumble parçası olup olmadığı veya ses efekti sesinden rumble çıkarılıp çıkarılmadığı veya bağlantı tamamen ayrı kullanıldıklarında tutarlı bir arayüz üzerinden sesleri ve gürlemeleri tetikleyecekse kaynak veri formatları.
DMGregory

Gürültü üzerinde tam bir kontrole sahip değilsin. Ayrıca, bir DualShock'ta, sol rumbler ağırdır ve sağdaki hafiftir, böylece soldakinden düşük frekans alırsınız. (Sol / sağ geri olabilir, ama fikri anlarsınız).
Almo

@Almo Peki ya Nintendo'nun HD gürültü sistemi. Kesinlikle bunun üzerinde bir çeşit kontrole sahipsiniz
Bálint

Bu da sorunun çok geniş olduğunu ortaya çıkaracaktır. Aslında sistemlerini bilmiyorum.
Almo

1
@DMGregory Gürültü / haptiklerin işlediği ses motorlarının ses dalga formlarını değil aynı tetikleyicileri, zarfları vb. Kullandığını biliyorum. Almo'nun dediği gibi, API düzeyinde gerçekten bu kontrol seviyesine sahip değilsiniz. Nintendo'nun sisteminin çok farklı olduğunu hayal edemiyorum - gerçek ses verilerinin iyi bir seçim olduğu yüksek frekansta herhangi bir rumble sistemini güncellemek istemezsiniz.
Richard Byron

Yanıtlar:


8

PS4 dualshock kontrolörünün sol ve sağ gürlemek paketleri için 1 bayt değerleri vardır, bu temelde 8 bit müzik gibi çalışır.

Bunların çoğu bir NDA'nın arkasında, bu yüzden bu konuda herhangi bir bilgi almak çok zor (yukarıdaki bilgileri almak bile zor, sadece node.js için bir üçüncü taraf SDK'sından anladım). Bunlar bir araya getirdiğim bilgiler:

Süreç tam anlamıyla 1 bayt stereo müzik yapmaya benziyor (ve sözde bir müzik sanatçısı tarafından yapıldı). PS4 kontrolörünün bilgisayara bağlanmasını ve gürlemek için bir program kullanılmasını içerir. Tahmin etmeye dayalı bir tane yaparlar, sonra çalıştırırlar, sonra ayarlarlar ve desen iyi hissedene kadar bu adımları tekrarlarlar.

Rumbles bazıları programlı olarak üretilir (bir araba yoldan çıktığında olduğu gibi), ancak bunlar genellikle basit bir işlevdir (sinüs gibi) veya telefonların yaptığı gibi sabit bir değerdir. En karmaşık efektler bile normalleştirilmiş bir rumble desenini istediğiniz güçle çarpmaktan oluşur.

PS4 SDK ayrıca önceden tanımlanmış bazı desenlerle birlikte gelir. Bazı örnekler şunlardır: testere dişi deseni (sürekli artıyor, sonra 255'ten 0'a gidiyor), bir sinüs dalgası ve üçgenler (doğrusal olarak 255'e, sonra tekrar doğrusal olarak 0'a).

Diğer kontrolörler hakkında herhangi bir ayrıntı bulamadım (özellikle Switch'in HD gürültüsü, patent bile bunun nasıl çalıştığını açıklamıyor). Ama muhtemelen daha hassas gürlemek paketleriyle benzer bir yaklaşım kullanıyorlar.

Kaynaklar:


Bu makaleyi , rumble kanallarının bayt ofsetleri ve bunları kontrol eden bayrak da dahil olmak üzere kontrolöre ileri geri iletişim için rapor yapısını düzenleyen bir süre önce buldum . Sony'nin kendi belgelerine ve API'lerine erişmeden, genel İnternet'te mevcut olan en kapsamlı olabilir.
DMGregory

@DMGregory Bunu bir kaynaklar bölümüne eklememi düşünür müsünüz?
Bálint

Lütfen yap. :) Kullanım umuduyla paylaştım.
DMGregory

4

Standart bir yol yok.

Farklı cihazların farklı rumble özellikleri ve sınırlamaları vardır.

Cihazların büyük çoğunluğu gerçek "kuvvet geri beslemesini" desteklemez (örneğin: Bir kaldırıma / çukura isabet ederken programcının belirli bir açıya geri itmesine izin veren bir direksiyon), ancak sadece kontrolsüz / keyfi bir yönde gürler.

Bu nedenle, MSDN / DirectX ve diğer API'larda bahsedilen Force Feedback özelliklerinin çoğu, kullanıcı pazarında pratikte hiçbir zaman gerçekten gerçekleşmemiştir veya "akıllı" kontrollerin (zarf, tekrar vb.) Bu kadar zayıf ve / veya taşınabilir olmayan uygulamalarına sahip değildir. böylece kullanışsız olması pratikte geliştiriciler genellikle sadece kendi etki uygulamasıyla doğrudan ON / OFF kontrolleri kullanmak için zorlanmaktadır.

Servo kontrollü kuvvet geri beslemesine izin veren daha gelişmiş cihazlar, genel giriş API'leri gerekli parametreleri (kesin açılar, kesin kuvvetler, limitler vb.) Desteklemediğinden özel API'lere ihtiyaç duyar.

Karışıma VR duygu eldivenleri gibi yeni teknolojilerin eklenmesi, bu genel API'lerin daha da eksik olmasını sağlar.


En yaygın uygulama, her biri dengesiz yüke sahip, biri diğerinden daha ağır ağırlıklı ve hassas hız kontrolü olmayan iki DC motor ile yapılır.

En azından onlar üzerinde açma / kapama kontrolüne sahipsiniz ve sınırlı bir PWM güç kontrolü yapabilirsiniz, ancak tam hız kontrolü yapamazsınız. Hızın ve ortaya çıkan titreşimin gerçekte ne olacağını bilmiyorsunuz. Farklı denetleyicilerin, aynı ayar için farklı hızlarda çalışacak farklı motorları ve ağırlıkları vardır.

Motorlar önce dönmeli ve bir süre tam güç gerektirmelidir, daha sonra PWM daha düşük bir ayara getirilebilir. Sıkma gecikmesi, tepkiselliği büyük ölçüde sınırlar.

Kontrolörler genellikle her kare için bir kez güncellenir ve size yaklaşık 20Hz ila 100Hz güncelleme frekansı verir. Bu, motorların en düşük ayarda durmasını istemediğiniz için PWM kontrolünüzün çözünürlüğünü sınırlar. Ve son kullanıcı denetleyicisinin motorlarının durmadan (durmadan) önce ne kadar düşük gidebileceğini bilmiyorsunuz, böylece iyi bir güvenlik marjına ihtiyacınız var.

Bazı sistem gereksinimleri, onlarla neler yapabileceğiniz konusunda daha fazla sınırlama getirir.

Mobil cihazlar genellikle sadece 1 titreşim motoruna sahiptir ve ağırlık boyutundan düşük atalet ve yavaş güncelleme hızı nedeniyle PWM mümkün olmayabilir. Sistem, kötüye kullanımı veya hatta hasarı (güç sürücüsü transistör limitleri ve endüksiyon ani yükselmeleri) veya sadece gerçekten yavaş bir GPIO alt sistemini önlemek için daha fazla filtreleyebilir.

Cep telefonunda sınırlı olabilir veya PWM olmadan kendinizi "kabaca X * 50 milisaniye titreşimle" sınırlamak isteyebilirsiniz.

Bazı yeni cihazlar ve kontrolörler, düşük örnekleme hızı ses dalgası ile hoparlör gibi çalışan bir solenoide sahiptir. Bunlar size daha fazla kontrol sağlar, ancak daha yaygın kontrolörlerden tamamen farklıdır.


Çünkü soyut titreşim sistemine isteyebileceğiniz tüm bu farklılıkların bir ateş ve unut moda adıyla üst düzey makro etkilerinin sınırlı sayıda oynamak için: PlayVibration(player, "Got Loot");, PlayVibration(player, "Heavy Fall");, StopAllVibrationFor(player);, ...

Ardından , her bir platforma ayrı ayrı uyarlanmış düşük seviyeli titreşim efektleri ve titreşim kontrol kodu oluşturmanız gerekecektir .

Bir müzik oyunu için bile, PlayVibrationher ritim için tek atış yapmak , oyunu duraklatmak ve akıllı olacak bir periyodik efekt üretecini yeniden senkronize etmek için çarpanlara ayırırken yönetmek ve kontrol etmek daha kolaydır .

Gerçek bir solenoidle çalışan rumble sahip cihazlar bir ses cihazı gibi muamele edilebilir ve pil endişeleri nedeniyle ses API'leri kullanabilirken , solenoid sürekli olarak açılırsa / aktifse sistem düzenlemelerine uyulmalıdır . "Güç Seviyesi 0", "Solenoid Kapalı" ile aynı olmayabilir, bu nedenle özel dikkat gereklidir.


3

Gurus Windows Oyun Programlama hileler André LaMothe gelen:

Bu cihazların programlanması çok karmaşıktır. Sadece kuvvet, yay ve hareket hakkında iyi bir anlayışa sahip olmakla kalmaz, aynı zamanda cihazlar ve kuvvetler olayları veya etkileri de notalarla çok yakın bir ilişkiye sahiptir. Yani, kumanda kolundaki çeşitli motorlara ve aktüatörlere uygulandıklarında kuvvetleri modüle eden bir zarfa sahip olabilirler. Bu nedenle, hız, frekans, zamanlama vb. Değerlerin tümü, geribildirimi kullanma ve programlamada rol oynar.

Bu metin oldukça eski olsa da, MSDN'de zorlama geri bildirimi için hızlı bir arama, bahsedilen kavramların çok fazla değişmediğini gösterir; Temel Güç Geri Bildirimi Kavramlarında ele alınan konuların bir özeti :

  • Sabit kuvvet: Tek yönde sabit bir kuvvet
  • Rampa kuvveti: Sürekli olarak artan veya azalan bir kuvvet.
  • Periyodik etki: Tanımlanmış bir dalga paternine göre titreşen bir kuvvet.
  • Koşul: Bir eksen boyunca harekete veya konuma tepki.
  • Zarf: Zarf, efektin başlangıç ​​ve bitiş büyüklüğünü değiştiren bir saldırı değeri ve solma değeri tanımlar.
  • Ofset: Dalga formunun taban seviyesinden yukarı veya aşağı kaydırılma miktarını tanımlar.
  • Ölçek: Bir cihazın tüm efektlerine tek bir kazanç değeri uygulanabilir.

PS4 açısından, ortaya çıkardığım tek şey Unreal Engine 4 belgelerini içeriyordu:

Bunlar (tanımlayıcılar) platforma özgü uygulamaya göre haritalandırılacaktır. Örneğin, PS4 yalnızca XXX_LARGE kanallarını dinler ve geri kalanını yoksayar; XBox One, XXX_LARGE ürününü tutamaç motorlarına ve XXX_SMALL'ı tetik motorlarına eşleyebilir. İOS, LEFT_SMALL'i tek motoruyla eşleyebilir.

Stephane Hockenhull'un cevabının da belirttiği gibi, her platform farklı. Ve GDSE önerildiği sohbet PS4 force feedback API bilgilerini NDA kısıtlı olan mümkündür.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.