なんとかするから、なんとかなる

エンジニア関係のことを書きます

Unite2017 参加しました その8

Unityライティング最新情報

www.slideshare.net

光表現について

  • GI Global illumination 間接光
  • Baked GI 事前に計算しておくGI
  • procomputed RealTime GI リアルタイムで間接光をつくる

UnityではStaticな動かない物体に対しては、前もって間接光を計算しておく。

LightProve

空間にライトを検知するものを置いて、間接光の影響を計算しやすくするための仕組み

  • 1モデル1つのproveからしか影響を受けられなかった。
  • 上記が改善され、モデルが複数のproveを受けられるようになった

リアルタイムな間接光について

リアルタイムな間接光はクラスタ単位で計算される。

クラスタの大小は変更可能。

影の表現

光を遮り、影を作るためにはメッシュやポリゴンは必要となる。

メッシュやポリゴンが増えると、負荷が上がるため辛い。

動的な影と静的な影について

それぞれの影を混ぜるMixed Lighting

Mixed Lighting

  • unity5.6以前では、うまくMixedすることができず、影の上に影が映ってしまうことがあった。 また、光沢の表現(スペキュラ)がお粗末だったらしい。
  • MixedLightingは大きく4種類
    • Subtractive
    • Baked Indirect
    • Shadow Mask
    • Distance Shadow Mask

Subtractive

  • 5.6以前のmixedに近い機能
  • 影を全てTextureに焼きこんでしまう(static)
  • 動的なオブジェクトに対しては計算をする。
  • 動的な場合は影の色を変更することができるので、影の上に影が描画されてしまうことを避けられる。
  • 影の上に影以外のmixedデメリットを引き継いでいる。光沢の表現は難しい

Baked Indirect

  • 間接光のみを事前に計算しておくが、影は全てリアルタイム表現しましょう。という発想。
  • 静的なオブジェクトに対しても影を描画するため辛いという欠点がある。処理時間がかかりすぎる

Shadow Mask

  • 静的な影は前もって計算、動的な影はその場で計算。
  • ライトは動的に描画することができるので光沢も表現することができる。
  • 間接光はテクスチャに焼き込む
ShadowMaskではクッキーがつかえる
  • マスクとして影を用意しているので、色や輝度を変更することは可能
  • ただし、間接光はすでにTexutreに焼かれているため注意が必要。
Baked Shadow Angle
  • 使用することはあるが動的な影と静的な影の差が見えてしまう。

Distance Shadow Mask

  • Dynamic とShadowMaskの混合
  • 距離が近い部分はDynamic,遠い部分はShadow Mask
  • すなわち、近くてよく見えるところは頑張って描画するが、遠いところは低解像度でもOKとする

Unity2017.1から

QualitySettingsからShadowMaskとDistanceShadowMaskは切り替えが可能となる。

ローレベルのユーザはShadowMask、ハイエンドユーザはDistance Shadow Maskを利用する。

その他

  • 影を落とすためだけのオブジェクトをおく方法もある。
  • 影を落とすためだけに、低解像度のメッシュを置いても良い。
  • 高解像度のポリゴンによる陰を低解像度オブジェクトで影を遮ることで作る。すなわち影を作るのはそこまでハイポリゴンは不要である。

ライトのBaked 設定

ライトの設定は大変なので、その改善方法を紹介

LightExplorer

シーン内のライト及びEmissiveの一覧を表示してくれる便利さん

Progressive LightMapper

  • シーンが見えているライトを優先的にBakedしていくので、プレビューが早い
  • 大まかに計算後、詳細に計算するのでやっぱりプレビューが早い
  • リアルタイムGIはできない。
  • ライトを焼いてから、proveを焼くので、proveに大きく依存するシーンではプレビューには時間がかかる