AMD工程师倾囊相授:教你如何成为一名图形程序员?
【CSDN 编者按】本文的两位作者皆是 AMD 的工程师,他们在日常也会像很多程序员一样,被问如何成为一名图形工程师,或者有没有一些资源推荐。基于此,他们写下了这篇文章,并且汇集了一些适合图形工程师入门的相关资料。
原文链接:https://gpuopen.com/learn/how_do_you_become_a_graphics_programmer/
作者 | Lou Kramer,Rys Sommefeldt 译者 | ChatGP 责编 |梦依丹出品 | CSDN(ID:CSDNnews)Graphics Programmer 一般指图形工程师,从事图形编程的专业人员,他们利用编程和图形学知识来创建各种视觉效果和图形应用。本文的两位作者皆是 AMD 的工程师,他们在日常也会像很多程序员一样,被问如何成为一名图形工程师,或者有没有一些资源推荐。基于此,他们写下了这篇文章,并且汇集了一些适合图形工程师入门的相关资料。
选择哪门编程语言?
当他们与学生分享工作内容时,几乎总会被问到:你们使用哪种编程语言?简短地回答是 C++。
详细的回答是这样的,如果你从事图形编程,你会使用 C++ 编写主机 CPU 的代码,但你还需要编写针对 GPU 的代码,通常被行业称为着色器代码,使用高级着色语言(如HLSL或GLSL)编写。你还需要一种方法将它们联系起来,通过 CPU 向 GPU 发送请求,使用着色器和其他必要的数据和元数据来实现有用的操作。这就是图形应用程序编程接口(API)的作用,通常使用 C++ 编写主机 CPU 代码来驱动它们。
所以更有争议的问题是:应该从哪个图形 API 入手?其实这个没有确定的答案,只有一系列不同的观点和考虑因素。 选择哪个图形 API ? 本文将重点介绍一些应用在大多数 PC 游戏或 3D 应用程序员的常见图形 API,暂时忽略像游戏主机那样(主要)使用专有API的情况。尽管有各种不同的图形 API,但 2023 年主要用以下几种:OpenGL® / Microsoft® DirectX® 11 / WebGL™Vulkan® / Microsoft® DirectX® 12 / Metal / WebGPUOpenGL®、DirectX® 11 和WebGL™ 是传统的 API。它们基于 GPU 编程的历史方法。尽管如此,它们在学术界和工业界仍被广泛使用,从程序员的角度来看它们更简单,因此更容易学习。然而,它们的简单性是有代价的,随着时间的推移,这些 API 在驱动程序和运行时代码中的底层实现会变得更加复杂,进而带来主机端瓶颈和给 GPU 供应商编写驱动带来了更大的挑战,因为他们要处理更复杂的 API 实现。(注:OpenGL®、DirectX®、WebGL™、Vulkan®和Metal是注册商标,归其各自所有者所有。)在 2013 年至 2016 年期间,AMD 在 PC 上推出 Mantle 图形 API,它为程序员提供了更底层的 GPU 访问方式,相较于传统 API 更加高效。这一改变带来了更好的性能,为图形编程带来了新的可能性。2014 年,苹果推出了 Metal 图形 API。2016年,Microsoft 的 DirectX® 12 和 Khronos Group 的 Vulkan® 也发布了类似的 API。这些 API 都采用了更低级别、更显式的 GPU 编程方法,要求程序员更清晰地指定 GPU 操作,从而给予程序员更多的控制能力。新一代的图形 API 将更多的责任和控制权交给了应用程序开发者,而不是由 GPU 驱动程序来处理。这样做的好处是程序员可以更加精确地控制 GPU 的操作,从而提高性能和效率。在了解上述 GPU 编程范式的转变之后,如何选择 API 也会变得简单。如果你想在以 PC 游戏为主目标的 Windows® 上进行图形编程,那么直觉会告诉你选择 Vulkan® 或 DirectX® 12 是明智的,因为它们是新技术。那么,真的是这样吗?然而,传统的图形 API 仍然在被广泛使用,而且它们更加简单和易于学习。因此,先学习传统 API,然后再逐渐过渡到现代图形 API 可能是一个合理的选择。就像在攀登珠穆朗玛峰之前先在自家附近的小山上进行训练一样。举个简单的比较,绘制一个三角形在图形编程中相当于"Hello, World!"。使用OpenGL®或DirectX® 11 只需要大约 10 行代码就可以实现,而 Vulkan® 和 DirectX® 12 则需要至少一个数量级更多的代码。因此,你也可以说 Vulkan® 和 DirectX® 12 需要更多的代码来手动控制 GPU。尽管需要写更多的代码,但每一行代码都更明确地描述了最终在 GPU 上发生的事情。而在 OpenGL® 和 DirectX® 11 中,很多细节都被 API 隐藏和自动处理,这使得 GPU 看起来像是一个神奇的盒子,而你需要做的一些事情可能难以理解其背后的 GPU 工作原理。因此,选择学习哪种 API 取决于个人的需求和目标。如果你想快速入门并学习基本的图形编程概念,传统 API 可能更适合你。如果你有更高的要求,希望获得更多的控制权和性能优化,那么学习现代图形 API 如 Vulkan® 或 DirectX® 12 将是一个不错的选择。Vulkan® and DirectX® 12 确实要求你在早期就处理和获得更低级别的知识和理解,而 OpenGL® 和 DirectX® 11 则在更高级别上操作,让你专注于图形编程更高效的一面。看完上面的分析之后,如果你还存在顾虑,不妨看看 AMD 游戏工程团队对于选择传统 API 还是现代 API 的真实看法:"作为一个十几岁的孩子从学习 DX12® 或 Vulkan® 开始进行图形编程可能会很困难。""我们离那个古老的 glVertex hello triangle 还有很长的路要走。""遗憾的是 OpenGL® 不再那么重要了。""我认为(OpenGL®)仍然足够好,可以用来学习基础知识,我个人观点。""我最开始使用的是 DX10®,我觉得还不错,但如果不精通 C++ 的话,很多孩子会遇到困难。" - DX10® 是 DX11® 的前身,已经过时了,不要学习 DX10®!"但有很多因素需要考虑。学习光栅化和光线追踪的理论。学习传统渲染管线。学习如何向 GPU 分配工作等等......我不知道应该按什么顺序学习它们,但我通常完全使用 C++(没有必要从其他语言开始),所以我可能应该建议直接从Vulkan® 开始......但老实说,我不太确定。"当然,还有一种可能性,就是学习图形编程而不使用 OpenGL® 和 DirectX® 11,或者 Vulkan® 和 DirectX® 12。文中提到的 WebGL™ 和 WebGPU,它们是在 Web 浏览器领域中可用的广泛类别的图形 API,这两种 API 都在自己独立的软件生态系统(可以说是一个完整的操作系统)中运行。在 Web 浏览器中,你也可以通过 WebGL™ 或 WebGPU 实现实时图形!其中一个优势是你不需要使用 C++ 来进行 Web 开发,尽管你仍然可以通过诸如 WebAssembly 之类的技术在浏览器中使用 C++ 来驱动图形。在 Web 浏览器中,JavaScript 是主流的编程语言,非常适合进行图形开发。另外,如果你想先专注于更高级别的内容,不想过多涉及图形 API 的低级细节和手动编写着色器,那么使用游戏引擎可能是一个合适的选择。Unreal Engine 是最大的 PC 游戏引擎,Unity® 是最常见的替代选择,还有许多更小、更简单的开源引擎,如 Godot,供你尝试和玩耍。以下是来自 AMD 游戏工程团队的一些观点:"我认为让新手从 DX12® 或 Vulkan® 开始可能有些困难,但也许是可行的。我会建议从 WebGL™ 开始,只是为了理解图形渲染管线,可能是最简单的方式(你可以专注于正确的内容)。""WebGPU 可能会让你更接近现代图形 API 的概念,而不需要过多关注低级细节。""WebGPU 可能会变得更好,但目前我认为一旦你开始编写复杂代码,可能会遇到许多问题。尽管如此,它非常酷,并且意外工作得很好。我真诚希望它能变得更好,但现在已经非常有前景。对于原型开发来说,它非常出色。而且,它可能也是学习/教学的良好 API。""我知道一些学校在他们的首个渲染课程中使用 Unity®,这可能还不错,但存在这样的风险,学生们可能永远不会理解为什么需要学习底层内容......""如果你对现代图形渲染管线以及 GPU 硬件的高级实现方式有很好的掌握,或者你想在学习过程中逐步了解 GPU 硬件,那么从一个显式的 API 开始是可以的。否则,先从一些更简单的内容开始,然后在需要或者有兴趣时再转向显式的API。""就个人而言,我认为在开始编写自定义主机代码之前,通过流行的游戏引擎熟悉着色器可能是入门的好方式。如果你对在图形 API 中想要实现什么有清晰的思路,学习会更加困难,否则当你开始处理三角形时可能会放弃学习。" 一些实用性的资源 以下是 AMD 游戏工程团队推荐的一些学习资源:https://learnopengl.com - “LearnOpenGL 是最适合初学者的学习网站,它向你展示了如何使用实际的 API 在 C++ 中完成这些工作。”https://www.scratchapixel.com - “Scratchapixel 之所以好,是因为你不会得到一堆代码,而是专注于学习光线追踪等内容。”https://www.udemy.com/ - “Udemy 是一个帮助人们入门的好地方。”https://rastertek.com/tutindex.html - OpenGL®/DirectX®11 教程https://github.com/RayTracing/raytracing.github.io : 《Ray Tracing in one weekend》 - “我喜欢实践式的学习方法,所以如果你有一点编码能力,周末学会光线追踪是不错的选择。”https://fgiesen.wordpress.com/2011/07/09/a-trip-through-the-graphics-pipeline-2011-index/ - “从 GPU 的角度了解图形渲染管线。这是 2011 年的内容,所以它是在显式 API 出现之前的,但很多硬件和软件概念仍然适用。”https://sotrh.github.io/learn-wgpu/ - “有一个与 learnopengl 类似风格的“学习 WebGPU”网站,但还处于进行中。”https://codelabs.developers.google.com/your-first-webgpu-app - “我还没有完全阅读它,但它还不错。”https://www.shadertoy.com/ - “Shadertoy 允许你编写着色器,无需处理任何图形 API。如果我当初没有从更简单的东西开始(对我来说只是在 Java 画布上直接绘制),我可能永远对图形不感兴趣,也不会想要学习 OpenGL®。”https://vulkan-tutorial.com/ - “我还觉得让人们不要害怕复制粘贴,特别是在使用 Vulkan® 和 DirectX® 时。” 总结 如果你到现在还没有决定要从哪种编程语言和图形 API 生态系统开始,请不要担心。你可以尝试不同的方法,然后选择最适合你的那个。当然,你也可以在本文留言,分享你学习图形编程的经验和想法,也可以分享相关资源。AMD将在塞尔维亚开设新的工程设计中心,专注于计算平台的软件开发
AMD宣布,将在塞尔维亚开设新的工程设计中心,加上贝尔格莱德和尼什设有的办事处,加强自身在巴尔干地区的业务。新的设计中心是通过与全球技术服务公司HTEC的协议建立的,将雇用高级软件工程师,专注于为AMD领先的计算平台开发优化的软件技术,包括用于Instinct加速器和Radeon显卡的AMD ROCm软件堆栈。
AMD高级副总裁兼首席软件官Andrej Zdravkovic表示:“软件堆栈在释放我们领先的AMD硬件能力方面发挥着关键作用。我们的新设计中心将有助于实现未来几代Instinct和Radeon产品的设计和部署,从而帮助全球客户更容易获得端到端人工智能解决方案。我们很高兴与HTEC、当地大学以及贝尔格莱德和尼什充满活力的生态系统合作,在未来几年加深我们在该地区的存在。”
近年来,AMD不断扩大在巴尔干地区的业务,比如2021年在罗马尼亚雅西开设了一个研发中心,与HTEC和其他区域技术服务公司合作,以补充软件和硬件开发项目。此外,AMD计划与当地大学建立合作关系,提供教育资源和工程实习项目,旨在进一步发展当地的工程资源,以支持其未来在塞尔维亚的增长计划。
相关问答
AMD硬件是什么?
AMD(AdvancedMicroDevices)是一家半导体技术公司,专注于设计和制造处理器、图形处理器(GPU)和其他计算和嵌入式技术的硬件产品。以下是一些AMD硬件产品...
AMDcpu怎么开硬件虚拟化-ZOL问答
AMD讨论回答(9)重启电脑后按F2或F10进入BIOS界面(不同主板型号进入BIOS所需按键不同)。注:主板不一样其BISO中显示关键词也不一样的,主要是找到Virtual或Vir...
电脑C盘里面AMD是什么意思?
AMD文件夹是AMD硬件的驱动或者其他文件的存储位置,请勿移动或删除AMD公司专门为计算机、通信和消费电子行业设计和制造各种创新的微处理器(CPU、GPU、APU、主...
amdinstaller是什么?
AMDinstaller是电脑更新CPU或者显卡驱动的安装程序,下载好CPU或者显卡驱动后需要用AMDinstaller进行安装。一般情况下是用不到的。显卡驱动就是用来驱动...
英特尔驱动助理amd能用吗?
不可以。inter驱动助理肯定不可以用amd,会提示找不到兼容的硬件,然后退出安装程序。AMDRadeonSoftware是AMD官方的显卡驱动管理应用,集新技术支持、性能发...
AMD显示驱动程序安装失败了,怎么处理啊,删除c++都试过了还...
用驱动人生装,根据硬件配置和操作系统,推荐合适的驱动,兼顾驱动的稳定和性能。...未安装AMD图形驱动程序.或者AMD驱动程序未正常工作。请安装与AMD硬件相对应...
amd优化是什么?
AMD优化是指针对AMD处理器和显卡的软件优化,旨在提高AMD硬件在特定应用程序或游戏中的性能表现。这些优化可以通过软件更新、驱动程序更新或游戏补丁等方式实...
virtualbox虚拟机提示“VT-x/AMD-V硬件加速在的系统中不可用。”怎么办啊?
当您在使用VirtualBox时看到上面的的错误,请确保:1.您的CPU支持这些功能;2.它在BIOS中被设置成使能;它有许多名称,例如对于AMD称它为:SecureVirtualMac...
cpu中AMD是什么意思?
AMD是AdvancedMicroDevices的缩写,是一家全球著名的微处理器制造商。与Intel一起,AMD是全球最大的两家x86微处理器制造商之一,它的处理器产品广泛应用于个人...
amdgpio驱动有什么用?
它的作用是:片选。就是通过gpio,譬如要控制A开关,BCD在收到GPIO信号之后认出这不是发给自己的,就会自动忽略之后的指令,A接收这个指令,哦,这是发给我的,...它...