Skocz do zawartości

Rekomendowane odpowiedzi

Opublikowano

W jaki sposób uzyskać koloryzacje sprita za pomocą shaderów aby koloryzować ,mocniej im ciemniejszy jest sprite?

Prykład wzięty z metroid zero mission.

tzxk.png

Opublikowano
vec4 col = texture2D( gm_BaseTexture, texCoord );
float gray = dot( col.xyz, vec3( 0.299, 0.587, 0.144 ) );
gl_FragColor = mix( vec4( 0.0, 0.0, 1.0, 1.0 ), vec4( 1.0, 1.0, 1.0, 1.0 ), gray );

Opublikowano

Vertex zostawiasz tak jaki jest, a w fragment wklejasz to co podał Psyś.

 

funkcje od wyświetlania spritu obejmij pomiędzy shader_set(nazwa_shadera); shader_reset(); tak jak to się robi przy surface.

Opublikowano
Vertex zostawiasz tak jaki jest, a w fragment wklejasz to co podał Psyś.

 

funkcje od wyświetlania spritu obejmij pomiędzy shader_set(nazwa_shadera); shader_reset(); tak jak to się robi przy surface.

ERROR:

In Shader shdr_frozen at line 10 : 'texCoord' : undeclared identifier

In Shader shdr_frozen at line 10 : 'texture2D' : no matching overloaded function found

In Shader shdr_frozen at line 10 : '=' : cannot convert from 'const mediump float' to '4-component vector of float'

 

znaczy gdzie mam wkleić? Między klamry w "Fragment"?

GML
//

// Simple passthrough fragment shader

//

varying vec2 v_vTexcoord;

varying vec4 v_vColour;

 

void main()

{

gl_FragColor = v_vColour * texture2D( gm_BaseTexture, v_vTexcoord );

vec4 col = texture2D( gm_BaseTexture, texCoord );

float gray = dot( col.xyz, vec3( 0.299, 0.587, 0.144 ) );

gl_FragColor = mix( vec4( 0.0, 0.0, 1.0, 1.0 ), vec4( 1.0, 1.0, 1.0, 1.0 ), gray );

}

Jak widać krzaczy się. Zupełnie nie mam pojęcia jak załapać. Ale efekty przyciągają uwagę głupiutkiej małpki. :)

Opublikowano

A bo psyś inaczej nazwał zmienne poprostu

GML
varying vec2 v_vTexcoord;

varying vec4 v_vColour;

 

void main()

{

vec4 v_vColour = texture2D( gm_BaseTexture, v_vTexcoord );

float gray = dot( v_vColour.xyz, vec3( 0.299, 0.587, 0.144 ) );

gl_FragColor = mix( vec4( 0.0, 0.0, 1.0, 1.0 ), vec4( 1.0, 1.0, 1.0, 1.0 ), gray );

}

Opublikowano
A bo psyś inaczej nazwał zmienne poprostu

GML
varying vec2 v_vTexcoord;

varying vec4 v_vColour;

 

void main()

{

vec4 v_vColour = texture2D( gm_BaseTexture, v_vTexcoord );

float gray = dot( v_vColour.xyz, vec3( 0.299, 0.587, 0.144 ) );

gl_FragColor = mix( vec4( 0.0, 0.0, 1.0, 1.0 ), vec4( 1.0, 1.0, 1.0, 1.0 ), gray );

}

Jeszcze bardziej się krzaczy. czy musze zainicjować coś w create?

GML
In Shader shdr_frozen at line 14 : 'gm_BaseTexture' : undeclared identifier

In Shader shdr_frozen at line 14 : 'texture2D' : no matching overloaded function found

In Shader shdr_frozen at line 14 : '=' : cannot convert from 'const mediump float' to '4-component vector of float'

In Shader shdr_frozen at line 16 : 'gl_FragColor' : undeclared identifier

In Shader shdr_frozen at line 16 : 'assign' : cannot convert from '4-component vector of float' to 'float'

Opublikowano
gm_BaseTexture nie podświetla ci się na czerwono? Bo to jest stała z GMa.

podświetla się; owszem

[EDIT]

O matko. Głupi ja wsadziłem to do Vertexa a nie do Fragmentu.

screen.png

Ale teraz jak pozbyć sie tła?

Opublikowano

faktycznie, zapomniałem o alfie. wrzuć to do fragment shadera:

varying vec2 v_vTexcoord;

void main()
{
vec4 col = texture2D( gm_BaseTexture, v_vTexcoord ); // pobieramy kolor pixela z tekstury.
float gray = dot( col.xyz, vec3( 0.299, 0.587, 0.144 ) ); // ta operacja wykonuje szybka transformacje koloru w skale szarosci.
gl_FragColor = vec4( mix( vec3( 0.0, 0.0, 1.0 ), vec3( 1.0, 1.0, 1.0 ), vec3( gray ) ), col.a );
}

 

a jak chcesz specjalnie dla Ciebie zajefajny efekt animowanego stopniowego zamrazania, wyslij mi grafike na PW - dam CI efekt i pokaze Ci jak kolejne grafiki przygotowywac zeby i one wspoldzialaly z efektem :)

Opublikowano
faktycznie, zapomniałem o alfie. wrzuć to do fragment shadera:

varying vec2 v_vTexcoord;

void main()
{
vec4 col = texture2D( gm_BaseTexture, v_vTexcoord ); // pobieramy kolor pixela z tekstury.
float gray = dot( col.xyz, vec3( 0.299, 0.587, 0.144 ) ); // ta operacja wykonuje szybka transformacje koloru w skale szarosci.
gl_FragColor = vec4( mix( vec3( 0.0, 0.0, 1.0 ), vec3( 1.0, 1.0, 1.0 ), vec3( gray ) ), col.a );
}

 

a jak chcesz specjalnie dla Ciebie zajefajny efekt animowanego stopniowego zamrazania, wyslij mi grafike na PW - dam CI efekt i pokaze Ci jak kolejne grafiki przygotowywac zeby i one wspoldzialaly z efektem :)

grałeś kiedyś w metroida? ice beam mrozi od razu.

[edit]

mogę to łączyć ze zmianą blendingu?

Opublikowano

nie to nie, ale example i tak robie, bo fajny motyw na efekt podsunales :)

Opublikowano

to zrób i daj do forumowej biblioteki shaderów, ludzie na pewno skorzystają.

[EDIT]

Efekt jest wspaniały!

Oh nie mogę się doczekać. Jeszcze tylko dorzucić spadające particle ze sprita... cud miód i maliny.

nie to nie, ale example i tak robie, bo fajny motyw na efekt podsunales :)

można to przerobić aby można było blendować sprita względem nasycenia.

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ę...