日本电影一区二区_日本va欧美va精品发布_日本黄h兄妹h动漫一区二区三区_日本欧美黄色

AMD工程師傾囊相授:教你如何成為一名圖形程序員?(amd的cpu做圖形處理怎么樣)

AMD工程師傾囊相授:教你如何成為一名圖形程序員?(amd的cpu做圖形處理怎么樣)

CSDN 編者按】

本文的兩位作者皆是 AMD 的工程師,他們在日常也會像很多程序員一樣,被問如何成為一名圖形工程師,或者有沒有一些資源推薦?;诖耍麄儗懴铝诉@篇文章,并且匯集了一些適合圖形工程師入門的相關(guān)資料。

原文鏈接:https://GPUopen.com/learn/how_do_you_become_a_graphics_programmer/

作者 | Lou Kramer,Rys Sommefeldt

譯者 | ChatGP 責(zé)編 |夢依丹

出品 | CSDN(ID:CSDNnews)

Graphics Programmer 一般指圖形工程師,從事圖形編程的專業(yè)人員,他們利用編程和圖形學(xué)知識來創(chuàng)建各種視覺效果和圖形應(yīng)用。本文的兩位作者皆是 AMD 的工程師,他們在日常也會像很多程序員一樣,被問如何成為一名圖形工程師,或者有沒有一些資源推薦。基于此,他們寫下了這篇文章,并且匯集了一些適合圖形工程師入門的相關(guān)資料。

AMD工程師傾囊相授:教你如何成為一名圖形程序員?(amd的cpu做圖形處理怎么樣)

選擇哪門編程語言?

當(dāng)他們與學(xué)生分享工作內(nèi)容時,幾乎總會被問到:你們使用哪種編程語言?簡短地回答是 C

詳細(xì)的回答是這樣的,如果你從事圖形編程,你會使用 C 編寫主機 CPU 的代碼,但你還需要編寫針對 GPU 的代碼,通常被行業(yè)稱為著色器代碼,使用高級著色語言(如HLSL或GLSL)編寫。你還需要一種方法將它們聯(lián)系起來,通過 CPU 向 GPU 發(fā)送請求,使用著色器和其他必要的數(shù)據(jù)和元數(shù)據(jù)來實現(xiàn)有用的操作。這就是圖形應(yīng)用程序編程接口(API)的作用,通常使用 C 編寫主機 CPU 代碼來驅(qū)動它們。

所以更有爭議的問題是:應(yīng)該從哪個圖形 API 入手?其實這個沒有確定的答案,只有一系列不同的觀點和考慮因素。

AMD工程師傾囊相授:教你如何成為一名圖形程序員?(amd的cpu做圖形處理怎么樣)

選擇哪個圖形 API ?

本文將重點介紹一些應(yīng)用在大多數(shù) PC 游戲或 3D 應(yīng)用程序員的常見圖形 API,暫時忽略像游戲主機那樣(主要)使用專有API的情況。

盡管有各種不同的圖形 API,但 2023 年主要用以下幾種:

  • OpenGL? / Microsoft? DirectX? 11 / WebGL?

  • Vulkan? / Microsoft? DirectX? 12 / Metal / WebGPU

OpenGL?、DirectX? 11 和WebGL? 是傳統(tǒng)的 API。它們基于 GPU 編程的歷史方法。盡管如此,它們在學(xué)術(shù)界和工業(yè)界仍被廣泛使用,從程序員的角度來看它們更簡單,因此更容易學(xué)習(xí)。然而,它們的簡單性是有代價的,隨著時間的推移,這些 API 在驅(qū)動程序和運行時代碼中的底層實現(xiàn)會變得更加復(fù)雜,進(jìn)而帶來主機端瓶頸和給 GPU 供應(yīng)商編寫驅(qū)動帶來了更大的挑戰(zhàn),因為他們要處理更復(fù)雜的 API 實現(xiàn)。

(注:OpenGL?、DirectX?、WebGL?、Vulkan?和Metal是注冊商標(biāo),歸其各自所有者所有。)

在 2013 年至 2016 年期間,AMD 在 PC 上推出 Mantle 圖形 API,它為程序員提供了更底層的 GPU 訪問方式,相較于傳統(tǒng) API 更加高效。這一改變帶來了更好的性能,為圖形編程帶來了新的可能性。

2014 年,蘋果推出了 Metal 圖形 API。2016年,Microsoft 的 DirectX? 12 和 Khronos Group 的 Vulkan? 也發(fā)布了類似的 API。這些 API 都采用了更低級別、更顯式的 GPU 編程方法,要求程序員更清晰地指定 GPU 操作,從而給予程序員更多的控制能力。

新一代的圖形 API 將更多的責(zé)任和控制權(quán)交給了應(yīng)用程序開發(fā)者,而不是由 GPU 驅(qū)動程序來處理。這樣做的好處是程序員可以更加精確地控制 GPU 的操作,從而提高性能和效率。

在了解上述 GPU 編程范式的轉(zhuǎn)變之后,如何選擇 API 也會變得簡單。如果你想在以 PC 游戲為主目標(biāo)的 Windows? 上進(jìn)行圖形編程,那么直覺會告訴你選擇 Vulkan? 或 DirectX? 12 是明智的,因為它們是新技術(shù)。那么,真的是這樣嗎?

然而,傳統(tǒng)的圖形 API 仍然在被廣泛使用,而且它們更加簡單和易于學(xué)習(xí)。因此,先學(xué)習(xí)傳統(tǒng) API,然后再逐漸過渡到現(xiàn)代圖形 API 可能是一個合理的選擇。就像在攀登珠穆朗瑪峰之前先在自家附近的小山上進(jìn)行訓(xùn)練一樣。

舉個簡單的比較,繪制一個三角形在圖形編程中相當(dāng)于”Hello, World!”。使用OpenGL?或DirectX? 11 只需要大約 10 行代碼就可以實現(xiàn),而 Vulkan? 和 DirectX? 12 則需要至少一個數(shù)量級更多的代碼。

因此,你也可以說 Vulkan? 和 DirectX? 12 需要更多的代碼來手動控制 GPU。盡管需要寫更多的代碼,但每一行代碼都更明確地描述了最終在 GPU 上發(fā)生的事情。而在 OpenGL? 和 DirectX? 11 中,很多細(xì)節(jié)都被 API 隱藏和自動處理,這使得 GPU 看起來像是一個神奇的盒子,而你需要做的一些事情可能難以理解其背后的 GPU 工作原理。

因此,選擇學(xué)習(xí)哪種 API 取決于個人的需求和目標(biāo)。如果你想快速入門并學(xué)習(xí)基本的圖形編程概念,傳統(tǒng) API 可能更適合你。如果你有更高的要求,希望獲得更多的控制權(quán)和性能優(yōu)化,那么學(xué)習(xí)現(xiàn)代圖形 API 如 Vulkan? 或 DirectX? 12 將是一個不錯的選擇。

Vulkan? and DirectX? 12 確實要求你在早期就處理和獲得更低級別的知識和理解,而 OpenGL? 和 DirectX? 11 則在更高級別上操作,讓你專注于圖形編程更高效的一面。

看完上面的分析之后,如果你還存在顧慮,不妨看看 AMD 游戲工程團隊對于選擇傳統(tǒng) API 還是現(xiàn)代 API 的真實看法:

“作為一個十幾歲的孩子從學(xué)習(xí) DX12? 或 Vulkan? 開始進(jìn)行圖形編程可能會很困難。”

“我們離那個古老的 glVertex hello triangle 還有很長的路要走。”

“遺憾的是 OpenGL? 不再那么重要了。”

“我認(rèn)為(OpenGL?)仍然足夠好,可以用來學(xué)習(xí)基礎(chǔ)知識,我個人觀點。”

“我最開始使用的是 DX10?,我覺得還不錯,但如果不精通 C 的話,很多孩子會遇到困難。” – DX10? 是 DX11? 的前身,已經(jīng)過時了,不要學(xué)習(xí) DX10?!

“但有很多因素需要考慮。學(xué)習(xí)光柵化和光線追蹤的理論。學(xué)習(xí)傳統(tǒng)渲染管線。學(xué)習(xí)如何向 GPU 分配工作等等……我不知道應(yīng)該按什么順序?qū)W習(xí)它們,但我通常完全使用 C (沒有必要從其他語言開始),所以我可能應(yīng)該建議直接從Vulkan? 開始……但老實說,我不太確定。”

當(dāng)然,還有一種可能性,就是學(xué)習(xí)圖形編程而不使用 OpenGL? 和 DirectX? 11,或者 Vulkan? 和 DirectX? 12。文中提到的 WebGL? 和 WebGPU,它們是在 Web 瀏覽器領(lǐng)域中可用的廣泛類別的圖形 API,這兩種 API 都在自己獨立的軟件生態(tài)系統(tǒng)(可以說是一個完整的操作系統(tǒng))中運行。

在 Web 瀏覽器中,你也可以通過 WebGL? 或 WebGPU 實現(xiàn)實時圖形!其中一個優(yōu)勢是你不需要使用 C 來進(jìn)行 Web 開發(fā),盡管你仍然可以通過諸如 WebAssembly 之類的技術(shù)在瀏覽器中使用 C 來驅(qū)動圖形。在 Web 瀏覽器中,JavaScript 是主流的編程語言,非常適合進(jìn)行圖形開發(fā)。

另外,如果你想先專注于更高級別的內(nèi)容,不想過多涉及圖形 API 的低級細(xì)節(jié)和手動編寫著色器,那么使用游戲引擎可能是一個合適的選擇。Unreal Engine 是最大的 PC 游戲引擎,Unity? 是最常見的替代選擇,還有許多更小、更簡單的開源引擎,如 Godot,供你嘗試和玩耍。

以下是來自 AMD 游戲工程團隊的一些觀點:

“我認(rèn)為讓新手從 DX12? 或 Vulkan? 開始可能有些困難,但也許是可行的。我會建議從 WebGL? 開始,只是為了理解圖形渲染管線,可能是最簡單的方式(你可以專注于正確的內(nèi)容)。”

“WebGPU 可能會讓你更接近現(xiàn)代圖形 API 的概念,而不需要過多關(guān)注低級細(xì)節(jié)。”

“WebGPU 可能會變得更好,但目前我認(rèn)為一旦你開始編寫復(fù)雜代碼,可能會遇到許多問題。盡管如此,它非???,并且意外工作得很好。我真誠希望它能變得更好,但現(xiàn)在已經(jīng)非常有前景。對于原型開發(fā)來說,它非常出色。而且,它可能也是學(xué)習(xí)/教學(xué)的良好 API。”

“我知道一些學(xué)校在他們的首個渲染課程中使用 Unity?,這可能還不錯,但存在這樣的風(fēng)險,學(xué)生們可能永遠(yuǎn)不會理解為什么需要學(xué)習(xí)底層內(nèi)容……”

“如果你對現(xiàn)代圖形渲染管線以及 GPU 硬件的高級實現(xiàn)方式有很好的掌握,或者你想在學(xué)習(xí)過程中逐步了解 GPU 硬件,那么從一個顯式的 API 開始是可以的。否則,先從一些更簡單的內(nèi)容開始,然后在需要或者有興趣時再轉(zhuǎn)向顯式的API。”

“就個人而言,我認(rèn)為在開始編寫自定義主機代碼之前,通過流行的游戲引擎熟悉著色器可能是入門的好方式。如果你對在圖形 API 中想要實現(xiàn)什么有清晰的思路,學(xué)習(xí)會更加困難,否則當(dāng)你開始處理三角形時可能會放棄學(xué)習(xí)。”

AMD工程師傾囊相授:教你如何成為一名圖形程序員?(amd的cpu做圖形處理怎么樣)

一些實用性的資源

以下是 AMD 游戲工程團隊推薦的一些學(xué)習(xí)資源:

  • https://learnopengl.com – “LearnOpenGL 是最適合初學(xué)者的學(xué)習(xí)網(wǎng)站,它向你展示了如何使用實際的 API 在 C 中完成這些工作?!?/p>

  • https://www.scratchapixel.com – “Scratchapixel 之所以好,是因為你不會得到一堆代碼,而是專注于學(xué)習(xí)光線追蹤等內(nèi)容?!?/p>

  • https://www.udemy.com/ – “Udemy 是一個幫助人們?nèi)腴T的好地方。”

  • https://rastertek.com/tutindex.html – OpenGL?/DirectX?11 教程

  • https://github.com/RayTracing/raytracing.github.io : 《Ray Tracing in one weekend》 – “我喜歡實踐式的學(xué)習(xí)方法,所以如果你有一點編碼能力,周末學(xué)會光線追蹤是不錯的選擇。”

  • https://fgiesen.wordpress.com/2011/07/09/a-trip-through-the-graphics-pipeline-2011-index/ – “從 GPU 的角度了解圖形渲染管線。這是 2011 年的內(nèi)容,所以它是在顯式 API 出現(xiàn)之前的,但很多硬件和軟件概念仍然適用?!?/p>

  • https://sotrh.github.io/learn-wgpu/ – “有一個與 learnopengl 類似風(fēng)格的“學(xué)習(xí) WebGPU”網(wǎng)站,但還處于進(jìn)行中?!?/p>

  • https://codelabs.developers.google.com/your-first-webgpu-app – “我還沒有完全閱讀它,但它還不錯。”

  • https://www.shadertoy.com/ – “Shadertoy 允許你編寫著色器,無需處理任何圖形 API。如果我當(dāng)初沒有從更簡單的東西開始(對我來說只是在 Java 畫布上直接繪制),我可能永遠(yuǎn)對圖形不感興趣,也不會想要學(xué)習(xí) OpenGL?。”

  • https://vulkan-tutorial.com/ – “我還覺得讓人們不要害怕復(fù)制粘貼,特別是在使用 Vulkan? 和 DirectX? 時?!?/p>

AMD工程師傾囊相授:教你如何成為一名圖形程序員?(amd的cpu做圖形處理怎么樣)

總結(jié)

如果你到現(xiàn)在還沒有決定要從哪種編程語言和圖形 API 生態(tài)系統(tǒng)開始,請不要擔(dān)心。你可以嘗試不同的方法,然后選擇最適合你的那個。

當(dāng)然,你也可以在本文留言,分享你學(xué)習(xí)圖形編程的經(jīng)驗和想法,也可以分享相關(guān)資源。

AMD工程師傾囊相授:教你如何成為一名圖形程序員?(amd的cpu做圖形處理怎么樣)

相關(guān)新聞

聯(lián)系我們
聯(lián)系我們
公眾號
公眾號
在線咨詢
分享本頁
返回頂部
准格尔旗| 浙江省| 盈江县| 潞西市| 英山县| 白河县| 留坝县| 兴国县| 乐安县| 两当县| 水富县| 新巴尔虎右旗| 堆龙德庆县| 诸城市| 宕昌县| 卓尼县| 若羌县| 明光市| 九龙坡区| 杭锦旗| 浮梁县| 应用必备| 清原| 阜阳市| 青海省| 新巴尔虎右旗| 泰兴市| 揭东县| 三台县| 新平| 旬邑县| 江永县| 巩留县| 保德县| 呼玛县| 台安县| 通州区| 宣汉县| 渝中区| 淮阳县| 岳西县|