1、起心动念
自2015年以来我就想写一个3D建模软件,那时我正在开发2.5D的MMORPG游戏。我在YouTube自学了一段时间的Blender软件,Blender其实相当不错,但是,这个过程中的工作量让我意识到,一个人不可能完成大量的模型、制作纹理、动画,然后在游戏中使用,因为只是建立一个简单的恐龙模型就花了我半天时间。
我看了很多关于如何快速制作游戏模型的教程,试图找出一个统一的方式,一个可重复的模式,可以在编程语言中简化。我总结了制作模型的最常见步骤:首先,为前视图、侧视图和后视图设置参考样张,其次,制作平面,然后细分为六边形,通过遵循参考仰仗挤压此六边形,调整面部大小,以不同角度微调,来回调整,最后获得基本模型。
2、最初的实验
看起来我可以写一个软件来自动完成这些步骤,输入参考样张,它输出一个模型。让我们实现这一点,我做了一个非常粗糙的测试程序,以识别图像中的每个视图,提取边界,根据边界挤压面孔,但它太小了,不能在游戏中使用。
3、来自Jimmy的新想法
有一天,我搜索了一些有关怪物生成的关键字,并找到了Jimmy Gunawan的博客, 我被他的文章震惊了,这就是我要找的,这就是答案,我非常兴奋,当读到博客上关于Blender的皮肤修改器背后的技术时,我发现了论文:B-Mesh: A Fast Modeling System for Base Meshes of 3D Articulated Shapes,这一刻我就知道,是时候将我最初的想法变成真实的产品了。
4、启动Dust3D项目
我启动了 Dust3D 项目, 并在reddit贴出了我的计划,虽然这是我还没有做很多事情。我这样做是因为,作为游戏行业的新手,我不想在一开始错过一些事情。感谢令人赞叹的reddit用户,我学到了很多新的软件名称和建模术语,如Meshmixer,CGAL,等等。
5、重新发明车轮
重新发明车轮很有趣,所以我没有严格遵循尽量使用已有库的建议,我想从头开始制作一个3D软件。我想逐点逐行绘制3D世界。这是 Dust3D 的第一个屏幕截图,使用原始 OpenGL,除了 OpenGL 环境,没有任何其他依赖:
过了一段时间,我认为Qt非常容易使用,所以我小心地引入了Qt。然后实现了 Bmesh 算法:
现在,是时候做一个更正式的用户界面了。
6、再次重造车轮
你可以看到,dust3d是从零依赖开始,然后不可避免地引入一些东西。如果继续这样下去,一切顺利。但有些事情发生了。由于没有复杂的UI,我使用Blender建立Bmesh球之间的关系,我发现Blender软件在Callada输出器中的一个bug,我试图自己修复它,所以我下载了Blender的源代码,修复并提交了一个补丁。在此过程中,我厌倦了折腾C++的不同版本的问题,因此我决定从 Dust3D 代码库中删除所有C++代码。
Qt是C++,因此Qt被删除。我试图找到一些替代的UI库,ImGui看起来很有前途,但因为它是C++写的,所以被放弃了。我又从零开始实现UI,这就是它的外观:
13、Dust3D的未来
目前还没有实现没有自动拆解纹理,没有自动刚性处理,没有自动动画生成。还有很长的路要走,我很期待。谢谢你的阅读。
PS:自动拆解纹理和自动刚性已经完成,自动动画正在开发中。(2018年5月30日)
原文链接:从零实现一个3D建模软件 — BimAnt
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!