Aizu-Progressive xr Lab blog

会津大学のVR部であるA-PxLの部員が持ち回りで投稿していくブログです。部員がそれぞれVRに関する出来事やVRにちなんだことについて学んだことを書いていきます。

連絡はサークルTwitterのDMへお願いします。
「面白法人カヤックVR分室」としても活動しています。詳細はこちら

6/12日にUnity勉強会で学んだことまとめ

おはようございます。今回のブログを担当させていただく平川といいます。

ブログ投稿が遅れてしまい申し訳ございません、この場を借りてお詫び申し上げます。 申し訳ありませんでした。

はい。

というわけで今回はタイトルの通り六月十二日に開催されたUnity勉強会でUnity Technologies Japanの簗瀬氏にお話ししていただいた内容を綴ろうと思います。ブログを書くのは初めてなので何卒よろしくお願いします。

さて、講演会のテーマは

感覚が世界を作る -V Rと錯覚-

ということで、主にVRを利用した錯覚、つまるところ脳を騙すことについて教えていただきました。

まず最初に簡単なゲームを遊ばせてもらい、そのスコアを計るのですが、実はそのゲームには細工がしてありました。

回数が増すごとにゲーム側が補正を掛け、最終的にはどうプレイしても満点がとれるのですが、プレイしている本人は気が付かない、つまり自分の腕が上達していると感じるという実験結果が出ているそうです(要するに上達したと勘違いしているということですね)。実際私は全く気づきませんでした。

何より興味深いのが、その勘違いが無駄ではなく、その後に補正を切っても高いスコアを出せたそうです。暗示というやつでしょうか…。

ゲームをさせる上ではそういった補正を使って気持ちよくプレイさせるという考え方があるというのに衝撃を受けました。最近のゲームだとマリオカート8デラックスのハンドルアシスト機能という機能がそれに近いでしょうか。 実際その機能をオンにしてプレイすると上達した気分に浸れるぐらいには勘違いできます。ミニターボ2段階になるけど

こういった自分の五感をだます様々なコンテンツを紹介していただきました。

  • 自分の手や指が伸びる映像を見ながらピアノ(?)を弾くと実際に自分の手が伸縮するように感じたり、指が増えたと感じる。
  • ARによって実際よりも大きく見える食べ物を食べるとより早く満腹感を感じる。小さい場合は逆に普段より多く食べることができる。
  • VRによってまっすぐに見える道をゆっくり(小さい空間なのでこれが重要らしい)歩くと、実際に半径5mの円周を回っていてもまっすぐの道だと感じる。
  • 自衛隊になり人命救助を行うゲームをプレイした人ととスーパーマンになり人助けをするゲームをした人の前でペンを落とした時、スーパーマンのゲームをやっていた人の方が早く拾う。
  • 自身の前に画像編集で作られた自分の表情に感情がつられてしまう(悲しい顔を見ると悲しくなる)。 etc…

個人的には実際に指が伸びたり増えたことがないのにそう感じたというのが非常に面白いなと感じました、どんな感覚なのでしょう。

他にも学生が作ったコンテスト、VRクリエイティブアワードの作品を紹介していただきました。どれもクオリティが高く、これを学生が作ったのか…と非常に驚きました。 vrc.or.jp

こういったコンテンツや実験を見ていくと、人間の五感とは存外曖昧で、簡単に騙されてしまうということが分かります。

一時期昔に話題になった(気がする)もので、ゴムの手を用意し、仕切りを立ててゴムの手のみを見える状態にして、ゴムの手と実際の手を筆で同時になぞるのを繰り返すと、そのうちゴムの手を自分の手だと錯覚するという実験がありましたね。ゴムの手を自分の手だと思い込む人ほど実際の手の温度が下がる、ゴムの手に危害を加えようとすると実際の手に危害が及びそうだと脳が判断する等、様々な面白い結果が出ているので興味がある人は調べてみてください。こんなのもあります↓ www.youtube.com

だいぶかなり話が脱線してしまいましたが、それだけ簡単に人間は騙されてしまうということですね。

こういった錯覚を利用すればよりいっそう仮想空間に没入することができるので、非常に興味深いと感じました。

余談ですが、その後の懇親会でも様々なお話をお聞きすることができました(ここに書いていいのか分からない内容がちらほら…)。

色々あったお話の多くはやはり実際に作って出すことが重要だ、とのことでしたのでより一層技術や知識を研鑽していこうと思います。 最後まで見てくださった方、ありがとうございました。

最後に、アークシステムワークスの新しいドラゴンボールのゲームのクオリティがすごいそうです。興味のある方はぜひ見てください。

www.youtube.com

学校案内

VR部が主に活動をしているM6教室への案内です

 

 

VR部プログラミング勉強会

今回ブログを担当します、三年のなおしです。

紹介する内容はプログラミング勉強会です。 勉強会では部活のみなさんのサポートがあったのでとても助かりました。 また、新入生からの質問などで私自身の復習、反省にもなりました。

勉強会で行った内容はC言語の基本的な文法
1 出力 / 入力
2 if文 / switch文
3 for文 / while文
4 配列
5 関数
6 構造体

です。 これらの機能をもとに、簡単なゲームを作成しました。

f:id:aizu-vr:20170525125534p:plain
よくあるターン制のゲームを真似て作りました。
このプログラムでは配列以外のすべての内容を使いました。

まずは、キャラクターの構造体を作ります。

typedef struct {
      int HP;
      int panch;
      int kick;
      int destroybeam;
}Character;

この構造体を使って、プレイヤーとモンスターを宣言しそれぞれステータスを設定します。

次に、while文で無限ループを作ります。ループ内では、モンスターの出力、プレイヤーの出力、攻撃方法の入力、プレイヤーの攻撃、モンスターの攻撃を順に行います。

モンスターとプレイヤーの出力では関数を使って出力しました。例えば、モンスターの出力では

void printMonster(int HP) {
    printf("モンスター\n");
    printf("\n");
    printf("     \\_\\ ☆ ---------------\n");
    printf("    (^q^)/ < 楽にしてやろう|\n");
    printf("  -- ( )/   ---------------\n");
    printf("     /|\n");
    printf("\n");
    printf("HP:%d\n", HP);
}

と、しました。

次に、攻撃方法の入力を行います。入力された値をもとにswitch文を使ってダメージを求めます。もし、指定されていない入力がされた場合はcontinue文を使って入力をやり直します。

scanf("%d", &attack);
switch(attack){
case 1:
     dmg = player.panch;
     break;
case 2:
     dmg = player.kick;
     break;
case 3:
     dmg = player.destroybeam;
     break;
}
if(attack < 1 || 3 < attack){
     printf("入力が間違っています。\n");
     continue;
}

ダメージを求めたら、ダメージ分の値をモンスターの体力から引きます。もし、このときモンスターの体力が0以下になればbreak文を使ってループから抜け出します。 また、同じようにプレイヤーもダメージを受けて、体力が0以下になればループから抜け出します。

printf("モンスターは %d のダメージを受けた\n", dmg);
monster.HP -= dmg;    
if(monster.HP <= 0){
     printf("モンスターを倒した!\n");
     break;
}
printf("モンスターの攻撃! %d のダメージを受けた\n", monster.panch);    
player.HP -= monster.panch;
if(player.HP <= 0){
     printf("あなたは力尽きた!\n");
     break;
}

これで、while文を閉じればゲームが完成です!

また、乱数を使用することで攻撃力に幅を持たせり、モンスターが様々な攻撃を行うようにできます。

このプログラムの他に、2次配列をしようしてマップを作りました。

以上の機能を使えばオセロなども作成することもできます。

プログラミングは大変ではありますが、何かを作り始めると楽しくなります。私も前にカードゲームなどを作ってみたことがあります。 「これプログラムにできるんじゃね?」と思ったらプログラミングしてみましょう!

Particle System

こんにちは。
今回のブログを担当するVR部部員のタマです。
ブログを書くのは初めてなので、どうか温かい目で見てください。


今回のテーマはパーティクルシステム です!!

f:id:aizu-vr:20170514010800p:plain

今回はUnity5.5で追加されたLightsモジュールの各種設定を見ていきたい思います

 

 

さっそく、CreateボタンからParticle Systemを押してInspectorを見てみます。

f:id:aizu-vr:20170514012107p:plainf:id:aizu-vr:20170514012114p:plain

すると、下の方にLightsモジュールが追加されてます!

f:id:aizu-vr:20170514012400p:plain

 

今回は光ってる感を分かりやすく表現するためにMain CameraにBloom スクリプトをつけました。

Bloom スクリプトはImport package から Effects をインポートすることで使えます。

f:id:aizu-vr:20170514012826p:plain

 

それでは、ライトモジュールを見てみましょう!!

これが初期状態です

f:id:aizu-vr:20170514012905p:plain

 

・Light

・Ratio

・Random Distribution

・Use Particle Color

・Size Affects Range

・Alpha Affects Intensity

・Range Multiplier

・Intensity Multiplier

・Maximum Lights

 

と、9つの項目があります。

 

Light

これはパーティクル1つ1つにどのようなライトをつけるか設定できます。

このLightで使えるライトは Spotlight か Point light しか使えません。

そして、このライトはシーン内もしくはPrefabにないと使えません。

 

実際に、Point light を Prefab 化してつけてみます。

f:id:aizu-vr:20170514013610p:plainf:id:aizu-vr:20170514013618p:plain

 

こんな感じで、パーティクル1つ1つにPoint light がつきました。

パーティクルの下辺りが光っています

f:id:aizu-vr:20170514013754p:plain

 

 

Ratio & Maximum Lights

Ratioは生成されるパーティクルがどのぐらいの割合でライトを持っているかを設定することができます。

Maximum Lights はライトを表現できる最大数です。

しかし、Ratioを1に設定して、Maximum Lightsを十分大きな数(300ぐらい)にしても全てのパーティクルにライトがつきません。

f:id:aizu-vr:20170514014027p:plainf:id:aizu-vr:20170514014033p:plain

 

いろいろ調べた結果、Renderingの設定でどうにかできるらしいです。

カメラのRendering PathをForwardに設定している場合、一度に置けるライトに制限があるらしいです。

これを変更するためには、Project Settings > Quality の Pixel Light Count の値を変更すれば一度に置けるライトの数を増やすことができます。

f:id:aizu-vr:20170514014231p:plain

やってみると見事全部にライトがつきました!

しかし、ライトはとても重い処理なので数には注意が必要です。

 

Use Particle Color

Use Particle Color は On にするとパーティクルの色が光に影響します.

 

f:id:aizu-vr:20170514014635p:plainf:id:aizu-vr:20170514014641p:plain

 

Size Affects Range

パーティクルが大きければ光の影響する範囲が大きくなります。

 

Alpha Affects Intensity

Onにすると、パーティクルのアルファ値が小さければ輝度が下がり、アルファ値が大きければ輝度も上がります。

f:id:aizu-vr:20170514014938p:plainf:id:aizu-vr:20170514014943p:plain

 

Range Multiplier & Intensity Multiplier

Range MultiplierとIntensity Multiplierはそれぞれ手動で光の範囲と輝度を設定することができます。

これはPrefab化したLightの設定をいじってもできます!

 

今回はこの辺で終わりたいと思います。

時間があったらこの機能を使って何か作ってみたいと思います。

 

 

 

 

 

VRアカデミー 4/22, 4/29

今回は第3回目と第4回目に行われた講座についてまとめていきたいと思います。

4/22(第3回)

ゲストにInstaVRのエバンジェリスト平山智予(ひらやま ともよ)様が来てくださいました。 jp.instavr.co 聞いたところによるとInstaVRの使用率は9割が外国のようで・・・。やはり外国の方がVRに対する意識は高いですね。
InstaVRは実写系のVRを簡単に作ることができるWebアプリケーションです。360度カメラ(THETAやGoProなど)で撮った画像などを使います。 f:id:aizu-vr:20170430001316j:plain ↑VR部のVR勉強会の途中で撮った写真(今回はTHETA Sを使いました)
VR勉強会ではこの画像を使ってみんなでInstaVRを使って実写VRアプリを作りました!1年生から全員、無事何事もなくつくることができたので、InstaVRは本当に簡単にVRアプリを作ることができるなと実感しました。

「CGでのVRと実写VRの違い」

  • 実写系のVRは、自分が映像世界にいるのではなく球体の内側にマップされた映像を見ている

  • 撮影ポイント間を移動するので、自由な移動ができない

VRのUI/UXがなぜ大事か

UI/UXがひどいと

  • 眼精疲労

  • 方向感覚の喪失

  • 吐き気などが組み合わされた苦痛

が引き起こされるからです。
感覚を奪い脳を騙し続けるには細かな配慮が必要になります。

VRのUI・・・迷わない設計
VRのUX・・・快適なユーザー体験、酔わない設定

そのためには・・・?

  • Head-Up Display をなるべく使わない

  • 移動を少なくする

  • 傾きに注意

  • フレームレートによるちらつきに注意

  • 頭の動きを強制しない

  • 音声によるナビゲーション

  • UIなど見て欲しいものを2、3m以上離す

  • アクションさせる数を減らす

  • 移動先へのガイド表示を作る

などをあげていらっしゃいました。ただこれらを全部細かく注意して作っていってもつまらないものになってしまうとも言っていました。
「傾き」に関しては、コンテンツの地平線に対して水平状態をキープするという意味で言っていたのですが実写VRを作る際、素材を360度カメラで撮るときカメラを傾けないように気をつけてねとも言ってました。ただInstaVRにはこれらの傾きを修正する機能も備わっています。すごい。

今注目していることとして、「アイトラッキング(視線追跡)」をあげていました。ただ視線追跡は乱視の人が結構大変だとか。。。もしアイトラッキングができればその注視しているところだけを主に綺麗に描画して、レンダリングの処理削減にもつながりますね!→sksk動いて酔いも削減される!

最後に平山さんが言っていた言葉の中で印象に残った言葉を。

みなさんが吐いた数だけ世の中のVRユーザーが救われる

4/29(第4回)

第4回目のゲストの方は、カディンチェ株式会社 CTOの内田和隆様でした。内田様にはVRウォークスルーについてお話ししていただきました。
移動はVR体験の醍醐味の1つですよね

  • 無限に広がる空間

現実世界では味わえない仮想体験

VR酔いとの戦い

  • 現実感とVR空間で体の動きにミスマッチが起こるのが原因


<理想>ユーザーの目の位置と方向に完全に合わせて連動して、VR空間のカメラを常に動かすこと(=酔いにくい)

<現実>目(頭)の位置や方向をトラッキングできるのは数メートル四方が限界

ウォークスルー方法1:コントローラーで視点移動

「酔い対策」

  • ヘッドトラッキングとカメラの連動は常にON

  • ヘッドトラッキングおよびコントローラーの入力だけでカメラを連動させる

  • それ以外の要因でカメラを動かさないようにする

  • 一定のスピードで移動する

  • ユーザーが予測できない動きをしない

  • 見えない力で勝手に動くのを避ける

  • モノにぶつからないようにする

  • 壁などにぶつかって止まるよりも、壁を通過させる方が酔いにくい

  • 壁を通過してしまったら、暗転して本来のコースに戻すなどの工夫をする

  • 近すぎるオブジェクトは表示しないようにする


ウォークスルー方法2:自動移動

「酔い対策」

  • ユーザーが見ている方向に進む

  • 視点に対して横移動しない

  • カメラの動きが前方に向くように工夫する

  • カメラの動きを安定させる

  • 上下方向にカメラをなるべく動かさない

  • ガイドになるものをつける(視点と一緒に追従するオブジェクトをつける)

  • トロッコ、車のダッシュボード、鼻などを視界に入れる

  • 周辺視野は動きに敏感なので(ベクションを起こしやすい)、早く移動するときは周辺視野をマスクする

  • 周辺のテクスチャをぼかすだけでも効果がある

  • 自動で動く場合でも、開始、停止はユーザーの制御でできるようにするべき


ウォークスルー方法3:ワープ

「酔い対策」

  • 視点の位置は固定なので、最も酔いにくい

  • 移動元と移動先で視点の方向を変えないようにする

  • 方向が変わると方向感覚が狂う

  • ワープ前後では黒画面のフェードをはさむ


ウォークスルー方法4:トラッキング装置を使った移動(HTCViveなど)

「酔い対策」

  • ラッキングに完全連動させる

  • レイテンシーをゼロに近づける

  • 体、頭の動きが速映像に反映されるようにする

  • 実空間とVR空間のスケールを合わせる


ウォークスルー方法5:移動用の入力装置を使って移動(トレッドミルや自転車)

「酔い対策」

  • 手元のコントローラーで操作するよりかは実際の移動感覚に近くメリットはある

  • しかし運動しながらVRを体験するため映像と体感覚のズレが逆に増加する恐れがある


ウォークスルー方法6アバターの動きに第3者目線で近づいていく

「酔い対策」

  • なめらかにアバターを追従するようにする

  • アバターが激しく動いても、カメラの動きはなめらかに保つ



次回、修了制作の中間発表らしいのでちょっと家にこもって開発します。。。

written by Akiyama

会津大学VR部の部員が持ち回りで投稿していくブログです。特にテーマに縛りを設けずに書いていきます!