1. 서 론
현재 컴퓨터 그래픽스 응용분야에서는 처리의 효율성을 높이기 위해 삼각 폴리곤으로 구성된 표면 모델(surface model)을 주로 사용하여 현실세계의 객체를 표현한다. 그러나 객체의 외부만이 아니라 내부의 정보를 필요로 하는 과학적 시뮬레이션을 위해서는 표면모델이 아닌 솔리드모델링(Solid Modeling)이 필요하다. 이 경우에 폴리곤으로 구성된 표면 모델로부터 볼륨 객체를 생성하기 위한 복셀화(voxelization) 과정이 필요한데, 표면모델링 객체를 대상으로 하는 복셀화에 관한 연구가 국내외적으로 다양하게 진행되어 왔다[1-6]. 지금까지 제시된 연구 결과를 살펴보면, 객체의 모양이나 해상도에 따라 복셀화 과정에서 발생되는 다양한 문제로 인해 완벽하게 볼륨 객체를 생성하지 못하는 경우가 있음을 확인할 수 있었다. 기존의 제안된 방법에서는 고밀도의 폴리곤 모델에 관한 복셀화 과정이나 저해상도 복셀화 과정에서, 객체를 구성하는 폴리곤들 간의 간격보다 복셀의 크기가 큰 경우에는 내부 복셀화 과정에서 영역 채우기 오류가 발생할 수 있다. 그 외에도 고해상도의 복셀화 수행 시에는 해상도가 높아짐에 따라 계산량 및 처리시간의 증가가 기하급수적으로 일어나게 된다. 또한, 계산과정에서 필요한 정보를 저장하기 위한 메모리 사용량의 증가로 인해 범용 컴퓨터에서 고해상도의 복셀화 수행이 사실상 어렵다.
표면 객체(surface object)에 대한 고해상도 복셀화 과정에서 발생할 수 있는 이러한 문제점들을 해결하기 위한 방안을 본 연구에서 제안하고자 한다. 본 복셀화 계산 시의 메모리 사용량 문제를 해결하기 위해 계산된 복셀 정보를 저장할 수 있는 바이너리(Binary) 형태의 파일을 복셀화를 위한 계산 전에 미리 생성하여 복셀화 과정 중 산출되는 정보를 저장하도록 제안한다. 내부 복셀화 수행 시에 발생하는 영역 채우기 오류를 보완하기 위한 방안으로는 3차원의 각 축별로 생성된 내부 복셀화 정보를 병합하여 완벽한 내부 복셀화가 가능하도록 한다. 또한 처리시간을 단축시키기 위한 방안으로 파일을 처리함에 있어서 다중 스레드(Multi-Thread)를 이용한 병렬처리 방안을 제안한다.
2. 복셀화 기법
복셀화는 우선 3차원 모델의 삼각 폴리곤과 육면체의 교차 판정을 이용하여 표면 복셀화(Surface Voxelization)를 수행하고, 표면 복셀화 정보를 이용한 내부 공간을 채우는 내부 복셀화(Inner Voxelization)를 수행한다.
2.1 표면 복셀화
폴리곤으로 구성된 3차원 모델을 내부 복셀화하기 위해서는 표면 복셀화를 우선적으로 수행한다. 이를 위해 3차원 모델의 가로, 세로, 높이에 해당하는 3개의 축 중에서 한 개를 기준 축으로 할당하여 해상도를 설정하며, 복셀의 크기는 식(1)과 같이 정의할 수 있다.
여기서, Vsize는 복셀의 크기, αSelect는 선택된 축의 크기, ϵResolution는 적용 해상도로 나타낸다.
3차원 모델은 수많은 폴리곤으로 구성되며 일반적으로 한 개의 면은 삼각형 형태로 구성된다. 또한 복셀은 3차원 상에서 육면체로 구성된다. 따라서 표면에 대한 복셀화는 3차원 상의 삼각형과 육면체의 교차 여부를 판별하여 교차가 일어나는 위치에 객체 표면에 대한 복셀을 생성한다.
삼각형 형태의 폴리곤과 교차하는 복셀을 판별하기 위해서는 우선 삼각형을 구성하는 3개의 정점에 해당하는 x, y, z 축의 최대 최소값을 추출하여 사각영역을 생성한다. 생성된 사각 영역을 복셀 크기로 분할하여 육면체를 만들고, Tomas[7]가 제안하는 삼각형 형태의 폴리곤과 교차 판별 알고리즘을 적용하여 Fig. 1에서와 같이 표면 복셀을 추출한다.
Fig. 1.Intersection Test of Triangle and Box.
2.2 내부 복셀화
표면 복셀화가 완료되면 복셀화 된 객체의 내부를 채우는 내부 복셀화를 수행한다. 내부 복셀화 수행시에는 3차원 상의 각 축 별로 주사선 알고리즘(Scan line algorithm)을 적용하여 내부를 복셀로 채우게 된다. 빠른 내부 복셀화를 위해 단방향으로 내부를 채우는 방법을 사용할 수 있지만, 이런 경우 복셀화 수행 시에 설정하는 해상도 또는 복셀화를 수행하는 3차원 모델의 형태에 따라 내부를 채우지 않아야 할부분도 채워지는 경우가 발생한다. 예를 들면, Fig. 2에서와 같이 내부가 비어있는 3차원 모델의 단면에 대해 내부 복셀화 과정에서 내부가 채워지는 문제가 발생 할 수 있다. 이러한 경우를 방지하기 위해 본 연구에서는 각 축 별로 내부 복셀화를 수행한 후에 3축(x, y, z)의 모든 방향에 대해 중복 검출되는 복셀에 대해서만 내부 복셀로 간주한다.
Fig. 2.Problem with a one-way solid voxelization.
3. 파일 및 병렬 처리
3차원 모델을 복셀화 하는 경우 복셀 입자의 크기를 설정하는 해상도에 따라 계산량 및 메모리 사용량이 클 수 있다. 계산량은 생성하고자 하는 복셀의 크기가 작아짐에 따라서 기하급수적으로 수행시간이 증가할 수 있으며 메모리 사용량은 수행하는 컴퓨터의 사용 가능한 메모리를 초과하여 오류를 발생 시킬 수 있다. 본 연구에서는 이 두 가지 문제를 해결하기 위해 복셀화를 수행하는 컴퓨터의 스레드를 최대한 활용하는 병렬 처리로 계산 시간을 단축하고, 파일처리를 통해 계산에 사용되는 데이터를 바이너리 파일로 저장하여 메모리 사용량을 최소화 한다.
3.1 파일 처리
복셀화 과정에서 사용되는 바이너리 파일은 복셀 정보를 1 바이트(Byte)의 부울(Bool) 형태로 저장한다. 복셀 정보를 비트 단위로 저장하면 파일 크기를 줄일 수 있겠지만 파일 위치 정보 색인 시의 처리 효율성을 위해 1바이트 단위로 저장한다.
파일의 크기는 복셀화 수행 시에 설정된 해상도 및 사용되는 스레드 수에 따라 결정 된다. 하지만 병렬 처리를 위해 다중 스레드를 사용하는 경우에는 한 개의 파일에 대해 읽기는 다중 처리가 가능하고 쓰기는 다중 처리가 불가능하다. 이를 위해 사용되는 스레드 수만큼 파일을 분할하여 사용하고 계산 완료 후 병합한다. 또한 파일의 분할 및 병합 그리고 파일 위치 색인 계산 시의 빠른 처리를 위해 스레드 수로 분할되는 축(z-축)의 계산되는 해상도를 파일 생성시에만 스레드의 배수로 설정하여 파일의 크기를 결정 한다. 병렬 처리 시에 사용되는 분할 파일의 크기는 식 (2)와 같이 정의 할 수 있으며, 최종적으로 병합된 파일의 크기는 식 (3)과 같이 정의 할 수 있다.
여기서, PSize은 병렬 처리 시에 사용되는 분할 바이너리 파일의 크기, αx는 x축의 크기, αy는 y축의 크기, αz는 z축의 크기, βz 스레드의 배수로 설정된 z축의 크기, Tcnt는 사용되는 스레드의 개수, FSize는 병합된 파일의 크기로 나타내며, V_Size는 식(1)에서 정의한 복셀의 크기이다.
Fig. 3은 표면과 내부 복셀화 계산 시에 분할되어 사용된 바이너리 파일을 하나의 파일로 병합하는 형태를 나타내며, 분할 시의 축 방향으로 동일하게 병합하여 파일 위치 정보의 색인 처리 시에 효율성을 높였다.
Fig. 3.Merging of the split files.
3.2 병렬 처리
복셀화를 병렬 처리 할 경우에는 사용되는 스레드 수 만큼 false(0x00)으로 초기화된 바이너리 파일을 생성한다. 또한 Fig. 4에서와 같이 스레드 수 만큼 계산 영역을 분할하여 각 영역의 복셀화 계산 시에 연동된 바이너리 파일을 사용하고, 복셀 정보로 판별된 위치 정보에 해당하는 연동된 바이너리 파일 위치에 true(0×01) 값을 덮어쓰기 한다.
Fig. 4.Save file by parallel processing.
표면 복셀화 계산 시에 각 스레드에서는 3차원 모델의 폴리곤 정보를 읽어 들여 자신의 계산 영역의 폴리곤 정보인지 판별 후 표면 복셀화 작업을 수행하며, 교차 판별된 복셀 정보는 연동된 바이너리 파일에 적용한다.
내부 복셀화 계산 시에 각 스레드에서는 자신의 계산 영역의 정보를 병합된 표면 복셀화 파일에서 읽어 들여 내부 채우기 계산을 수행하며 채우기로 판별된 복셀 정보는 연동된 바이너리 파일에 적용한다.
각 축 별로 내부 복셀화 계산이 완료되면 최종 내부 복셀화 파일을 생성하기 이전과 동일한 방식으로 분할된 바이너리 파일을 생성하고 각 스레드 영역에서 각 축별 내부 복셀화 병합 파일의 동일 위치 해당하는 값의 중복 여부를 판별하여 연동된 바이너리 파일에 적용하고, 각 스레드의 계산이 완료되면 분할된 바이너리 파일을 병합하여 최종 내부 복셀화 파일을 생성한다.
4. 구현 결과
시험 환경은 CPU(Intel i7-2600 3.4Ghz, 8 Threads), 메모리(4GB), 하드 디스크(1TB, 7200 rpm)를 가진 개인용 컴퓨터에서 Visual C++로 내부 복셀화 프로그램을 구현하여 수행하였다. 시험 데이터는 Princeton Shape Benchmark(PSB)의 3차원 모델 중 5개를 선택하여 사용하였다. 시험에 사용된 객체에 대한 정보는 Table 1과 같으며 모델의 형상은 Table 2와 같다[8].
Table 1.Experimental datum
Table 2.Polygonal 3D View of the Experimental Datum
구현된 프로그램을 이용한 복셀화 시험은 해상도를 결정하는 기준 축은 x축, 해상도는 250, 사용하는 스레드 수는 8개로 설정하여 수행하였다.
Table 3은 복셀화 수행 완료 후의 시험 모델별 정보를 나타낸다. 기준 축을 x축으로 설정하여 수행하였기 때문에 x축에 해당하는 해상도는 동일하며 y축과 z축은 크기에 비례하여 해상도가 설정된 것을 확인 할 수 있다. 표면 복셀의 수는 외부에 노출되는 복셀의 수를 나타낸다. 내부 복셀 수는 표면 복셀 정보를 이용한 내부 복셀화 수행 후의 복셀의 수를 나타낸다. 전체 복셀 수는 전체 복셀 데이터 수를 나타내며 파일 크기는 생성되는 파일의 크기를 나타낸다. 또한 파일의 크기는 식 (3)이 적용되었기 때문에 각축별 해상도의 곱의 값과 다를 수 있다. 여기서, 전체 복셀 수와 파일 크기는 32만큼 차이가 발생하게 되는데 복셀화 파일 생성 시에 파일 끝에 각 축의 해상도 및 내부 복셀 수를 각 unsigned int(2 Byte) 형식으로 저장하여 복셀화 파일 사용 시에 활용할 수 있도록 하였다.
Table 3.The Results of Voxelization
Fig. 5는 시험 환경에서 구현된 프로그램을 이용하여 복셀화 수행시의 CPU 및 메모리 사용 현황을 나타낸다. CPU 사용 현황은 모든 스레드가 CPU 사용률 90% 이상임을 확인 할 수 있다. 또한 메모리 사용 현황은 복셀화 수행 전과 수행 중의 사용량의 변화가 대체로 없음을 확인 할 수 있다.
Fig. 5.CPU and memory usage information.
Table 4는 내부 복셀화가 완료된 시험 모델들의 각 축별 중심 기준의 단면도를 나타낸다. m110 모델과 m374 모델의 경우 각 축별 중심 단면의 형태가 복잡하지 않고 공백이 발생하는 부분의 없다. 하지만 m23 모델의 z축과 m329 모델의 x축의 경우 중심 단면의 형태가 복잡하고 단면에 나타나는 폴리곤들 간의 다수의 공백 발생으로 인한 단방향 복셀화 수행시에 문제가 나타날 수 있는 부분들에 대해 내부 복셀화에 의한 채우기가 정확하게 수행된 것을 확인할 수 있다. 또한 m1601 모델의 x축과 y축의 중심단면의 결과를 통해 체스말의 상단의 공백 처리가 정확하게 수행 된 것을 확인 할 수 있다. 다음의 결과를 통해 본 연구에서 제시한 내부 복셀화 방안을 이용한 시험에 사용된 모든 모델에 대한 내부 복셀화가 확실하게 수행된 것을 알 수 있다.
Table 4.The Sectional View of Voxelization Result
5. 결 론
본 연구는 폴리곤으로 구성된 3차원 모델을 고해상도로 내부 복셀화하기 위한 것이다. 이를 위해서 표면 복셀화를 수행하여 3차원 모델의 표면 정보를 추출하고 이 정보를 기초로 내부 복셀화를 수행하였다. 내부 복셀화 수행 시에는 각 축 방향으로 내부 복셀화 계산된 정보를 병합하여 사용함으로써 복잡한 형태의 3차원 모델을 다양한 해상도에서도 완벽하게 내부 복셀화를 수행할 수 있게 되었다. 표면 및 내부 복셀화 계산 시에는 추출되는 복셀 정보를 바이너리 파일로 저장함으로써 컴퓨터의 메모리 사용량을 줄여 저사양 컴퓨터에서도 고해상도의 복셀화를 수행할 수 있었다. 또한 복셀화 계산 시에 다중 스레드를 이용한 병렬 처리를 적용하여 처리시간을 단축시킬 수 있는 방안을 제시하였다.
본 연구를 통해 생성된 파일 형태의 고해상도 복셀 정보는 다양한 분야에 적용 가능할 것으로 예상할 수 있다. 예를 들어, 물체를 구성하는 물질을 복셀 정보로 설정하고 물체의 형태를 3차원 폴리곤 모델로 구현하여 복셀화를 수행한다. 복셀화가 완료된 물체 정보를 이용하여 복셀(구성 물질)의 위치에 따른 물성변화를 예측하는 분야에 사용한다면 다양한 연구가 가능할 것으로 예상된다.
References
- A.M. Kim and J.W. Song, “A Method for Multi-Resolutional Voxelization,” Korean Institute of Information Technology Magazine, Vol. 10, No 6, pp. 201-206, 2012.
- O.B. Gwun, “A Voxelization for Geometrically Defined Objects using Cutting Surfaces of Cubes,” Journal of Information Processing Systems, Vol. 10-A, No. 2, pp. 157-164, 2003.
- L. Zhang, W. Chen, D.S. Ebert, and Q. Peng, “Conservative Voxelization,” Journal of The Visual Computer, Vol. 23, No. 9-11, pp. 783-792, 2007. https://doi.org/10.1007/s00371-007-0149-0
- B. Reitinger, A. Bornik, and R. Beichel, “Efficient Volume Measurement using Voxelization,” Proceeding of Conference on Computer Graphics, pp. 47-54, 2003.
- D. Cohen-Or and A. Kaufman, "Fundamentals of Surface Voxelization," Graphical Models and Image Processing, Vol. 57, No. 6, pp. 453-461, 1995. https://doi.org/10.1006/gmip.1995.1039
- B.H. Lee, H.W. Kye, Y.G. Shin, "Fast MultiGPU based 3D Backprojection Method," Journal of Korea Multimedia Society, Vol. 12, No. 2, pp. 209-218, 2009.
- T. Akenine-Möller, “Fast 3D Triangle- box Overlap Testing,” Journal of Graphics Tools, Vol. 6, pp. 29-33, 2001. https://doi.org/10.1080/10867651.2001.10487535
-
Princeton Shape Benchmark(2003).
http://shape.cs.princeton.edu/benchmark/(accessed Oct., 6, 2014).