上周我发布了一期视频,演示了如何沿着物体的 Z 轴映射 Color Ramp,包括局部模式和全局模式,从而在物体高度方向创建渐变效果。


本教程不提供中文配音。您可以在下方观看英语配音的视频,并选择中文、英文或其他语言的字幕。视频下方提供了翻译成中文的文字稿。


视频文字稿

大家好!上周我发布了一期视频,演示了如何沿着物体的 Z 轴映射 Color Ramp,包括局部模式和全局模式,从而在物体高度方向创建渐变效果。

在本教程中,我会基于这种基于轴向映射的概念,同时创建颜色渐变以及两个 Shader 之间的混合。这里的具体示例是一个彩色进度条,但演示的方法同样可以应用在其他场景中。具体来说,通过水平移动控制用的 Empty,我们可以看到进度条推进,并显示从红色经过黄色再到绿色的渐变效果。

首先,我来展示一下初始场景设置。场景中有一个 Plane 对象,它沿自身的 X 轴被缩放拉长了一些。为了方便,我把对象的 Origin 放在了左上角。同时,我已经对这个 Plane 应用了旋转和缩放变换。之后这个 Plane 不会再被修改。

场景中的另一个对象是一个 Empty,它位于 Plane 的 Origin 位置,并且同样已经应用了旋转和缩放变换。这个 Empty 将用于控制进度条的进度,而整个效果都会完全通过 Plane 的 Material 实现,不会修改 Plane 的几何体。

Plane 的 Material 需要具备两个功能。首先,我们需要沿着 Plane 的 X 轴定义渐变颜色。完成后,我们还要让 Empty 右侧的所有部分变为透明,而左侧部分则显示我们定义的渐变颜色。

先从整个对象的颜色渐变开始。和上周的教程一样,我们需要一个 Texture Coordinate 节点、一个 Separate XYZ 节点,以及一个 Color Ramp 节点,并按顺序连接它们。

我们使用 Texture Coordinate 节点中的 Generated 输出,因为我们关心的是 Plane 自身的尺寸。在 Separate XYZ 节点中,我们使用 X 输出,它代表 Plane 的局部水平轴。

现在需要将 Color Ramp 连接到一个 Emission 节点,因为我们希望这个 Material 始终可见,不受光照影响。所以我们把默认的 Principled 节点替换为 Emission 节点。

接下来可以根据自己的需求自定义 Color Ramp。在我的例子中,我在左侧放置红色标记,中间放置黄色标记,右侧放置绿色标记,并使用 Ease 插值,这样红色和绿色就不会只局限在两端。

为了只给 Empty 左侧部分着色,并让右侧透明,我们需要在编辑器中再添加两个 Shader 节点。具体来说,是一个 Transparent 节点和一个 Mix Shader 节点。注意一定要选择 Shader Mix 节点,而不是 Color Mix 节点!

然后,将 Emission 节点连接到 Mix Shader 节点的第一个 Shader 输入。再将 Transparent 节点连接到 Mix Shader 节点的第二个 Shader 输入,并将 Transparent 设置为纯白色。

接着,把 Mix Shader 节点的输出连接到 Material Output 节点的 Surface 输入。此时,我们已经得到一个半透明的 Material,并带有从红色经过黄色到绿色的渐变效果。

在 Mix 节点中,无论是 Color 还是 Shader,只有当 Factor 为 1 时,第二个输入才会被完全使用。因此,我们需要一种方法,让 Empty 位置右侧区域的 Factor 等于 1。

所以,在编辑器中再添加一个 Texture Coordinate 节点和一个 Separate XYZ 节点,并将 Separate XYZ 节点的 X 输出连接到 Mix Shader 节点的 Factor 输入。

不过这一次,我们使用 Texture Coordinate 节点中的 Object 输出,并在节点的 Object 字段中指定这个 Empty。

现在,生成的 Material 就会像预期那样,在 Empty 右侧透明,在左侧显示颜色。不过我们会发现,Material 在 Empty 右侧很远的位置依然保持半透明。

为了让到 Emission 节点的切换在 Empty 位置处变得非常锐利,我们需要在 Separate X 与 Mix Shader 节点之间插入一个 Math 节点,并将其设置为 Greater Than 模式,Threshold 值设为 0。

这样,Greater Than 节点会读取来自 Empty 的 X 坐标,并对所有大于该坐标的值输出 1。随后,Mix Shader 节点就会立即切换到第二个 Shader,也就是 Transparent 节点。

最后,我们可以将 Empty 设为 Plane 的子对象。这样一来,我们就可以在场景中随意移动 Plane,而 Empty 会跟随移动,同时我们仍然可以独立移动和制作 Empty 的动画。

本期教程到这里就结束了!和我大多数视频教程不同,目前这个教程还没有提供可下载的 PDF 版本。不过,你可以在视频简介中的链接页面找到我许多其他视频教程的 PDF 版本。无论如何,现在正是订阅频道并开启通知的好时机!我们下次见!

搜索教程

输入短语,或输入多个用逗号分隔的关键词进行搜索。

本站提供 Francesco Milanese 制作的 3D 模型、教程及计算机图形相关资源。3D 模型的使用许可可通过各模型页面上的链接前往第三方商店购买,并须遵守适用的许可条款。 Francesco Milanese — 意大利增值税号:06321250877。 联系方式:info@francescomilanese.com


高级隐私策略信息和cookie文件的使用