君とUTAU日々 in VRChatにUTAUクラスタは来れるのか!?検証する(アンケート)
はじめに
君とUTAU日々 in VRChat(https://kimiuta.info/VR/)の主催です.
本記事では情報収集と実験でUTAUクラスタがVRChatイベントを堪能できるのかを解き明かし,自信と具体的な基準をもってUTAUクラスタをイベントにお誘いすることを目的としたものです.
導入編
アンケート ← イマココ
実機実験
アンケートのリンク
アンケート結果(生データ)
アンケート結果(整形データ エクセルファイル)
結果まとめ資料(pdf)
皆さまのご協力の結果,2019/3/17 14:40時点で96票獲得いたしました.
本記事では情報収集と実験でUTAUクラスタがVRChatイベントを堪能できるのかを解き明かし,自信と具体的な基準をもってUTAUクラスタをイベントにお誘いすることを目的としたものです.
導入編
アンケート ← イマココ
実機実験
アンケートのリンク
アンケート結果(生データ)
アンケート結果(整形データ エクセルファイル)
結果まとめ資料(pdf)
皆さまのご協力の結果,2019/3/17 14:40時点で96票獲得いたしました.
結論
1.約6割の人は問題なく君UTA in VRCに来れる
グラボ積んでる人達 + 第8,第9世代のcore i*使ってる人 58.33%
2.約2割の人は君UTA in VRCに来れるか要検証
第6,第7世代のcore i*を使ってる人 20.83%
3.残り2割の人は多分無理
第5世代以前のcore i*やceleron,atomを使ってる人 20.83%
グラボ積んでる人達 + 第8,第9世代のcore i*使ってる人 58.33%
2.約2割の人は君UTA in VRCに来れるか要検証
第6,第7世代のcore i*を使ってる人 20.83%
3.残り2割の人は多分無理
第5世代以前のcore i*やceleron,atomを使ってる人 20.83%
以下本題に関係ないアンケート考察
RAMはどれぐらい積んでる?
低スペックPCで戦ってる人が多い印象ですが,以外にも76%の人が8GB以上メモリを積んでいる模様
CPUは?
GPUは?
普段の作業毎にPCスペックの傾向ある?
(参考)UTAU界隈でどんな作業を主にしている?
画像上部の表は,関りが強い項目を橙,そこそこ強い項目を淡い橙,関りが弱い項目を灰で着色した.
下の各グラフは,「グラフタイトル」をしている人が「項目の作業」をしている割合を示す.
非常に興味深いのは,この「聴き専・見る専」についてのグラフ.
「UTAU界隈では自分を聴き専だと思っている人の65%は調声するし,60%は絵を描くし,55%は動画を作るし,25%は曲も作る.」
とTwitterに投稿したところ,
「キャラAに対しては創作してるけど,キャラBに対しては聴き専」みたいな心理があるのでは?という指摘を頂いた.
本題ではないし掘り下げた検証は考えてないけど非常に面白い.
君とUTAU日々 in VRChatにUTAUクラスタは来れるのか!?検証する(導入)
はじめに
君とUTAU日々 in VRChat(https://kimiuta.info/VR/)の主催です.
先のVマケ2のころ,TLではよくこういう話を見ました.
本記事では情報収集と実験にてこの疑問を解き明かし,自信と具体的な基準をもってUTAUクラスタをイベントにお誘いすることを目的としたものです.
導入編 ← イマココ
アンケート
実機実験
上記内容に対する疑問は以下3点です.
先のVマケ2のころ,TLではよくこういう話を見ました.
「VRChatはパソコンだけあればだれでも遊べる!今すぐ始めようぜ!」この内容は嘘ではありませんが,いくつか疑問があります.
本記事では情報収集と実験にてこの疑問を解き明かし,自信と具体的な基準をもってUTAUクラスタをイベントにお誘いすることを目的としたものです.
導入編 ← イマココ
アンケート
実機実験
上記内容に対する疑問は以下3点です.
1.GPUがいるのでは?
VRChatの最小スペックを検証する記事(外部リンク)に見るように,デスクトップモードで遊ぶにおいてもGPUが必要なように思われます.
UTAUはwindows 2000でさえ動作するフリーソフトで,UTAUだけで遊ぶ分にはPCの性能に対してとことん無頓着でいれます.
UTAUクラスタ皆様がGPUを載せたPCを使っているのかは甚だ疑問です.
UTAUはwindows 2000でさえ動作するフリーソフトで,UTAUだけで遊ぶ分にはPCの性能に対してとことん無頓着でいれます.
UTAUクラスタ皆様がGPUを載せたPCを使っているのかは甚だ疑問です.
2.最新のCPUならオンボードだけでも遊べるって本当?
CPUの内臓グラフィックの性能は向上しており,最近のCPUなら内臓グラフィックだけでも遊べると噂を聞いたことがあります.
どれぐらい新しいCPUなら動作するのか,具体的なソースは見つけることができませんでした.
どれぐらい新しいCPUなら動作するのか,具体的なソースは見つけることができませんでした.
3.ただログインできればいいっていうわけではない
以下のPCでVRChatの動作に関する実験を行いました.
結果
これだけ古くて弱いパソコンで動作するので,確かにパソコンだけあればログインできるのは事実でしょう.
君とUTAU日々 in VRChatは,worldをpublicで公開する予定がなく,
1つのイベント会場に参加者が集う開催形式を予定しております.
できればイベント会場に40人ぐらい集まった際に十分動作するスペックを知りたいところです.
CPU | RAM | グラフィック |
---|---|---|
Celeron 1037U/1.8GHz | 8GB | Intel HD Graphics(Ivy Bridge) つまりCeleronの内臓 |
結果
画質設定 | My Room | The Box(public 20人程度) |
---|---|---|
Desktop Low 640*480 | 平均50fps | 平均10fps |
Desktop Low 320*200 | 平均50fps | 平均20fps |
これだけ古くて弱いパソコンで動作するので,確かにパソコンだけあればログインできるのは事実でしょう.
君とUTAU日々 in VRChatは,worldをpublicで公開する予定がなく,
1つのイベント会場に参加者が集う開催形式を予定しております.
できればイベント会場に40人ぐらい集まった際に十分動作するスペックを知りたいところです.
UTAU関連タグ 集計してみた(2017年,2018年)
検索条件に重大なミスを見つけました
下記データはかなり漏れがありますので,参考にしないでください
再集計できたら記事削除します。
2019/12/25 再集計してみたらあってた。
経緯
2016年まではうたらんまとめ(http://utauhirohiro.blog56.fc2.com/blog-entry-2665.html)で関連タグTOP30が見れたのですが,今は更新されていないので自分で集計しました.2017年版(xlsx)(googleスプレッドシート)
2018年版(xlsx)(googleスプレッドシート)
概ね抽出条件は同じのはずですが,微妙に日付の端数処理が甘かったり,
集約がリアルタイムじゃないので動画が削除されてたら値がずれてたりします.
また,先に投稿されたUTAU年間ランキングと上記データの
ギャップが気になったので追加調査してみました.
年間ランキング:
追加調査:2018年UTAUキャラ関連タグ解析(xlsx)(googleスプレッドシート)
フィルタがちゃんと動かないので,使える環境ならエクセル版の方がおすすめです.
数値を取得したのが今日という特に意味のないタイミングなので,参考値です.
本来このデータなら2018年12月25日に取得するべきですが,過ぎたことなので.
追加調査にある「累積オリジナル再生され指数」についてですが,
全動画の40%がオリジナル曲で,全再生数の40%がオリジナル曲なら100%
全動画の40%がオリジナル曲で,全再生数の80%がオリジナル曲なら200%
全動画の40%がオリジナル曲で,全再生数の20%がオリジナル曲なら50%
という感じの値です.
概ね数値が100より大きければオリジナルが,小さければそれ以外がよく伸びています.
考察はブロマガではしません.適当にtwitterで垂れ流します.
C#でUTAUプラグイン開発を始める方法
はじめに
2018年年末からなぜかtwitterのタイムラインでUTAUのプラグイン作りが話題です.
未経験者が今からUTAUのプラグイン作るなら断然visual studio でC#だと思います.
そこで初心者支援(と自分の勉強)のために,C#(.Net Framework向け)のクラスライブラリを公開しました.
utauPlugin(外部リンク:GitHub)
本記事では,上記ライブラリを使って初めてのUTAUプラグイン作成までの手順を説明します.
前提
visual studio 2017 communityはインストール済みとします.
そこからわからない人は外部リンク(http://chivsp.hatenablog.com/entry/2017/05/22/090000)等を参考に導入してください.
手順
- utauPluginをダウンロードする.
utauPlugin(外部リンク:GitHub)からutauPlugin-master.zipをダウンロードしてください. - visual studioで新規プロジェクト(sample1)を作ります.
このとき,必ず「.Net Framework」のものを選んでください. - utauPluginをsample1に追加します.
- sample1からutauPluginへの参照を追加します.
- sample1.csを以下の通り編集します.
sample1.csusing utauPlugin;
namespace sample1
{
class Program
{
static void Main(string[] args)
{
UtauPlugin utauPlugin = new UtauPlugin(args[0]);
utauPlugin.Input();
foreach(Note note in utauPlugin.note)
{
note.SetNoteNum(note.GetNoteNum() + 1);
}
utauPlugin.Output();
}
}
} - ソリューションをビルドします.
- sample1\sample1\bin\Debugにplugin.txtを追加します.
plugin.txtname=utauPluginサンプル
execute=sample1.exe - UTAUのプラグインフォルダにsample1\sample1\bin\Debugをそのままコピーし,適当なフォルダ名に変更します.
- UTAUを開き適当な範囲を選択して,「utauPluguinサンプル」を実行します.
- おめでとう.あなたはUTAUプラグイン作者です.
unity2017.03/MMD4Mecanim LipSync Plugin で3Dサウンドしようとしたら躓いた話
〇はじめに
UTAU × unity VRでLipSyncを使ったコンテンツを作ろうと思ったわけです.コチラ(外部リンク)で配布されているプラグインを設定し
LipSync(audioClip).Play()
でLipSyncまではできたものの,
なぜかどう設定を弄っても3Dサウンドにならなくて躓いたので忘備録を作成するものです.
2Dサウンドとか3Dサウンドって何さ?って人はこの記事の想定読者の範囲外です.ググって
〇なぜ動かない?
昔のunity(4.X以前? 詳細未調査)はaudioClip毎に3Dサウンドの設定ができた模様.今のunity(5.X以降?)はaudioClip自体の3Dサウンド設定が廃止になり,audioSourceコンポーネントで3Dサウンドの設定をする形となっています.
ちなみにaudioSourceでのデフォルトの設定は2Dサウンドです.
audioClipをPlay()するときには,audioClip自体の3D設定を参照する仕様(推定の域を出ず)らしく,Play()する際にaudioSourceコンポーネントを生成している模様ですが,spatialBlend(2Dか3Dかの設定)については特に指定がない模様.
〇解決策
つまり,audioClip再生される前にspitalBlendに1を代入すればいいわけです.LipSync\Core\LipSyncCore.csに以下のように赤文字を追記します.
335:audio_.clip = playClip_;とりあえずこれで,3Dサウンドになりました.
336:audio_.spatialBlend = 1;
337:audio_.Play();
ただ,汎用性を持たせた改造をするなら,public float spatialBlend;あたりを宣言して,
audio_.spaitalBlend = spaitalBlend;にするとGUIからパラメータを弄れるかと.
触れるVRを目指して ~senso glove DK2買ってみた話 その4 ハンドトラッキング実験~
1.前提条件・機材解説
2.導入
3.unityでのhaptic実験
4.unityでのハンドトラッキング実験 ← イマココ
5.メイン検証
手首より先の動作は導入編に書いたので肘のトラッキングを目指します.
いろいろ試行錯誤した結果,wristのセンサーの値がそれっぽいです.
まず,SensoHandExampleに赤字を追記.
動かす肘替わりに空のオブジェクトLeftElbowを作って,下記の通り構造化
そして,LeftElbowをアタッチすればOK
これでチュートリアル同様かなりざっくり,肘が動きます.
続く
2.導入
3.unityでのhaptic実験
4.unityでのハンドトラッキング実験 ← イマココ
5.メイン検証
〇Vive無しでは完璧なトラッキングはできない
導入編に書いた通り,動作するのは肘より先だけ.手首より先の動作は導入編に書いたので肘のトラッキングを目指します.
いろいろ試行錯誤した結果,wristのセンサーの値がそれっぽいです.
まず,SensoHandExampleに赤字を追記.
40: Palm.localRotation = /*(Quaternion.Inverse(wq) */ aData.PalmRotation;
41: Palm.localPosition = offset; //viveがないと無駄
42: Elbow.localRotation = aData.WristRotation; //viveがあるなら不要
41: Palm.localPosition = offset; //viveがないと無駄
42: Elbow.localRotation = aData.WristRotation; //viveがあるなら不要
動かす肘替わりに空のオブジェクトLeftElbowを作って,下記の通り構造化
そして,LeftElbowをアタッチすればOK
これでチュートリアル同様かなりざっくり,肘が動きます.
続く
触れるVRを目指して ~senso glove DK2買ってみた話 その3 haptic編~
1.前提条件・機材解説
2.導入
3.unityでのhaptic実験 ← イマココ
4.unityでのハンドトラッキング実験
5.メイン検証
トラッキングではなく触覚フィードバックが欲しいからです.
しかし,公式のUnity Pluginのドキュメントはなんと同梱のプレハブの解説のみ.
どうやら触覚フィードバックの実装は自分で書かないといけないっぽいです.
幸い公式のDriver Protocolを読むと,
BLEサーバーを通してgloveに指定書式のjsonをTCP通信で送ればいいことがわかります.
いろいろベタ打ちで汎用性のかけらもありませんが,とりあえず動作確認はこれでOK
続く
2.導入
3.unityでのhaptic実験 ← イマココ
4.unityでのハンドトラッキング実験
5.メイン検証
〇unity Senso pluginでは触覚フィードバックできない
oculus touch持ってるのにわざわざgloveを買ったのはもちろん,トラッキングではなく触覚フィードバックが欲しいからです.
しかし,公式のUnity Pluginのドキュメントはなんと同梱のプレハブの解説のみ.
どうやら触覚フィードバックの実装は自分で書かないといけないっぽいです.
幸い公式のDriver Protocolを読むと,
BLEサーバーを通してgloveに指定書式のjsonをTCP通信で送ればいいことがわかります.
〇サンプルコード
Unity Socket Example(外部リンク:qiita)を参考に親指に100ms間強さ10(max)の振動を返すサンプルソースがこちらusing System.Collections;
using System.Collections.Generic;
using System.Net.Sockets;
using System.Net;
using UnityEngine;
using UnityEngine.Networking;
using System.Text;
public class sensoVibrato : MonoBehaviour {
NetworkStream stream =null;
// Use this for initialization
void Start () {
string message = "{\"dst\": \"cc:78:ab:6c:3e:04\", //自分の右手gloveのmacアドレス
\"type\": \"vibration\",
\"data\": {\"type\":\"thumb\", //親指
\"dur\":100, //長さ(0 - 65535ms)
\"str\":10 //強さ(0-10)、0を指定したら現在の振動をストップ
}}";
StartCoroutine (SendMessage (message));
}
private IEnumerator SendMessage(string message){
Debug.Log ("START SendMessage:" + message);
if (stream == null) {
stream = GetNetworkStream ();
}
Encoding enc = Encoding.UTF8;
byte[] sendBytes = enc.GetBytes (message + "\n");
stream.Write (sendBytes, 0, sendBytes.Length);
yield break;
}
private NetworkStream GetNetworkStream(){
if (stream != null && stream.CanRead) {
return stream;
}
string ipOrHost = "127.0.0.1"; //BLEサーバーのアドレス
int port = 53450; //右手グローブのポート番号
TcpClient tcp = new TcpClient (ipOrHost, port);
Debug.Log ("success conn server");
return tcp.GetStream ();
}
}
using System.Collections.Generic;
using System.Net.Sockets;
using System.Net;
using UnityEngine;
using UnityEngine.Networking;
using System.Text;
public class sensoVibrato : MonoBehaviour {
NetworkStream stream =null;
// Use this for initialization
void Start () {
string message = "{\"dst\": \"cc:78:ab:6c:3e:04\", //自分の右手gloveのmacアドレス
\"type\": \"vibration\",
\"data\": {\"type\":\"thumb\", //親指
\"dur\":100, //長さ(0 - 65535ms)
\"str\":10 //強さ(0-10)、0を指定したら現在の振動をストップ
}}";
StartCoroutine (SendMessage (message));
}
private IEnumerator SendMessage(string message){
Debug.Log ("START SendMessage:" + message);
if (stream == null) {
stream = GetNetworkStream ();
}
Encoding enc = Encoding.UTF8;
byte[] sendBytes = enc.GetBytes (message + "\n");
stream.Write (sendBytes, 0, sendBytes.Length);
yield break;
}
private NetworkStream GetNetworkStream(){
if (stream != null && stream.CanRead) {
return stream;
}
string ipOrHost = "127.0.0.1"; //BLEサーバーのアドレス
int port = 53450; //右手グローブのポート番号
TcpClient tcp = new TcpClient (ipOrHost, port);
Debug.Log ("success conn server");
return tcp.GetStream ();
}
}
いろいろベタ打ちで汎用性のかけらもありませんが,とりあえず動作確認はこれでOK
続く