• 外国人就医计划示范医院授牌 天津医院泰达医院获认定 2019-07-21
  • 文体 —频道 春城壹网 七彩云南 一网天下 2019-07-18
  • 【理上网来喜迎十九大】苏格:习近平总书记外交思想领航中国特色大国外交 2019-07-18
  • 8种家居环境很败“性” 2019-06-28
  • 2018年全军院校招生计划下达:计划招收学员3.05万名 2019-06-15
  • 晋城市举办干部素质提升工程第十八期专题讲座 2019-06-15
  • 抖音广告出现对英烈邱少云不敬内容 今日头条致歉 2019-06-13
  • 超半数巴西民众对世界杯不感兴趣--旅游频道 2019-06-12
  • 外交部举行中外媒体吹风会:王毅介绍上合组织青岛峰会情况 2019-06-12
  • 2018网络中国节·端午 2019-06-04
  • 韩媒:韩美商定暂停原定8月“乙支自由卫士”联演 2019-06-03
  • 重庆市公安局交通管理局互联网交通安全服务管理平台 2019-06-03
  • 俄侦察船穿越英吉利海峡 英国急派军舰战机监视 2019-05-28
  • 网购陷阱多 女子花3000元买5套化妆品只有2套是真的 2019-05-28
  • 环保约谈濂溪区主要负责同志 谢一平要求立行立改真抓真改 2019-05-25
  • 福建体彩大乐透走势图: 士郎 在Unity里写一个纯手动的渲染管线(二)

    30
    回复
    5141
    查看
    打印 上一主题 下一主题
    [ 复制链接 ]
    排名
    1
    昨日变化

    福建36选7和值走势图 www.00-na.com 7953

    主题

    8511

    帖子

    3万

    积分

    Rank: 16

    UID
    1231
    好友
    186
    蛮牛币
    11608
    威望
    30
    注册时间
    2013-7-29
    在线时间
    4059 小时
    最后登录
    2019-7-19

    活力之星原创精华达人突出贡献奖财富之证游戏蛮牛QQ群会员蛮牛妹VIP

    马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

    您需要 登录 才可以下载或查看,没有帐号?注册帐号

    x



    上一章中(在Unity里写一个纯手动的渲染管线(一)),我们已经成功用最基础的API手撸出了整个管线的基本顺序,然而,这套管线很显然并不健全,我们今天尝试在其中加入一些性能和效果上的提升。注意,本章内容将会非常硬核,虽然我们尽量避免在图形学文章中加入大量程序框架的东西,但是显然这是没法避免的了。


    我们即将实现多线程的剔除,多线程的并行排序。但是在此之前,我们首先需要在管线中加入一个看起来像那么回事的间接光,这里我就用了一个官方的案例和BRDF Reflection,加入了一个读取天空盒的mipmap的反射,虽然看起来依旧粗糙,但是感觉上已经够用了。MaxwellGengYF/Unity-Custom-Rendering-Pipline我们即将实现多线程的剔除,多线程的并行排序。但是在此之前,我们首先需要在管线中加入一个看起来像那么回事的间接光,这里我就用了一个官方的案例和BRDF Reflection,加入了一个读取天空盒的mipmap的反射,虽然看起来依旧粗糙,但是感觉上已经够用了。



    在搭建管线之前,我们首先应该思考的是程序的框架问题,OOP?亦或是面向数据的架构如ECS?一条渲染管线,是有并行而很可能没大有什么异步需求的,在这种情况下,我们可以使用单例模式来搭建管线,让每个单例负责管线的一部分,各个单例先后顺序鲜明。



    整个渲染的流程大致可以分为剔除->将剔除结果输入待排序的列表中->排序操作->按照排序结果依次drawcall,当然这其中还需要合批,只不过合批的事我们准备放在之后的优化章节中讲解。



    Unity的Job System因其完成度低饱受诟病,然而笔者惊奇的发现,Job System用来作为静态单例的多线程工具,是非常好用的,那么我们就可以用Job System来实现这些多线程的操作,按照官方的解释,Job System中已经有了处理上下文,并行缓存等专门针对并发型运算的优化,而我们自己写的多线程调用器在很大概率上性能则不如官方的高。




    我们首先创建一个负责剔除的类,这里提供的几个变量都是剔除必需的数据,其中renderObject是每个绘制物体的component,这里为了编辑更快就暂时写一个MonoBehaviour的类挂上去。6个Plane则是摄像机前后左右上下的视锥面,我们将使用bounding box进行视锥剔除,camera pos和cameraFarClipDistance则是为了计算物体与当前摄像机的距离,进而为之后的排序做数据上的准备。



    首先呢,我们需要写一个静态的方法,这个方法的功能就是计算视锥体剔除,这个是图形学基础,不再过多赘述,值得一提的是,SRP里直接使用了一个抽象的CullingResult代替了这一系列繁杂的操作。代码大致如下:





    这个方法简单粗暴的遍历了所有的面,然后和每个面进行碰撞比对,当确保Bounding Box在所有的面之前的时候,就可以确定这个方块是应该被绘制的,计算结束后应该将需要被绘制的物体,储存到排序的队列中:


    这里的Execute是Job System提供的interface的方法,这里我们首先传入数据并进行剔除计算,当剔除的结果为true时,计算物体到摄像机的距离,然后使距离/远裁面,获得物体当前所处的距离层,然后按照这个层的值将其放到排序队列中。之所以要引入“距离层”这个概念,单纯是为了之后的并行化排序做准备,比如远裁面是1000米,我们就可以分成20个层,即每50米是一个层,而Unity将启动20个jobs来完成这20个数组的排序,这是一种非常暴力的用内存换取性能的方法,不过在内存已经十分富足的PC或主机端,这样的内存消耗还是可以接受的。



    当然,实现一个排序方法还是非常必要的,为了尽可能的简单,我们这里用一个简单粗暴的二叉树前序遍历来进行排序,时间复杂度是O(nLogn),考虑到已经做了并行操作,这个操作应该不会造成明显的性能影响,排序的模板方法如下:





    具体的方法实现属于基础的数据结构内容,有兴趣的朋友可以在开源中查看,这里不再赘述,值得一提的是,因为Add操作是多线程的,因此十分需要线程安全,我们就需要在Add中添加线程安全的?;ぃ?/div>




    将offset和resize操作统统?;て鹄?,防止出现Bug
    有了这个排序脚本,我们就可以进行排序操作了,首先,指定一个分层常量LAYERCOUNT,也就是说之后所有的物体都应该根据距离被准确而均匀的分配到这些层中,随后,通过调用Sort函数,完成排序操作,并调用GetSorted函数,完成二叉树的后序遍历,这样在主线程中就不需要再去执行对缓存不友好的二叉树遍历了:





    这一系列该有的操作都有了,我们就可以开始编写主控脚本了,与上次没有太大的不同,只不过这次我们在控制脚本中加入了单例的初始化和每帧的数据更新:



    游戏开始时的初始化

    计算每帧的投影矩阵,并按照投影矩阵运算视锥裁面,以及清空上一帧遗留的二叉树排序的痕迹,随后将新的任务“提上日程”,使用Job System的调用开始在分线程中完成剔除和排序:



    最后,快乐的完成绘制,注意,因为管线完成度低,我们并没有实现不同材质的SetPassCall和合批操作,这个会在之后的章节中慢慢讲解:






    到这里时,我们可以认为所有的工作已经完成,接下来我们来测试一下看看结果如何,(初始的drawcall有Clear,Deferred Lighting和Skybox这三个):



    当屏幕中只有1个球时,dc只多了1个


    结果看起来没什么问题


    在这一步结束以后,这个程序就可以真正的称之为渲染管线了,因为只使用了底层基础的API,所以开发起来还是相当麻烦的,但是通过这样的流程,希望读者可以更充分的了解,管线是应该如何工作,以及日后进行自己的管线定制时,如何绕开“坑”,实现更高效的渲染管线。


    知乎@MaxwellGeng


    3偶尔光临
    256/300
    排名
    10595
    昨日变化

    2

    主题

    60

    帖子

    256

    积分

    Rank: 3Rank: 3Rank: 3

    UID
    70411
    好友
    0
    蛮牛币
    304
    威望
    0
    注册时间
    2015-1-22
    在线时间
    93 小时
    最后登录
    2019-3-13
    沙发
    2018-9-26 20:15:40 只看该作者
    mark!!!!!!!!!!!!!!!!!
    4四处流浪
    477/500
    排名
    5759
    昨日变化

    0

    主题

    51

    帖子

    477

    积分

    Rank: 4

    UID
    159995
    好友
    0
    蛮牛币
    515
    威望
    0
    注册时间
    2016-8-1
    在线时间
    182 小时
    最后登录
    2019-6-13
    板凳
    2018-9-26 21:03:57 只看该作者
    大神,很厉害
    7日久生情
    1535/5000
    排名
    3443
    昨日变化

    0

    主题

    895

    帖子

    1535

    积分

    Rank: 7Rank: 7Rank: 7Rank: 7

    UID
    210390
    好友
    0
    蛮牛币
    1835
    威望
    0
    注册时间
    2017-3-7
    在线时间
    206 小时
    最后登录
    2019-5-23
    地板
    2018-9-27 10:35:07 只看该作者
    排名
    48134
    昨日变化

    0

    主题

    8

    帖子

    23

    积分

    Rank: 1

    UID
    280530
    好友
    0
    蛮牛币
    3
    威望
    0
    注册时间
    2018-5-9
    在线时间
    11 小时
    最后登录
    2019-5-27
    5#
    2018-9-28 17:54:22 只看该作者
    大神一般啊,受用了
    5熟悉之中
    704/1000
    排名
    13719
    昨日变化

    1

    主题

    99

    帖子

    704

    积分

    Rank: 5Rank: 5

    UID
    1944
    好友
    3
    蛮牛币
    1300
    威望
    0
    注册时间
    2013-8-13
    在线时间
    542 小时
    最后登录
    2019-7-16
    6#
    2018-9-30 16:41:53 只看该作者
    非原创能不能加个原链接?
    4四处流浪
    322/500
    排名
    9015
    昨日变化

    5

    主题

    76

    帖子

    322

    积分

    Rank: 4

    UID
    280448
    好友
    0
    蛮牛币
    389
    威望
    0
    注册时间
    2018-5-8
    在线时间
    111 小时
    最后登录
    2019-6-18
    7#
    2018-10-7 21:27:57 只看该作者
    膜拜大神
    7日久生情
    1838/5000
    排名
    1989
    昨日变化

    6

    主题

    558

    帖子

    1838

    积分

    Rank: 7Rank: 7Rank: 7Rank: 7

    UID
    54335
    好友
    3
    蛮牛币
    5429
    威望
    0
    注册时间
    2014-11-9
    在线时间
    592 小时
    最后登录
    2019-7-19
    8#
    2018-10-8 14:23:47 只看该作者
    7日久生情
    2880/5000
    排名
    2524
    昨日变化

    2

    主题

    1849

    帖子

    2880

    积分

    Rank: 7Rank: 7Rank: 7Rank: 7

    UID
    241666
    好友
    0
    蛮牛币
    10773
    威望
    0
    注册时间
    2017-9-6
    在线时间
    453 小时
    最后登录
    2019-1-31
    9#
    2018-10-9 04:17:07 只看该作者
    感谢分享
    3偶尔光临
    199/300
    排名
    10113
    昨日变化

    0

    主题

    19

    帖子

    199

    积分

    Rank: 3Rank: 3Rank: 3

    UID
    232458
    好友
    0
    蛮牛币
    422
    威望
    0
    注册时间
    2017-7-16
    在线时间
    72 小时
    最后登录
    2019-7-19
    10#
    2018-10-10 10:26:27 只看该作者
    感谢分享,留足回看
    2初来乍到
    130/150
    排名
    15300
    昨日变化

    1

    主题

    49

    帖子

    130

    积分

    Rank: 2Rank: 2

    UID
    294308
    好友
    0
    蛮牛币
    42
    威望
    0
    注册时间
    2018-8-22
    在线时间
    30 小时
    最后登录
    2019-1-16
    11#
    2018-10-10 19:59:47 只看该作者
    大佬啊~~
    4四处流浪
    340/500
    排名
    8012
    昨日变化

    0

    主题

    84

    帖子

    340

    积分

    Rank: 4

    UID
    181921
    好友
    0
    蛮牛币
    356
    威望
    0
    注册时间
    2016-11-8
    在线时间
    102 小时
    最后登录
    2019-7-12
    12#
    2018-10-18 09:23:10 只看该作者
    bangbangbangbangbangbang
    排名
    19338
    昨日变化

    0

    主题

    26

    帖子

    99

    积分

    Rank: 2Rank: 2

    UID
    275047
    好友
    0
    蛮牛币
    154
    威望
    0
    注册时间
    2018-3-31
    在线时间
    43 小时
    最后登录
    2019-2-28
    13#
    2018-10-30 14:14:49 只看该作者
    谢谢楼主 有时间一定好好学学
    3偶尔光临
    198/300
    排名
    19338
    昨日变化

    0

    主题

    108

    帖子

    198

    积分

    Rank: 3Rank: 3Rank: 3

    UID
    28854
    好友
    0
    蛮牛币
    27
    威望
    0
    注册时间
    2014-6-9
    在线时间
    60 小时
    最后登录
    2019-5-29
    14#
    2018-11-6 23:22:19 只看该作者
    太好了,非常的喜欢啊,非常的好啊,
    4四处流浪
    340/500
    排名
    11818
    昨日变化

    0

    主题

    121

    帖子

    340

    积分

    Rank: 4

    UID
    269725
    好友
    0
    蛮牛币
    480
    威望
    0
    注册时间
    2018-2-27
    在线时间
    137 小时
    最后登录
    2019-7-20
    15#
    2018-11-12 15:15:04 只看该作者
    感谢楼主分享
    您需要登录后才可以回帖 登录 | 注册帐号

    本版积分规则

  • 外国人就医计划示范医院授牌 天津医院泰达医院获认定 2019-07-21
  • 文体 —频道 春城壹网 七彩云南 一网天下 2019-07-18
  • 【理上网来喜迎十九大】苏格:习近平总书记外交思想领航中国特色大国外交 2019-07-18
  • 8种家居环境很败“性” 2019-06-28
  • 2018年全军院校招生计划下达:计划招收学员3.05万名 2019-06-15
  • 晋城市举办干部素质提升工程第十八期专题讲座 2019-06-15
  • 抖音广告出现对英烈邱少云不敬内容 今日头条致歉 2019-06-13
  • 超半数巴西民众对世界杯不感兴趣--旅游频道 2019-06-12
  • 外交部举行中外媒体吹风会:王毅介绍上合组织青岛峰会情况 2019-06-12
  • 2018网络中国节·端午 2019-06-04
  • 韩媒:韩美商定暂停原定8月“乙支自由卫士”联演 2019-06-03
  • 重庆市公安局交通管理局互联网交通安全服务管理平台 2019-06-03
  • 俄侦察船穿越英吉利海峡 英国急派军舰战机监视 2019-05-28
  • 网购陷阱多 女子花3000元买5套化妆品只有2套是真的 2019-05-28
  • 环保约谈濂溪区主要负责同志 谢一平要求立行立改真抓真改 2019-05-25
  • 麻将二八杠怎么玩图片 彩票极速快3规律 四川麻将规则 新疆风采18选7玩法 香港马经一尾中特 白姐露透码是什么 复式彩票双色球中奖规则及奖金 体彩排列5开奖2019年 中国足彩网安全么 世界足球即时比分 中国五子棋小游戏 广东十一选五杀号表 幸运赛车在线视频 七乐彩走势图2浙江风采 棒球之爱