MatcapShader中的动态光照及机位与反射是怎样的

Matcap Shader中的动态光照及机位与反射是怎样的,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

成都创新互联于2013年创立,先为进贤等服务建站,进贤等地企业,进行企业商务咨询服务。为进贤企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。

前言

传统Matcap无法响应光源与相机位置变化——也就是无法使用动态的光照、机位和反射

如下图中,相机旋转,但无论从哪个方向看,模型都是受到同样光照的——不会逆光!

Matcap Shader中的动态光照及机位与反射是怎样的

这次就来讨论一下如何解决这个问题~

顺便说一句,今天我们要做的事情不需要代码哟~~

Cubemap ?

提到图片采样模拟光照,Matcap之外有种更具名气的方法,就是Cubemap(如下图所示)

Matcap Shader中的动态光照及机位与反射是怎样的

Cubemap的优点是显而易见的,能响应旋转,因此是计算静态反射的首选方法

所以有小伙伴提议用Cubemap代替Matcap,这是个很好的思路,值得赞扬

但Cubemap也有它自己的缺陷:

  1. 只能响应相机变化,无法响应光照变化

  2. Cubemap绘制困难,相比之下,Matcap的绘制极为简单和直观

  3. 同分辨率时清晰度低于Matcap,高清晰度时占用内存更大

  4. 若实时生成,成本极高(例如Realtime Reflection Probe)

所以我们接下来还是讨论如何用Matcap解决光照和旋转的问题,至于反射,还会用到Cubemap,但Cubemap采样不会在Matcap Shader中计算

实时Matcap采样图

没错,很简单的方法,我们利用RenderTexture实时渲染一张Matcap采样图就好了!

  • 球体可以使用任何其他Shader,例如官方Standard Shader

  • 存图的相机通过CullingMask只渲染球体

Matcap Shader中的动态光照及机位与反射是怎样的

大家可能会想,为什么不全用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视图中绕到角色背后会有逆光效果

可与文章开头的动图对比

Matcap Shader中的动态光照及机位与反射是怎样的

动态光照

如图,动态调整光照的旋转方向(Scene视图中),将实时反映到渲染结果上

Matcap Shader中的动态光照及机位与反射是怎样的

反射

Matcap的确可以利用Cubemap来实现反射,但是为了进一步提升效率,Cubemap没有必要在Matcap中采样,而是直接渲染到RenderTexture里就好

如下图所示,Scene右下角可见,动态Matcap既有良好的反射结果,又有动态变化的明暗,而且想怎么转就怎么转,结果可见Game视图

Matcap Shader中的动态光照及机位与反射是怎样的

Matcap Shader中的动态光照及机位与反射是怎样的

注:此处使用的Cubemap就是文章开始给出的例图,直接用在了光照设置中的环境反射上。

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注创新互联行业资讯频道,感谢您对创新互联的支持。


分享标题:MatcapShader中的动态光照及机位与反射是怎样的
链接分享:http://azwzsj.com/article/pedoji.html