【VCI】大太鼓の制作メモ

VR

バーチャルキャストのアイテム、VCIでバーチャル楽器の大太鼓を制作しました。

それでつまったところ、変更した部分などのメモ。

目次

・オリジナルのサウンドを録音
・Blenderでモデリング
・円形の部分にコライダをつけるには
・太鼓スクリプト
・物理衝突させて鳴らす

概要

この大太鼓は、バチで表側を叩くと「ドドン」と2回鳴ります。
効果音的に使ってほしいアイテム。

裏は「ドン」と一回のみ。

叩いたほうの手が振動します。

■大太鼓(効果音向け) | THE SEED ONLINE

オリジナルのサウンドを録音

VCIの楽器を作る際、販売、配布されている音データをそのまま入れてしまうと、フリー素材のものであっても二次配布、禁止事項に該当する可能性があります。

以前のエントリ。

THE SEED ONLINEでの音楽、効果音の権利についてのまとめ。どこからが二次配布にあたるのか。

無料だと見逃される可能性が高いですが、販売を視野に入れているので、自分で録音したものにしたい。

というわけで、実家の敷地に太鼓と練習場があるので、そこで録音してきました。

Kontact音源としても販売しています。

大太鼓のKontakt音源を販売開始しました

Blenderでモデリング

皮の部分を別にして、Unityで被せる。

しかし、あとでMesh ColliderがVCIで使えないことに気が付くのであります。

もうちょっと軽く作れる方法がありそう。

円形の部分にコライダをつけるには

オブジェクトの形に沿った、Mesh Colliderが使えないということで、箱状のBox Colliderが一番近いのではないかということで代用しました。

感覚的によさそうだなと思い、Zに45度の角度をつけています。

あんまり美しくないけどこんな感じ。

足にもAudio Sourceがついているけど、テスト用につけたものなので鳴りません。

太鼓スクリプト

VCI Objectにつけたスクリプトはこれ。

function onTriggerEnter(item, hit) --itemにhitが接触した瞬間に呼び出される

     if (item == "kawa1" and hit == "stick1") or (item == "stick1" and hit == "kawa1") then
         vci.assets._ALL_PlayAudioFromName("ddn") --ドドン
   vci.assets.HapticPulseOnGrabbingController(item, 1500, 0.05) --itemを掴んでいるコントローラを振動させる
end

     if (item == "kawa1" and hit == "stick2") or (item == "stick2" and hit == "kawa1") then
         vci.assets._ALL_PlayAudioFromName("ddn") 
vci.assets.HapticPulseOnGrabbingController(item, 1500, 0.05) 
end

    if (item == "kawa2" and hit == "stick1") or (item == "stick1" and hit == "kawa2") then
         vci.assets._ALL_PlayAudioFromName("don") --ドン
vci.assets.HapticPulseOnGrabbingController(item, 1500, 0.05)  
    end

     if (item == "kawa2" and hit == "stick2") or (item == "stick2" and hit == "kawa2") then
         vci.assets._ALL_PlayAudioFromName("don")
vci.assets.HapticPulseOnGrabbingController(item, 1500, 0.05)  
    end
 
 end

kawa1は表側の皮。kawa2は裏側の皮。

鳴らすだけではなく、itemを掴んでいるコントローラが振動するようにしました。

無限音階楽器では、stickを分けてなかったんだけど、変な鳴り方をしたのでstick1と、stick2それぞれ書きました。

stickでの叩き方自体は無限音階楽器の制作メモで書いています。

【VCI】無限音階楽器の制作メモ

公式のものも参考に

■叩くとアニメーションをして音が鳴るドラムを作る

物理衝突させて鳴らす

一度、物理衝突でうまく叩けなかったので、楽器をすり抜ける形にしたんですが、

やっぱり、物理衝突があるほうが存在感あるなということで、onCollisionEnterで鳴らす形にしました。

実はこれが曲者で、onCollisionEnterだと、VCI Sub Itemの子が呼び出されない。

なので、子を外に出して、独立したVCI Sub Itemにする。

そうすると、まとめて掴んで持ち運ぶということが不可能になるので、掴めないようにしました。

巨大な太鼓なので、そういう仕様でも納得感があるので大丈夫かなと思います。

スクリプトはonTriggerEnterをonCollisionEnterに書き換えるだけ。

function onCollisionEnter(item, hit) --itemにhitが接触した瞬間に呼び出される

     if (item == "kawa1" and hit == "stick1") or (item == "stick1" and hit == "kawa1") then
         vci.assets._ALL_PlayAudioFromName("ddn") --ドドン
   vci.assets.HapticPulseOnGrabbingController(item, 1500, 0.05) --itemを掴んでいるコントローラを振動させる
end

     if (item == "kawa1" and hit == "stick2") or (item == "stick2" and hit == "kawa1") then
         vci.assets._ALL_PlayAudioFromName("ddn") 
vci.assets.HapticPulseOnGrabbingController(item, 1500, 0.05) 
end

    if (item == "kawa2" and hit == "stick1") or (item == "stick1" and hit == "kawa2") then
         vci.assets._ALL_PlayAudioFromName("don") --ドン
vci.assets.HapticPulseOnGrabbingController(item, 1500, 0.05)  
    end

     if (item == "kawa2" and hit == "stick2") or (item == "stick2" and hit == "kawa2") then
         vci.assets._ALL_PlayAudioFromName("don")
vci.assets.HapticPulseOnGrabbingController(item, 1500, 0.05)  
    end
 
 end

まとめると、VCIでは、物理衝突がありつつ持ち運べて、複数の音源が鳴る楽器というのは今のところ不可、ということです。

今後やりたいこと

・ノイズを処理する
頭にプチノイズっぽいものが入る。
まえの音が途中で途切れて発生しているのかもしれないので、WAVの余韻を短くしたほうがいいのかもしれない。

・アニメーションさせたい
ちょっとだけ大きくなって、震える感じにしてみたい

・音を途切れずに鳴らしたい
連続で鳴らすと音が途切れてしまうので、ワンショットで鳴らしきるようにしたい。

途切れないようにできれば、演奏できる楽器になる。それができないから、効果音用としている。

PlayAudioのかわりにPlayOneShotAudioでいけるかなと思ったけどいけなかった。

負荷が高くなっちゃいそうでもある。

おわりに

たれ乳アルパカ作曲系vtuber、alaki paca/荒木パカさん(@arabiiiiiiiiiii )にめちゃくちゃ教えてもらいました。

VCIのブログも書いてらっしゃいます。

■vciで音を出す。そして弾き語りをする。| アルパカ研究室

公式にも色々書いてあるのでにらめっこ

■vci開発環境の導入 | Virtual Cast公式

■vciscript | Virtual Cast公式

公開したバーチャル楽器はこちら

■大太鼓(効果音向け) | THE SEED ONLINE