|
笔记来源:https://www.bilibili.com/video/BV1KK411L7Rg
<hr/>内容总览
Streaming Virtual Texture (SVT)
- 普通贴图变成虚拟纹理
- 查看SVT mipmap等级混合状态命令
- SVT主要应用和优点:(1)均一化贴图内存的占用(2)突破分辨率限制和提高纹理精度
- 多象限UV使用要求
- SVT的主要开销
Run Time Virtual Texture (RVT)
- RVT主要应用和简单操作步骤(优点:catch复杂材质,降低材质复杂度,加快效率)
- 物体之间材质交互
- 解决草模型的悬浮问题
- RVT优化
<hr/>
- UE4 4.23开始有了,4.24改进优化run time 的虚拟纹理,4.25对手机进行了支持。
- 有两种,Streaming Virtual Texture (SVT),Run Time Virtual Texture (RVT)
在UE4的项目设置中打开Virtual Texture,如下:
需要手机支持的话,打开on mobile,要注意的是:光照贴图是否支持虚拟纹理默认是打开的。
Streaming Virtual Texture (SVT)
- 和普通贴图差别主要在加载方式;
- 普通贴图:加载根据摄像机和对象的距离,对象的UV在屏幕上的变化速度。
- SVT:把贴图分成不同的 Tile / Page ,默认是128*128 Page ,根据是否在屏幕上或者是否渲染是否看得见,来决定哪些 Page 需要被加载。
在PageTable中需要被加载的是灰色的,不需要被加载的是白色的,最终会被加载的是PhysicalTex里面的
普通贴图变成虚拟纹理:
(1) 在贴图的细节面板中的Virtual Texture Streaming勾上,贴图缩略图的右下角会出现VT。见下图:
(2) 右键贴图,选择Convert to Virtual Texture :
(3) 要注意的是: 在用到该贴图的材质中把采样方式 Sampler Type 改成 Virtual Color,材质加载方式正确就不会报错:
(4)SVT mipmap的混合用了一个随机的三线性过滤加载(下图中左边),打开TemporalAA效果可能会好一些,避免闪烁。
打开TemporalAA
查看SVT mipmap等级混合状态命令
r.vt.borders 1 和 r.VT.Flush
白色网格表示当前使用 0级mipmap,黄色网格 1级,蓝色绿色等等。
输入命令:stat virtualtexturing,可获取信息框:
上图中其中page相当于tile,可视的page数量为16,是和白色格子数量匹配的。
SVT主要应用:
- 情况一:为了省drawcall,然后把很多贴图合并在一起,比如建筑的门窗合并在一起,贴图纹理就会不够高清,贴图中看不见的tile部分也会被加载进来。
- 情况二:对范围比较小但是细节比较多的环境,贴图会一股脑调进来,然后内存就爆炸了。
- 情况三:lightmap,植被的光照贴图会最终合批到一张4096的光照贴图里,要是你始终只看一小片植被,SVT就可以同时解决合批和内存加载的效率问题。在项目设置里面把lightmap作为SVT选项勾上。
- SVT优点一: 节省内存,把合并贴图转换成SVT就可以,均一化贴图内存的占用。
- SVT优点二: 突破分辨率限制和提高纹理精度,合并贴图到一定的程度是由分辨率限制的,东西太大或者是有精度要求时。
多象限UV使用要求:
- 通过扩展名来定义它在哪个位置,在模型上面需要做好准备来匹配采样哪个象限,导入后转换成SVT。
- 避免了整张贴图一起被加载进来;
- 突破了合并贴图到一定象限后无法被支持的瓶颈,并且过大贴图加载方式上对内存的不友好;
问题答复:
(1)SVT的主要开销在采样上,贴图采样器的数量 texture lookups,和stacks数量,影响到效率。两张贴图采样器的话, texture lookups=2,两张图共用一个TexCoord的话texture stacks=1,用各自的UV则会变成texture stacks=2.
<hr/>Run Time Virtual Texture (RVT)
- 加载方式和SVT类似,都是以tile方式加载。
- SVT作为asset是存在硬盘上的;RVT是当你在Run Time时会进行一个生成和渲染。
- 开销的点不一样。
RVT主要应用和简单操作步骤
catch复杂材质,降低地形材质复杂度,加快效率。
例如地形材质,操作步骤:
(1)Run Time Virtual Texture Volume:决定了大小方向,往哪里拍,相当于相机
(2)Run Time Virtual Texture:创建Run Time Virtual Texture,相当于照相机底片
(3)把底片Run Time Virtual Texture放入Run Time Virtual Texture Volume也就是相机里
(4)被拍到的东西需要进行一个设置,actor层级上,模型需要在细节面板定义被拍到哪个Run Time Virtual Texture底片里头。
材质层级第一种,被拍摄到的物体材质的domain设置:
材质层级第二种,材质材质的domain为surface情况下使用:
(5)右为采样节点左为被采样的Run Time Virtual Texture底片,可以同时输出和采样
出现渲染次序问题可以在被拍模型的细节属性里面调整渲染优先级
物体之间材质交互
- 树的假阴影,地面上的物体影响地面下的物体示例,见视频52:35处。(例如树周围的土壤突起和阴影,以及石头放在雪地和沙地的效果)
树周围的土壤通过法线突起和渲染到VT的阴影
石头模型放在雪地和沙地的效果
- 4.24对RVT的优化,可以在Run Time Virtual Texture修改多远处使用SVT.(需要在指定层级,然后在编辑器build SVT)
输出的是当前VT的mip的值,可以解决基于视距的lerp效果视频64:50处
解决草模型的悬浮问题
拍下地面的高度,然后在草的材质里面去采样它,让草能够贴地。
贴着地浮动的云,水流和粒子效果等。
有了高度的信息,物体和地面交界的地方可以做一个遮罩,blend基础色和法线,解决生硬接缝的问题。
草模型的悬浮问题
blend基础色和法线
草贴地的实现
利用地面高度和物体轴心比较
trick: object position是一个bounce的轴心,草默认bounce的轴心Z轴为26,我们在Z轴下移26,即可把轴心放到草的底部。
同一个材质可以采样多张也可以写入多张。
RVT优化(减少数量和被拍物体的复杂度):
- 材质上减少数量,可以在Run Time Virtual Texture修改多远处使用SVT.(需要在指定层级,然后在编辑器build SVT)
- actor上,通过lod bias和skip mips以及覆盖度来减少数量,和被拍物体的复杂度
RVT属性界面打开允许缩放
再输入这个命令 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|