zoukankan      html  css  js  c++  java
  • 美术资源优化/LOD

    在提升画质的时候,“优化”是必须要面对的问题,而且随着画面一步一步的提升,优化需要付出的时间和人力会越来越多。而优化中一个很重要的部分就是美术资源的优化,需要制定合理的制作规范,设计一个好的LOD系统。我们既追求画面表现又希望游戏有流畅的体验,一套好的LOD系统需要美术在资源上做大量的资源分级工作,需要程序搭建完善的LOD框架和辅助工具,每增加一个功能模块都需要把LOD考虑进来。

    目前项目持续维护的LOD框架,定义了四档画质,其中最高画质就是一种技术前瞻,可能不适合于现在的主流移动平台硬件设备,但是能正常表现出画面噱头和竞争力,比如手游项目不敢尝试的全局实时光照、真实的PBR、HDR。关注性能的重心还是放在中配画质和低配画质上,优化的分界线出现在中和低之间,美术资源主导高、低两套资源(模型、贴图、特效、UI)。目前UI方面的全局考虑不足,没有一套完善的LOD。

    一、如何确定项目的LOD分档和性能标准

    LOD(Level of Detail),这里的D代表Detail而不是Distance,也就是说,所有游戏画面和游戏功能的细节都可以进行分级,不必受限于距离。

    1、如何制定性能标准?

    在分级之前,需要确定目标(省电、正常的游戏体验、噱头),我们要在哪一种机型上面运行哪些表现效果和功能,达到怎样的性能目标(帧数FPS、内存占用、Drawcall、同屏三角面数等)。

    • 经验总结:

    1)画质的表现力与性能开销是相互矛盾的

    2)需要持续维护,相关功能系统的设计都需要考虑到不同画质

    3)极简画质牺牲了可玩性,同时会增加LOD框架的复杂性,使用最简单暴力的方式去处理

    • 兼容性问题:

    1)低配画质需要考虑的适配问题

    • 可能不支持Shader定义8张以上的贴图纹理

    • 可能不支持ETC2格式的贴图纹理

    • 可能不支持OpenGL ES3.0

    2)高配画质需要考虑的问题

    • 支持PBR、线性空间

    • 奇怪的Bugs

    3)需要解决各个画质下的兼容性问题,建立黑名单和白名单。

    2、如何找出可以进行分级的细节?

    • 优先找出开销大的点

    • 后处理效果Bloom、HDR、ToneMapping、MotionBlur、DOF等

    • 实时光照和阴影、水面实时反射

    • PBR物理光照

    • Ragdoll、DydamicBones等物理系统

    • 日夜循环、特效天气系统

    • 细节模块的LOD功能考虑

    • 场景 / 角色 / 特效 / 摄像机相关 / 其他系统模块

    二、LOD模块细分

    1、场景相关

    • Shader LOD

    • shader.globalMaximumLOD来指定不同画质的LOD值

    • Shader内部定义多个SubShader,逐个降低计算和纹理采样

    使用Shader LOD存在一个问题,在Properties中定义的贴图,在低级别的SubShader中虽然不被采样和计算,但是仍会有内存占用。建议和角色一样,设计LOD框架时考虑两份prefab,支持场景转一份低配场景文件给低配使用。

    • 制作时合理使用高低模

    • 场景物件分级Level_1、Level_2、Level_3

    • 含场景特效、场景动画物件等,在不同的级别显示/隐藏

    最早期我们采用距离来控制场景特效的显示。缺点:

    1)实时监控距离的开销

    2)每个场景需要单独配置合理的距离值

    使用层级来控制更为直接,在制作LOD时最优先考虑最简单暴力的方式,这样美术规范也不会太复杂,后期也不需要过多的维护。

    • 场景光照切换

    • Light/Light_High 涉及实时灯光对角色、场景阴影绘制的控制

    • 场景光照图切换

    • 物件的Layer层决定阴影

    • 场景文件中配置的Cast Shadows和Receive Shadows设置给烘焙使用,不方便存储下来
    • 设计不同的Layer来决定物件是否产生阴影和接受阴影

    • 角色产生阴影

    • 高配时玩家和Npc角色的Layer修改为Shadow,低配时修改为Player/Npc

    • 中配时玩家自身和Boss角色的Layer修改为Shadow,其他玩家为Player

    • Shadow层绘制实时阴影,Player/Npc会使用圆片来绘制脚底阴影

    • 角色接收阴影

    • 仅在高配画质开启接收阴影

    • 裁剪距离、雾效距离

    • 设计裁剪距离与雾效距离按照百分比减小的算法,防止数值异常

    • 后期处理效果

    • 全局后期处理

    通过全局后期处理管理后期的开启、关闭,控制自定义的选项。

    • 场景后期处理

    场景配置高、低两种后期处理方案,低配时只使用ColorGrading。

    • UI和剧情动画中的后期处理只在高配时开启

    比如:UI中使用的Bloom、剧情中使用的RadialBlur运动模糊等。

    • 日夜循环

    • 单个场景的特效等级

    通过配置表定义场景的类型和同屏可显示的特效数量和等级。

    2、角色相关

    • 角色模型、材质、shader、贴图

    • 通过配置表,在不同画质调用不同的prefab

    • A.prefab和A_Low.prefab使用A.mat和A_Low.mat

    • A_Low.mat使用的Shader降低计算和贴图纹理采样

    • A_Low.mat使用的_MainTex替换低精度贴图纹理

    • A.prefab和A_Low.prefab使用A.fbx和A_Low.fbx

    • LODGroup

    • 角色的模型面数标准提升后,制作高模、低模两档,通过LODGroup功能按距离降档

    • SubShader

    • 高配和中配的光照模型切换,PBR切换Blinn-Phong

    • 角色部件

    • 部件在配置表中可配置为空,在低配时可以不显示背部挂件

    • 角色骨骼Skin Count

    • Skin支持的最大骨骼数降级2-Bones 1-Bones

    • DynamicBone基于物理系统的动态骨骼效果的开关

    • Npc死亡动作基于物理系统的表现的开关

    • 同屏角色数量

    • 不同画质设置不同的同屏显示角色上限

    • 无逻辑任务的客户端NPC开关

    3、特效相关

    • 天气系统

    • 制作不同数量级的粒子系统

    • 脚步特效

    • 开启和关闭脚步特效,可对玩家自身和其他玩家分开控制

    • 掉落特效

    • 复杂特效可以制作简化版本

    以上三种特效都可以通过简单的配置表功能完成。

    • 技能特效

    • 通过配置表,在不同画质调用不同的prefab

    • 技能特效的标准

    • 制作阶段控制特效的性能开销

    • 工具辅助生成*_Low.Prefab

    • 严格控制*_Low.Prefab的性能开销

    4、 其他模块

    • 渲染分辨率

    • 使用不同的渲染分辨率,且限制最高分辨率为1080p

    • 开放视角

    • 视角上下左右旋转和

    • 摄像机最远最近距离

    • 脚本控制

    特殊情况下需要制作可以在四种画质下进行切换的配置,通过脚本控制:

    • Prefab切换

    • Material切换

    5、 不适合LOD的系统模块

    • UI

    • UI上的图素和特效不适合做显隐和优化

    • UI场景不适合做烘焙和实时光的切换

    • UI角色可以根据界面的重要程度选择使用高级或低级

    • 管理好加载和卸载后,可以考虑替换高低配UI资源

      • 剧情
  • 相关阅读:
    第4月第1天 makefile automake
    第3月30天 UIImage imageWithContentsOfFile卡顿 Can't add self as subview MPMoviePlayerControlle rcrash
    第3月第27天 uitableviewcell复用
    learning uboot fstype command
    learning uboot part command
    linux command dialog
    linux command curl and sha256sum implement download verification package
    learning shell script prompt to run with superuser privileges (4)
    learning shell get script absolute path (3)
    learning shell args handing key=value example (2)
  • 原文地址:https://www.cnblogs.com/lancidie/p/14212182.html
Copyright © 2011-2022 走看看