• 中文
    • English
  • 注册
  • 查看作者
    • 彩虹着色器制作

      彩虹着色器制作

      目标

      我开始为一个在 ARK 模组上工作的客户构建这个彩虹色着色器,他们需要复制那种传统的甲虫壳外观。Polycount 论坛上有一个非常科学准确的虹彩着色器,这是我的第一个方法,但它有相当多的问题,因为它是用Unreal的自定义 HLSL 节点编写的(由于 ARK 的引擎版本相当旧的),它远非艺术家友好。在这一点上,我知道我需要一种自定义方法,它可以在没有 HLSL 的旧引擎版本上工作,这导致着色器可以产生与 Polycount 版本相似的结果,同时以完全不同的方式构建。

      工作策略

      首先,我将简要概述我们将要构建的内容,然后解释它是如何工作的。首先,将有 5 个材质函数:3 个主要函数和 2 个辅助函数。生成颜色模式的 3 种方法是色调偏移、Rodrigues 旋转和 zucconi6 光谱。3个主要功能的前半部分完全相同,后半部分是特定于生成颜色的方法。

      彩虹着色器制作

      彩虹着色器制作

      因此,我最初的方法是通过基于 UV 的色调偏移来处理彩虹色,因为我想尝试在没有预烘焙纹理的情况下创建颜色。后来我将其扩展为包括与紫外线无关的方法。使用色调偏移来产生彩虹渐变是我多年前学习的一个技巧,在这里使用它似乎是一个很好的应用程序。最初,此方法仅受紫外线限制,然后我将其调整为不受该限制的工作。话虽如此,3 种方法中有 2 种包含用于在 UV/3D 坐标中工作的开关,而 Rodrigues 仅在 3D 空间中工作。

      这是我最初的原型图,然后将其扩展到现在的系统。

      彩虹着色器制作

      彩虹着色器制作

      这是应用于测试网格的结果。

      彩虹着色器制作

      彩虹着色器制作

      这是一个好的开始,虽然还不够,但它激励了我继续前进,因为我觉得自己走在正确的轨道上。所以我开始添加一些功能,比如无紫外线方法和光源支持。

      基础

      首先,我们必须通过获取像素法线(或转换到世界空间的指定法线)和相机矢量的点积来生成类似菲涅耳的效果。从那里,我们生成一个半向量,传统上用于镜面高光,但在这种情况下,我们使用它来确保彩虹色不会同时应用到所有地方,而是基于指定光的方向来源。

      彩虹着色器制作

      彩虹着色器制作

      这是 3 个主要功能中的每一个的前半部分。我现在想做的是覆盖 2 个辅助函数,然后再回到完成 3 个主要函数。

      辅助函数

      第一个辅助函数是罗德里格斯旋转公式。我在 UDK Polycount 论坛上遇到了这个问题,所以感谢发布它的用户。该公式在给定旋转轴和旋转角度的情况下旋转欧几里得矢量。更多信息在这里

      彩虹着色器制作

      将其实现到它自己的 main 函数中如下所示:

      彩虹着色器制作

      接下来是zucconi6渐变函数,这将产生明显的最佳颜色结果,所以这是我最喜欢的三种方法中的一种。此函数以创建此渐变代码的人 Alan Zucconi 命名。我强烈建议阅读关于薄膜的系列,改进彩虹和他提出的任何其他内容,因为他很棒。

      现在,他在那篇文章中提供的代码是专门针对UnityShadertoy的,我使用的是 UE4。虽然您可以使用自定义 HLSL 节点将 Shadertoy 代码移植到 UE,但事实证明这很烦人,因为它具有辅助函数。我最终所做的只是将 Shadertoy 代码移植到 UE 的节点图中,得到了非常相似的结果,我很满意。

      我不会提供此屏幕截图,因为某些节点的颜色值非常具体,并且无法在一个图形屏幕截图中包含所有这些信息,所以我所做的是为该函数创建了一个 pastebin 链接您所要做的就是 Ctrl + A, Ctrl + C 在该页面底部的文本,然后 Ctrl + V 进入您的图表,它会立即出现。

      这是代码产生的梯度。

      彩虹着色器制作

      这就是如何将函数实现到它自己的主函数中:

      彩虹着色器制作

      最后,我们有了 hueshift 方法。这是我尝试的第一种方法,UV 版本是我在原始帖子/视频中应用于汽车的方法。

      彩虹着色器制作

      这就是所有功能,这就是您如何将其中一个功能实现到材质中。对于半向量(光源支持),您可以将光源的旋转应用于蓝图中的参数集合。请记住,这只适用于一盏灯。

      彩虹着色器制作

      就汽车而言,我以加法方式使用了 UV 绑定函数类型(在基色上使用 add 而不是乘法)并从函数中获得了一些非常好的结果。在我看来,这就是功能发挥作用的地方。

      彩虹着色器制作

      应用于材质的 z6 彩虹色的最终结果

      加起来

      总而言之,这只是将简单的相机/法线向量 + 光照支持输入渐变,所以在一天结束时,您可以使用 UE 的曲线工具创建您想要的任何渐变并输入这些主要功能的前半部分进入曲线并具有您想要的任何颜色。话虽如此,能够使用这些功能即时生成不同的颜色是非常方便的,至少对我来说是这样。

    • 0
    • 0
    • 0
    • 218
    • 请登录之后再进行评论

      登录
      • 大版主
      • 小版主

      暂没有数据

      暂没有数据

    • 发表内容
    • 实时动态
    • 偏好设置
    • 到底部
    • 单栏布局 侧栏位置: