如何正確的入門Vulkan?

時間 2021-05-11 03:10:05

1樓:Jeffrey Zhuang

沒完整的學過乙個圖形API的話推薦DX11,然後DX12或Metal,最後再過渡到Vulkan。不推薦GL,理念相去甚遠,有些答題的顯然不是圈子裡的。Vulkan的概念模型設計的不太好,速成比較困難,通過其他現代API建立起渲染狀態管理的概念後遷移過去相對容易點。

2樓:探尋可能

最近在折騰Vulkan,寫了一點心得:

探尋可能:有關圖形學入門的一些思考·談談Vulkan總的來說,Vulkan還是推薦跟著範例去學習,抓住每乙個範例的重點其實會發現都差不多,核心還是在於配置資源和實現著色。當然前提是你對圖形管線是很清楚的。

所以可以多看一些例子,思考一下VkCommandBuffer當中用到了什麼?VKPipeline是如何配置的?VkBuffer是如何載入的?

這些問題弄清楚了你就會發現基本上萬變不離其宗。剩下了要麼就是著色器的問題(這涉及到各種著色演算法比如PBR)要麼就是資源管理的問題(比如場景圖和材質系統)

3樓:MaxwellGeng

閆老師說過:你要學習的是圖形學,不是乙個API,這一點就很重要。Vulkan是很輕薄很底層的API,這就意味著如果你沒有完整的著手開發過一套上層的渲染,就根本不知道怎麼去封裝效率最高,怎麼去封裝看起來既簡潔又優雅,甚至可能就只能畫個三角形就不知道怎麼做了。

所以我的建議是,先使用乙個現有的渲染框架實現一套管線。

我本人學習DirectX 12到完成基礎元件的封裝大概只用了乙個月,其中有絕大多數時間其實是在熟悉DX那堆很「Windows」風格的奇葩呼叫上,而Vulkan就不會有這樣的問題,因為在此之前我已經使用Unity那套比較傻瓜式的API開發一套完整的上層管線了,比較清楚在工程中會遇到哪些可能的方向,所以接下來的底層開發就是有bear來,在簡潔性和優雅性上也能夠做到乙個可以接受的程度。

通過對上層的學習,敲定了封裝的形態以後,就要考慮自己這套封裝怎麼做才能夠讓效能最大化,畢竟是底層開發,如果說優美和簡潔的重要性是第一位,那麼效能最大化則永遠是排在第0位的(既然題幹說在工作,那麼我就假設是做工程專案了)。C++講究zero overhead abstraction,而vulkan就非常能夠實現這一點,vulkan在設計上幾乎沒有CPU端的狀態記錄,因此可以做到完美的多執行緒渲染模式,但是這就要求我們用最高的效能去自己追蹤管線的狀態,譬如資源的讀寫狀態,各種Pass,RenderTarget的狀態,這些其實就和圖形學沒什麼關係了,就回到資料結構和多執行緒開發等傳統的電腦科學領域了,而恰恰是這個部分可能需要進行反覆的推敲

所以一直到現在我都有這樣的習慣:接到需求不直接往渲染器裡寫,而是先在Unity裡快速實現驗證一下,搞清思路,搞清哪些地方是可以預見的可以針對優化的效能短板,然後再在渲染器中實現完整版,因為我非常明白,API只不過是乙個夾在圖形開發者和硬體廠商之間的搬磚工,它只需要安靜的完成自己搬磚的職責就可以了,其他的無論是管線封裝也好,圖形實現也罷,大多數也都是和API沒什麼關係的,糾結於API的學習收益並不會很大。

4樓:qbkivlin

前段時間剛在工作室分享了UE4.26 RDG相關的技術。

準備ppt過程中重新翻了不少Vulkan的資料。

比起官方vulkan tutorials的畫三角形的教程。

其實從GDC/GPUOpen/AMD/Graphics issue能找到不少vulkan的資料。有更直觀的Vulkan教程也更接地氣。

5樓:星隕

之前寫過一些 vulkan 的入門文章了。。

進擊的 Vulkan 移動開發(一)之今生前世進擊的 Vulkan 移動開發之 Instance & Device & Queue

進擊的 Vulkan 移動開發之 Command Buffer進擊的 Vulkan 移動開發之 SwapChain有幫助的話可以參考下,後續還會在更新的...

6樓:SaeruHikari

vk是現存所有圖形api中最現代,包袱最輕,概念最清晰,也是細枝末節最多的api。

換一種說法是,vk暴露給你的gpu是最gpu的,先學ogl還真不一定更好學。。。

如果對渲染不熟悉,對各種渲染管線的資源狀態感到困惑,最好先擱置渲染管線。把gpu當成純粹的非同步硬體。

可以:建立乙個計算管線;

搞清楚計算管線訪問buffer前中後,該buffer的狀態;

建立更多計算管線,使用各種訊號量在它們和cpu之間同步;

這樣一套下來,你至少會熟悉vk的套路,如果比較靈性的話可能已經參悟gpu程式設計是怎麼回事了。

之後:了解現代gpu的渲染管線,先看整個流水線,再看各個shader stage;

抄乙個渲染demo,帶紋理的三角形就行。著重研究一下渲染管線引入的各種資源和派生狀態;

用訊號量控制計算管線和渲染管線,做些預計算/後處理,感受一下發生什麼事了。

到了這裡如果腦子還清醒,就說明你已經會了。再剩下的就是開啟各種擴充套件嘗試新技術了。

7樓:露公尺 Lumi

剛好最近在做Vulkan相關的工作。我覺得,Vulkan可能難點還是在整合到引擎中遇到的一些實際設計、RenderState Cache, Descriptor Cache等問題。

至於,基礎入門的話,確實API繁雜一些,但是基本資料結構和流程跟OpenGL 4.x的是差不多的。如果,題主看過DX12 或者 Metal等新一代的圖形API,再去看Vulkan, 應該會覺得都差不多,就換個API的皮而已。

Vulkan是乙個學院派設計的API,我剛學的時候也覺得很蛋疼,容易在細節中丟失方向。

或者,仔細畫個思維導圖,如何繪製一幀。我總結下來主要是以下幾種:資源建立,Shader建立,資源和Shader繫結,Pipeline初始化,Swapchain初始化,錄製Commands(錄製多個Pass),提交Commands,交換SwapChain的Buffer 這個流程。

最後,Vulkan相比OpenGL優勢,我覺得主要在於以下幾個方面:

1. Commands那邊其實可以並行提交,可以新建多個Commands Buffer。

2. Shader的繫結非常自由,使得可以在資源繫結方面做一些優化。

3. PSO方面,也是自由控制的,可以更加自由地做一些優化。(我覺得DX的那種更簡單直觀)

Introduction - Vulkan Tutorial (入門)

Tips and Tricks: Vulkan Dos and Don』ts | NVIDIA Developer Blog

KhronosGroup/Vulkan-Samples (這裡面有些有文件描述優化思想)

GameDev - Build | Samsung Developers (Fortnite手遊的Vulkan優化的作者寫的)

(GDC 2019 Fortnite演講)

研究生遇到門檻比較高的研究方向,正確的入門策略(姿勢)是什麼?

段丞博 這很正常,因為研究的東西往往比較前沿,難度比較大,又沒有確切答案,眾說紛紜,觀點比較多。所以不管你基礎咋樣,一開始肯定是很有挫折感。一般來講,乙個比較現實的做法就是找你要研究領域的綜述文章,找到整個研究最初的起點。最早的那篇文章通常會比較直觀,後來的文章肯定會搞得越來越複雜。但是最初的文章的...

Python 怎麼學才能正確地入門並提高?要深究 Python 本身的實現機制嗎?

林希 just do it。找個好團隊,最好是豆瓣系的。然後直接跟著他們上專案。當然如果你要是能看的懂開源專案啥的,並且有這個耐心。就沒有這個必要了。 無關風月 過一遍官方文件,然後從自己的需求出發,把 python 用起來。想寫爬蟲,想用 python 處理 office 文件,想用 python...

如何正確的存錢

書御 話說回來,怎麼存錢 四個字開源節流 怎麼開源 我哪知道怎麼開源 少說話多做事,別太懶,看看自己會做啥 當然,大部分人跟我一樣,並不知道自己會做啥 哭了至於看到有些答主說的投資,錢生錢,首先,我得有資本去投資,才能錢生錢 其次,即使我手上有一點錢了,我也捨不得拿去投資,因為我怕我血本無歸 不過有...