|
因为难,而且不热门,教程少。
难是不仅对数学有一定要求(但没有人工智能高),而且特别的复杂,API特别的多。举个例子:用DirectX12在屏幕上绘制一个简单的立方体至少需要1000行代码,用到数十个API。
网上一大堆人工智能的算法的详解,包括最新的模型的详细介绍,很容易搜索到。可是图形学除了PBR,光照阴影,SSAO之类的算法(在Learn OpenGL里都有),更高级的渲染方法根本旧没有教程,只能自己去找代码,尝试去理解。
搞图形学的不是“调包侠”,图形学没有什么通用的框架,各种效果基本上都需要手工实现。想100行写一个简单的效果是不可能的。
我最近遇到一个情况:要实现一个光线追踪。
DirectX12 Raytracing Fallback Layer是一个完整的用GPU进行光线追踪的库。
在GPU上用 Morton Code建造 BVH 的方法,这个本人可以看懂,分为以下步骤:
求出场景AABB盒的最大值最小值。根据最大值最小值计算AABB盒的Morton Code对Morton Code排序对Morton Code寻找分割点,建造二叉树根据建造完的二叉树,设定中间节点AABB
具体算法可以看:
Thinking Parallel, Part III: Tree Construction on the GPU | NVIDIA Developer Blog用Morton Code建造 BVH的速度很快,但是质量不太好,所以就要对BVH进行优化。DirectX12 Raytracing Fallback Layer有一个文件叫,TreeletReorder 方法。一种对BVH进行SAH优化的方法。像了解可以看这里:
http://research.nvidia.com/sites/default/files/pubs/2013-07_Fast-Parallel-Construction/karras2013hpg_paper.pdf这个TreeletReorder本人还无法彻底理解。
这还是2013年的论文,可是除了上述论文和DirectX12 Raytracing Fallback Layer外,我找不到任何的可供参考的文章。
Shader调试也难。DirectX还好,有Visual Studio自带的图形调试器,可以对Shader下断点调试。但是它经常出问题,特别是Compute Shader时,经常的在调试器中显示的buffer和我 从host端读取的不一样。有时候某些变量被编译器优化掉了,无法查看。
图形API很底层。最新的图形API如DirectX12,Vulkan 把原本驱动完成的交给了程序员。包括状态转换,使用时每一次都要手动转换状态。还有什么Descriptor Heap,Root Signature之类的,都要手动管理。
我们搞游戏引擎的基本上就是抄代码,前提是能看懂并理解。如果能抄了一个非常好的效果的代码(比如Nvidia的Island11,下图)并整合进自己的渲染管线里,我认为能力已经很不错了。图形学的代码为了执行效率,耦合性一般很高,经常的牵一发动全身。
Nvidia Island11 Demo
还有物理引擎,本人看过Bullet物理引擎的代码。求解约束的部分就是求解雅可比矩阵, 一直看不懂。没有任何教材帮助理解。
图形API和图形硬件的工作细节很少是公开的。比如DirectX Compute Shader 中, groupshared int 连续访问不会有 Bank Conflict ,但是int2类型我就不知道了,我认为编译器会对groupshared内存布局进行优化,避免 Bank Conflict,但如果int2的内存布局是连续的数组,就会出现Bank Conflict ,导致性能下降。
StructuredBuffer 内存访问会不会合并( Coalesced ),int int2 int4类型肯定会被合并,我测过。但int3类型呢?如果内存布局是连续的数组,性能就会下降。我认为编译器肯定会优化int3类型的内存布局。
不过图形学也有好的一面,图形学找工作(游戏引擎)一般本科学历就可以胜任了,竞争不激烈。像我这样的破烂学历就可以找到游戏开发的岗位,还是零工作经验进去的(走的是社招,第一份工作),面试就面了30分钟就过了。而人工智能都需要研究生学历,而且竞争特别激烈。
图形学不仅仅可以用于游戏,还有其他的用途。比如:自动驾驶模拟器。我没做过自动驾驶模拟器,但我认为它的复杂度比一般的游戏如GTA5复杂多了。不仅要模拟道路,景物,车辆,行人等游戏都有的,还要模拟信号灯,标志牌,甚至路障。模拟器渲染出的图像直接作为汽车的传感器的输入数据,汽车就会认为在真实的路上。模拟器测试已经成为了自动驾驶必不可少的一部分。 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|