奥行きソートとシェーディング
奥行きソート法
- 画家のアルゴリズム(ペインタアルゴリズム)
- 奥にある物体から順に描いていく手法
- 後ろの物体を先に描くことで、前の物体が「上書き」され、自然に隠面が消える
- 処理が簡単だが、物体の交差や入れ子構造に弱い
レイトレーシング法(Ray Tracing)
- Ray = 光線(放射線) ⇒ x-Ray(X線)
- 光の経路を逆にたどって、視点から物体への光線を追跡
- 実際の光の反射・屈折・影などをシミュレーションできる
- 現実に近い画像表現が可能で、隠面消去法の中で最も理論的
- 特徴:
- 影、映り込み、透明、屈折などが自然に表現可能
- 欠点:計算コストが高い
シェーディング
影の種類
- 陰影 (Shade):光の当たり方による明暗の表現
- 影 (Shadow):光が遮られてできる影(自己影や他の物体による影)
光源の種類
- 平行光源:無限遠から来る太陽光のような光源
- 点光源:ある一点から放射される光(例:電球)
- 線光源:線状に配置された光源(例:蛍光灯)
- 面光源:面を持つ光源(例:曇り空)
光の分類
- 直接光:光源から物体へ直接届く光
- 間接光:他の物体に反射してから届く光
シェーディングモデル
- シェーディングのための光の計算式
- 主に3要素で構成される:
| 項目 | 内容 |
|---|---|
| 環境光(Ambient) | 周囲からの間接的な光。全体を少し明るくする |
| 拡散反射光(Diffuse) | 光が表面に当たり、全方向に散乱する光 |
| 鏡面反射光(Specular) | 光沢やハイライトのような反射成分 |
合成光の式
- 全体の色(光の強さ)を以下のように計算する:
I(rgb) = Id(rgb) + Is(rgb) + Ia(rgb)
- I:最終的な光の強さ(色)
- Id:拡散反射光
- Is:鏡面反射光
- Ia:環境光
環境光の計算式
I(r,g,b) = Ka(r,g,b) * Ia(r,g,b)
- Ka:環境光反射率(マテリアルの特性)
- Ia:環境光の強さ
拡散反射の計算
Id = kd * I * cos(α)
- kd:拡散反射係数
- α:光の入射角と法線との角度
鏡面反射(フォンモデル)
Is = W(α) * I * cos^n(γ)
- γ:視線ベクトルと反射ベクトルのなす角
- n:光沢の強さ(指数項)
シェーディングモデルの改良系
- ブリン(Blinn)モデル:微小面の集まりでよりリアルな反射を計算
- クック・トランスモデル:
- 金属表現に強い
- 波長や入射角による反射率の変化も考慮
- BRDF(双方向反射分布関数):
- 一般化された反射モデル
- 入射方向と出射方向の関係から反射率を定義
レイトレーシングの利点と限界
- 表現が自然:
- 映り込み(反射)、透明(透過)、屈折などが可能
- Zバッファなどのラスタライズ法では、これらは工夫しないと表現できない
屈折
- スネルの法則で屈折角を計算
- 光が媒質を通るときに屈折する現象をシミュレートできる
シェーディングの手法(塗り方)
- 理論上は「面単位」で色をつけるが、実際は「頂点単位」で計算して補間する
| 方法 | 特徴 |
|---|---|
| [0] コンスタントシェーディング | 面ごとに一定の色で塗る。簡単だが不自然に見える |
| [1] グロー(グーロー)シェーディング | 頂点で計算した色を、面内で線形補間する。滑らかだがハイライトが不自然 |
| [2] フォン(Phong)シェーディング | 面内で法線を補間し、ピクセル単位で反射計算を行う。より自然で滑らか |
ノンフォトリアリスティック表現とプロシージャル技術まとめ
ノンフォトリアリスティック表現(NPR)
* ハッチング(Hatching)
- 線やドットで陰影を表現する手法。
- 遠くから見るとグレースケールや階調に見える。
- 写実的ではなく、イラストや絵画のような表現に向いている。
* デジタルハーフトーニング(Digital Halftoning)
- 少ない色数(2値など)でも、パターンで密度を変えることで疑似的に中間色を表現。
- プリンタやディスプレイの色再現に使用される。
* 疑似カラー(Pseudo Color)
- グレースケール画像に、色を割り当てて情報を視覚的に分かりやすくする。
- 熱分布や標高マップなど、科学可視化の分野で多用。
—
プロシージャル技術(手続き型生成)
Proceduralとは?
* 「決まった手順に従って処理する」意味。 * 主に以下のような手順:
1. データを取得する 2. データから特性(範囲など)を分析する 3. 特性に応じて色や形などを生成する 4. それを毎フレーム、またはリアルタイムで行う
\
プロシージャルの応用例
* プロシージャル生成(Procedural Generation):
- 地形・街並み・雲・木などを自動的に作成。
* プロシージャルテクスチャ:
- 数式やアルゴリズムで模様を生成。
- 無限に拡大しても解像度を維持できる。
* プロシージャルモデリング:
- 手作業でなく、アルゴリズムにより形状を作成。
- パラメトリック建築や自然物生成に有効。
* プロシージャルアニメーション:
- スクリプトや数式で動きを定義。
- 群衆・波・風になびく木など、リアルな動きを生成。
\
自然現象のシミュレーション
* 対象:炎、煙、水、霧、爆発、雲など * 手法:
- パーティクルシステム(粒子法)
- 流体力学:ナビエ・ストークス方程式(有限要素法など)
* AIとの連携:
- 動物の挙動・群衆の動きをAIで自動生成
L-System
* 植物の成長過程を再帰的に記述できる形式言語。 * フラクタル的な形状の生成に適している。
—
\
キャラクターアニメーション技術
\
FFD(自由形状変形)
* Free-Form Deformation:モデル全体を囲む空間を変形させ、形状を間接的に変形。 * 曲げる、ねじるなど複雑な変形を簡単に制御可能。
スケルトンアニメーション
* 骨(スケルトン):関節を持つ階層構造 * スキン:骨に影響を受ける外形(メッシュ)
キネマティクス
* FK(フォワードキネマティクス):根本から順に動かして最終位置を決定 * IK(インバースキネマティクス):手先の位置から関節の角度を逆算
リギング(Rigging)
* モデルに骨(ボーン)を仕込み、アニメーション制御しやすくする設定作業 * ウェイト調整・IK設定・ボーン構造の設計などを含む * 担当者を リガー(Rigger) と呼ぶ
パスアニメーション
* 移動軌跡(パス)を与え、スプライン補間で滑らかな動きを作る
モーションキャプチャ
* 光学式:マーカーをカメラで追跡 * 機械式:加速度センサーなどを使って動きを記録
モーションブレンド
* 2つのモーションの間を補間して、滑らかな遷移を作る * 例:歩く→走る、ジャンプ→着地
—
特殊なアニメーション技術
表情アニメーション
* ばねモデルなどで筋肉の動きを再現 * リップシンク:音声と口の形を同期(AIで自動生成も可能)
布のアニメーション
* クロスシミュレーション:布の挙動をばねと質点でモデル化
髪の毛(ファー)
* 多数の細いパーティクル * 個別の髪+全体の動き(流体的)をシミュレーション
群衆(フロック)
* 群れのような集団の動きをアルゴリズムで制御
物理ベースアニメーション
* 剛体:変形しない物体(ボールなど) * 弾性体:伸び縮みする物体(ロープ、へびなど) * 数値計算(例:オイラー法)で物理運動を再現
衝突判定(Collision Detection)
* 物体同士が接触したかを調べる処理 * バウンディングボックス(Bounding Box):
- AABB:軸平行の箱
- OBB:軸に沿わない箱
—
合成・実写技術とCG
実写とCGの合成
* ダブルバッファリング:フレームバッファを2枚使って滑らかに表示
VR・ARでの合成
* 実世界の映像とCGをリアルタイム合成 * プログラマブルシェーダ:GPUのシェーディングをカスタマイズ可能
ゲーム物理
* ゲーム内の世界に物理ルールを導入 * 衝突、摩擦、重力などを物理エンジンで再現