Language:
Share
此中文页面内容对应的英文页面有后续更新,如需浏览最新文档可切换至英文页面浏览。

渲染到伪 3D 图片

13.jpg

伪装的资源仍属于图片的范畴,通过从每个可能的视角或至少是几个可能观察的视角出发,使用翻书类型贴图存储静态网格物体的视图,效果是获得在材质和光照方面与原始网格体十分匹配的二维图片,但在帧与帧之间将发生一些跳变。这表示它们并不适用于所有应用程序。但当需要渲染大量不会贴近摄像机缓慢掠过的物体时,这个方法将非常有用。

初始设置

在创建 imposter sprite 之前,您需要预制一系列 imposter 纹理。为此,请将 RenderToTexture_LevelBPRender Type 设置为 Render 3D Imposter Sprites,选择 Capture Settings,然后调整 Render 3D Imposter Sprite 设置。

settings_3.png

属性

说明

Imposter Static Mesh

这是您要为其创建 imposter 的静态网格物体。

Imposter Material Array

这是一个阵列,以便您可以为具有超过一个材质 ID 的网格物体的各个索引指定材质。

您需要针对 imposter 材质阵列中的材质,在法线贴图输入上使用设置为 “Tangent to Local” 的 Transform 节点。因为我们想要以摄像机 可能 朝向的方向视角来呈现世界法线,而非全部使用该自顶向下方法强制采用的相同摄像机。如果没有法线贴图,则只需使用 0,0,1 转换的 Tangent->World。

Frames around Z

此设置决定 imposter 将存储多少个围绕 Z 轴的帧。数值越高,运动期间最终效果中的“跳帧”越少,但会导致贴图分辨率降低或需要使用更大的纹理尺寸。

Mesh Scale

如果最终的 imposter sprite 材质中存在任何边缘 bleeding 问题,此项允许您稍微缩小网格物体。此项仅在少数情况中必要,即网格物体与其球体边界极其匹配,从而导致网格物体紧贴各个网格单元的边缘。仅在必要时调整,因为缩放比例越小,损失的分辨率越多。

Aspect Ratio 1 by

此设置允许您创建不一致的贴图。处于默认 1 状态时,imposter 网格为正方形。如果设置为 2,则宽高比为 2:1;如果设置为 4,则为 4:1,以此类推。建议为 “Full 3D Imposters” 保留正方形的宽高比,仅在使用 “Single Rotation Axis” 模式时修改。注意:我在键入本文档时才发现此设置名称不正确。不久将为此设置提供更加贴切的名称。

Imposter Enum

一个下拉列表,可让您从两种不同的 Imposter 预制类型中选择其一:“Full 3D Imposters” 和 “Single Rotation Axis”。“Full 3D Imposters” 显示包括上下方向的所有角度。“Single Rotation Axis” 只围绕 Z 轴旋转网格物体,特别适合位于水平面上的物体的远景 LOD,如树木、大型建筑或一般的天空盒元素。“Single Rotation Axis” 可让您更好地利用贴图记忆库,因为没有必要存储许多内容。

Single Rotation Axis rotation

此设置是仅在选择了 “Single Rotation Axis” 选项时使用的起始旋转设置。该设置可让您确定与摄像机相关的网格物体的方向。

网格物体法线

若通过网格物体创建 imposter,则网格物体上的材质将需要进行微调。

1.打开要从其中创建 imposter 的静态网格物体的材质。 1.选择材质节点。 1.禁用 Tangent Space Normal。 1.在法线贴图/计算和材质节点上的 “Normal” 输入针之间,将 Transform 节点添加到材质图表中。

如果没有法线贴图或法线计算,则添加设置为 0,0,1 (Blue) 的向量 3 并改用该项。

1.在 “Transform” 节点上,将 “Source” 属性设置为 “Tangent”。 1.在 “Transform” 节点上,将 “Destination” 属性设置为 “Local”。

setupYourMesh.png

渲染 Imposter

使用所需数量的帧配置了 imposter 之后,渲染 imposter 贴图的步骤与最初的“贴砖材质”步骤相同。

Capture Settings 设置下选择所需的缓冲目标;确保已打开 高分辨率屏幕截图 窗口并启用了 包含缓冲器可视化目标 选项;在 新窗口运行 游戏,使用 ~ 键调出 控制台 并在控制台中键入“ke * rendertextures”,然后按回车键。

renderTextures.png

您将收到一条弹出消息,表示图像已保存,该消息其实是指向文件夹位置的可单击链接。如果您不能及时单击该链接,则可以在以下路径中找到保存的纹理:

\YourProject\Saved\Screenshots\Windows\

BaseColor.png DecalMask.png WorldNormal.png

如果法线贴图由大部分蓝色和部分亮红色/绿色构成,则可能在将静态网格物体材质的设置从 “Tangent” 更改为 “Local” 空间法线时,跳过了其中某个步骤。

导入 Imposter

使用虚幻引擎 4 中的 “High Resolution Screen Shot” 功能导出 .bmp 文件后,您需要将其加载到图像编辑工具中,并将其另存为 .tga 文件,然后即可像其他贴图一样将其导入。

调整法线贴图纹理

您需要更改法线贴图纹理上的一些属性:

  1. 内容浏览器 中,双击 法线贴图即可打开它。

  2. 禁用 “sRGB” 属性。

  3. Compression Settings 设置为 TC_Default

  4. 保存纹理。

normalSettings.png

创建 Imposter 材质

现在有了一系列经过渲染的 imposter 图像。要利用这些贴图,您需要创建采用 “ImposterUVs” 材质函数的材质,方法是单击函数并将其从 内容浏览器 拖入 Imposter 材质图表:

imposterMatNodeCB.png

imposterNode.png

此函数设置材质的 UV、法线和 WorldPositionOffset。您需要定义一些参数,以匹配您的 Imposter 设置:

输入针

说明

Frames X (S)

此项为 imposter 在 X 轴上的帧数。例如,如果您指定围绕 Z 轴的旋转为 16 个,则 X 轴上具有 16 帧。

Fixed Z (B)

使用设置为 “Single Rotation Axis” 的 imposter 时,只应设置为 True 的 Boolean 选项。这使计算的成本更低。

Frames Y (S)

此项为 Y 轴上的帧数。对于正方形宽高比,此项应始终与 Y 轴的帧匹配。如果您输入的宽高比为 2:1,则 Y 轴帧数应为 X 轴帧数的一半。

SpriteWidth (S)

生成的 sprite 的宽度。

SpriteHeight (S)

生成的 sprite 的高度。

Position (V3)

默认为 “AbsoluteWorldPosition”,而且大部分情况下不应更改。如果要使函数以怪异的角度显示 imposter 或要使用自定义数据表示位置,则可使用该项。

VertexShaderZrotation (S)

该项为仅限调试设置。其作用是将 sprite 的 Z 轴旋转分解成一组不相连的步骤,而非在整个范围内流畅地插入。可以防止因 imposter 的预制方式而使跳帧更严重。若采用流畅的精灵插入,imposter 在每一帧过渡时似乎旋转过度。当值等于 1 时,此问题得到修正。您可以将值设置为 0,以查看禁用时的外观形态。上述 imposter 网格物体的大部分区域显而易见。

Rotation (S)

Imposter sprite 可以围绕指定轴旋转。可以让您在世界中随机旋转同一 imposter 的多个副本,从而使其外观不一样。

Rotation Axis (V3)

此设置目前已禁用。旋转轴始终默认为 0,0,1 或围绕 Z 轴。对任何旋转轴的支持尝试存在某些问题,但会在未来增加此类支持。

Normals (V3)

即法线贴图。其作用是旋转法线,以使其匹配指定的旋转值。

输出针

说明

TransformedNormals

包含已变形的法线贴图,连接至材质 “Normal” 输入。

WorldPositionOffset

包含正对着精灵的摄像机的 WPO,连接至 “World Position Offset” 输入。

UVs

Imposter 纹理的 UV。放置在材质中的任何 imposter 纹理应将此输出作为 UV。其中包含将要出现的法线贴图,以循环回 “Normals” 输入中的函数。

Phase2UVs

该尚试验性功能未完全实现。该功能可以在前一相位和/或后一相位具有两个或更多贴图查找,并在贴图查找之间进行淡化/溶解以减少跳帧。

您的材质如下所示:

您可能会注意到连接法线贴图输入针的 Constant Bias Scale 节点。该节点用于重新平衡世界空间法线的颜色。

完整 Imposter 示例:

11.jpg

单一旋转轴 Imposter 示例:

13.jpg