前言
我個(gè)人對三維渲染領(lǐng)域的開發(fā)有著濃厚的興趣,盡管并未在相關(guān)行業(yè)工作過,我的了解還很片面。去年,在與群友聊天時(shí),他們推薦了一本《Unity Shader入門精要》,說適合像我這樣想自學(xué)的新人,于是我打開了通往新世界的大門。這本書涵蓋了很多基礎(chǔ)的渲染知識,如光照、陰影、各種風(fēng)格的渲染等等。對于有興趣的同學(xué),可以在京東讀書中在線閱讀,無需購買紙質(zhì)版。 在學(xué)習(xí)過程中,我發(fā)現(xiàn)使用Unity Shader編寫著色器非常方便,它很好地封裝了渲染概念中的Pipeline、Pass等要點(diǎn)。因此,我萌生了一個(gè)想法:是否可以模仿Unity Shader來開發(fā)一款屬于自己的渲染器呢?
必備的技術(shù)點(diǎn) (不分先后)
- 線性代數(shù) -?在編寫Shader時(shí),了解線性代數(shù)是至關(guān)重要的,因?yàn)樵S多內(nèi)置函數(shù)與線性代數(shù)相關(guān),幫助你理解代碼含義。
- 圖形學(xué)基礎(chǔ) -?了解圖形學(xué)基礎(chǔ)也是必要的,即使只對圖形庫的作用和渲染流程有基本了解。
- 圖形庫API -?掌握圖形庫API是開發(fā)渲染器的核心,可以根據(jù)個(gè)人偏好選擇適合自己的API,如OpenGL、Vulkan、DirectX等。
- 編程基礎(chǔ) -?編程基礎(chǔ)也是必備技能。
這些知識結(jié)合起來,可以幫助你更好地開發(fā)自己的渲染器。
項(xiàng)目搭建和所需依賴
- Silk.NET.OpenGL - OpenGL 的 C# 包裝器。
- Silk.NET.Shaderc、Silk.NET.Shaderc.Native - 用于以 SPIR-V 方式編譯 GLSL。注意,OpenGL 4.6 支持 SPV Shader。
- Silk.NET.Windowing、Silk.NET.Input - 對 glfw、sdl 窗口進(jìn)行包裝,包含控制器輸入(鼠標(biāo)、鍵盤等)。
- StbImageSharp - 用于解析圖片。
- Silk.NET.Assimp - 用于解析三維模型。
- Silk.NET.Maths - 一個(gè)完善的數(shù)學(xué)庫。
- Hexa.NET.ImGui、Hexa.NET.ImGuizmo - ImGui 的 C# 包裝器。
項(xiàng)目架構(gòu)
- TrContext.cs - 統(tǒng)一管理使用的 GL 和 GL 擴(kuò)展的上下文。
- TrShader.cs - 用于加載 Shader,支持 SPV 二進(jìn)制文件和 Shader 字符串。
- TrRenderPipeline.cs - 管理一條管線中的 Shader,并維護(hù)管線狀態(tài),如混合狀態(tài)、重采樣、深度測試、模板測試等。
- TrRenderPass.cs - 管理多條管線和切換管線。
- TrTexture.cs - 管理紋理和采樣器屬性。
- TrFrame.cs - 創(chuàng)建并維護(hù)一個(gè) Frame,支持多重采樣。
- TrScene.cs - 內(nèi)置一個(gè) Frame 的 ImGui 窗口,用于綁定渲染。
- TrBuffer.cs - 使用 OpenGL 創(chuàng)建并維護(hù)內(nèi)存,可設(shè)置內(nèi)存優(yōu)先級。
- TrTransform.cs - 簡易的矩陣變換類,支持平移、縮放、旋轉(zhuǎn)。
- TrCamera.cs - 相機(jī)類。
- TrMesh.cs -?管理網(wǎng)格體的頂點(diǎn)數(shù)據(jù)和索引數(shù)據(jù)。
- TrMaterial.cs -?渲染器的核心,管理著渲染管線和材質(zhì)屬性,負(fù)責(zé)進(jìn)行網(wǎng)格的渲染。
項(xiàng)目中,所有材質(zhì)和 Shader 按照書中的章節(jié)進(jìn)行了分組管理。
項(xiàng)目預(yù)覽
- 初始界面
- 窗體菜單
-
場景模型拾取和 Transform
-
漫反射場景
- ?各類紋理渲染
- Shadertoy?網(wǎng)站的 shader 渲染,我抄了幾個(gè)?Shadertoy BETA
?
項(xiàng)目地址文章來源:http://www.zghlxwxcb.cn/news/detail-827290.html
qian-o/Triangle: OpenGL 實(shí)戰(zhàn)項(xiàng)目。 (github.com)文章來源地址http://www.zghlxwxcb.cn/news/detail-827290.html
到了這里,關(guān)于使用 .NET 8.0 和 OpenGL 創(chuàng)建一個(gè)簡易的渲染器的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!