※ 아래의 내용들은 DirectX 11을 이용한 3D 게임 프로그래밍 입문 책의 내용을 바탕으로 작성된 것입니다.
Direct3D
- 색상 연산
- 벡터의 덧셈, 뺄셈, 스칼라 곱셈은 색상 연산에도 적용된다
- 내적이나 외적 같은 연산은 색상 벡터에 무의미하다.
- 변조(modulation) : 색상 벡터만의 연산으로 성분별 곱셈을 의미한다.
ex : (a,b,c)ⓧ(x,y,z) = (ax, by, cz)
- 변조는 주로 조명 공식에 사용된다.(예시는 책 166p)
- 색상 성분은 [0,1] 범위로 표시되며 색상 연산 중에는 해당 범위 밖으로 값이 벗어날 수도 있다.
=> 한정(clamping) 연산을 통해 0보다 작은 값은 0으로 1보다 큰 값은 1로 적용한다.
- 128비트 색상
- r,g,b 외에도 알파(a)라는 색상 성분 하나를 색상 벡터에 추가하는 경우가 많다
=> 알파 성분은 주로 색상의 불투명도를 나타낸다
- 하나의 색상을 r,g,b,a인 4차원 벡터로 표현한다는 뜻이다.
- 각 성분을 32비트 부동소수점 값으로 표현함으로써 하나의 색상을 총 128비트로 표현한다.
- 코드에서는 XMVECTOR 형식을 이용하여 색상을 표현한다.
=> XNA Math 라이브러리의 벡터 함수들로 색상 연산을 수행함으로써 SIMD의 이점을 취할 수 있다.
- 32비트 색상
- 각 성분당 1바이트를 할당해서 하나의 색상을 32비트로 표현할 수도 있다.
=> 성분당 8비트이므로 한 성분에 대해 총 256가지의 세기를 표현할 수 있다.
- 정수 구간 [0,255]를 실수 값 구간 [0,1]로 사상함으로써 32비트 색상을 128비트로 변환하는 것이 가능하다
=> 32비트 -> 128 비트 : 255로 나누기
=> 128비트 -> 32 비트 : 255를 곱하고 가장 가까운 정수로 변환
- 일반적으로 32비트 색상은 네 개의 8비트 색상 성분을 하나의 32비트 정수 값에 채워넣은 형태이다
=> 32비트 색상 -> 128비트 색상 변환에는 추가적인 비트 연산이 필요하다
=> XNA Math 라이브러리는 해당 처리를 도와주는 함수가 있다.
=> XNA Math 라이브러리는 또한 128비트 색상 -> 32비트 색상 처리를 도와주는 함수도 제공한다.
- 일반적으로 128비트 색상은 다수의 색상 연산들이 진행되는 곳에 쓰인다
ex: 픽셀 셰이더
- 128비트 색상은 정밀도를 위한 비트가 많으므로 산술 오차가 과도하게 누적되는 일이 없다.
- 최종적인 픽셀 색상은 일반적으로 후면 버퍼에 32비트 색상으로 저장된다.
- GPU에서 CPU 메모리로의 자료 복사는 느린 연산이므로 꼭 필요한 경우가 아니라면 피해야 한다.
- 최대 속도를 위한 최선의 방법은 모든 자원을 생성해서 GPU에 올린 후 GPU 메모리에 유지하고 GPU만이 그것을 읽고 쓰는 식으로 그래픽 하드웨어가 작동하게 만드는 것이다.
틀린 부분이나 이상한 부분이 있으면 댓글로 편하게 지적해주세요.
감사합니다!
'DirectX11 > 정보정리' 카테고리의 다른 글
[DirectX11] 렌더링 파이프라인(2) (0) | 2022.11.05 |
---|---|
[DirectX11] 렌더링 파이프라인(1) (0) | 2022.11.03 |
[DirectX11] DirectX3D 초기화(2) (0) | 2022.10.28 |
[DirectX11] DirectX3D 초기화(1) (0) | 2022.10.26 |
[DirectX11] 행렬과 변환 (0) | 2022.10.25 |
댓글