请选择 进入手机版 | 继续访问电脑版

开源计算机图形学社区(Open Source Computer Graphics Community) |OpenGPU Forum (2007-2013)| OpenGPU Project

 找回密码
 注册
搜索
查看: 1151|回复: 2

多线程渲染问题 [复制链接]

Rank: 13Rank: 13Rank: 13Rank: 13

注册时间
2010-5-26
积分
1126
发表于 2017-5-17 19:46:31 |显示全部楼层
       原先一直认为SetXXXState,Drawcall之类的函数会有cpu上的开销(错误检测,UserMode到KennelMode等),而GPU的执行是异步的。今天有人聊起这个事,说是检测部分也是GPU异步执行的,如果这样单独的RenderThread没什么意义了,但实际上RenderThread的提升还是蛮多的(只测试OpenGL, OpenGL ES 2)。             还有对于Metal, Vulkan, Direct3D12这种API, RenderThread还是否有意义。

       哎,这几年时间基本都花在应用开发层面,技术感觉赶不上时代。

Rank: 21Rank: 21Rank: 21Rank: 21Rank: 21Rank: 21

注册时间
2012-10-31
积分
8768
发表于 2017-5-30 10:46:15 |显示全部楼层
多线程是看cpu单线程有没有瓶颈,拖了GPU后腿的。

使用道具 举报

Rank: 5Rank: 5

注册时间
2009-8-14
积分
94
发表于 2017-7-11 13:26:03 |显示全部楼层
如果你的CPU只有一个硬件线程的话,多线程就没什么意义了。如果你的场景只处理几个物体,那其实多线程也没什么意义。但是真正的游戏一般载入的物体在内存中都有成千上万(当然你看到的可能没有那么多),如果在一个线程里面处理游戏逻辑,动画,物理,寻路,异步加载,声音,物体Culling,场景traversal,再加上图形API开销等等,我想你是很难在33.33ms(30 fps)内完成的,所以这个时候多线程处理的就非常必要了。以Unreal为例,game thread处理Blueprint逻辑,animation,physics,以及寻路(如果你有自己的动态navmesh生成)等等,当然一些任务是在task graph里面多线程处理的;render thread,专门处理object visibility(包括frustum culling,HiZ culling),scene traversal也就是收集drawlist,然后生成render command list(如果你开启RHI线程)。如果你在console上会开启RHI线程,专门处理draw call的submit。Unreal结构非常清晰,值得参考。大部分引擎的思路和Unreal相似。据我所知,Frostbite整体就会比较复杂,所有的工作都分为job,然后由job manager进行处理,调优的复杂度明显增加。没有代码参考,解释起来会比较麻烦。如果有机会在EA工作,应该有机会看到源代码。

使用道具 举报

最近看过此主题的会员

您需要登录后才可以回帖 登录 | 注册

‹‹
我的工具栏

关于我们|手机版|Archiver|开源计算机图形学社区(Open Source Computer Graphics Community) | OpenGPU Project | OpenGPU Forum (2007-2013)

GMT+8, 2017-9-24 14:53 , Processed in 0.064617 second(s), 11 queries .

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部