生成藝術競賽作品:茱莉亞
優質文章,第一時間送達
GIF
宇宙造物的秘密
從數學開始
GIF
作品片段
作品展現:
PC端通過瀏覽器訪問:http://cailven.imdevsh.com/demo/generatArt/
作品介紹:
「誰不知道熵概念就不能被認為是科學上的文化人,將來誰不知道分形概念,也不能稱為有知識」——John Archibald Wheeler
你想和上帝進行溝通嗎?你知道宇宙中如果存在另一個高等文明,人類會用什麼方法來和他們彼此驗證彼此的存在呢?
答案就是——數學
早在兩千年前,人類就出現了「拜數教」。畢達哥拉斯學派把世間萬物都用整數進行了解釋,唯獨沒有考慮到所謂的無理數——無限不循環小數的存在,因而直接引發了第一次數學危機。再後來,人類又發現了虛數和極限,最終把我們所理解中的世界用抽象的架構徹底解釋了一遍。
NASA最高成就獎獲得者卡爾薩根曾在其小說《接觸》里描寫過這樣的場景:造物主把宇宙的秘密隱藏在了π的第十一位小數之後。(聽說11位起進行微分運算求導數構成的集合會重新變成一個圓形。)
以接觸為原型的電影超時空接觸中截圖畫面
在本次OF COURSE主辦的生成藝術競賽中,來自VML的張潤秋從無理數著手,用代碼創作了作品《茱莉亞》
作為一名視覺藝術程序員,曾經他理解中世界的本源是「隨機」-Random。但隨著他對於數學領域的繼續學習,發現這並不確切。在大自然中,事物並不是真正隨機的,而是符合一定規律的變化,這就是混沌理論(chaos),熵是其中的一部分。
在數學中,熵這個曾經的熱力學單位變成了一個計量單位,用來表達事物之間的「混亂值」——這種重複帶有自相似性但又符合一定規律的變化。我們都知道,把整數不停整除,可以得到分數,而分數與整數間依然保持著一定的自相似性。分形幾何作為一門研究不規則與相似性的數學學科在1973年被著名學者Mandelbrot提出,從而揭示了宇宙造物的秘密。
而法國數學家加斯頓·朱利亞(Gaston Julia)百尺竿頭,更進一步,他依分形理論,在複平面上進行點的集合:
對於固定的複數c,取某一z值(如z = z0),可以得到序列
這一序列可能反散於無窮大或始終處於某一範圍之內並收斂於某一值。我們將使其不擴散的z值的集合稱為朱利亞集合,也是本次作品的靈感來源。
以c語言構建的朱利亞集圖像
作品設想:
用代碼進行3D建模,在計算機圖形學中被稱作過程化建模(procedurals Modeling),而在ray-tracing光線追蹤理論下,它能基於voxel體素進行過程化建模從而實現更真實的物理光照渲染(Physically Based Rendering)。結合分形公式,我們很容易就能構建出3D環境下的分形圖案。
除此之外,基於webGL下的引擎three.js具備用戶可定製著色器功能。在shader編寫中,利用全局片元著色器,可以部署光線追蹤環境。
//代碼(GLSL片元著色)
float fovfactor = 1.0/sqrt(1.0+fov*fov);
float t = dis.x;
for( int i=0; i
{
vec3 p = ro + rd*t;
float surface = clamp( 0.0015*t*fovfactor, 0.0001, 0.1 );
float dt = map( p, c, trap );
if( t>dis.y || dt
t += dt;
}
if( t
{
rescol = trap;
res = t;
}
return res;
在上面代碼的基礎上,我們可以搭建基於光線追蹤的距離場(distance field),從而運用數學公式進行體素建模。而建立4D環境變換下的Julia sets則需要我們利用公式Z=Z^2+C進行遞歸,因此每個維度的公式分別為:
Xn+1 = Xn·Xn - Yn·Yn - Zn·Zn + a
Yn+1 = 2·Xn·Yn + b
Zn+1 = 2·Xn·Zn+ c
但我們前面也說過,朱利亞集只有Z軸是聚攏的,其餘兩軸是擴散的,在擴散幾何的遞歸中,分形圖形是無法形成的。因此,我們通過Zn = Xn + i·Yn + j·Zn and C = a + i·b + j·c.來構建圖案,並確立面的方向法線。
因此,分形茱莉亞集合的三維演算法的核心代碼如下:
float x = zz.x; float x2 = x*x; float x4 = x2*x2;
float y = zz.y; float y2 = y*y; float y4 = y2*y2;
float z = zz.z; float z2 = z*z; float z4 = z2*z2;
float k3 = x2 + z2;
float k2 = inversesqrt( k3*k3*k3*k3*k3*k3*k3 );
float k1 = x4 + y4 + z4 - 6.0*y2*z2 - 6.0*x2*y2 + 2.0*z2*x2;
float k4 = x2 - y2 + z2;
zz.x = c.x + 64.0*x*y*z*(x2-z2)*k4*(x4-6.0*x2*z2+z4)*k1*k2;
zz.y = c.y + -16.0*y2*k3*k4*k4 + k1*k1;
zz.z = c.z + -8.0*y*k4*(x4*x4 - 28.0*x4*x2*z2 + 70.0*x4*z4 - 28.0*x2*z2*z4 + z4*z4)*k1*k2;
GIF
作品片段
交互方式:
Web互聯讓人人都能上網,移動微信讓人人都能看到藝術。這個作品交互方式通過H5這個途徑進行控制,在H5中,用戶可以利用手機的陀螺儀進行交互體驗,達到控制分形參數的變化以及視角觀察的變化。
手機的陀螺儀具備alpha,beta,gamer三個值。這三個值本身是通過歐拉角的數學方式進行定義的。(也可通過Mouse或者Touch事件進行交互)。
手機中的Device Orientation Handler
創作思路分解.作者說:
作為一名視覺藝術程序員,每天的主要工作就是在不停書寫邏輯控制代碼。在程序邏輯運算中,有一個很常用的演算法叫做「遞歸」(自調用函數)。在遞歸中,我們給出一個變化規則和一個停止條件,並讓函數自己調用自己,從而讓程序自動運行,這就和分形世界的構成原理是一樣的,即在規律中尋求運動的變化。我們通過代碼讓畫面自動生成一個隨機並附有藝術感的作品離不開遞歸這種演算法。
計算機給了我們無限的創作靈感和創作方法用來實現生成藝術。如果數學真是宇宙的秘密,我們何不把秘密展現出它本應有的面貌呢?
GIF
作品片段
搭訕OF君小黑
比看片兒還有意思
還可以加入黑科技群
嘿嘿嘿
「做人人都能學會的創意編程課程。」
TAG:想當然 |