ゲーム開発
Unity
UnrealEngine
C++
Blender
Houdini
ゲーム数学
ゲームAI
グラフィックス
サウンド
アニメーション
GBDK
制作日記
IT関連
ツール開発
フロントエンド関連
サーバサイド関連
WordPress関連
ソフトウェア設計
おすすめ技術書
音楽
DTM
楽器・機材
ピアノ
ラーメン日記
四コマ漫画
その他
おすすめアイテム
おもしろコラム
  • ゲーム開発
    • Unity
    • UnrealEngine
    • C++
    • Blender
    • Houdini
    • ゲーム数学
    • ゲームAI
    • グラフィックス
    • サウンド
    • アニメーション
    • GBDK
    • 制作日記
  • IT関連
    • ツール開発
    • フロントエンド関連
    • サーバサイド関連
    • WordPress関連
    • ソフトウェア設計
    • おすすめ技術書
  • 音楽
    • DTM
    • 楽器・機材
    • ピアノ
  • ラーメン日記
    • 四コマ漫画
      • その他
        • おすすめアイテム
        • おもしろコラム
      1. ホーム
      2. 20221215_01

      【書籍紹介】「ゲーム制作者になるための3Dグラフィックス技術」に出てくる用語を簡潔にまとめる

      おすすめ技術書グラフィックス
      2022-12-15

      マイケル
      マイケル
      みなさんこんにちは!
      マイケルです!
      エレキベア
      エレキベア
      こんにちクマ〜〜
      マイケル
      マイケル
      今回は久しぶりの書籍紹介!
      紹介するのはこちらです!

      IMG 2195

      ゲーム制作者になるための3Dグラフィックス技術 改訂3版

      マイケル
      マイケル
      「ゲーム制作者になるための3Dグラフィックス技術」!
      ゲームグラフィックスの定番書ですね!
      エレキベア
      エレキベア
      これはよくみるクマね〜〜
      マイケル
      マイケル
      具体的な実装方法というよりも、3Dグラフィックスに用いられる技術や歴史について教科書的に学べる内容になっています!
      エレキベア
      エレキベア
      日本語でグラフィックス周りを丁寧に解説している書籍はあまり見ないから貴重クマね〜〜〜
      マイケル
      マイケル
      とはいえ新たな用語が次々と出てくるから整理するのが大変、といった側面もあると思います!
      今回は書籍で紹介されている技術についてざっくりと概要をまとめてみようと思います。
      マイケル
      マイケル
      書籍を読んだ方は全体像の復習に使用いただいて、
      詳しく知りたくなった方は是非一読してみてください!!
      エレキベア
      エレキベア
      やったるクマ〜〜〜〜

      影生成

      基本となる影生成技法

      マイケル
      マイケル
      まずは影生成周りについて!
      これはただ黒い丸を置くだけの「丸影」から始まり、今は「デプスシャドウ技法」をベースとした技法が主流になっているようですね。
      丸影 ・3Dキャラクタの足元に黒い丸を置くだけの簡易的な影
      投射テクスチャマッピング技法 ・丸影を少し進化させ、物体の形状を写すようにしたもの
      ・セルフシャドウが付かない欠点がある
      ステンシルシャドウボリューム技法 ・3Dモデルの輪郭となる頂点を光の進行方向に引き伸ばし、影となる領域(シャドウボリューム)を生成する手法
      ・セルフシャドウに対応できるが、ポリゴン形状での描画になってしまう
      デプスシャドウ技法 ・「光源から遮蔽物までの距離(Zバッファ)」をまとめたシャドウマップを用意し、光が当たっているかを判定する手法
      ・テクスチャの内容も考慮して生成できるが解像度に依存する
      ↑基本となる影生成のイメージ
      エレキベア
      エレキベア
      なんだこの絵はクマ・・・

      改良型デプスシャドウ技法

      マイケル
      マイケル
      そしてこのデプスシャドウ技法を改良した技法がいくつも生み出されているようです。
      PSM(パースペクティブ・シャドウマップ)技法 ・シャドウマップを透視投影変換し、「視界からの座標系に配慮して生成」する手法
      LSPSM(ライトスペース・パースペクティブ・シャドウマップ)技法 ・PSM技法が最良の状態を得られるよう、シャドウマップ生成時の座標系を調整する手法
      カスケードLSPSM技法 ・LSPSMで複数のシャドウマップを使用する手法
      ・視点からの視界を視点位置から遠方に向かって適当に分割する方法がある
      ボカし付きデプスシャドウ技法 ・影の輪郭付近をボカすことで軽減させる手法(ソフトシャドウ表現)
      VSM(バリアンス・シャドウマップ)技法 ・影か否かの判定に「チェビシェフの不等式」と呼ばれる不等式を用いてソフトシャドウ表現にする手法
      エレキベア
      エレキベア
      名前がどんどんややこしくなってるクマ・・・

      水面表現

      表現手法の歴史

      マイケル
      マイケル
      次は水面表現について!
      こちらはテクスチャ貼付だけだったものが、法線マップやアニメーション、ジオメトリレベルの制御により、よりリアルな波の表現が可能になってきているようです。
      プログラマブルシェーダ登場以前 ・さざ波の模様を描いた半透明のテクスチャを貼り付けたポリゴンでの表現が主流
      プログラマブルシェーダ登場後 ・微細凸凹を表現するため、法線マップを活用したバンプマップが利用されるようになる
      ・ループする法線マップのアニメーションをオフラインで生成しておき、レンダリング時に再生することで静的なさざ波を表現
      ・毎フレームでベルレ積分を繰り返して行い、次の状態のハイトマップを求めることで動的なさざ波を表現
      ・大きな波は頂点レベルで動かすことで表現
      エレキベア
      エレキベア
      水面や波の表現は確かにいざ実装するとなると難しそうクマ

      よく出てくる用語

      マイケル
      マイケル
      その他、水面表現関連でよく出てくる用語として下記のようなものがあります。
      特にフレネル反射は水面だけでなく、車のボディや肌などにも使用されるようです。
      フレネル反射 ・水面に対して視線が直角に近くなればなるほど水底が見えやすくなり、水面に対して視線が浅い角度になるほど周囲の情景が映り込んで見えやすくなる現象
      ・最終的にフレネル反射の方程式に応じて、環境マップから抽出したテクセルとレンダリングした水底の混ぜ具合を調整する
      ゲルストナー波動関数 ・波を表現する関数で、ジオメトリレベルで大きな波を作る際に使用できる
      Smoothed Particle Hydrodynamics (SPH)法 ・水をパーティクルで表現し、球体状の厚みを深度バッファに描画し、ライティングやフレネル反射に配慮したシェーディングを行う手法
      ・水しぶきの表現にも使用できる
      ↑フレネル反射のイメージ
      エレキベア
      エレキベア
      フレネル反射の概念はすごくシンプルで使いやすそうクマね

      人肌表現

      スキンシェーダの実装

      マイケル
      マイケル
      そして次は人肌表現
      これは想像通り肌の質感を出すのはかなり難しく、下記のような「脂質層」「表皮」「真皮」といった層に分けて光の反射をシミュレートするのがよいとされているようです。
      ↑肌の構造
      エレキベア
      エレキベア
      うへ〜〜〜これは処理負荷がやばそう・・・
      マイケル
      マイケル
      実際には負荷を考慮して、追求するリアリティに応じて計算回数を制御したりしているみたいだね。
      スキンシェーダも下記のように層ごとに分けて考えることでリアリティが向上するようです。
      脂質層における反射 ・KS BRDF法 + フレネル反射 を使用して表現できる
      ・PhongシェーディングやBlingシェーディングよりも皮膚に適している
      皮下の光散乱 ・反射率拡散プロファイル(RDP: Reflectance Diffusion Profile)を使用して、複数層の光散乱を再現できる
      エレキベア
      エレキベア
      まあでもこれだけ聞くと何か作れそうな気もしてくるのが不思議クマ

      その他の技法

      マイケル
      マイケル
      その他、下記のような手法も肌表現に使用されているようです。
      半透明シャドウマップ(TSM: Translucent Shadow Maps) ・大局的な皮下散乱手法で、人体の厚み情報をレンダリングし、厚みに応じた「光のにじみ出し」を付加することで対処する
      Screen-Space Subsurface Scattering(SSSS) ・画面座標系の表面下散乱手法で、レンダリングされたフレームの人肌に対して、選択的にRDPに従ったブラーをかける
      Pre-integrated Skin Shading(PSS) ・曲率、光源の向き、面の向き、RDPの4要素で人体モデルの表皮の陰影を計算する
      エレキベア
      エレキベア
      略称がどれもややこしいクマ・・・

      HDR表現

      マイケル
      マイケル
      次はHDR表現
      よく聞くHDRレンダリングとは何かというと、「表示に用いるディスプレイ機器の輝度/色域の限界にとらわれず、幅広い輝度/色域でレンダリングを行う」ことを指します。
      最終的にはトーンマッピングという処理でディスプレイで表示できるよう調整するけど、輝度を上手く使用することで、露出やまぶしさといった表現が可能になるのです!
      ↑UnityでのHDRブルーム例
      エレキベア
      エレキベア
      かっけーークマ〜〜〜!!
      マイケル
      マイケル
      実際の表示までの流れは下記になります。
      また、擬似HDRレンダリングという負荷を軽減した簡易的な表現も用いられることがあるようです。

      ↑HDRレンダリングの流れ
      擬似HDRレンダリング ・FP16-64ビットの浮動小数点バッファではなく、int8-32ビットの整数バッファで擬似的なレンダリングを行うこと
      HDRブルーム/グレア処理 ・レンダリングしたフレーム中の高輝度部分を抽出し、ブルーム効果やグレア効果のエフェクト画像を生成する処理
      ・解像度が1/2、1/4、1/8…といった低解像度のフレームを生成し、ガウスフィルタをかけた後に合成する「川瀬式MGF」という手法がある
      HDRトーンマッピング ・HDRレンダリングによって生成されたフレームを、ディスプレイで表示するために調整すること
      ・平均輝度の変換は、非線形の方が現実的な視覚に近くリアリティが増す
      エレキベア
      エレキベア
      これはガンガン使っていきたいクマね

      大局照明

      マイケル
      マイケル
      次は大局照明(GI: Global Illumintion)
      こちらは「遮蔽や相互反射などを取り扱い、複雑な照明を再現する」手法のことで、簡単にいうと光の伝搬を考慮していい感じにライティングすることです!(間違っていたらすみません!)
      エレキベア
      エレキベア
      Global Illuminationというのは確かによく見かけるクマね
      マイケル
      マイケル
      これは静的な方法から画面座標形、事前計算有無による方法など様々なようです。
      ざっと並べます!!

      静的PRT

      Image Based Lighting(IBL) ・シーンを取り巻く情景をレンダリングしてキューブ環境マップにし、光源に見立ててライティングを行う
      ・遮蔽情報と法線ベクトル情報(余弦項)を掛け合わせた「IBL積分項」を事前計算で保持する

      事前計算を伴う大局照明技術

      GIテクスチャ ・大局照明効果を事前にオフラインで計算して、計算結果をテクスチャを書き出す手法
      ライトフィールド ・多方向からの環境光を自動的に空間内にグリッド状に配置する手法
      ・グリッド状でなく、適当な地点にポイント(ライトプローブ)を配置する手法もある

      画面座標系の大局照明技術

      Screen Space Ambient Occlusion (SSAO) ・着目しているある画素がどのくらい遮蔽されているかを探査することで、影のような効果を与える手法
      Screen Space Global Illuminatikon (SSGI) ・SSAOを発展させたもので、着目しているピクセルの周辺の色味までを陰影処理に反映していく手法
      Realtime Local Reflections (RLB) ・SSAOを発展させたもので、探索処理の対象をカラーバッファにも適用し、視線に対する反射ベクトルへも配慮する手法

      事前計算無しの大局照明技術

      Reflective Shadow Maps (RSM) ・光源がシーン内を直接照らした照明結果を、方向や位置情報付きで格納したもの
      Virtual Point Lights (VPL) ・間接光だったものを仮想的な直接光に置き換える概念
      ・実体としては存在しない間接光を仮想的な光源に置き換えるという発想の間接光をインスタントラジオシティと呼ぶ
      Light Propagation Volumes (LPV) ・3Dグリッドベースの概念を利用しながらも、事前計算なしでリアルタイムに大局照明の処理を実践できるようにしたもの
      ・ライトフィールドにVPLを組み合わせたような実現方式
      Sparse Voxel Octre + Voxel Cone Tracing (SVO) ・ボクセルで覆った後に八分木構造を生成し、親階層にライティング結果を渡していく手法
      ・コーントレーシングを用いて最低限のレイを飛ばすことでボクセル探査を行う
      エレキベア
      エレキベア
      わ、ワケが分からないクマ・・・
      マイケル
      マイケル
      これは少しずつ触る他ないね・・・

      トゥーンシェーディング

      シェーディングのテクニック

      マイケル
      マイケル
      最後はみんな大好きトゥーンシェーディング
      これも表現するために様々な工夫がされてきたようです。
      手描きらしさの演出テクニック ・「影となりやすい箇所」「ハイライトが出やすい箇所」に対して重みパラメータを与えることで、物理挙動を無視して見栄えを整える
      ・頂点単位に与えられた法線ベクトルをおおざっぱな陰影が出るように調整する
      塗りの演出テクニック ・絵画フィルタを使用することで筆のタッチを表現する
      ・「ハッチング」と呼ばれる手法を用いて鉛筆画風を表現する
      エレキベア
      エレキベア
      ハッチング面白そう・・・
      マイケル
      マイケル
      コミック風には挑戦してみたい・・・

      輪郭線の描画

      マイケル
      マイケル
      輪郭線の描画は背面法が簡単で使いやすそうですね!
      ただし背面法では表現できない輪郭線も存在するため、ポストエフェクトで求めたり、本村式ラインといった手法も使用されるようです!
      背面法 ・本体モデルを膨張させた被せモデルを反転させて裏面を描画し、その上に本体モデルを描画する
      ・膨張率は視点からの奥行と視界画角の値を元に調整する必要がある
      ポストエフェクト系画像処理での生成 ・「視線と法線の内積段差で求める手法」「輝度段差で求める手法」等がある
      本村式ライン ・輪郭線として与える実線を垂直線、水平線だけで構成したテクスチャを用意し、歪みや曲げを与える形でUVマップを設計することでジャギーの発生を軽減する手法
      ↑背面法のイメージ
      エレキベア
      エレキベア
      トゥーンシェーダ作りたくなってきた・・・

      おわりに

      マイケル
      マイケル
      というわけで今回は3Dグラフィックス技術についてでした!
      どうだったかな??
      エレキベア
      エレキベア
      情報量が多すぎクマ〜〜〜〜〜
      マイケル
      マイケル
      歴史を辿っていくからとんでもないね!
      こんなとんでもない情報が手に入る「ゲーム制作者になるための3Dグラフィックス」、是非買ってみてくださいね!!
      エレキベア
      エレキベア
      (宣伝クマ・・・・・・)

      【書籍紹介】「ゲーム制作者になるための3Dグラフィックス技術」に出てくる用語を簡潔にまとめる 〜完〜


      おすすめ技術書グラフィックス
      2022-12-15

      関連記事
      【プロシージャル】Pythonで学ぶ波動関数崩壊アルゴリズム(Wave Function Collapse)
      2025-06-22
      【UE5.5】Nanite、Lumen、VSMの概要についてまとめる
      2025-05-12
      【書籍紹介】「コンピュータグラフィックス」に出てくる用語をまとめる【CGエンジニア検定】
      2024-07-13
      【UE5】Niagara SimulationStageによるシミュレーション環境構築
      2024-05-30
      【Unity】Boidsアルゴリズムを用いて魚の群集シミュレーションを実装する
      2024-05-28
      【Unity】第二回 シェーダーライティング入門 〜テクスチャマップを使用したライティング〜(法線マップ、スペキュラマップ、AOマップ)【シェーダー】
      2023-03-14
      【Unity】第一回 シェーダーライティング入門 〜基本のライティング〜(Lambert、Phong、HalfLambert、Blinn-Phong、リムライト)【シェーダー】
      2023-02-28
      【Unity】URPでシェーダー実装した際に発生した不具合と対処方法まとめ
      2023-02-13