Last active
October 26, 2017 03:35
-
-
Save Creta5164/e5d3e83f0c2afb08295965a0a4498e69 to your computer and use it in GitHub Desktop.
MSDF_shader_for_GameMakerStudio.fsh
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//전처리 지시를 해야 합니다, | |
#ifdef GL_OES_standard_derivatives | |
#extension GL_OES_standard_derivatives : enable | |
// code that requires the extension | |
#else | |
// alternative code | |
#endif | |
varying vec2 v_vTexcoord; | |
varying vec4 v_vColour; | |
uniform float pxRange; //최적의 값은 5입니다, 음수값으로 설정하면 배경색과 전경색을 반전시킬 수 있습니다. | |
uniform vec4 bgColor, fgColor; //배경 색과 전경 색입니다, r g b a순으로 지정하시면 됩니다. | |
uniform vec2 textureDem; //게임메이커 스튜디오가 textureSize 함수를 지원하지 않으므로, 직접 수동으로 텍스쳐 크기를 입력해야합니다. | |
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ IMPORTANT!! @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ | |
//텍스쳐 필터 모드로 색상 보간을 활성화해야합니다. | |
//운영체제 플랫폼 설정에서 Interpolate colours between pixels를 꼭 활성화 해야 함. | |
//안 그러면 보간 꼼수를 사용하는 이 셰이더는 픽셀화로 보여주게 됩니다. 꼭 진짜 안하면 벡터처럼 보이지 않음. | |
float median(float r, float g, float b) { | |
return max(min(r, g), min(max(r, g), b)); | |
} | |
void main() | |
{ | |
vec2 msdfUnit = pxRange/textureDem; //textureSize 함수를 지원하지 않습니다. | |
//uniform으로 직접 입력해야 함. | |
//으어어ㅓ어 | |
vec3 t = (v_vColour * texture2D(gm_BaseTexture, v_vTexcoord)).rgb; | |
float sigDist = median(t.r, t.g, t.b) - 0.5; | |
sigDist *= dot(msdfUnit, 0.5 / fwidth(v_vTexcoord)); | |
float opacity = clamp(sigDist + 0.5, 0.0, 1.0); | |
gl_FragColor = mix(bgColor, fgColor, opacity); | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment