本人作为linux粉丝,大学从接触计算机打字开始,就没使用过windows,原因是电脑跑不了xp,当年块在网吧淘了一个的电脑,主屏MHZ,内存32M.xp需要最低M内存。所以大学基本上都在研究linux,写linux上的代码。
年写了两年嵌入式Linux软件开发后,决定从某外企离职,出来开发手机应用。
开发手机应用首先想到的是游戏,毕竟这玩意儿最搞钱,移动领域收入80%来自游戏。当然后来各种机缘没去开发游戏,但对unity3d技术比较好奇,所以也陆续研究了很多年。中途付费了两年,因为受不了它的poweredbyunity的开启启动画面。
所以大家看到我年写的博客,只要涉及手机上的3D应用。基本上都是unity3D写的.因为unity3d毕竟非常好用,c#也很友好,即使有时候涉及一些底层的处理,比如OpenCV图像处理,我都愿意自己去写一大堆Unity3d插件比如OpenCV的插件(图像处理代码为c++,所以不能直接使用c#版本的OpenCV)。
当然别的游戏引擎,也尝试过很多,比如godot,Urho3D,Unreal等。
本来这一切也相安无事,在移动时代,我个人大量的时间,其实在写音视频,网络通讯开发,有的时候,会使用OpenGL,但代码量都非常少,渲染一张简单的贴图之类的。只要看得懂OpenGL代码即可。况且Unity3d也非常简单易用。写插件就写插件吧。比如后来苹果更新了相机,麦克风隐私权限,那我就写对应的插件。视频录制,麦克风录制,也继续写插件。后来就发现unity3d项目,我写了一大堆c++甚至oc插件.
但从年初,涉及音视频图像处理的业务越来越多,于是就开始大量使用OpenGL。比如视频剪辑,特效等。比如下面种案例。当然中途看到Arnold渲染头发非常漂亮,于是也决定深入去研究这个领域。
当然也有别的很多东西,比如写过一个虚拟偶像全身视频追踪项目。
当然后来还有一个iPad数字雕刻软件。因为个人长期使用Blender,所以写了一个符合Blender雕刻习惯的iPad版本雕刻软件。
于是后来就越来越觉得OpenGL很好用,很顺手。于是,就逐渐删掉了电脑里面的游戏引擎。主要的原因是,不再需要一个那么庞大的东西,还有就是不再去写一堆插件贴狗皮膏药一样。当然最重要的是,能写的东西越来越多。
OpenGLES本身是一套跨平台的方案,所以,无论你写桌面软件,还是移动端,都建议写OpenGLESc++跨平台版本,然后一套东西,封装好,塞进iOS,androidQt里面,跑起来其实无限的丝滑。这样,你就用一套代码打遍了所有的客户端软件平台。以下是跨平台OpenGLES代码在安卓上的展示,在iOS,Qt上,其实都可以稍微改几行代码,就可以跨平台,比如shader加载的路径,图片的路径.context不一样等。
当然OpenGL也不是没有问题。这里篇幅有限,后面文章继续讨论。未来5~10年,我们的代码可能被Vulkan/Metal替代。但依然会怀念那个c++OpenGLES跨平台开发非常友好的时代。
所以建议,当前的开发,如果是新项目,windows/android建议继续使用OpenGL/ES,iOS/macOS直接用Metal。
如果从学习的角度,还是建议先学习OpenGL/ES,学习后,用来做几个大小项目,理解深刻以后,再转到Metal/Vulkan。如果是新手,直接学习Metal/Vulkan,你学了以后很有可能不知道拿来做什么,想学习下的资料都没有。因为大量的图形学领域的理论,开源项目,几乎都是OpenGL。
如果是公司:
开发游戏,直接用游戏引擎。重复造轮子就是技术流,爱好了。
开发轻量级跨平台渲染引擎比如视频特效,视频剪辑,医疗,教育,VR/AR,用OpenGL/ES.
喜欢尝鲜新技术,有大量的积累,iOS/Mac上Metal。
未来:
如果AR/VR,元宇宙像描述的那样到来,那么这个领域60~W+年薪的机会将非常火爆。