プログラミング演習3 李 亜民クラス 第4回 シェーディング
今回の内容 概念説明 シェーディング 反射モデル 補間手法 作業 Vertexクラス、Pixelクラス変更 課題について
概念説明 シェーディング 反射モデル 補間手法
3Dグラフィックスパイプライン 3Dモデル構築 :第3回 モデル変換 :第1回 バーテックス処理 :第4回 ビューポート変換 :第1回 モデル変換 :第1回 バーテックス処理 :第4回 ビューポート変換 :第1回 バックフェースカリング :第3回 ラスタライズ :第2回 ピクセルシェーディング :第4回 Zバッファ の適用 :第3回
シェーディングとは? ポリゴンに陰をつける 光源の位置とポリゴンの向きから、その部分の輝度を決める 1ピクセルずつの計算が必要 参考:Shadow(影)とShade(陰) 地面に落ちるのは影、光の当たっていない部分が暗くなるのは陰
反射モデル 輝度の計算モデル この講義では、Phongの反射モデルを実装する。 Lambert反射モデル Phong反射モデル 拡散反射 Phong反射モデル Lambert反射+ハイライト+環境光 その他にも用途別に様々なモデルが存在 この講義では、Phongの反射モデルを実装する。
Phongの反射モデル 𝑰 𝑝 = 𝑘 𝑎 𝒊 𝑎 + lights 𝒊 max 𝑳∙𝑵,0 𝑘 𝑑 𝒄+ max 𝑹∙𝑬,0 𝛼 𝑘 𝑠 光源色、複数光源、環境光などを考慮した式 複雑な上、パラメータが多すぎるので一部省略した式(次ペー ジ)を用いることにする 省略内容 環境光を考慮しない 光源を単一に 光源輝度𝒊を(1,1,1)に固定
Phongの反射モデル(一部省略) 𝑰 𝑝 = max 𝑳∙𝑵,0 𝑘 𝑑 𝒄+ max 𝑹∙𝑬,0 𝛼 𝑘 𝑠 𝑰 𝑝 : 輝度(r,g,b) 𝑵 : 法線ベクトル 𝑳 : 光源ベクトル 𝑬 : 視点ベクトル 𝑹 : 反射ベクトル 材質設定 𝑘 𝑑 : 拡散反射(Diffuse)係数 𝑘 𝑠 : 鏡面反射(Specular)係数 𝛼: 滑らかさ 𝒄 :表面色(r,g,b) 𝑵,𝑳,𝑬,𝑹は全て正規化済み(ノルム1)である必要がある。 r,g,bそれぞれの要素について別々に計算する。
Phongの反射モデル:ベクトルの扱い 使用するベクトルの定義されている座標系を統一する light, eyeの位置をワールド座標で定義 このN, light, eyeを元に、L, Eを計算(ワールド座標) 位置情報にはスクリーン変換を施すが、これらのベクトルには不要 Phong補間(後述)の場合、N, L, Eをラスタライズ時に補間 Rを計算し、シェーディング このとき、位置情報はスクリーン座標系で、N,L,E,Rはワールド座標 系で定義されていることになる 位置情報はシェーディングに用いないので問題ない
Phongの反射モデル:材質設定 α : 大きいほど表面が滑らか(ハイライトが小さくなる) 共通パラメータ α=5 α=20 α=50 α=5 α=20 α=50 共通パラメータ 半径100, 中心(0,0,0) light:(500,500,500) eye:(0,0,500) ks:0.3 kd:0.6 ka:0.1 c:(0,1,1) ia:(1,1,1) i:(1,1,1)
補間手法 Flat Gouroad(グーロー) Phong(フォン補間) ポリゴン毎に色を決め、ポリゴン全体を単色で塗る 頂点ごとに色を決め、色を補間 Phong(フォン補間) 法線を補間し、ピクセルごとに色を決める
バーテックス/ピクセルへの処理内容 補間手法によって処理を切り替える ラスタライザで補間するパラメータは、反射モデルに依存する。 補間手法 Phong補間ならばN, L, E 補間手法 バーテックス ラスタライズ ピクセル Flat 面法線で シェーディング 座標+色補間 補間色を そのまま使用 Gouraud 頂点法線で Phong 法線等を計算 座標+法線等 補間 補間された法線で
Phongシェーディング Phong補間+Phong反射モデル どちらもPhongが考案したもの
N, L, Eベクトルを計算、Vertexに格納 Phongシェーディングの流れ 頂点・ポリゴンデータを用意(初回のみ) モデル変換 N, L, Eベクトルを計算、Vertexに格納 スクリーン変換 バックフェースカリング ラスタライズ(座標,N,L,E補間) ピクセル毎のシェーディング Zバッファ適用
作業 Pixel, Vertex修正
Pixel, Vertexを一部変更 メンバ変数追加 コンストラクタ メソッド Vector N, L, E :法線、光源、視点ベクトル 任意に追加 メソッド Pixel lerp(…) :N,L,Eの補間を追加
法線の扱いに注意 立方体など、同じ頂点であっても面によって法線方向が 異なる場合がある 面ごとに別々のVertexを定義するなどして対処
第4回課題 1. Phongシェーディングを実現して下さい。 2. [発展] テクスチャマッピングを実現して下さい。 クラス名:lec04( Canvasを継承) 描画するモデルは、結果が解りやすいものを各自で選択 2. [発展] テクスチャマッピングを実現して下さい。 Vertex等にテクスチャ座標(U,V)を持たせる シェーディングで色を取得する際に、テクスチャから色を取得 法線同様、面によってUVを分ける必要がある 3. [発展] 透視射影(遠近)を実現して下さい。 各自、本やWeb等を参考に挑戦してみてください。 テクスチャマッピングと同時に行う場合は、パースペクティブコ レクトという操作が必要。
課題の実行イメージ テクスチャマッピング+パースペクティブ 課題1の実行例についてはP.9等を参照のこと。