首页/技术分享

Dynamo生成精美复杂的浮雕(二)

发布于:2021-06-29 10:11:39
6371人 分享

本文来自牛侃BIM的南泽有木

一、平面浮雕

1.1选取图片(通过Dy将图片倒入到我们的画布中,并读取到图片的尺寸信息)

01.png

1.2接下来,我们将得到的尺寸值长宽一同缩放一个比例m,这个比例值m可以理解为每隔一个比例值m的间距创建一条横/竖向网格线,然后,将缩放后的网格线数量给到Image.Pixels这个节点上(x、y对应长宽网格数量,Image输入我们的图片即可),这里需要注意的一点是该节点的x/ySamples接受的是一个Int整数,虽然我们给的横纵网格线数量值不是Int,但也不会影响该节点工作(节点将会自动把该值四舍五入为一个整数,理解一下,这里和把输入值int()取整数是不同的);另外的,我们需要创建两列横纵向的网格的分量,用CodeBlock代码块输入“0..width..#Math.Round(_w)”、“height..0..#Math.Round(_h)”(后面会解释一下为什么height数组是从大到小排列的)。

02.png

下面是我们生成点的PythonScript中的代码:

03.jpg

(这里稍作解释一下,取横向网格、竖向网格的值作为我们创建点的x、z坐标,取色彩值--这里选用的是Red强度值,并将其缩放10倍,添加“-”号是为了让浮雕向y的反方向凸出。由上述代码可生成一个二维数组,每一列一维数组对应由上之下每一列点组,并且一维数组的点从左向右排列)

04.jpg

05.png

1.3既然这里空间凹凸程度不同的二维点组我们有了,接下来,我们需要创建一些系列的子Surfaces来拼凑出整体的画面。

06.jpg

在这里,我们新建一个Python脚本代码,代码的内容如下:

07.jpg

代码的思路是将每一行依次取序号为0到-2的所有点,暂且称之为点P1,接着取同行次列的点P2、以及同列次行的点P3,将三点连成闭合的线并形成facea面(即下图三个红圈内的点),于此同时取绿色圈中的三个点形成faceb。依次类推)

08.png

这里解释一下之前的“height..0..#Math.Round(_h)”为什么从大到小排列,究其原因,是因为Image.Pixels这个节点提取图片的颜色ARGB值从按照从上至下,从左至右的顺序进行的,生成的ARGB二维数组是由上而下的每一列由左至右的点数组构成的(理解下)

09.png

这是最终的效果:

10.png

(该效果精度取值为3,值越低,精度越高,相应的会消耗更长的时间)

转载请注明来源本文地址:https://www.tuituisoft/blog/4549.html

上一篇:

Dynamo生成精美复杂的浮雕(一)

下一篇:

Dynamo生成精美复杂的浮雕(三)