Unity3D 中的贴花效果

这周研究一下,以前从 Stage3D 时代就想做的效果 -> 贴花

具体是怎样的呢

decay3

就是可以贴合模型全新纹理,差不多是这样
于是我做了个 动态贴花插件,这样美术童鞋在做场景的时候就比较直观咯

decayCircle

具体应用的美术场景,可以看看这个图
decay1

decay2

贴花做法其实就是复制要贴花模型的某一部分三角形,然后绘制新的纹理
decay4

如何截取三角形呢

请不要无脑复制转载本文, 由 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

发表评论

电子邮件地址不会被公开。 必填项已用*标注