有不少shader都会用到顶点颜色,比如下面这个shader用顶点颜色来控制卡通渲染的描边:
2173:【01】从零开始的卡通渲染-描边篇zhuanlan.zhihu.com顶点颜色一般都会在DCC中编辑,但是要在DCC中编辑就需要在游戏引擎和DCC中各实现一次shader,由于自己项目的shader代码量比较多,加上也不了解DCC的shader开发,实在不想维护两套代码,所以干脆在游戏引擎里画顶点色得了。不过这样做有个缺点,就是模型变了顶点色得重画一次,而且画完怎么保存也是个问题(asset,fbx都有各自的问题)。当然你可以把顶点色烘到贴图里,但是这对UV又有要求了。反正就只是顶点色只是用来做微调,所以想了想还是将就在引擎里弄了。
需要的功能只是简单地分通道画顶点颜色,于是自己做了一个编辑器。操作的时候大概是酱紫的(不需要碰撞体哦):
编辑器长酱紫:
有以下的功能:
- Mesh,Skinned Mesh 都可以用
- 可以在 RGBA/R/G/B/A 通道上画
- Undo/Redo操作
- 不用碰撞体
- 保存为 .asset 文件
操作步骤记一下:
1.选择一个带有Mesh或Skinned Mesh的GameObject,点击Window->Simple Vertex Painter打开编辑器,点击"Add SVTX Object to XXXX"
2.之后就可以愉快了画了,快捷键如下:
- Key Z:开关
- 鼠标右键:绘制
- 鼠标右键+Shift:调整笔刷透明度
- 鼠标右键+Ctrl:调整笔刷大小
- 鼠标右键+Shift+Ctrl:调整笔刷渐变
3.编辑之后要记得保存为.asset,然后SVTX Object 组件可以删掉。
写插件时遇到的坑:
- sharedMesh是无法Undo的,要自己管理一份拷贝的数据;
- Physic.Raycast是需要碰撞体的,所以要用反射拿到Unity做ray triangle intersection的函数,然后就可以检测Mesh和Ray的碰撞了(自己写也行不过花点时间)。可以参考这里:https://gist.github.com/MattRix/9205bc62d558fef98045。
代码在这里:
alpacasking/SimpleVertexPaintergithub.com代码结构主要是参考Unity Japan的法线编辑器Normal Painter:
https://github.com/unity3d-jp/NormalPaintergithub.com