最近因為看了Chunky Move 的舞蹈表演影片,開始對於將舞蹈結合互動影音的設計產生興趣。或許由於國際間很少有類似的表演,許多研究僅限於紙上談兵、或者只是「實驗」性的表演來呈現技術的新穎,而不見真正好的作品,所以之前我對於結合影像的互動表演並沒有太大的意願投入,往往只是教學上的需求使然而從事相關研究。但Chunky Move 的作品卻非常讓我驚豔,youtube 上也博受好評,證明其確實有非常特別的表現力,同時也為互動表演藝術作了一項最好的示範,因此我開始再把以前學過的 Jitter 關於3D 的部分拿來複習,並且把手冊的摘要整理出來,一方面提供自己複習的參考,也順便將 Max/MSP/Jitter 的互動技術介紹給國內的藝術家們。
Chunky Move 的作品雖然無法在網路上看到完整版,但可以看到其畫面的多樣變化,推測其必然是隨著時間不斷演變的,有別於多數互動裝置藝術家從事跨領域的表演藝術創作時,常常忽略時序控制與作品的時間結構。其實,互動音樂系統的設計,常遇到的難題便是時序控制、參數漸進變化的設計的問題,這些概念與經驗將有助於參與互動舞蹈表演的設計。
若有舞蹈者未來想嘗試此類結合互動影音與舞蹈的表演,也期待您能與我聯絡。目前在互動舞蹈表演系統的建立上,尚須要一段時日,有許多視覺特效與即時動畫的技術,也正在逐步準備中。猶如 Chunky Move 舞團的背後互動技術大約花費了六年才趨近成熟與穩定,我心中的這個計畫,也需要透過許多小型的表演計畫來慢慢醞釀,如果你是專業舞者,並且想嘗試不一樣的表演方式,歡迎來信與我聯絡與交流。
這個部落格是用來記錄關於現代音樂(器樂、電子音樂等)、即時影像、互動影音的相關資訊,內容包含現代音樂作曲的相關資料,Max/MSP/Jitter 互動影音程式設計的相關資源介紹。另外也包含鄭建文的音樂作品影音資料等,歡迎藝術家們提出跨領域創作之合作計畫。
2010年2月28日 星期日
2010年2月27日 星期六
Jitter Tutorial 37 Geometry Under the Hood 摘要
- maxtrixoutput $1 指令用來指定是否GL物件的 geometry 資料是直接在相關的物件中做算圖,或是使其由物件的左下方輸出口送出陣列 (geometry matrix)。一般而言,jitter matrix 是以四個 plane 的 character data 的方式表示,但 geometry matrix 則是以 float32 的格式表示,包含 3, 5, 8, 12, 或 13 個 plane。plane 0-2 指定 x, y, z 的位置,plane 3-4 指定貼圖的座標 s 與 t,plane 5-7 指定 normal vector nx, ny, nz 藉以用來計算燈光效果,plane 8-11 則用來指定 RGBA 的 vertex color,plane 12 指定 edge flag e (註:Edge flags 是用來標明 vertex 是否在 boundary edge 上)。jit.gl.gridshape 的陣列輸出有 12 個 plane,範例中的 plane 3-12被忽略)。
- 利用 matrixoutput 1 指令連接至 jit.gl.gridshape, jit.gl.nurbs, jit.gl.plato 等物件,可以將3D物件的輸出,轉變成 Jitter 陣列資料,而得以運用非 3D 的 jitter 運算物件來處理之。(p.327)
- jit_matrix [matrix-name] [drawing primitive] 訊息指令(亦即在陣列的輸出資料之後,補上所指定的圖元)被送往 jit.gl.render 物件時,可以使 jit.gl.redner 依照該指令所指定的圖元(primitive) 來繪圖。若沒有指定圖元時,則會使用當前 jit.gl.render 物件所使用的圖元來繪圖。有效的圖元可包括:points, lines, line_strip, line_loop, triangles, tri_strip, tri_fan, quads, quad_strip, polygon, tri_grid, quad_grid。此時也可以藉由下 dim $1 $2 指令給 jit.gl.gridshape,藉此設定輸出的陣列之維度(預設值為 20 x 20)。
- jit.gl.handel 直接連接至 jit.gl.render,而非 jit.gl.gridshape ,主要目的在於使 jit.gl.handel 可用來對整體場景做旋轉、位置改變等。 但此時需在 jit.gl.handle 的屬性中加上 inherit_transform 1 訊息指令,以避免旋轉時的算圖上所產生的不正確混淆。
2010年2月25日 星期四
Jitter Tutorial 36 3D Models 摘要
- Jit.gl.model 可以用來讀取 3D 模型 obj 檔,其為多邊型的集合,關於這些多邊型的資料被記載在 obj 檔案當中。若將 verbose 1 指令送至 jit.gl.model 時,則可以使我們可以在 max 偵錯視窗看到正在讀取的 obj 檔案的相關資訊。然而,在算圖時,並不適合開啟此功能,verbose 1 只適合偵錯時使用。(p.318) (Max/MSP/Jitter 5 版本只支援 vertices, polygons, groups, materials, texutre coordinates ,不支援 nurbs 與 parametric surfaces。)
- verbose 模式開啟時,所顯示的 "materials: 0" 訊息是表示此3D模型有多少 material 的定義。material 定義可用來指定影響 3D 模型表面顏色的光的參數,包括關於 ambient, diffuse, specular 等元素。(p.319)
- lighting_enable 1 指令送至 jit.gl.model 可開啟所燈光功能, smooth_shading 1 指令送至 jit.gl.model 則柔化 3D 模型的稜角。texture grid 指令則使 jit.gl.model 的3D物件產生格狀材質。(p.321)
- jit.gl.model 在 tex_map 0 的模式下,材質的座標直接由原本的 3D 模型所決定(亦即材質套在3D模型上的樣貌),藉由修改 tex_map $1 為1~3,則可更改材質套用的方式(分別為 object linear, sphere map, eye linear)。(p.322)
- 利用 texgroup [group-number][texture-name] 的指令格式,可以指定某個3D模型組要使用哪一個材質。若下 texgroup [group-number] 0 的指令給 jit.gl.model,則被指定的3D模型組,會改用原本預設的整體材質。 (p.323)
- 多邊形的模型組可以分別繪製,例如送 drawgroup 1 的指令給 jit.gl.model,則只繪製編號為 1 的多邊形模型組,直到接收到下一個 drawgroup 指令時,才更新畫面。藉由此種功能,搭配 drawgroup 編號的快速改變,可以讀進 3D 動畫(亦即將原本動作的每一個畫格,儲存在不同的多邊形模型組中,搭配 counter 物件來快速切換這些模型組,使之以動畫方式呈現。)
- material_mode 屬性可以用來決定 3D 模型所指定的 materials 在算圖時會應用到何種程度。預設值是 1,此時只有 diffuse 的成分會於算圖時被使用。若改為 material_mode 0,則不會使用該 3D 模型的預設的 material,此種情況下,原本3D物件的顏色屬性則被用來作為 diffuse 的顏色 (p.325 範例中則變為預設值的灰色)。
2010年2月18日 星期四
Jitter Tutorial 35 Lighting and Fog 摘要
- 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)
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)
2010年2月12日 星期五
Jitter Tutorial 32 Camera View 摘要
- Jit.window 加入 @depthbuffer 1 屬性,用來製造 depth buffer。depth buffer 允許 OpenGL 算圖器決定哪一個繪圖指令根據攝影機的幾何位置,可在指定的的像素上被呈現出來 (藉此產生遠近之別)。若無 depth buffer,則 OpenGL 常使用一般所謂的「繪圖者的準則」,亦即所繪圖指令所呈現的結果是根據指令執行時的順序而定。(p.280)
- Jit.gl.gridshape 可用來繪製各種 3D 圖形,poly_mode 1 1 屬性使所繪圖形以網格方式呈現,poly_mode 0 0 則使所繪圖形以實心方式呈現。lighting_enable $1, smooth shading $1屬性用來設定光影。(p.281)
- 算圖物件 jit.gl.render 預設值使用 projective projection (透視投影),與我們一般在3D世界中看物體的方式相似,鏡頭角度加大時,可看到越多範圍,物體也變得越小。另一種 OpenGL 的投影方式為 orthographic projection (正交投影),以 ortho 1 設定之,是一種在 2D 面上表示 3D 物件的呈像方式,此種投影方式不會因為 camera 的位置而使物件的大小變小,然而更改鏡頭角度 (lens_angle $1),仍然會改變整體看到的範圍以及相對於此範圍之物件大小。(p.284)
- Clipping planes 在 3D 會圖中,用來防止算圖時計算距離觀者極遠之表面,決定沿著觀者的視線所須算圖的範圍,在 OpenGL 中有 near clipping plane 與 far clipping plane 的設定,僅有在此兩者之間的範圍會被算圖。 clipping plane 以沿著視線方向、與攝影機的距離為計算方式,預設值中,near clipping plane = 0.1, far clipping plane = 100。(p.285)
- jit.gl.handel 為一個使用者界面物件,用來將滑鼠在繪圖目標上的動作傳給 Max 系統,亦即產生與其相連的其他GL物件之 position 與 rotation 指令。與其他 GL 物件一般,jit.gl.handle 也須指定繪圖目標名稱。control + 滑鼠拖曳,可左右移動3D物件;alt + 滑鼠拖曳,可改變3D物件與觀者的距離。以上兩者,又可以加上 shift 鍵固定拖動的方向。(p.286)
2010年2月7日 星期日
Tristan Murail - Territoires de L'oubli
昨天拿到 Tristan Murail 的 Territoires de L'oubli 鋼琴獨奏譜,趕緊拿來讀一下,手邊剛好有CD,果真是很特別的曲子。較少現代作曲家使用鋼琴獨奏來做以織度、音色為主要表現核心的作品,音色、或織度作品,通常適合較多不同樂器組合時,比較好寫。或許也是如此,Tristan Murail 的曲子多半是大型編制。我一直很好奇如果沒那麼多演奏者可驅使,那麼他的音樂理念該如何傳遞,但這首鋼琴作品,卻保有了他的作品的一貫特色。在關於時間的記譜法上,他總是有很多獨到之處,可惜若真的要用記譜軟體打起來,可能得費很大的功夫。Tristan Murail 常被冠上 spectralist 頻譜主義作曲家,以泛音列來控制音高,但實際上音響上是否因此而更悅耳則無法證實。我自己很喜歡他的曲子,剛好 youtube 也有這個作品錄音,可以聽一下。
2010年2月4日 星期四
極致的互動舞蹈表演
從技術與美感層面來講,這大概是我看到的融合互動科技的舞蹈表演中最好的表演之一,背後使用到紅外線攝影機來做影像追蹤。看過這種表演之後,其他的互動舞蹈表演大概都無法滿足觀者的胃口了。這就好比聽過一次優秀的互動音樂作品,再回頭看只有純粹樂器的演出、或只有預錄聲音播放的現代音樂作品,便會覺得趣味大減,雖然都是苦工夫做出來的,表現力在相對之下便遜色許多。傳統的表演形式,或許會繼續留存;但對於原本前衛派的音樂或表演的小眾文化而言,卻可能因為網路資訊的發達,使得創新的要求成為一個必然的趨勢。
其他更多的相關作品可以在這裡看到:
http://www.frieder-weiss.de/
其他更多的相關作品可以在這裡看到:
http://www.frieder-weiss.de/
2010年2月1日 星期一
Wii 的連接 Max/MSP 與 Wii 的 Laptop 樂團
在 Youtube 上可以找到不少 拿Wii 拿來控制 Max/MSP 所產生的音樂或聲音,原先是由日本人研發的物件,不過目前 Virginia Tech 音樂系 http://disis.music.vt.edu/main/faculty.html 任教的 Ivica Ico Bukvic 將它再度更新。利用藍牙傳輸,目前僅有 Mac 的物件。下載處在此:
http://ico.bukvic.net/Max/
Ivica Ico Bukvic (b.1976)http://ico.bukvic.net/ 是我在美國看到的一位非常傑出的年輕作曲家,器樂作品已經好得無話說,有一次在 SEAMUS 會議中聽到,已經非常令我訝異,但後來知道原來他還是位程式設計高手。目前他手邊改寫完成的 Max/MSP 物件還包括 Unity 與 Max/MSP/Jitter 結合的物件。
以下是他帶學生做的 Wii 的電子樂團:
Wii 的 infrated camera 用處也頗多,以下這個連結是不可錯過的:
http://johnnylee.net/projects/wii/
舊版 wii 的 Max 物件:
http://www.iamas.ac.jp/~aka/max/
Wii 與影音軟體的溝通:
http://www.osculator.net/
http://ico.bukvic.net/Max/
Ivica Ico Bukvic (b.1976)http://ico.bukvic.net/ 是我在美國看到的一位非常傑出的年輕作曲家,器樂作品已經好得無話說,有一次在 SEAMUS 會議中聽到,已經非常令我訝異,但後來知道原來他還是位程式設計高手。目前他手邊改寫完成的 Max/MSP 物件還包括 Unity 與 Max/MSP/Jitter 結合的物件。
以下是他帶學生做的 Wii 的電子樂團:
Wii 的 infrated camera 用處也頗多,以下這個連結是不可錯過的:
http://johnnylee.net/projects/wii/
舊版 wii 的 Max 物件:
http://www.iamas.ac.jp/~aka/max/
Wii 與影音軟體的溝通:
http://www.osculator.net/
訂閱:
文章 (Atom)