영상처리 기법 흑백/세피아 사진 만들기
정점 셰이더
struct VS_INPUT{
float4 mPosition : POSITION;
float2 mUV : TEXCOORD0;
};
struct VS_OUTPUT{
float4 mPosition : POSITION;
float2 mUV : TEXCOORD0;
};
VS_OUTPUT vs_main (VS_INPUT Input){
VS_OUTPUT Output;
Output.mPosition = Input.mPosition;
Output.mUV = Input.mUV;
return Output;
}
//처음부터 투영좌표에 메쉬가 생성되어있기 때문에 정점좌표와 uv만 입출력한다.
//책 참고~
픽셀 셰이더
struct PS_INPUT{
float2 mUV : TEXCOORD0;
};
sampler2D SceneSampler;
float4 ps_main(PS_INPUT Input) : COLOR{
float4 tex = tex2D(SceneSampler, Input.mUV);
return tex;
}
//랜더첵스쳐된 SceneSampler 텍스쳐를 입혀준다.
흑백 만들기 /픽셀 셰이더
struct PS_INPUT{
float2 mUV : TEXCOORD0;
};
sampler2D SceneSampler;
float4 ps_main(PS_INPUT Input) : COLOR{
float4 tex = tex2D(SceneSampler, Input.mUV);
// tex.rgb = (tex.r + tex.g + tex.b ) /3;
// tex.rgb = tex.r * 0.3 + tex.g * 0.59 + tex.g * 0.11;
tex.rgb = dot(tex.rgb, float3(0.3,0.59,0.11));
return tex;
}
//흑백으로만들어주는 공식에따라 구현
//dot 공식으로 변경하면 더 빠르다고 함.
세피아 만들기/픽셀 셰이더
struct PS_INPUT{
float2 mUV : TEXCOORD0;
};
sampler2D SceneSampler;
float4 ps_main(PS_INPUT Input) : COLOR{
float4 tex = tex2D(SceneSampler, Input.mUV);
float4 sepia;
// sepia.a = tex.a;
// sepia.r = tex.r * 0.393f + tex.g * 0.769f + tex.b * 0.189f;
// sepia.g = tex.g * 0.349f + tex.g * 0.686f + tex.b * 0.168f;
// sepia.b = tex.b * 0.272f + tex.g * 0.534f + tex.b * 0.131f;
sepia.a = tex.a;
sepia.r = dot(tex.rgb, float3(0.393f,0.769f,0.189f));
sepia.g = dot(tex.rgb, float3(0.349f,0.686f,0.168f));
sepia.b = dot(tex.rbb, float3(0.272f,0.534f,0.131f));
return sepia;
}
//마이크로소프트(?)가 권한 세피아 색만들기 공식으로 구현
//dot공식으로 변경해주면 더 빠르다고함.
...다음은...외곽선 찾기와 양각효과.....면 이책도 끝이군.... 그다음엔 자주 사용하는 공삭들 정리해놔야겠네....이론이 부족하니 깊이가 없어;;
'Unity공부 > HLSL Shader 공부' 카테고리의 다른 글
셰이더 프로그래밍 입문-11(마지막단원) (1) | 2012.12.12 |
---|---|
셰이더 프로그래밍 입문-9 (0) | 2012.12.04 |
셰이더 프로그래밍 입문-8 (0) | 2012.12.03 |
셰이더 프로그래밍 입문-7 (0) | 2012.11.27 |
셰이더 프로그래밍 입문-6 (0) | 2012.11.21 |