【转】3D图形引擎(DX9): FX

做图形程序已经很多年了,积累了一些经验。
来这个论坛也有好几年了,遇到问题的时候,也会在这里发帖子问,也很感谢大家的回答与帮助,希望能多认识一些朋友,大家多交流、分享。
做这款项目也有蛮多年了,终于上线了,端游,整整6年的时间耗费在这上面,身心疲惫,不过总算是有收获,上线了,也算给了自己一个交代。这款项目,图形这块花了大概3年多,后面2年多基本就是在做管理了,顺便改改Bug,增加一些美术提的小需求。这个文档去年就整理了,但是游戏没上线,没有经过验证,也是没有心思来处理这事,就放下了。今年产品上线了,7月台湾版本也要上了,今天在公司整理资源时,发现了这篇文档,也就来这里发一下帖子。
以下是引擎的相关技术文档:


写在前面:图形引擎技术是为游戏服务的,所以它的宗旨是:在目前主流硬件的基础上做与之相应的功能。所有技术都应该考虑效率,如果在效果与效率两者之间选择,那么我的选择是:效率。
经过几年的技术积累,工具非常齐全,包括场景编辑器,技能编辑器,关卡编辑器,剧情编辑器等,这些编辑器都应该属于图形引擎。寻路系统集成了Google的recast导航网格,物理碰撞系统集成了intel的havok物理引擎。在需要的时候,可以再增加很多的功能,让画面更好,让功能更强。因为美术成本的问题,放弃了NormalMap。
1,DeferredShading,支持无限多盏灯光,在游戏场景中最多时会有几百盏实时点光源存在,且角色、怪物本身或者法术都可能带有实时的点光源。如下图,每一个蓝色线框球都是一盏点光源。

2,无缝LOD地形技术,根据视点远近以及地形起伏坡度判定网格细密程度,在避免画面突变的情况下,尽量减少三角面的数量。并且在整个地形设计时采用贴图与地块分离技术,即地块的贴图数量和地块本身无关,而是与其贴图格相关,这样能让地块使用无限贴图,让美术能制作更加多样化的地形。

3,真实水体、海洋。倒影、水波、水体边缘、泡沫、阳光反射等构成了我们真实的水体。也能很方便的制作真实的河流,即把已经制作好的场景导回3dmax中,然后根据其河床,按照规范制作河流模型,再导出给场景编辑器使用,则可制作出有流向的河流。

4,PSSM,把整个视锥分割成几个部分,最后整合成一个屏幕级别的阴影图,再贴回场景。在此基础上,还做了几个变种,比如根据视距让阴影生成变频;对物件分类,增加大阴影图等,以提升效率。【并且对于点光源,也能使其产生能够有阴影的错觉,这样能方便做室内场景】
5,SSAO,根据屏幕空间的Normal以及Depth图,生成一张遮蔽图,再贴回场景,让场景立体感更强。并且在真实场景中做到了,在移动中肉眼很难感知遮蔽抖动的问题。
6,体积光,太阳光或者强光源通过一些物件的遮罩,出现类似光线的效果。
7,Edge-FXAA,关于抗锯齿,我们采用的是快速边缘抗锯齿的方法,FXAA是Nvidia主推的一种基于图像的抗锯齿的方法,在此基础上我们做了改进,不仅性能得到大幅提升,并且避免了其造成画面模糊的不好现象。
  
8,滤镜,让画面变得更清晰,参照CryEngine的类似效果。在游戏中一对比就会有很明显的感觉,下左图是原始画面,下右图是通过滤镜后的画面。
9,HDR,提升画质,下左图为关闭HDR,下右图为开启HDR的效果。
10,植被系统,我们有专门的植被系统,用于大规模铺设地面的植被,给予场景丰满的感受,且分等级让植被显示,适应于不同机器。当玩家在植被中走过时,植被会被玩家推向两边,造成动态植被的感觉。
11,OcclusionCulling,遮挡剪裁,对于大规模场景来说,需要用遮挡剪裁来大幅提升性能。如下图,把场景分成很多遮挡块(紫色线框),当一个遮挡块被场景挡住时,则整个遮挡块都不会被渲染,甚至更新,这样能极大提升性能。而这个功能是完全对美术屏蔽的,是引擎内部自动根据美术刷出的场景,以及摆放的物体的绑定盒而自动生成的。而对于角色、怪物来说,我们也给予其一个与之匹配的AABB,让它参加遮挡剪裁过程,如果当前帧不在视野内,它不会参与更新和渲染,这样也能极大的提升性能。
12,寻路系统。无缝3D地形的寻路是一个非常麻烦的事情,我们采用了路点+Recast的方式来做,使用Recast生成很多单独的导航网格,用路点把这些导航网格连接起来,这样就可以在无缝地形上进行寻路。如下图,红色线连接白色路点,这是路点的连通关系;绿色线框是地块,它会生成导航网格,最终这些红色连通路点线以及导航网格构成了我们的寻路系统。
13,碰撞系统。我们的碰撞系统采用Intel的havok物理系统,通过对Intel的havok以及Nvidia的Physx两个物理系统的评估后,Intel的havok是最适合做无缝地形的物理碰撞系统。在大规模物件的场景中,特别是主城中,如果采用老的碰撞box来堆积,对美术来说,这是噩梦,所以为了方便美术制作场景,以及性能上能满足我们需求,采用havok是很好的选择。美术可以直接对物体做简模,和物体一起放到场景中,并不需要其他额外的操作,引擎会自动识别且生成碰撞数据,提供给客户端使用。
14,区域系统。为了方便策划编辑区域,定义一些玩法,我们增加了区域系统。在场景我们给予黄色线构成的未填充的方格来确定区域,蓝色填充方格的地方为当前使用的区域。策划可以给予这样的区域以属性。
15,三维高度数据系统【服务器使用】。红色、绿色、蓝色等线框分别代表不同的层级,最终会生成一组组的数据提供给服务器使用,使之可以简单的判定高度层级、阻挡以及做一些逻辑处理。
16,角色Avartar系统,整个角色的身体,除去头发以及肩膀外,都合并成一个部件,且在贴图上采用了我们独特的方法,在贴图尽量小的基础上,让整个画质更好。如下图角色,整个角色的贴图只有一张512*512的Base图,以及与之配套的Specular图,并且还有优化空间,比如Specular图可以减少为256或者128。如下图,虽然才512的贴图,但是实际精度并不差。
17,角色动作系统,我们做了3dmax导出插件,使之与引擎匹配识别Bip骨骼,把角色分为上下半身,让整个角色可以做到完美的上下半身分离,在动作合并的时候,让玩家可以在移动中战斗。
18,航拍,能够把整个地形按照地块拍照,且能生成大地图,提供给美术以及客户端使用。
19,整体场景物件的两套坐标系系统,因为无缝地形太大,所以坐标会很大,如果用很大的坐标浮点数去shader里面计算顶点位置,可能会造成角色蒙皮的抖动、阴影的抖动等,所以我们采用了双坐标系系统,即:实际world坐标提供给客户段使用,而渲染坐标系的零点根据摄像机world坐标在移动,让渲染坐标系下的参与计算的顶点坐标数据尽量小。
其他,还有很多其他的功能,细节等,比如:DOF、倒影优化、触发器、物件链接、地形高度图使用、shader合并渲染等小功能、小系统就不一一列出了。
链接:http://www.opengpu.org/forum.php?mod=viewthread&tid=18131

posted on 2018-02-22 12:32 时空观察者9号 阅读(...) 评论(...) 编辑 收藏

【转】3D图形引擎(DX9): FX相关推荐

  1. HOOPS Visualize强而无憾的3D图形引擎

    HOOPS Visualize强而无憾的3D图形引擎 高性能满足工程级开发要求,提高效率加速交付提供了一个灵活的,分层的场景管理引擎,HOOPS Visualize引擎能够处理各种3D模型实体,以及复 ...

  2. 学习3D图形引擎中使用的基本数学

    目录 介绍 使用代码 X旋转矩阵(XY平面旋转矩阵) Y旋转矩阵(YZ平面旋转矩阵) Z旋转矩阵(XZ平面旋转矩阵) XYZ旋转矩阵(XY YZ XZ平面旋转矩阵) 下载演示-3.5 MB (您需要V ...

  3. three.js加载3d模型_基于WebGL的3D技术在网页中的运用 ThingJS 前端开发

    Three.js.ThingJS这些引擎库可以加载3D制作软件的模型,大幅度提高了制作效率,改变WebGL开发困难的局面,让Web开发者享受便捷的3D开发服务.三者的难度对比如下: ThingJS(框 ...

  4. 在3D场景中显示汉字

    2019独角兽企业重金招聘Python工程师标准>>> TWaver 3D for Flex本身支持3D文字的显示,但是用户必须嵌入一套字库才可以.使用传统的方式,显示3D文字. [ ...

  5. android jpct ae教程,android OpenGL开发使用JPCT-AE引擎显示3D立方体

    在了解JPCT之前得了解什么是opengl,opengl是一个跨语言,跨平台的3D图形编程接口,OpenGL ES (OpenGL for Embedded Systems) 是 OpenGL 三维图 ...

  6. Nevron 3DChart创建有吸引力的3D和2D图表

    Nevron 3DChart创建有吸引力的3D和2D图表 3DChart使用OpenGL 3D图形引擎创建复杂的2D和3D图表和图形,这些图表和图形可以包含静止或动画图像.3DChart包括用于生成图 ...

  7. 3D渲染技术分享:3D游戏开发渲染调试高级技巧

    零.本文主要知识点 友情劝退:全文7400+字 如果知识点里没有你想要的,那可以直接拉到底,与评论区大神一战. 最初的计划是想写一篇关于KylinsGraphicsDebugger实现原理的文章,但感 ...

  8. 从《Doom》到《Dunia》 回顾3D游戏引擎发展历程二

    Quake III / id Tech 3 就像AMD与Intel,Nvidia与ATI,10年前,游戏引擎的战争主要集中在Quake III(现在被称为id Tech 3)与Unreal之间. 顾名 ...

  9. 世界前沿3D开发引擎HOOPS全面讲解——集3D数据读取、3D图形渲染、3D数据发布于一体的全新3D应用开发工具

    无论您是想搭建桌面端.WEB端或者移动端APP应用,HOOPS Platform 组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务. ...

最新文章

  1. 红警1开源放出源码,4K高清重制版登顶Steam畅销榜!网友:青春回来了
  2. tp设置打印机虚拟服务器,tp打印机服务器设置
  3. 2019年终总结--满城灯火,只若初见
  4. DL之ResNeXt:ResNeXt算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略
  5. sqlserver compact sdf, sqlite 数据库 在net中相对路径设置方法 - 摘自网络
  6. SAP CRM 中间件Request download里,遇到/SAPPSPRO/S_MAT_ENHANC_COMM 错误的解决办法
  7. doc无法编译java文件_java编译成jar文件.doc
  8. wireshark抓组播数据_HCIE学习笔记--组播路由协议PIM-DM工作机制解析
  9. VB 使用SendMessage枚举文件与目录
  10. redis decr 防止超卖_一文搞定Redis高级特性与性能调优
  11. 任务26:dotnet watch run 和attach到进程调试
  12. python3 csv以追加方式写入_从拉入的JSON d向CSV追加和或写入
  13. 小一寸照片的尺寸规格 小一寸的照片多少像素
  14. java物流管理系统代码_基于jsp的物流管理系统-JavaEE实现物流管理系统 - java项目源码...
  15. 2019/12/9 K60单片机学习
  16. 单片机MCU OTA升级技术
  17. 教你电脑微信多开方法,超级简单_多啦咪
  18. html统计在线人数代码,网站在线人数以及历史访问人数的统计代码
  19. 阿里云Centos8 yum报错Failed to synchronize cache for repo ‘BaseOS‘解决方案,通过换文件的方式来解决。
  20. 使用shp裁剪县区遥感影像

热门文章

  1. 笔记-信息系统开发基础-面向对象基本概念-对象和类
  2. 笔记-信息系统开发基础-架构设计-软件架构主要职责
  3. Netty的Socket编程详解-搭建服务端与客户端并进行数据传输
  4. AndroidStudio中使用XML和Java代码混合控制UI界面实现QQ相册照片列表页面
  5. CS中实现简单的注册验证窗体程序
  6. 如何在Dart中读取控制台输入/ stdin?
  7. 2021 跨境电商发展关键词:品牌化、独立站、多渠道精细化
  8. nej+regular环境使用es6的低成本方案
  9. jquery和zepto冲突解决以及体会
  10. 常见浏览器兼容性问题与解决方案