- OpenGL 的燈光模式有下列幾種:(1) specular light: 由單一方向而來的光,閃耀的物體或鏡面反射出的光束以 specular light 類為主。(2) diffuse light: 由單一向向而來的光,但卻由一表面平均的反射至各方位。若該表面直接面對光源,則反射出的光最為明亮,反之,則反射光較暗。(3) ambient light: 無方向性的光,各方向皆等亮,主要因為光源在到眼睛之前已經經過多重的反射。(4) emissive light: 只有在眼睛正視光源時,才看得到的光,主要用於3D 物件本身即是發光體時。(p.307-308)
- Jitter 中的燈光預設值是關閉的,smooth shading 也是預設為關閉狀態,因此需下 lighting_enable 1, smooth_shading 1 的指令至 jit.gl.gridshape 才可看到光的作用。預設值的 auto_material 是開啟的,此狀態下,diffiuse light 及 ambient light 的作用會反應在物體上,但 specular light 與 emissive light 則否。欲看到 specular light 與 emissive light 的作用,需先關閉 auto_mateiral 屬性。當我們希望所有的燈光成分皆明顯地按照既有規定呈現,則必需先將 auto_material 屬性關閉。(p.309)
- jit.gl.handle 連接 jit.gl.gridshape 可以使所製造的3D物件,利用 control + 滑鼠拖曳,可改變3D 物體在 x y 平面的位置;若利用 alt + 滑鼠拖曳,則可改變其在 z 軸的位置。(註解:當 jit.gl.handle 連接至 jit.gl.gridshape 時,若滑鼠移動 jit.gl.gridshape 所產生的 3D 物件時,jit.gl.handle 會釋出 position $1 $2 $3 或 rotation $1 $2 $3 參數,若將此參數以 route、 unpack 解開之後,加上 light type 的參數作為第四個變數,亦即以 light_position $1 $2 $3 $4 的指令格式連接至 jit.gl.render 則可以讓滑鼠的動作影響畫面上的白色小圓點作為代表的光源的位置。範例中的 jit.gl.handle 未連接至帶有 shape 屬性的 jit.gl.gridshape,故滑鼠控制僅是光源的位置,而非所繪的3D物件。)
- openGL 物件的 shineness 屬性是用來明訂光從物體表面反射出去時的發散程度之多寡。例如要模擬鏡面,則必須使用較高的 shineness 參數。參數值調整於 2 至 50 之間較能反應真實物體的反光效果。(p.313)
- jit.gl.render 的 light_global_ambient 屬性用來控制整體的 ambient light,該數值會與整個場景的所有的 ambient light 組成份子相乘,加到每個物體的 vetex 上。
- 在3D場景中的可移動的光,可分為 diretional(方向性)或 positional (位置性),由 light_position $1 $2 $3 $4 的第四個參數來設定,$4 等於 0 時,光是有方向性的,意指由第一、二、三參數用來明訂一個向量,作為光的來源。$4 等於非零的數時,光是 positional 的,亦即依照物體在場景中的特定位置而決定照明的方式。(p.315)
- OpenGl 的 fog 運作,會在完成光的計算後,混和 fog 的顏色與每個 vertex 的顏色,其數值隨著物體與攝影機之間的距離增加而增加,遠方的物體會消失在 fog 中。其設定可使用 fog_params 屬性設定,由左而右為 R G B A Density, start distance, end distance,連接至產生3D物體的繪圖物件 (如 jit.gl.gridshape)。(p.316)
這個部落格是用來記錄關於現代音樂(器樂、電子音樂等)、即時影像、互動影音的相關資訊,內容包含現代音樂作曲的相關資料,Max/MSP/Jitter 互動影音程式設計的相關資源介紹。另外也包含鄭建文的音樂作品影音資料等,歡迎藝術家們提出跨領域創作之合作計畫。
2010年2月18日 星期四
Jitter Tutorial 35 Lighting and Fog 摘要
2010年2月15日 星期一
Jitter Tutorial 34 Using Texture 摘要
- 在 Jitter 中,貼圖本身有名稱,且隸屬於 jit.gl.render ,但其他使用相同繪圖目標之3D 繪圖物件也可以使用這些被命名的貼圖。考量運算的效率,貼圖來源的維度必須是由 2 的次方所構成(如 16, 32, 64 等)。貼圖最小的維度為 1 x 1,最大維度為 1024 x 1024。貼圖也可調整 ARGB 數值,若要使 alpha 數值產生作用,則 jit.render 的 blending 的功能必須被開啟。(在 jit.render 上下 blend_enable 1 指令)。(p.299-230)
- jit.gl.plato 可用來製造柏拉圖多面體(柏拉圖多面體每面均由全等的正多邊形所組成,且要求每個頂點的組態一致;為"凸"的正多面體,共有正四面體( Tetrahedrron ) , 正六面體( Hexahedrron 或 Cube ) , 正八面體 ( Octahedrron ), 正12 面體 ( Dodecahedrron ), 正 20 面體(Icosahedrron )等五個。配合使用 texture [圖形或影片名稱] 指令,可用來將 jit.plato 所製造的 3D 物件加上隸屬於 jit.gl.render 的貼圖。(p.230)
- 連接 jit.gl.render 的 "texture [貼圖名稱] " 指令與連接 jit.gl.plato 的 "texture [貼圖名稱] " 指令意義不同,前者則是為 jit.gl.render 製造一個貼圖,後者是用來套用貼圖到柏拉圖多面體上。此外,連向 jit.gl.render 的 usetexture 指令,則是用來產生 raw geometry data 以 jitter matrix 的方式傳送 (參考 tutorial 37)。(p.301)
- 當套用貼圖到 3D 幾何圖形上時, OpenGL 也會同時考量顏色與燈光,原本的顏色與燈光數值,會與貼圖本身的數值相乘。若原本的顏色為白色,燈光也被關閉的情況下,被套用的貼圖則不會改變顏色。(p.302)
- 要在 3D 幾何圖形上加上影片或圖檔作為貼圖,可使用 jit.qt.movie 讀取貼圖,並且將所產生的陣列在前端加上 texture [貼圖名稱] 指令 (使用 prepend 物件),送往 jit.gl.render;若貼圖只是圖檔而非影片,則不需用 metro 重複送 bang,只需使用 "read [圖檔名稱], bang" 指令於 jit.qt.movie 上。此外,貼圖維度設定的指令 texture [貼圖名稱] [貼圖維度],也需送往 jit.gl.render。(事實上,完整的指令格式為 "texture [貼圖名稱] jit_matrix [陣列名稱]")。若 jit.qt.movie 所送的貼圖之名稱已先被使用,則 jit.gl.render 會以之前的貼圖維度,針對 jit.qt.movie 所傳來的新貼圖重新取樣。若貼圖名稱尚未被使用過,則 jit.gl.render 會製造出新的貼圖,使用比 jit.qt.movie 所傳來貼圖大一些、或相等維度大小之最接近的二的整數次方維度作為 jit.gl.render 的貼圖維度。(p.302-303)
- jit.gl.render 預設值中,interpolation 是被開啟的,用來柔化貼圖,可用 interp 0 關閉柔化功能,但只針對目前正在使用中的貼圖有效。若要指定要關閉哪一個貼圖的柔化效果,則可使用 "usetexture [貼圖名稱], interp 0" 為之。
- jit.gl.redner 所使用的貼圖之維度可以 "texture [貼圖名稱] [貼圖維度]" 修改之。若欲清除記憶體中的貼圖,則可用 "deletetexture [貼圖名稱]" 為之。(p.304)
- tex_map $1 指令用來選擇是否使用 explicit texutre mapping mode (0) 或 三種 (1-3) implicit texture mapping mode (object liner, eye linear, sphere map)。其中 mode 1 與 3 會受到 " tex_plane_t $1, $2, $3, $4" 與 "tex_plane_s $1, $2, $3, $4" 的餐數值影響。(細節與定義請參照 p.304)
2010年2月14日 星期日
影像延遲特效的目錄
下面這個作品,集結了各種影像延遲特效,雖然是在 openframeworks 中完成,但是實際上在 Max/MSP/Jitter 中也可以做得出來。在這個影片的內容中,也分別陳述每種延遲特效的變形與原理,可以提供對於互動表演藝術有興趣的人做參考:
1. 簡易延遲
2. 較長的延遲
3. 亂數擷取 buffer 中存在的畫格
4. 即時錄影並循環播放錄製的片段(loop)
5. 改變 loop 的播放速度
6. 利用正向、逆向播放即時錄製的影片
7. 三重影像重疊
8. 多重影像重疊
其中第七、八類,不知是把延遲影片都相乘在一起,或只是一般的 feedback delay ?有趣的是這些技巧跟即時聲音特效常用的技巧都很相似,例如第三項如同聲音處理技巧中的「粒子化合成」。除了延遲特效之外,影片說明中也提到作者利用顏色偵測原理來製作控制器。
1. 簡易延遲
2. 較長的延遲
3. 亂數擷取 buffer 中存在的畫格
4. 即時錄影並循環播放錄製的片段(loop)
5. 改變 loop 的播放速度
6. 利用正向、逆向播放即時錄製的影片
7. 三重影像重疊
8. 多重影像重疊
其中第七、八類,不知是把延遲影片都相乘在一起,或只是一般的 feedback delay ?有趣的是這些技巧跟即時聲音特效常用的技巧都很相似,例如第三項如同聲音處理技巧中的「粒子化合成」。除了延遲特效之外,影片說明中也提到作者利用顏色偵測原理來製作控制器。
2010年2月13日 星期六
Jitter Tutorial 33 Polygon Modes, Colors, and Blending 摘要
- jit.gl.handel 連接至 jit.gl.gridshape 用來使滑鼠可以控制 3D 物件,配合 auto_rotate 屬性,可以讓 3D 物件根據所設定的軸心做旋轉。(p.289)
- OpenGL 可以自動隱藏 3D 圖形的正面或背面,以增加算圖速度。屬性 cull_face 0 可顯示3D物件正面及背面的網格,cull_face 1 僅顯示正面網格,cull_face 2 僅顯示背面網格。數數屬性 poly_mode $1 $2 的第一個變數決定是讓正面成為網隔模式、第二個變數決定是否讓背面成為網格模式。(p.292)
- jit.gl.render 收到 erase 指令時,會將繪圖的 buffer 置換成灰色,為其預設的顏色,但也可以利用 erase_color $1 $2 $3 $4 (ARGB)來更改其 buffer 清除顏色之後的預設顏色值。( OpenGL儲存顏色與頂點的格式為 RGBA,若欲將 OpenGL 圖形與 video 陣列相結合,可以運用 jit.pack, jit.unpack, pack, unpack 等物件來達成。也可以利用 planemap 屬性設定成 1 2 3 0 將 陣列的 plane 由 ARGB 轉換成 RGBA。)(p.293)
- 運用 jit.gl.gridshape 的屬性 blend_enable $1,可開啟控制製新像素(source)對於現存像素(destination)的混合方式之功能,其功能包含兩部份,亦即 source blending factor (決定來源像素影響最後影像之運算方式)、destination blending factor(決定目標像素影響最後影像之運算方式)。每一種模式對於RGBA 使用不同的混影運算方式,其指令為 blend_mode [ src_factor ][dest_factor],可用於所有的 OpenGL之繪圖物件上。(預設為 blend_mode 6 7。此設定下,使用時可以藉由修改 source 的 alpha 的數值 (color R G B A) ,直覺地在 source 與 destination 之間做 crossfade。(p.296)
- jit.gl.gridshape 的 antialias $1 屬性可柔化鋸齒線條,但會使線條變粗、運算速變慢。(針對不同加速卡,此功能的結果會有所不同)。(p.297)
訂閱:
文章 (Atom)