五、圖形 (Graphics)
 
      1. 圖形檔的格式
      2. 在 3D 繪圖中, 一般都是以階層式資料結構 (hierarchical structure) 來儲存及處理資料, 而針對環境中不同的物件, 又可分為光源 (light source) 及一般物件 (objects):

         

        1. 光源: 光源是 3D 繪圖中極為重要的一環, 如果沒有光源, 就算是物件再漂亮, 擺設再完美, 也只是一間沒有燈的客廳, 什麼都看不到. 而光源具有以下的屬性:
        2. 顏色: 平常的光源是白色的, 但在特殊的環境下, 仍然會有不同的光線. 一般光線的顏色及強度是以 RGB (紅綠藍) 三原色來表示的.

          光的種類: 一般光可分為四種: 環境光 (ambient light), 點光源 (point source), 有向光 (directional light) 及聚光燈 (spotlight).

          環境光: 最簡單的一種光源, 沒有位置, 對環境中的每個物體的各個方向都具有相同的強度.

          點光源: 點光源是射向四面八方的, 它具有位置 (position), 但並不具有方向的屬性 (orientation).

          有向光: 這種光有方向, 但沒有位置, 最好的例子是太陽光. 這種光是平行穿過三度空間, 通常是用來模擬無限遠的光源.

          聚光燈: 有方向有位置, 並以圓錐形擴散. 這個圓錐的形狀是由 umbra (陰影) 及 penumbra (半影) 的角度來決定. 舉例來說, 檯燈便是一種聚光燈.

           

        3. 物件: 物件也有各種不同的屬性:
         
          面 (face): 物件是由一堆相連接的面所組成, 通常是以三角片或四邊形來建構一個物件.

          點 (vertices): 端點和點一樣由三個值 (x, y, z) 所組成, 是用以表現位置及面的端點.

          方向向量 (vector): 有時物件是以自己為座標軸, 但在環境中則會因擺設的方式不同, 而以不同的方向向量來表示.

          比例 (scale): 和方向向量相同, 環境中的物件常會與建構時的大小不同, 而會對每個方向 (x, y, z) 分別縮放其尺寸.

          材質 (texture): 每一面都可能會有其表面的材質紋路, 如木質桌面或大理石地板等, 通常是以 2d 靜態圖形 (image) 來表示.

         
      3. 圖學上的標準
      4. 由於 3D 圖形顯示被應用在各種不同的領域中, 目前可見的 3D 圖形標準也非常多, 以下針對幾個常見的檔案格式加以介紹

         

        1. AutoCAD .DXF: AutoCAD 算是較早出現的一套 3D 檔案格式, 這套系統的主要目的是在於建構建築圖形.
        2. 3D Studio .3DS: 和 AutoCAD 同為 AutoDesk 公司所出品, 3DS 檔案格式除了 .DXF 所具有的大部份屬性外, 還包涵了攝影機移動的資訊
        3. Wavefront .OBJ: Wavefront 是在工作站上非常有名的一家 3D 繪圖系統的發展公司, 它的 OBJ 檔提供了完整的物件描述功能 (text format). 但其中材質, 攝影機, 場景擺設等資訊則存在其他相關的檔案中.
        4. VRML .WRL: VRML (Virtual Reality Modeling Language) 是網路上虛擬實境的標準, .WRL 檔也是近兩年才提出的新規格.
       
    1. 圖形的處理
    2.  

      1. 圖形的編輯方式
      2.  

      3. Transformation
      4. 為了要將 3D 的東西顯現在螢幕上, 我們必需將 3D 的資料投影在 2D 平面 (螢幕) 上. 因此我們必須知道觀察者 (或攝影機) 在哪兒, 以及觀察者的可見範圍. 如此我們可以定義出一個長方體 (平行投影) 或金字塔 (透視投影) (View Frustum). 觀察者位在長方體的一個側面或是金字塔的頂端. 一般為了表現出真實的環境顯像結果, 通常大多使用透視投影.

         

      5. Rendering
      6. 當 3D 的資料轉換為 2D 之後, 我們還必需加以著色, 如果不加以上色, 所有的表面都會是黑色的. 著色的步驟稱為 Shading (著色) 或 Rendering (成像). 一般著色的方法有以下幾種:

        1. wire frame (框線):框線的著色方式只會繪出所有的邊, 這個方法並無法看出物體的實際形狀.
        2. Unlit shading (不打光著色):顧名思義, 這個方法並不計算光源對物體的效應, 而是直接將整個物件著上相同的顏色. 這個方法和 wire frame 一樣, 完全看不出物體的實際形狀, 甚至連輪廓線也無法看出.
        3. flat shading (平面著色):平面著色法產生的影像比 wire frame 及 unlit 兩種方法所產生的影像更為真實, 這種方法是對物件的每一面分別計算光源對它的影響 (亮度), 所以計算的時間較前兩個方法更長. 不過每個面可以分辨的出來.
        4. Gouraud shading:Gouraud 著色法是以發明人來命名, 這個方法和平面著色法相差並不多, 不同的地方在於 Gouraud 著色法是計算表面上每個端點的方向向量來計算該點的亮度, 再利用內插法 (interpolation) 計算出面上每個點 (pixel) 的亮度. 利用這個方法, 可讓面與面之間的接合處並不那麼明顯. 但這個方法也會使物體看起來較為模糊, 同時需時更長的計算時間.
        5. Phong shading:Phong 著色法和 Gouraud 著色法一樣是以發明人來命名的, 這個方法是將 Gouraud 著色法再加以改進, 它不但利用端點方向向量來計算亮度, 更利用內插法計算出表面上每個 pixel 的方向向量, 分別計算各點的亮度. 這個方法遠較 Gouraud 著色法更花時間, 但影像也遠較 Gouraud 著色法真實.
        6. 以上幾種方法中, 除了 Phong 著色法外, 在一般的 3D 顯示加速卡中都已在硬體中提供了這些功能.
           

        7. ray tracing (光線追縱成像法):
        8. 以下介紹的這兩種著色法, 一般稱之為全域照明 (global illumination), global illumination 和一般的著色法最大的不同點在於, shading 只考慮物件和光源之間的關係, 但是這些方法對於非光源物體間彼此的相互影響﹐只以一項固定的漫射光取代﹐以致於一些特殊的效果﹐如陰影及透明等﹐均不易表現出來。

          80 年代初期﹐美國的學者提出了光線追蹤成像法以解決上述的問題﹐且成功地製作了一些高品質的合成影像。基本上這個方法是根據人類瞳孔成像的原理﹐與物體表面的聚射光 (specular)﹐藉多重反射的效果﹐達到成像的目的。其方法是由觀察者的眼睛﹐朝螢幕上每一圖素 (pixel) 射出一條主線 (primary ray) 然後沿著主線方向追蹤﹐設法計算光線在物體上的落點﹐並求出光源對物體亮度的貢獻。若直線碰到物體而產生反射線或折射線 (均稱為副線 secondary ray) 時﹐則再沿著反射線或折射線的方向繼續追蹤。各受光點的亮度﹐將由主線的亮度與各副線的亮度累加而成。雖然此種方法可以得到高品質的影像﹐但是特別在複雜的環境中﹐單是求光線在物體上的落點﹐便是一個十分龐大的計算量﹐這使得光線追蹤法常需要耗費數小時﹐甚至數天的時間來計算所要的影像。
           

        9. radiosity (熱幅射成像法)
         
          雖然光線追蹤成像法就點光源而言﹐可製作出相當逼真的影像﹐但此方法缺乏考慮物體間散射光的效應﹐且限制光源為點光源﹐所以產生的影像會有明顯尖銳的明暗分野﹐在視覺上顯得不夠自然。基於此種考量﹐引進了熱學中的輻射原理﹐利用封閉空間中能量守恆的特性﹐提出一套廣義的照明模式﹐稱之為輻射量計算成像法﹐藉以更精確地模擬物體間散射光交互影響的行為。

          由於輻射量計算成像法在模擬物體表面對光的散射情形時﹐其建構與視角無關﹐它最常被應用在虛擬實境中空間巡訪之製作﹐因此是目前最受歡迎的成像模式之一。

         
      7. 補充教材: 其他有關圖學之補充說明