zauonlok/renderer

求问自己写的渲染器跟opengl等的性能比怎么样?

lucasjinreal opened this issue · 11 comments

求问自己写的渲染器跟opengl等的性能比怎么样?

图形库的渲染器是在GPU跑的,性能比在CPU跑的优很多

@wlxklyh vulkan opengl这些应该也能cpu?我电脑都没有gpu他跑在哪里,如果都是cpu上,性能差多少呢

@jinfagang 我没有听过vulkan opengl在纯cpu上跑~~ 图形库是调GPU的驱动接口去绘制 有可能在纯CPU跑的,但我没了解过~ 你电脑没有gpu,那怎么看渲染结果的~?

软渲染器是在将输入的模型、纹理等在CPU算好之后得到画面(CPU里面的一段内存),显示的时候也要把这段内存传给GPU去做显示。
图形库渲染器是把输入的模型、纹理、渲染状态通过图形库接口传给GPU,在GPU去计算这个画面,然后再传给屏幕缓冲,然后显示出来。

我理解的是,看结果用glfw就行把,一个很直接的例子,在mac跑vulkan,mac就没有gpu。不过可能我们说的gpu不是一个gpu。其实我想文的是,我们用c或者c++写的软渲染,应该就是跑在cpu上把,如果跑在gpu上,性能和vulkan差多少?
菜鸡我想做一个3d可视化的东西,一开始我以为要自己写渲染管线,但是看了一圈,如果只是想可视化3d,完全没必要自己写管线,我想做一个类似于MMD的东西,但是更简单,然后能够支持fbx等的可视化,不知道大佬有什么技术路线建议没?

我也是菜鸡~~

  1. 可能你想说的可能是没有独立的显卡,mac至少是有核显的。
  2. 软光删跟图形库的性能差别巨大,图形库在GPU跑是很多线程,软光栅跟在GPU光栅差特别大
  3. 如果只是想可视化3d 有很多选择:
    简单些的展示fbx 用js写
    https://threejs.org/
    例子
    https://threejs.org/examples/webgl_loader_fbx.html

跨平台:
https://github.com/google/filament
https://github.com/bkaradzic/bgfx
游戏引擎:
UE
Unity

@jinfagang threejs 我也没用过 但是看例子感觉比较简单就可以展示一个fbx
https://github.com/mrdoob/three.js/

@wlxklyh 谢谢大佬,我其实有两个疑问:

  1. 我用vulkan在我的linux下编译的渲染程序,是否可以在其他同架构linux运行?因为我看vulkan是不开源的,是否要分发的是哦户把他的动态链接库也带上?别人如果没有安装vulkan是不是无法运行;
  2. 这个 google的filament,为什么在pc端用opengl , 在android上用vulkan?为什么不用一套统一的平台?

我其实基于c++从底层构建一个,其他功能都不需要,只要做到跨平台,具有鼠标交互,和常见3d格式读取。

求问自己写的渲染器跟opengl等的性能比怎么样?

感觉 @jinfagang 大佬对软光栅产生了点误解,我也简单解释一下~

写软光栅大多是以学习渲染底层流程为主,目的是在CPU上手动模拟一遍GPU硬件做的工作,这么做的动机可以类比为写代码中的一种行为:Quine,主要图一乐,锻炼自己对底层原理了解的深刻程度,所以题主要和GPU硬件比性能,这样比较本身也没什么意义;

软光栅渲染器更多的是作为个人学习底层渲染知识,或者是为了给暂无可用显卡驱动的系统(比如升级内核后显卡驱动崩了的Linux系统)提供Fallback而存在的。

前者的一个例子就是这个项目了。后者的话Mesa有个LLVMpipe项目,提供了OpengGL 4.3的支持,这已经是目标完成度和性能都很高的软光栅渲染器了。

https://www.phoronix.com/scan.php?page=news_item&px=LLVMpipe-Mesa-19.0-Performance

这是在2018年对LLVMpipe的性能做的测试。在这个测试中,运行发布于2003的游戏Wolfenstein: Enemy Territory(重返德军总部:深入敌后)时,FPS只有15,这已经是接近20年前的游戏了。可见CPU渲染和GPU渲染相比,在性能上是没有可比性的。

@wlxklyh 谢谢大佬,我其实有两个疑问:

  1. 我用vulkan在我的linux下编译的渲染程序,是否可以在其他同架构linux运行?因为我看vulkan是不开源的,是否要分发的是哦户把他的动态链接库也带上?别人如果没有安装vulkan是不是无法运行;
  2. 这个 google的filament,为什么在pc端用opengl , 在android上用vulkan?为什么不用一套统一的平台?

我其实基于c++从底层构建一个,其他功能都不需要,只要做到跨平台,具有鼠标交互,和常见3d格式读取。

@jinfagang
你是大佬,领域不一样~
1、(我没搞过vulkan 需要再查下资料确认下) 我觉得vulkan程序 在一个系统上能否运行看下面两点
(1)看系统本身有没有Vulkan Run Time Libraries 或者 程序自身带了运行库没
(2)硬件是否支持你的程序里面使用到的vulkan api。 vulkan是有接口判断硬件是否支持某个api
所以你第一点的回复是:可以在一模一样的linux中运行(有运行库、硬件也支持程序用到的所有api接口) 是否要带上运行库看项目自己的决定(如果环境没有vulkan是提示玩家下载 还是说有fallback的方案 用opengl低版本 或者其他图形库,还是说就带上vulkan运行库 )没有vulakn运行库是不可以运行的vulkan程序的。

2、filament应该是可以设置用什么图形库的。用户的环境很复杂,有的支持vulkan 有的支持opengl 有的是dx 、metal,然后程序本身有选择图形库的优先级别,所以是需要一段适配逻辑 :根据当前用户的系统环境、硬件环境,还有项目想优先选择哪个图形库。

3、C++的跨平台渲染引擎,bgfx、Filament。更加简洁的,我也不了解了。