欢迎光临散文网 会员登陆 & 注册

[SD]___SubstanceDesigner节点改造_DS_Tile_Random

2020-10-09 13:30 作者:Game艺视界  | 我要投稿

今天是2020年10月09日星期五    

 正文共:4880字 44图 预计阅读时间13分

作者

Daniel_Swing

先看最终效果

概要

我在Substance Designer中创建了一个图块生成器节点,该节点可以同时在X和Y轴上创建不同大小的图块,而无需相交形状,并且可以半可靠地避免在画布上形成直缝。


用户可以自定义在两个轴上生成的图块数量,并更改随机种子以生成不同的图案。

该节点由一系列像素处理器和功能组成,这些像素处理器和功能可渲染图案,并根据图形的随机种子而得出不同的结果。

背景

在Substance Designer中按程序创建不规则瓷砖图案(如凡尔赛图案)和其他类似图案并不容易。

Substance Designer 2020.1.3中没有可在X和Y轴上同时创建不规则图块大小的本机节点或功能,同时还避免了在纹理画布上相交的形状或接缝的直线对齐。

该项目的另一个原因是,我可以稍微玩一下像素处理器节点,并从中学习一两个东西。


目标

该项目的目标是为用户创建一种方式,以使其在X和Y轴上生成具有不同大小的图块/形状,没有相交的形状,在画布上没有任何直缝的多种不同图块样式。尽可能快地输入。

  • 在X和Y轴上均具有大小不同的图块的多个不同图案。

  • 没有相交的形状,只有实心正方形和矩形。

  • 在纹理的画布上或边缘没有直缝。

  • 用户控制的自动化,无需强制手动输入。

  • 快速计算。

方法

在此说明了节点的结构-并没有太多确切的节点到节点交互的细节,而是描述了每个序列的作用以及如何帮助实现最终目标。

DS_Tile_Random节点使用多个像素处理器。由于像素处理器无法引用自身或递归自身,因此必须将几个不同的像素处理器一起排序,以逐步实现最终模式。


浮点数1,-1和0经常使用,因此它们在主图中成为全局常数,而不是在每个像素处理器中都具有实例常数。

随机颜色:

一切始于每个像素的随机灰度颜色

对于每个像素,请创建一个介于0和1之间的随机值,然后将其X&Y位置的总和的一半相加,然后除以一半-这将渲染一个画布,其值随机分布在0和1之间,且较高的值趋于顶部左和较亮的值趋于右下。

灰度颜色不会完全留给随机性,因为完全随机性会导致次优结果。通过让像素的位置也决定最终值,它可以最大程度地减少在彼此相邻的几个像素处生成完全相同的值的随机情况的数量,这在以后的像素处理器中会产生问题。

平铺:

对于每个像素,在位置1 / x,1 / y上对像素的颜色进行采样,该像素是活动像素“最接近”的位置,向下取整。


通过仅在一个像素区域上从一个像素采样灰度颜色,像素处理器将创建一个正方形网格。


纹理大小并非总是被正方形数平均除(例如2048x2048像素/ 9x9网格),因此并非所有正方形的大小都完全相同-在以后的步骤中记住这一点很重要,因为这会产生印象。

网格中采样像素/正方形的数量由用户在X和Y中的输入决定。

最初,此节点以小分辨率纹理处理单个像素,其中一个像素为一个正方形。但这限制了图块的数量,因此创建了此功能。

膨胀砖:

对于每个像素,将活动像素的值与上方,右侧和对角右上角的正方形中相邻像素的对应像素的值进行比较,然后将活动像素的值更改为比较值中的最高值。

这意味着较亮的正方形将其颜色值分布到左,下和对角线的左下角,而较暗的正方形则从相邻的正方形开始采用新的值。

这将开始创建更大的正方形和矩形形状,以及一些不需要的L形和可能需要删除的其他不规则形状。

填充L形:

通过确定图案中无冲突的L形,可以将它们拼凑成一个完整的正方形。

对于每个像素,比较周围正方形的对应像素。如果三个连接的正方形共享相同的颜色但不与活动像素共享,则它们将形成L形。如果在活动像素的正方形附近有一个L形,则活动像素将采用L形的颜色,只要它不会创建新的L形即可。

切割L形:

通过识别剩余的L形,可以将它们切成尾部。一些L形彼此冲突或已经具有完整的矩形,并且不能用先前的方法填充。

通过将活动像素的值与三个相邻像素的对应像素进行比较,可以识别出这些L形。连接的正方形。如果活动像素与两个相连的正方形共享颜色值,但不是三个都共享,则将其视为L形。

如果活动像素位于L形的一端,则它将采用第二个输入模式的灰度颜色。

修复不规则

要删除任何剩余的不规则形状和不需要的形状,请使用蛮力功能将所有非正方形或矩形形状切掉。

与“填充L形”和“剪切L形”功能相似,“固定不规则”功能可识别形状不是完整正方形或矩形的像素。

通过重复此函数三次,可以完全删除大多数不需要的形状。

一对单打

固定所有不希望的形状后,图案中会出现很多单个正方形,这也是不希望的结果。

通过识别单个正方形中的像素并让它们取另一个相邻正方形的颜色,只要这不会产生任何新的L形,就可以减少单个正方形的数量。

进行两次,一次用于确定垂直配对的优先级,一次用于确定水平配对的优先级。

中断对齐:

在这一点上,图案通常具有直接穿过纹理画布的接缝。

“断裂对齐”功能通过比较与活动像素的正方形相邻的正方形中的多个对应像素来标识直缝。如果它们不与X或Y轴上的相邻正方形共享任何颜色,则将其视为直缝。

查找直缝的比较次数取决于输入的平铺值。较高的平铺值会在相应的轴上设置较多的比较,因为太低的阈值可能会导致替换直缝而不是实际破坏直缝。


如果函数找到一条直缝,则活动像素将取一个相邻正方形对应像素的值,该像素将破坏该接缝。这会产生L形和其他不良形状。

“ Break Alignment”功能在计算方面非常繁琐,并且占用了大约一半的计算时间,这就是为什么如果直缝不会打扰用户的情况下允许用户将其关闭的原因。

还原:

由“断裂对齐”功能创建的某些不良形状很容易识别,并恢复为旧状态。

这些形状的标识方式与以前的固定功能类似。

最后修复:

一系列“填充L形”和“剪切L形”去除了大多数剩余的不良形状。

清理:

如前所述,当纹理大小未均匀地除以一个或两个轴上的平铺数字(例如2048x2048 / 9x9)时,正方形的大小将不完全相等,这意味着将创建的所有函数都有一些印象在某些正方形的边缘上可能会与大正方形或矩形相交的1或2像素粗线-需要将其删除。

对于每个像素,比较所有相邻像素和几步之遥的像素。如果比较的像素共享颜色,则活动像素将假定它位于该颜色的正方形中间,并采用该比较的颜色。

分别针对X和Y轴执行此操作。

之前:

重新校准网格:

最后,通过运行对初始颜色值进行采样并创建正方形网格的功能,生成器将修复在去除像素细线时可能发生的所有最后一个像素偏移,从而创建出完美的网格图案。

如果用户愿意,可以关闭此选项。

结果

生成的模式让人想起凡尔赛模式,但是凡尔赛模式遵循一组规则,我的图块生成器将呈现更多随机结果。

  • 在X和Y轴上均具有大小不同的图块的多个不同图案。

节点会自动同时同时在X和Y轴上生成具有不同大小的图块的图案。更改随机种子会完全改变模式。

  • 没有相交的形状,只有实心正方形和矩形。

L形或其他不良形状的确会出现在最终图案中,但很少出现,并且仅出现在具有特定平铺值的特定种子上。

  • 用户控制的自动化,无需强制手动输入。

用户可以通过输入X和Y拼贴编号来定制图案。用户可以更改节点的随机种子,这将完全更改生成的模式。

  • 纹理画布上没有直缝。

即使使用“断裂对齐”功能,节点也难以避免出现直缝,尤其是在较低的平铺值上。在4x4分辨率下,350个第一随机种子中没有一个提供有效结果。

以下是随机种子0和60之间的所有(有效)结果,这些种子不包含贯穿纹理画布的直缝,且平铺值分别为5x5、6x6、7x7、8x8、9x9和10x10。最左边的结果没有抵消直缝的功能,中间的结果没有使用[redacted]功能,最右边的没有“ Break Alignment”功能。

与没有功能相比,“突破对齐”功能证明可以增加有效随机种子的数量。事实证明,[已编辑]函数的可靠性比没有函数低,因此已将其从图形中删除。

  • 快速计算。

该节点具有相对较快的计算时间,在2k分辨率下不到100ms的计算时间。用户可以禁用“中断对齐”功能以减少计算时间。


讨论区

为了对结果进行汇总,该节点可以实现其设定的目标,但有一定的误差,还有很大的改进空间。


节点的最强方面是,只需更改随机种子即可非常轻松地生成多种模式-这是可能的,因为该方法使用基于初始随机输入的确定性函数。


节点难以避免以较低的平铺值穿过画布的直缝是该方法的最大缺陷-这可能可以通过使用替代排序或特定于低平铺值的函数来解决,从而创建一个更可靠的方法。

较早使用的替代功能之一是在Expanding Tiles功能之前创建类似于人字形的图案,以在早期消除任何直缝。但事实证明,此功能起反作用,结果可靠性较差,因此被删除。


这种方法的另一个缺陷是用户对最终结果的控制非常有限。

最终模式非常依赖于初始随机种子,并且将不会始终提供所需的结果,有时会完全无效或从美学上来说是令人讨厌的。除了更改随机种子或平铺值之外,用户没有太多补救措施。


我希望这些方法可以为用户提供对生成的图案的更多控制,例如瓷砖放置,图案方向,最小和最大形状尺寸,形状大小分布,扩展亚方形大小随机性,倾斜的边缘以及利用纹理输入。


进一步定制


尽管DS_Tile_Random节点本身并不能提供很多可定制性,但是可以使用Flood-fill节点添加其中的一些可定制性。例如,插入随机的子正方形大小,倾斜的图块边缘或将生成的形状更改为正方形以外的形状。

为避免每次希望向图块模式添加更多自定义时在每个图形中构造此星座的情况,我创建了一个伴随节点DS_Tile_Random_Customizer。

它是一个单独的节点,而不是DS_Tile_Random基本节点的一部分,以保持基本节点尽可能快和整洁。如果它们相同,则每个DS_Tile_Random节点都将带有一个内置的Flood-fill节点(比用户自己整个DS_Tile_Random节点花费更多的时间进行计算),即使用户不想使用Flood-fill。功能。

分离节点还意味着DS_Tile_Random_Customizer可以在其他上下文中使用,而不仅可以与DS_Tile_Random一起使用。

热门提示:如果要减少计算时间,请尝试降低DS_Tile_Random_Customizer的分辨率,因为它不会在很大程度上影响视觉效果。

该节点接受“图案”输入,例如DS_Tile_Random节点生成的输入,以及可选的“比例贴图”,“倾斜贴图”和“灰度”输入。DS_Tile_Random_Customizer具有9个参数,其中许多模拟可以在本机节点中找到的参数:

尺寸参数:

大小-允许用户分别控制X和Y上每个图块的大小。

大小随机-允许用户分别在X和Y中的每个图块之间添加随机大小差异。

比例尺-允许用户控制每个图块的统一比例尺。

比例随机-允许用户在每个图块之间添加随机比例差异。

比例贴图乘数-允许用户自定义比例贴图输入对每个图块的比例的影响。


倾斜参数:

倾斜角度-允许用户自定义所有图块的全局角度/通过降低尺寸参数创建的插图的全局角度。

倾斜变化-允许用户自定义每个图块之间的倾斜角度变化。

倾斜输入倍增器-允许用户自定义“倾斜贴图输入”对每个图块的倾斜角度的影响。


颜色参数:

灰度输入-允许用户自定义灰度输入对每个图块中灰度颜色的影响。

Input Pattern Grayscale(输入图案灰度)-允许用户对原始图案输入的影响进行最小化,以改变每个图块中的灰度颜色。

这是一个有趣的项目,如果我经常返回该项目并为每个节点添加更多功能,我不会感到惊讶。

学分:

我要特别感谢Bruno Afonseca,Jonas Olesen和Vincent Gault免费地在Substance Share上共享许多技术节点和工作流程-这在项目开始之初就对我有很大帮助。如果想学习,请查看他们的东西!

转载地址:

https://polycount.com/discussion/222331/ds-tile-random

获取方式 公众号后台

后台回复-----Tile

本期分享就到这里  我们下期见

感谢关注  更多精彩






[SD]___SubstanceDesigner节点改造_DS_Tile_Random的评论 (共 条)

分享到微博请遵守国家法律