纵观当下,新兴的AI生成与传统DCC软件“手搓”工艺无疑是两大主流。
诚然动画领域还有许多制作方法和流派,但在代码和像素的交汇处,还隐藏着一条潜力无穷的技术路径。来来来,今天小编就带大家解锁一个“新”创作流派,不画线、不建模,用数学公式“算”出动画。
![]()
3D艺术家Vitaliy Kaurov近期创作了一只名为“龙脊(DragonSpine)”的脉动红色生物。这是将艺术家yuruyurau在P5.js中的一个动画,改编到了Wolfram语言中,借此探讨极简代码与复杂视觉之间的关系。
是的,没有任何AI成分,这只生物完全依赖数学公式。底层代码仅使用了基础的三角函数(如 sin 和 cos),代码量之少甚至能够写在一张餐巾纸上。然而,正是这几行微小的代码,通过数学迭代生成了极具视觉复杂性的有机形态。
代码如下:
![]()
这难道就是传说中符号距离场和极坐标在CG中的独特魅力么~
不通过传统的建模方式去雕刻骨骼与肌肉,而是利用数学公式定义空间中没一点到生物表面的距离,从而赋予了图形一种平滑切极具生命力的“数学美感”,打破了传统CG制作中“细节越多、代码越复杂”的固有认知。
![]()
看到这里是不是好奇,带给Vitaliy Kaurov灵感的原动画长什么样?这样↓
乍看之下类似某种简单的水生生物。
![]()
Vitaliy Kaurov同样将其从P5.js改编为了Wolfram语言,并借此探讨了神经科学中的“绑定问题”。
尽管这个生物的生成算法中并不存在“中央协调器”,但成千上万个独立的坐标点却在人类的视觉系统中被成功绑定,最终形成一个完整的感知对象。而这些数学公式,似乎天生就具备促成这种绑定的内在结构。
![]()
看多了走“寻常路”的动画,偶尔看看这种换换口味也不错么。而这,正式生成艺术的魅力之处,把创作门槛从“美术功底”变成了“逻辑与好奇心”。
是不是有点手痒想要试一试?贴心如我,艺术家yuruyurau打造得那些“有机生物”以及源代码,都给你们搬来咯~
1
源代码
a=(x,y,d=mag(k=(4+sin(y*2-t)*3)*cos(x/29),e=y/8-13))=>point((q=3*sin(k*2)+.3/k+sin(y/25)*k*(9+4*sin(e*9-d*3+t*2)))+30*cos(c=d-t)+200,q*sin(c)+d*39-220) t=0,draw=$=>{t||createCanvas(w=400,w);background(9).stroke(w,96);for(t+=PI/240,i=1e4;i--;)a(i,i/235)}//
![]()
2
源代码
a=(x,y,d=mag(k=4*cos(x/29),e=y/7-13))=>point((q=3*sin(atan2(k,e)*19)+sin(y/19)*k*(9+2*sin(e*9-d*3+t/4)))+60*cos(c=d-t/8)+200,q*sin(c)+d*39-195) t=0,draw=$=>{t||createCanvas(w=400,w);background(9).stroke(w,146);for(t+=PI/15,i=1e4;i--;)a(i,i/235)}//
![]()
3
源代码
a=(x,y,d=mag(k=5*cos(x/14)*cos(y/30),e=y/8-13)**2/59+4)=>point((q=60-3*sin(atan2(k,e)*e)+k*(3+4/d*sin(d*d-t*2)))*sin(c=d/2+e/99-t/18)+200,(q+d*9)*cos(c)+200) t=0,draw=$=>{t||createCanvas(w=400,w);background(9).stroke(w,66);for(t+=PI/20,i=1e4;i--;)a(i%200,i/43)}
![]()
4
源代码
a=(x,y,d=mag(k=9*cos(x/8),e=y/8-12.5)**2/99+sin(t)/6+.5)=>point((q=99-e*sin(atan2(k,e)*7)/d+k*(3+cos(d*d-t)*2))*sin(c=d/2+e/69-t/16)+200,(q+19*d)*cos(c)+200) t=0,draw=$=>{t||createCanvas(w=400,w);background(9).stroke(w,66);for(t+=PI/45,i=1e4;i--;)a(i%200,i/55)}
![]()
5
源代码
a=(x,y,o=mag(k=x/4-12.5,e=y/9)/9)=>point((q=x/3+99+3/k*sin(y)+k*(1+cos(y)/3+sin(e+o*4-t*2)))*cos(c=o/5+e/4-t/8)+200,(q+49)*sin(c)*cos(c)-q/3+30*o+220) t=0,draw=$=>{t||createCanvas(w=400,w);background(6).stroke(w,46);for(t+=PI/90,i=2e4;i--;)a(i%100,i/350)}//
![]()
6
源代码
a=(y,d=mag(k=(y<7?8+sin(y^9)*6:4+cos(y))*cos(i+t/2),e=y/2-13))=>point((q=y*k/5*(2+sin(d*2+y-t*4))+80)*cos(c=d/4-t/2+i%2*3)*cos(c/2+e/8)+200,q*d/8*sin(c)+200) t=0,draw=$=>{t||createCanvas(w=400,w);background(9).stroke(w,116);for(t+=PI/90,i=1e4;i--;)a(i/790)}//
![]()
好啦,今天的分享就到这里。
宝子们,是不是已经蠢蠢欲动了,不说了,小编要去搞生成艺术了。
end
![]()
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.