Skocz do zawartości

samoczynna zmiana przezroczystości na kolor czarny


Hawaxi

Rekomendowane odpowiedzi

Witam,

Podczas eksportowania projektu do ios'a, przezroczyste tło w gifach staje się czarne. Jest to wina shaderów zmieniających hue owych gifów(gdy je usuwam tło staje się przezroczyste i wszystko działa poprawnie). Natomiast przy tworzeniu aplikacji na windowsa lub inna platformę problem ten nie występuje. Spotkaliście się z podobną komplikacją? Jakieś pomysły?

 

Próbowałem usunąć kolor czarny w kodzie shaderu, wystąpił ten sam problem.

kod:

if(vec3(gl_FragColor) == vec3(0.0))
gl_FragColor.a = 0.0;

 

Proszę o szybką pomoc.

Odnośnik do komentarza
Udostępnij na innych stronach

@Hawaxi

pierwsza rzecz, jaka przychodzi mi na myśl to:

// calculate saturation of color.
float sat = dot(gl_FragColor.rgb, vec3(1.0));
// calculate alpha boolean filter (we get 1.0 only if saturation is not zero).
float f = step(0.004, sat); // 1 divided by 255 is ~0.004.
// multiply alpha by boolean filter to make black color fully transparent.
gl_FragColor.a *= f;

Przetestowałem lokalnie i działa - sprawdź jak na iOSie się to zachowuje. W razie czego zwiększ 0.004 i zobacz, na jakiej wartości iOS usuwa czarny.

Odnośnik do komentarza
Udostępnij na innych stronach

@gnysek: wewnetrznie tak, on po prostu uzyl gifow do animacji poklatkowej. tak czy inaczej to ze to gif to nie powod do powstania tego bledu, a sam shader zmiany wartosci hue, ktory totalnie olewa transparentnosc w tej kwestii. najlepiej, jakby kolega wrzucil kod calego shadera, to moznaby go przerobic zeby nie olewal alphy, ale poki co to mysle ze moje rozwiazanie styknie :P

Odnośnik do komentarza
Udostępnij na innych stronach

5 minut temu, gnysek napisał:

Może trzeba zrobić "premultiply-alpha" ?

to nadal nic nie zmieni - kolega napisal, ze alpha dziala jesli wylaczy ten shader zmiany hue. problem totalnie siedzi w kodzie shadera, ktory olewa alphe zrodlowa :P

inny problem jaki widze potencjalnie, to to ze tekstury budowane dla iOS sa kompresowane i to moze byc takze problemem bo alpha wtedy ma strasznie slaba jakosc. nie wiem, czy mozna wylaczyc kompresje konkretnym teksturom w GMie, wiec zobaczymy czy pierwsze rozwiazanie zadziala - jak nie to kminimy dalej z kompresja.

Odnośnik do komentarza
Udostępnij na innych stronach

Próbowałem na wszelkie sposoby zmodyfikować kod niestety nic to nie dało, walcze dalej. Ktoś ma inne pomysły?

 

Podsyłam kod shaderu, może uda się komuś coś zdziałać.

varying vec2 v_vTexcoord;
varying vec4 v_vColour;
uniform float Position;
vec3 rgb2hsv ( vec3 color )
{
    vec4 K = vec4 ( 0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0 );
    vec4 p = mix ( vec4 ( color.bg, K.wz ), vec4 ( color.gb, K.xy ), step ( color.b, color.g ) );
    vec4 q = mix ( vec4 ( p.xyw, color.r ), vec4 ( color.r, p.yzx ), step ( p.x, color.r ) );
    float d = q.x - min ( q.w, q.y );
    float e = 1.0e-10;
    return vec3 ( abs ( q.z + ( q.w - q.y ) / ( 6.0 * d + e ) ), d / ( q.x + e ), q.x );
}
vec3 hsv2rgb ( vec3 hsv )
{
    vec4 K = vec4 ( 1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0 );
    vec3 p = abs ( fract ( hsv.xxx + K.xyz ) * 6.0 - K.www );
    return hsv.z * mix ( K.xxx, clamp ( p - K.xxx, 0.0, 1.0 ), hsv.y ); 
}
void main ( )
{
    gl_FragColor = texture2D ( gm_BaseTexture, v_vTexcoord ) * v_vColour;
    
    vec3 hsv = rgb2hsv ( gl_FragColor.rgb );                                                                                                                                                                                                                                             
    vec3 shifted_color = vec3 ( hsv.x + Position, hsv.y, hsv.z);
    gl_FragColor.rgb = hsv2rgb ( shifted_color );
    gl_FragColor *= v_vColour;
}

 

Odnośnik do komentarza
Udostępnij na innych stronach

czyli byl bledny blending! :D

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...