Re: [分享] 用缓存mesh和vert shader实作debug draw

楼主: cjcat2266 (CJ Cat)   2017-10-01 12:50:31
→ Frostx: 不知道Gizmos有没有符合这边提到的debug需求? 10/01 12:04
→ MADAOTW: 我也觉得跟Gizmos有像 10/01 12:07
Gizmos应该不太一样
主要能够在画面上动态绘制的方法有三种:
1. Debug.DrawLine
2. Gizmos.Draw*
3. Graphics.Draw*
(GL.* 因为是效能不佳的immediate mode所以就不考虑了)
三者各有不同,以下分辨一下
Debug.DrawLine
顾名思义,就是debug draw线条
默认只有editor mode的时候会显示,play mode的时候要额外打开gizmos选项才会显示
不会被编译进build输出的执行档,所以不会在成品中显示
Gizmos.Draw*
需要跟物件的OnDrawGizmos绑定才有办法发挥作用
在物件的OnDrawGizmos中绘制的图形会成为物体点选区域的一部份
(原理该是绘制时额外在stencil buffer上写入物件ID,再借由鼠标点选像素取样)
可透过Gizmos.color更改整体图形绘制的颜色,除此之外无法客制渲染方法
Gizmos.DrawMesh可绘制任意图形,但是仍有单色且无法客制渲染方法的限制
只有editor mode才会显示,无法在play mode中当debug draw用
而且不会被编译进build输出的执行档,所以也不会在成品中显示
Graphics.Draw*
这是泛用型绘制指令,所有mode之下都可以显示
也无需跟物件绑定,任何script都可以用Graphics.Draw*任意绘制或视觉化资料
可用mesh绘制任意图形,且可以用客制vertex/fragment/surface shader
效能高、可用shader客制、又各mode可用,所以是我debug draw的首选
唯一做不到的就是像Gizmos一样可以扩增物件点选区域
但如果有需要的话,把我的cached mesh逻辑抽离出来就可以和Gizmos共用了
以上是我的个人理解
但最近才刚开始研究Unity,可能有搞错什么细节
有错烦请指正
作者: Frostx (Naga)   2016-10-01 12:04:00
不知道Gizmos有没有符合这边提到的debug需求?
作者: MADAOTW (MADAO)   2016-10-01 12:07:00
我也觉得跟Gizmos有像
作者: dreamnook (亚龙)   2017-10-01 13:05:00
你们是要准备做手机游戏了吗xD
楼主: cjcat2266 (CJ Cat)   2017-10-01 13:11:00
蛤?"我们"是说公司?没有啊,这是我自己兴趣使然的研究对未来生成blog的3D动态范例GIF也很有帮助之前做数值弹簧范例的时候是有用过一次Unity啦,不过那次也是摸皮毛,弄出GIF就没碰了 http://bit.ly/2fHulp4这次是比较有目的性和系统性的研究+学习

Links booklink

Contact Us: admin [ a t ] ucptt.com