编者按 玻璃的质感表现,在游戏中一直都是比较难制作的,因为玻璃包含了很多特殊的特性。本文作者将分享一种非常低开销的实现unity玻璃材质的方法,希望对大家有所帮助。
文 | Blood
腾讯互动娱乐 天美工作室群高级游戏美术师
一直以来玻璃的质感表现在游戏中都是比较难制作的一种,因为玻璃包含了很多特殊的特性:反射、折射、厚度等,而这些特性在渲染的时候需要消耗大量的计算。这也导致真实的玻璃渲染基本都是离线渲染的。
包括目前主机端游戏的一些玻璃效果也不是很理想,离离线品质还有很大的差距。基本都缺少了折射项,只有高光部分。
![fa5aeff0eee6b3ee651341ecc58676a2.png](https://i-blog.csdnimg.cn/blog_migrate/19ea623e1c19da485ed145111241ae25.png)
本文分享一种非常低开销的实现一种玻璃材质的思路。它基本可以适应目前的任何平台。同时这个方案在迭代上非常灵活,只需要替换灯光反射与环境反射部分就可以运用到PBR上。
它没有复杂的算法,没有光线追踪。 可以没有RT,没有后处理。 主要从美术表现的视觉层面来实现最终效果。我们先看下实现出来的效果!(以下所有图片均为unity实时截屏,No tonemapping )
下面是模拟的高脚杯,以及香槟。
![09027a397dfb574e74f521ca68025fa6.png](https://i-blog.csdnimg.cn/blog_migrate/143d56348c2593a8f2479aafe5b37d6f.png)
杯子、啤酒、泡沫,都是同一个shader实现的。
![15a33eadffd81b95c3fcdbbb8080474d.png](https://i-blog.csdnimg.cn/blog_migrate/2d98d38c303b49062901de140014c144.png)
啤酒里面的气泡,以及香槟里面的气泡。
![4ad489437f86341a269649e16423ca24.gif](https://i-blog.csdnimg.cn/blog_migrate/1db05ffa4907274ac493730f51cb13d5.gif)
![d5912f69b06306a534d8220f581607cf.gif](https://i-blog.csdnimg.cn/blog_migrate/17242797ef10a7c2905d748b8e002c21.gif)
![09c63b3f82c83a9fb8281911b9c5ab8b.png](https://i-blog.csdnimg.cn/blog_migrate/fc3909807ec71cc0ccfe670694ac7db9.jpeg)
先来分析下玻璃的特点。
![655118247dbf59cf754909da95bec2bb.png](https://i-blog.csdnimg.cn/blog_migrate/b33deaf9c8d7c80e2e0c10dac2c8ac34.png)
玻璃本身是透明的,影响玻璃质感的主要有2个点:
1)反射
玻璃会反射环境里高亮的地方。
2)折射
玻璃越厚的地方折射越强。
而最难的地方就在于折射的计算。
但在人的视觉上,强烈的折射会打断背景的连续性,在折射率强的地方已经无法看清背后的事物,会让人感觉“这块区域不是完全透明的”。我们主要从这一点入手,来模拟视觉层面的折射表现。
为了节省性能我这里以Matcap来制作环境纹理的采样。(不过这里是很灵活的可以根据需求替换PBR的ibl环境以及实时高光)