2014-04-30 30 views
2

如果繪製使用冒名頂替者基於光線追蹤的方法的球體,例如這裏抗鋸齒GLSL冒名頂替

http://www.arcsynthesis.org/gltut/Illumination/Tutorial%2013.html

您通常繪製四邊形,然後使用「丟棄」跳過具有一個像素中描述距四邊形中心的距離大於球體半徑。

打開消除鋸齒時,GLSL將消除您繪製的圖元的邊界 - 在本例中爲四邊形 - 而不是繪製和丟棄像素之間的邊界。

我附上了兩個屏幕截圖,顯示了球體和邊界的爆炸。除了位於四邊形上的最頂部的像素外,很明顯球形邊界還沒有被消除鋸齒。

Impostor based sphere Sphere border zoom-in

有什麼訣竅,我可以使用,使冒名頂替球具有很好的防鋸齒邊緣?

最佳方面,

的Mads

回答

1

而不是僅僅丟棄像素,設置你的球有內,外半徑。 內半徑內的所有內容都是完全不透明的,外半徑之外的所有內容都將被丟棄,並且介於兩者之間的任何內容都將在0和1個Alpha值之間進行線性插值。

float alpha = (position - inner)/(outer - inner); 
+0

你也想混合這個來做任何事情。坦率地說,你可能只是在着色器本身中實現它......'output = mix(,alpha)'。 –

+0

謝謝。問題是,通常我有幾個領域 - 所以我需要與當前的碎片顏色混合。所以與黑色混合只會在我只有一個球體的時候起作用。相反,我嘗試了混合,但在這種情況下,我需要將所有球體相對於它們的視野空間Z座標拉回前面。嗯... – repoman

1

Kneejerk反應會對你自己進行多重採樣:渲染到一個紋理,例如,是實際輸出的四倍,然後確保您生成mip貼圖並將該紋理渲染回屏幕。

或者直接在您的着色器中做這件事,讓OpenGL繼續擔心幾何邊緣:每個像素採樣四條光線並對其進行平均。

+0

謝謝。我會試一試 – repoman