Matcap Shader中的动态光照及机位与反射是怎样的,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
传统Matcap无法响应光源与相机位置变化——也就是无法使用动态的光照、机位和反射
如下图中,相机旋转,但无论从哪个方向看,模型都是受到同样光照的——不会逆光!
顺便说一句,今天我们要做的事情不需要代码哟~~
提到图片采样模拟光照,Matcap之外有种更具名气的方法,就是Cubemap(如下图所示)
Cubemap的优点是显而易见的,能响应旋转,因此是计算静态反射的首选方法
所以有小伙伴提议用Cubemap代替Matcap,这是个很好的思路,值得赞扬
但Cubemap也有它自己的缺陷:
只能响应相机变化,无法响应光照变化
Cubemap绘制困难,相比之下,Matcap的绘制极为简单和直观
同分辨率时清晰度低于Matcap,高清晰度时占用内存更大
若实时生成,成本极高(例如Realtime Reflection Probe)
所以我们接下来还是讨论如何用Matcap解决光照和旋转的问题,至于反射,还会用到Cubemap,但Cubemap采样不会在Matcap Shader中计算
没错,很简单的方法,我们利用RenderTexture实时渲染一张Matcap采样图就好了!
球体可以使用任何其他Shader,例如官方Standard Shader
存图的相机通过CullingMask只渲染球体
大家可能会想,为什么不全用Standard Shader呢,用相机渲染RenderTexture效率不是更低了么?
其实不然,原因如下:
在正式项目中,一帧里需要渲染的物体数量会很多(例如100个),假如有两个实时光,如果全用Standard Shader,不考虑Instancing,那Draw Call至少200以上,而且单次渲染的压力会比Matcap大很多;而使用RenderTexture的方法,只需要1次Standard+100次Matcap,效率明显高很多
如果需要多材质,可参考《Matcap Shader 详解【4】 - 多材质与混合材质》,渲染两三张Matcap,可以组合出场景中各种需要的材质表现。而且多个Matcap也可以通过一个DC来渲染,不复杂,所以就不展开说明了~
RenderTexture的相机只用于渲染一个球体,所以效率还是很高的,远远超过RealTime Reflection Probe。
下面我们来看一下实现的效果(双光源,除了主光源,还有一个反光):
如图,当相机旋转的时候,Scene视图右下角可以看到,Matcap图会实时更新,所以Game视图中绕到角色背后会有逆光效果
可与文章开头的动图对比
如图,动态调整光照的旋转方向(Scene视图中),将实时反映到渲染结果上
Matcap的确可以利用Cubemap来实现反射,但是为了进一步提升效率,Cubemap没有必要在Matcap中采样,而是直接渲染到RenderTexture里就好
如下图所示,Scene右下角可见,动态Matcap既有良好的反射结果,又有动态变化的明暗,而且想怎么转就怎么转,结果可见Game视图
注:此处使用的Cubemap就是文章开始给出的例图,直接用在了光照设置中的环境反射上。
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注亿速云行业资讯频道,感谢您对亿速云的支持。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。