- 圖形顯示卡主要的作用之一是將2D的元件轉成3D的元件以便於顯示。這些元件以何種方式算圖,是由 shading model 所決定,通常包括元件的顏色、位置、燈光及其位置、貼圖座標、材質特徵(如光澤的多寡等)。軟硬體中,執行這些計算的程式,被稱為 shader,傳統的圖卡使用固定式的 shading pipeline 來將這些 shading model 套用到元件上,但近幾年則發展出可編程的 shading pipeline,使得自行定義的 shader 可以取代固定式的 pipeline。(p.365)
- 藉由將 jit.gl.gridshape 的屬性設為 lighting_enable 1,可達成最簡易的且考慮光的因素的 shading model 之套用,被稱為 flat shading 或 facet shading。
- 多數元件在真實世界中會隨著物件的表面漸變其光澤,Gouraud Shading (1971) 則是最早考量此種現象的 shader 之一,其依據 surface normal 與光的屬性,藉由計算 per vertex color 有效達成運算。其以顏色的線性漸變處理每個多邊形,而達成平順的 shading 效果(多邊形數量越多,外觀越平順),廣為 fixed shading pipeline 的圖卡所使用,在 jitter 中,則可藉由設定 jit.gl.gridshape 的屬性 smooth_shading 1 達成之。當 dim $1 $1 設定得越大時,表面越平順。(p.366)
- Phone shading (1975) 不僅可以柔化多邊形的每個頂點的顏色,也可以柔化該多邊形的surface normal (與表面垂直之向量)。其是依據平順的 normal 及燈光屬性來運算 per fragment color (per pixel color),被稱為 per pixel lighting。運算結果針對較少的多邊形時,效果仍佳,但運算卻較耗費 CPU。其不存在於 OpenGl 的 fixed pipeline 中,需藉由讀取自訂的 shader 至可邊程的 pipeline 中才可套用。可將 「shader [ shader 名稱]」之指令送往 jit.gl.gridshape,使 jit.gl.gridshape 得以指涉到相同命名的 jit.gl.shader。
- 1984年由Robert Cook 提出 shade tree 的概念,讓使用者可以透過 shading language,建立自己的 shading model,此種語法後為 Ken Perlin 所延伸,後來又成為 Pixar 的 RenderMan 的 shading language。晚近則有使用相似的原則、以 GPU 為核心的 Cg 及 GLSL shading language。(p.368)
- jit.gl.shader 可藉由 read 指令讀取 shader;藉由 getparamlist 或 dump params 讓所讀取的 shader 之相關參數由 jit.gl.shader 右下方輸出口輸出;getparamval [參數名稱] 則可使 jit.gl.shader 輸出目前參數的數值;getparamdefault [參數名稱] 則可使 jit.gl.shader 輸出該參數的預設值;getparamtype [參數名稱] 可使 jit.gl.shader 輸出該參數的型態。(p.369)
shader 可以用來決定元件的表面顏色,但也可以用來改變 vertex 的位置與屬性。實際上在此的範例中,每個程式都包含處理 vertex 的程式 (vertex program)、與運算 pixel 的程式(fragment program)。 vertex program 用來將3D元件作變形 (rotation、translation、scaling),也用來控制燈光、顏色、及其他屬性。當我們使用 jit.gl.handel 物件來旋轉 3D 元件時,便有某個 vertex program 正在被執行。邏輯上言之,vertex program 與 fragment program 各自使用獨立的、可編程的處理器,此種模型與使用 fixed function pipeline 時,分開處理兩者的模式相同。
這個部落格是用來記錄關於現代音樂(器樂、電子音樂等)、即時影像、互動影音的相關資訊,內容包含現代音樂作曲的相關資料,Max/MSP/Jitter 互動影音程式設計的相關資源介紹。另外也包含鄭建文的音樂作品影音資料等,歡迎藝術家們提出跨領域創作之合作計畫。
2010年3月15日 星期一
Jitter Tutorial 41 Shader 摘要
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言