unity 角度限制_Unity移动端横版游戏高效地面反射实现

unity 角度限制_Unity移动端横版游戏高效地面反射实现_第1张图片

地面反射这部分,之前是用反射相机的方式实现的,效果是最佳的,但dc和顶点都加倍,一些消耗较高的场景,dc直接就到100以上了。

后来改为unity的反射探头,消耗会降低,但有几个缺陷。

1. 对于一些标准的立方体场景效果较好,但有一些场景的墙壁是曲面的,实现的效果不能接受。

unity 角度限制_Unity移动端横版游戏高效地面反射实现_第2张图片

2. 由于是横版游戏,所有相机视角会有很大限制,unity烘培出来的cubemap有5个面可以说是无用的,浪费内存。

最后采用在shader中自己计算光路的方案。

分为两种实现:

第一种是针对立方体场景

39a2ea13d20c7c9b0e82fdcc9bfe9dd7.png

传入烘培好的反射贴图,远景墙壁的z坐标到原点的距离,oriwidthheight为远景的左下角的xy坐标及其宽高。

unity 角度限制_Unity移动端横版游戏高效地面反射实现_第3张图片
反射贴图

unity 角度限制_Unity移动端横版游戏高效地面反射实现_第4张图片
左下原点

先算出相机到远景的距离distance和视向量,可以根据视向量坐标轴的比值去计算交点在xy轴分别偏离了多少距离,得到视向量与远景的交点,根据远景宽高换算得到UV

unity 角度限制_Unity移动端横版游戏高效地面反射实现_第5张图片

unity 角度限制_Unity移动端横版游戏高效地面反射实现_第6张图片

最终效果:

unity 角度限制_Unity移动端横版游戏高效地面反射实现_第7张图片
移动端横版游戏高效地面反射实现https://www.zhihu.com/video/1127603331249643520

第二种实现针对曲面远景

难点在于在vert顶点着色器中预测视向量与远景的交点深度realdepth

尝试了一下直接把深度存到顶点中,效果如下,正前方看效果还不错,但角度变大就会穿帮

unity 角度限制_Unity移动端横版游戏高效地面反射实现_第8张图片

unity 角度限制_Unity移动端横版游戏高效地面反射实现_第9张图片

unity 角度限制_Unity移动端横版游戏高效地面反射实现_第10张图片

最精准的方式就是步进,但需要多次读贴图,效率不高

目前想了一种方案,将深度存到alpha通道,先按最近预测一次取深度,再按最远预测一次,取平均。因为测这个还需要写一个烘培远景的工具,目前还没实现,以后再更新。

unity 角度限制_Unity移动端横版游戏高效地面反射实现_第11张图片

https://github.com/Ymiku/Side-scrolling-Reflection

你可能感兴趣的:(unity,角度限制)