일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 컴퓨터 구조
- 셰이더프로그래밍
- denoising
- Win32 API
- 윈도우
- MFC 윈도우 프로그래밍
- shader
- MFC
- 컴퓨터 아키텍쳐
- c4d
- Mesh Processing
- Graphics
- 베지에 곡선
- Geometry Modeling
- 윈도우 구조
- 핵심 API로 배우는 윈도우프로그래밍
- 윈도우 프로그래밍
- 셰이더
- 윈도우프로그래밍
- 오픈지엘
- modeling
- bezier curve
- 그래픽스기초
- 운영체제
- 렌더링
- 그래픽스
- win32
- window programming
- OpenGL
- shader programming
- Today
- Total
목록shader (14)
오다기리 박의 알고리즘 노트
메쉬의 재질(material)에 셰이더(shader)를 붙여서 표현해보았다. OpenGL에서는 기본적으로 삼각형 안에서 세 점의 조명색상을 보간하는 방식인 Gouraud 셰이딩을 사용하기 때문에 메쉬의 렌더링 퀄리티가 높지 않다. 영상에서는 GLSL을 사용하여 퐁(Phong) 셰이딩, 툰(Toon) 셰이딩, 환경 매핑(Environment mapping)등을 사용한다. 특히 퐁셰이딩은 삼각형 안에서 세 점의 법선을 보간하기 때문에 Specular 효과를 확실하게 표현할 수 있다. [개발 환경] C++ / OpenGL / Visual Studio
12. 외곽선 찾기와 양각효과sqrt() : 제곱근 구하기명암이 확 바뀌는 곳이 외곽선이다.주변의 픽셀이 가지는 값과 현재 픽셀의 값이 어느 정도 이상 차이가 나므로 이 픽셀 값들을 가지고 기본적인 연산을 한 뒤, 그 결과에 따라 외곽선인지 아닌지를 판단한다.컨벌루션 : 현재 픽셀을 중심으로 해서 그 주위에 있는 픽셀마다 가중치를 곱한 뒤, 그 결과를 모두 더한 값으로 현재 픽셀의 값을 변경하는 연산.외곽선 찾기에 사용하는 커널 : 소벨 연산자 ▶렌더몽키 코드 - 버텍스 셰이더(외곽선 검출)1234567891011121314151617181920212223struct VS_INPUT { float4 mPosition: POSITION; float2 mUV : TEXCOORD0;}; struct VS_OU..
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,f..
10. 그림자매핑그림자 생성단계:렌더링 결과(빛을 가로막는 첫 번째 물체의 깊이)를 저장할 렌더타깃을 정해준다.카메라를 광원의 위치에 두고 물체들을 그린다.픽셀셰이더에서 빛으로부터 현재 픽셀까지의 깊이를 반환한다.그림자 적용단계:렌더링 결과(일반 장면 렌더링)를 화면(백버퍼)에 저장한다.카메라를 눈의 위치에 두고 물체들을 그린다.빛으로부터 현재 픽셀까지의 깊이를 그림자맵에 담겨있는 결과와 비교한다. (현재깊이>그림자맵의깊이) 라면 그림자를 씌운다. ■ 그림자매핑에서 발전한 고급 기법캐스케이드 그림자맵 : 그림자매핑의 해상도 문제점을 해결하기 위하여 영역별로 여러 개의 그림자맵을 만드는 기법.퍼센티지 클로저 필터링 : 그림자의 외곽선을 부드럽게 필터링 해주기 위해 사용.배리언스 그림자맵 : 하드웨어 텍스처..
9. UV애니메이션 시간이 흐름에 따라 U좌표에 더해주는 값을 서서히 증가시키거나 빼주면 텍스처 흐름효과를 낼 수 있다. (정점셰이더역할)정점위치에 Y값을 적당히 증감해주면 울렁효과를 낼 수 있다. (정점셰이더 역할) ■ 기타 고급 정점셰이더 기법스키닝 : CPU에서 스키닝처럼, 정점솅더에서도 동일하게 할 수 있음. BLENDWEIGHT와 BLENDINDICES 시맨틱 이용하면 정점데이터에서 스키닝 정보를 가져올 수 있음. 이제 최종 애니메이션 행렬들을 저역변수로 건네 받으면 CPU에서 하는 스키닝과 다를게 없다. 전역변수를 이용하지 않고 최종 애니메이션 행렬들을 텍스처로 저장한 뒤에 정점셰이더에서 텍스처 샘플링을 하는 경우도 있음(그래픽 카드가 정점텍스처를 지원해 줘야만한다. D3DUSAGE_QUERY..
8. 환경매핑(반사매핑)texCUBE() : 입방체 텍스처를 샘플링하는 함수 ■ 환경매핑 주위에 있는 물체가 반사한 빛이 거울 같은 표면에 정반사되는 것 ▶렌더몽키 코드 - 버텍스 셰이더12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152float4x4 gWorldViewProjectionMatrix;float4x4 gWorldMatrix; float4 gWorldLightPosition;float4 gWorldCameraPosition; struct VS_INPUT{ float4 mPosition:POSITION; float3 mNormal:NORMAL; float3 mBinormal:..
7. 법선매핑TANGENT : 정점에서 접선정보를 불러올 때 사용하는 시맨틱BINORMAL : 정점에서 종법선정보를 불러올 때 사용하는 시맨틱transpose() : 전치행렬을 구하는 함수접선공간 : 법선맵 안에 저장된 법선이 존재하는 공간평면 위에서 울퉁불퉁한 표면의 법선을 사용한 결과 표면 위에서 법선이 어떻게 정의되어 있는냐에 따라서 조명효과를 결정하기 위해 각 텍셀에 법선을 저장한다 ■ 법선맵법선맵(normal map) : 각 픽셀에 사용할 법선정보를 담고 있는 텍스쳐(접선공간으로 저장)법선매핑(normal mapping) : 법선맵을 이용해서 조명을 계산하는 기법법선맵 RGB = 법선벡터 XYZ x 0.5 + 0.5법선벡터 XYZ = 법선맵 RGB x 2 -1 ■ 접선공간(tangent spac..
6. 툰셰이더ceil() : 올림함수행렬 합치기 : 여러 개의 행렬을 미리 곱해 놓은 뒤, 그 결과를 정점변환에사용해도 결과는 동일하고 속도는 더 빠름역행렬 : 반대방향으로 공간변환시 사용 난반사광의 양툰셰이더 값000~0.20.20.2~0.40.40.4~0.60.60.6~0.80.80.8~11 ▶렌더몽키 코드 - 버텍스 셰이더12345678910111213141516171819202122232425262728293031float4x4 gWorldViewProjectionMatrix;float4x4 gInvWorldMatrix; float4 gWorldLightPosition; struct VS_INPUT { float4 mPosition : POSITION; float3 mNormal: NORMAL; ..