1、WebGL是什么? WebGL是一个low-level的JavaScript API,这个 API 提供了一种能力使得网页上脚本和计算机图形硬件直接交互。这就让我们在浏览器里创建,实时运行3D图形成为可能,这是一种Web的标准,(运行的浏览器)不需要另外装插件,不久以后这种技术会被越来越多的智能手机所支持。许多人把WebGL当做HTML5的新技术。
2、怎么让WebGL运行在本地机器上? 首先,需要一个支持WebGL的网络浏览器版本,比如浏览器Firefox,Chrome,Safari。
3、怎样把大型顶点网格表示在浏览器中 ? 如果你有一个很巨大的3D模型,而且想把它从web服务器传递到你自己的WebGL网页。一个好的建议是使用JSON格式的编码。毕竟在WebGL网页内部,作为Javascript来处理他们。 所以为什么不在Server上把它转换成那种格式,然后用Xml Httprequest的方式来传送他呢, 另外一种机制用到XML类似格式的就是COLLADA(这是一种面向交互式 3D 应用程序的基于 XML 的数字资产交换方案,使 3D 创作应用程序可以自由地交换数字资产而不损失信息 - 使多种DCC和3D处理软件包可以组合成强大的工具链管道)。但是解析XML格式并且把它转换成Javascript的内部格式会比使用JSON慢。一些框架,例如O3D,支持一种在服务器端把COLLADA转换成JSON格式的服务器代理,便于客户使用。
4、在U3D中,如何解决视频播放问题? 我们都知道VideoPlayer组件,Source来源有两种形式,VideoClip和URL。使用VideoClip,不管是在检视面板将视频拖拽赋值或者是代码动态赋值,在WebGL平台均不能播放,只能使用URL形式,填写视频文件的路径,打包后才能正常播放视频。
5、在U3D中,如何解决文件读取问题? 一度认为WebGL不支持使用StreamAssetsPath路径,但测试发现是可以正常使用的,使用System.IO.File读取该路径下的配置文件会失败,是因为使用File类相关函数时,我们真实填入的WebGL平台下的路径参数,是以file:///开头的,但是File读取后的路径开头却是/file:/ 所以结论是,在WebGL平台下不要使用System.IO.File类。
6、在U3D中,如何解决URL链接问题? 在PC平台使用Application.OpenURL函数可以打开指定的网页,但是在WebGL端使用该函数打开网页时会覆盖我们的程序页面,没有其他重载方法。第一步,只能自己写个插件,用js代码打开新的网页。在Plugins文件夹下创建一个 .jslib文件。第二步,在U3D中通过调用声明好的外链方法实现关联,再用一个静态方法进一步封装,方便其他类调用。最后使用我们自己编写的OpenURL函数代替Application.OpenURL即可。
7、在U3D中,解决发布中容易报错? 程序中出现DLL调用的情况,删除调用DLL相关代码。发布路径不要出现中文。发布的时候不要用中文路径。
8、在U3D中,称之无法通过IO流读取本地json文件? 可以改成TextAsset绑定Json来读取。
9、在U3D中,WebGL不显示字体? 开始导出来发现一些字不显示,还以为分辨率压缩Text文本导致字不显示,后来发现原来是WebGL的问题,查阅信息说不要使用U3D自带的字体即可。
10、在U3D中,WebGL字体模糊? 这个比较常见,Unity默认使用Text的字体放大就会很模糊,甚至看不清,解决这个问题的办法就是使用TextMeshProUGUI插件,这个插件可以在PackageManager里下载。这个插件的优点是:A、你可以自己制作不同的字体;B、无论放大多少倍,或者字体大小很小时,都会很清晰的显示。
11、在U3D中,WebGL解决模型锯齿问题? 模型锯齿问题unity自身的解决方案是:Project Settings->Quality->Anti Aliasing 选择8x Multi Sampling,Quality 记得选中webgl平台下你设置好的选项。当然还有一些插件都会有抗锯齿的优化,比如PostProcessing后期处理特效的插件,有兴趣可以试试。
12、在U3D中,WebGL调式的小妙招 勾选ProjectSettings->Player->Enable Exceptions为Explicitly Thrown Exceptions Only,不然在浏览器控制台就看不到debug了,最后正式上线记得关掉。
13、在U3D中,WebGL使用Asset Bundle加载资源模型材质显示异常? 刚开始导出WebGL包和AB包,使用浏览器加载,然后发现一片红,使用ab包加载的有一部分模型材质显示为粉红色,第一反应就是材质丢失,发现原来需要将相关的shader添加到ProjectSettings->Graphics->Always Included Shaders里,切记将Unity Standard材质包含在内,不然你会发现你导出webgl包会非常慢并且你的包的大小会很大,因为它包含了成白上千种shader,所以这里尽量少使用Standard,使用也可以,就是效果会变化,在编辑器显示很好,导出来就跟换了一种Shader一样,尽量使用其它可以替代它的Shader,或你可以去编写shader,或使用ShaderGraph插件编写的Shader,然后包含在这里就可以了,这样导出速度快且包小。
14、在U3D中,WebGL导出包浏览器打开报错超出内存大小? 做成webgl的项目或多或少会出现这样的错误,经查找官方资料,使用Unity2018版的可以调节导出包使用内存的大小,Unity2019版本开始就删除了改变内存大小的值,然后找到有个解决办法是代码改变内存大小,发现Universal WebGL template模板下有段代码被注释了就是改变内存大小的,然后试着加大内存的值,在火狐浏览器是可以正常打开的,然而在Google浏览器就直接报另外一种错误,欲哭无泪,甲方要求使用的是Google浏览器,只能另寻其他办法,最后找到的解决方案就是使用Asset Bundle来加载包,减少包的大小,减少内存的使用。
15、在U3D中,WebGL性能优化。 1)、减少模型的片面数和顶点数(尽量不使用球和圆柱体这两个片面数太多了); 2)、使用静态合批,勾选Project Settings->Player->Other Settings->Static Batching,相应的物体Static需要勾选Batching Static; 3)、使用动态合批,勾选Project Settings->Player->Other Settings->Dynamic Batching,相应的物体Static需要勾选Batching Static; 4)、贴图如果模糊的话,去掉勾选Generate mip map,尽量将MaxSize减少; 5)、去掉阴影,使用光照贴图; 6)、如果模型的材质不需要受到光照影响,尽量使用Mobile/Diffuse或者Unlit/Texture; 7)、尽量删除碰撞体,如删除网格碰撞,尽量不使用网格碰撞; 8)、删除没有用的Animator(有些模型导入会有); 9)、尽量少使用Animator,简单的动画使用Dotween或者使用Animation,繁琐的、多状态才使用Animator; 10)、使用光照烘焙,使用Reflection Probe和Light Probe Group,属性设置完成后,将需要受光照影响的模型放置里面,在lighting面板点击bake即可(物体删除都可以,数据已经存在Scene数据里了); 11)、使用遮挡剔除,物体放置在Occlusion Area,Static勾选Occluder static和Occludee static,在Occlusion面板进行bake即可(物体删除都可以,数据已经存在Scene数据里了); 12)、开始运行时尽量少使用new; 13)、使用LOD(这个需要慎用,这个不太推荐使用,只有内存充足下使用,一般webgl内存都比较紧张,容易内存溢出)
转载方便自己查看,如有侵权联系