2013-05-16 82 views
0

我有一個基於畫布的紋理與透明背景,我與我的材料的漫反射顏色混合。這是使用基於this SO answer後續定製的頂點着色器代碼完成:如何提高透明畫布紋理的邊緣質量?

vec4 texelColor = texture2D(map, vUv); 
gl_FragColor.rgb = mix(gl_FragColor.rgb, texelColor.rgb, texelColor.a); 
vec3 surfDiffuse = mix(diffuse, vec3(1,1,1), texelColor.a); 

我已經與紋理的premultiplyAlpha設置玩耍了。這就是我得到:

我能做些什麼來擺脫在我的紋理黑暗的邊緣?

回答

0

最好的解決方案是在圖像編輯軟件中將您的紋理邊緣變爲alpha(或者在這種情況下使RGB顏色變爲純色,並在alpha中使用蒙版)。

這樣,而不是:

rgb alpha 
------- 
BBB 000 
BCB 010 
BBB 000 //*B = black, C = texture color, 0 = transparent, 1 = opaque 

你有:

rgb alpha 
------- 
CCC 000 
CCC 010 
CCC 000 

這樣,您將擁有完美的邊緣。

+0

這看起來很有趣,但我不知道如何將它翻譯成WebGL/THREE.js。你在哪裏實施掩碼?在片段着色器? – olov

+0

這些都是在圖像編輯軟件中製作的,都在紋理RGBA圖像中。 – Kromster