Unity5 WebGL试用笔记,Web 3D时代何时到来?

Unity5发布一个多月了,相信很多人对它的WebGL导出功能特别关注。其实WebGL并不是什么新鲜事物。早在2012,各大浏览器已经开始陆续支持WebGL,一些基于WebGL的3D引擎如Three.js也相继出现,但无论是完善程度还是使用门槛都无法与传统引擎相比,所以大部分团队对WebGL还是保持着理性的观望态度。

我在2004年将我的3D引擎打包到IE的ActiveX中。遗憾的是,用户对浏览器插件非常反感,这严重阻碍了网页在3D方面的发展。

展览。虽然在这期间,一些3D页游通过浏览器插件取得了不错的成绩,但我一直认为和端游没什么区别。想玩游戏的人不会介意下载客户端,但是网页是3D的。

用途不仅仅是游戏。

直到最近,各大浏览器厂商都宣布不再支持安装浏览器插件。Unity还声称,WebGL将取代WebPlayer和Flash,成为发布到网页的唯一方式。现在说这是否预示着3D网页时代终于到来还为时过早,但至少在技术上,曾经不可逾越的鸿沟已经悄然消失。

去年我的团队接到一个项目,做一个类似91家的模拟装修软件。当时只是想做一个端到端的,有用的Unity4.x后来看到网上DIY系统用WebGL实现的不错,就想把产品升级到Unity5,试试WebGL导出功能。毕竟这样的软件更适合网页。

目前Unity5的WebGL平台只是体验版(预览版),功能不全,存在一些问题。这里分享一些我们在项目移植过程中积累的经验,供大家参考。

一:js效率

这是我之前最担心的。我们的产品得益于PhysX的超强效率,实现了动态场景的快速烘焙(间接光线预计算)。PhysX编码成js后效率如何?实验结果如下:

不同平台下两个场景的烘焙时间。单位(秒)

两个场景的烘焙结果

Firefox的运行效率是令人满意的。我们知道Unity使用Mozilla提出的asm.js来提高js的运行效率,但是目前其他浏览器还没有对asm.js进行优化,只是时间问题。除了烘焙功能,其他功能在不同浏览器中看不出太大的性能差距。

二:js包装尺寸

我也担心这一点,如果页面加载后不能立即呈现内容,用户会失去耐心并关闭页面。设置所有优化选项后,我们产品导出的包大小如下(压缩后):

主程序(项目名称。jsgz): 5.1m

内存初始化包(project name.html.memgz): 2.7m。

内置资源(项目名称。Datagz): 1m

不得不说还是很大的。字体在内置资源中占很大比例。以后所有界面都可以做成网页,这样就可以用浏览器字体了。这就是说,主要的一揽子计划是

Unity的整个运行时和我们自己的代码都是编译在一起的,这也是它这么大的原因。我给Unity团队写了几封信,问他们是否可以不放一些

没用的模块编译,他们说会考虑,但是因为耦合度等原因,应该很难。我不太了解内存初始化包。asm.js可能有必要,希望Unity推出。

这个问题在WebGL正式发布时可以得到改善。

输出项目包含两个文件夹,Release和Compressed,只是保持压缩状态。生成的。htaccess文件会自动将地址转移到这个压缩版本的包中,并在HTTP请求中添加一个压缩头,浏览器下载后会自动解压缩。

三:移动平台

这是很多人关心的问题。WebGL作为HTML5的一部分,应该可以在所有平台上运行吧?但事实是,目前移动平台对WebGL的支持还不太好,我想进入。

微信就更难了。在这方面,我们的方案是为用户创建的每个样板间保存一系列360度全景图。分享到微信后,可以漫游,但不能编辑。思考这样一个方案似乎很重要。

合理,手机屏幕小确实不适合复杂的3D编辑。移动平台全面支持WebGL后,会有更多适合手机的3D应用出现。

四:图形界面适配

Unity5终于支持延期了。

底纹,前面那个只能叫延期照明。然而,在当前的WebGL中

在1.0上还是不行,只能用延期照明。我们知道WebGL

1.0对应OpenGL ES 2.0,WebGL 2.0对应OpenGL ES。

3.0,所以把项目适配到WebGL平台和适配到移动平台基本是一样的。WebGL

2.0的标准刚刚制定,不知道什么时候会推出支持的浏览器,所以目前的适配工作都是基于WebGL。

1.0是目标平台。除了不使用MRT,我们还需要通过拼接2D切片来实现3D纹理,以及深度。

纹理必须手动编码为RGBA格式,这太熟悉了。好像是10年前做的。我不禁感叹这些年实时3D发展这么慢,好像除了游戏真的没有什么好的应用了。

五:材质和全局照明

Unity5的新材质系统没有太多可调参数,所以还是用我们原来的材质,也是统一材质。新添加的倒影

Probe感觉很初级,就是一个世界坐标的AABB,不能旋转。事实上,BPCEM(方块投影立方体贴图)

环境

Mapping)可以旋转,但还是处理不了复杂的户型,矩形边界外的倒影很不对。我们的反射方案是基于BPCEM的,增加了一点光线追踪。虽然还存在一些问题,但我对效果还是满意的。最重要的是它的帧数比SSR(屏幕

空间反射)要高得多。

改进的反射方案

由于样板间都是用户自己创建的,我们无法使用Unity自带的烘焙系统(Enlighten),传统烘焙方式生成的光照图容量太大,根本不适合网络应用。我们自己的烘焙系统把3D空间分成128x16x128的方块,然后用一个3D。

Texture保存每个网格的光照信息,然后通过自定义的渲染路径将3D光照贴图添加到其中。

六:编辑综合管理后台

管理后台要实现模型的管理和上传功能,所以是单纯的统一。

在编辑器中。在这里我们可以对模型进行CruncherPlugin,对模型对应的商品进行材质调整、命名、分类、定价,最后导出Assetbundle并上传。Unity强大的编辑器API让这一切变得非常容易。

模拟装修平台只是网页3D的一个应用实例。随着WebGL的不断规范和成熟,会有越来越多的非游戏和实际应用出现。