渲染到伪 3D 图片

Windows
MacOS
Linux

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

Select Skin
Light
Dark

Welcome to the new Unreal Engine 4 Documentation site!

We're working on lots of new features including a feedback system so you can tell us how we are doing. It's not quite ready for use in the wild yet, so head over to the Documentation Feedback forum to tell us about this page or call out any issues you are encountering in the meantime.

We'll be sure to let you know when the new system is up and running.

Post Feedback