본문 바로가기
Directx12 3D 프로그래밍 입문/5. 렌더링 파이프 라인

5. 렌더링 파이프 라인

by ftftgop3 2023. 11. 12.

렌더링 파이프 라인 : 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)