定制化Mip登记、做适合自己的效果。(文章是分享自己解决问题的方法和思路)

主要时发现问题后分析解决问题的办法和思路 、并没有太多的技术含量。

目前是发现了一个问题、当我想用BOX 拼接一个效果的时候、在远处会出现问题、所以导致了有以下的方案

先看一下问题所在:

可以明显看到远处有问题的产生,

然后看一下贴图是这个样子的

送三个色块模拟贴图

我所用的采样时通过法线方向读取的采样

float2 localUV;
localUV.x = GlobalUV.x / 2;
localUV.y = GlobalUV.y / 2;
// Top
if (Location.z > 0)
{
	localUV.x += 0.5;
}// Bottom
if (Location.z < 0)
{
	localUV.x += 0.5;
	localUV.y += 0.5;
}// Front Location == 2 no offset
// Back
if (Location.x < 0)
{
	localUV.y += 0.5;
}//	Left
if (Location.y > 0)
{
localUV.x += 0;
}// Right
if (Location.y < 0)
{
//	localUV.x += 0;
	localUV.y += 0.5;
}return localUV;

读出来的效果就是

上下是不同的色块、四周是同一种色块,出问题后开开始分析问题出现的原因。

首先我做了一张包含Mip的DDS 文件

这样我就知道是不是贴图导致的问题,做成贴图放到材质中、

模拟第一人称的高度看一下、近处加载没有问题、最高质量的贴图、但是在远处可以看到时蓝色、甚至没有,所以我找了一个参照,看是BOX 在远处有问题、LOD 效果还是说Texture 加载的问题。

所以我用一个box和多个BOX 进行判断、发现他是判断图片在屏幕中的大小去调整贴图的Mip 等级。知道问题后就进入下一步。

这种问题主要有三种方法去解决、一种是制作包含Mip信息的贴图来替代原有自动生成Mip信息的贴图、第二种是关闭Mip。不使用mip,但是会增加内从的消耗,所以就直接Pass掉。第三种就是设置mip等级(有多种方式,下文会说到)。

第一种做出来的结果很是不满意、自己精心调整过的Mip图片效果还不如UE自动生成的图片,所以以失败告终,

第二种徒增消耗,如果大量使用、对于贴图来说问题不大、对于内存来说、简直是灾难、所以就不用试了。

第三种也就是我现在采用的这种方法,自己计算Mipmap。

同样是三种方式,

第一种、现有等级去减少一个等级,好处是不用计算、直接修改,但是最终效果是得减少两个等级才能达到效果,消耗依旧会很大,(目前是想办法减少内存的开支)所以也被舍弃、而且 box 横面和立面 在正常第三人称看远处是不一样的,也就是说这个角度立面远小于横面的等级(所占像素相差甚远导致),

第二种是通过计算得出块在屏幕中的Mip等级、然后进行Pow,来拉长这个等级,原理上和第一种差不多,但是可以减少内存的消耗,增加计算,同样是要Pass(计算方式太麻烦已经没有记录了)

最后一种是通过计算深度来进行设置mip等级,防止顶面和侧面贴图等级不同而导致的问题,由于材质是Mask类型的并不能获取深度信息、只能通过计算来得到。

这里是把Z轴排除了、防止高处的时候出现其它的问题、当然也有弊端、不过是能接受的。

差不读多就这么多了、以后有发现继续更新吧。

欢迎各位大佬前来指点一二。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值