신입 개발자 공부 과정

Shader 셰이더 rendermonkey로 연습하기 본문

카테고리 없음

Shader 셰이더 rendermonkey로 연습하기

Lewisjkim 2023. 4. 28. 03:57

DirectX로 게임을 만들면서 특히 부족함을 느꼈던 부분이 셰이더였습니다.

그래서 이번 계기로 셰이더 프로그래밍 입문이라는 책을 보면서 연습하게 되었습니다.

rendermonkey라는 프로그램을 사용했고 사용하는 방법은 VisualStudio상에서 shader코드를 짜는 것과는 달랐지만 바로바로 셰이더를 확인할 수 있다는 점이 엄청난 메리트였습니다.

아직 TexMapping 단계까지 해보았지만 끝까지 해보면 게임개발시에 다양한 셰이더를 편하게 만들 수 있을 것 같습니다.


공부하면서 기억해둬야 할 키워드과 내용
  • 정점셰이더 - 정점 위치를 화면 좌표로 변환
  • 픽셀셰이더 - 정점 위치를 3개씩 묶어 최소단위인 픽셀단위를 호출한다
  • 물체 공간 = 지역공간 = 원점으로부터 각 정점까지의 거리
  • 월드 공간 = 세계공간 = 여러 오브젝트를 통일적으로 처리하고싶을 때 새로운 공간으로 만든 공간
  • 뷰 공간 = 카메라가 사용하는 공간 = 월드공간에있는 obj를 카메라 공간으로 이동/회전/확대/축소하는 단계
  • 투영 공간 = 뷰 공간을 2D 이미지 위에 투영
  • 텍스쳐매핑 = 텍스쳐를 입히는 것
  • uv 좌표계 = 3차원 공간의 폴리곤에 텍스쳐를 입히기 위한 기준이 되는 2차원 좌표계 0~1로 구성되어있음
  • texture sampler = 텍스처에서 텍셀을 구해올 때 사용하는 샘플러 데이터형
  • 텍셀(texel)은 텍스처에서의 화소
  • tex2D() - 텍스처 샘플링에 사용하는 HLSL 함수 , ex) tex2D(sampler객체,uv좌표)를 넣어주 좌표에 있는 텍셀을 읽어 온
  • 스위즐(swizzle) - 벡터 성분의 순서를 마음대로 뒤섞을 수 있는 방법
  • NORMAL = 정점의 법선정보를 불러올 때 사용하는 시멘틱
  • normalize() = 벡터 정규화 함수
  • dot() = 내적 함수
  • saturate() = 0~1을 넘어서는 값의 범위를 짤라 냄
  • reflect() = 벡터반사 함수
  • pow() = 거듭제곱 함수
  • 내적 = cos함수를 빠르게 계산할 때 사용할 수 있음
  • 정규화 = 벡터를 단위벡터(방향)로 만듬
  • 난방사광(diffuse light) = 빛이 물체의 표면을 비출 때 여러 방향으로 고르게 반사되는 빛

  • 셰이더에서는 색상(RGB)을 표현할 때 백분율로 표현한다.
  • vertex shader에서 pixel shader로 uv좌표를 넘겨준다
  • 간접광을 계산하는 방법 중 광선추적이라는 기법이 있다