跳转到内容

Blender 3D:从新手到专业/Cycles中的程序化眼球

来自维基教科书,开放世界开放书籍

之前学习过如何使用 Blender 内部渲染器仅通过程序纹理来建模眼球。本页将使用 Cycles 渲染器重新进行练习。

注意:本教程的 BI 版本依赖于 Musgrave 纹理的一个特性,即某些设置组合产生了用于对眼睛虹膜建模的径向脊的良好图案。虽然 Cycles 也包含一个 Musgrave 纹理,但我无法重现相同的效果。但是,Cycles 拥有一个功能更强大的材质节点系统,尤其是通过转换为极坐标并应用径向缩放,我能够仅使用简单的 Noise 纹理获得合适的径向脊图案。

为什么是程序化的?

[编辑 | 编辑源代码]

之前的教程创建像素风格的眼睛使用图像作为虹膜纹理,而不是通过复杂的操作来生成程序纹理。这简化了一些步骤,但也存在缺点。

  • 如何创建这种图像纹理?你是手绘的吗?如果分辨率不够高,或者图案或颜色不对,你需要重新制作它。
  • 它是一个单独的文件,你需要记住将其包含在你的项目中。Cycles 渲染器不(目前)支持将图像打包到.blend文件中。

正如你将在下面看到的,程序节点设置提供了许多调整参数的机会,可以产生微妙(或不那么微妙)不同的效果。这在无需付出太多努力的情况下就能实现极大的多样性——当然,这在完成了节点设置之后。

创建网格

[编辑 | 编辑源代码]

本练习的建模部分与 BI 版本完全相同。如果你已经拥有用于 BI 教程的网格,请随意重复使用它并跳过下一部分。否则,请继续阅读。

网格将由两个经过修改的 UV 球组成,一个略微位于另一个球的内部。外部网格将使用一种既透明又反光的材质;在眼睛的前部,它将代表角膜(光线进入眼睛的地方),而在眼睛的其余部分,它将为眼球添加光泽度。内部网格将构成眼睛的其他三个主要部分,这些部分从外部可见

  • 巩膜,眼球的白色部分
  • 虹膜,环绕着实际让光线进入的孔的各种颜色的肌肉环,以及
  • 瞳孔,光线进入眼球内部的孔。

在对象模式下开始。删除默认的立方体。 SHIFT + A 添加一个新的 UV 球形网格;24 个环和片段就足够了。切换到正面视图  NUM1 ,并选中工具架底部面板中出现的“与视图对齐”框。这将是内部网格。

 TAB 进入编辑模式;确保整个网格被选中; SHIFT + D 复制它,然后 S 稍微放大它以创建外部网格。(你可能会发现使用线框 Z 模式更容易操作。) H 暂时隐藏你刚刚创建的外部网格,以便更容易操作内部网格。

选择 RMB 内部网格正面的单个顶点。现在按  NUM+ 四次以扩展选择范围,包括从这个正面顶点开始的第一个四个环的顶点。选择范围应该与右侧所示类似。

现在使用序列  S   Y   0KEY   ENTER 将选定的顶点展平。接下来,使用  G   Y 减少 resulting flattened disc 的凸出部分,并将其稍微移近眼球的其余部分。结果应该与右侧所示类似。

这足以塑造内部网格。现在开始塑造外部网格。取消隐藏它  ALT + H 。选择 RMB 仅选择最前面的顶点。在“网格”菜单中,将“比例编辑”设置为“连接”,将“比例编辑衰减”设置为“根”。现在使用  G   Y 将选定的顶点向前移动,同时使用鼠标滚轮调整比例编辑影响范围,直到你制作出一个与人类角膜比例合适的凸出部分。

好的,建模工作完成了,现在开始有趣的部分——在 Cycles 中创建材质。

虹膜的 UV 贴图

[编辑 | 编辑源代码]

虹膜图案需要正确放置,以便径向条纹以中心对称的方式排列。为了控制虹膜纹理的放置,我们需要设置 UV 贴图。

将你的布局设置为包含 3D 视图和 UV/图像编辑器视图,如右侧所示。在图像编辑器中创建一个新图像;这只是一个用于 UV 展开的虚拟图像,因此它的尺寸和内容无关紧要。

确保你在 3D 视图中处于编辑模式。 H 隐藏外部网格,以减少混乱。切换到正面视图  NUM1 。确保( A 一次或两次)最初没有选择任何东西。选择构成虹膜的顶点环,如右侧所示。打开 U nwrap 菜单,并选择“从视图投影(边界)”。这应该会展开选定的顶点,就像它们在正面视图中显示的一样,并将它们整齐地放置在虚拟图像的边界内,如右侧截图中的下窗口所示。

创建材质

[编辑 | 编辑源代码]

对于外层网格,您可以设置一个与之前在 Cycles 中的玻璃材质 中讨论的类似材质。唯一的区别是,不要使用 1.45 (玻璃) 的 IOR,而是使用 1.33 (水) 之类的值,因为水是透明组织 (以及所有人类组织) 的主要成分。

眼白的材质需要一点红色的血管纹理,但不要太多。这里血管网络由一个具有非常高扭曲设置的波纹纹理节点提供。然后将其通过一个亮度/对比度节点:增强对比度以锐化边缘,并降低亮度以使血管非常苍白。然后将此值馈送到混合 RGB 节点,以在眼球主要部分的白色和血管的红色之间混合。

原始教程在此材质中添加了一些光泽度。但是,由于角膜材质已经很光亮,并且已经覆盖了整个眼球,因此在此添加光泽度似乎是多余的。

这个很有趣,因为它需要最复杂的 Cycles 节点编程。

如前所述,我们必须将一些纹理坐标从 直角坐标 转换为极坐标。右侧的节点组将实现这一点。看起来很复杂!但是,如果你一步一步地进行,就会更容易理解。

  • 左上角的两排各 3 个节点 (每个节点包含一个减法,然后是两个乘法节点) 接收传入的 X (上排) 和 Y (下排) 值,减去 0.5 以将范围从 0..1 转换为 -0.5..+0.5,乘以 2 使范围现在变为 -1..+1,并取每个值的平方。然后将这些值相加并取结果的平方根 (0.5 次方),以给出点到原点的距离,范围为 0..1。换句话说,它正在计算方程 。这是节点组的 Mag 输出。
  • 最下面一排节点将 X 除以 Y (实际上应该是 Y 除以 X,但这对于我们的目的并不重要) 来计算斜率,然后使用反正切函数来获得此斜率的角度。此值以弧度表示,因此除以 1.571 ( 或足够接近) 以将其转换为 0..1 范围。这将成为节点组的 Angle 输出。

现在,我们在这个节点设置中使用上面的节点组。请注意“分离 RGB”和“组合 RGB”节点:它们不是分离/组合 RGB 颜色组件,而是XYZ 坐标组件。在这两种情况下,组件都是标量实数,因此从数学上讲,这种对分离/组合 RGB 函数的 (滥) 用是完全正确的。还要注意我们如何忽略 B 组件 (即 Z 坐标),因为我们只处理二维纹理。

分离出 X 和 Y 值后,这些值将通过我们上面创建的直角坐标→极坐标转换节点组。但是请注意,Mag 值如何通过除以 4 来径向拉伸纹理:这是获得虹膜纹理中径向脊线的秘诀。重新组合坐标组件后,它们用于控制噪声纹理,然后为虹膜材质提供凹凸贴图。

但我们还没完。 仍然有一些节点魔法需要施展,才能从虹膜的中心到边缘获得径向颜色渐变。为此,我们将需要另一个节点组,如右侧所示。它被称为“重新缩放”:它接收一个在输入范围内的值 (由“In Low”和“In High”输入定义) 并将其线性转换为输出范围 (由“Out Low”和“Out High”输入定义)。或者,使用数学符号 表示输入值, 表示输出值,以及 分别表示 In Low、In High、Out Low 和 Out High,此节点组实现了变换

现在,以下是如何将 Rescale 节点组添加到我们的虹膜材质节点设置中。我们使用它来转换 Mag 极坐标 (到中心的距离),然后使用它来驱动一个颜色渐变,该颜色渐变实际上控制着虹膜的漫射颜色。在这里,我从浅绿色到深绿色进行了渐变;您可以随意替换您选择的任何眼睛颜色和渐变。

在这里,我只使用了一个简单的黑色漫射材质。原始教程添加了一些红色血管的微妙暗示,类似于巩膜;如果你想,你可以在此处进行操作,但我认为效果太微妙,看不出来,所以我不费心了。

最终结果

[编辑 | 编辑源代码]

最终渲染结果可能如下所示。

参数调整

[编辑 | 编辑源代码]

上面的节点设置相当复杂,但它们提供了许多实验的机会。

例如,在巩膜材质中,尝试调整亮度/对比度设置,看看它如何影响结果。让红色血管更明显,眼睛就会看起来充血!

在虹膜材质中,你可以改变眼睛的颜色(当然)。但也可以尝试改变径向条纹:看看它们更大时是什么样子。我为什么把“重新缩放”节点放在那里?这是为了让你增加或减少颜色渐变的效果,而无需编辑渐变本身。

华夏公益教科书