⑴ Unity5 WebGL试用手记,网页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平台还只是一个体验版本(Preview),功能尚未完全且存在一些问题,在这里分享一些我们在项目的移植过程中积累到的经验,供大家参考借鉴。
一:js效率
这个是我之前最担心的。我们的产品得益于PhysX的超强效率,实现了动态场景的快速烘焙(间接光预运算),编码成js之后,PhysX的效率究竟如何?实验结果如下:
两个场景在不同平台下的烘焙时间。单位(秒)
两个场景的烘焙结果
Firefox的运行效率还算令人满意。我们知道Unity使用的是Mozilla提出的asm.js来提升js的运行效率,而目前其他浏览器还未针对asm.js进行优化,不过这是迟早的事。而且除了烘焙功能之外,其他功能在不同的浏览器上看不到太大的性能差距。
二:js程序包尺寸
这个我也比较担心。如果内容无法在页面载入之后立刻呈现,用户会失掉耐心从而关闭页面。把所有优化选项设置好之后,我们的产品导出的程序包尺寸如下(压缩后):
主程序(项目名.jsgz):5.1M
内存初始化包(项目名.html.memgz):2.7M
内置资源(项目名.datagz):1M
不
得不说还是很大。内置资源中字体占了很大的比重,将来可以把全部界面做到网页里,这样就可以使用浏览器字体,这个还好说,主程序包是把Unity的整个
Runtime加上我们自己的代码全部编译到一起所以才那么大。关于这个我给Unity团队写了好几封信,问他们有没有可能不要把一些从未用到的模块编进
去,他们表示会考虑但由于耦合度等原因难度应该不小。内存初始化包我不是很了解,可能是asm.js必备的东西,希望Unity推出WebGL正式版的时
候这个问题能得到改善吧。
输出的项目包含Release和Compressed两个文件夹,只需保留Compressed就可以了,生成的.htaccess文件会将地址自动转向到这个压缩版本的程序包,并为HTTP请求加上一个压缩Header,浏览器下载完成后会自动解压。
三:移动平台
这
是很多人关心的问题。作为HTML5的一部分,WebGL理应可以运行在所有平台不是吗?不过事实就是目前WebGL在移动平台被支持的并不好,想进微信
就更是难上加难。对此我们的方案是为用户创建的每一个样板间保存一系列360度全景图,分享到微信之后可以漫游,但不能编辑。想想这样的方案似乎也很合
理,手机那么小的屏幕实在不适合做复杂的三维编辑工作。等移动平台完全支持WebGL之后,会有更适合手机的3D应用出来。
四:图形接口适配
Unity5
终于支持了DeferredShading,之前的只能叫DeferredLighting。不过在目前的WebGL
1.0上还是不能用,还是只能用Deferred Lighting。我们知道WebGL 1.0对应的是OpenGL ES
2.0,而WebGL2.0对应的是OpenGL ES
3.0,所以项目适配到WebGL平台,与适配到移动平台基本上是一样的。WebGL2.0的标准刚刚制定完成,支持的浏览器不知何时能推出,所以目前的
适配工作,是以WebGL1.0为目标平台的。除了不能用MRT之外,我们需要把3D
Texture以2D切片拼接的方式实现,还有DepthTexture要手动Encode到RGBA格式,这些工作太熟悉了,好像10年前就在做,不禁
感叹实时3D这些年发展得真慢,除了游戏之外好像真的没有什么太好的应用。
五:材质与全局光照
Unity5新的材质系统,可调的参数并不
多,所以还是用我们原来自己的,也是统一材质。新加的ReflectionProbe感觉很初级,就是世界坐标的一个AABB,都不能旋转,其实
BPCEM(Box Projected
CubemapEnvironmentMapping)是可以旋转的,不过还是不能处理复杂户型,矩形边界以外的地方反射错得都很离谱。我们的反射方案是
在BPCEM的基础上,加了一点点光线跟踪,虽然还存在一些问题,不过效果我已经很满意了,最重要的是,它的帧数比SSR(ScreenSpace
Reflection)高得多。
改进后的反射方案
由
于样板间都是用户自行创建,我们没办法使用Unity自带的烘焙系统(Enlighten),而且传统的烘焙方法生成的Lightmap容量太大,根本不
适合网络应用。我们自己的烘焙系统,是将3D空间划分成128x16x128的方格,然后用一个3DTexture保存每个方格的光照信息,再通过自定义
渲染路径将3D Lightmap加进去。
六:编辑器集成管理后台
管理后台要实现模型的管理和上传功能,于是索性将它做到
UnityEditor中。在这里,我们可以对模型进行减面(CruncherPlugin),材质调整,对模型对应的商品进行命名,分类,定价,最后导
出Assetbundle并上传。Unity强大的编辑器API使这一切变得非常容易。
模拟装修平台只是网页3D的一个应用举例,随着WebGL不断的规范和成熟,会有越来越多非游戏类的,有实用价值的应用涌现出来。最后放上我们的演示地址:
http://lib3d.com/Demo/
由于只是WebGL的实验,所以只放出一个场景漫游,没有编辑功能,操作是鼠标左右键拖动加上滚轮缩放。载入和烘焙很慢,请尽量不要用IE或移动端访问,如果有弹出错误,请忽略。
⑵ webgl和unity区别
应用范围不同:WebGL是一种3D图形标准,野物它使用JavaScript语言编写3D图形应用程序,并且可以桥慎跨平台运行。它具有良好的兼容性,可以在所有主流浏览器中运行颂消液,并且性能较好。Unity3D是一个跨平台的游戏开发工具,它使用C#和JavaScript编写游戏逻辑,支持Windows、Mac、iOS、Android、WebGL等多种平台。
⑶ 如何在Unity3d中实现和网页数据的交互
Unity3D和网衡早棚页数据交互的基本原理简介:
1、Unity3D的游戏引擎是和编辑器集成在一起的,所有它也是一个制作/开发平台。
2、Unity3D是使用JavaScript、C#作为核心脚本语言来驱动事个游戏引擎。
3、平台可以
数据交互:
1、在Unity3D中调用网页js函数
如果我们在html中有脚本函数;则在u3d中我们可用使用Application.ExternalCall调用js函数,该方法只适合在Web3D环境下使用。该方法支持基本类型的传递和数组传递,任何类型都会转换成字符串类型使用。
例子代码:
Application.ExternalCall("SayHello","Thegamesayshello!);//调用SayHello,传递一个字符串
2、在Unity3D中直接执行一段脚本代码如:
Application.ExternalEval("if(document.location.host!='unity3d.com'){document.location='http://unity3d.com';}");
3、在js中调用Unity3D函数(传递消息等)
如果有Unity3D中有一段用JS写的功能函数:
functionMyFunction(param:String)
{
Debug.Log(param);
}
需要在JS中呼叫这个函数则可以这样写:
这里要注意的是MyObject代表Unity3D中的一个场景名称为MyObject,MyFunction是调用的函数,最后一个字符为传递的参数。
与php,jsp等的表单数据交互
与php,jsp等的表单数据交睁租互很可能会是今后用到的主要方式,原理是利用form表彰传递数据,下面以php为例来进行说明。
Unity3D可以实现向某个指定页面发送表单数据然后在php中使用_POST获取传递回来的表彰数据。
比如:$action=$_POST["myform_action"];//定义一个变量$action用来获取页面传递过来的表单数据
if($action!=""){
echo$action;//如果接收到了数据则打印出数据内容
}
?>
在Unity3D中我们发送数据的代码如下咐则:
varform=newWWWForm();//定义一个网页表单
form.AddField("myform_action","Action1");//添加一个表彰字段名称为myform_action内容是action1
vardownload=newWWW("www.xxx.com/index.php",form);//发送表单数据到指定网址页面
假如index.php执行的是数据库/统计操作,我们就可以对传递的数据进行保存读取或者其他操作了。
⑷ 学unity3D好还是web前端好
虽然不能一概而论,但是从工作环境的角度来说游戏行业整体确实不如互联网行业,管理和思维模式都相对保守些,甚至到处还能看到使用瀑布式开发的团队。如果更注重生活质量,做前端可选择的余地要更大。
从技术追求角度,web 前端跟 3D 开发没法比,unity 是更好的选择。但从另一个角度,有理想的技术宅即使做 web 前端也不可能让自己长期滞留在这个领域,总能轰轰烈烈地向新的领域迈进,所以选择 web 前端虽然不是好的切入点(个人以为),但对于有理想的技术宅并不会成为技术进步的障碍,关键看个人。
⑸ 关于Unity 3D web Player
unity 3d web player有缓存文件的,默认情况下使用公共缓存,就是多个unity 游戏公用一个缓存文件,文件大小上限是50M,开发商课以自定义缓存目录,但是unity对该功能是额外收费的。好像是按照游戏收入收费或者一次买断。
清理缓存的方式是官方有个网页!
http://unity3d.com/webplayer/setup
⑹ 现在做Java web 开发,转unity 3d 是不是明智的选择
楼主您好
我是做javaweb的,一个好伙伴是做u3d的,
u3d更多是用到c++,js方面,而且游戏的话需要对算法要求很高,(虚拟现实?也差不多)。
javaweb虽然领域不一样(bs应用系统为主),各方面都要low一个档次(算法是什么东东?)
跨度太大。外加图形学等专业知识确实不容易
语言不同,算法水平不同,方向不同。。。各种不同。。。
一线城市u3d待遇同水平至少是javaweb*2
三线城市,javaweb还能凑合混口饭,u3d是什么东东?
综上所述,还是要切合个人实际。。。
⑺ Web前端,android,ios(iphone or ipad)开发,Unity 3D,选哪个好
android优势:
1.移动端(手机端)正在逐步蚕食pc端(电脑端)的市场份额,而android的侧重就是移动端开发
2.目前中国市场上最紧俏的两种系统IOS、android,而android的优势在于更多的应用选择,与多元化的自定制空间
3.android是开源的,相对于苹果的IOS来讲android更容易上手,复杂程度没有难于理解的地方。所以,即使学历不高,即使零基础也是可以学会的。但是android学习需要有一些java知识储备
4.目前国内市场上android的市场占有份额比苹果要高,而且还有逐年上升的趋势。说明android的发展前景是很好的,这样随之而来的就是开发人员的需求量激增
ios优势:
1.软件与硬件整合度高
iOS系统的软件与硬件的整合度相当高,使其分化大大降低,在这方面要远胜于碎片化严重的Android。这样也增加了整个系统的稳定性,经常使用iPhone的朋友也能发现,手机很少出现死机、无响应的情况
2.界面美观、易操作
苹果在界面设计上投入了很多精力,无论是从从外观性还是到易用性,iOS都致力于为使用者提供最直观的用户体验。iOS系统给人的第一感觉就是简洁、美观、有气质,并且操作简单,用户上手很快,用起来有种手到擒来、行云流水的感觉
3.安全性强
对于用户来说,保障移动设备的信息安全具有十分重要的意义,不管这些信息是企业和客户信息、或者是个人照片、银行信息或者地址等,都必须保证其安全。苹果对iOS生态采取了封闭的措施,并建立了完整的开发者认证和应用审核机制,因而恶意程序基本上没有登台亮相的机会。iOS设备使用严格的安全技术和功能,并且使用起来十分方便。iOS设备上的许多安全功能都是默认的,无需对其进行大量的设置,而且某些关键性功能,比如设备加密,则是不允许配置的,这样用户就不会意外关闭这项功能
4.应用数量多、品质高
iOS所拥有的应用程序是所有移动操作系统中最多的,iOS平台拥有数量庞大的app和第三方开发者,几乎每类app都有数千款,并且优质应用极多,这是其他移动操作系统无法比拟的
Unity 3D优势:
Unity3d网页游戏,手机游戏,对于各个平台支持都很好。并且支持flash,网页运行再也不用安装浏览器插件。这块做的不错。开发人员起点比较低。基本的资料文档都很丰富了。缺点就是画面不给力。灯光、画面各方面在这三个引擎里都是最差的,并且对于美术人员来说,做开发不是很好上手。很简单的一个材质。都要去写shader
UNITY3D现在已经成为了众多团队的首选3D引擎。
并且,随着Unity3D4.3的发布,原生的2D支持也让人大开眼界。虽然Unity3d的原生2D功能还有很长的路要走
⑻ Web3D与unity3d有什么关系
前者是一个统称,后者是其中一个软件。还有virtools等等软件