• 性能系统《虐杀原形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里头行进光照盘算

        

         

    文章结束给大家分享下程序员的一些笑话语录: 警告
    有一个小伙子在一个办公大楼的门口抽着烟,一个妇女路过他身边,并对他 说, “你知道不知道这个东西会危害你的健康?我是说, 你有没有注意到香烟 盒上的那个警告(Warning)?”
    小伙子说,“没事儿,我是一个程序员”。
    那妇女说,“这又怎样?”
    程序员说,“我们从来不关心 Warning,只关心 Error”

  • 相关阅读:
    python学习笔记 day14 各种推导式
    python学习笔记 day14 生成器表达式
    python学习笔记 day14 生成器进阶(二)
    python学习笔记 day14 生成器进阶
    python学习笔记 day13 迭代器
    python 学习笔记 day12 作业讲解--员工信息表
    PAT L3-020 至多删三个字符
    2019省赛训练组队赛3.26周二---FJUT 2016
    PAT L3-007 天梯地图
    POJ 2234 Matches Game
  • 原文地址:https://www.cnblogs.com/xinyuyuanm/p/3037324.html
Copyright © 2020-2023  润新知