作者mellean (莉莉姆)
看板GameDesign
标题Re: [请益] 请问关於 Ogre 材质 透明色 设定
时间Wed Mar 11 01:31:24 2009
看了你的图後推测应该是先画了头发才画脸部没错
因为即使alpha test打开了,然後设定的reject是alpha等於0的不处理
但是alpha不为0的部份还是会被处理,所以边缘会有残留。
可能有几种选择方法来尝试解决:
1. 将reject的value增加,例如128;这样可以减少边缘残留的部份,但
会比较不好看。
2. ogre本身会先绘制solid的物件们,之後才绘制transparency的物件们,绘制
顺序与SubEntity建立的顺序无关,看你的绘制结果,你的脸部entity所使用
的材质可能具有透明属性,所以才会跟头发一起绘制且没经过sorting;假如
你的脸部材质并不需要alpha(亦即texture本身并没alpha或alpha没作用)时
请将SceneBlendType设定成Replace,这样确保脸部是solid型态的物件,就会
先被绘制,後来才绘制有transparent属性的头发,这样就不会有在脸上的头发
边缘却看到底色的问题,但假设头发下面的物件也需要transparent属性,
那就需要对entity使用sorting了。
3. 透过entity将脸部与头发的render priority设定为不同层次,脸部先,头发後
不过因为预设的游戏物件绘制的priority都一样(sky与UI除外),所以可能要
小心使用。
以上几种方式应该都能解决脸部与头发间有底色残留的问题,但是无法解决
"假设你的头发本身是一整个同一个mesh"时头发盖头发(很多层头发)会有
底色残留的问题,要解决这个就需要对polygon做render sorting了,简单的
可在mesh输出时先sorting完毕,效果比较好的就是绘制的时候按照depth资讯
即时来做sorting。
※ 引述《pleaselouis (LOUISN)》之铭言:
: 你好 谢谢你的回应 不过还是有些疑问 希望可以跟你请教
: 和美术讨论 目前是想使用 Alpha Texture 的技术 当然你提到的 Alpha Test 其实也有做
: 只是在 Mesh 的边缘贴图 也会出现类似於我之前提到的情形 如下图 :
: http://0rz.tw/QtBWt
: 在此图片可以看见 头发的边缘 一样会看到场景的底色(水蓝色) 而不是脸的肤色
: 有在其他讨论区跟其他网友讨论 他认为是 SubEntity 的顺序造成的
: 也就是我先显示 头发 再画 脸部 所以才会这样...但是...
: 其实我的 头发 跟 脸部 都是个别独立的Mesh 并不属於同一个Mesh之下
: 原本是打算 在 SceneNode 中使用 Attach 的方式 将他们连结在一起
: 不过这样好像跟 SubEntity 的顺序没有相关就是了...囧
: 看了文件 我认为应该是要使用 createSubMesh() 来将 头发加到脸部上
: 但是查询网路上相关 createSubMesh() 的范例 都似乎是另外手动撰写多边形附加上去
: 而不是另外载入一个 Mesh 档 将其附加上去 ...
: 不知道关於上面所述 可否请大家提供一些意见 一起讨论研究 谢谢大家 <(_ _)>
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 122.116.37.95
1F:推 pleaselouis:非常感谢你的帮忙 我想我需要的就是做sorting 因为我 03/11 09:45
2F:→ pleaselouis:的头发的确就是一整个Mesh 可以请问关於做 sort 的关 03/11 09:45
3F:→ pleaselouis:键字有哪些吗?? 再次谢谢你的帮忙 <(_ _)> 03/11 09:46
4F:→ mellean:try to google "transparent polygon sorting" 03/11 10:52