이와 같은 목적을 달성하기 위하여, 본 발명의 한 특징에 의한 보간되지 않은 볼륨 데이터의 실시간 렌더링 방법은, 3차원적 위치의 함수로서 표현되는 소정의 특성을 가지는 입체적 구조물의 미리 저장된 각각의 단면상에서의 정보의 집합으로 구성된 일련의 볼륨 데이터로부터 블록 단위 최대-최소 테이블을 생성하여 저장하는 제1 단계, 사용자에게 불투명도 전이함수를 지정하도록 하여 그에 따른 누적영역 테이블을 생성하는 제2 단계, 사용자에게 시각 파라미터를 지정하도록 하여, 상기 제1 단계에서 생성된 블록 단위 최대-최소 테이블의 값을 상기 제2 단계에서 형성된 누적영역 테이블과 비교하여 각 블록의 투명 또는 비투명 여부를 판단하며, 이를 기초로 블록단위 런길이 인코딩을 수행하는 제3 단계 및 수정된 쉬어-왑 분해 기법에 의해 볼륨 렌더링을 수행하는 제4 단계를 포함한다.
바람직하게는, 상기 보간되지 않은 볼륨 데이터의 실시간 렌더링 방법의 상기 제1 단계는, 미리 정해진 크기를 가지며, 동일한 블록에 대해서 수 개의 레벨로 세분된 구조를 갖는 몇 개의 블록으로 전체 볼륨을 구분하는 제1-1 단계, 상기 제1-1 단계에서 구분된 상기 레벨에 따른 각 블록을 단위로 하여 그에 소속된 복셀 데이터의 최대값 및 최소값을 투영과정을 통해 구하여 최대-최소 버퍼에 임시 저장하는 는 제1-2 단계 및 상기 제1-2 단계에서 구하여진 최대값 및 최소값을 각 블록단위 최대-최소 테이블에 저장하는 제1-3 단계를 포함하는 것을 특징으로 한다.
바람직하게는, 상기 보간되지 않은 볼륨 데이터의 실시간 렌더링 방법의 상기 제1-1 단계는, 캐쉬 메모리를 활용하여 처리과정을 가속화하기 위하여, 캐쉬 메모리의 용량이하의 데이터 크기를 가지도록 블록의 크기를 결정하는 것을 특징으로 한다.
바람직하게는, 상기 보간되지 않은 볼륨 데이터의 실시간 렌더링 방법의 상기 제1-2 단계는, MMX 기능을 활용하여 상기 투영과정을 가속화하기 위하여, 상기 복셀과 상기 최대-최소 버퍼가 각각 물리적으로 연속한 메모리 영역에 위치하며, 상기 투영의 방향과 물리적인 메모리 영역의 방향은 서로 수직이며, 상기 각 복셀의 크기가 1, 2, 4, 8 바이트 중 하나가 되며, 상기 복셀의 데이터 형태는 정수형(interger type)이며, 상기 복셀의 데이터 배열과 상기 최대-최소 버퍼는 8바이트 단위로 처리되는데 문제가 없도록 상기 블록의 복셀 데이터를 재배열하는 단계를 포함하는 것을 특징으로 한다.
바람직하게는, 상기 보간되지 않은 볼륨 데이터의 실시간 렌더링 방법의 상기 제3 단계는, 사용자에게 시각 파라미터를 지정하도록 하여 주시각 축을 결정하는 제3-1 단계, 상기 제3-1 단계에서 결정된 주시각 축에 부합하고, 상기 제1 단계에서 생성된 블록 단위 최대-최소 테이블의 값을 상기 제2 단계에서 형성된 누적영역 테이블과 비교하여, 각 블록의 투명 또는 비투명 여부를 판단하는 제3-2 단계 및 상기 제3-2 단계에서 판단된 각 블록의 투명 또는 비투명 정보를 기초로 블록단위 런길이 인코딩을 수행하여 블록단위 런길이 배열을 생성하는 제3-3 단계를 포함하는 것을 특징으로 한다.
바람직하게는, 상기 보간되지 않은 볼륨 데이터의 실시간 렌더링 방법의 상기 제3-3 단계에서 생성된 블록단위 런길이 배열을 기초로 하여, 상기 사용자에 의해 지정된 시각 파라미터 상에서 보이는 비투명한 블록에 대해서만 복셀 단위로 투명 또는 비투명 여부를 판단하여 복셀단위 런길이 배열로 상세화하는 제3-4 단계를 더 포함하는 것을 특징으로 한다.
바람직하게는, 상기 보간되지 않은 볼륨 데이터의 실시간 렌더링 방법의 상기 제4 단계는, 상기 볼륨 데이터를 기초로 소정 복셀의 음영값을 결정하는 제4-1 단계, 상기 제4-1 단계에서 결정된 음영값을 상기 볼륨의 한 면과 평행한 중간 화상 평면에 투영하는 제4-2 단계 및 상기 제4-2 단계에서 얻어진 중간 화상을 관측자의 시각 벡터 값에 따라 와핑하여 최종 화상을 얻는 제4-3 단계를 포함하는 것을 특징으로 한다.
바람직하게는, 상기 보간되지 않은 볼륨 데이터의 실시간 렌더링 방법의 상기 제4-1 단계는, 음영값을 생성할 상기 소정의 복셀 vi에 대하여 입력된 슬라이스에 포함된 복셀 인지의 여부를 판단하여 그에 해당될 경우 상기 입력된 볼륨 데이터상에서 vi의 법선 벡터를 구한 다음, vi의 음영값을 구하는 제4-1-1 단계 및 상기 입력된 슬라이스에 포함되지 않고 보간될 슬라이스에 포함된 복셀인 경우, vi를 포함하는 상기 슬라이스의 상하 각 입력 슬라이스 중 vi와 같은 위치에 해당하는 두 복셀의 음영값을 상기 제4-1-1 단계의 방법에 의하여 구한 후 이를 보간하여 vi의 음영값을 구하는 제4-1-2 단계를 포함하는 것을 특징으로 한다.
바람직하게는, 상기 보간되지 않은 볼륨 데이터의 실시간 렌더링 방법은, 상기 볼륨 데이터를 기초로 소정 복셀의 음영값을 효율적으로 결정하기 위하여, 상기 주시각축이 x 축인 경우, 전향 버퍼와 후향 버퍼를 지정하며, 상기 제4-1-2 단계에서 상기 복셀 vi의 음영값을 결정하기 위한 보간 과정에서 사용된, 상하 각 입력 슬라이스 중 vi와 같은 위치에 해당하는 두 복셀의 음영값들을 각각 상기 전향버퍼와 후향버퍼에 저장하여, 이후의 다른 복셀의 음영값의 결정을 위한 데이터로 사용할 수 있도록 하는 것을 특징으로 한다.
바람직하게는, 상기 보간되지 않은 볼륨 데이터의 실시간 렌더링 방법은, 상기 볼륨 데이터를 기초로 소정 복셀의 음영값을 효율적으로 결정하기 위하여, 상기 주시각축이 y 축인 경우, 하나의 버퍼를 지정하며, 상기 제4-1-2 단계에서 상기 복셀 vi의 음영값을 결정하기 위한 보간 과정에서 사용된, 상하 각 입력 슬라이스 중 vi와 같은 위치에 해당하는 두 복셀의 음영값들을 각각 상기 버퍼에 저장하여, 이후의 다른 복셀의 음영값의 결정을 위한 데이터로 사용할 수 있도록 하는 것을 특징으로 한다.
바람직하게는, 상기 보간되지 않은 볼륨 데이터의 실시간 렌더링 방법은, 상기 볼륨 데이터를 기초로 소정 복셀의 음영값을 효율적으로 결정하기 위하여, 상기 주시각축이 z 축인 경우, 전향 버퍼와 후향 버퍼를 지정하며, 상기 제4-1-2 단계에서 상기 복셀 vi의 음영값을 결정하기 위한 보간 과정에서 사용된, 상하 각 입력 슬라이스 중 vi와 같은 위치에 해당하는 두 복셀의 음영값들을 각각 상기 전향버퍼와 후향버퍼에 저장하여, 이후의 다른 복셀의 음영값의 결정을 위한 데이터로 사용할 수 있도록 하며, 이 경우에 전후향 합성이 보장되도록 스캔라인의 처리순서를 결정하는 것을 특징으로 한다.
바람직하게는, 상기 보간되지 않은 볼륨 데이터의 실시간 렌더링 방법의 상기 제3 단계는, 사용자에 의해 지정된 불투명도 전이 함수와 이전의 렌더링 과정에서 이미 저장된 불투명도 전이 함수를 비교하여 상기 이전의 렌더링 과정에서 이미 생성된 상기 런길이 배열의 재사용 가능여부를 판단하는 재사용 판단 단계를 더 포함하는 것을 특징으로 한다.
바람직하게는, 상기 보간되지 않은 볼륨 데이터의 실시간 렌더링 방법의 상기 재사용 판단 단계는, 상기 사용자에 의해 지정된 불투명도 전이 함수에서의 각 밀도값에 대한 투명 또는 비투명 상태가 이전의 렌더링 과정에서 이미 저장된 불투명도 전이 함수의 각 밀도값에 대한 투명 또는 비투명 상태와 비교하여 변화가 없으면, 상기 이전의 렌더링 과정에서 이미 생성된 상기 런길이 배열의 재사용이 가능한 것으로 판단하는 R1단계, 상기 R1단계에서 상기 사용자에 의해 지정된 불투명도 전이 함수에서의 각 밀도값에 대한 투명 또는 비투명 상태가 이전의 렌더링 과정에서 이미 저장된 불투명도 전이 함수의 밀도값 영역과 비교하여 변화가 있는 것으로 판단되면, 상기 밀도값 영역 중 서로 다른 부분을 추출하는 R2단계 및 상기 R2단계에서 추출된 상기 밀도값 영역의 서로 다른 부분을 제2 단계에서 생성된 누적 영역 테이블과 비교하여 상기 밀도값 영역의 서로 다른 부분이 투명 영역에 포함되는 경우 상기 이전의 렌더링 과정에서 이미 생성된 상기 런길이 배열의 재사용이 가능한 것으로 판단하는 R3단계를 포함하는 것을 특징으로 한다.
이하에서는 도면을 참조하여 본 발명에 따른 바람직한 실시예를 상세히 설명한다.
본 실시예에 관하여 구체적으로 논의하기 전에 본 방법에서 사용된 용어를 간단히 정의한다.
우선, 볼륨 좌표(volume coordinate)는 볼륨 객체의 좌표를 나타내는 용어로서 (x, y, z)로 표기하며, 주시각 축(principal viewing axis)은 시각방향벡터(viewing direction vector)와 가장 작은 각도를 이루는 볼륨 좌표의 축으로 정의되며, 표준 객체 좌표(standard object coordinate)는 주시각축을 z축으로 변환시킨 좌표를 말하며 이를 (i, j, k)로 표기한다.
이하에서는 본 발명의 보간되지 않은 볼륨 데이터의 실시간 렌더링 방법의 전체적 처리의 흐름을 기술한다.
본 발명에서는 기존의 쉬어-왑 분해 알고리즘을 기본으로 하여, 그래픽 하드웨어 등의 추가적인 하드웨어의 구비 없이도 일반 개인 PC에서 실시간으로 부위 추출(classification) 및 렌더링이 가능한 방법을 제시한다. 빠른 부위 추출을 위하여 전 단계에서 구한 블록 최대-최소 테이블과 누적 영역 테이블을 이용하여 정방형에 근사시킨크기의 블록단위 런길이 인코딩(Block-based run-length encoding) 이라 정의되는 데이터의 재배열을 수행한다.
상기 블록단위 런길이 인코딩을 수행하는 이유는 인코딩하는 시간을 줄이기 위한 것이나, 복셀 단위의 정확한 런길이 인코딩을 수행한 것이 아니므로 비투명한 블록 런길이가 발생해도 렌더링 중에또는크기의 블록 단위 최대-최소 테이블과 누적 영역 테이블을 이용하여 투명여부를 파악한다.
이 경우에도 비투명한 것으로 파악되면 비투명한 각 복셀의 투명여부를 순차적으로 파악하여 비투명한 경우에는 해당 복셀의 음영값을 중간 단계 이미지에 합성한다.
본 방법에서는 정방형으로 보간되지 않은 볼륨데이터를 별도 보간처리 없이 빠르게 렌더링하기 위하여 기존의 쉬어-왑 분해알고리즘( Philippe Lacroute, Marc Levoy, "Fast Volume Rendering Using a Shear-Warp Factorization of the Viewing Transformation", Proceedings of SIGGRAPH 94, pp. 451-458, 1994.)을 수정한 점을 발명의 주요한 특징의 하나로 한다. 본 방법은 가상의 보간된 볼륨 데이터에 대하여 비투명한 복셀의 밀도값을 보간하여 구한다음, 법선벡터를 구하여 음영값을 얻는 기존 방법의 처리시간 부담을 줄이기 위하여 음영값 보간 방법을 사용한다. 즉, 음영값을 구하고자 하는 복셀이 입력된 슬라이스에 포함되는 경우에만 음영값을 구하고, 그렇지 않은 경우는 상하 입력된 슬라이스의 동일위치의 음영값을 보간하여 해당 복셀의 음영값을 구한다. 또한 생성된 음영값을 효율적으로 버퍼링하여 음영값을 한번만 구하면 재사용할 수 있도록 주시각축에 따른 스캔라인 처리 순서를 재 정의하였다.
일반적으로 사용자는 렌더링 결과가 나오면 다른 뷰(view)를 보기 위하여 볼륨을 회전시키거나 현재 불투명도 전이 함수를 근소하게 바꾸는 등의 작업을 수행하게 된다. 이러한 일련의 작업을 고려하면 장면(scene)과 장면간에는 시각 파라미터나 불투명도 전이 함수간의 상호간의 응집성(coherence)이 존재함을 알 수 있다. 본 방법에서는 현재 생성된 장면을 기반으로 다음 장면의 생성을 가속화(speedup)하기 위한 기법을 제시한다. 첫번째 기법은 시각이 바뀔 때 기존의 생성된 런길이 배열(run-length array)중 바뀐 시각에서 보이는 비투명 블록길이만 상세화하여 점근적으로 런길이 배열을 블록단위가 아닌 복셀단위 런길이 배열로 바꾸는 것이다.두번째 기법은 불투명도 전이 함수가 바뀔 때 기존 런길이 배열의 비투명한 부분이 새로운 런길이 배열의 비투명한 부분을 포함하고 있다고 판단되면 기존의 런길이 배열을 재사용하는 것이다.
본 발명의 보간되지 않은 볼륨 데이터의 실시간 렌더링 방법을 도1에서 나타내었다.
상기 도1에 나타낸 바와 같이 본 발명의 보간되지 않은 볼륨 데이터의 실시간 렌더링 방법은 크게 4단계로 구성된다. 처음 2단계는 부위추출을 실시간으로 수행하기 위한 자료구조를 만드는 과정이며, 제3 단계는 전 단계에 생성된 자료구조를 이용하여 블록단위로 런길이 인코딩을 수행하는 과정이다. 본 방법에서는 블록단위로 런길이 인코딩을 수행함에도 불구하고 볼륨데이터는 응집성을 가지므로 투명한 부분을 싱당부분 걸러줌으로써 제4 단계의 렌더링 시간을 감소시킨다. 도1에서 보듯이 제1 단계는 처음 데이터 로딩 시에만 수행된다. 불투명도 전이함수가 바뀌면 제2 단계부터 수행되고 이전에 생성된 런길이 인코딩 정보가 재사용 가능하면 제3 단계를 건너뛴다. 시각 파라미터가 바뀌면 제3 단계부터 수행된다. 단, 현재 주시각 축(principal viewing axis)에 대한 런길이 인코딩 정보가 존재하는 경우는 제3 단계를 건너뛴다.
이하에서는 상기 보간되지 않은 볼륨 데이터의 실시간 렌더링 방법의 제1 단계의 블록단위 최대-최소 테이블의 생성 방법을 상세히 설명한다.
블록단위 최대-최소 테이블은 전체 볼륨을 고정된 크기를 갖는 몇 개의 블록들로 구분하고, 각각의 블록에서 볼륨의 값들을 읽어 최대값과 최소값을 구하는 작업을 통해 얻은 일련의 배열을 의미한다. 본 방법은 두 개의 레벨로 구성된 블록단위 최대-최소 테이블을 구성한다. 상위레벨의 블록단위 최대-최소 테이블은 z축을 주시각축으로 하는 일련의크기의 블록에 대한 최대-최소값을 가진다. 하위레벨의 블록단위 최대-최소 테이블은 각 축을 주시각 축으로 하는 일련의 블록-스캔라인인(주시각축이 x 축인 경우),(주시각축이 y 축인 경우) 및(주시각축이 z 축인 경우) 크기의 블록에 대한 최대-최소값으로 구성된다. 여기서 n은 임의의 블록 크기를 말하고, m은 보간된 볼륨을 가정할 때 블록이 정방형()으로 근사 될 수 있도록 결정된 슬라이스 수를 말한다. 본 방법은 쉬어-왑 분해 알고리즘을 기본으로 하므로 각축을 주시각축으로 하여 구성된 3벌의 블록-스캔라인 최대-최소 테이블이 필요하다.크기의 블록은 정방형에 근사시켜 구성하므로 1벌만 구성한다. 도2는해상도의 볼륨에서 구성된 최대-최소 테이블의 데이터 구조를 도시한 것이다.
여기에서, 도2a는블록으로 분할된 볼륨의 데이터 구조를 나타내며, 도2b는블록으로 분할된 볼륨의 데이터 구조를, 도2c는블록으로 분할된 볼륨의 데이터 구조를, 도2d는블록으로 분할된 볼륨의 데이터 구조를 각각 나타낸다. 또한, 각 블록에 표시한 숫자는 최대-최소 테이블을구성하기 위한 데이터 저장의 순서를 나타낸다.
본 발명에서는 상기 최대-최소 테이블 생성과정을 최적화하기 위하여 캐쉬 메모리를 사용하고, 또한 MMX(Multimedia Extension) 기능을 활용하며, 이들을 위한 데이터 재배열의 방법을 제공함을 주요한 특징의 하나로 한다.
캐쉬 메모리란 컴퓨터 내에서 자주 참조되는 데이터를 접근(Access) 속도가 빠른 주 제어장치 내의 제한된 메모리 영역에 위치시킴으로서 전체적 데이터 처리의 속도를 향상시키기 위한 기억장치를 말한다. 또한, MMX 기능이란 컴퓨터의 데이터 처리의 속도를 향상시키기 위해서, 수 개의 데이터에 대하여 동시에 일정한 연산을 수행하게 하는 기능을 말하며, 이는 SIMD(Single Instruction Multiple Data) 개념을 구현한 것이다.
기존의 방법에서는, 최대-최소 테이블을 생성하기 위하여서는 전체 볼륨 데이터를 입력으로 하므로 상기 도2에 나타낸 것과 같은 4가지 형태의 최대-최소 테이블을 생성하기 위해서는 전체 볼륨 데이터를 4번 읽어들여야 하며, 이는 많은 데이터 입출력 등 처리시간의 소요를 요구한다.
본 방법에서는 상기 기존의 방법과 같이 전체 볼륨을 읽어 들이면서 최대-최소 테이블을 생성하는 과정을 4번 반복하는 것이 아니라, 전체 볼륨을 한번만 캐쉬 메모리로 읽어 들이면서 4가지 형태의 최대-최소 테이블을 생성한다. 캐쉬 메모리의 용량은 제한적이고 일반적으로 볼륨 데이터는 방대한 양의 데이터로 구성되므로, 상기 캐쉬 메모리를 적극적으로 활용하기 위하여, 전체 볼륨을 일정한 크기의 블록단위로 나누고, 주 메모리에 저장된 전체 볼륨의 데이터 중 각각의 블록단위의일부 데이터를 캐쉬메모리로 위치시켜, 각 블록에 대하여 x, y, z의 주시각축 별 최대-최소 테이블을 생성하는 것을 주된 특징의 하나로 한다.
주시각축에 따라 각 최대-최소 테이블이 참조하는 메모리 영역이 다르므로, 전체 볼륨은 CPU-캐쉬메모리-주 메모리-하드디스크로 이어지는 하드웨어 구분에서 동일한 영역에 위치해야 한다.
이때, 처리의 기초가 되는 블록단위의 크기는 CPU의 캐쉬 라인 크기(cache line size)와 최대-최소 테이블의 블록의 크기에 의하여 결정된다. 예를 들어, 복셀 하나의 크기가 2바이트, CPU의 캐쉬라인 크기를 32바이트, n=16 및 m<n을 가정한다. 여기에서 이 경우, x, y, z를 주시각축으로 하여 처리될,블록에 해당하는 복셀 영역의 크기는 32바이트( 2 바이트 X 상기 처리될 블록의 복셀의 수(=16) )이고의 크기는 그보다 작으므로 캐쉬라인 하나의 크기와 일치하며,의 크기에 해당하는 그림2 (a)의 각 블록은 상기 캐쉬라인 크기의 배수체이므로단위를 기준으로 캐쉬 메모리에 읽어들여 최대-최소 테이블을 생성한다.
이를 가상코드의 형태로 표현하면 다음과 같다.(여기서 BigBlock은블록의 복셀에 해당하는 영역을 뜻한다.)
program : Make Min-Max Table
for each BigBlock
Load_To_Cache_Memory(BigBlock)
Make_Min_Max_For_One_Block(BigBlock)
이하에서는 각각의 BigBlock에서 최대-최소 테이블을 생성하는 과정을 살펴본다. 입력은의 복셀 배열이며 출력은,,의 단위의 최대-최소값들의 배열이다. 도2의 경우를 예로 들면가 전체 볼륨이 되며가 BigBlock이 된다. 출력은 도2a의 각 블록에 해당하는 최대-최소값과,,,의 복셀 영역이 하나의 최대-최소값이 되는 최대-최소값의 배열들이 된다. 그리고 도3에서 나타낸 바와 같이 각 배열의 크기는 4가 된다. 최대값과 최소값을 찾는 과정은 유사하므로 여기서는 최대값을 찾는 과정만을 보이기로 한다. 도3은크기의 BigBlock에서 투영(projection)에 의하여 최대-최소 테이블을 구성하는 예를 보인 것이다.
도3a에서는 주시각 축이 x 축인 경우에 대하여, 도3b에서는 주시각 축이 y축인 경우에 대하여, 도3c에서는 주시각 축이 z 축인 경우에 대하여 각각 투영(projection)에 의하여 최대-최소 테이블을 구하는 예를 나타낸다.
상기 도3에서 보듯 블록하나에 대해 최대-최소 테이블을 구성하는 것은 최대-최소 버퍼에 각 복셀의 값들을 투영(projection)시키고 이 버퍼의 값들을 최대-최소 테이블로 옮기는 과정으로 이루어진다. 상기 투영과정은 최대-최소버퍼와 복셀의 값을 비교하여 최대-최소 버퍼를 갱신하는 방식으로 진행되며, 최대-최소 테이블로 옮기는 과정은 최대-최소 버퍼의 값을 하나씩 옮기는 과정으로 이루어진다. 주시각 축에 따라 최대-최소 버퍼는 3벌이 필요하며 그 결과로 블록-스캔라인 최대-최소 테이블도 3벌을 얻는다.
이 과정을 가상코드의 형태로 표현하면 다음과 같다.
program : Make_Min_Max_For_One_Block(BigBlock)
Clear_Min_Max_Buffer
Project_To_Min_Max_Buffer
Move_To_Min_Max_Table
이하에서는 상기 투영과정에 대하여 상세히 기술한다.
상기 투영과정은 복셀값을 최대-최소 버퍼와 비교해서 최대-최소 버퍼를 갱신시키는 과정을 뜻한다. 이 과정은 MMX를 적용하기 위한 다음의 조건을 만족시키는 경우, 8바이트 단위로 투영과정을 실행시켜 최대-최소 테이블 생성의 속도를 향상시킬 수 있다.
가정1. 복셀과 최대-최소 버퍼는 각각 물리적으로 연속한 메모리 영역에 위치해야 한다.
가정2. 투영의 방향과 물리적인 메모리 영역의 방향은 서로 수직이어야 한다.
가정3. 각 복셀의 크기는 1, 2, 4, 8 바이트 중 하나여야 하며 복셀의 형태는 정수형(interger type)이어야 한다.
가정 4. 복셀의 배열과 최대-최소 버퍼는 8바이트 단위로 처리되는데 문제가 없어야 한다.
상기 가정1에서 물리적으로 연속하다는 것은 볼륨의 경우 x축에 평행하다는 것을 의미한다. 따라서 주시각 축이 x축과 y축인 경우(상기 도3a, 3b)는 x축이 투영방향과 수직이므로 문제가 없지만 주시각 축이 z축인 경우(상기 도3c)는 투영방향이 물리적인 방향과 평행하기 때문에 상기 가정2에 어긋난다. 이 경우 도4에 나타낸 것처럼, 투영방향이 물리적인 방향과 수직이 되도록 재배열(reconstruction)한 후 횡단 투영하여 최대-최소값을 얻도록 한다.
이 과정을 가상 코드의 형태로 나타내면 다음과 같다.
program : Project_To_Min_Max_Buffer
read 8 bytes voxel
x principal_axis projection
y principal_axis reconstruction
y principal_axis projection
z principal_axis projection
상기 투영과정으로 얻어진 결과인 최대-최소 버퍼의 값을 최대-최소 테이블로 옮기는 작업은 단순한 주소변환으로 이루어진다.
이 과정을 가상 코드의 형태로 나타내면 다음과 같다.
for each BigBlock index x,y,z
for each i,j [0..n-1]
tableX[x+i][z+j][y] = bufferX[j][i]
tableY[y+i][x+j][z] = bufferY[i][j]
tableZ[z+i][y+j][x] = bufferZ[i][j]
이하에서는 본 발명의 보간되지 않은 볼륨 데이터의 실시간 렌더링 방법의 제2 단계인 누적 영역 테이블(Summed-area table)의 생성단계에 대하여 기술한다.
상기 불투명도 전이함수는 사용자가 보고자하는 영역의 밀도 값을 지정하여 이에 속하는 밀도 값을 가지는 복셀 만을 영상으로 표시하게 하기 위한 것이며, 사용자는 상기의 관심부분의 밀도 값의 일정 영역 및 표시할 영역의 비투명도 값을 사용자 인터페이스를 통하여 입력하게 된다.
상기 누적영역 테이블은 임의의 블록이 투명한지 여부를 일정 시간(constant time)에 빠르게 판단하기 위한 목적으로 구성된다. 구성방법은 상기 공지의 Lacroute의 방법과 동일하며 본 방법에서는 밀도값(density value)에 대한 1차원 누적영역 테이블을 구성한다.
이하에서는 본 발명의 보간되지 않은 볼륨 데이터의 실시간 렌더링 방법의 제3 단계인 블록 단위 런길이 인코딩(Block-based run-length encoding) 과정에 대하여 상세히 설명한다.
블록 단위 런길이 인코딩을 구성하는 목적은 렌더링 시간에 투명한 부분을 한꺼번에 뛰어넘기 위함이다. 런길이 인코딩 구조는 블록 단위 런길이 배열(block-based run-length array)과 스캔라인 포인터 배열(scanline pointer array)로 구성된다. 블록 단위 런길이 배열은 표준 객체좌표 (i, j, k)에 대하여i,j, k축 순서로 생성된 일련의 투명블록 런길이와 비투명 블록 런길이로 구성된다. 이때, 전단계에서 구성된 블록 최대-최소 테이블의 각 블록단위의 최대-최소값을 이미 구하여진 누적 영역 테이블과 비교하여 각 블록의 투명여부에 대한 정보를 단시간에 결정할 수 있다.
여기서, 스캔라인 포인터 배열은 각 스캔라인의 첫번째 런길이에 대한 포인터를 저장한 것이다. 만약 한 스캔라인에 비투명 블록이 하나도 없는 경우는 널 포인터(Null pointer)가 지정된다. 같은 블록 집합을 가지는 여러 스캔라인들은 동일한 런길이 정보를 가지므로 공통의 스캔라인 포인터를 가진다.
도5는 블록 크기가일 때 런길이 인코딩 데이터 구조의 한 예를 도시한 것이다. 여기서, 첫번째 슬라이스의 처음 두개의 스캔라인은 두개의 비투명 블록과 두개의 투명 블록으로 구성되어 있으므로 런길이는 0, 4, 4가 저장된다. 0으로 시작하는 이유는 항상 스캔라인의 런길이는 투명한 런부터 시작되기 때문이다. 첫번째 슬라이스의 처음 두개의 스캔라인 포인터는 각각 두 스캔라인이 공유하는 런길이 정보의 처음 런인 0을 가리킨다. 다음 두개의 스캔라인은 투명한 블록들로 이뤄지므로 해당 스캔라인 포인터는 널포인터로 지정된다. 또한 첫번째와 두번째 슬라이스는 공통의 블록 집합을 가지므로 두번째 슬라이스의 각 스캔라인 포인터도 첫번째 슬라이스의 각 스캔라인 포인터와 동일하다.
이하에서는 본 발명의 보간되지 않은 볼륨 데이터의 실시간 렌더링 방법의제4 단계인 쉬어-왑 분해(Shear-warp factorization) 기법을 기초로 하여 수정된 본 발명의 볼륨 렌더링 과정을 상세히 기술한다.
쉬어-왑 분해 알고리즘은 볼륨을 볼륨의 한 면과 평행한 중간 화상 평면(intermediate image plane)에 투영 시켜 중간 화상(intermediate image)을 만든 다음, 2차원 와핑(warping)을 하여 최종 화상을 얻는 방법이다. 이 알고리즘은 복셀 라인을 따라 중간 화상(intermediate image)을 구하므로 객체 순서 알고리즘(object-order algorithm)의 장점을 살린 동시에, 화상 순서 알고리즘(image-order algorithm)이 가지는 장점인 고화질을 위한 재샘플링(re-sampling)과 광선 추적의 조기종료(early ray termination) 등이 가능하다.
본 방법은 기존의 쉬어-왑 분해 알고리즘을 기반으로 한다. 기존의 쉬어-왑 분해 알고리즘은 각각의 복셀을 단위로 한, 런길이 배열의 구성을 전제로 하는 반면, 본 방법은 초기에 블록단위 런길이 배열을 구성하므로 비투명 런에서도 투명한 복셀이 존재할 수 있다. 따라서 비투명한 런일때에도 부가적으로 블록-스캔라인 최대-최소 테이블을 검색하여 해당 블록-스캔라인이 비투명한지 조사한다. 이 경우에도 비투명하다면 복셀단위로 비투명여부를 조사하여 비투명하다면 음영값을 구하여 합성(composite)한다.
다음에서는 쉬어-왑 분해 알고리즘을 수행시 보간되지 않은 볼륨을 효율적으로 렌더링하기 위하여 본 발명에서 제안한 방법을 구체적으로 제시한다.
우선, 본 발명의 주요한 특징의 하나로서 종래기술과 달리 정방형으로 보간되지 않은 볼륨 데이터를 이용하여 임의의 복셀 vi의 음영(shading) 값을 구하기 위한 방법을 이하에서 상세히 기술한다.
이를 위하여 종래 기술의 방법을 정리하면,
단계 1. 밀도값 보간(density interpolation)을 하여 vi의 밀도값을 구한다.
단계 2. 상기 보간된 볼륨 데이터 상에서 vi의 법선 벡터(normal)를 구한다.
단계 3. 상기 vi의 음영값(shading value)을 구한다.
위 과정은 합성(compositing)되는 모든 복셀에 대하여 복셀과 주변 복셀의 밀도값을 보간하고 법선 벡터 및 음영값을 구하는 오버헤드(overhead)가 필요하므로 볼륨 렌더링 결과 이미지를 생성하는데 많은 시간이 소요된다.
본 발명에서는 임의의 복셀 vi의 위치가 상기 스캐닝되어 입력된 슬라이스 중의 한 복셀일 경우에만 법선벡터를 구하여 음영값을 생성한다. 그리고, 보간된 슬라이스에 해당되는 복셀의 음영값은 상하 슬라이스의 같은 위치의 복셀의 음영값을 보간하여 구한다. 이와같은 방법을 사용하면 보간된 슬라이스에 포함되는 복셀의 밀도값 보간 및 법선 벡터를 구하는 부담을 없앨 수 있다. 그 세부 과정은 아래와 같다.
단계 1. 음영값을 생성할 복셀 vi에 대하여 입력된 슬라이스에 포함된 복셀인지의 여부를 판단하여 그에 해당될 경우 입력된 볼륨상에서 vi의 법선 벡터를 구한 다음, vi의 음영값을 구한다.
단계 2. 입력된 슬라이스에 포함되지 않고 보간될 슬라이스에 포함된 복셀인 경우, vi를 포함하는 슬라이스의 상하 각 입력 슬라이스 중 vi와 같은 위치에 해당하는 두 복셀의 음영값을 보간하여 vi의 음영값을 구한다.
본 발명의 방법과 앞에서 제시한 일반적인 방법과 차이를 설명하면 도6과 같다.
상기 도6에서, 6a는 앞에서 제시한 일반적인 방법이고 6b는 본 발명에서 제시한 방법을 나타낸다. 또한, 도6c는 상기 도6a의 방법과 도6b의 방법을 비교하여 설명하기 위한 도면이다.
상기 도6b에 나타낸 본 발명에서의 방법과 상기 도6c의 방법에 의하여 구하여진 복셀 vi의 음영값이 같음은 용이하게 증명이 가능하며, 결국 도6b의 본 발명의 방법과 도6c의 방법은 등가로 볼 수 있다. 따라서, 비교의 편의상 도6a와 도6c 의 방법을 비교하면, 보간되는 복셀의 법선 벡터를 구할 때 상기 도6a의 경우는 z축에 대한 법선 벡터의 거리(normal distance)가 2가 되고, 상기 도6c의 경우는 2n (여기서 n은 slice 간격/pixel 간격을 나타낸다)이 되어 전반적으로 상기 도6a의 경우에 비교하여 스무딩된 결과를 얻는다. 일반적으로 의료영상 분야의 입력장치의 한계로 슬라이스 간격이 커서 z축 영상에 계단현상이 발생하는 문제점이 있는데, 상기 본 발명의 적용의 결과로 법선 벡터의 보간을 위한 전후 구간의 거리가 넓어짐으로써 상기 종래 기술의 경우와 같은 계단 현상이 해소될 수 있는 이점이 있다.
이하에서는 이후의 처리에서 용이하게 참조하게 함으로써 음영값을 다시 구하는 부담을 줄여 처리의 속도를 향상시키기 위한 본 발명의 볼륨 스캔라인의 처리순서의 지정 방법 및 음영값의 효율적인 저장방법을 상세히 기술하겠다.
최근의 처리과정에서 구해진 음영값을 효율적으로 저장(buffering)하면 새로운 처리에서 음영값을 새로이 구하는 오버헤드를 줄일 수 있다. 본 방법에서는 주시각축에 따라 처리하는 스캔라인 순서를 달리하여 음영값을 효율적으로 버퍼링한다.
도7에서는 쉬어-왑 분해 알고리즘을 적용함에 따른, 주시각 축의 표준 객체 좌표로의 변환을 나타낸다.
본 발명은 쉬어-왑 분해 알고리즘을 기본으로 하고 있으며, 그에 따라 상기 도7에 나타낸 바와 같이 주시각축에 따라 스캔라인 처리순서가 달라진다. 여기서, (a)에서는 주시각축 x로 하는 경우를 나타내었고, (b)는 주시각축 y로 하는 경우를, (c)는 주시각축 z로 하는 경우를 각각 나타낸다. 이때 표준 객체 좌표에서의 k는 주시각축을, j는 스캔라인의 방향을 나타낸다.
본 발명은 기존 방법과는 달리 보간되지 않은 볼륨 데이터를 가지고 보간을 하면서 렌더링하는 것이므로 주시각 축에 따라 보간이 필요한 부분이 달라진다. 따라서 주시각 축에 따라 음영값의 버퍼링을 효율적으로 수행하기 위한 스캔라인 처리방법이 필요하다. 입력된 볼륨의 해상도가이고 슬라이스 간격이 픽셀 간격의 n배라고 가정했을 때 각 주시각축에 대한 스캔라인 처리순서와 음영값의 버퍼링(buffering) 방법을 이하에서 기술한다. 버퍼의 크기가 너무 커지면 메모리의 적중율(hit ratio)이 떨어지므로 성능상의 효율을 위하여 스캔라인 크기로 정하였다.
우선, 주시각축이 x축인 경우의 음영값의 버퍼링 방법을 가상코드의 형태로 나타내면 다음과 같다.
allocate and initialize front_buffer[Ymax] and back_buffer[Ymax]
m_intrpZ = (Zmax-1)*n +1; // 보간된 볼륨의 슬라이스수
for (k=0; k < Xmax; k++)
for( real_j=0, jj=0; real_j < Zmax; jj +=m_nRatioZ, real_j++)
for (j=jj; j< jj+n; j++)
if(j >= m_ intrpZ) break;
else
composite current scanline j
end for // j
swap front_buffer and back_buffer and initialize back_buffer
end for // real_j
end for // k
도8은 주시각축이 x 축인 경우에 k=0이고, j=0에서 3까지 처리 시 버퍼링 방법을 도시한다.
가상의 보간된 볼륨(interpolated volume)을 가정했을 때 표준 객체 좌표에서 각 슬라이스의 스캔라인을 따라 처리할 때, 스캔라인에 해당되는 축은 볼륨 좌표의 z축이 된다. 따라서 스캔라인과 스캔라인 사이에서 보간이 필요하다. 표준 객체좌표의 k=0이고 스캔라인 0에서 3까지의 스캔라인을 처리할 때( 위 코드의 j=0부터 3) 볼륨 좌표의 슬라이스 0에 해당되는 스캔라인이 전향 버퍼(front buffer)이고, 슬라이스 1에 해당되는 스캔라인이 후향 버퍼(back buffer)가 된다.
전향 버퍼와 후향 버퍼 사이에 있는 보간되어야할 스캔라인들의 음영값은 전향 버퍼와 후향 버퍼에 저장된 같은 위치의 음영값을 보간하여 결정된다. 만약 전향 또는 후향 버퍼에 해당 위치의 음영값이 저장되어 있지 않은 경우는 해당 위치의 음영값을 구하여 버퍼에 저장해 놓음으로써 다음 스캔라인에서 재사용할 수 있도록 한다.
다음 스캔라인 4를 처리할 때에는 이전 단계의 후향 버퍼가 전향 버퍼가 되도록 하여 이미 계산된 음영값을 재사용할 수 있도록 하고, 후향 버퍼는 초기화시킨다. 이와 같은 과정을 표준 객체좌표의 슬라이스 끝(k=Xmax)까지 반복한다.
다음으로, 주시각축이 y축인 경우의 음영값의 버퍼링 방법을 가상코드의 형태로 나타내면 다음과 같다.
m_intrpZ = (Zmax-1)*n +1; // 보간된 볼륨의 슬라이스수
allocate and initialize buffer[Zmax]
for (k=0; k < Ymax; k++)
for (j=0; j < Xmax; j++)
composite current scanline j composed of i0... im_intrpZ
도9는 주시각축이 y축일 때의 음영값의 버퍼링 방법을 k=0, j=0의 경우를 예로 도시한 것이며, 이 경우는 보간이 각 스캔라인 내부에서 이뤄지므로 버퍼가 하나만 있으면 된다.
마지막으로, 주시각축이 z축인 경우의 음영값의 버퍼링 방법을 가상코드의 형태로 나타내면 다음과 같다.
m_intrpZ = (Zmax-1)*n +1; // interpolate된 볼륨의 슬라이스수
allocate and initialize front_buffer[Xmax] and back_buffer[Xmax]
if reverse_scanlineorder = TRUE {
for ( j= Ymax-1; j >= 0; j-- )
for( real_k=0, kk=0; real_k < Zmax; kk +=m_nRatioZ, real_k++)
for (k=kk; k < kk+n; k++)
if(k >= m_intrpZ) break;
else
composite current scanline j of slice k
end for //k
swap front_buffer and back_buffer and initialize back_buffer
end for // kk
end for //j
}
else {
for (j=0; j < Ymax; j++)
for( real_k=0, kk=0; real_k < Zmax; kk +=m_nRatioZ, real_k++)
for (k=kk; k < kk+n; k++)
if(k >= m_intrpZ) break;
else
composite current scanline j of slice k
end for //k
swap front_buffer and back_buffer and initialize back_buffer
end for // kk
end for //j
}
도10은 주시각축이 z 축인 경우에 j=0이고, k=0에서 3까지 처리 시 버퍼링 방법을 도시한다.
이 경우는, 보간이 표준 객체좌표의 슬라이스와 슬라이스 사이에서 필요하다. 따라서 스캔라인 단위의 버퍼링을 하기 위해서는 각 스캔라인에 대하여 전체 슬라이스를 처리(traverse)하는 것이 효율적이다. 이때, 주시각축이 z축인 경우는 표준 객체 좌표의 각 슬라이스 단위로 처리하는 것이 아니므로 전후향 합성(front-to-back composition)을 보장하기 위한 스캔라인 처리 순서를 결정하여야 한다. 즉, j축에 대한 기울임 정도(shearing factor)가 0보다 크거나 같은 경우에는 중간 단계의 이미지(intermediate image)에 기록될 음영값은 관측자의 시각방향에 대하여 전방에 있는 이미지가 먼저 기록되는 것이 아니라 후방에 있는 이미지가 먼저 기록되는 결과가 되므로 처리의 순서가 반대로 되어야 한다. 따라서, 본 방법은 상기 j축에 대한 기울임 정도(shearing factor)가 0보다 크거나 같은 경우(상기 가상코드에서 reverse_scanlineorder = TRUE의 경우)에는 표준 객체 좌표의 각 슬라이스의 마지막 스캔라인부터 역으로 처리(traverse)한다. 단, 마지막 슬라이스부터 슬라이스를 처리하는 경우는 실제 마지막 슬라이스가 처음 슬라이스로 되므로 reverse_scanline order 플래그(flag)를 반전시켜 j축에 대한 기울임 정도(shearing factor)가 0보다 작은 경우에 마지막 스캔라인부터 처리할 수 있도록 한다.
이하에서는 본 발명의 주요한 특징의 하나인 렌더링 과정을 가속화(Speed-Up)하기 위한 방법에 대하여 상세히 기술한다.
우선, 본 발명은 렌더링 과정의 가속화를 위해 런길이 배열에 대한 점근적 상세화 (Progressive refinement of run-length array) 방법을 사용함을 특징으로 한다.
본 발명의 블록단위 런길이 배열은 기존 기술의 복셀 단위로 추출하여 구성된 런길이 배열만큼 정확한 런길이 정보를 제공하지 못하므로 실제로 투명한 복셀임에도 불구하고 렌더링 중에 해당 복셀에 대한 추출(classification) 과정이 필요하다. 사용자가 시각 파라미터를 바꿈에 따라 현재 시각에서 보이는 비투명 블록중 투명한 복셀을 추출하여 블록단위 런길이 배열에서 좀더 상세한 런길이 배열로 점차적으로 변환시켜갈 수 있고 이를 점근적 상세화 방법이라 한다. 쉬어-왑 분해 알고리즘은 보이는 복셀에 대해서만 처리하므로 런길이 배열도 보이는 복셀에 대해서만 상세화시켜 나갈 수 있으므로 런길이 배열의 저장공간과 추출 시간 (classification time) 측면에서 유리하다.
도11은 도5의 블록단위 런길이 배열을 상세화시켜 생성된 런길이 배열의 예이다.
다음으로 본 발명에서는 렌더링 과정의 가속화를 위해 런길이 배열에 대한 재사용(Reuse of run-length array) 방법을 사용함을 다른 한 특징으로 한다.
상기 불투명도 전이함수가 바뀌면 블록단위 런길이 배열이 재구성되어야 한다. 그러나 만약 함수가 이전과 그다지 변화가 없고, 이전 런길이 배열의 비투명 복셀이 바뀐 함수에 의한 비투명 복셀을 포함하고 있다면 이전 런길이 배열의 재사용이 가능하다.
도12에서는 이전 런길이 배열의 재사용 가능여부를 빠르게 판단하기 위하여 본 발명에서 사용하고 있는 방법의 첫 번째 판단 단계를 나타낸다. 여기서, (a)는 불투명도 전이함수의 지정을 위하여 제어점p 1이나p 2를 움직였을 경우를 나타내며, (b)는 제어점p 0나p 3을 움직이는 경우를 나타낸다.
상기 도12에서 보는 바와 같이 제어점(control points)p 0,p 1,p 2, p 3이 불투명도 전이 함수를 표현한다고 가정하자(본 방법에서는 사다리꼴 형태를 가지는 불투명도 전이 함수를 예로 들었으나 다른 형태의 함수도 똑같이 적용할 수 있다.). 이때 불투명도 전이함수를 변경하기 위하여 도12의 (a)에서 보는 바와 같이 제어점p 1이나p 2를 움직였을 때에는 투명 복셀과 비투명 복셀들의 상태는 변함이 없다. 따라서 이 경우는 이전 런길이 배열을 그대로 재사용할 수 있다. 반면 도12의 (b)와 같이 제어점p 0나p 3을 움직이는 경우는 움직인 구간에 해당하는 복셀의 투명/비투명 상태가 변하므로 재사용 가능 여부를 다음의 두 번째 단계에서 좀 더 조사하여야 한다.
도13에서는 이전 런길이 배열의 재사용 가능여부를 빠르게 판단하기 위하여 본 발명에서 사용하고 있는 방법의 두 번째 판단 단계를 나타낸다. 여기서, (a)에서는 dold와 dnew사이의 구간이 비투명 상태에서 투명 상태로 바뀌는 경우를 나타내며 (b)는 투명 상태에서 비투명 상태로 바뀌는 경우를 나타낸다.
상기 제어점p 0가 dold에서 dnew로 바뀌었을 때 도13에서 보는 바와 같이 두가지 경우가 발생할 수 있다. 즉 dold와 dnew사이의 구간이 비투명 상태에서 투명 상태로 바뀌는 경우인 (a)와, 투명 상태에서 비투명 상태로 바뀌는 경우인 (b)이다. 이때, 전자의 경우는 비투명 구간의 정보를 잃어버리는 것이 아니므로 이전 런길이 배열을 그대로 사용할 수 있으나 후자의 경우는 비투명 구간이 추가되어 이전 런길이 배열을 그대로 사용할 수 없다. 단, 전자의 경우 dold와 dnew사이의 구간이 실제로 투명함에도 불구하고 이전 런길이 배열을 그대로 사용함에 따라 비투명한 구간으로 간주되어 렌더링 시에 상기의 점근적 상세화 과정에 의하여 일일이 복셀단위의 비투명 여부를 검사하여야 하는 단점이 있다. 따라서 dold와 dnew사이의 구간이 지정된 임계치(threshold)보다 작은 경우, 즉 불투명도 전이 함수의 변화가 작은 경우에만 재사용한다. 또한, 이전 런길이 배열의 재사용이 가능한 경우인, 상기 도 13의 (a)의 비투명 상태에서 투명 상태로 바뀌는 경우인지의 여부를 단위시간 내에(constant time) 파악하기 위하여 본 방법에서는 앞서 구성된 누적 영역 테이블과의 비교방법을 이용한다. 즉, 전 단계에서 형성된 누적영역 테이블을 참조하여 판단할 때, 상기 dold와 dnew사이의 구간이 비투명 영역에 있으면 상기 도 13의 (a)의 이전 런길이 배열의 재사용이 가능한 경우가 된다.
본 발명에 의한 보간되지 않은 볼륨 데이터의 실시간 렌더링 방법은, 본 발명의 기술적 사상의 범위 내에서 다양한 형태로 변형, 응용 가능하며 상기 바람직한 실시예에 한정되지 않는다.
예를 들면, 본 발명의 방법은 동일한 과정을 수행하는 하드웨어로서도 구현(H/W Implementation)이 가능하며, 그 한 실시예를 도 14에 나타내었다.
상기 도14의 렌더링 장치는 메모리부(100)와 인터페이스부(200), 그리고 처리엔진부(300)를 포함한다.
메모리(100)는 렌더링할 복셀을 저장하고 있는 복셀 메모리(110)와 랜더링한 결과를 저장할 픽셀 메모리(120)로 구성된다.
복셀 메모리(110)와 픽셀메모리(120)는 각각 복셀 메모리 인터페이스(Voxel Memory Interface)(210)와 픽셀 메모리 인터페이스(Pixel Memory Interface)(220)를 통하여 처리엔진부(300)에 연결된다.
처리엔진부(300)는 병렬처리를 할 수 있도록 다수의 파이프라인(310)으로 구성되게 하는 것이 바람직하며 각각의 파이프라인은 서로에 대해 독립적으로 작동한다.
하나의 파이프라인은 추출장치(Classification)(320), 법선벡터 추정장치 (Gradient Estimation)(330), 합성장치(Compositing)(340), 음영버퍼(Shade Buffer )(350)를 포함하며 각 파이프라인은 공통적으로 색-불투명도 전이 참조 테이블(Color and opacity lookup table)(360)과 음영 참조 테이블(Shade lookup table)(370)을 참조한다.
추출장치(320)는 색-불투명도 전이 참조 테이블(109)을 이용하여 렌더링할 복셀을 결정한다.
색-불투명도 전이 참조 테이블(360)은 불투명도 전이함수를 참조 테이블 형식으로 변형한 메모리 영역이다.
법선벡터 추정장치(330)는 렌더링할 복셀의 법선벡터를 추정하여 음영 참조 테이블(370)을 참조하거나, 음영 버퍼(350)를 사용한다. 그리고 이들의 결과로 복셀의 음영값을 결정한다.
음영 참조 테이블(370)은 법선벡터에 대해 음영값을 참조 테이블 형식으로 변형한 메모리 영역이다.
음영 버퍼(350)는 음영값을 버퍼링하는 메모리 장치로 전향버퍼와 후향버퍼로 구성된다.
합성장치(340)는 음영값과 색-불투명도를 이용해서 렌더링한 결과를 얻어내는 장치이다. 랜더링한 결과는 픽셀 메모리 인터페이스(220)를 통해 픽셀 메모리에 전달된다.
상기 실시예와 도면은 발명의 내용을 상세히 설명하기 위한 목적일 뿐, 발명의 기술적 사상의 범위를 한정하고자 하는 목적이 아니며, 이상에서 설명한 본 발명은 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자에 있어 본 발명의 기술적 사상을 벗어나지 않는 범위 내에서 여러 가지 치환, 변형 및 변경이 가능하므로 상기 실시예 및 첨부된 도면에 한정되는 것은 아님은 물론이다.