Hawaxi Opublikowano 8 Listopada 2017 Udostępnij Opublikowano 8 Listopada 2017 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 Więcej opcji udostępniania...
PsichiX Opublikowano 8 Listopada 2017 Udostępnij Opublikowano 8 Listopada 2017 @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 Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 9 Listopada 2017 Administratorzy Udostępnij Opublikowano 9 Listopada 2017 w gifach ? przecież GM powinien operować na PNG. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
PsichiX Opublikowano 9 Listopada 2017 Udostępnij Opublikowano 9 Listopada 2017 @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 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 9 Listopada 2017 Administratorzy Udostępnij Opublikowano 9 Listopada 2017 Może trzeba zrobić "premultiply-alpha" ? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
PsichiX Opublikowano 9 Listopada 2017 Udostępnij Opublikowano 9 Listopada 2017 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 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 Więcej opcji udostępniania...
Hawaxi Opublikowano 11 Listopada 2017 Autor Udostępnij Opublikowano 11 Listopada 2017 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 Więcej opcji udostępniania...
Hawaxi Opublikowano 18 Listopada 2017 Autor Udostępnij Opublikowano 18 Listopada 2017 Problem rozwiązany, wystarczyło discardować pixele z alphą <= 0, może nie jest to wydajne rozwiązanie ale działa. if (gl_FragColor.a <= 0.0) { discard; } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
PsichiX Opublikowano 19 Listopada 2017 Udostępnij Opublikowano 19 Listopada 2017 czyli byl bledny blending! Hawaxi 1 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
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ę