tajourney tajourney
  • 首页
  • 渲染
    • PBR
    • NPR
  • 引擎
    • Unity
    • UE
  • DCC
    • Houdini
    • PhotoShop
    • Blender
  • 优化
  • 工具
  • 杂谈
    • 游戏
  • 友链
  • 关于
    • About Me
    • 网站公告
    • 维护记录
    • QA
  • 注册
  • 登录
首页 › 渲染 › GAMES106 - Learn Vulkan (2)

GAMES106 - Learn Vulkan (2)

糯米
2年前渲染阅读 1,025

上一章文章链接

GAMES106 - Learn Vulkan (1)

Vulkan简介

Vulkan是一个低开销、跨平台的二维、三维图形与计算的应用程序接口(API),[11]最早由科纳斯组织在2015年游戏开发者大会(GDC)上发表。与OpenGL类似,Vulkan针对全平台即时3D图形程序(如电子游戏和交互媒体)而设计,并提供高性能与更均衡的CPU与GPU占用,这也是Direct3D 12和AMD的Mantle的目标。与Direct3D(12版之前)和OpenGL的其他主要区别是,Vulkan是一个底层API,而且能执行并行任务。除此之外,Vulkan还能更好地分配多个CPU核心的使用。

科纳斯最先把Vulkan API称为“次世代OpenGL行动”(next generation OpenGL initiative)或“glNext”,但在正式宣布Vulkan之后这些名字就没有再使用了。Vulkan基于Mantle构建,AMD将其Mantle API捐赠给科纳斯组织,给予该组织开发底层API的基础,使其像OpenGL一样成为行业标准。

摘自wiki

RHI

RHI(Render Hardware Interface):渲染硬件接口 (RHI) 是几个特定于平台的图形 API 的抽象层。比如OGL、D3D等。

GAMES106 - Learn Vulkan (2)-tajourney

传统RHI:

基于Context(类似于状态机),依赖上下文,需要自己管理每个Context的生命周期。多线程不友好。

现代RHI,基于Cbuffer:

所谓CommandBuffer实际上是一个管理GPU命令的队列,多线程友好。CBuffer可以复用。

Vulkan基本操作

GAMES106 - Learn Vulkan (2)-tajourney

以上一节HomeWork0代码为例:

GAMES106 - Learn Vulkan (2)-tajourney

PS:关于windows窗口C++实现可以参考大二时期我在CSDN写的专栏,当时写这个专栏的目的就是为了方便同期的同学写(抄)C++游戏作业,顺便讲解,所以注释写的都非常小白向,非常易懂。比如HINSTANCE这种概念都有详细的注释。目前专栏也有2w+的访问量了。

Vulkan初始化

GAMES106 - Learn Vulkan (2)-tajourney
GAMES106 - Learn Vulkan (2)-tajourney

Vulkan与设备:

GAMES106 - Learn Vulkan (2)-tajourney

老师提到过根据VkPhysicalDevice查询到的队列簇:

GAMES106 - Learn Vulkan (2)-tajourney
对应的3个队列簇

Vulkan与屏幕:设备是否支持/

GAMES106 - Learn Vulkan (2)-tajourney

Vulkan图形管线

这部分不同的RHI基本一致,就不再赘述了。这里笔记只记一些特殊的。

GAMES106 - Learn Vulkan (2)-tajourney

顶点数据缓存的排布对的vertex shader会有一定的性能影响,常用的优化算法库meshoptimizer。

GAMES106 - Learn Vulkan (2)-tajourney

不同索引之间的顶点属性在分配过程中不要过远,cache miss影响程度一般往往大于顶点复杂度。

Draw:只有顶点数据

Draw Index:顶点数据+索引

Draw Indirect:GPU Draw

Draw Index Indirect:GPU Draw Index

GAMES106 - Learn Vulkan (2)-tajourney
GAMES106 - Learn Vulkan (2)-tajourney
Vulkan RenderPass

Vulkan中可以自定义Pipeline,Bind Pipeline后执行。

GAMES106 - Learn Vulkan (2)-tajourney

Vulkan中FrameBuffer/RenderTarget,是否需要保持FrameBuffer中原有的数据,是否写回内存,这些是需要自行定义的。

赞(0)
搜索
近期文章
  • 终末地人物渲染(更新中) 2025年3月17日
  • Unity APV体素化光栅化实现 2025年2月5日
  • Unity 不同 ReflectionProbe 打断 Instancing 解决方案 2025年1月15日
  • Renderdoc 原神截帧记录 2024年8月22日
  • Houdini VAT:Vellum Cltoh笔记 2 2024年7月17日
归档
  • 2025年3月 (1)
  • 2025年2月 (1)
  • 2025年1月 (1)
  • 2024年8月 (1)
  • 2024年7月 (2)
  • 2024年1月 (1)
  • 2023年10月 (3)
  • 2023年9月 (4)
  • 2023年8月 (5)
  • 2023年7月 (4)
  • 2023年6月 (4)
  • 2023年5月 (1)
  • 2023年4月 (3)
  • 2023年3月 (11)
  • 2023年2月 (11)
  • 2023年1月 (1)
  • 2022年7月 (1)
  • 2022年6月 (2)
  • 2022年5月 (1)
  • 2022年4月 (1)
  • 2022年3月 (1)
  • 2022年2月 (1)
  • 2022年1月 (7)
  • 0
Copyright © 2022-2025 tajourney. Dev by nuomi 版权所有.
鲁ICP备19015245号
  • 首页
  • 渲染
    • PBR
    • NPR
  • 引擎
    • Unity
    • UE
  • DCC
    • Houdini
    • PhotoShop
    • Blender
  • 优化
  • 工具
  • 杂谈
    • 游戏
  • 友链
  • 关于
    • About Me
    • 网站公告
    • 维护记录
    • QA
糯米
日语学习中
68
文章
15
评论
44
喜欢