unity地形插件 t4m terrain 可以lod t4m可以lod吗

& 最近1个月做了unity 次世代开发的一些程序方面的支持工作,当然也是基于物理渲染相关的,主要还是skyshop marmoset的使用吧,他算是unity4.x版本 PBR的优秀方案之一了但在使用以及性能上,还是多少有些坑和不足,这里也是自己的一些心得吧,希望可以其他对这个方案有兴趣的朋友起到一些帮助。
一、遇到了fps降低的BUG
国庆节前的老版本工程和最新的工程版本运行起来没任何区别,但新版本在真机上的的运行效率有问题,只有7.5fps开发和运行环境,XCode6.1 IOS8.1 IPad Air 分辨率 Graphic level GLES 3.0
图1 老版本的运行截图,为了能做参考,我这里把新版本的场景文件拷贝到老工程里
新版本相同的场景就只有不到8FPS然后对两个版本用Xcode做了分析,旧版本fps analyze
新版本fps analyze,同样的shader消费的ms是老版的5倍
发现bug后,尝试定位问题 1 一开始认为是marmoset版本问题,但用老版本完全覆盖,fps并没有提升 2 删除和场景资源相关外的所有资源,重新build后,fps就恢复了,不过这种解决方法应该是无非接受的
目前临时的解决方法,把老工程的ProjectSettings里的文件替换过好了,具体的原因还要继续排查。
另外有一些版本的SkyShop的Mobile shader没有gles3.0的支持,需要在给所有场景里使用的Marmoset的shader里添加关键字好早marmoset的是UberShader的设计,所以只要改几个就好了。
要unity支持es3.0的话,需要在设置Player Settings.. 的图形等级里选择 Automatic或强制gles3.0。
如果只用es2.0的话,因为unity会使用texCube或texCubeBias来替换texCubeLod,没有lod的支持,使用cubemap的mipmap来实现粗糙度的功能就会受到影响
最终渲染画面里可能会看不到材质的粗糙度表现。
如果把这个bug解决的话,那么性能评估应该和10.1前的报告一样,IPad Air 可以承受的是全屏,100Draw Call的支持IBL材质物体的绘制,另外有IBL的shader的瓶颈
应该是在pixel shader上,如果1,2个IBL材质占满整个屏幕的话,一样会有潜在的瓶颈问题产生。
二、关于另外一个场景的问题解决
Draw Call可以先在Editor或联机Porfile里查看,一些设备不支持Unity Editor的GPU Profile,所以还是要用到Xcode
没做任何优化的前提下&draw call是592, GPU里两个占用最高的shader,9.8ms和7.94ms都是Terrain占用的(地形和他和阴影贴图),
另外关闭阴影后为289 drawcall,关闭地形后289-&219(地形 70dc),关闭水面289dc-&246dc(水面反射)
首先是Terrain,不论是shader还是dc都有些多,在Xcode的Frame view里,Terrain的绘制有不合理的地方,从截图场景来看,这种大小的地形需要70的draw call次数有些夸张了,另外就是shader上,如果是静态烘培阴影,应该是可以合并到一个shader里绘制的。建议还是从优化地形开始,降低dc,合并shader,如果u3d 的terrain没有优化的可能,不如就直接max里制作网格的地面来代替。
水面可以优化反射部分的实现,静态场景的反射可以预烘培到一张贴图里,而可以反射的部分,建议单独添加到一个layer里。降低dc数量。
摄像机的可视范围,角度,以及shader Lod的设置,在Xcode的分析中,一些极远位置的山体还是被绘制了,而且和近处的角色一样高质量的shader,这点用unity的内部设置应该就可以解决。另外这个demo摄像机的角度过低,导致远处的物体也都被渲染到,如果适当修改摄像机角度,例如传统的45视角,应该可以裁剪一部分场景物体。起到降低dc和ps填充率的作用。
三、关于Marmoset shader的改进意见
1。如果不使用skyshop的天空盒的动态功能的话,skymanager的update可以关闭
&&&&&&&&&&&&&&&&&&&&if(_SkyboxMaterial)&{&&&&&&&&&&&&&&&&&&&&&&&&_GlobalSky.Apply(_SkyboxMaterial,&0);&&&&&&&&&&&&&&&&&&&&&&&&_GlobalSky.Apply(_SkyboxMaterial,&1);&&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&}&&&&&&&&&&&&}&&&&&&&&&&&&#if&UNITY_EDITOR&&&&&&&&&&&&if(!Application.isPlaying)&return;&&&&&&&&&&&&#endif
直接在前面返回就可以了,这样可以节省的的消耗和。
的使用,之前为了解决的问题时,尝试的一种解决方案,在里直接修改的参数
&(_SpecCubeIBL, lookup_38.xyz, lookup_38.w);
&(_SpecCubeIBL, lookup_38.xyz, 1);,
这样效率可以提高倍以上
分析可以看下图
float glossLod_36;& glossLod_36 = tmpvar_27;& mediump
vec4 spec_37;& mediump
vec4 lookup_38;& highp
vec4 tmpvar_39;& tmpvar_39.xyz = ((v_33.xyz * tmpvar_32.x) + ((v_34.xyz * tmpvar_32.y) + (v_35.xyz * tmpvar_32.z)));& tmpvar_39.w = glossLod_36;& lookup_38 = tmpvar_39;& lowp
vec4 tmpvar_40;& tmpvar_40 = textureLod (_SpecCubeIBL, lookup_38.xyz, lookup_38.w);
上面是还没有做任何修改的,,也就是还是根据的值,在里计算得出
&vec4&tmpvar_40;& tmpvar_40 =&textureLod&(_SpecCubeIBL, lookup_38.xyz,&1.0);
在里直接传一个值的方法,热更新后可以看到消费的和之前有一定的减少。
不过重新启动游戏的话,ms有了40%左右的减少,这是因为IOS做的优化,如果lod在shader运行前已经确定的话,会直接pre fetch制定的texture,就不需要在每个pix shader里重新执行一次采样了。 所以,glossy map建议适量使用,一些不需要细节的材质可以直接用一个恒定的roughness参数替代。
还有就是关于pbr shader算法的优化,marmoset自己内部有MARMO_HQ的关键字,通过切换可以实现一定程度的优化,先是两种质量的对比
MARMO_HQ 差别在shader的精确度上,以及出射光的亮度上的用处,对向量的规格化,起到类似能量守恒的作用,函数的算法选择,使得渲染的出射光总量更符合物理效果#ifdef&MARMO_DIFFUSE_DIRECT#else&&&&spec&*=&saturate(10.0*dot(N,L));#endif#ifdef&MARMO_DIFFUSE_DIRECT&&&&spec&*=&saturate(10.0*dp);#else&&&&spec&*=&saturate(10.0*dot(N,L));#endif以上是shader代码里一些规格化设置的样本。
shader里还有其他一些可优化点
& 例如Specular Intensity,Sharpenss,fresnel Strength,并不是pbr Material的标准参数,一般只需要roughness或glossy map里选择其一做粗糙度参数就可以 而其他参数去掉可以减少一部分shader的计算量
& 前面提到的glossymap和roughness的切换,需要shader支持,编辑器也要做一定的修改。
fresenl 反射方程,marmoset提供了的 splineFresnel和fastFresnel的两种方法,但实际的计算量还是比较多,根据GDC2014上的unity5的方案,可以换成简单的pow 4次方的形式。 确定TextureCubeLod的方向和lod值的算法上也优化的空间。
& UberShader的设计是一个优点,在开发的时候可以减少很大的工作量,实际运行时,创建和编译shader数量也很少,方便分析和定位shader的问题,和在Xcode里进行优化调试。
& 另外就是marmoset的skymanager部分,还是需要修改的,他本来的设计目的是基于天空盒来生成IBL使用的Cubemap,而真正的IBL光照是基于周围环境来生成,所以,skyshop这种整个场景统一一张cubemap的方法,在真实性和效果上还是很值得斟酌的,它的IBL的生成和管理接口对做游戏来说也不是很方便,优点就是它提供了编辑器和cumbemap生成部分的全部代码,不论是扩展还是修改bug,都是可行的。
& unity4.x的版本里,在移动端是无法支持延迟渲染方法的,所以对场景里的光源限制会比较严格,一盏方向光就是极限了,其他烘托场景的用的点光源,就只能使用lightmap了 而lightmap的具体算法,也是要用户自己实现的,Marmoset在MarmosetDirect.cginc里实现了directional lightmap lighting的实现,LightingMarmosetDirect_DirLightmap 这个的命名是要按照unity custom shader的规范来命名,就可以在unity渲染管线里自动被识别,如果想优化,或者要支持Dual lightmap等其他类型的liaghtmap,最好还是自己提供优化的方法。希望我们自己的项目里,将来能提供TBDR的支持来达到大量光源的支持。
最后考虑还是要和UE4的移动产品做一下竞品对比的:
UE4的Sum Temple项目是个很好的参考,gles2.0的图形规格下,也能获得很好的效果
UE4 mobile的图形规格,简单来说就是一个Directional light+distance shadow来生成光照和阴影,其他的场景明暗和各种颜色灯光的亮度由lightmap来实现,
& IBL方面,可以为通过设置RefelctCapture,给制定区域内的对象生成IBL,同一场景内可以使用多个cubemap的实现(ppt里说他在移动端是使用了一个统一的cubemap,这点需要后面直接对它的工程做真机剖析了)。另外也有bloom+AA+light shaft+dof等的后处理效果,但因为图形规格的限制,ES2.0版本是没有真实HDR的支持的。
接下来我会准备一篇针对UE4渲染和优化方法的分析。
& 通过这次U3D的PBR的实验,在IPAD Air和K1这种硬件级别的机器上,制作PBR的游戏还是没有问题的,一开始担心视网膜屏的填充率问题,在实际测试中,还是可行的,但需要整个开发团队有一定的优化意识,才能在整个上保证一个良好的运行效率,比如支持IBL的分配,而且游戏制作方面,也要考虑什么样的游戏类型,才能发挥PBR渲染的优势,特别是间接照明对游戏场景品质的提升(消费最高的IBLshader支持的是间接照明的高光部分)。还有就是多使用unity的batch功能,尽量降低dc和关于shader状态切换等等,另外可惜的是,因为之前7fps bug的问题,这次没有时间把unity的post effect部分实现,个人考虑是可以把ue4的这部分实现移植过来, UE4对U3D可以起到很好的竞品作用,在今后的PBR效果和效率的测试和优化中,一定的对比分析和借鉴,也是很有帮助的。
阅读(...) 评论()(转载)Unity&T4M&中文讲解_yoyo_新浪博客
(转载)Unity&T4M&中文讲解
T4M是什么?为什么要用它?它是一个地形(Terrain)工具。它是一个Unity地形的替代工具,用于所有被3D开发工具(Maya,EarthSculpto,3DS
Max,Blender等)创建的几何体。最初,它只用于移动设备,但是更多的人发现了其他的一些益处:
T4M是允许用户导入几何体到Unity作为地形(Terrain)的一种工具。T4M for Web和for
mobile在编译时体积是非常小的,仅有一个draw call,快速的加载速度和强大的性能(旧设备也一样)。
所以,我决定针对所有平台并且提出了一整套解决方案(比如:Elevation tool
yet)。对于每个导入的几何体,T4M包括纹理绘制,绘制树和草,并且有一个细节(LOD)系统和广告牌。T4M还可以把Unity
Terrain转换成包括混合纹理(blend texture),4倍数纹理(一种增强纹理性能和存储移除的透明度贴图)(the
first four splat textures)的几何体,并且使用它的所有优点比一个导入几何体+T4M系统。所有特性兼容Unity
Free和Pro版。特性:Shader Model 1,2,3
(iPhone,iPad,Andoid,Web,PC,MAC,Flash
Naci)转换地形到T4M,保持所有纹理和混合纹理(它使用4倍数纹理)转换你自己导入的Mesh(你可以自由的用其他3D软件制作地形)绘制和放置任何你想要的对象,在新的绘制系统下集成细节(LOD)系统集成广告牌系统直接用物质材质绘制最佳刷新预览兼容Unity地形Shaders,你可以使用自己的Shader返回或重置已经绘操作添加自己的画刷(64*64)兼容实时阴影,光照贴图和Directional光照贴图事先声明本教程使用的是T4M
v2.41版本,Unity为4.6.3 Pro版,请尽可能保证相同,以免有所出入
​​详细地址:http://blog.csdn.net/tianmao111/article/details/
以下是我用一个面片混合4张贴图的制作效果。
比较节省drawcall及顶点资源。​
&混合效果
博客等级:
博客积分:0
博客访问:365
关注人气:0
荣誉徽章:unity 游戏LOD渲染系统源码Real Imposters LOD System,Unity3D,游戏源码,6m5m游戏素材
请求处理中...
unity 游戏LOD渲染系统源码Real Imposters LOD System要求Unity 5.0.0 或更高版本。Real Imposters LOD System finally brings Imposter Rendering to Unity. It replaces your complex non-moving Gameob jects with dynamically generated 2D Billboards to dramatically decrease your polygon count.&Features&REAL Imposter Renderingup to 20x more FPS100% dynamic - no preprocessing requiredsimple drag and drop setupsupports caching & preloading of Imposterssupports shadows from direction lights
或 0 积分 ()
下载42浏览人数688交付方式直接下载
注意:【1】本站只是个免费分享平台,并不敢保证所有源码人人都能编译,因素太多,旨在学习研究,如果您有顾虑或斤斤计较就请不要下载了,大家都不容易,互相理解,才能让更多的好资源出现!【2】本站资源仅限于学习研究,请在下载后24小时内删除,不要用于任何商业用途。【3】部分素材压缩包因体积过大而上传到百度等网盘上,如果发现在本站下载的压缩包只要有几K大小,说明该压缩包里只是网盘的下载链接,并非文件损坏,本站的所有素材都是经过了审核,大家可放心下载,欢迎监督反馈。【4】做个好平台真心不容易,我们一直在努力,因本站素材量大,难免会出现某网盘下载链接失效等问题,请大家及时反馈,我们会及时修正保证您可以拿到素材,请大家支持和理解!
免责声明:本网所展示的素材与服务信息由买卖双方自行提供,其真实性、准确性和合法性由信息发布人负责。本网不提供任何保证,并不承担任何法律责任,如有不妥之处请及时反馈,本网将会妥善处理。
友情提醒:本站旨在游戏开发的学习,所分享的素材资源均来源于网络,仅适用于学习参考,尊重版权,禁止用于任何商业用途,否则后果自负,所展示的素材版权归原作者或公司所有,如果本站素材侵犯了您的权益,请联系我们,我们将及时处理。
猜您喜欢的游戏素材
0金币 / 份
1金币 / 个
1金币 / 个
0金币 / 个
1金币 / 个
0金币 / 个
0金币 / 个
2金币 / 个
0金币 / 个
1金币 / 个
好评率100%
发布素材70

我要回帖

更多关于 unity t4m 的文章

 

随机推荐