由activision&blizzard旗下的,坐落在加拿大的radical entertainment带来:http://www.gamasutra.com/view/feature/169769/fire_blood_explosions_prototype_.php?print=1

radical entertainment虽然带来的暴力畅快的游戏,但是还是于12年被关闭,不免有点蛋蛋的忧伤。

prototype系列一直血腥无比,里面特效系统功不可没,

特效制作

  • 美术在maya里面开发特效
  • 然后特效由其in game的脚本系统所驱动,这个过程,可以对一些参数进行修改,大一些,快一些等等
    • 这也带来一个好处就是,起到一个资源被多个instance共享,同时保持不错的多样性的好处

cache friendly

  • particle的attribute被分组放在一起(内存连续),比如position们是在一起的,这是一个典型的data oriented的方式,最大化cache friendly
    • 像position被分离的话,在camera cull&sort方面都会更好

内存优化

频繁allocate造成严重的memory fragment,解决方式就是使用memory pool,pool满了之后,再进行dynamic的heap allocate.

另外一个很棒的方法是把particle分类:

  • 爆炸类,环境特效类,火花子弹类等等,并使用queue来管理
  • 这样可以进一步分类的对特效进行限制,在系统承受不住的时候,可以对每一个类型设限,如果还要新生成某一个类型的时候,可以把一个老的来强制关闭,通过fading一系列步骤回收
  • 更棒的是对于不同种类的particle可以使用不同类型优化方式,比如火花子弹,就可以以更激进的方式,在离远的时候禁播

vertex buffer memory

这个也是每个particle系统必会提到的,这个文章里面的情况有些特殊,只能在console上面这种有内存绝对控制权的平台上面使用,对于pc不太行。

prototype2是使用一个frame allocator(每帧清掉,线性递增)来处理,这个也是有些年头的技术了,大家很熟悉了

与美术一同处理性能

虽然美术也是有这样的性能意识,但是在压力之下(项目总是很容易出现这个情况,或者说这就是应该出现的情况),美术很难再保持对性能的关注。

这点在prototype1的开发过程,让radical entertainment没少吃苦头。

那么程序这边就需要来良好的帮助美术,找到有问题的点,进行处理。把所有特效都处理的高效,听起来很美,但是现实中不具备实现的条件。

第一个是可视化的给出特效的百分比,这个非常的棒,尤其是pc平台的开发,因为平台机器性能的问题,可能有一些强力机器上面跑得非常快,一个东西1点几毫秒,你很难说它是快是慢。

但是放成比率,那么准确度就大幅度上升了。

这样美术可以较为容易的看到消耗,另外还有一些文字化的统计信息,也非常的好:

prototype2还是用occlusion query来标识overdraw,也是particle消耗的重要方面。

这样美术可以比较直观的看到相关的所有,这也让对性能的控制更加的容易了。

LOD等性能的控制

如第一部分提到的,有脚本来控制一些attribute,这样就在lod的时候,可以做到一个smooth的改变。

同时也会根据上一帧的性能情况进行dynamic lod的改变,更少的,更低lod的particle生成等等。

渲染

  • multi resolution:这点借鉴bungie的做法,也是有一个动态的,性能压力大的时候,就更多的放到低分辨率buffer上面去,小的时候甚至一点都不放
  • 在低resolution贴回高resolution部分,使用nearest depth filter,这个应该说是效果最好的(好于bilaterial filter)
  • alpha blending/addive:使用了一个比较常用的:在shader里面计算好,进而把blending和additive统一起来,代码:
Add-Alpha Shader Code
// Add-alpha pixel shader. To be used in conjunction
// with the blend factors {One, InverseSourceAlpha}float4 addalphaPS(
float4 vertexColour : COLOR0,
float2 uvFrame0 : TEXCOORD0,
float2 uvFrame1 : TEXCOORD1,
float subFrameStep : TEXCOORD2 ) : COLOR{// Fetch both texture frames and interpolatefloat4 frame0 = tex2D( FXAtlasSampler, uvFrame0 );
float4 frame1 = tex2D( FXAtlasSampler, uvFrame1 );
float4 tex = lerp(frame0, frame1, subFrameStep);// Pre-multiply the texture alpha. For alpha-blended particles,
// this achieves the same effect as a SourceAlpha blend factorfloat3 preMultipliedColour = tex.rgb * tex.a;
float3 colourOut = vertexColour.rgb * preMultipliedColour;// The vertex alpha controls whether the particle is alpha
// blended or additive; 0 = additive, 1 = alpha blended,
// or an intermediate value for a mix of bothfloat alphaOut = vertexColour.a * tex.a;
return float4( colourOut, alphaOut );}
  • lighting:把lighting&shadow信息统一预计算到一个texture里面(ati卡上面使用r2vb,直接在vertex shader里面读取),然后在vertex shader里面进行光照计算

《虐杀原形2》的特效系统相关推荐

  1. 游戏开发入门(七)特效系统

    视频链接:游戏开发入门(七)特效系统(6节课 时常:约2小时20分钟) 该视频课程与其他本系列的课程不太一样,因为在很多游戏或者很多引擎中并没有一个专门的"特效系统",而是把各种特 ...

  2. 性能系统《虐杀原形2》的特效系统

    发一下牢骚和主题无关: 由activision&blizzard旗下的,坐落在加拿大的radical entertainment带来:http://www.gamasutra.com/view ...

  3. 动漫网站和AI人物代码系统毕业设计,人物转动漫人物系统设计与实现,动漫人物特效系统论文毕设作品参考

    功能清单 [后台管理员功能] 系统设置:设置网站简介.关于我们.联系我们.加入我们.法律声明 广告管理:设置小程序首页轮播图广告和链接 留言列表:所有用户留言信息列表,支持删除 会员列表:查看所有注册 ...

  4. android 特效相机实现,基于Android系统的相机特效软件的设计与实现

    摘要: 最近几年,随着科学技术的高速发展,智能手机或者智能平板等一些移动智能设备在各个年龄段的人群中已经有了非常高的普及率.这些智能设备与现代通信技术的紧密结合实现了音乐.图像.视频等多媒体信息与互联 ...

  5. ue4——攀爬系统的实现与总结

    攀爬系统概述 运用场景 在许多动作类游戏中,攀爬系统作为动作系统的一部分为游戏提供了更多的玩法.如"跑酷系统"."躲避系统"."轻功系统". ...

  6. delphi 文字 动画 特效 控件_设计师的特效让程序员追砍3条街,220集AE软件教学视频,教他做人...

    很多从事UI设计方面的设计师都会遇见这种情况:程序员拿着你的设计方案气势汹汹的跑来厉声质问:你这是啥呀,我做不出来,你好好跟我说一下怎么实现的? 有的时候,做设计不就是灵感一来,就随心所欲的发挥,像这 ...

  7. (转)[Unity3D]UI方案及制作细节(NGUI/EZGUI/原生UI系统) 内附unused-assets清除实例

    转载请留下本文原始链接,谢谢.本文会不定期更新维护,最近更新于2013.09.17. http://blog.sina.com.cn/s/blog_5b6cb9500101bplv.html 一.方案 ...

  8. Silverlight 2.5D RPG游戏技巧与特效处理(Game Effects):目录

    以当下主流的2.5D RPG客户端品质游戏特效为借鉴,以最大程度控制性能损失为前提,将Silverlight游戏资源占用最小化,综合效果及用户体验最优化,即本系列作者想要向大家讲解的核心技术知识. 本 ...

  9. Unity 如何实现一个强大的MMO技能系统!

    1. 如何实现一个强大的MMO技能系统-序章 前言 技能系统可以说是游戏中广泛存在而又最重要的系统了,它是整个游戏战斗体验的核心.一套强大的技能系统可以让游戏的策略性,可玩性得到极大的提升.然而技能系 ...

最新文章

  1. 强大:MyBatis 流式查询
  2. 在Developerkit开发板上运行blink例程
  3. IntelliJ IDEA导航特性Top20
  4. 如何将外部邮箱添加至Exchange邮件组中
  5. 关于 mysql.test 数据库
  6. k8s查看pod的yaml文件_K8s-yaml的使用及命令
  7. redis session 超时时间_Shiro性能优化:解决Session频繁读写问题
  8. 064_将 Linux 系统中 UID 大于等于 1000 的普通用户都删除
  9. SAP License:雾里看花系列——弃用SAP是小企业无奈的选择
  10. C#基础知识回顾-- 反射(1)
  11. 详解 Flink 指标、监控与告警
  12. 读《深入解析Windows操作系统》有感
  13. 土地利用/土地覆盖数据整理
  14. Oracle,Sql,procedure 感觉自己写的很棒的一个存储过程
  15. 用免费建站系统做一个专业的企业网站才靠谱!
  16. 【mediacodec】MediaRecorder--MediaCodec
  17. 【每天学点管理】——RACI责任制(快速解决责任分配问题)
  18. 腾讯Hardcoder Android通讯框架简介
  19. 像科学家一样思考python列表_像计算机科学家一样思考python-第3章 函数
  20. STM32寻迹智能车

热门文章

  1. 怎样记住Integer的最大值(有趣的思维和搞笑的回答)
  2. 【有利可图网】PS实战教程45:合成温馨现代家居主题海报
  3. java日期类练习--打印日历+寻找休息日
  4. 使用dialogflow和firebase构建whatsapp聊天机器人的指南
  5. 给,你要的 Go 学习路线图来啦
  6. 2021年安全员-C证(山东省)考试技巧及安全员-C证(山东省)考试平台
  7. Android在线音乐播放器
  8. ubuntu 删除python3 无法进入图形界面_报告老师,这个坑好大(ubuntu手贱删除python3导致的桌面进不去)...
  9. web页面上传大文件有没有好的解决方案
  10. CorelDRAW中如何设置调和对象颜色渐变