テラシュールブログ

旧テラシュールウェアブログUnity記事。主にUnityのTipsやAR・VR、ニコニコ動画についてのメモを残します。

【Unity】Unity-VR360-OverlayGridで、全方位写真の一部にポスターを貼ったり動画を仕込んだり

f:id:tsubaki_t1:20170112224424g:plain

今回は全方位写真(360度写真)で用意した風景の一部に動画を仕込む方法についてです。

全方位写真

全方位写真は、Googleストリート等でお馴染みの「マウス操作やVRヘッドマウントディスプレイで見渡す事の出来る」写真です。

周辺の情報を得たり、HMDを使うことで「まるで現地に居るような臨場感」を体験する事が出来ます。

f:id:tsubaki_t1:20170112225510j:plain

今回はこんな全方位写真のポスターや壁紙の変更、もしくは動画を仕込んでみます。

Unity-VR360-OverlayGrid

Unity-VR360-OverlayGridは、全方位写真に写真をハメ込む事の出来るアセットです。上手く設定すると、かなり馴染んだ感じで画像をはめ込む事が出来ます。

ちなみに、天井の模様、某超有名な映画のポスター、それとモニターがはめ込んだ動画です。結構わかりにくくなったんじゃないかなと。

f:id:tsubaki_t1:20170112230017j:plain

まずは全方位写真にポスターやモニターの中身をはめ込みます。

使い方(下準備)

まずは下のリンクから、Unity-VR360-OverlayGridを入手します。入手と言ってもパッケージとして公開されてる訳ではないので、Zipか何かでプロジェクトを落としてしまえば良いです。

github.com

f:id:tsubaki_t1:20170112230814j:plain

 

testシーンを開くと、中央の球体があります。その中が、全方位写真になっているので、球体の中に移動します。
ちなみに、ココで使用している画像はCubemapではなくTextureです。もし全方位写真を更新したい場合はSphereのTextureを差し替えれば良いです。

f:id:tsubaki_t1:20170112232131j:plain

f:id:tsubaki_t1:20170112232733j:plain

さて、さっそく全方位写真に物を配置していく訳ですが、ここで重要なポイントが、CameraとSceneViewのカメラの座標が(x:0, y:0, z:0)である事が望ましいという事です。

なので、メインカメラとSceneViewを中央へ移動させます。具体的には、MainCameraの座標を(x:0, y:0, z:0)に移動してもらい、Align View To Selectedでメインカメラの位置にシーンビューを移動させます。

この辺りの操作については Unity初心者が知っておくと少しだけ幸せになれる、シーンにオブジェクトを配置する時に使える18のTips+10 辺りを見てもらえると良いかと。

f:id:tsubaki_t1:20170112232552g:plain

使い方(物の配置)

次に全方位写真に物を配置していきます。

まずは空のGameObjectを座標(x:0, y:0, z:0)に配置し、VR360Gridコンポーネントをアタッチします。なおオブジェクトの名前は何でも良いです。

f:id:tsubaki_t1:20170112234723j:plain

次にVR360GridのPositionsを4つ以上に増やし、上手い感じに配置します。なお、Pos0が左上、Pos1が右上です。これを間違えると反転したり向きが逆だったりします。

上手く作れたらVR360Gridコンポーネント下にあるCreate Gridボタンを押してメッシュを構築します。

なお、構築後でもPositionsの位置は調整出来ます。

f:id:tsubaki_t1:20170112234916j:plain

後はMeshRendererのMaterialがNoneになっているので、好きな絵が貼ってあるマテリアルを設定すればOKです。

f:id:tsubaki_t1:20170112234526g:plain

より馴染ませる為に

より絵を馴染ませる為に、IBLの効果を活用します。

Skyboxを全方位写真と同じ内容の物に変更し、Direct Environment LightingをSkyboxに設定します。

f:id:tsubaki_t1:20170112235439j:plain

後はDirectional Lightのような光源を全て削除し、先程VR360Gridで作成したメッシュにLightingStaticのフラグを入れ、それらの光源処理をIBLにおまかせします。

これで、かなり色が馴染むようになります。

f:id:tsubaki_t1:20170112235827j:plain

動画を仕込もう(Unity 5.6版)

次は動画を仕込みます。折角なので、Unity 5.6で新しくなったVideoPlayerを使用します。VideoPlayerはMovieTextureと異なり、最初からテクスチャとして扱われないので、少し工夫します。
(特に何も設定しなければ、指定カメラの最前面もしくは背景としてムービーが流れます)

f:id:tsubaki_t1:20170113000927g:plain

マテリアルのMainTexにムービーを流し込む

レンダラーにVideoPlayerのムービーを流し込む一番手っ取り早い方法が、Material Overrideの設定でマテリアルの指定のテクスチャを上書きしてしまう方法です。

これで指定のマテリアルの任意のプロパティにVideoPlayerの内容が流し込めば、OKな訳です。

今回の場合は、Unity-VR360-OverlayGridで上書きしたテレビの画面にムービーの情報を流し込んでやれば良いです。

f:id:tsubaki_t1:20170113000549j:plain

f:id:tsubaki_t1:20170113001510g:plain

なお、動画はディスプレイなので、発光させたほうがソレっぽく見えるかもしれません。その場合はMaterialのEmissiveを弄るとか、まぁ臨機応変に。

感想

「全方位ムービーだと凄いデータが喰うので、一部のみを変更したい」みたいな場合や、「全方位写真に広告を仕込みたい」場合、後は全方位写真でも「ドアやタンス等に何らかのアクションを仕込みたい」場合、この技術は面白いかもしれません。

なおマニュアルがなかったので本来の使い方と異なる可能性がアリます。

関連

tsubakit1.hateblo.jp

tsubakit1.hateblo.jp

 

【Unity】スケルタルアニメーション用のアセット、Anima2Dが無償公開

Anima2Dが、パブリッシャーがUnityTechnologiesになりUnity Anima2Dに名前を変えて無償公開されました。

f:id:tsubaki_t1:20170110234002j:plain

https://www.assetstore.unity3d.com/jp/#!/content/79840

 

Anima2Dはスケルタルアニメーション(FateGOやSprineのような物)を実現するアセットの一つです。

f:id:tsubaki_t1:20170111000315g:plain

www.youtube.com

操作方法

操作方法は、下のセッションがわかりやすそうな気がします。
個人的にも興味があるしゲームジャムに使いたいので、この辺りは後で調べます。

www.youtube.com

今後

Anima2Dは、公式ブログのコメント欄によると最終的にUnity標準のリグアニメーションに統合されていく予定みたいです。

Anima2D will remain as a separate package. However, together with Sergi (now in Team 2D) we are building this feature directly into Unity. The end result will be seamless and not a Unity with Anima2D preinstalled.

プリインストールする予定は無く、Unityに統合されるまではAssetStoreから入手する必要があるみたいです。

関連

blogs.unity3d.com

ちなみに、同時期にCine.Machine Base RigもパブリッシャーがUnityTechnologiesになり無償公開されました。

こっちはカメラのコントロールを行うアセットのようです。カットシーン風に使うと格好良い絵が撮れそうです。

f:id:tsubaki_t1:20170110235120j:plain

https://www.assetstore.unity3d.com/jp/#!/content/79898

vimeo.com

Cinemachine使って遊んでみる*1

http://sassembla.github.io/Public/2016:05:06%2015-01-52/2016:05:06%2015-01-52.html

*1:Githubの記事はURL貼るの面倒くさい…

【Unity】当たり判定の有無や形状、物理演算の状態を視覚的に確認する Physics Debugger【5.6】

f:id:tsubaki_t1:20170105221344g:plain

物理演算を使用している際に、現在Rigidbodyがスリープしているか物理演算に使用するコライダーの形状等を確認したく鳴る事があります。

Unity 5.6で、そういったケースで便利なPhysics Debuggerが追加されたので、少し紹介します。

Physics Debugger

Physics DebuggerはRigidbodyの状態やColliderの形状をシーンビューにオーバーレイ表示する機能です。

対象のオブジェクトが動いているのか、どういったステータスを持っているのか等を一発で確認出来るようになっています。例えば、緑がRigidbody紫がIsKinematicで動作するRigidbody赤はstaticなコライダーです。
下の図では、3つのRigidbodyで稼働するオブジェクトと、IsKinematicで稼働するプレイヤーの存在が確認出来ます。
また、よく見ると後方の壁や山積みの樽にはColliderを付け忘れている事が確認出来ます。

f:id:tsubaki_t1:20170105222637j:plain

またコライダーの形状が確認出来るので、Triggerのような実際の画像と必ずしも判定が一致しない当たり判定の、実際の形状や範囲を確認するのにも便利です。
例えば下の図では、プレイヤーの足元にある「即死トラップ」の範囲を確認しています。

今まではオブジェクトを選択してColliderのGizmoを表示したり、判定確認用にレンダラーを登録したりエディタ拡張で表示する必要がありました。

f:id:tsubaki_t1:20170105223150j:plain

実際に使ってみる

Window > Physics DebuggerでPhysics Debuggerでウィンドウが開きます。

後はシーンビューに表示されるCollision Geometryにチェックを入れると、Physics Debuggerが条件にあったコライダーをオーバーレイ表示します。

f:id:tsubaki_t1:20170105222034j:plain

f:id:tsubaki_t1:20170105223832j:plain

スリープしないRigidbodyを探したい

Rigidbodyは基本的に、可能な限りRigidbodyをスリープ(動かなくなったオブジェクトは処理をスキップする機能)をさせる事がパフォーマンス的に非常に重要です。

ただ、状況次第でRigidbodyが中々スリープしない事があります(めり込んでたりとか)ので、そういった物を探して何とかします。対策は例えばDragを付けるとか、コライダーの形状をもっとスリープしやすいものにするとか。

Hide Selected Itemを選択して、Hide Rigidbodyのチェックは外しますがHide Sleeping Bodiesにチェックを入れます。
これで、動いてるRigidbodyにだけ色が付きます。

f:id:tsubaki_t1:20170105231518g:plain

コライダーやRigidbodyのつけ忘れを確認したい

Show Selected Itemを選択して、Select Allを押します。

これで全部のコライダーの形状や状態が確認出来ますので、コライダーやRigidbodyの付いていないメッシュを探します。

f:id:tsubaki_t1:20170105224226j:plain

よく見ると右上の樽に相変わらずコライダーが付いてません。このままゲームをプレイすると、右上の樽の中にプレイヤーが入り込めてしまいます。

f:id:tsubaki_t1:20170105224720j:plain

MeshColliderかつConvexにチェックが入ってない物を探す

MeshColliderはパフォーマンス的に問題になりやすいコライダーですが、特にConvexにチェックが入っていないものは負荷が高いです。
また、concaveのMeshCollider同士では接触判定を出せないので、これを見逃すと地面や壁が貫通する事も有ります。

Show Selected Itemを選択し、Collision Typeの中のMeshCollider(Cncave)だけチェックを入れると、MeshColliderかつConvexにチェックの入っていないコライダーを確認出来ます。

f:id:tsubaki_t1:20170105225142j:plain

まぁ、これを探すなら「シーン内検索して指定のプロパティ持ってる物を一覧表示」のような物の方が良いかもだけど。

関連

blogs.unity3d.com

tsubakit1.hateblo.jp

tsubakit1.hateblo.jp

【Unity】ベイクした影とリアルタイムな影を混ぜる新しい幾つかの手法と、その他諸々【5.6b3】

f:id:tsubaki_t1:20170103223736j:plain

Unity 5.6(b3)より、Experimental(実験的)で提供されていた新しいライトマップの機能がベータ版に統合されました。

ライトのMixedモードがStationaryモードに変化

 

ライトのモードで、以前はMixedの項目がStationaryモード(固定モード)に変わりました。

βではstationaryモードでしたが、リリース時にmixedとbakedに戻りました。
この記事ではstationaryとして記述します。

このモードは基本Mixedと同じような物で、動かない(Lightmap Staticな)オブジェクトは静的な影を落とし、それ以外のダイナミックなオブジェクトにはリアルタイムな影を落とす機能です。

そのままだと綺麗に混ざらなかったのですが、Unity 5.6から色々と自然に混ぜる為のアプローチが加わった感じです。

なお、Stationaryモードによる影を混ぜるアプローチは、Stationary Lighting Modeによって異なります。

f:id:tsubaki_t1:20170103225557j:plain

ベイクした影を表現しつつリアルタイムな影も使いたい

事前計算した影を「マスク」として準備しリアルタムな影と同じ色を使いたい

Unity 5.6よりShadow Maskが使えるようになりました。

これは今まで「影や間接光や光沢の表現をテクスチャに焼いていた」のを「混ぜる影は影、間接光は間接光(と焼き付けた影)」に分けて扱う機能です。

f:id:tsubaki_t1:20170103224841j:plain

これは単純に「影のマスクだけ作って、塗るのはリアルタイムと一緒」的な事をしてるんじゃないかなと。

比較した物を用意しました。矢印の付いた樽がリアルタイムな樽、ソレ以外はライトマップを焼いた樽です。事前に計算した影とリアルタムな影、比較して自然に描画出来ています

なおShadow Maskのみだと、リアルタイムなオブジェクトにダイナミックに影を落とせません。上の画像は、【Unity】テクスチャに焼いた影とリアルタイムな影を混ぜる - テラシュールブログを利用して影を落としています。

f:id:tsubaki_t1:20170103231625j:plain

Shadow Maskはそれ自体で1枚のShadow Mapを使用します。赤いテクスチャ奴がShadow Maskです。つまり、Shadow Maskを使用すると余計に1枚テクスチャを使用します。

(正直、IndirectもDirectional Lightmapも要らんからShadowMaskだけ欲しい)

f:id:tsubaki_t1:20170104221112j:plain

近距離はリアルタイムな影、遠距離はShadowMaskを使いたい

Distance Shadow Maskは「遠距離はShadowMaskを、近距離はRealtime Shadowを使う」という機能です。

こっちだと、テクスチャに焼いた影とリアルタイムな影を混ぜる を使用しなくとも影を落とす事が出来ます。

f:id:tsubaki_t1:20170103231952j:plain

f:id:tsubaki_t1:20170103232447j:plain

また、ベイクした影が使われるのはShadow Distance未満の距離はリアルタイムな影を使う訳ですが、逆を言えば遠距離になるまでベイクした影は使われません。なので、焼く影は結構適当でも良いのも素敵です。

影をテクスチャに焼き付けつつ、リアルタイムな影も表現したい

Subtractiveモードは、以前のMixedモードのように影はテクスチャに焼き付け、リアルタイムな影を使うモードです。

Shadow Maskを使わない分、ShadowMask系と比較して影に使用するテクスチャの枚数を減らせます。

f:id:tsubaki_t1:20170104223216j:plain

以前のMixedモードと比較し、リアルタイムな影の色を変更する事が出来るようになりました。これを上手く使えば、Directional Lightのみの場合は影を描画したテクスチャによく馴染む、自然な影が描画できそうです。

f:id:tsubaki_t1:20170104223326j:plain

テクスチャに焼き付けは間接光だけで十分、影はリアルタイムな物を使いたい

いっそShadwmapを使わず、間接光だけは事前にベイクして影はリアルタイムという選択肢もあります。そんな時はBaked Indirectモードを使います。

f:id:tsubaki_t1:20170104225834j:plain

基本的な影はリアルタイムで描画するので、Baked GI Resolusionが多少雑でも(近場ならば)割と綺麗に見えます。

f:id:tsubaki_t1:20170104225019j:plain

影をテクスチャに焼き付ける

モバイルのように、リアルタイムシャドウを使うと*1色々と問題になる場合は、全部影を焼き付けてしまい、足元に丸影モデルでも置きます。

Lightをstaticにすると、どのモードでも影をテクスチャに焼き付け、staticに設定したライトのリアルタイムな影は表示されなくなります。

f:id:tsubaki_t1:20170104230913j:plain

f:id:tsubaki_t1:20170104231448j:plain

その他

ライトや光源処理の一覧表示

LightExplorerで、シーン内のライトの一覧が確認出来るようになったみたいです。
単純なライトの他、EmissiveなオブジェクトやReflectionProbe、Lightprobeといったコンポーネントの検索・変更も出来るようになってます。

f:id:tsubaki_t1:20170104232140j:plain

8以上のIntensityが可能に

(何故か)今まで0~8で制限されていたLightのIntensityが、8以上設定出来るようになりました。最小値は相変わらず0です。(光がマイナスってのもあり得ないですが…暗黒の光…!)

f:id:tsubaki_t1:20170104232425j:plain

Lightmap Staticの設定がレンダラーに移動

ちなみに、Lightmap Staticの設定は相変わらずStaticのチェックボックスにもありますが、Rendererにも追加されました。この項目にチェックを入れると、今までLightmappingウィンドウで設定してた項目が表示されるようになります。

f:id:tsubaki_t1:20170103230610j:plain

何かベイクに妙に時間がかかる

とりあえず後で時間測ってレポートします(予定話

Directional Specularモードの削除

今ひとつ表現が安定しなかったDirectional Specularが無くなりました。

近づいたらリアルタイム表現の方が正直綺麗なので、まぁ特に思う所もなく。さよならDirectional Specular君、君のことは忘れないよ。多分

ちなみにExperimental Buildとは

Unity CommunityのBetaのフォーラムにて公開されている「実験的ビルド」です。

Editor VRや2D Preview、AIやLinux Editor等、色々と提供されています。

f:id:tsubaki_t1:20170103224254j:plain

基本言語は英語です。またフォーラムにGoogle翻訳が使えなくなったので、英語に苦手意識がある人が敷居が高いかもしれません。

 関連

tsubakit1.hateblo.jp

tsubakit1.hateblo.jp

*1:発熱とか