스텐실 버퍼 란?
컴퓨터 그래픽스 프로그래밍에서 스텐실 버퍼는 다른 그래픽 버퍼와 관련하여 그려지고 사용될 수있는 메모리 영역으로, 다른 효과를 얻거나 장면의 영역을 마스크 처리하여 처리 또는 렌더링되지 않습니다. 스텐실 버퍼는 흑백 이미지와 유사한 픽셀 당 버퍼로, 버퍼의 각 위치는 최대 1 바이트 길이이지만 1 비트만큼 작은 값을 보유 할 수 있습니다. 버퍼는 원래 실제 스텐실과 매우 유사하게 실제 마스크 또는 거짓 마스크로 작동하도록 설계되었으므로 스텐실 버퍼의 다른 영역 값을 0 이외의 값으로 설정하면 장면의 영역이 가려 지거나 무시 될 수 있습니다. 쉐도우 볼륨 그리기, 객체 주위에 후광 구현 또는 객체가 서로 겹치는 영역 찾기 등 간단한 마스킹 이외의 버퍼 사용에는 여러 가지가 있습니다. 대부분의 경우 버퍼는 그래픽 카드의 그래픽 메모리에 유지되므로 렌더링 중에 빠르게 액세스 할 수 있습니다.
스텐실 버퍼의 개념은 원래 정점이 그래픽 파이프 라인을 통해 이동함에 따라 3D 장면에 적용 할 수있는 2D 마스크를 만드는 방법이었습니다. 0으로 설정되지 않은 스텐실 버퍼의 영역과 관련하여 3D 정점의 위치가 래스터 화되면 해당 정점을 무시하고 나머지 파이프 라인 처리를 건너 뛸 수 있습니다. 이를 통해 프로그래머는 장면의 작은 부분 만 렌더링하거나 더 큰 장면 내에서 작은 거울의 반사와 같이 불규칙한 모양의 뷰포트로 이미지를 렌더링 할 수있었습니다. 여기서 거울의 모양은 버퍼, 그리고 반사는 그 모양을 통해 그려집니다.
메모리 문제로 인해 스텐실 버퍼의 원래 형태는 버퍼의 각 픽셀이 참 또는 거짓 일 수있는 단일 비트 값의 그리드입니다. 그래픽 카드가 개발됨에 따라 대부분의 버퍼는 각 픽셀 위치에서 전체 바이트 값을 보유 할 수있게되어 프로그래머는 위치에서 더 복잡한 값을 가질 수 있습니다. 이를 통해 버퍼를 사용하여 객체가 겹치는 영역을 감지 할 수 있습니다. 이는 래스터 화 될 때 객체가 화면에서 해당 픽셀을 차지하는 위치에서 버퍼 값을 증가시켜 수행 할 수 있습니다. 이 작업 후에 버퍼의 각 픽셀 위치 값은 화면에서 해당 픽셀과 교차하는 객체의 수와 같습니다.
스텐실 버퍼의 가장 보편적 인 용도 중 하나는 볼륨 그림자를 만드는 것입니다. 조명이 매우 희미한 장면을 먼저 렌더링하면 모든 것이 어둡게 보일 수 있습니다. 다음으로, 광원에 의해 조명되는 장면에서 모든 다각형 표면의 위치를 결정하기 위해 계산이 이루어지고, 이러한 형상은 스텐실 버퍼로 전달된다. 모든 오브젝트가 완전히 조명 된 것처럼 씬이 다시 렌더링되고 스텐실 셰이프를 통해 그림자 장면에 블렌딩되어 그림자가있는 오브젝트를 포함하는 것으로 보이는 이미지를 효과적으로 만듭니다.