일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- shader programming
- MFC 윈도우 프로그래밍
- window programming
- 그래픽스
- 그래픽스기초
- bezier curve
- Graphics
- 오픈지엘
- 윈도우 프로그래밍
- 컴퓨터 아키텍쳐
- 렌더링
- 윈도우 구조
- shader
- 윈도우프로그래밍
- OpenGL
- Win32 API
- MFC
- Mesh Processing
- 베지에 곡선
- 핵심 API로 배우는 윈도우프로그래밍
- 셰이더
- win32
- denoising
- Geometry Modeling
- modeling
- 컴퓨터 구조
- 운영체제
- 윈도우
- 셰이더프로그래밍
- c4d
Archives
- Today
- Total
오다기리 박의 알고리즘 노트
[셰이더 프로그래밍 입문] 11. 흑백/세피아 사진 만들기 본문
11. 흑백/세피아 사진 만들기
투영공간에서 화면을 꽉 채우는 사각형을 그리기 -> 2D텍스처(렌더타깃)을 씌우기 ->정점셰이더에서 적절한 정점 출력 -> 화면을 차지하는 픽셀마다 픽셀셰이더 호출
포스트프로세싱 : 장면을 2D텍스처에 그린다음 그 위에 영상처리 기법을 입히는 것 -> 쓸데업이 셰이더의 수를 늘리는 것을 막을 수 있다.
화면 가득 픽셀을 그리려면 화면을 가득 채우는 사각형을 그린다.
■ 흑백
tex.rgb=dot(tex.rgb,float3(0.3f,0.59f,0.11f));
■ 세피아
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.rgb,float3(0.272f,0.534f,0.131f));
▶렌더몽키 코드
- 버텍스 셰이더(흑백)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | 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; } | cs |
- 픽셀 셰이더(흑백)
1 2 3 4 5 6 7 8 9 10 11 12 13 | struct PS_INPUT { float2 mUV:TEXCOORD0; }; sampler2D SceneSampler; float4 ps_main(PS_INPUT Input):COLOR { float4 tex=tex2D(SceneSampler,Input.mUV); tex.rgb=dot(tex.rgb,float3(0.3f,0.59f,0.11f)); return tex; } | cs |
- 버텍스 셰이더(세피아)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | 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; } | cs |
- 픽셀 셰이더(세피아)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | 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=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.rgb,float3(0.272f,0.534f,0.131f)); return sepia; } | cs |
- 결과
'컴퓨터 그래픽스 > 쉐이더' 카테고리의 다른 글
[셰이더 프로그래밍 입문] 12. 외곽선 찾기와 양각효과 (0) | 2018.07.01 |
---|---|
[셰이더 프로그래밍 입문] 10. 그림자매핑 (3) | 2018.07.01 |
[셰이더 프로그래밍 입문] 9. UV애니메이션 (0) | 2018.07.01 |
[셰이더 프로그래밍 입문] 8. 환경매핑(반사매핑) (0) | 2018.07.01 |
[셰이더 프로그래밍 입문] 7. 법선매핑 (0) | 2018.07.01 |