비트 블릿

비트 블릿(Bit blit, BITBLT, BIT BLT, BitBLT, Bit BLT, Bit Blt 등으로도 쓰이며, 비트 블록 전송의 약자)은 컴퓨터 그래픽스에서 흔히 사용되는 데이터 연산으로, 여러 개의 비트맵을 불 함수를 사용하여 하나로 결합한다.

이 연산에는 최소 두 개의 비트맵이 관여한다. 하나는 "원본"(또는 "전경")이고 다른 하나는 "대상"(또는 "배경")이며, 세 번째로 종종 "마스크"라고 불리는 비트맵이 있을 수 있다. 결과는 네 번째 비트맵에 기록될 수도 있지만, 종종 대상 비트맵을 대체한다. 각 비트맵의 화소는 프로그램에서 선택 가능한 래스터 연산, 즉 비트 단위 불 논리 공식을 사용하여 결합된다. 가장 명백한 래스터 연산은 대상을 원본으로 덮어쓴다. 다른 연산에는 AND, OR, XOR, NOT 연산이 포함될 수 있다. 코모도어 아미가의 그래픽 칩셋(및 기타 칩셋)은 가능한 256가지의 3-입력 불 함수 중 어느 것이든 사용하여 세 개의 원본 비트맵을 결합할 수 있었다.

현대의 그래픽 소프트웨어는 알파 합성과 같은 효과에 사용되는 더 일반적인 수학적 연산으로 비트 단위 연산을 거의 완전히 대체했다. 이는 컬러 디스플레이에서 비트 단위 연산이 빛이나 잉크의 물리적 결합과 유사한 결과를 생성하지 않기 때문이다. 일부 소프트웨어는 여전히 XOR를 사용하여 대화형 강조 사각형이나 영역 경계를 그린다. 컬러 이미지에 이를 적용할 때, 특이한 결과 색상이 쉽게 눈에 띈다.

 기원 
이 이름은 제록스 알토 컴퓨터의 BitBLT 루틴에서 유래했으며, 비트 경계 블록 전송을 의미한다. 댄 잉걸스, 래리 테슬러, 밥 스프룰, 다이애나 메리는 1975년 11월 제록스 파크에서 스몰토크-72 시스템을 위해 이 연산을 프로그래밍했다. 댄 잉걸스는 나중에 재설계된 버전을 마이크로코드로 구현했다.

다양한 비트 블릿 연산을 위한 빠른 방법의 개발은 컴퓨터 디스플레이가 문자 그래픽 (텍스트 모드)에서 모든 것을 위한 래스터 그래픽스 (비트맵)로 진화하는 데 박차를 가했다. 2차원 그래픽스 성능에 크게 의존하는 기계(비디오 게임 콘솔 등)에는 종종 블리터라고 불리는 특수 목적 회로가 있다.

 마스크드 블릿 구현 예시 
블리팅의 고전적인 사용은 투명한 스프라이트를 배경에 렌더링하는 것이다. 이 예에서는 배경 이미지, 스프라이트, 1비트 마스크가 사용된다. 마스크가 1비트이므로 알파 블렌딩을 통한 부분 투명성은 불가능하다.

마스크의 각 비트를 검사하고 마스크가 설정된 경우에만 스프라이트에서 화소를 복사하는 루프는 정확히 동일한 연산을 모든 화소에 적용할 수 있는 하드웨어보다 훨씬 느릴 것이다. 대신 마스크드 블릿은 AND 및 OR 래스터 연산을 사용하는 두 개의 일반 BitBlit 연산으로 구현할 수 있다.

 배경 이미지 스프라이트(왼쪽) 및 마스크(오른쪽) 파일:Blit back.png 파일:XBlit_dot.png

스프라이트는 이미지 위 다양한 위치에 그려져 다음 결과를 생성한다:

 예상 결과 none

 기법 
스프라이트를 준비할 때 색상이 매우 중요하다. 마스크 화소는 해당 스프라이트 화소가 표시될 곳에서는 0(검정)이고, 배경을 보존해야 하는 곳에서는 1(흰색)이다. 스프라이트는 투명해야 하는 곳에서는 0(검정)이어야 하지만, 검정은 비투명 영역에서도 사용할 수 있다.

첫 번째 블릿에서는 래스터 연산자 AND를 사용하여 마스크가 배경에 블릿된다. 어떤 값이라도 0과 AND하면 0이 되고, 어떤 값이라도 1과 AND하면 변경되지 않으므로 실제 스프라이트가 나타날 곳에는 검정 영역이 생성되고, 나머지 배경은 그대로 남는다.

 첫 번째 블릿 결과 none

두 번째 블릿에서는 래스터 연산자 OR을 사용하여 스프라이트가 새로 변경된 배경에 블릿된다. 어떤 값이라도 0과 OR하면 변경되지 않으므로 배경은 영향을 받지 않고, 검정 영역은 실제 스프라이트 이미지로 채워진다.

 최종 결과 none

흰색 배경과 흑백 반전 마스크를 가진 스프라이트를 사용하여도 동일한 효과를 얻을 수 있다. 이 경우, 마스크는 먼저 OR되고, 스프라이트는 그 다음 AND될 것이다.

 블리팅 vs 하드웨어 스프라이트 

블리팅은 하드웨어 스프라이트 그리기와 유사하다. 둘 다 일반적으로 사각형 영역인 패턴을 화면의 다른 위치에 재현하기 때문이다. 하드웨어 스프라이트는 별도의 메모리에 저장되어 있으므로 주 디스플레이 메모리를 방해하지 않는다는 장점이 있다. 이를 통해 "배경"을 덮으면서 디스플레이 주변으로 이동할 수 있으며 배경에는 영향을 미치지 않는다.

블리팅은 동일한 유형의 패턴을 화면 주변으로 이동시키지만, 디스플레이의 나머지 부분과 동일한 메모리에 기록함으로써 이를 수행한다. 이는 화면에 전경 패턴이 배치될 때마다 그 아래의 배경 화소가 덮어쓰이거나 "손상"된다는 것을 의미한다. 변경된 화소를 복원하기 위해 한 번 블리팅하고, 그 다음 전경 패턴을 새 위치에 배치하기 위해 다시 블리팅하는 것은 소프트웨어의 책임이다. 이를 수행하는 한 가지 방법은 필요한 패턴을 VRAM 오프스크린에 저장하고, 다른 오프스크린 영역을 일종의 스택으로 예약하여 영향을 받는 디스플레이 섹션을 일시적으로 저장하는 것이다. 그래픽 칩이 전용 VRAM을 가지고 있다면 시스템 RAM의 부담을 줄이는 데 유용할 뿐만 아니라 구형 PC 시스템의 대역폭이 제한된 ISA 확장 슬롯의 부담도 줄이는 데 유용하다.

그러나 이를 최적화하는 몇 가지 방법이 있다. 화면의 넓은 영역이 패턴에 의해 차지될 경우, 각 패턴을 개별적으로 지우는 것보다 배경을 화면에 블리팅하는 것이 더 효율적일 수 있다. 한 변형은 화면을 세그먼트로 분할하고 패턴이 그려진 세그먼트만 지우는 것을 포함한다. 이 기법은 더티 사각형이라고 알려져 있다.

 같이 보기 
 알파 합성
 마스크 (컴퓨팅), 여기서 스텐실로 사용됨
 블리터

 각주 

 외부 링크 
 제록스 사내 메모 1975년 11월 19일

분류:컴퓨터 그래픽스 알고리즘