2012年4月18日 星期三

Linear Depth Map

一般我們在shader內取得depth的方式是 projected position.z / projected position.w。但是這樣的depth並不是線性分佈的,離鏡頭比較近的東西,Z值變化很大,會吃掉Z值90%的值。也就是說距離鏡頭前10%的部分,如果depth的range是0~1之間的話,就會在0~0.9值在變化,剩下的離鏡頭90%的部分,就只會在0.9~1之間變化。

所以要改成projected position.z / camera far plane dist。

目前原理都不曉得為什麼,所以之後再補上。

2012年4月10日 星期二

Gamebryo NiStandardMaterial Alpha Testing

基本上Gamebryo讀取的Model套用到NiStandardMaterial的話,如果Model要做Alpha Testing或Blending的話,基本上就會使用Model本身的設定。但是可以看到Gamebryo產生出來的shader code,實際上他並沒有在shader內做discard的動作,shader code內的程式都會執行,不過重點在於color register 0的alpha value,實際上Gamebryo內是用這個alpha value來做Alpha testing的。所以當今天用了其他的color register,即使把alpha vlaue都設為1都沒用,因為color 0 alpha testing後去掉的pixel,其他color register相同的pixel也不會有顏色。

所以要注意不要任意的把color 0的alpha value任意設,應該follow model最後的值。