这周研究一下,以前从 Stage3D 时代就想做的效果 -> 贴花
具体是怎样的呢
就是可以贴合模型全新纹理,差不多是这样
于是我做了个 动态贴花插件,这样美术童鞋在做场景的时候就比较直观咯
具体应用的美术场景,可以看看这个图
贴花做法其实就是复制要贴花模型的某一部分三角形,然后绘制新的纹理
如何截取三角形呢
请不要无脑复制转载本文, 由 dreamfairy 原创, 转载请注明出处 本文地址 http://www.dreamfairy.cn/blog/2016/06/26/unity3d–decay–plugin/
正方形包围盒截取算法
1.将被贴花的模型的所有三角形转换到包围盒坐标系内
2.排除三角形3个顶点在包围盒6个面内的三角形,收集3个顶点都在6个面内的三角形, 对于仅有某个顶点在包围盒内,某个顶点不在包围盒内的三角形,使用空间直线和平面交点算法,计算出包围盒平面上的相交点作为新的顶点
3.把收集的顶点创建网格
球形包围盒截取算法
1.跟上面一样
2.只需要判断顶点距离是否小于球形半径即可,对于部分超出球型的顶点,使用空间直线和球型交点的算法, 文章最后有相关算法论文
3.同正方形包围盒
那么Decay 能用在什么地方呢
1.Fps游戏打枪时,墙面的弹坑
2.场景喷漆,比如不规则平面上血渍,颜料等
3.脚印
凡是静态的不规则新纹理贴片,Decay都是最好的选择
对于动态对象,比如蒙皮动画,不要使用Decay,因为Decay要遍历对象的所有三角形,因此实时性能不好。 静态能做Batch。
对于动态对象,建议使用Projector, 它是再次绘制目标一次,然后用新的uv绘制
Projector的动态对象性能极好与 Decay. 但是静态性能极低与Decay,会增加2倍Draw Call, 不能 Combine Batch.
因此要有选择的使用它们。
参考部分
1.光线跟踪的直线与球体求交的快速算法
Link
2.Decals editor ~ part three
Link
太感谢博主了
具体代码怎么实现啊?包围盒里mesh怎么动态生成?