科目別解説

基本情報の3DCGで学ぶ隠線消去と隠面消去

手前の球と奥の立方体を描いた3DCG

気になるところから読んで大丈夫。ひとつずつ、いっしょに理解していこうにゃ。

この記事の目次
  1. 基本情報の3DCGとレンダリングの流れ
  2. 隠面消去は見えない面を表示しない
  3. 隠線消去は見えない線を表示しない
  4. Zバッファ法は画面の奥行きを比べる
  5. 陰影付けやテクスチャとの違い
  6. 基本情報の過去問で見分ける練習

基本情報技術者試験の3DCGでは、隠線消去と隠面消去は「視点から見えない線や面を表示しない処理」です。手前の物体の陰にある部分や、奥側に向いた面を見えないものとして扱うと、立体の前後関係を表せます。

光の当たり方から色や明るさを決める処理や、表面に模様を貼る処理とは目的が異なります。まず視点と物体の位置を押さえ、何を判断する処理なのかを言葉で分けると、選択肢を見分けやすくなります。

この記事のポイント
  • 隠線・隠面消去は見えない部分を表示しない処理
  • レンダリングは3次元の情報から画像を作る過程
  • Zバッファ法は画面上の奥行きを比較する方法
  • 陰影付けやテクスチャマッピングとの違いを確認する

基本情報の3DCGとレンダリングの流れ

カメラから立体図形を見る3DCGのイメージ

3DCGは、仮想空間に立体やカメラ、光源などを設定し、その状態を画像として表現する技術です。作業の流れを大づかみにすると、立体の形を用意し、視点や位置を決め、画面に見える画像を作ります。形を作る段階と、画像を生成する段階は区別して考えましょう。

レンダリングは、形状、視点、材質、照明などの情報を使って画像を生成する過程です。試験では、その中で見えない部分をどう扱うか、光をどう表すか、表面の模様をどう付けるかといった個々の処理が問われます。処理の順序や実装は方式によって異なるため、すべてが必ず一列に並ぶと覚える必要はありません。

例えば、机の上に箱を置いて正面から見る場合、手前の面は見えますが、箱の裏側は箱自体に遮られます。別の球が箱の前にあれば、その球の陰になった部分も見えません。どの部分が画面に現れるかは、箱の形だけでなく、見る位置とほかの物体の位置によって変わります。

なお、完成した画像の画素数や色数からデータ量を求める話は別の論点です。計算を復習したいときは、ビットマップの画像データ量を参照してください。ここでは立体のどこが見えるかを中心に扱います。

図の上で考えるときは、カメラの位置を一つ決め、そこから伸ばした視線が最初にどの物体に当たるかを想像します。視点を反対側へ移すと、同じ箱でも見える面が変わります。こうした関係を踏まえると、単に立体の裏表を固定して暗記するより、選択肢の説明を具体的に確かめられます。

隠面消去は見えない面を表示しない

手前の青い球に隠れたオレンジ色の面

隠面消去は、視点からは見えない面や、他の物体に遮られる面の部分を、画像に表示しない処理です。箱の手前に不透明な球があるとき、球と重なる箱の部分は見えません。球より画面の奥にある箱の部分を表示しなければ、手前と奥の関係が分かります。

ここでいう「消去」は、3次元データそのものを削除する意味ではありません。現在の視点から画像を作る際に見えない部分を描かない、という説明です。カメラを動かせば、先ほど隠れていた面が見えることもあります。データを恒久的に消す処理と混同しないでください。

どの面が手前にあるかは、画面上の位置ごとに異なります。ある場所では球、別の場所では箱が見えるかもしれません。立体全体を一度に「前」「後ろ」と決めるだけでなく、重なっている部分を画面の位置に沿って考えると理解しやすくなります。

例題で「視点から見えない物体の面を取り除いて表示する」という説明があれば、隠面消去の候補です。一方、「面の明るさを計算する」という説明は見える・見えないの判定とは異なります。見分けるときは、まず文が「可視性」と「色・明るさ」のどちらを扱っているかに注目します。

隠線消去は見えない線を表示しない

球の陰に入る線が表示されない立体図のイメージ

隠線消去は、立体を線で表すとき、視点から見えない線の部分を表示しない処理です。箱の輪郭や辺を線で表した図を考えてみましょう。手前の物体や箱自身に遮られる辺まで実線で描くと、通常は見えない線が透けて見える図になります。

隠れた部分を表示しなければ、どの線が手前に見えるかを読み取りやすくなります。線全体が隠れる場合もあれば、一部分だけが別の物体の陰に入る場合もあります。後者では、見える部分は残し、遮られた部分だけを描かないと考えます。

隠線消去と隠面消去の共通点は、視点から見える部分を選ぶことです。名前の違いは、線の表示を扱うか、面の表示を扱うかに着目すると整理できます。どちらも光の色を決めることや、立体の形そのものを作ることが主目的ではありません。

なお、設計図などでは、見えない部分を破線で意図的に示す場合もあります。目的に応じて表し方が異なるので、「隠れている線は常に存在しない」と考えず、問題文がどの表示を求めているか確認しましょう。

Zバッファ法は画面の奥行きを比べる

手前の四角形が奥の四角形を一部隠す奥行きの図

Zバッファ法は、画面の位置ごとに奥行き情報を保持し、重なる面のうち手前に見えるものを決める方法の一つです。ある画素の位置に複数の面が映るとき、その位置で比較して、視点に近い面を採用します。何を「近い」とするかの数値の向きは実装により異なるため、符号の大小を無条件で覚える必要はありません。

たとえば同じ画面上の一点に箱と球の両方が重なり、球の表面のほうが視点に近ければ、その位置には球の色が表示されます。別の画素では箱だけが映るかもしれません。この比較を画面上の各位置で行うことで、複雑な重なりにも対応できます。

重要なのは「Zバッファに色だけを入れて光を計算する方法」ではなく、可視判定のために奥行きを比較する考え方だという点です。画像の色を保持する領域と、奥行きを記録する領域の役割を混同しないようにしましょう。

ここでは不透明な物体を基本に考えています。透明な物体や、同じような深さの面が重なる場合などには、方式に応じた追加の扱いが必要です。「どんな表示でも奥行き比較だけで完全に決まる」と一般化せず、試験問題に書かれた前提で判断してください。

同じ画素に描く候補が後から現れた場合は、保持していた奥行きと新しい候補の奥行きを比べます。新しい候補が手前ならその情報を反映し、奥なら手前の情報を保つ、というのが基本的な考え方です。画素ごとに比較するため、一つの物体の一部だけが別の物体に隠れる場合も考えられます。

陰影付けやテクスチャとの違い

照明の違いで明るさが変わる二つの青い球

陰影付けは、面の向きや光源などを考慮して、表面の色や明るさに変化を付ける処理です。同じ球でも、光が当たる側は明るく、反対側は暗く見えます。隠面消去が「その部分は見えるか」を扱うのに対し、陰影付けは「見える部分をどのような明るさなどで表すか」を扱います。

テクスチャマッピングは、画像などを立体の表面に対応付けて模様を表す方法です。たとえば箱の表面に木目を付ける場合を想像すると分かりやすいでしょう。木目の模様を付けること自体は、箱の背面がカメラから見えるかを判定する処理ではありません。

モデリングは、物体の形状などを作る段階です。球や箱の位置、形を用意することと、その形から視点に応じた画像を作ることを区別します。選択肢に形状の作成、見えない面の除外、明るさの計算、表面への模様の適用が並んだら、それぞれの目的を読み替えて比べましょう。

各処理は同じ画像生成の中で組み合わせられます。たとえば見える面を判断したうえで、その表面に模様や明るさを与えることがあります。互いに関係するからといって、同じ意味の言葉として扱わないことが大切です。

基本情報の過去問で見分ける練習

立方体と球と円すいを並べた学習用の図

問題文を読んだら、まず「視点から見えるか」「何色・どの明るさにするか」「模様を付けるか」「形を作るか」のどれを聞いているかを整理します。選択肢の専門用語を覚えるだけでなく、操作の前後で何が変わるのかを短い文に直すと、似た説明を区別しやすくなります。

例えば、手前の球に隠れた箱の面を描かない説明なら隠面消去です。球への光の当たり方を計算する説明なら陰影付け、箱の表面に画像を貼る説明ならテクスチャマッピングを考えます。箱の辺のうち隠れている部分を描かない場合は隠線消去です。

IPAが公開する基本情報技術者試験に係る修了認定試験の公開問題にも、3次元CGの隠線消去・隠面消去を問う問題があります。解くときは正解を覚えるだけでなく、ほかの選択肢が何の処理を表しているかも確認してください。公開問題の年代と現在の出題範囲は区別し、最新の案内も参照しましょう。

別の練習として、球だけがある図に箱を追加し、カメラを左右に移した場合を想像します。箱が球の手前に入る位置と、球の脇に見える位置では、隠れる範囲が異なります。どの視点を基準にしているかを最初に確認する習慣が、図の読み違いを防ぎます。

見えない部分を表示しない処理と、見える部分の見た目を作る処理を分けることが第一歩です。図を描ける場合は、視点、手前の物体、奥の物体を簡単に書き、どこが遮られるかを示すと判断しやすくなります。

読んだあとは、一問チャレンジ。

学んだことを思い出しながら、キホン猫と過去問を解いてみよう。

過去問を解いてみる →