经常能看到有些客户端的招聘要求里只有对Direct3D和显示特效的强调。也就是说,很多人只看到了3D引擎、在3D引擎里又只看到了模型和特效。但它们只是一小部分,而且并不是最有技术含量的部分。因为3D技术已经发展了很多年,尤其是硬件发展速度快,硬件厂商巴不得软件开发人员用上他们提供的所有先进技术,所有的技术都是开放的,都有详细的文档和样例。到今天已经是几乎每个人都自己写一套3D引擎的地步,开源的引擎都已经一抓一大把了。
但这并不是说每个3D引擎都一样,相反它们有很大的差别,一个好的引擎是有很多重要而有技术含量的功能的,而一般个人做的引擎都很简单,功能甚少,但它仍然可以叫引擎,可以绘制模型和一些特效。需要什么样的引擎由游戏本身的需求决定,也可能很简单的就够了,也可能要功能相当完整的。这里给出个比较完整的显示引擎功能的单子:
1. 图元绘制
2. 模型绘制,最好支持多种模型格式
3. 模型预览工具
4. 给3DSMax、Maya等的模型导出插件
5. 半透明对象的排序
6. 动画(硬动画、顶点动画、骨骼动画)
7. 贴片功能
8. Billboard支持
9. Lightmap贴图
10. 至少一种绘制影子的技术,如Shadow Volume, Shadow Map或者简单的投影一个黑圈
11. 至少一种绘制天空的技术,如SphereMap、CubeMap
12. 资源滚动装载(在显示资源很多时很重要)
13. 粒子系统,最好是可由脚本编辑的,这样就不再需要程序员干预制作过程
14. 对Shader支持和足够的调试功能
15. Unicode的文字绘制
16. Scene Graph管理,QuadTree、OctTree或者BSP等
17. 大场景会用到LOD的功能
18. 图层支持
19. GUI系统
20. 资源文件打包支持,最好支持ZIP格式
21. 性能分析支持,至少包括FPS、每帧三角面数、每帧DrawPrimitive的数量
22. 室外游戏会需要Terrain系统的支持
23. 镜头特效,如光晕、震动等
24. 文档,包括针对使用引擎的程序员和使用相关工具的美工人员的
可以发现,一个比较完整的3D引擎是个庞大的系统,它的整体架构的好坏就变得很重要。细心的人会注意到这里没怎么提到特效,也就是很多人最关注的问题。事实上,大部分的特效制作源于美工,而程序提供一个基础的支持,如果等着程序员写出每个特效,那就只能指望延长工期了。