Vulkan圖形編程:構建渲染引擎的技術、實現和算法優化

Marco Castorina

商品描述

本書深入探討Vulkan圖形編程技術,助力讀者掌握構建渲染引擎的技術、實現和算法優化。本書從開發渲染框架基礎入手,引導讀者學習利用Vulkan 功能編寫現代渲染引擎。具體涵蓋自動化資源綁定和依賴管理、運用GPU驅動渲染技術擴展場景規模、熟悉光線追蹤技術、提升渲染圖像視覺質量等內容。通過學習本書,讀者能夠全面了解現代渲染引擎內部工作原理,掌握實現 渲染效果的圖形技術,所開發的框架還可作為未來實踐的起點,適合有圖形編程基礎且希望深入學習Vulkan的開發者閱讀。

作者簡介

馬可·卡斯托瑞納(Marco Castorina)AMD的遊戲圖形性能團隊技術專家, 初在Samsung擔任驅動開發人員時開始熟悉Vulkan。後來,他為一家 的媒體服務器公司從零開始開發了一個2D和3D渲染器。加布裏埃爾·薩松(Gabriel Sassone)The Multiplayer Group首席渲染工程師,渲染技術專家。他之前在Avalanche Studios工作時 接觸Vulkan,並為專有的Apex引擎及其Google Stadia端口開發了Vulkan層。他曾在ReadyAtDawn、Codemasters、FrameStudios以及一些其他非遊戲技術公司工作過。

目錄大綱

譯者序
致謝
前言
關於作者
關於審校者
第一部分 現代渲染引擎的基礎知識
第1章 Raptor引擎和Hydra工程概述
1.1 技術要求
1.1.1 Windows
1.1.2 Linux
1.1.3 macOS
1.2 如何閱讀本書
1.3 理解代碼結構
1.4 理解glTF場景格式
1.5 PBR技術簡介
1.6 關於GPU調試的說明
1.7 總結
1.8 擴展閱讀
第2章 優化資源管理
2.1 技術要求
2.2 解鎖和實現無綁定渲染
2.2.1 檢查支持情況
2.2.2 創建描述符池
2.2.3 更新描述符集
2.2.4 更新著色器代碼
2.3 自動化流水線布局生成
2.3.1 將GLSL編譯為SPIR-V
2.3.2 理解SPIR-V的輸出內容
2.3.3 從SPIR-V到流水線布局
2.4 通過流水線緩沖區減少加載時間
2.5 總結
2.6 擴展閱讀
第3章 解鎖多線程技術
3.1 技術要求
3.2 使用enkiTS實現基於任務的多線程
3.2.1 為什麼使用基於任務的並行機制
3.2.2 使用enkiTS(任務調度器)庫
3.3 異步加載
3.3.1 創建I/O線程和任務
3.3.2 Vulkan隊列及第一條並行指令生成
3.3.3 AsynchronousLoader類
3.4 在多個線程上記錄命令
3.4.1 分配策略
3.4.2 命令緩沖區回收
3.4.3 主命令緩沖區與次命令緩沖區
3.4.4 使用主命令緩沖區進行繪制
3.4.5 使用次命令緩沖區進行繪制
3.4.6 生成多個任務以記錄命令緩沖區
3.5 總結
3.6 擴展閱讀
第4章 實現幀圖
4.1 技術要求
4.2 理解幀圖
4.2.1 構建圖
4.2.2 數據驅動的方法
4.2.3 實現幀圖
4.2.4 實現拓撲排序
4.2.5 通過幀圖驅動渲染
4.3 總結
4.4 擴展閱讀
第5章 解鎖異步計算技術
5.1 技術要求
5.2 用單一時間線信號量替換多柵欄
5.2.1 啟用時間線信號量擴展
5.2.2 創建時間線信號量
5.2.3 在CPU上等待時間線信號量
5.2.4 在GPU上使用時間線信號量
5.3 添加一個用於異步計算的單獨隊列
5.4 通過異步計算實現布料模擬
5.4.1 使用計算著色器的好處
5.4.2 計算著色器概述
5.4.3 編寫計算著色器
5.5 總結
5.6 擴展閱讀
第二部分 GPU驅動的渲染
第6章 GPU驅動的渲染
6.1 技術要求
6.2 將大型幾何體網格分解成網格單元
6.3 了解任務著色器和網格著色器
6.3.1 實現任務著色器
6.3.2 實現網格著色器
6.4 使用計算著色器進行GPU端的剔除
6.4.1 深度金字塔生成
6.4.2 遮擋剔除
6.5 總結
6.6 擴展閱讀
第7章 使用集群延遲渲染技術處理多光源
7.1 技術要求
7.2 集群照明方案的簡要歷史
7.3 實現一個G-Buffer緩沖區
7.4 實現光照集群
7.4.1 CPU端的光源分配
7.4.2 GPU端的光源處理
7.5 總結
7.6 擴展閱讀
第8章 使用網格著色器添加陰影
8.1 技術要求
8.2 陰影技術的簡要歷史
8.2.1 陰影體積法
8.2.2 陰影映射法
8.2.3 光線追蹤陰影
8.3 使用網格著色器實現陰影映射
8.3.1 概述
8.3.2 立方體貼圖陰影
8.3.3 關於多視圖渲染的說明
8.3.4 逐光源進行網格實例剔除
8.3.5 間接繪制命令的生成
8.3.6 陰影立方體貼圖面的剔除
8.3.7 網格單元陰影渲染:任務著色器
8.3.8 網格單元陰影渲染:網格著色器
8.3.9 陰影圖采樣
8.4 利用Vulkan的稀疏資源機制優化陰影內存
8.4.1 創建和分配稀疏紋理
8.4.2 選擇每個光源的陰影內存使用方案
8.4.3 渲染到稀疏陰影圖
8.5 總結
8.6 擴展閱讀
第9章 實現可變速率著色
9.1 技術要求
9.2 介紹可變速率著色技術
9.3 使用Vulkan API集成可變速率著色
9.4 利用特化常量
9.5 總結
9.6 擴展閱讀
第10章 添加體積霧效果
10.1 技術要求
10.2 介紹體積霧渲染
10.2.1 體積渲染
10.2.2 體積霧
10.3 實現體積霧渲染
10.3.1 數據註入
10.3.2 計算光照貢獻
10.3.3 集成散射和消光效果
10.3.4 將體積霧應用到場景
10.3.5 添加濾波器
10.3.6 體積噪聲生成
10.3.7 藍噪聲
10.4 總結
10.5 擴展閱讀
第三部分 高級渲染技術
第11章 時間抗鋸齒技術
11.1 技術要求
11.2 概述
11.3 最簡單的時間抗鋸齒實現
11.3.1 相機抖動
11.3.2 選擇抖動序列
11.3.3 添加運動向量
11.3.4 初步