1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Unityはどのようにデプスバッファを直接取得するか

Last updated at Posted at 2022-03-11

1)Unityはどのようにデプスバッファを直接取得するか
2)UnityEditorでのSpriteAtlasの読み込みの問題
3)GameObjectをProjectウィンドウからSceneViewウィンドウにドラッグできない
4)UGUIのイベント応答の問題
5)iOS設定Texture2DのmipMapBiasが無効です


Rendering

Q:いくつかの情報を確認したところ、Unityは深度テクスチャを取得するために各オブジェクトをもう1回レンダリングする必要があるようですが、このレンダリングを省略して深度バッファに直接取得する方法はありますか?または、深度バッファを直接コピーします。

A:できますよ。主な手順は次のとおりです。

  1. Camera.SetTargetBuffersを介してカメラの色と深度のBufferを新しいRT(ColorBufferRT、DepthBufferRT)に再ポイントします。
  2. AfterForwardOpaqueイベントをCommandBufferに追加し、ColorBufferRTとDepthBufferRT Blitを新しいRTにレンダリングします(後者のレンダリングは直接使用できます)。
  3. CommandBufferを介してAfterEverythingイベントとBlitColorBufferRTをCameraTargetに追加します(画面が正しくようにするため)。
    詳細については、
    https://blog.csdn.net/linjf520/article/details/104964803を参照してください。

Texture

Q:使用されているバージョンはUnity 2018.3.6f1です。Unity EditorモードでPrefabを編集すると、画像がメモリに読み込まれます。その結果、ゲームの開始時に関連するアトラスSpriteAtlasManager.atlasRequestedが事前にコールされ、アトラスの読み込みエラーが発生します。

1.png

上図は、早すぎたアトラスのロードで、失敗時に検出したメモリにロードされた画像です。ゲームの実行中に、プレハブを編集するときにメモリ内の画像アトラス、をクリアする方法はありますか?

補足:ゲームを実行せずにメモリ表示のインターフェイスを呼び出し、メモリにまだ多くの画像がロードされていることを確認します。
2.png

A:この問題の本質は、Atlasに参照したSpriteをロードするときに、メモリにAtlasがない場合、アトラスをロードするための「リクエスト」(atlasRequested)がトリガーされることです。EditorでPrefabを編集すると、このリクエストが生成されます。ゲームの最初のフレームで、このリクエスト関数がコールされ、このリクエストはNativeレイヤーによって発するため([RequiredByNativeCode])、これを制御する方法はありません。メモリにあるアセットをアンロードすることと関係ありません。
3.png

このリクエストはランタイムの最初のフレームでのみコールするため、最初のフレームでatlasRequestedイベントを登録しないでください。最初のフレームの後、対応するPrefabをロードする必要があるときに関数を登録したりしないでください。このようにすると、ゲームを起動時にこの関数をコールすることが避けられます。
2.png


Editor

Q:最近、Unityは会社のプロジェクトを開いたときにGameObjectをProjectウィンドウからSceneViewウィンドウにドラッグできないことがわかりましたが、新しいプロジェクトを作成したらドラッグすることはできるようになりました。特定のツールによるものなのか、プラグインによるものなのかを推測しますが、プラグインやツールが多すぎるので、ひとつひとつチェックするのは時間の無駄です。使用されているUnityのバージョンは2019.4です。

通常のプロジェクトでは、GameObjectをプロジェクトウィンドウからSceneViewウィンドウにドラッグしたら、アイコンは次のようになります。
5.png

異常な時、以下のようになってしまいました:
6.png

現在、外部ツールまたはプラグインのSceneView.duringSceneGuiおよびDragAndDropの関連コードはコメント化されており、問題は依然として存在します。

A:この問題の理由は、GameObjectのEditorを書き直し、OnSceneDrag関数を実装しなかったためです。この関数が実装されていない場合、オブジェクトをProjectWindowからSceneViewにドラッグできません。

UGUI

Q:UGUI RayCastのNoDrawRayCastはPCでは問題なくクリックできますが、Androidスマホになったら浸透(penetration)し、クリックして応答することはできません。透明チャンネルが0であるImageを使用する時は問題ありません。

スクリプトは次のとおりです。
7.png

A:Imageの半透明度を0に設定し、CanvasRendererでのCullTransparent Meshを選択して、描画せずにクリックイベントに応答できるようにすることができます。(さらに、問題主のコードをテストしました結果、Xiaomi 9では問題ありません。)
8.png

Texture

Q:iOSデバイスでTextureMipmapStreamingを使用すると、Texture2DのmipMapBiasの設定が無効になります。このTextureはMaterialから取得したmainTextureですが、Editorで有効になります(画像がぼやけになったり鮮明になたっりできます)。

バージョンはUnity2018.4.13です。関連する設定を次の図に示します。
9.png
10.png
11.png

A:これにつき、Texture.streamingTextureDiscardUnusedMips = trueを有効にする必要があります。そうしないと、メモリが十分である場合、高精度のテクスチャは破棄されません。


UWA Technologyは、モバイル/VRなど様々なゲーム開発者向け、パフォーマンス分析最適化ソリューション及びコンサルティングサービスを提供している会社でございます。

今なら、UWA GOTローカルツールが15日間に無償試用できます!!
よければ、ぜひ!

UWA公式サイト:https://jp.uwa4d.com
UWA GOT OnlineレポートDemo:https://jp.uwa4d.com/u/got/demo.html
UWA公式ブログ:https://blog.jp.uwa4d.com

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?