奥行きソートとシェーディング

奥行きソート法

  • 画家のアルゴリズム(ペインタアルゴリズム)
    • 奥にある物体から順に描いていく手法
    • 後ろの物体を先に描くことで、前の物体が「上書き」され、自然に隠面が消える
    • 処理が簡単だが、物体の交差や入れ子構造に弱い

レイトレーシング法(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のシェーディングをカスタマイズ可能

ゲーム物理

* ゲーム内の世界に物理ルールを導入 * 衝突、摩擦、重力などを物理エンジンで再現

  • game-engineer/classes/2023/computer-graphics/first-term/6/06-20-12.txt
  • 最終更新: 7カ月前
  • by root