前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MMD渲染整活笔记(一)

MMD渲染整活笔记(一)

作者头像
KAAAsS
发布2022-01-14 17:39:21
1.3K0
发布2022-01-14 17:39:21
举报
文章被收录于专栏:KAAAsS's Blog

没错,我又来整活了。这次整活的内容是MMD渲染,不过严格来说是自己渲染,并不是用MikuMikuDance进行渲染。起因……就是最近看LearnOpenGL的模型载入的时候,意外发现Assimp库还可以载入pmx模型。于是我萌生出了大胆的想法(

如果按照模型那一节的代码,直接渲染就能得到一个还算马马虎虎的效果。模型来源:西山居艺创中心。

不过由于没有开启混合和抗锯齿,模型细节效果并不是特别好。透明的贴图显示效果不是特别完善,一些细节比如蕾丝(我很正直)并不能镂空显示。开启之后渲染效果得到了很大的改善。

不过渲染还是有点问题。通过上面的对比可以看到,在Phong光照下整个模型都有几乎一直的高光,有一种瓷器的质感。调试代码发现,原来模型只提供了环境光贴图。经过尝试,我发现只有完全去掉高光,只保留环境光才能渲染出正确的效果。太二次元了,,,不过渲染效果倒是相当不错。

渲染Sour式镜音模型效果也相当不错。模型作者:Sour暄。

不过仔细研究发现,模型中还有很多贴图没有被载入。研究了下发现,主要是两类,一类是sphere贴图,另一类是toon贴图,然而Assimp并没有载入这两种贴图。而且在载入另一个模型的时候还出现了mesh没解析出正确材质的问题。所以没办法,我开始阅读Assimp。

Assimp的代码结构还是非常清晰的,看CMakeLists就能大致了解整个项目结构。MMD模型载入相关的代码位于code/MMD。阅读发现,MMDPmxParser.cpp的PmxMaterial::Read明显是有加载到sphere和toon贴图的信息的。然鹅很神奇的是MMDImporter里并没有把这个数据转换成Assimp的格式,推测原因是Assimp的数据结构并没有能正确存储这两种贴图的方式。看来用Assimp是凉凉了,要么只能曲线救国,直接使用Assimp里面MMD载入的code。不过不幸的是之前还有mesh贴图载入的错误,因此这段代码大概也是有BUG的。

没办法,只能自己想办法解析了,或者是根据现有的Assimp代码进行修改。于是我找到了一份PMX2.1的格式文档,发现PMX模型的细节还是相当复杂的。对于不使用纹理贴图的模型,看起来是采用正常的光照模型材质(Phong或Blin-Phong)。但是在使用材质的情形,又有很多不同。首先就是模型采用Toon贴图计算本影,使用Sphere贴图计算高光。Sphere就是类似SEM的贴图,大部分情况下是用作高光计算,不过也有很多贴图看起来是带反射项的。另外,Sphere贴图可以选择加或乘模式,因此也有直接当成MatCap使用的。推测可以在PBR时加以利用。

然后找到了一个看起来非常靠谱的东西:benikabocha/saba。saba不仅是个mmd模型浏览器,还提供了PMX/VMD的文件解析。更秀的是,saba直接实现了骨骼动画,还增加了物理运算。下一篇,就使用saba来加载MMD模型好了。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/02 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
灰盒安全测试
腾讯知识图谱(Tencent Knowledge Graph,TKG)是一个集成图数据库、图计算引擎和图可视化分析的一站式平台。支持抽取和融合异构数据,支持千亿级节点关系的存储和计算,支持规则匹配、机器学习、图嵌入等图数据挖掘算法,拥有丰富的图数据渲染和展现的可视化方案。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档