fc2ブログ
 

アセット機能 その6 物理処理

今回はアマレコVRのアセット機能で使えるUnityの物理処理を紹介します。
Unityの物理処理は重力による落下や、物体同士の衝突など 様々な目的で使用されますが、ここでは「やわらかいプリン」を手で触ったり、揺らしたり、持ち上げたりといったデモンストレーションをします。


1.使い方
(1) ダウンロードと転送
sample_pudding.zipをダウンロード。
解凍してできる 「sample_pudding.assetbundle」をQuestへ転送します。
ダウンロードページ
アセット機能の使い方



(2) スロット1
アマレコVRを起動し アセット画面からスロット1へ 「sample_pudding」をロードします。
100asset_load.png

初期状態だと 読み込んだプリンは重力で落下して すぐに見えなくなります。


(3) スロット1のプリンをテーブルに変える
sample_puddingにはプリンのほかに複数のアイテム(プレハブ)が含まれていますので、スロット1のアセットメニューから 「table」を選択します。
110asset_table.png

テーブルは重力で落下しないように設定されていますので、目の前に固定されます。
120table.png

テーブルが視界内に見えない場合は 位置と向きをリセットしてください。
また、環境光と平行光もONにしてください。OFFだと全て真っ黒になり視認できない場合があります。


(4) スロット2
続いてスロット2も sample_puddingをロードします。
こんどはテーブルがあるのでプリンはテーブルの上にとどまります。
130pudding.png


(5) 手で触る
アマレコVRのコンソール画面の下部から ハントラの表示をONにします。
150hand_tracking.png

ハンドトラッキングの手が表示されたら プリンを触ったり動かしたり、ひっくり返すことができます。
手が表示されない場合は Quest側のハンドトラッキング機能が無効になっているので Quest側の設定を行ってください。


(6) そのほか
・落下してしまったプリンは アセット画面のリロードから復活させることができます。
・カスタードプリンは回転(ひっくり返る)します。持ち上げるにはひっくり返らないよう両手で支える必要があります。
・ノーマルプリンは回転しません。回転しないので指先一つで持ち上げることができます。
・テーブル ムーブはテーブルが上下に動きます。テーブルの動きにより プリンが揺れます。
・無理な力を加えるとプリンは壊れます。リロードしてください。




2.プリンの作り方
アセットファイルのほかにプレハブ等、アセットの作成に必要なファイルを同梱していますので興味がありましたら以下を確認してみてください。
200file_list.png


2.1.プリンの3Dモデル(FBX形式)を作る
Blenderを使って主に以下のように作りましたが、FBXファイル(Resources/pudding.fbx)を同梱するので詳細は割愛します。
(1) メッシュの円柱を追加する
(2) 円柱をプリンのような台形に変形させる
(3) 縦の辺を4つに細分化する
(4) アーマチュアを設定する
(5) FBX形式でエクスポートする


2.2.Unityエディタでプリンの3Dモデルへ物理処理を仕込む
アーマチュア内の各Boneへ 物理処理の基本となる「Rigidbody」、当たり判定のための「Box Collider」、各Rigidbodyを繋ぐ「Configurable Joint」を追加します。
一通り設定したプレハブがResources/Pudding.prefabとなりますのでUnityエディタで確認してみてください。
200hierarchy.png

※ Jointには様々な種類が用意されていますが、現時点のアマレコVRで使えるのは「Configurable Joint」のみです。


2.3.プリンと カスタードプリン
ノーマルのプリンは回転しないように(ひっくり返ったり、斜めになったりしないように) 基礎となるBoneのRigidbodyの「Constraints」で回転凍結をONにしています。
これにより 基礎となるBoneが回転しなくなります(斜めに傾いたりしません)。
なお、そのほかのBone.xxxの回転凍結はOFFとします。なので斜めに揺れたりします。
210pudding.png

一方、カスタードプリンの回転凍結はOFFとなっています。この場合 物理処理によりBoneが回転し 全体がひっくり返ったりします。
212custard_pudding.png


2.4.テーブルを作る
Unityエディタの3Dオブジェクトのキューブへ「Rigidbody」と「Box Collider」を追加して作ります。
一通り設定したプレハブがResources/Table.prefabとなりますのでUnityエディタで確認してみてください。


2.5.動くテーブル
Unityのアニメーション機能でトランスフォームのPositionを上下に動かします。
アニメーションファイルがResources/move_anim.animです。
ゲームオブジェクトからアニメーションを管理するコントローラーがResources/move_controller.controllerです。
テーブルのゲームオブジェクトへコントローラー「Resources/move_controller.controller」を追加することで上下に動きます。
最終的な動くテーブルのプレハブはTable_Move.prefabとなります。



3.アセットの作成(複数のプレハブ)
ここでは複数のプレハブをまとめて 一つのアセットファイルにする方法を説明します。
キャラクターの色違いや服の違い、髪型の違いなど同じキャラクターだけどバリエーションがある場合などに有効です。

(1) 新しいアセットを作る
Unityのツールバーの「Window」から「AssetBundle Browser」を表示します。
AssetBundle Browserが無い場合はアセット機能 その2 基本的なアマレコVR用アセットの作成を見てください。



「Configure」タブを選択し右クリックのメニューから「Add new bundle」を選択します。
300add_new_bundle.png


(2) 名前を sample_puddingにする
310rename.png


(3) アセット構成リストへプレハブを追加する
アセットファイルへ加えたいプレハブファイルを「AssetBundle Browser」の右側のリストへドラッグ&ドロップし追加します。
320drag_drop.png

以下のように プレハブ4つと その構成要素が一つのリストになっていればOKです。
330list.png


(5) ビルド
ビルドの仕方はアセット機能 その2 基本的なアマレコVR用アセットの作成を見てください。

【テスト方法】
なんどもアセットの修正、 ビルド、 アマレコVRで確認を繰り返す場合は アマレコVRサーバーからアセットファイルを使う方法 をお勧めします。




(6) アマレコVRからプレハブを読み込む
アマレコVRのアセット画面でアセットファイルをロードした後、右側のアセットメニューから アセットファイルに含まれているプレハブを選択できます。
350asset_menu.png








アセット機能 その5 スクリーンオブジェクトとVR動画

前回の映画館を作るで説明したスクリーンオブジェクトについて応用例を紹介します。
また、VR動画とアセット機能についても紹介します。


1.スクリーンオブジェクト
基本は3DオブジェクトのQuadを使って平面スクリーンとして使いますが、キューブやシリンダーなど立体的なオブジェクトを使うことも可能です。
また、Blenderなどを使って(私はUVマップの兼ね合いでShade 3Dを使いました)VR用のスクリーンを作ってUnityへ読み込みアセットにすればアマレコVRが対応しないVR形式の視聴も可能となります。

100screen_object_cube.png

102playing.png


ただし、動画のアスペクト比に応じて アマレコVR側がスクリーンオブジェクトのスケール値を変えてしまうので 立体的なオブジェクトの場合は対策が必要です。
例えば、スケールが(1,1,1)で正常に表示される3Dオブジェクトへ16:9の動画を表示すると、スケールは(16/9,1,1)に書き換えられ 3Dオブジェクトが横に延ばされてしまいます。

対策として空のゲームオブジェクトを用意して そのスケールを(9/16,1,1)とし、 その中に名前を「#AMScreen」とした3Dオブジェクトを入れて スケールを(16/9,1,1)にします。

110screen_object_169.png

これで、16:9の動画を再生すると 2つのゲームオブジェクトのスケール値が掛け合わさり (1,1,1)で3Dオブジェクトが表示されます。



2.VR動画とアセット機能
アセットでVR動画用のスクリーンも 作れることを紹介しましたが、通常のVR動画であればアセット内のスクリーンオブジェクトは不要です。
3rdプレイヤーで再生するだけで、アセットで作った3DオブジェクトとVR動画の合成が可能です。

簡易的にはsample_theaterを読み込んで、サブプレイヤーをファイル画面から停止(スクリーンオブジェクトが消える)し、3rdプレイヤーでVR動画を再生することで体験できます。
このとき、主観映像などで近くの被写体を見るような映像はアセットの視差と合わず まともに視聴できません。
10mくらい先を見渡すような屋外撮影のVR映像でお試しください。

応用としては、昨年末にAbemaTVが実施したサッカーワールドカップのVR中継アプリのようなことが可能です。
サッカーのVR映像とスタジアムや観客席のアセットを用意し、3rdプレイヤーでサッカーの動画を再生、3Dオブジェクトで作られた観客席のアセットを読み込むといった感じです。

200abema_world_cup.png

参考記事 AV Watch
PICO 4でワールドカップ決勝を見よ! “スタジアムの貴賓席”で見る感動



アセット機能 その4 映画館を作る

今回はsmple_theaterを例にアマレコVR用の映画館の作り方を紹介します。
プレハブを用意しましたので、作るというより一つ一つの構成要素を確認する感じになります。
確認した後、座席数を調整したり、好みの3Dオブジェクトへ差し替えるなどして 自分なりの映画館に作り変えて楽しんでいただければと思います。

前半はプレハブをダウンロードしてアセットファイルを作るところまでを説明します。
後半は映画館の構成要素を説明します。
Unityの使い方やアセットファイルの作り方を理解されている方は 後半だけ見てください。




1.映画館の作り方 前半:ダウンロードからビルドまで
(1) プロジェクトの準備
最初にUnity 2021.1.1f1でアセット作成用のプロジェクトを用意します。
アセットの作成が初めての場合は「アセット機能 その2 基本的なアマレコVR用アセットの作成」を参照して asset_projectsを用意してください。
以下、asset_projectsを例に説明します。


(2) プレハブのダウンロードとコピー
映画館作成用のプレハブファイルを用意しましたので ダウンロード してください。

ダウンロードした sset_sample_theater_prefab.zip を解凍してできるフォルダ内にある「Sample_Theater」をプロジェクトのAssetsフォルダ「asset_projects\Assets」へコピーします。

200prefab.png 210copy_to_projects.png


(3) Unityで ゲームオブジェクトにする
Unityでasset_projectsを開いて (2)でコピーしたSample_Theaterフォルダ内にあるsample_theater.prefabをヒエラルキーへドロップします。
自動的にゲームオブジェクトが作成され シーンビューへ表示されます。

220drop_hierarchy.png


ゲームオブジェクトの名前をわかりやすいようにtest_theaterに変更します。

230rename.png



(4) 他のゲームオブジェクトを無効にする
シーンビューで確認する際に邪魔になったり、照明の影響を受けるため、他のゲームオブジェクト(この例では Directional Lightと Test_Cube)を無効にします。
なお、Main Cameraは影響が無いので無効にしなくて大丈夫です。

無効の仕方は ヒエラルキーでゲームオブジェクトを選択して 右側のインスペクターでチェックボックスをOFFにします。

240disable.png



(5) Unity Editorの照明設定
Unity Editorの環境照明等を無効にします。
これもシーンビューで確認する際に影響を受けて Questで実際に使うときの見た目と違ってきてしまうため 無効にします。

ツールバーのWindowのRenderingにある「Lighting」を選択して Lighting設定画面を表示します。
250Lighting.png


■ Lighting設定画面
「Environment」タブを選択し 以下を設定します。
・SkyBox Materialを None
・Sun Sourceを None
・Environment LightingのSourceを Color
・Environment LightingのAmbient Colorを 黒

260Lighting_env.png


以上を設定したら 試しにゲームオブジェクト「test_theater」内の照明を無効にし シーンビューの表示が真っ黒になればOKです。
test_theaterの照明を有効にもどして次に進んでください。

270_all_light_off.png


真っ黒にならない場合は 何かしらの照明が残っています、test_thater以外のゲームオブジェクトを確認したり、 Lighting設定画面を確認してください。


(6) ゲームオブジェクトを プレハブ化する
ゲームオブジェクト「test_theater」を画面下部のAssetsフォルダへドロップして新しいプレハブ「test_theater.prefab」を作成します。
プレハブのタイプはオリジナルで結構です。

280_make_prefab.png


(7) プレハブをAsset Bundle Browserへ登録
Unityのツールバーの「Window」からAssetBundle Browserを表示します。
AssetBundle Browserの「Configure」タブを選択した状態で Assetsフォルダから(6)で作った「test_theater.prefab」をドラッグし AssetBundle Browserの左側の「アセットリスト」部へ ドロップします。

290drop_browser.png


既にtest_cubeが登録されているので、test_cubeとtest_theaterの2つのアセットが登録された状態となります。
このままでも問題ないですが、test_cubeが不要な場合は test_cubeを選択して右クリックのメニューから 「Delete test_cube」で登録を解除できます(ここではtest_cubeを登録したまま説明を続けます)。

【注意】
AssetBundle Browserの右側の「アセットの構成要素」部へ プレハブをドロップすることができます。
その場合、一つのアセットファイルの中に複数のプレハブを格納することになってしまうため 今回は誤りです。
間違えた場合は 左のアセットリストの間違えたアセットを選択して 右クリックのメニューから アセットの登録を解除し 再度プレハブをアセットリストへ登録してください。




(8) アセットのビルド
AssetBundle Browserの「Build」タブを選択し、Build Targetを「Android」とします。
最後に下部にあるBuildボタンを押したら アセットファイルが作成されます。
test_cubeとtest_theaterの2つのアセットが登録されている場合は それぞれのアセットファイルが作成されます。
なお、構成要素に更新がなかったアセットに関しては ビルド処理は行われません。
※ 「Force Rebuild」をONにすると 更新が無くても常にビルドするようにできますが、特に理由がなければOFFでいいと思います。


(9) 確認
アマレコVRサーバーからアセットファイルを使う方法 」を参照してください。




2.映画館の作り方 後半:構成要素

Sample_Theaterは次の5つで構成されています。
・照明
・座席
・フロア
・スクリーン オブジェクト
・視点 オブジェクト

300sample_theater_20230602035523640.png


(1) 照明
最初に Unity Editorのシーンビューの見た目と Questで実際に使った場合の見た目をできるだけ近づけるために Unity Editorの照明を無効にしてください

Sample_Theaterの照明が暗いようなら 強くしたり(Intensity)、範囲(Range)を広げてください。
310light.png


全体的に明るくしたい場合はDirectional Lightを追加してください。
314directional_light.png


※ 照明を増やすとパフォーマンスが低下する(アマレコVR全体のFPSが低下します)ので気を付けてください。


(2) 座席
3DソフトのBlender等で自作するか ネットで公開されている3Dモデル(主にFBX形式)をダウンロードして使うことができます。

Meta Questのスペックは非常に低いためポリゴン数を節約する必要があります。
Sample_Theaterでは 座席一つが約1000ポリゴンとなっています。
映画館全体では 65席となっています。
ざっくりですが 視界内のポリゴン数が10万を超えると 60fpsの維持が難しくなる印象です。

後で座席の数を調整するために 何個かの座席を一つのゲームオブジェクトへ配置してそれをプレハブ化します。
Sample_Theaterでは3席「Chairs3.prefab」と7席「Chairs7.prefab」のプレハブを作っています。
そのプレハブを3席、7席、3席と並べたゲームオブジェクトを作り 1列分のプレハブ「ChairsLine.prefab」としています。
Sample_Theaterでは これを5列並べて 完成です。


(3) フロア
Sample_Theaterでは 3Dオブジェクトのキューブを組み合わせて作っています。



(4) スクリーン オブジェクト
アマレコVRの動画を表示するスクリーンになります。
3DオブジェクトのQuadを追加し 名前を「#AMScreen」としてください。

320amscreen_quad.png


アセット内に複数のスクリーン オブジェクトを配置することができます。
スクリーン オブジェクトはサブプレイヤーで動画が再生されていないとき ゲームオブジェクトが無効(非表示)になります。

基本的には3DオブジェクトのQuadを使いますが、立体的なメッシュも可能です。
ただし 現状 再生する動画のアスペクト比に応じてゲームオブジェクトのスケール値が変更されますので、そのあたりを考慮してください。



(5) 視点 オブジェクト
ヘッドマウントディスプレイの位置へアセットを移動するための 視点を指定します。
映画館の前列に座って映画をみたり、後列へ移動したりといった使い方をします。

名前を「#AMHeadPositon<home>」としたゲームオブジェクトの位置が視点となります。
Sample_Theaterでは3Dオブジェクトのキューブを使っていますが、空のゲームオブジェクトでも構いません。
位置のほかに回転も反映されますが Y軸だけ設定してください(Y軸以外は0にしてください)。
カッコ内でメニューや視点ボタンへ表示する 視点名を設定できます。homeは初期視点となります、そのほかは好きな名前を設定してください。

340head_position_button.png


視点オブジェクトは読み込んだ際 自動的にゲームオブジェクトが無効(非表示)になります。

スロット1へ読み込んだアセットに「#AMHeadPositon<home>」が含まれている場合は 読み込んだ際に自動で移動します。
スロット1以外や 「#AMHeadPositon<home>」が含まれていない場合はメニューや視点ボタンから指示された時だけ移動します。




 
 
あまラボへようこそ
このブログでは自作ソフトの最新情報やtips、PC動画に関する話題を掲載していきます。各記事へは下にあるカテゴリからアクセスして下さい。

ファイルのダウンロードはホームページの方でお願い致します。

質問・要望・不具合報告はこちら
アマレコTV
アマミキ!
アマレココ
アマレコ・ライト
ファンタジーリモート
AMVコーデック



ホームページ
カテゴリ
最新コメント
カレンダー
05 | 2023/06 | 07
- - - - 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 -
最新記事
最新トラックバック
ブログ内タグ

アマレコTV ビデオキャプチャ アマレコVR AMVコーデック Oculus アマレココ Quest アマミキ! コーデック gQuest SC500 動画配信 Pico GO ファンタジーリモート 4K アマレコライト Unity プラグイン G2 AMV4 oculus SC512 ライブ機能 パススルー機能 Passthrough デスクトップキャプチャ AVX2 リモートソフト FAQ アセット機能 質問コーナー DirectShow HDキャプチャ ニコニコ動画 Asset 120Hz 背景透過 レゴ 遅延 可変再生速度 組み換え 解説動画 LEGO MetaQuest Meta VR GV-USB2 2 XL2420T Pico4 Quest3 液晶モニター 倍速液晶 AMV2MT デインターレース ベンチマーク アマステ Pro 背景透過V3 PS4 VRonVR MonsterX3A Intensity VideoKeeper2 designs インストール Alternate AVX XCAPTURE-1 31024 GV-USB SD-USB2CAP4 ffmpeg 32ZP2 31006 RDT233WX-Z 画像処理 60fps Robust Matting RGBキャプチャ Rift Video Shadow Play WindowsMR RYZEN UtVideo T2 HDMI NVEnc HDCP QSV LameACM OBS 音遅延 MP3 Haswell 電源オプション 音ズレ 録画 オーバーレイ XCapture-1 MonsterXU3.0R フィギュア ハイパースレッディングテクノロジー HT 31021 MPC 液晶テレビ DirectShowFilter プレビュー 擬似NTSCキャプチャ SD-USB2CUP4 Livetube AtomでHDキャプチャ キャプチャーツール シンクライアント イベント IntensityPro DC-HD1 額縁遅延 REGZA ZP3 倍速補完処理 32ZP32 Kabelake リプレイ機能 モノステ 倍速駆動 ゲームスムーズモード LAVFilters SkyBox Hand Tracking 2.0 ファイルマネージャプラス pytorch APIパススルー機能 API python ハンドジェスチャー パカラーススルー機能 アルファ付き動画 アルファ付きVR動画 RVM クロマキー ダウンロード AssetBundle 物理処理 download passthrough 検証 Preferred Filter Tweaker SteamVR GPU使用率 可逆圧縮 SKnet GV-USB3 キャプチャカード VR動画 フレーム間圧縮 新プレイヤー機能 AMPlayer 60Hz 新アマレコVR 90Hz VRコントローラー MR Windows SSE 

ブログ内検索
月別アーカイブ
アマレココに関するリンク
お世話になっているソフトのリンク
RSSリンクの表示
管理画面
  • 管理画面