作者cjcat2266 (CJ Cat)
看板GameDesign
标题Re: [分享] 用缓存mesh和vert shader实作debug draw
时间Sun Oct 1 12:50:31 2017
1F:→ Frostx: 不知道Gizmos有没有符合这边提到的debug需求? 10/01 12:04
2F:→ 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,可能有搞错什麽细节
有错烦请指正
--
Web
http://AllenChou.net
Twitter
http://twitter.com/TheAllenChou
LinkedIn
http://linkedin.com/in/MingLunChou
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 104.174.112.138
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/GameDesign/M.1506833439.A.F5A.html
※ 编辑: cjcat2266 (104.174.112.138), 10/01/2017 13:05:11
3F:→ dreamnook: 你们是要准备做手机游戏了吗xD 10/01 13:05
4F:→ cjcat2266: 蛤?"我们"是说公司?没有啊,这是我自己兴趣使然的研究 10/01 13:11
5F:→ cjcat2266: 对未来生成blog的3D动态范例GIF也很有帮助 10/01 13:12
6F:→ cjcat2266: 之前做数值弹簧范例的时候是有用过一次Unity啦,不过那 10/01 13:13
8F:→ cjcat2266: 这次是比较有目的性和系统性的研究+学习 10/01 13:15
※ 编辑: cjcat2266 (104.174.112.138), 10/01/2017 14:51:29