如何把握游戏卡通渲染的制作流程?

所以我有以下两个问题:

1、如何在3ds max中写着色器,美术修改模型后能及时看到效果?

2、成熟的制作流程是什么样的?

A1:这个不难的,让渲染程序员简单看一下Maya或者Max的文档,几个小时基本都是可以搞定的,Max或者Maya都有例子和文档,比如Max的话就是用DirectX Shader Material,不用把这个想得很难,好好看文档。

我觉得本质上主要是想要所见即所得,所有的工作也都是为了这个目的。卡通渲染对美术资源的修改大多需要定制化,例如靠刷顶点色控制描边,靠改顶点法线去改善光照,所以如果把Shader做到Max里可以大大提高美术的制作流程,而不是总是导入导出。通常的流水线是:维护一个和引擎预览效果一致的Max(或Maya)Shader材质,再加一个自定义的法线编辑工具(如果美术觉得内置的不够用,比如Max的法线编辑比较困难),这样在修改美术资源保证效果一致性就好了。

感谢乐乐@UWA问答社区提供了回答

题主补充:对于第一个问题,读书哥提供了一个方法:Max里可以用HLSL写,有DX9/11的Sample,但是问题挺多的,Driver建议用Nitrous Direct 3D 9,记得关掉Gamma/LUT和SSAO。

UI

Q2:我们打开UI界面Profiler峰值显示 Canvas.SendWillRenderCanvases消耗了50%CPU开销,Canvas.SendWillRenderCanvases 消耗80ms,Graphic.Rebuild 消耗了72ms,请问有什么办法可以优化呢?

UWA:这是某个/某些大量的UI界面元素的重建开销,建议如下:

(1)先通过“动静分离”原则检测是否有不必要的静态UI网格参与了重建;

(2)UI界面是否过于复杂,UI层级或者网格量是否过大;

(3)在UWA性能简报中查看对应的解决方案和相关视频,磨刀不误砍材工。下图中可以看到这些参数在每次测评中的走势,耗时下降的很快:)
 



物理

Q3:如下图,我们物理模块中没有用到任何碰撞对和Rigidbody,为什么还会有物理模块的耗时呢?
 


UWA:题主的Unity版本是多少的?如果是Unity 5.4版本以后,那确实不太正常,因为Unity引擎在5.4后对物理系统做了调整。

如果是Unity 5.4之前版本,那么就是比较正常了,因为二手手游账号拍卖无论你是否使用,物理模块每帧都在运转,你可以理解为是空转。对此,题主需要查看报告中“重要参数解析->引擎性能参数”中的“Physics.Processing”或“Physics.Simulate”一页,里面有这两个函数的调用次数。很多时候,物理模块即便没怎么用,但由于是每20ms运行一次(默认情况下),也会在同一帧中运行很多次,如下图所示。所以,物理模块有个特点,就是当你项目卡的时候,它会让你的项目更卡:)对于这种情况,题主只需要去优化其他模块,当其他模块的耗时下来后,你会发现物理模块的耗时自然也就下来了。




资源管理

Q4:我最新在使用Unity 2018.1.0 Beta 13的版本碰到一个问题,不过我相信低版本也可能有同样的问题。我使用Unity 2017新出的SpriteAtlas进行Sprite打包,并且生成了AssetBundle,发现这种方式和tag不一样,自己还需要处理延迟绑定,因此需要自己去实现SpriteAtlasManager.atlasRequested的回调。

于是我将所有SpriteAtlas的Include Build都去掉,打包了AssetBundle,但是在实现SpriteAtlasManager.atlasRequested碰到一个问题:如果我使用同步接口,也就是AssetBundle.LoadFromFile和AssetBundle.LoadAsset的接口加载SpriteAtlas,并且在SpriteAtlasManager.atlasRequested内部就直接回调action,则不会有问题;如果我使用异步接口,也就是AssetBundle.LoadFromFileAsync以及AssetBundle.LoadAssetAsync,等加载完成之后再回调action,也就是在SpriteAtlasManager.atlasRequested以外,则会导致图片无法加载,无论是编辑器还是打包出来(我测试的Windows的包),都会导致UGUI界面是花的。

想请教一下这个算是Unity的Bug还是我的某些理解操作有问题导致的?

UWA:首先“发现这种方式和tag不一样,自己还需要处理延迟绑定”,这里并不是必须的,如果勾选了Include in build,是不需要自己处理binding的,直接加载实例化就可以了。只是需要注意这个Bug,目前会导致Bundle中图集冗余。

如果题主就是希望做late binding的,那么从题主的描述中看,应该是说SpriteAtlasManager.atlasRequested中必须直接回调action才有效,用了异步(相当于隔了几帧)之后才回调action就无效。

所以做了个例子尝试复现,但没有出现类似的问题,下面是测试代码,UI Prefab(里面用到了某Sprite)和对应的SpriteAtlas做依赖打包,分别记为prefabBundle和saBundle。加载的代码如下,版本是2017.2.2。
 

  1. IEnumerator Start ()
  2.     {
  3.         var loadOp = AssetBundle.LoadFromFileAsync(Application.streamingAssetsPath + "/" + prefabBundle);
  4.         yield return loadOp;
  5.         var prepre = loadOp.assetBundle.LoadAsset<GameObject>("prop_parachute");
  6.         GameObject.Instantiate(prepre);
  7.     }
  8.     void OnEnable()
  9.     {
  10.         SpriteAtlasManager.atlasRequested += RequestLateBindingAtlas;
  11.     }
  12.     void OnDisable()
  13.     {
  14.         SpriteAtlasManager.atlasRequested -= RequestLateBindingAtlas;
  15.     }
  16.     void RequestLateBindingAtlas(string tag, System.Action<SpriteAtlas> action)
  17.     {
  18.         StartCoroutine(LoadFromAssetBundle(tag, action));
  19.     }
  20.     IEnumerator LoadFromAssetBundle(string tag, System.Action<SpriteAtlas> action)
  21.     {
  22.         var loadOp = AssetBundle.LoadFromFileAsync(Application.streamingAssetsPath + "/" + saBundle);
  23.         yield return loadOp;
  24.         var loadOp2 = loadOp.assetBundle.LoadAssetAsync<SpriteAtlas>(tag);
  25.         yield return loadOp2;
  26.         var sa = loadOp2.asset as SpriteAtlas;
  27.         action(sa);
  28.     }
复制代码



资源管理

Q5:当下ASTC在安卓平台使用的可行性是如何的呢?官方文档所说, 几个主流GPU支持ASTC的要求都不高,请问在安卓设备上使用ASTC还有其他什么需要注意的吗?
 


就 ASTC压缩方式本身来说是没有问题的。对纹理尺寸无要求,支持多个品质等级。但问题在于 OpenGL ES 3.2 以后才支持,也就是一大批中低端机就没戏了。比如红米2,小米4。iOS 平台的 iPhone 6 之后才支持。不支持的结果就是纹理会自动转成 RGB24/RGBA32。所以我们项目尝试了一下 ASTC 又用回 ETC2 了。

关于UWA:

由侑虎科技开发的游戏/VR应用性能优化平台,目前提供 1)性能诊断与优化 2)资源检测与分析 3)UWA GOT 三大工具,帮助开发者在短时间内大幅度提升性能表现;同时其搭建的知识分享的博客和答疑解惑的互动平台使广大开发者收益。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值