UDK材质简介(下)

修改
鏉ユ簮: 上帝宝贝 浏览 13530 日期 2011-08-29 0

朱峰社区评论:我们接着上节课的内容继续来学习。这节我们讲材质的创建和表达式方面的知识!

现在,您已经学会如何通过平移、旋转和缩放来调整贴图了。在下一指南中,我们将研究如何对齐贴图,使其能够无缝接合,当然条件是您的贴图本身就是无缝设计的。

指 南6.7——使用表面属性窗口对齐贴图

1. 继续上一指南,或者打开配套DVD本章内容中的指南10-7地图文件。

2. 若您进行过前一指南的操作,则房间中的地板可能与关卡中的其它所有贴图不再对齐了,也就是说,在某些地方可能出现了一些接缝。我们可以使用表面属性中的Alignment(对齐)组来解决这一问题。

通过从主菜单栏中选择 View > Surface Properties 开始操作。

3. 让我们从修正地板开始。当您有多个相邻的地板表面大小不一样但都使用同样的贴图时,这个技巧将会特别有用。

点击其中的一个地板表面,然后右击透视视口,并从关联菜单中选择 Select Surfaces > Adjacent Coplanars 。这将选中所有与最初选中表面相邻的地板表面。

图6.100——在此情况下,选择Adjacent Coplanars(相邻共面)将会选中所有的地板表面。

4. 在表面属性窗口中,找到Alignment(对齐)组并选择Planar(平展延伸),然后点击位于此组内的Apply(应用)按钮。这将会在所有选中的表面上应用一个单一贴图平延。对于以无缝方式进行设计的贴图来说,这种技术将消除各个选中表面之间的接缝。

图6.101——选择Planar(平展延伸)并点击Apply(应用)。

5. 现在让我们花点时间将所有的贴图调整重设回默认设置。右击透视视口画面,在关联菜单中选择 Select All Surface 。

图6.102——选中关卡中的所有表面。

在表面属性窗口中,选择Default(默认)对齐方式并点击apply(应用)。这将重设所有的贴图调整,使其恢复到与BSP首次创建时相同的数值。

图6.103——应用所有选中表面回到默认贴图方式。

在对齐组中还有两种其它的贴图方法;Box(盒体)方法在六个方向上应用平展贴图,特别适合为立方体形状房间进行贴图;Face(面)方法在本书成书过程当中还无法正常工作。

6. 在我们关闭表面属性窗口之前,再看一下Options(选项)区域,在这里可以控制贴图在U和V方向上的平铺。请花点时间进行一些调整,研究一下其工作原理。

[next]

7. 保存当前地图。

<<<< 指南结束

既然您已经学会了使用表面属性窗口来调整贴图的放置的方法,那就让我们再来简单了解一下贴图对齐模式(Texture Alignment Mode),它能够为您的设计提供更直观(但是不太精确)的贴图调整。

指 南6.8——使用贴图对齐模式

1. 继续上一指南,或者打开配套DVD本章内容中的指南10-8地图文件。

2. 在您的地图中选中一个表面(选中何者无关紧要),点击工具栏中Geometry Mode(几何体模式)按钮正下方的Texture Alignment Mode(贴图对齐模式)按钮。

3. 现在您会看到在表面上显示出了一个坐标控件(widget)(请确保Show/Use the Widget(显示/使用控件)按钮是激活的!),它与您当前在工具栏上选中的变换控件相对应。

图6.104——当前表面上可以看到一个特殊的二维平移小控件。

4. 仔细研究如何使用平移控件(Translation Widget)在表面上移动贴图。旋转控件(Rotation Widget)允许您进行贴图旋转,而缩放控件(Scale Widget,一致与不一致)使您能够改变贴图的大小。

图6.105——本图中可以看到旋转控件是如何用来旋转贴图的。

5. 操作完成后,记得可以通过使用表面属性窗口的Default alignment(默认对齐)来复位所有的改动。在继续学习之前请先进行复位。

图6.106——所有的表面现在都已经复位了。

6. 操作完成后保存对地图的改动。

<<<< 指南结束

现在您已经学会了创建一个基本材质的方法,并学习了对贴图进行某些简单的对齐调整的两种方法。现在让我们进入下一阶段。通过运用一个凹凸偏移(BumpOffset)表达式来增强材质的外观效果。此表达式是对法线贴图的补充,能够使贴图表现出表面的凹凸的真实效果效果。

指 南6.9——运用BumpOffset(凹凸偏移)表达式

1. 继续前一指南, 或者打开配套DVD光盘的本章文件包中打开指南10-9材质文件。或者打开材质编辑器,找到 指南6.4中创建的mat_BrickWall材质并打开。

2. 引入一个新的BumpOffset(凹凸偏移)表达式,并将其放在漫射贴图采样的右侧。

图6.107——BumpOffset(凹凸偏移)表达式已添加至表达式窗口中。

[next]

3. BumpOffset(凹凸偏移)是利用法线贴图的高度信息使贴图的UVs发生偏移的。将BumpOffset(凹凸偏移)表达式输出端连接至漫射贴图采样表达式的UVs输入端上。

图6.108——图中可以看到BumpOffset(凹凸偏移)表达式已连接至漫射贴图采样的UVs端上。

注意: 此时您的材质将被破坏,并显示一条错误信息。这是因为BumpOffset(凹凸偏移)需要一个高度(Height)输入值,在下一步骤中我们将进行学习。

4. 将法线贴图的贴图采样表达式中的Alpha输出端(白色标签)连接至BumpOffset(凹凸偏移)的高度(Height)输入端。在此我们使用了Alpha值而不是RGB值,因为高度(Height)输入值需要一个一维向量参数,而不是通过RGB数据提供的三维向量。

暂时 不要 应用您的改动。

图6.109——法线贴图的alpha输出端已连接至BumpOffset(凹凸偏移)表达式上。

5. 在应用更改之前,移动透视视口中的相机使之紧贴一面墙壁,并与之形成一个仰视角度。这有助于观察BumpOffset(凹凸偏移)所产生的变化。

安放好镜头以后,点击材质编辑器中的Apply Changes(应用更改)按钮,并注意观察透视视口中的情况。您会突然发现材质变得坑坑洼洼了。这一改变非常惊人!

图6.110——如果仔细观察,您会发现砖块比以前更有深度感了。

6. 保存文件包。

注意: 在完成此指南时,您会发现材质编辑器会高亮显示某些表达式,并在表达式窗口顶部出现一条信息“Maximum texture dependency length:1”。这没关系,它只是提示Texture Sample所依赖的表达式的数量。在当前情况中是指BumpOffset表达式,它为贴图采样提供输入信息。

<<<< 指南结束

BumpOffset(凹凸偏移)表达式提供了一种非常酷的效果,使您的材质看起来更加逼真。现在我们要享受一下改变材质所得到的乐趣了。我们使之具有从砖块之间透射出光照的效果,然后基于正弦波原理模拟出光源跳动的效果。同时,我们要保持砖墙的原貌;并不是每一面墙的砖缝中都会透出光源来。因此要首先复制一下当前材质,从而能够创建出一个具有特殊效果的个别版本。

指 南6.10——复制并添加砖墙材质的特殊效果

在本指南中将添加许多不同的内容,因此要非常认真地学习各个步骤和子步骤!另外,在各个区域中,您需要重新安排表达式图标的位置来腾出空间。相信您可以独立完成这项工作。

[next]

1. 继续前一指南,或者打开配套DVD本章内容中的指南6-9文件包。

2. 首先,我们要复制一下现有材质。按下列步骤进行:

a. 在Generic browser窗口中选择mat_BrickWall材质并右点。

b. 在弹出的关联菜单中选择Duplicate(复制)。

图6.111——复制使我们能够在保留原材质的同时编辑一个新的版本。

c. 将Name(名称)属性改为mat_GlowBricks。新建一个砖墙材质。

图6.112——现在可以在Generic browser中同时看到这两个材质。

3. 在材质编辑器中打开mat_GlowBricks材质。从为砖墙裂缝放置一个非常简单的发光效果开始。按下列步骤进行:

a. 首先,我们需要一个贴图,它在砖块区域是黑暗的,而在砖缝是发光的。现在我们没有这样的贴图,但是能够从法线贴图的alpha通道中做一个出来。不过,法线贴图的alpha通道产生的效果正好与之相反;砖缝是黑暗的而砖块是明亮的。

为修正此效果,我们要引入一个新的一减去(OneMinus)表达式,并将法线贴图贴图采样的输出端连接至一减去(OneMinus)表达式的输入端。如果您将一减去(OneMinus)表达式的输出端连接至材质的自发光通道,就会发现整个材质都发出了强光,虽然砖缝处发出的光最明亮。

图6.113——图中能看到一减去表达式连接至材质后产生的材质结构。

4. 我们需要将注意力转向自发光(emissive)通道。据此目的,我们将使用求幂值(Power)表达式。

a. 生成一个新的求幂值(Power)表达式,并将一减去(OneMinus)表达式的输出端连接至其基数(Base)输入端。

图6.114——现在我们创建了一个新的求幂值表达式。

b. 创建一个常量表达式并将其输出端连接至求幂值(Power)表达式的指数(Exp)输入端。

图6.115——一个新的常量表达式已连接至求幂值表达式的指数端。

c. 将求幂值(Power)表达式连接至自发光(Emissive)通道。材质将暂时变成黑色,因为常量表达式的默认值为0。

图6.116——求幂值的输出端已连接至材质的自发光通道。

d. 设置常量表达式的R属性为40。这将使光的发射只集中于砖缝处。

图6.117——一旦您将常量表达式的值设置为40左右,强光的发射将只集中于砖缝处。

[next]

5. 这时会碰到一个小问题。如果在预览窗口中旋转材质的话,您会注意到发光的砖缝好象“漂浮”于实际砖缝之上了。我们需要使用法线贴图上的BumpOffset(凹凸偏移)表达式来对其进行校正。但是我们已经使用过法线贴图来创建凹凸偏移效果了。这意味着如果我们将BumpOffset(凹凸偏移)表达式与法线贴图的贴图采样表达式的UVs端相连接的话,就会出现一个死循环状态,导致错误的发生。取而代之的是,我们使用一个新的贴图采样表达式来解决此问题。为此请按下列步骤进行:

a. 选择包含法线贴图的贴图采样表达式,按Ctrl-C键然后再按Ctrl-V键进行复制出一个副本。

图6.118——法线贴图的贴图采样表达式已经复制完成。

b. 将新贴图采样表达式的Alpha输出端连接至一减去表达式输入端,覆盖现有的连接。这时材质并没有发生任何变化。

图6.119——使用新建贴图采样表达式的Alpha端替换当前与一减去表达式的连接。

c. 将凹凸偏移表达式的输出端连接至新贴图采样表达式的UVs输入端。您会看到发光的砖缝已经贴到凹凸偏移后的砖缝上了。

图6.120——发光砖缝已经正确放置。

6. 现在我们需要给这些发光砖缝添加一些色彩。使用下列方法添加一个向量参数表达式来实现此目的:

a. 新建一个向量参数表达式 。将其默认值(DefaultValue)设置为任意颜色。这里我们使用鲜绿色。

图6.121——添加了一个含有鲜绿色的向量参数表达式。

b. 创建一个新的乘法表达式。将向量参数表达式的输出端连接至乘法表达式的B输入端。

图6.122——新建的乘法表达式的B输入端从新建的向量参数表达式中接收数据。

c. 将求幂值(Power)表达式的输出端连接至乘法表达式的A输入端。

图6.123——将原始的幂值与新建的VectorParameter(向量参数)的输出值相乘。

d. 将乘法表达式的输出端连接至材质的自发光通道。

图6.124——如图所示,新建的乘法表达式最终连接至材质。

7. 我们要做的最后一件事是再次使用一个乘法表达式以加强发光效果:

a. 选择前一步骤中创建的乘法表达式,用Ctrl-C和Ctrl-V对其进行复制。将最初的乘法表达式的输出端连接至新建乘法表达式的A输入端。

图6.125——复制先前的乘法表达式,所有的图标已重新放置。

b. 用同样的方式复制常量表达式(如果您喜欢的话也可新建一个)。

[next]

c. 将新建常量表达式的输出端连接至新建乘法表达式的B输入端。

图6.126——新建常量表达式已连接至乘法表达式。

d. 将新建乘法表达式的输出连接至自发光通道。

图6.127——新建的增强效果乘法表达式已连接至材质的自发光通道。

e. 将新建常量表达式的R属性设置为任何产生合适发光效果的数值。这里使用9。

图6.128——将最终输出值乘以一个9左右的乘数将使发光砖缝显得更为明亮。

8. 最后,让我们创建一个系统,使得发光缝隙能够随时间变换进行闪烁。这需要构建一个正弦波。众所周知,正弦波的值在1到-1之间,因此我们要对波形进行数学校正,将幅值范围控制在0.25到1之间。数学表达式如下所示:

((Sin(time)) * 0.375) + 0.625

下列所述为如何构建一个网络来定义上述的表达式:

a. 创建一个正弦表达式(Sine),再创建一个计时表达式(Time) 。然后将计时表达式的输出端连接至正弦表达式(Sine)的输入端。

图6.129——正弦和计时表达式都已添加至表达式窗口中。

b. 创建一个乘法表达式(Multiply)以及一个常量表达式(Constant) 。然后将新建常量表达式的R值设为0.375,并将其输出端连接至乘法表达式的A输入端。

图6.130—— 一个值为0.375的常量表达式和一个新建的乘法表达式节点已添加完毕。

c. 将正弦表达式(Sine)的输出端连接至乘法表达式的B输入端。

图6.131——现在将正弦表达式的值乘以0.375。

d. 您或许已经发现0.625就是0.375反相值(和正好为1)。这意味着我们可以简单地使用一减法表达式得到所需的数值。

创建一个一减去表达式以及一个加法表达式。

e. 将常量表达式的输出端连接至一减去表达式的输入端。然后将一减去表达式的输出端连接至加法表达式的A输入端,乘法表达式的输出端连接至加法表达式的B输入端。

图6.132——已经添加了一个新的一减去表达式并与新建的加法表达式连接完毕。

f. 马上就要完成了此操作了。现在只需要将这个新建表达式网络的结果乘入材质中。

新建一个乘法表达式,将加法表达式的输出端连接至A输入端,并将当前已连接至材质自发光通道的乘法表达式的输出端连接至新建乘法表达式的B输入端。

图6.133——新建的乘法表达式用来将新建的表达式网络结合至现有的材质中。

[next]

g. 最后一步是将新建的乘法表达式的输出端连接至材质的自发光通道。

图6.134——所有的表达式都连接无误。

9. 应用材质的更改,并保存文件包。

<<<< 指南结束

现在处于砖缝中的光源每秒种发生一次跳动。此材质示例就是本节迄今为止我们所做的全部工作。不过您也可以自行对其进行改进。在下一示例中,我们将使用同样的贴图创建一个全新的材质,但是这一次要使用一个更有技术的表达式网络,因为将要用到基于像素深度一些技术,也就是说玩家与给定表面之间的距离。

指 南6.11——材质距离引起的颜色变化

1. 在本指南中,我们将开始创建一个复杂的材质,根据玩家与给定对象之间的距离远近,对其进行各种颜色的混合。

图6.135——此贴图效果是我们的最终努力方向。

打开配套DVD本章内容中的PinwheelLevel.umap文件。它将为我们提供了一系列的长廊材质,以供测试创建效果。

图6.136——PinwheelLevel设计图包含很长的走廊,可将其用于材质的展现。

2. 打开Generic browser,使用学得的技巧新建一个材质,并将下列数据键入至New(新建)对话框中:

  • 文件包(Package): IntroToMaterials
  • 组(Group): Materials
  • 名称(Name): mat_DistColor
  • 组件工厂(Factory): Material

弹出材质编辑器。

图6.137——材质属性按如图所示内容进行设置。

3. 在此制定一份制作计划在材质创建进程中十分重要。当前,我们的目标是将在距离基础上进行两种颜色的混合。让我们先从这两种颜色的创建开始。不过这次我们将使用一种新方法来创建适当的表达式 。

a. 右击表达式窗口的空白区域,卷动长长的关联菜单,从中选择 New VectorParameter 。

图6.138——新建向量参数选项靠近关联菜单的底部。

b. 在表达式 窗口中选择VectorParameter(向量参数)图标,按下Ctrl-C和Ctrl-V键来复制并粘贴出表达式的一个副本。

c. 按住Ctrl键,将新建表达式 移动到先前表达式的上方,然后将其DefaultValue(默认值)颜色改成任意颜色。此时我们使用橙色。

图6.139——新的向量参数已复制完成,其值也已修改完毕。

d. 点击每个图标中的黑色方框打开实时预览,以看清各表达式中运用的颜色。此时其中一个表达式应当包含黑色,而另一表达式颜色可以为任意。操作完成后关闭每个节点的实时预览状态。

[next]

图6.140——实时预览已经激活,可以看到每个向量参数节点中所包含的颜色了。

4. 好了,我们已经创建了这两种颜色,现在需要找到一种颜色混合的方法。深度会成为最终考量因素,但是当前我们仅研究如何进行颜色混合。按照下列步骤建立 并连接所需的表达式:

a. 在表达式 窗口中添加一个LinearInterpolate(线性插值)表达式,可以使用右击的方法或从表达式列表中直接拖放。将此线性插值表达式放在两个向量参数的左侧偏下方。如有需要,将全部的三个表达式图标向远离主材 质节点的方向移动,同时按住Ctrl和Alt键能够进行框选,然后按下Ctrl键就可使用左键拖曳所有选中项了。

图6.141——新建的线性插值表达式应按图中所示的位置进行放置。

b. 从橙色向量参数表达式图标的RGB输出框(仅黑色的输出框)使用左键拖出并连接至线性插值表达式图标的A输入端。然后再从线性插值表达式的B输入端使用左键拖至黑色向量参数表达式的RGB输出端。如图所示,两个方向可以进行任意连接。

图6.142——两个向量参数表达式已连接至线性插值表达式。

5. 混色效果表达式已经建立完毕,但是由于还没有在线性插值表达式的Alpha通道连接任何输入值,此时还不能正常工作,因为线性插值表达式的Alpha通道是控制两种颜色进行混合的地方。 不过,我们需要使用基于深度的方法来控制alpha,或者更精确地说,基于玩家与像素之间的距离来控制此alpha值。现在请按照下列步骤完成此操作:

a. 在表达式窗口中添加一个PixelDepth(像素深度)表达式,将其置于两个向量参数表达式的正下方。将其输出端连接至线性插值表达式的Alpha端,然后再将线性插值表达式的输出端连接至材质的自发光通道。

图6.143——已添加了一个新的PixelDepth(像素深度)表达式,且此表达式网络已连接至自发光通道。

这将导致您的材质立刻变为黑色(不过请别担心,它仍在原处)。原因是像素深度表达式输出的值在0到16777215之间。但是线性插值表达式的 Alpha值却需要在0到1之间。同时,我们也不需要将0到1600万的数值归一化至围0到1,否则我们只有在距表面1600万Unreal单位时才能看到第二种颜色!解决的办法是将值归一化至一个指定距离,如此我们就能设定一个自定义的深度,用以混合第二种颜色。

为此我们首先需要确定最优化距离,然后只需用给定像素的深度值除以这个值即可。在本例中我们使用1200单位。

[next]

b. 创建一个常量表达式,将其置于像素深度表达式的正下方。在属性窗口中将R值设为1200。

图6.144——新建一个值为1200的常量表达式,按图示方式放置。

c. 创建一个除法表达式,并将其置于像素深度表达式与常量表达式的左侧。您可能需要将像素深度表达式与常量表达式稍稍向右移动以腾出空间。

d. 将像素深度表达式的输出端连接至除法表达式的A输入端,然后再将常量表达式的输出端连接至除法表达式的B输入端。

图6.145——新的Divide表达式用来除以距离1200。

e. 将除法表达式的输出端连接至线性插值表达式的Alpha输入端。

图6.146——新建的除法表达式已连接至网络。

6. 选中材质的主节点,在属性窗口中将光照模型属性设置为MLM_Unlit。现在的场景中并没有光照,这样可以节省一些额外的计算量。现在,如果用鼠标右键在材质编辑器的预览窗口中拖动,您可以看到采样球体在基于与视点镜头距离的基础上对两种颜色进行混合。

7. 点击材质编辑器顶部的Apply Changes(应用更改)按钮,然后关闭材质编辑器。

8. 将新建材质应用至关卡中的所有表面。最简单的方法是在透视视口中右击任意一个表面,然后从弹出的关联菜单中选择 Select all Surface 。选中所有表面后,只需点击 Generic browser中的新建 mat_DistColor 材质即可。

9. 将地图另存为一个新的副本,最重要的是保存您的IntroToMaterials文件包!

<<<< 指南结束

如果现在测试关卡,您应当会注意到“基于距离的颜色混合”系统的确很有效。然而,由于当前的墙面上无可见贴图,所以在移动时感觉不到自己是在运动中,除非走到长廊的尽头。这意味着我们的材质还需要变得更为复杂。在引入新的贴图并将其连接至材质之前,让我们研究一下如何通过注解的使用来理顺我们创建的材质。

注解使我们能够将材质分为各个部分并对其进行标注。在开始创建更为复杂的材质时显得尤为重要,并有助于您记忆材质中每个部分的作用,同样可以使得团队中的其它美工人员更简便地解读您创建的表达式网络。在下一指南中,我们将研究为材质添加注解的方法。

指 南6.12——在材质中放置注解

1. 继续前一指南,或者打开配套DVD本章内容中的指南6-12文件包。

2. 材质网络的结构组织要与下文中的配置相类似。框选当前材质中只用于基于深度的颜色混合的所有表达式。

[next]

3. 选中上述表达式,右击表达式窗口中的任意位置,然后从关联菜单中选择 New Comment 。在出现的对话框中将 Depth Blender 输入到Comment Text(注解文本)字段中。

图6.147——注解对话框使您能够为新建的注解框添加标题。

4. 您会看到一个巨大的包围所有表达式的黄色方框,在其顶部显示了标题。此框有一些非常有用的功能。首先,若按住Ctrl键并移动此框,就会发现所有方框之内的 表达式 都随之移动(当然,如果您原意的话仍然可以移动单个表达式)。放置于注解框内的任何表达式都会随之一起移动。

图6.148——选中表达式现已封闭于注解框中了。

同时您会注意到在注解框的右下角有一个小的黑色三角块。您可以用它来调整框的大小,或者囊括更多的表达式或将其中的某些表达式排除在外。

尝试移动注解框,熟悉其工作方式的。操作完成后,点击Apply Changes(应用更改)按钮保存对材质的改动,然后保存文件包。

小技巧: 另一种保持理顺材质结构的好方法是为表达式编写描述项。所有的材质表达式 都包含一个称为Desc或Description的属性,您可以用它来编写短小的注解,以说明此特别表达式在网络结构中的功能。

图6.149——当在Desc属性中添加了描述项时,此描述项将出现在于表达式图标的正上方。

<<<< 指南结束

正如先前所议,使用当前材质来检测任何运动都是非常困难的。我们需要在墙上添加某种贴图,使我们能够在移动时看到材质从旁掠过的景象。我们仍将使用本章之前创建的砖墙材质中的材质来开始学习,当然此后您可以很容易地用其它贴图将其替换并获得各种各样的酷炫效果。下一指南中,我们准备将贴图添加至新材质中。

指 南6.13——将贴图连接至深度混合材质

1. 现在我们紧接指南6.12继续学习,此时已将贴图添加至深度混合材质(Depth Blend material)中了。您可以从当前创建的材质着手,或者打开配套DVD本章内容中包含的指南10-12文件包。操作完毕后,双击在指南6.3中制作的 mat_DistColor 材质。在材质编辑器中打开此材质。

2. 我们需要在材质内部进行采样。按下列步骤进行操作:

a. 首先拖曳一个新的贴图采样表达式至材质编辑器的表达式窗口。

图6.150——新的贴图采样表达式已添加进来。

b. 现在我们需要把贴图与此新建贴图采样表达式关联起来。首先确保在Generic browser中选中贴图。您可以通过查看贴图周围的淡绿色边框来检验是否将其选中。

[next]

c. 接下来,在材质编辑器中选择贴图采样表达式,并在材质编辑器的Properties(属性)窗口中点击Texture Property(贴图属性),然后点击绿色箭头标识的Use Current Selection in Browser(使用浏览器中的当前选择)按钮 ICON 5.4 ,此按钮位于属性的右侧。现在贴图图像应该出现在贴图采样表达式中了。

图6.151——已为贴图采样表达式分配了适当的贴图。

注意: 此时的贴图比较暗。贴图采样表达式可能呈现出黑色。这很正常。

3. 现在终于可以在材质中计算贴图了。然而,我们需要将贴图连接至自发光通道,但是自发光通道的输入端已经连接至线性插值表达式了。因为此贴图只是用以增强混合效果的,我们将把这两个表达式相乘。按下述步骤完成此操作:

a. 新建一个乘法表达式节点,将线性插值表达式的输出端连接至乘法表达式的A输入端。

图6.152——已添加乘法表达式,并与线性插值表达式建立了连接。

b. 将贴图采样表达式的RGB(黑色标签)输出端连接至乘法表达式的B输入端。

图6.153——贴图采样表达式的输出端同样连接至乘法表达式。

c. 将乘法表达式的输出连接至材质的自发光通道,替换了先前线性插值表达式与之进行的连接。

图6.154——再将乘法表达式连接至自发光通道。

4. 应用更改,然后保存文件包。现在的贴图还是非常暗。通过新建一个乘法表达式,使当前输出值与一个常数值进行相乘以修正此问题:

a. 选择表达式窗口中的乘法表达式,按下Ctrl-C和Ctrl-V对其进行复制粘贴。将新建的乘法表达式置于先前表达式的左侧。您可能需要对材质表达式进行一些拖动,安排好合适的位置。请不要忘记可以通过移动整体注解框以节省时间!

图6.155——复制先前的乘法表达式,并重新安排表达式的位置。

b. 将第一个乘法表达式的输出端连接至第二个乘法表达式的A输入端。

图6.156——新建的乘法表达式将前一乘法表达式的输出值作为其输入值。

c. 现在我们需要一个常数值以增强砖块贴图的效果。从表达式列表中拖出一个新的常量表达式,将其放在新建乘法表达式的右侧,第一个乘法表达式的正下方。

图6.157——新建一个常量表达式,如图所示进行放置。

d. 在新建常量表达式的属性中,设置R值为50。

e. 将常量表达式的输出端连接至刚才新建乘法表达式的B输入端。

[next]

图6.158——选定的表达式已封闭于注解框中。

f. 将新建的乘法表达式连接至材质的自发光通道。

图6.159——新建乘法表达式为自发光通道提供输入数据。

5. 应用更改并保存文件包。现在的砖墙可以发出亮光啦!但是我们还有一个问题没有解决;砖块显得太小了一点。我们需要贴图表现得更为大些,也就是说,我们需要减少贴图在表面上的平铺次数。在上面的指南中,我们利用表面属性(Surface Properties )窗口来实现贴图的平铺功能。现在我们来学习如何使用TextureCoordinate(贴图坐标)表达式来完成此项工作:

a. 使用右击或表达式列表新建一个贴图坐标表达式 ,将其置于贴图采样表达式的右侧。

图6.160——添加一个新的贴图坐标表达式。

b. 将贴图坐标表达式的输出端连接至贴图采样表达式的UVs输入。

图6.161——贴图坐标表达式已连接至贴图采样表达式的UVs输入端。

c. 选中贴图坐标表达式,并在属性窗口中设置Tiling(平铺)属性为0.3。这将使砖块显得更大,因为贴图的平铺频度减小了。

6. 应用更改并保存文件包。

图6.162——现在砖块由于平铺值的减小而显得更大了。

<<<< 指南结束

现在我们所需要的贴图已经连接至材质并进行了调整,但还是存在一个小问题,黑色砖块贴图中包含了一定量的颜色信息。因为我们正在使用增强两种颜色混合强度的贴图,此颜色信息的存在将产生一个问题,它会使最终的颜色效果产生偏差。不过如果为了创建出自己的材质,此颜色差异能够控制在可以接受的范围内。 我们将向您展示如何通过使用颜色减淡表达式以解决此问题。同时也会引入一个菲涅尔表达式,为那些与玩家视角成一定角度的表面增加一种惊悚的阴暗效果。

指 南6.14——减淡贴图颜色并加入菲涅尔表达式

1. 继续上一指南,或者打开配套DVD本章内容中的指南10-14文件包。若还未打开,请双击指南6.13中制作的 mat_DistColor 材质。在材质编辑器中打开此材质。

2. 我们将用颜色减淡(Desaturation)表达式将颜色信息从贴图中移除。按下列步骤进行操作:

a. 新建一个的颜色减淡(Desaturation)。将其放在贴图采样表达式图标的左侧。按照惯例,需要拖动图标重新组织其布局。

图6.163——添加了一个新的颜色减淡表达式。

b. 我们要将此颜色减淡表达式进行连接,这将会打断贴图采样表达式与第一个乘法表达式(Multiply)的连接。然而,为了避免材质报错,我们要尽可能地保持现有的连接状态。

[next]

新建一个常量表达式(Constant),将其输出端连接至颜色减淡表达式的Percent(百分率)输入端。

图6.164——新建的常量表达式将数据输送至颜色减淡表达式的Percent(百分比)输入端。

c. 将常量表达式的R值设置为1,在此情况下相当于100%。

图6.165——贴图坐标表达式已连接至贴图采样表达式的UVs输入端。

d. 将贴图采样表达式的RGB输出端连接至颜色减淡表达式中未标注的输入端。

e. 最后,将颜色减淡表达式的输出端连接至当前与贴图采样表达式连接的乘法表达式节点的输入端,替换当前的连接。

图6.166——颜色减淡表达式最终插入到贴图采样表达式与乘法表达式连接的中间。

3. 现在您将获得来自颜色混合系统的所有颜色。不过这些颜色看起来还是有点单调。现在我们要使用菲涅尔表达式使得朝向玩家的表面变为黑色,将整个颜色系统变得更为有趣一点。

a. 新建一个菲涅尔表达式 ,将其放在深度混合注解框的左侧。可能需要再一次重新调整表达式图标的布局。

图6.167——添加了一个新的菲涅尔表达式。

b. 根据表面相对于相机位的角度,菲涅尔表达式的输出值在0到1的范围之间。直接面对相机的像素产生数值0,而与相机位垂直的像素将产生数值1。这意味着此处使用一个乘法器是最佳的选择。

通过拖曳或复制现有乘法表达式以新建一个乘法表达式。此新建乘法表达式将截断与材质自发光通道的连接,所以请适当调整表达式的位置。然而,请不要切断任何现有连接!

图6.168——通过拖曳或复制创建一个乘法表达式,按图示放置。

c. 将菲涅尔表达式的输出端连接至新建乘法表达式的A输入端。

图6.169——菲涅尔表达式将数据传输至新建乘法表达式的A输入端。

d. 请认真仔细地阅读此步骤!将当前连接至自发光通道的乘法表达式的输出端连接至新建乘法表达式的B输入端。

图6.170——如图所示,先前连接至自发光通道的乘法表达式现已连接至新建乘法表达式的B输入端。

e. 最后,将新建乘法表达式的输出端连接至材质的自发光通道。

图6.171——新建的乘法表达式最终连接至自发光通道。

4. 应用您的更改。您会注意到,材质明显变暗了,并且随着相机镜头的移动会投射出一个暗区。另外,所有正对着玩家的表面也变暗了。

保存您的文件包。

5. 材质好象变得太暗了。可以调整使贴图变亮的常数值来解决此问题。在前一指南中,我们的初始设置值为50。现在使其乘以一个7左右的因数,将其加亮到350。这会使可见砖块再一次发光。

[next]

图6.172——增加常量值将强化发光效果。

注意: 您当然也可以通过插入一个新的乘法表达式和新的常量表达式来实现。但是,这需要更多的计算量,而这些计算我们自己就可以完成!

6. 应用您的更改并保存文件包。

<<<< 指南结束

我们的材质确实将要成形了。不过,我们要给它再增加一点 “3D”的感觉。同时,我们当前使用的是一个具有强烈自发光通道的无光照材质,这意味着简单的把法线贴图加到法线通道中将没有效果,这一点我们很快就会看到。取而代之的是,我们将使用法线贴图改变菲涅尔表达式的输出,使得从大多数角度观察,砖块都能呈现出从墙壁表面突出的逼真感觉。

指 南6.15——为材质添加法线贴图

1. 继续上一指南,或者打开配套DVD本章内容中包含的指南6-154文件包。若还未打开,请双击在指南6.14中制作的 mat_DistColor 材质。在材质编辑器中打开此材质。

2. 我们将为材质引入一个法线贴图。为此,我们需要新建一个贴图采样表达式 。不过,这次我们使用一种不同的方法来创建此表达式,这种方法能够避免我们不得不找到选项并且在把贴图关联上去。

a. 在Generic browser中选择先前在指南6.5中导入的 wall_stone_blocks_normal 贴图。

b. 选中贴图后,新建一个贴图采样表达式 。注意在表达式创建的同时贴图已经与之关联了。

图6.173——包含法线贴图的新建贴图采样表达式出现了。

3. 因为我们已经平铺了初始贴图,所以还需要进行法线贴图的平铺。将贴图坐标表达式的输出端连接至新建贴图采样表达式的UVs输入端。

图6.174——与之前存在的贴图坐标表达式相连接会产生出与先前平铺数量相同的平铺效果。

4. 作为测试,将法线贴图贴图采样表达式的RGB输出端连接至材质的法线通道。注意,即使您应用了更改动作,还是没有任何改变。这是因为所有可见的改变都被当前使用的强烈自发光值所覆盖了。据此目标而言,法线通道是无效的。按住Alt键并点击法线贴图贴图采样表达式的输出端以切断与其的连接。

5. 现在我们将把法线信息传送到其能发挥作用的地方。将法线贴图的RGB输出端连接至菲涅尔表达式的法线输入端。您会发现现在的材质好象具有更大的深度了。这是因为新建法线用以决定像素与相机镜头的对正与否,从而以更细节的方式进行颜色传输。

图6.175——法线贴图的数据用来改变菲涅尔表达式的输出。

[next]

6. 应用更改并保存您的文件包。

7. 还需最终进行一些微调节来整理效果:

a. 如果能将效果延伸到更远的距离就更好了。可以通过将包含在深度混合注解框中的常量值从1200设置为3000以实现此功能。

b. 我们还要扩大环绕玩家周围的黑色区域尺寸。通过将菲涅尔表达式的Exp(指数)属性值从默认的3设置为15来完成此项工作。

c. 应用更改并保存您的文件包。

图6.176——最终的材质把各种效果组合在一起了。

<<<< 指南结束

现在的材质看起来已经比较酷了,而且有种让人不寒而慄的感觉。不过我们还可以再添加一种很漂亮的效果,即让发光表面具有一种独特的闪烁感,就好象受到火光影响而发生的变化一样。通过引入一个新建贴图并将其作为最终效果的增效器,我们可以实现此效果。

指 南6.16——为材质添加动画贴图

在本指南中,我们将向材质添加许多不同的东西,因此要非常认真地学习各个步骤和子步骤!另外,在整个材质表达式区域中,您需要重新组织 表达式 图标的位置以腾出空间。相信您能够独立完成这项工作。

1. 继续前一指南,或者打开配套DVD本章内容中的指南6-16文件包。如果还未打开,请双击指南6.15中制作的 mat_DistColor 材质。在材质编辑器中打开此材质。

2. 我们需要引入一个新的贴图。按照指南6.3中讲述的步骤引入包含在DVD中用于本章的tex_FlameSheet 贴图文件。

完成操作后,新建一个贴图采样表达式,并使之与刚才新建的贴图关联。

图6.177——包含tex_FlameSheet贴图的新建贴图采样表达式已添加进来。

小技巧: 由于我们要使贴图动画化,所以最好将实时预览复选框激活,它位于图标的右上角。

3. 实际上我们使用此贴图的三个副本来创建最终效果。通过同时运用三种不同的平铺尺寸以及三种不同的速度值,我们将获得更具随机化外观的效果。

a. 新建一个平移器表达式,并将其输出端连接至新建贴图采样的UVs端。 在平移器表达式中设置下列属性:

  • SpeedX(X方向速度): -0.07
  • SpeedY(Y方向速度): 0.09

图6.178——新建平移器表达式已连接至FlameSheet贴图采样表达式。

此时贴图采样表达式图标将在向上平移的同时向左移动。

b. 新建一个贴图坐标表达式 ,将其输出端连接至平移器表达式的Coordinate(坐标)输入端。设置下列贴图坐标表达式的属性:

[next]

  • Tiling(平铺): 0.4

这将使贴图显得更大。

图6.179——新建贴图坐标表达式将改变火焰贴图的大小。

c. 选中贴图采样、平移器以及贴图坐标表达式图标。按下Ctrl-C和Ctrl-V对其进行复制粘贴。将副本移动至原始图标的正下方,并为每个副本表达式设置下列属性:

  • Panner(平移器):
    • SpeedX(X方向速度): 0.04
    • SpeedY(Y方向速度): 0.07

  • TextureCoordinate(贴图坐标):
    • Tiling(平铺): 1.2

这将使复制品变得稍微小一些,且向上移动的同时逐渐左偏。

图6.180——这里您会看到第一份副本的贴图采样、 平移器以及贴图坐标表达式。

d. 再次按下Ctrl-V复制出一组新的副本。将其置于前一组的正下方,然后为新建的副本表达式设置下列属性:

  • Panner(平移器):
    • SpeedX(X方向速度): 0.02
    • SpeedY(Y方向速度): 0.05

  • TextureCoordinate(贴图坐标):
    • Tiling(平铺): 0.08

这将产生一个十分巨大的贴图副本,在向上移动的同时逐渐偏左。

图6.181——现在能看到贴图采样、平移器和贴图坐标表达式的三个副本。

4. 现在我们要将所有贴图组合起来。

a. 引入一个乘法表达式,将最上方的贴图采样表达式 的输出端连接至乘法表达式的A输入端。

b. 将第二排的贴图采样表达式的输出端连接至乘法表达式的B输入端。

图6.182——乘法表达式用来组合前两排贴图的数据。

c. 新建一个的乘法表达式,将先前的乘法表达式的输出端连接至新建乘法表达式的A输入端。然后将最后一排贴图采样表达式的输出端连接至新建乘法表达式的B输入端。

图6.183——第二个乘法表达式接收第三个贴图拷贝的数据。

5. 接下来,我们将增强组合后的整体效果,然后将其最终效果连接至材质。

a. 新建一个乘法表达式,将先前的乘法表达式的输出端连接至B输入端。

图6.184——新建的乘法表达式将用作增强系统的基础。

b. 新建一个常量表达式,将其R属性设置为10,并将其连接至乘法表达式的A输入端。

图6.185——我们将使用数值为10的常量为新建乘法表达式传递数据。

c. 再来创建一个乘法表达式,并将其A输入端连接至当前连接至材质自发光通道的乘法表达式的输出端(在此我们确实使用了反向连接)。

[next]

图6.186——新建的乘法表达式能够将我们已创建且已将颜色值输入至材质中的贴图与当前的动画贴图组合起来。

d. 将新建乘法表达式的B输入端连接至组合三个火焰贴图的乘法表达式的输出端。

e. 将此最终乘法表达式连接至自发光通道,覆盖原有连接。

图6.187——这就是表达式的最终外观。

6. 应用更改并保存您的文件包。

<<<< 指南结束

由于对三个贴图进行了组全,大家的材质好象可以发出微光了。当然,您可以添加任意多的表达式副本并在任意方向上移动以创造出更复杂的效果。您甚至可以在其中加入一些旋转器表达式来改变运动的性质。

我们要为材质添加的最后一种效果是以极其缓慢的速度发生微妙颜色变化的效果,这样会使走廊看起来有一种难以言喻的生动感。

指 南6.17——为材质添加基于时间的混合

1. 继续前一指南,或者打开配套DVD本章内容中的指南10-17文件包。若还未打开,请双击在指南6.16中制作的 mat_DistColor 材质。在材质编辑器中打开此材质。

2. 跳至本章之前所创建的Depth Blender(深度混合)注解框。首先使用注解框右下角的小三角形向右扩展,以留出足够的空间来添加表达式。

图6.188——拉大注解框为更多的表达式提供空间。

3. 我们需要建立一个系统,借以混合两种颜色。按下列步骤进行:

a. 选中颜色混合(Color Blend)注解框中的线性插值(LinerInpterpolate)表达式 ,连同选中用于基于深度的混合的橙色向量参数表达式。复制这两个表达式(按下Ctrl-C、Ctrl-V),向右移动副本至注解框内的空白区域内。

图6.189——线性插值表达式与橙色向量参数表达式已复制完毕。

b. 仅选中向量参数表达式并对其进行复制。将表达式副本的DefaultValue(默认颜色值)属性更改为一种新的颜色。由于其最初的颜色是橙色,我们在此选择一种深橙红色。将此新建向量参数表达式的输出端连接至新建的线性插值表达式的B输入端。

图6.190——初始的向量参数表达式已复制完毕并赋予了一种新的颜色。

4. 现在我们需要建立基于时间的系统,来混合两种颜色。这种混合非常缓慢,周期为20秒。

a. 创建下列所示的表达式:

  • Time(计时表达式)
  • Constant(常量表达式)
  • Multiply(乘法表达式)
  • Sine(正弦表达式 )
[next]

图6.191——如图所示创建上述四个表达式。

b. 将常量值设为0.05,并将其输出端连接至乘法表达式 的A输入端。

图6.192——常量表达式已连接至乘法表达式的A输入端。

c. 将计时表达式的输出端连接至乘法表达式的B输入端。

图6.193——计时表达式也已连接至乘法表达式。由于我们把时间与0.05相乘,现在的计时表达式中的一秒相当于20秒。

d. 将乘法表达式的输出端连接至正弦表达式的输入端。

图6.194——乘法表达式节点将为正弦表达式提供数据。

e. 将正弦表达式的输出端连接至本指南步骤2中新建的线性插值表达式的Alpha端。

图6.195——我们新建的正弦表达式系统将混合两种新建颜色。

5. 现在您只需要替换当前操纵颜色值的向量参数表达式。

a. 回想起为深度混合提供颜色值的向量参数表达式吗?选中并将其删除。

图6.196——移除本来在深度混合系统中提供黑色值的向量参数表达式。

注意: 此操作将会暂时破坏材质结构,弹出一条错误信息。我们将在下一步骤中解决此问题。

b. 将新建的线性插值表达式的输出端连接至原先的线性插值表达式的A输入端。

图6.197——用新建的线性插值表达式代替原来的向量参数表达式。

6. 应用更改并保存您的文件包。

图6.198——材质最终将在所选择的两种颜色之间缓慢过渡。

好了,我们把UDK材质简介方面的教程就全部讲完了!我们还会发其他方面的教程,欢迎学习!

,

评论

{{ username ? username.charAt(0).toUpperCase() : '?' }}
Ctrl+Enter 发布
{{ (c.username || c.author_name || '?').charAt(0).toUpperCase() }}
{{ c.username || c.author_name }} {{ Utils.formatDate(c.created_at) }}