很多人在不知道什么是游戏引擎、什么是渲染引擎的情况下就开始思考如何做游戏引擎,这是错误的。
首先,你应该深入了解渲染的基本原理3D素材,所以我同意其他关于首先实现软件光栅化渲染器的答案。您可能应该根据最新标准实施 DirectX(例如,支持曲面细分、着色器、MSAA、混合、各向异性过滤、正确处理退化三角形等各种极端情况)。实现过程中的相关细节请参考DirectX规范。这个文档可能只对硬件厂商开放,但还是很容易获得的。实现软件光栅化还可以极大地锻炼你的底层C++编码能力、并行编程能力和优化能力,顺便也可以熟悉一下主流的GPU架构。
一旦弄清了光栅渲染的本质,就可以理解各种所谓的“高级渲染技术”的本质。基本上3d游戏引擎开发,你只需要在几秒钟内扫描图片就可以理解这篇论文。这样可以在短时间内理解大量的算法和渲染架构(比如各种shadow maps,AO,volumetric scattering,deferred lighting,forward+等)。
当您清楚地了解图形管线的性质和各种可能的应用程序时,剩下的就是高层架构设计的问题。这属于软件工程的范畴,没有捷径可走,只能通过大量的试错(不断重写)来积累经验。
事实上,当你了解这些所谓的技术时,你会发现它们大多是表面上的hack。现在引擎的重要问题不是谁掌握了更好的渲染技术,而是谁能设计出更好的开发流水线。内容制作和艺人反馈是最大的问题。前段时间和Bungie的图形经理聊起了《命运》的引擎。他们说他们可以在两天内实现任何新技术,但最大的问题是 1)如何让这些新技术在各种情况下都能健壮地工作;而且大部分时间还好游戏动态,偶尔挂掉的技术不可取;2)如何构建良好的工具,使艺术家可以控制各种情况。例如,曲面细分是一项很酷的技术3d游戏引擎开发,但要应用到游戏中却并不容易,因为 1) 创建一个好的置换贴图非常困难;2)LOD一旦引入,牵一发而动全身:如何保持各个视角场景的一致性?如何让置换几何体与阴影、碰撞、贴花和可见性等系统正确交互?
此外,不同平台下还有很多底层优化问题,这里不再展开。