티스토리 뷰
쉐이더
3차원 오브젝트를 화면에 그리기 위해 광원, 재질 등을 적절히 연산하여 주는 함수
쉐이딩 셰이딩
위의 함수를이용하여 처리해주는과정
쉐이더 프로그래밍
우리가 Direct3D 에게 맡겨놓았던 고정된 기능들
ex ) D3DDevice->SetRenderState()
D3DDevice->SetTransform( )
을 대신 처리하는 함수들을 작성하고 이를통해 출력할 수 있도록 해주는
직접작성한 쉐이더를 적용하는것은
직접 렌더링 파이프라인을 제어하는것이고
기존 direct3d가 계산해내던 고정 기능대신
훨씬더 드라마틱한 렌더링을 위한 다양한 테크닉들을 마음대로 적용할 수 있다는것을 뜻한다.
HLSL (High Level Shading Language)
고수준 셰이딩 언어
direct3d의 고정된 기능들을 대신 처리하기 위해 셰이더를 작성한다는것은
direct3d 내부적으로 했던 계산을 대신할 함수들을 작성한다는것이고
이 때 사용할 수 있는 언어가 바로 HLSL이다.
directx 8.x 까지는 어셈블리 프로그래밍 방식을 이용했기 때문에 알고리즘을 구현하는것보다 디버깅하는데에 더 많은 시간을 쏟았다. 직접 셰이더를 작성하는데에 많은 어려움이 있었던 것이다.
그 대책이 바로 HLSL 이다.
저수준 언어인 쉐이더 명령어를 훨씬 알아보기 쉽고 이해하기 쉽게, 그리고코드를 관리하거나 확장하기 훨씬 쉽게 해주는 언어.
게다가 컴파일러가 종종 프로그래머가 작성한 어셈블리 코드보다 훨씬 효율적인 코드를 만들어낸다고 하니 이것은 일석 몇조인가...
여튼 쉐이더를 작성하기 위해 HLSL을 이용하는 것은 여러모로 유용하다.
버텍스 쉐이더
그래픽 카드의 GPU에서 실행되는 프로그램이다. (하드웨어에서 버텍스 셰이더를 지원하지 못하면 Direct3D 런타임에서 소프트웨어로 애뮬레이트)
변환, 조명단계에 대한 계산을 직접하는 -
픽셀 쉐이더
폴리곤내의 픽셀 하나하나를 직접 다루기 위한 계산하는 -
무엇을 할 수 있나
반사/ 굴절을 마음대로 다루거나, 그림자를 만들어내거나, 만화같은 렌더효과를 만들어내거나 하는 등의 다양한 응용이 가능하다.
이들을 다루기 전에 알아야 할 것은
정점셰이더는 존재하는 정점의 수만큼 연산을 하며
픽셀쉐이더는 존재하는 폴리곤이 가지는 픽셀의 수만큼 연산을 해야 한다는것이다.
또한 이들 셰이더는 프로그래밍 가능한 크기에 제한이 있으며 사용가능한 메모리 공간에도 제한이 있다.
따라서 쉐이더는 반드시 효율적으로 작성되어야 한다는것
오늘의 키포인트
http://3dapi.com/bs26_shader2/
http://kblog.popekim.com/2011/11/01-part-1.html
'ComComComCom > Shader HLSL' 카테고리의 다른 글
HLSL로 작성하는 쉐이더 1. 작성형태, 2. 로드하기 (0) | 2017.08.15 |
---|