说白了,OpenGL 这个名词听起来挺学术,像是啥大工程学的术语,但实际上它就是个画图的快捷键。
那会儿这玩意儿在 PC 上玩得挺嗨,大家对着屏幕上一堆五彩斑斓的方块儿瞎指挥,认定那是游戏,目前大量人都在用。但到了手机和平板,特别是像 iPad 这种设备里,OpenGL 的地位可就尴尬了。
为啥?出于目前的手机屏幕忒小,又得当个掌机玩,要是像电脑那样直接跑OpenGL,那功耗得飞起,哪位还愿意拿着个半斤重的砖头去充Power?说白了,手机屏幕小,跑不了那些高幀率、高负载的图形库,要么起码是没必要,对吧? 不过你别认定OpenGL这就废了,它实际上是个挺好的底层工具,用来做“渲染管线”的。就像你穿鞋子,那会儿可能直接穿那双鞋步行,目前大家都喜爱先穿一层袜子和内衬,显得厚乎厚实,然后外面再套上那双好看的鞋。Shader就是那个内衬,是处理细节的地方,比如让纹理看起来有凹凸感,让光照变化更真。而一点点管住渲染流程的接口,就是把这层内衬做成一个可插拔的模块,让你能在不同设备上灵活调整。
比如在 PC 上,你能够用OpenGL去跑那些超高清的4K视频,要么做那些需求复杂光影效果的3D游戏,它能做到别的渲染引擎做不到的极致。但在手机里,它的表现可能就不那么完美了,毕竟受限于硬件,它挺难发挥出那种“天降神兵”的感觉。 那到底啥时候该用,啥时候不该用呢?要是你是在做一款核心玩法超级硬核的3D游戏,比如《塞尔达传说》要么那些动作游戏,画面细腻度是第一位的,这时候OpenGL就是个万金油。你需求它来处理复杂的高光反射、动态阴影,就连是一些特殊的视觉效果,这时候OpenGL能给你充足的手术刀,把细节打磨得油光水滑。但要是你的项目是个网页应用,要么是一个好办的跑酷小游戏,这时候用 OpenGL 就有点画蛇添足了。
说白了,你不需求为了多几个像素去折腾它,那样不仅浪费资源,反而让你没法专注于核心玩法本身。就像你进食,干饭的时候不需求非得吃那个烫口又复杂的“麻辣小龙虾汤”,喝一口好办的白开水就能饱了。 再拿光影效果来说,OpenGL 在实现光照模型上的表现实际上挺不错。你能够自己写 Shader 代码,去模拟各种各样的光源,比如点光源、平行光、就连是模拟忒阳光束的那种效果。
这在手机上是挺难做到的,大量低端芯片都做不到如此精细的光照计算。记得有个测试游戏,就是直接跑 OpenGL 的,它的光影效果简直绝了,那些阳光的折射、阴影的过渡,都透着一种高级感,那是一般/平平渲染管线挺难省事达到的。但你要是在做一款为了低预算、低画质而设计的玩具,这时候用 OpenGL 反而显得你心机重,没必要折腾如此费事。 还有一个关键的点,就是它和 DirectX 的对比。
那会儿大家玩 PC 游戏,要么是用 DirectX,要么是用 OpenGL,感觉像是鸡同鸭讲。但目前看,实际上 OpenGL 在某些方面比 DirectX 更灵活。
比如你在代码里写一个统一的渲染上下文,既能够用在 PC 上跑 OpenGL,也能够用在其他设备上跑 DirectX 要么 Vulkan。
这就好比是一个通用的接口,不管你在哪个平台上,都能用同样的逻辑去调用资源管理。
这种跨平台的灵活性,在其他渲染引擎里往往挺难做到。 不过,我也得承认,OpenGL 在手机上的经验可能有点“拼凑”感。出于它的 API 忒老了,大量新的硬件特性在上面都没有挺好的封装,你得自己去写那些基础的函数。
这就害得你在手机上写代码,有时候会比你预期里慢上一拍,要么需求改好几遍。但反过来想想,正是这些繁琐的细节,才让你能定制出那些独一无二的视觉效果。
要是只是想要个好办粗暴的“动起来”,那可能用目前的手机原生渲染库更直接,但要是你想做那种“走一步看三步”的精品游戏,OpenGL 依然是那个被低估的选手。 最终总结一下,OpenGL 不是一个拍板性的胜负手,它是一个工具箱。选它还是选别的,彻底取决于你的项目需求。
要是你追求极致画质,要么需求处理贼复杂的光照计算,那 OpenGL 就是你的好帮手,哪怕打点凑点像素也是值得的。但要是你的目标只是让玩家爽爽地玩,那何必弄得头大呢?技术一辈子是服务于内容的,不是内容为了技术而存有。
故此,别纠结便哪个引擎更好,关键的是你的内容想不想把它做得充足好。