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

由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 interpolate

float4 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 factor

float3 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 both

float alphaOut = vertexColour.a * tex.a;
return float4( colourOut, alphaOut );

}
  • lighting:把lighting&shadow信息统一预计算到一个texture里面(ati卡上面使用r2vb,直接在vertex shader里面读取),然后在vertex shader里面进行光照计算


 

智慧消防安全与应急管理是现代城市安全管理的重要组成部分,随着城市化进程的加速,传统消防安全管理面临着诸多挑战,如消防安全责任制度落实不到位、消防设施日常管理不足、消防警力不足等。这些问题不仅制约了消防安全管理水平的提升,也给城市的安全运行带来了潜在风险。然而,物联网和智慧城市技术的快速发展为解决这些问题提供了新的思路和方法。智慧消防作为物联网和智慧城市技术结合的创新产物,正在成为社会消防安全管理的新趋势。 智慧消防的核心在于通过技术创新实现消防安全管理的智能化和自动化。其主要应用包括物联网消防安全监管平台、城市消防远程监控系统、智慧消防平台等,这些系统利用先进的技术手段,如GPS、GSM、GIS等,实现了对消防设施的实时监控、智能巡检和精准定位。例如,单兵定位方案通过信标点定位和微惯导加蓝牙辅助定位技术,能够精确掌握消防人员的位置信息,从而提高救援效率和安全性。智慧消防不仅提升了消防设施的管理质量,还优化了社会消防安全管理资源的配置,降低了管理成本。此外,智慧消防的应用还弥补了传统消防安全管理中数据处理方式落后、值班制度执行不彻底等问题,赋予了建筑消防设施智能化、自动化的能力。 尽管智慧消防技术在社会消防安全管理工作中的应用已经展现出巨大的潜力和优势,但目前仍处于实践探索阶段。相关职能部门和研究企业需要加大研究开发力度,进一步完善系统的功能与实效性。智慧消防的发展既面临风险,也充满机遇。当前,社会消防安全管理工作中仍存在制度执行不彻底、消防设施日常维护不到位等问题,而智慧消防理念与技术的应用可以有效弥补这些弊端,提高消防安全管理的自动化与智能化水平。随着智慧城市理念的不断发展和实践,智慧消防将成为推动社会消防安全管理工作与城市化进程同步发展的关键力量。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值