不要过于在意他人的成败得失,也无需过于计较风与水的顺逆,那都是我们无法控制且对于我们自身的强大毫无帮助的无关扰动,我们真正应该关注的是如何才能让自己得到更快更好的成长,凡事以此为依归,才能更快体会到绝巅众山小的风光,Stay hungry, Stay foolish.
游戏线程负责场景的更新,比如物理、动画等计算(如果场景中蒙皮物件较多,或者物理计算较为复杂,那么游戏线程就会承压);原始的渲染线程负责对场景进行遍历,计算每个物件的可见性,并将可见的物件的渲染指令提交到GPU上,后面UE增加了Task System,就将渲染线程中的遍历部分扔给了异步Task,剩下的两项还放在渲染线程中,不过实际上渲染线程也可以设置成多线程并行完成的。
D3D11在多Render线程Command提交在效率上不如将所有Command交给一个线程来提交(而OpenGL ES则限定了Graphic API跟GLContext必须处在同一个线程上,直接杜绝了多Render线程的提交[3]),为了应对这种问题将Render线程一分为二,分为Render线程跟RHI线程,拆分后的Render线程负责拆分前的Render线程的Visibility计算逻辑部分,而RHI线程则负责拆分前的Render线程的Command Submit逻辑,拆分开来之后,新的Render线程可以同时开启多个,通过多核CPU的并行能力来减少CPU计算的时间消耗。
不过这种做法是一个临时方案,因为更新版本的API(比如Vulkan或者D3D12),已经能够很好的支持多线程的提交,其效率不再如D3D11一样不如单线程提交了,因此后面RHI线程的作用会逐渐废弃,转为使用此前的Game-Render线程模型,不过Render线程通常会包含众多的线程,每个线程的功能也重新恢复原有的Visibility计算与Command Submit两部分。
您需要 登录 才可以下载或查看,没有账号?立即注册
使用道具 举报
本版积分规则 发表回复 回帖并转播 回帖后跳转到最后一页
小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )
GMT+8, 2024-11-17 03:40 , Processed in 0.155472 second(s), 26 queries .
Powered by Discuz! X3.5 Licensed
© 2001-2024 Discuz! Team.