LoginSignup
2
2

More than 1 year has passed since last update.

【Unity】レンダリング/カリング/ライティングについてまとめてみた

Posted at

Unity で画面がレンダリングされる仕組み

1. 描画するオブジェクトの判別

  • CPUがシーン内全てののオブジェクトをチェック
    • レンダリングするべきか判別する
    • オブジェクトのバウンディングボックスの一部がカメラの視錐台内になることが必要
  • レンダリングされないオブジェクトはカリングという

2. ドローコール

  • CPUはレンダリングされる全てのオブジェクト情報を収集
    • 収集したデータ(オブジェクト1つ1つに対して)はドローコールと呼ばれる命令に分ける
  • ドローコールには単一メッシュに関するデータと、そのメッシュがどのようにレンダリングされるべき(どのメッシュを使うか)かの情報が含まれている

3. バッチを作成

  • CPUはドローコールごとにバッチと呼ばれるデータのパケットを作成
    • バッチを作成する処理のことをバッチングと呼ぶ

4. ドローコールを送信

  • CPUはドローコールを含む全てのバッチに対してGPUにドローコールを送信
    • レンダリング環境に変更がかかる場合のみセットパスコールというコマンドが呼ばれる
  • GPUがセットパスコールを受け取ったらレンダリング環境を更新
  • GPUがドローコールを受け取ったらバッチを元にオブジェクトを描画し始める

5. 描画する

  • GPUのタスクがセットパスコールならば、レンダリング環境を更新
  • GPUのタスクがドローコールならば、メッシュをレンダリングする
    • 頂点シェーダーがGPUにメッシュの頂点を処理する方法を決定
    • 頂点が決まったらフラグメントシェーダーがGPUに1ピクセルごとの描画方法を決定
  • CPUから送られたすべてのドローコールが処理されたらレンダリング完了

カリングについて

視錐台カリング(フラスタムカリング)

  • 常に自動で行われる機能
  • カメラの視錐台の中に入っているものは描画、入っていないものは描画しないというもの
  • Near clipping planeFar clipping plane の間を結ぶ台形が視錐台と呼ばれる部分のこと

image.png
視錐台を理解する - Unity公式 の画像

オクルージョンカリング

  • あるオブジェクトが他のオブジェクトに隠されていて現在カメラに映らないときに、オブジェクトのレンダリングを無効にする機能
    • GPUの負荷は軽減できるが、遮蔽判定をするためCPUの負荷は増加
    • 遮蔽判定を負荷が⼤きすぎるため、
      「セル」と呼ばれる⽴⽅体の範囲単位で事前に遮蔽判定の
      計算をしておく
オクルージョンカリングの使い方は参考文献を見ると分かりやすいと思います。

Unity のライティング

  • オブジェクトのシェーディングを計算するためには、そのオブジェクトに当たる光の強度、方向、色の情報が必要

ライティングの種類

  • 「リアルタイム」なものと「事前計算」によるものがある
  • どれを使うかは、使用するプロジェクトと対象のプラットフォームによって異なる

リアルタイムレンダリング

  • シーン内のオブジェクトをライティングする最も基本的な方法
    • キャラクターなどの動くジオメトリを照らすのに向いている
    • Unityのリアルタイムライトは反射しない

ライトマップのベイク

  • 静的で複雑なライティング効果を計算可能
    • 計算結果はライトマップと呼ばれる参照テクスチャマップに保存
    • この計算プロセスを**ベイク(焼き付け)**という
  • サーフェスを直に照らす直接光と、シーン内にある他のオブジェクトから跳ね返ってくる間接光のどちらも含めることが可能
  • ゲーム中にライトを自由に動かせなくなる代わりに、モバイル端末のような非力なハードウェアでもパフォーマンスを出せる

事前計算されたリアルタイムグローバルイルミネーション

  • シーンの複雑なライティングをインタラクティブに更新する方法
    • 間接光によるグローバルイルミネーションを使ってライティングされた環境を生成しつつ、リアルタイムでライティングの変更が可能
    • 時刻によって光源の色と位置が変化するのを表現するのが良い例

レイヤー

  • スプライトやUIの重ね合わせを制御する技術
    • スプライトを表示する順番は Sorting Layer を使って制御
    • UIの場合は Hierarchy で上に表示されているものが画面奥、下に表示されているものは画面手前に表示
      • Hierarchy で表示順と異なる順番で表示したい場合は、 Canvas で順番を設定
        image.png
        image.png
  • 特定のゲームオブジェクトのみ表示したりできる
  • グループ単位でゲームオブジェクトを分けたりできる
    image.png
    image.png

参考文献

2
2
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
2
2