利用码绘与手绘表现婴儿的爬行动态效果
作品展示
首先是手绘的作品展示,由于手绘只画了7帧的关键帧,有一点点卡顿别太在意。。
接着码绘就是简单的骨骼联动,白色为左手左脚、蓝紫色为右手右脚(其实反过来看也无所谓只是便于区分防止看成同手同脚)。
码绘实现代码
float st1=0;
float x1=150;
float y1=200;
float x2=240;
float y2=230;
float x=0;
float y=10;
float color1=20;
void setup() {
size(400, 400);
}
void draw() {
float st2=1.8-0.5*cos(st1);
float st3=1.8+0.5*cos(st1);
float st4=2.5+0.6*cos(st1);
float st5=2.5-0.6*cos(st1);
float st6=1.2-0.2*cos(st1);
float st7=1.2+0.2*cos(st1);
float temp;
background(0);
stroke(color1,color1,80);
fill(color1,color1,80);
rect(x,y,90,320);
rect(x+100,y,90,320);
rect(x+200,y,90,320);
rect(x+300,y,90,320);
rect(x+400,y,90,320);
rect(x-100,y,90,320);
rect(x-200,y,90,320);
rect(x-300,y,90,320);
rect(x-400,y,90,320);
x=x+2;
color1=color1+0.2;
if(x>=400){
x=0;
color1=20;
}
stroke(0);
fill(0);
rect(0,60,400,15);
stroke(255);
fill(255);
ellipse(130+2*cos(2*st1), 155+2*cos(2*st1), 80, 80);
line(130, 155, x1, y1);
line(x1+20*sin(st1), y1, x1-20*sin(st1), y1);
ellipse(x1+20*sin(st1), y1, 5, 5);
line(x1, y1, x2, y2);
line(x2-10*sin(st1), y2, x2+10*sin(st1), y2);
ellipse(x2-10*sin(st1), y2, 5, 5);
line(x1+20*sin(st1), y1, x1+20*sin(st1)+100*cos(st2), y1+100*sin(st2));
line(x2-10*sin(st1), y2, x2-10*sin(st1)+80*cos(st7), y2+80*sin(st7));
stroke(100,100,255);
ellipse(x1-20*sin(st1), y1, 5, 5);
ellipse(x2+10*sin(st1), y2, 5, 5);
line(x1-20*sin(st1), y1, x1-20*sin(st1)+100*cos(st3), y1+100*sin(st3));
line(x2+10*sin(st1), y2, x2+10*sin(st1)+80*cos(st6), y2+80*sin(st6));
strokeWeight(10);
stroke(255);
line(x2-10*sin(st1)+80*cos(st7), y2+80*sin(st7), x2-10*sin(st1)+80*cos(st7)+20*cos(0.2), y2+80*sin(st7)+20*sin(0.2));
line(x1+20*sin(st1)+100*cos(st2), y1+100*sin(st2), x1+20*sin(st1)+100*cos(st2)+20*cos(st4), y1+100*sin(st2)+20*sin(st4));
stroke(100,100,255);
line(x2+10*sin(st1)+80*cos(st6), y2+80*sin(st6), x2+10*sin(st1)+80*cos(st6)+20*cos(0.2), y2+80*sin(st6)+20*sin(0.2));
line(x1-20*sin(st1)+100*cos(st3), y1+100*sin(st3), x1-20*sin(st1)+100*cos(st3)+20*cos(st5), y1+100*sin(st3)+20*sin(st5));
strokeWeight(3);
st1=st1+0.1;
delay(15);
}
作品解释以及对码绘与手绘创作的一些看法
先分开说这两种创作方式吧。
通过processing绘制了一个模拟婴儿爬行的gif图,只要是利用三角函数和极坐标实现各个关节直接的传动,进而模拟出爬行的效果。完成这幅图的步骤大体上是:先在纸上标出各个关节的大制坐标、各个圆形的半径以及两点之间的距离。再将坐标利用代码一步一步实现,先实现躯干的联动后再加入手脚头的联动。整体完成时间比较少。但是展现出来的动态效果虽然更加流畅,但却没有特别美观。
通过手绘绘制一个婴儿的爬行动作就耗费了较多的时间。显示画出草稿、拿着草稿寻求老师的建议后再加以修改,最后决定大制的草稿后绘制关键帧,绘制完毕后上色。为了展现出一个婴儿在爬动还增加了一个向前进的玩具小车。不过相比起码绘的婴儿更像一个人类的婴儿。
而总体来说,在我看来,比较两种创作方式,由于是完成一个动态的作品,虽然手绘绘制相比码绘花费的时间稍多,但是表现内心想法的效果更佳。本人画技并不好但是也能基本展现出一个完整的婴儿图像,倘若在纯代码中实现相同的效果可能需要相比手绘更多的时间。因此我更倾向于主要利用手绘创作而码绘作为辅助的创作方式。码绘的辅助方式可以有很多,例如先用码绘实现简单的动态作为参考,或是利用码绘实现动态模型后加以手绘进行再次创作等。码绘为辅的创作方式可以有效提高手绘创作的效率与质量,是一个不错的选择呢。