【博物纳新】是UWA旨在为开发者推荐新颖、易用、有趣的开源项目,帮助大家在项目研发之余发现世界上的热门项目、前沿技术或者令人惊叹的视觉效果,并探索将其应用到自己项目的可行性。很多时候,我们并不知道自己想要什么,直到某一天我们遇到了它。
更多精彩内容请关注:lab.uwa4d.com
一、前言
《Real-Time Rendering 3rd》第十章里面对于游戏开发中基于图像的渲染(Image-Based Rendering)技术提到了两种常用的渲染技术:公告板(Billboarding)和替代物(Impostors)。
使用图像表示物体的渲染消耗,在于像素数量而不再是模型顶点数量,这使得渲染开销大幅降低。节省资源,提高运行速度,故而在游戏开发中被广泛使用,其中应用最广的就是公告板(Billboarding)技术。
无论摄像机处在何种位置观察物体(图像),公告板都始终正对摄像机。场景中一些相隔较远,并不是主要物体的3D模型通过2D图片来显示,无需花费宝贵的时间计算模型细节。在游戏引擎中粒子系统应用了这种技术,每个粒子都是一个永远朝向相机的位图。
但这种技术的缺陷在于难以支持真正的光照、阴影等效果,在一些情况下会使得这部分场景过于粗糙。替代物(Impostors)技术更进一步地平衡渲染开销与渲染精度,利用着色硬件将光线投射到纹理定义的体积中,该技术支持模型上的自阴影、反射、折射、简单的动画方案,以及通过体积发现距离[1]。可以实时生成或预先计算并存储在内存中。
二、使用方式与简单原理
这个开源库工具,是为Unity引擎制作的Billboard Impostors制作工具。可以根据模型离线生成相应预制体。该预制体根据摄像机距离模型距离决定LOD级别选择相应技术应用。
在该插件给出的示例中,可以看到该预制体的作用。
随着摄像机切远,模型由LOD0转为LOD1,由一个3D模型转变为一个2D纹理:
在较远的距离下3D模型(右上)与2D纹理(左下),几乎看不出什么差别。
但两者的渲染开销差距甚大。
并且Impostors存在反射效果,使得渲染出的场景更加精细。
![向阳面](https://i-blog.csdnimg.cn/blog_migrate/855934a7a9bff0c6b58f9c99ca49b07b.png)
![请输入图片描述](https://i-blog.csdnimg.cn/blog_migrate/9a1da3741b1880070f235001b1ec778c.png)
该工具的使用方法也十分简单。
(点击Window->IMP)
弹出Impostor Bake面板:
其中参数释义如下:
Resolution(分辨率):用于设置2维图片的MaxSize属性。
Frame(渲染帧数):这将决定该模型有多少个网格顶点将被采集用于渲染。
Hemisphere(半球):采用半八面体布局or全八面体布局,两者差别如下:
![请输入图片描述](https://i-blog.csdnimg.cn/blog_migrate/0253203aaa4c13a6fe74854e8d6d1268.gif)
对于一些模型,我们可能并不需要采集大量下半球部分的信息,例如树木,尤其是在较远距离观察的时候树干部分的形状可以相对不必那么精细。所以大量信息采自于树冠部分,会提升分辨率。[2]
Custom Lighting Root(灯光):自定义灯光。
Prefab Suffix(预制体后缀):在生成的预制体中添加命名后缀。
在Hierarchy面板中选择需要生产预制体的模型:
![请输入图片描述](https://i-blog.csdnimg.cn/blog_migrate/18f6715cdd197ea94d33fadf1afe2262.png)
点击Capture,开始进行计算并生成相应预制体。
这个工具实现了部分光照的处理与视角变化时的平滑过渡,开发者们可以进一步扩展光影效果。
三、性能测试:
本次的性能测试,只选择了示例场景中的MKV_UV_Impostor作为测试对象,并去除中了场景中多余的物体和光照,只保留一个平行光,效果如下图:
使用GOT Online工具进行了1分钟的测试,在三星S6这台设备上,基本上可以达到满帧率运行,下图为三星S6上该测试场景的FPS趋势图,可以看到主体在57~60帧之间波动。
其中逻辑代码的耗时情况如下,主要集中在Camera.Render(不透明渲染)和Graphics.PresentAndSync两个函数上,分别的耗时均值为8.75ms和5.16ms。
整体来说,性能还是不错的。
Impostor适合于同屏显示多个相同物体时使用。如上文所说,它比单纯的Billboard更真实,又比真实的3D模型节约,是一种性价比较高的选择方案,可应用于移动平台。
类似工具推荐:
-
一个为Unreal引擎制作的Impostors生成插件:
https://lab.uwa4d.com/lab/5c778bc872745c25a83f5f7e -
Amplify Impostor插件:
https://assetstore.unity.com/packages/tools/utilities/amplify-impostors-beta-119877
一款Unity Impostors生成插件,在Asset store出售,需付费使用。
文中一些内容引用自下列文献,这些文献较为详细的讲解了,Impostors的原理、数学公式以及实现过程,有兴趣的读者可以继续阅读,深入了解。
[1]True Impostors Eric Risser∗ University of Central Florida
[2]https://shaderbits.com/blog/octahedral-impostors/