虚幻引擎中的纹理

虚幻引擎中的纹理

异同与取舍

  • 离线渲染与实时渲染
  • 线性内容vs可交互内容
  • 视觉质量高vs渲染速度快
  • 权衡取舍

纹理压缩

  • 目的:显存有限=>牺牲一点视觉质量换取大幅减少的显存占用
  • 颜色(color)数据vs原始(raw)数据
    • UE工作色彩空间是线性sRGB
    • 启用sRGB与否?颜色纹理(Base/Albedo/Emissive map)应该开启,将sRGB编码的颜色数据转为线性编码
    • 压缩算法的异同与使用场合

官方文档纹理压缩

img

采样方式

  • 最近点 Nearest Point(锐利清晰)
    • 计算过程中的到一个uv值,uv值通常会带有小数部分,取离其最近一个整数位置的像素的值作为采样结果。
  • 双线性 Bilinear (线性采样比较柔和)
    • 取离这个UV坐标最近一个2*2区域的像素,根据其小数值做加权平均来得到最终的采样结果
  • 三线性 Trilinear
    • 主要和层级贴图Mipmap 结合使用
    • 在连续两层的Mipmap上,分别各做一次双线性采样,再将各自得到的值做一次线性采样插值得到最终结果
  • 各向异性 Anisotropic
    • 采样时根据相机视角,离相机近的用更大采样区域,离相机远的用更窄的采样区域,以此来消除视觉误差

img

层级纹理Mipmap

层级纹理Mipmap技术能够有效的改善高精度贴图在远处时候的显示效果。

  • 目的:
    • 预计算增加了内存占用,换取视觉效果提升
    • 与纹理流送结合使用,降低显存占用
  • 尺寸:长宽为2的幂
    • 1、2、4、8、16、32...4096,8192不一定是正方形
    • 如果尺寸不满足,可以选择padding(用黑色把不足的地方补齐)
  • 内存:多消耗~33%的空间
  • 生成方式:上一级的4个像素加权平均后生成下一级的一个像素,下一级比上一级模糊,通过锐化可以弥补这种模糊
  • LOD Bias 偏移量(平台 + group 组 + Per tex 逐材质)

img

纹理组

  • 目的:将纹理按其用途进行归类,便于统一操作
  • Device Profiler
  • BaseDeviceProfiles.ini
  • 官方文档纹理支持和设置

纹理流送

  • 目的:消耗 CPU、IO 等资源,以动态加载需要用到的纹理层级,使得场景能用更多的纹理资源而不出现显存不足的情况
  • 原理概述:
    • 运行前,构建 Texture Streaming Data
    • 运行时,CPU 根据视角、可见性、遮挡、Texture Streaming Data 等计算需要的贴图层级
    • 根据 LODBias,调整贴图层级
    • 根据 pool size,贴图优先级决定加载或卸载贴图层级
    • 发送异步 IO 请求
  • 常见问题与调试:
  • 显存池不足造成模糊:通过命令 r.streaming.poolsize 调整默认显存池大小
  • 贴图精度不够或过高,导致模糊或浪费显存
  • 使用优化视图定位问题
  • 调试时,r.Streaming.DropMips 2 禁用 cache 与 hidden mips
  • 镜头快速切换时的预热

官方文档纹理流送

常见的纹理类型

  • 二维纹理
  • 立方体纹理
  • 体积纹理
  • 渲染目标
  • 虚拟纹理

立方体纹理

立方体纹理是由六个二维纹理组成的立方体形状的纹理,采样的时候不再通过UV坐标进行采样,而是通过方向向量进行采样。

  • 创建
    • DCC工具创建 .dds 或 .hdr 文件,导入引擎
    • 引擎中场景捕捉功能,使用立方体渲染目标(Cube Render Target)
  • 主要用途
    • 作为天光、或者天空盒
    • 室内映射 Interior mapping

img

演示

  • 室内映射Interior mapping
  1. 在已经做好的封闭式立方体空间中,放置一个场景捕获立方体actor

img

  1. 随后创造一个立方体渲染目标

img

  1. 在将立方体目标拖入新的材质中搭建好室内映射材质

img

  1. 将材质放到旁边平面上可以在平面上看到内部空间的效果,以此达成室内映射

img

天空光,天空盒

  1. 创建新的材质,将导入的hdr纹理立方体拖入进来搭建纹理,并开启双面。

img

  1. 场景中拖入一个球体然后缩放到很大,最后将球体材质替换成之前搭建好的天空盒纹理,整个场景就在这天空盒中。

img

体积纹理

  • 目的:表达3D空间的信息,而不仅仅表达物体表面信息

  • 原理:将2D纹理分块,每块代表3D空间一个横截面的信息

  • 用途

    • 将复杂的着色预计算后烘培到体积纹理
    • 常用于云雾烟等特效表现

官方文档体积纹理

img

渲染目标

  • 目的
    • 运行时动态创建纹理内容
  • 常见用途
    • 将引擎模拟的内容烘培成静态纹理,以此减少消耗
    • Gbuffer
    • Shader Map
    • 各种特效,比如水底倒影、雪地轨迹等

虚拟纹理

利用项目对 虚拟纹理 的支持,可在运行时以更低内存占用率和更高一致性创建和使用大尺寸纹理。
官方文档虚拟纹理

流式虚拟纹理

  • 目的:使用固定的内存开销情况下,支持更大尺寸的纹理

  • vs纹理流送

    1. GPU 计算(精确度上升) / CPU 计算(未必准确)

    2. 加载可见的区域(tile) / 加载整个mip层级

    3. 采样需要更高的GPU cost

    4. 有利于更好地 batching

  • UDIM 的支持

  • Virtual Lightmap 的支持

运行时虚拟纹理

  • 目的:运行时支持动态生成的超大纹理
  • 用途:
    • 超大的过程纹理 / 渲染目标(render target),可用于大地形
    • 支持更多的纹理混合,提升品质
    • 用作超大的作为一个巨大的渲染结果缓存,优化运行效果(空间换时间)
    • 地图分层渲染
  • 使用:
    • 不适合动态物体
    • 适合扁平的物体
    • YCoCg vsRGB
    • 瓦片边界的处理 Tile Border anisotropic filtering

学习地址

地址

posted on 2023-08-05 23:10  Tcohneyn  阅读(209)  评论(0编辑  收藏  举报