2024端午快乐!

虽然今天才5号...
但鉴于今天公司发了端午节福利...所以说端午快乐OwO

最近在研究fmod的时候,发现他们把《Celeste》的音频工程文件当作案例分享出来了!!!!
这是我大一最喜欢的游戏欸...又把原声带听了几遍,选出一首比较喜欢的放这里吧ヾ(≧▽≦*)o


今天主要是记录一下现在的目标和进度,存个档用
每天上班闲下来就学Vulkan
虽然没人要求,但是身边同事人均会俩图形API,我得知耻啊...

我选择Vulkan而不是Metal/DX12作为我的第二图形API,是因为其跨平台性
DX12是Windows/Xbox only,Metal更不消说是果子Only,只有Vulkan有着面上的All platform ready
然而跨平台带来的代价是高昂的,暂且不说不同平台需要大量丑陋的编译期判断,对众多标准不统一的设备的支持天然导致了其接口的繁琐 (也有现代API为了追求高性能带来的Side effect)

“跨平台就是狗屎!”
---- 我告诉同事因为vk跨平台我才想学的时候,他下意识的回应

在初始化阶段,需要创建VkInstance,开启平台拓展,选择一个物理设备VkPhysicalDevices,由物理设备再创建出逻辑设备VkDevice,由VkDevice创建VkFamilyQueue,交换链......
这些能复用的倒也不算事情,第一次写个700行给他全搞定了也就好了...
但问题是真正进入了渲染流程更加繁琐...
在OpenGL里的Uniform在这里被Uniform Buffer这个概念取代了(不可否认高版本GL有这个拓展...)
创建一个UBO需要为其分配Descriptor,Descriptor来自于Descriptor Set,所以需要向其写入,Descriptor set需要从Descriptor Pool中分配,所以还需要提前计算池的大小。对于UBO还得考虑其内存对齐来保证和Shader的数据结构一致...
而UBO只是一种传数据的方式,还有SSBO,Constant等无数坑等着我去探索.....

这还只是设置个Uniform呢..更要命的是渲染管线的设置,比如说Render pass和Sub pass有什么区别?Sub pass之间的同步怎么设置?一大堆坑等着我去踩...

从同事那已知坑一只:部分手机GPU不支持SubPass
这就是跨平台的代价,和幽默驱动做斗争

到这里1k行代码有了,而你才刚刚渲染出一个三角形(


学Vulkan一个不错的手段是去看他官方的例子 https://github.com/KhronosGroup/Vulkan-Samples
或者是早些时候由上面项目主要贡献者制作的例子
https://github.com/SaschaWillems/Vulkan

我现在选择的方法是做Games106的作业,fork自上面项目
(我现在卡在了hw1的提高部分,在摸索如何加Render pass 哭

不过在一切之前先要:
把Vulkan-tutorial写一遍


同事告诉我Vulkan的初始化过程不用背下来,我悬着的心放下来了


我计划花一个月在这个API上,然后开始封装一套自己的VK接口
对于VK接口的封装 同事给我推荐的是
https://github.com/Raikiri/LegitEngine
这套API基于Render graph的思想封装的

什么是Render Graph?简而言之:把图形管线内部Pass的关系当作DAG来看

可以发现其用法简单的爆炸...


目前最大的目标还是搓一个自己的游戏引擎出来,所以还得努力啊...

次要目标是用C++重构博客后端...因为我维护不来SpringBoot了(


其实图形API只是图形学里小小的一部分,但却是最关键的工程部分...

学完赶紧多花时间在真正的图形学上吧


leader说要重构PC端的管线,要有活干了
(游戏年底上线.......我奖金呢!


☆*: .。. o(≧▽≦)o .。.:*☆

END