Contents

UE4材质制作UV贴图

我们想要制作一张uv贴图,是一个什么意思呢?我们知道一般来说,我们都是根据uv来采样贴图,一般来说这个事情都是美术同学来制作的,所以我们想要进行的是在UE4中,动态或者根据自己的实际情况来生成一张贴图,并且我们要存储的内容也可以自己定。你可以自己生成法线贴图,或者是世界坐标的贴图,等等,并不拘泥于只存储颜色信息。

那么,我们如何进行相关的操作呢。

渲染目标

首先我们要做的就是生成一张RT,也就是renderTarget, 在内容浏览器中,我们进行创建,这里我们要创建两个RT。创建后,打开它们并将分辨率设置为所需的分辨率。一个大概的尺寸是1024x1024。你可以随便给它们起个名字,但我建议给它们起个名字:rt_scenecapture然后rt_expanded以避免以后混淆。

展开材质

制作一个新材质,并将其设置为“Unlit ”和“Two Sided”(防止任何光照贴图UV都被镜像,这将导致它们在展开时背面不清晰)。然后将这些节点插入到材质的世界位置偏移输入中。“Size”将是您设置的Scene Capture actor的Orthographic width。在本例中,我们将使用之前文章提到的BoundingBox0-1UV连接到自发光上。这很有用,因为它可以用于在光线跟踪或光子映射时检查材质中的光线位置。 https://img-blog.csdnimg.cn/20200218102744639.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzIzMDMwODQz,size_16,color_FFFFFF,t_70

The Actor Blueprint

接下来我们将制作一个新的蓝图Actor并添加一个“场景捕捉组件2d”组件。

https://img-blog.csdnimg.cn/20200218102751542.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzIzMDMwODQz,size_16,color_FFFFFF,t_70

选择组件并将“投影类型”(Projection Type)设置为“正交”(Orthographic)并将“正交宽度”(Ortho Width)设置为1000,以匹配“UV展开大小”(UV Unwrap Size)1000。将纹理目标设置为我们在第一步中创建的rt_scenecapture。同时将位置设置为0,0,500,并将旋转设置为-90,-90,0。这是为了从自顶向下的视图匹配UV展开的方向。最后,将“Capture Every Frame”设置为false,以防止它无缘无故地连续捕捉。

接下来,将“静态网格”组件添加到蓝图中,并将其所有设置保留为默认值。然后添加一个新变量,使其成为“静态网格”类型并使其可编辑(变量右侧的这个小眼球按钮)。 https://img-blog.csdnimg.cn/20200218102758967.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzIzMDMwODQz,size_16,color_FFFFFF,t_70 现在转到蓝图的构造脚本,放置一个“set static mesh”节点,该节点将静态网格组件设置为使用您创建的“static mesh”变量。接下来,添加一个“Set Material”节点并指定前面提到的展开材质。具有多个材质元素的静态网格可以使用“get num materials”-1作为最后一个索引的forloop将展开材质指定给所有元素。

现在我们只需要在事件图中添加一些蓝图节点。首先,我们放置一个“自定义事件”并将其命名为“Dilate”。在这次活动中,我们只做了两件事。首先我们告诉场景捕捉来捕捉图像。然后我们调用“Draw Material to Render Target”函数。我们将膨胀材质用作材质,将第二个渲染目标rt_expand用作指定的渲染目标。

一旦将此数据写入渲染目标,通常可以使用实际的渲染目标执行所需的任何操作,因为位置贴图在HDR形式下最有效。如果要创建扩张纹理的静态纹理,可以在内容浏览器中的渲染目标上单击鼠标右键,然后选择“创建静态纹理”: