手绘与码绘的比较——实战之梵高《星空》
版权声明:本文为博主原创文章,未经博主允许不得转载。
最近博主的老师在交互媒体设计课上布置了一个作业,是关于“运动”主题的作品创作,恰巧博主之前就有想过要实现一下类似希腊艺术家Petros Vrellis做的基于梵高名作《星空》的交互程序,叫做“Starry Night”。这款程序在苹果的App Store中可以买到,价格是15块钱。原作者用的工具是openframeworks,而博主为了节省时间(作业老多了),选择的是processing。因为本文的主题是“手绘与码绘的比较”,所以整篇文章会以两者异同之处的梳理过程作为主要框架,中间穿插博主实现码绘作品的关键代码。
作品展示
首先,博主先放上自己手绘作品和码绘作品的结果展示(虽然有点丑),原作是由纽约艺术家Aja Kusick模仿梵高的作品创作的。
原作:
手绘作品:
码绘作品:
思考
在看完上面两组作品之后,博主想请大家思考一个问题:为什么要用码绘的方式进行作画?对于“绘画”,编程能够做些什么?其实答案很简单:编程可以实现画不出的效果,接轨前沿艺术。我们通过编程,可以高效率地做出自己想要的图形效果,而这种图形效果的创作过程和原理完全不同于传统的手绘方式:前者本质上是创造了一个小型的空间,我们就是这个空间的主宰者,这个空间中的物体都是客观存在的,它们都有自身的客观属性,都服从我们所定好的规则;后者则不然,手绘所能表现的内容深度可能比码绘要强,但其广度是不如码绘的,比如如果想要以手绘的方式做出动画效果,它所能依赖的只能是人眼本身的视觉暂留机理,我们甚至可以粗鲁地认为两幅内容相同的手绘作品“并不相同”,因为这两者并不存在必然的客观联系,我们所认为的一些联系其实都只是自己的主观臆想而已。
比较
接下来的这一个部分,博主准备从工具、技法、创作体验、呈现效果、载体、局限性、应用这个几个方面进行手绘创作和码绘创作的比较。
(1)工具
工具原指工作时所需用的器具,后引申为达到、完成或促进某一事物的手段。博主的手绘作品是使用了一款叫做Procreate的手绘软件,其功能十分强大,包含了丰富的画笔效果,不好看只是因为博主的手绘能力不行。至于博主所用的码绘工具,当然就是前文所提到的java版的processing。
(2)技法
技法是指艺术家运用他们的工具和材料以获得表现性效果的方法或技术。这一部分也是博主本文所要描述的重点。常用的手绘技法包括对各种色笔的灵活使用、利用例如尺子等工具的作图手段······专业的手绘创作者能够利用这些工具将线条、色调、色彩运用到极致,这是码绘目前很难企及的,像博主所作的码绘作品在对色彩的运用上就远不如手绘灵活和丰富。而对于码绘而言,其技法多基于所使用的编程语言的特性,例如,像博主使用的processing是基于java语言的(当然processing也有js版、python版),而java语言一个很重要的概念就是类。通过类的继承和多态性,我们甚至可以创造出世界上所有的物体,因为所有的物体都是“物体”,而“物体”就是物质世界的根类。在博主的码绘作品中,一共定义了7个类,其中跟粒子有关的3个类之间的关系如下:
粒子类的具体代码如下:
//Particle父类
class Particle{
PVector location; //位置
PVector velocity; //速度
PVector acceleration; //加速度
color p_color; //颜色
float lifespan; //寿命
float p_scale; //缩放大小
PShape s,s1,s2,s3; //形状
//构造函数
Particle(color C, float lp, float sc){
lifespan = lp;
p_color = C;
p_scale = sc;
noStroke();
fill(p_color);
s = createShape(GROUP);
s1 = createShape(RECT,0,0,40,10);
s2 = createShape(ELLIPSE,0,5,10,10);
s3 = createShape(ELLIPSE,40,5,10,10);