📗

【Unity Summary】 Camera

2025/03/10に公開

Camera

  • Transform と Camera component によって定義される
name description note
Transform 視点を定義 - 前方向 (Z) 軸:表示方向が決定
- 上方向 (Y) 軸:画面の上端が決定
Camera component 映す領域の size と形状を定義

types of view

name description note
透視投影(Perspective) 離れている物体ほどより小さく見える 芸術や computer graphics で広く使用され、リアルな scene を作成したい場合など
平行投影(Orthographic) 距離が増加しても Object を縮小しない 敢えて現実の見え方とは違う表現方法の地図や情報画面を作成したい場合など

multiple camera

sub camera

  • 通常1つの Camera View が画面全体を覆うが、画面内の一部の小さな領域で別 View を表示することも可能
type description
Camera 一人称視点の画面を表示
Sub Camera ドライビングゲーム内でバックミラーを表示したり、上方からのミニマップを画面端に表示等

multi display

  • Display.Activate() で、明示的に追加の display を Active にする必要がある
using UnityEngine;
using System.Collections;

public class ActivateAllDisplays : MonoBehaviour
{
  void Start ()
  {
    Debug.Log ("displays connected: " + Display.displays.Length);
    // Display.displays[0] はデフォルトのディスプレイであり、常に ON
    // よって、index 1 から始まる
    for (int i = 1; i < Display.displays.Length; i++)
    {
      Display.displays[i].Activate();
    }
  }
}

Occlusion Culling

  • GameObject が画面上に表示されていない時(遮断されている場合も含む)に、 対象 Object の rendering 演算を行わない機能
  • Unity Editor で Scene に関するデータを生成
    • Runtime に Occlusion Culling のデータを memory に読み込む
      • データを load するのに十分な memory があることを確認する必要がある
    • データを生成するプロセスは「Bake」と呼ぶ
  • Runtime に Bake したデータを memory に load し、Occlusion Culling property が有効な各 Camera に対して、データに対する query を実行して、その Camera が何を見ることができるかを決定
  • 無駄な Rendering 操作を防ぐことで、CPU 及び GPU 時間の両方を節約可能
    • CPU 上で Runtime の計算を行う
    • したがって、Over draw により project が GPU bind されている場合、Occlusion Culling は解決策として非常に有効
  • 「固体の GameObject によって明確に区切られている Scene」に最適
    • 廊下でつながれた部屋など
  • Occlusion Culling を使用して動的 GameObject を遮蔽できる
    • 一方で、動的 GameObject は他 GameObject を遮蔽することはできない
    • Runtime に Scene Geometry を生成する場合、Unity の Built-in の Occlusion Culling はプロジェクトに適さない

Occlusion Portal

  • Occlusion の on / off 切替機能のようなもの
setting description
open = true 他 GameObject を遮蔽しない
open = false 他 GameObject を遮蔽する
void OpenDoor() {
  // Oculucion Portal の Open 状態を切替(GameObject をその後方に描画する)
  myOcclusionPortal.open = true;

  // ドアが開くアニメーションを再生する関数を呼び出す etc.(しない場合、 GameObject を隠す)
  …
}

Occlusion Culling window

Object tab

setting description
Renderer Occlusion Culling 設定の表示・変更
Occlusion Areas Is View Volume 設定の表示・変更、新 area の作成

Bake tab

  • Bake 処理の parameter を微調整
    • Bake 時間、 Runtime のデータサイズ、外観結果のバランスを見つける
setting description
Smallest Occlude 他 GameObject を遮蔽できる最小 Object size(m単位)
ファイルサイズを最小にして Bake 時間を最短にするには、Scene で適切な結果が得られる最大値を選択
Smallest Hole Camera から見ることのできる Geometry 間の最小隙間(m単位)
ファイルサイズを最小にして Bake 時間を最短にするには、Scene で適切な結果が得られる最大値を選択
Backface Threshold Bake したデータの size を削減する必要がある場合、Bake 時に Scene を sampling & Scene の一部を除外
Visualization tab 選択 Camera の視点で見た Occlusion Culling の効果を表示

CullingGroup API

reference:https://tsubakit1.hateblo.jp/entry/2016/01/07/233000

  • Object が実際に見えている場合、もしくは見えない場合にのみ処理を行う
  • Object との相対距離で処理切替(LOD に近い)
  • examples
    • Player の視界にいきなり敵を登場させないために、敵を生成する場所として Camera から隠れている位置を tracking したい
    • Scene に 10,000 個のマーカーポイントが置かれているとき、Player がマーカーポイントから 1m 以内に近づいたときに効果的に察知したい

FrameTimingManager

  • 以下の場合に使用
    • frame 単位で debug する必要がある
    • 動的解像度機能を使用したい
      • 個々の Render target を動的に scaling し、GPU の負荷を軽減できる設定
    • Adaptive Performance Package を使用したい

Frame Timing Stats

stats description
CPU Total Frame Time(ms) CPU frame 時間の合計(ms)
CPU Main Thread Frame Time(ms) - 「frame 開始」 〜 「Main Thread が frame 中に実行した作業を終了する」までの時間(ms)
- 2つの frame の終了時点と終了時点の間の時間として8 overhead や frame 間の待機時間も含めて計算
CPU Main Thread Present Wait Time(ms) frame 中で Present() を待機するのに費やされた CPU 時間
CPU Render Thread Frame Time(ms) 「Render Thread での処理開始」 〜 「Present() 関数を呼び出す」までの時間(ms)
GPU Frame Time(ms) GPU の、単一 frame の Rendering の開始時間と終了時間の差(ms)

DLSS(Deep Learning Super Sampling)

  • NVIDIA の Deep Learning Super Sampling (DLSS) は、人工知能を使用して Graphics の performance と品質を向上させる Rendering 技術
  • 高 frame rate で高解像度な、Realtime Ray Trace された世界を実行可能
  • rasterize(ラスタライズ:path 等の複雑なデータや重い link 画像・埋め込み画像を「bit map 画像」へ変換する処理)された Graphics の performance と品質を向上させる
    • 特に VR Application に関して、より高 frame rate で実行する際に有用
      • 低 frame rate で発生するめまいや吐き気などの悪影響を取り除く

Camera component

Clear Flags

  • 画面のどの部分を clear するか
  • 複数 Camera を使用して、異なるゲーム要素を描画する際に便利
  • View を描画する際に、色と深度に関する情報を格納する
    • 画面の描画されない部分は空っぽで、Default では Skybox が表示
    • 各 Camera は Buffer に色と深度に関する情報を格納し、Rendering を行うたびに、多くのデータを蓄積してしまう
  • Clear Flags を設定することで、Scene にある全 Camera が Rendering する際に収集された様々な Buffer 情報をクリアし、無駄なデータ蓄積を防げる
setting description
Skybox 空白部分には Skybox 表示
Solid Color 空白部分には Background Color 表示
Depth Only 空白部分の描画なし

Background

  • Skybox がない場合に、残りの画面に適用される色

Culling Mask

  • Camera に表示されるように、 Object の Layer を含めたり取り除いたりする

Projection

  • 眺望を simulate する Camera の方法
type description
Perspective Camera が眼に見えるような見え方(透視法)で Object を Rendering
Orthographic 透視の感覚なしに(平行投影法)、 Camera が Object を均一に Rendering

Physical Camera

  • Camera の Physical Camera(物理 Camera)property を有効化
type description note
Focal Length センサーとレンズ間の距離(mm) 数値が小さいほど FOV は広がる
Sensor Type simulate する現実世界の Camera 形式を指定
Sensor Size センサーの size を mm 単位で設定
Lens Shift 中心から水平または垂直にレンズをシフト Camera が被写体に対してある角度(例えば、平行線の収束など)を取っているときに発生する歪みを補正可能
Gate Fit 解像度ゲート(ゲーム View の size / aspect 比)の size をフィルムゲート(Camera センサーの size / aspect 比)に関連づけて変更

Clipping Planes

  • Rendering する Camera からの距離
type description note
Near Camera から最も近い点 Buffer の精度を高めるには、Near Clip 面 を出来るだけ遠くに移動させた方がよい
Far Camera から最も遠い点

Viewport Rect

  • 画面のどこに Camera View を描画するかを示す4つの値
type description note
X 水平方向の開始位置
Y 垂直方向の開始位置
W(Width) 出力する際の幅
H(Height) 出力する際の高さ

Depth

  • 描画順での Camera の位置

Rendering Path

  • Camera が使用する Rendering 方法
type description note
Use Player Settings Player 設定で指定された Rendering Path を使用
Vertex Lit 頂点 Light Object として Rendering - 通常1つのパス(pass)で各 object を rendering し、全 light からの lighting を object の頂点ごとに計算
- Unity 5 より Standard shader に置き換わった
Forward Material 毎に1つの path で Rendering

Target Texture

  • Camera View の出力が含まれた Render Texture への参照
    • 有効にすると、Camera は画面に描画しなくなる
      • 指定 Texture 上に描画する
    • Camera の View を、別 Object に適用できる Texture に変える
      • 競技場のビデオモニターや監視 Camera、反射などを簡単に作成可能

Occlusion Culling

  • 他 Object の背後に隠れている(例えば、壁に隠れている)Object は Rendering されない

Discussion