렌더링 파이프 라인 : 3차원의 장면을 2차원 이미지로 변환하는 모든 단계
3차원 환상
- 원근법 : 멀리 있는 물체는 작아지고 가까이 있는 물체는 크게 보인다.
- 조명 및 음영 : 3차원 물체에 입체적인 모양 및 부피감 묘사
- 그림자 : 광원 위치, 지면에 얼마나 떠있나 들을 알려 준다
컴퓨터의 색상의 기본 개념
색상 연산
색상 : RGB이며 세기는 0 ≤ R, G, B ≤ 1이며
두 색의 합 및 빼기 등으로 색 데이터 수정이 가능
$$ (0,0.5,0) + (0, 0, 0.25) = (0.0, 0.5,0.25)\\(1,1,1)-(1,1,0) = (0,0,1) $$
내적 외적은 큰 상관이 없다 대신, 변조 즉 성분별 곱셉이 중요하다.
ex) 입사 광선 (r, g, b)
적생광 50 녹색광 75 청색광 25를 반사하고 나머지는 흡수
$$ (r, g, b) * (0.5,0.75,0.25)=(0.5r, 0.75g, 0.25b) $$
물체의 색깔 : (0.5r, 0.75g, 0.25b)로 표현할 수 있다
.
색상 값은 0~1에서 벗어날 수 없게 한정(Clamping)을 한다
음수, 1 이상의 세기를 표현할 수 없기 때문에 색을 한정
32비트 색상 구조체
//[32] aaaaaaaa rrrrrrrr gggggggg bbbbbbbb
struct XMCOLOR
{
union
{
struct
{
uint8_t b; // Blue: 0/255 to 255/255
uint8_t g; // Green: 0/255 to 255/255
uint8_t r; // Red: 0/255 to 255/255
uint8_t a; // Alpha: 0/255 to 255/255
};
uint32_t c;
};
}
$$ 2^8 = 256개 \\ 1111 1111 = 255 $$
1바이트 할당 한 성분 당 256가지의 색 표현 가능( 정수 범위 : 0 ~ 255)
$$ 32 bit -> 128 bit\\(80,140,200,255)->(80/255, 140/255,200/255,255/255)\\=(0.31,0.55,0.78,1.0) $$
$$ 128bit->32bit\\(0.3,0.6,0.9,1.0)->(0.3255,0.6255,0.9255,1.0255)\\=(77,153,230,255) $$
컴퓨터에서는 32Bit → 128Bit 변환하려면 비트 연산이 필요하다
ARGB 형태에서 성분 데이터를 변환할 때 주의 해야 한다.
//XMCOLOR -> XMVECTOR , 32bit -> 128bit , 정수 -> 실수
XMVECTOR XM_CALLCONV PackedVector::XMLOADColor(const XMCOLOR* pSource);
//XMVECTOR -> XMCOLOR, 128bit -> 32bit, 실수-> 정수
void XM_CALLOCNV PackedVector::XMStoreColor(XMCOLOR* pDestination, FXMVECTOR V);
최종 적인 픽셀 값을 32비트를 사용 하며, 아직 모니터에서 고해상도의 장점을 취합하지 못한다.
128비트는 더 정밀도가 높은 색상 연산이 필요한 곳에서 사용한다,
색상은 유효 자릿수가 많아서 산술 정밀도가 높다.
참고 및 내용 인용
프랭크 D 루나 지음, 류광 옮김
한빛 미디어
Directx 12를 이용한 3D 게임 프로그래밍 입문(2017)
'Directx12 3D 프로그래밍 입문 > 5. 렌더링 파이프 라인' 카테고리의 다른 글
5.14 1 ~ 8번 연습문제 (1) | 2024.02.08 |
---|---|
5.11 렌더링 파이프 라인 요약 (1) | 2024.02.08 |
5.10 래스터화, 뷰포트, 후면 선별 (0) | 2024.02.08 |
5.7 테셀레이션, 기하 셰이더, 절단 (0) | 2024.02.08 |
5.1 렌더링 파이프 라인의 개요 (1) | 2023.11.13 |