« 3次元から2次元への計算 | トップページ | 八王子市内の飲食店を元気にするプロジェクト演習『企業・団体のプロモーション技法』の活動事例 »

視点のすぐ近くは見えない

2023年11月22日 (水) 投稿者: メディア技術コース

 前回記事は講義「CG数理の基礎」での投影変換の授業紹介でした。まだ読んでいない人は参照してください。
 
 履修生からの以下の質問への回答を今日の記事で紹介します。
 
---
後方クリッピング面があるのは無限に続くのを防ぐ目的であると理解できるのですが、前方クリッピング面はなぜあるのでしょうか? カメラの座標を原点とした四角錐型では不都合があるのでしょうか?
---
 
 投影変換の設定として3次元空間(カメラ座標系)に六面体(四錐台)の視界を設けます。6つの「クリッピング面」で最終表示対象の範囲になるように切り取ることになります。視点から視線方向を向いて上下左右を4つの面で切り取るのは直感的にわかります。
 
 なのに、なぜ目の前の前方クリッピング面と視点から遠くの後方クリッピング面で前後を切り取るのか、確かに理解しがたいですね。特に目の前の場所を前方クリッピング面で範囲外に設定する理由が。
 
 簡単に答えを言うと「0で割り算できないから」です。ここで、前回記事の図を再度掲載します。
 
 Projectionxform
 
 視点から前方クリッピング面までの距離は変数nで示されています。前方クリッピング面の4頂点は変数l, r, t, b, nを使って表されます。冒頭の質問にあるように四角錐の視界を使うということは前方クリッピング面が無限に小さくなり視点(原点)に収斂(しゅうれん)することになります。つまり、l, r, t, b, nは全部0になり、4頂点とも(0,0,0)になります。
 
 この場合、後方クリッピング面の4頂点のxy座標は計算できません。いずれも0分の0になってしまいます。投影変換(透視投影)行列の要素も、16要素のうち4つについて0分の0が生じて設定不能です。
 
 数式の計算ができないから、という理由では納得しづらいでしょう。もう少し直感的な理由として幾何学的な説明をしてみましょう。それは「無限に大きくするという計算はできないから」ということになります。
 
 近くの物は大きく見え、遠くの物は小さく見えるように変換するのが透視投影です。前方クリッピング面を視点に収斂させて四角錐の視界にしてしまうと、限りなく視点に近い物を無限に大きくすることになります。これは不可能だから、ほんの少しでよいので視点から離れた位置に前方クリッピング面を設定するのです。必然的に四角錐ではなく四錐台の視界になります。
 
 実務的には、前方クリッピング面までの距離nと後方クリッピング面までの距離fとの比(f/n)が1万程度を超えない設定ならばその後のCGの計算処理には支障ないです。n=10cmとすればf=1000mと設定できます。これなら大抵のCGの場面で切り取っても大丈夫そうですね。
 
 宇宙空間のように遠い場所は一度に扱えないし、f/nの値が百万とかの設定もNGなのはなぜ、という疑問も生じますが、その話題は別の機会にしましょう。
 
 現実世界でも視点に限りなく近い場所の物を見るということはないですから、四角錐の視界を設定できなくても、四錐台の視界で十分と言えるでしょう。
 
メディア学部 柿本正憲

在学生向け」カテゴリの記事

授業紹介」カテゴリの記事

高校生向け」カテゴリの記事

おもしろメディア学」カテゴリの記事

« 3次元から2次元への計算 | トップページ | 八王子市内の飲食店を元気にするプロジェクト演習『企業・団体のプロモーション技法』の活動事例 »