【共享插件023】伪3D马赛克
制作平面伪3D马赛克视觉效果。

插件见附件。
这个CorelDraw插件用来制作如上图所示的伪3D马赛克效果。
该插件的原始版本是2014年4月写出来的,当时并不知道有“纪念碑谷”这个游戏(好像也是差不多那个时间发布的),视觉效果有点相似。这个插件的灵感来源是一位港台设计师(抱歉我忘了她的名字)做的一个手机界面设计,觉得在平面上做伪3D效果是个有趣的概念,可以深挖,于是就顺手写了这个插件。程序不长,只有300多行,用到了少量的高中几何知识。
插件只提供了有限的功能,概念的潜力远未挖尽,但只要开始做了就好。
功能
这个插件的功能有三个:
1.把一条曲线经过虚拟旋转“变成”3D马赛克堆积出的实体形态,类似3D软件的扫描建模;
2.对3D马赛克上色——只提供了一种上色模式;
3.将3D马赛克炸开,观察其层间组织结构(话说,作者为了实现这个概念也挺拼的,所有马赛克都做齐了,一块不少,包括被遮挡看不见的)。
插件加载方法
照例先交代一下插件加载方法。如果用过“创意之代码”以往发布的22个插件没有问题的,这节可以跳过了。
本插件内嵌在CorelDraw的.cdr文档中,不需要安装。打开.cdr文件,用户界面就会自动跳出来。如果没跳出来,后面有解决方案。
插件是在CorelDraw X3上使用VBA开发的。事实上,“创意之代码”发布的所有插件都是在X3开发的,因为旧版插件可以在新版CorelDraw使用,而反过来不行。基于X3以前的版本开发的插件拿到高级版本上使用会出很多错,估计是X3对VBA模块做了大量改动造成的。所以X3就成了最佳选择。
尽量避免在X4使用本插件,因为X4的VBA与其他版本兼容性比较差,易出错。我没有装X4,也懒得专门为X4准备一个特别版本。
打开文档“【共享插件023】伪3D马赛克05.cdr”。文件名末尾的“05”表示这个程序修改了5轮。为避免程序意外崩溃造成重大损失,每有关键改进就另存一版文档。
正常情况下,应该出现如下警告对话框(以X3为例):

选“启用宏”,cdr文档打开,正常情况下,插件的用户界面应该跳出。
如果用户界面成功调出,可以忽略下面的内容直接跳到“使用说明”部分了。否则继续往下看。
如果没出现上述警告对话框而是直接把.cdr文档打开了,并且没有出现用户界面,那是因为安全设置太高,把宏屏蔽了(插件以宏的形式运行)。解决方法:工具>>Visual Basic>>安全性:


安全级别选“中”,然后点确定。重新打开.cdr文档。
尽量不要从资源浏览器中直接把本.cdr文档拖到CorelDraw界面中打开,因为有可能会造成警告对话框被隐藏到界面背后无法点击,从而造成死机假象。出了这种情况,资源管理器也会处于假死状态。有个解决方式是,把CorelDraw切换到最前端,然后打开一个其他软件(比如Excel),点右上角最小化按钮将其最小化,多试几次,可以把警告对话框带到前面来。
插件在X7上运行的情况稍有不同。
在我的X7上,.cdr文档打开后没有跳出用户界面。这时可以通过两个步骤调出用户界面:
1) 工具>>宏>>宏管理器:

宏管理器加载后出现在界面右侧的泊坞窗位置:

2) 在宏管理器中双击打开“VBAProject”条目,找到ThisDocument下面的Document_Open,双击,打开用户界面。

使用说明
用户界面与以前的插件类似,能小则小。

插件界面上有一个输入参数和五个按钮。右下方带二维码的按钮是开发者信息,看看无妨。
制作3D马赛克
写着“Make”的按钮点下去可以生成一堆马赛克,是最关键的一个按钮。马赛克不是凭空造出来的,需要一个母本,这是留给用户的工作,插件可以把用户的涂鸦化腐朽为神奇。
母本是若干条曲线,选中后点Make按钮,这些曲线会绕着页面中轴线在虚拟的三维空间中旋转,扫过的曲面用马赛克重新“拼”起来。
如下图所示,曲线会被Make成一个容器的模样(虚线是页面中轴线位置):


上图是在Square选项默认选中状态下得到的马赛克形态。Square是指“方形扫描”,即扫描路径是一个正方向。去掉Square的选中状态,会执行“圆形扫描”,即扫描路径是一个圆,效果如下图所示(说实话,我还是喜欢方的):

参数Layers表示马赛克的层数——这个马赛克的制作原理有点像3D打印机,一层一层堆起来,层数越多精度就越高,当然程序运行起来也就越耗时。
默认的层数是10,最少层数是8,给出小于8的数字插件会拒绝执行。
渲染马赛克
按钮Render可以渲染马赛克。插件只提供了一种渲染方式,即从上部黄色到底部紫色的逐层渐变渲染。Border选项表示是否渲染马赛克的边线。下面两个图分别是选中Border(默认设置)和未选中Border的效果:


选中Border会把整个马赛克连边线一起涂成一色,否则边线保持原色(即黑色)。
由于每一层马赛克的颜色都不一样,所以渲染Border还是有点必要的,否则即使把边线宽度设为“无”,仍然会看到边线,而每层逐一给边线设色也是个挺麻烦的活儿。
这种渲染缺了点立体感,别急,还有一个按钮“Light & Shade”。
这个按钮会对当前页面的所有马赛克的对着你的三个表面进行明暗调整,营造出光影效果,产生立体感。具体来说,就是顶面保持原色,右立面降一级明度,左立面再降一级明度。


“Light & Shade”按钮只修改马赛克三个表面的色彩,不会修改边线,因此边线色彩保持原样。

边线色彩与马赛克顶面的颜色保持一致,所以光影渲染后顶面的相邻马赛克间的分隔线隐去了,侧面的分隔线由于明度比两个立面都要高,所以可以显现出来。如果侧面也不需要看到分隔线,而是希望有浑然一体的感觉,这就需要再做一些代码调整了。这一步还是需要点小技巧的,主要是需要判断马赛克当中分割线的色彩,是跟左边同色还是跟右边同色。
炸开马赛克
最后一个按钮Explode可以把当前页面中的模型纵向炸开,在新页面中展示。主要是为了看清每一层的组织结构,没有其他意义。


隐藏的小技巧
最初做这个插件是想生成一个类似四羊方尊的容器,在角部和立面对称面增加棱边,这样可以看起来细节丰富一些。
为此,在原始曲线选择的时候做了些设置。

这个有点像“冰鉴”的容器,它的原始曲线是这样的:

这组原始曲线包含四条曲线,其中两条红色的曲线用来生成冰鉴的外围装饰。红线的特征是,它们只在特定部位出现,而不像黑线参加整周360度扫描。
为此程序设置如下:
1.原始曲线的名称设为“corner-middle”的,只在角部(corner)和侧立面对称面(middle)上出现;
2. 原始曲线的名称设为“corner”的,只在角部(corner)出现;
3. 原始曲线的名称设为“middle”的,只在侧立面对称面(middle)上出现。











































