テラシュールブログ

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

【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:発熱とか

【Unity】7.5時間を約3分に。ライトマップ(Realtime GI)のベイク時間を短縮する為のチュートリアル

Unityでライトマップをベイクする場合、何も考えず初期設定でベイクすると非常に時間がかかります。それを短時間でベイクする為のチュートリアルチュートリアルを行う為のアセットが公開されてました。

チュートリアルとアセット

チュートリアルはUnity Best Practiceに含まれているみたいです。 
全9章です。

unity3d.com

また同時にチュートリアルを進める前と、チュートリアルの内容をは反映したシーンが含まれるアセットも公開されています。

f:id:tsubaki_t1:20170101111137j:plain

https://www.assetstore.unity3d.com/en/?_ga=1.69157009.1644033104.1462688839#!/content/73563

 

7.5時間が2.25分に

対象のチュートリアルでは、元々7.5時間かかっていたベイク時間が2.25分まで短くなるそうです。

f:id:tsubaki_t1:20170101110332j:plain

特に顕著な差がでるのが、やはりLightmapのResolutionを書き換えたケースな印象です。初期値2は高すぎるんや…Terrainとか巨大な範囲にベイクする際は減らさなあかんで…

補足

Baked GIしか使用しない場合でも効果がある

Baked GIモードでもGIを表現するためにRealtime GIのベイクを使用してるみたいです。なのでBaked GIを使用する場合でも、このチュートリアルは効果があります。

5.6でUIが変化

Unity 5.6でLightmapのExperimental Buildの内容が適応され、UIの幾つかが変更になります。具体的には、オブジェクト毎の設定がRendererコンポーネントに適応されるようになったり、Lightmapの項目が整理されたり云々。

LightprobeProxyVolumeを使うという選択肢

チュートリアルでも書かれていますが、細かいオブジェクトはLightmapでベイクせずLightProbeを使用するのはアリです。また、多少大きなオブジェクトの場合でもLightprobeProxyVolumeを使用すると、それなりに破綻なく表現出来ます。

Progressive Lightmapperのルールは違うかもしれない

今後追加される、シーンビューが見てる範囲のライトマップを優先的に焼き、結果を即座に確認出来るようになる「Progressive Lightmapper」の機能は、コレとは異なる設定で動作するかもしれません。Realtime GIはGeomerics社のEnlighten、ProgressiveLightmapperはImagination Technologies社と、協力してる会社が異なります。

www.youtube.com

関連

tsubakit1.hateblo.jp

blogs.unity3d.com

tsubakit1.hateblo.jp

【Unity】3Dアドベンチャーゲームのサンプルプロジェクト、Adventure - Sample Game

f:id:tsubaki_t1:20161231132114j:plain

Unite Europe(Unityの最大イベントのヨーロッパ版)のトレーニングデイ(ワークショップ)で使用されていたアドベンチャーゲームのアセットが公開されました。

 Adventure Sample Game

このサンプルプロジェクトには、クリックでキャラクターが移動し、アイテムを集めてゴールまで進むまでのゲームが含まれてます。

アセットの入手と内容物

アセットは下のリンクからダウンロード出来ます。

f:id:tsubaki_t1:20161231132400j:plain

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

 

内容は、幾つかのモデルやら、アウトライン表現が付与されているトゥーンシェーダーやら、アニメーションやら、色々です。

サンプルシーンも含まれているので、インポート後すぐに遊べる感じです。

f:id:tsubaki_t1:20161231132931j:plain

f:id:tsubaki_t1:20161231133010j:plain

ゲームの始め方と遊び方

起動のシーンはPersistentシーンです。このシーンを開いた後に再生すると、ゲームがプレイ出来ます。

f:id:tsubaki_t1:20161231133057j:plain

ゲームを開始したら、移動先をクリックして移動します。何らかのアクションが仕込まれている場所では、対象をクリックするとアクションを起こします
アクションを起こせる物は、アウトラインが設定されています。

f:id:tsubaki_t1:20161231133531j:plain

ゲームで遊ぶ

赤いビームに守られたゲートを通りたい主人公(モヒカン刈りの女性)は、掲示板に貼ってある男性(何か有名人っぽい)に変装して侵入する事を思いつきます。

f:id:tsubaki_t1:20161231133335j:plain

変装用のメガネを入手。どこからどう見ても掲示板に写っていた彼です。これで騙される人は節穴アイですが、まぁ細かいことは良いのです。

f:id:tsubaki_t1:20161231133830j:plain

コーヒー買ってこいとの事。

おk。任せろ

f:id:tsubaki_t1:20161231133944j:plain

コーヒー1コインだよ!

………金がない!

f:id:tsubaki_t1:20161231134032j:plain

釣り銭を盗みます。

f:id:tsubaki_t1:20161231134131j:plain

コーヒーを持って行くと、ゲートが通れるようになりました。

f:id:tsubaki_t1:20161231134308j:plain

チュートリアル

このアセットを使用してワークショップを行う流れが、チュートリアル動画(英語)として公開されています。

unity3d.com

まだちゃんと見た訳ではないですが、プレイヤーの操作やイベントの条件分岐、シーン制御やインベントリやゲームの状態の持ち方等が説明されてるように見えます。

f:id:tsubaki_t1:20161231135355j:plain

これの翻訳が出るのは時間がかかりそうなので、近いうちにプロジェクト解析と合わせてテキストにまとめたい所。

関連

tsubakit1.hateblo.jp

tsubakit1.hateblo.jp

tsubakit1.hateblo.jp