总的来说4者的设计理念应该都大差不差,DX12和Metal单独设计,vulkan感觉部分兼容了DX12、Metal设计,WebGPU为了全平台需要兼容三者的设计。(没记错的话好像MoltenVK到现在不支持稀疏纹理, 原因是更新粒度无法保持一致)。
易用性上,Metal最好用,压根不用考虑 descriptor set / root signature的问题,一上来也不需要你解决fence、barrier的问题,最多需要解决一下实现类似glBufferData在同帧内需要多次更新的问题。vulkan应该是最难用的,而且他在android平台上很多国产手机驱动真的难顶。
个人比较喜欢webgpu的设计,用vk和metal、DX12(直接用了MiniEngine的Core进行修改)实现他的时候感觉很舒服。另外看draft和讨论的时候也有不少收获。不过感觉真没必要再整一套shader语言出来。。。(我自己实现用了glsl)
最后吐槽一点,这些东西的ndc坐标、纹理坐标、xx坐标能统一一下么... 解决一致性真的恶心。