KR101670930B1 - 하드웨어를 이용한 케이디 트리 생성 방법 및 장치 - Google Patents

하드웨어를 이용한 케이디 트리 생성 방법 및 장치 Download PDF

Info

Publication number
KR101670930B1
KR101670930B1 KR1020100044243A KR20100044243A KR101670930B1 KR 101670930 B1 KR101670930 B1 KR 101670930B1 KR 1020100044243 A KR1020100044243 A KR 1020100044243A KR 20100044243 A KR20100044243 A KR 20100044243A KR 101670930 B1 KR101670930 B1 KR 101670930B1
Authority
KR
South Korea
Prior art keywords
data
list
node
generating
cost
Prior art date
Application number
KR1020100044243A
Other languages
English (en)
Other versions
KR20110124834A (ko
Inventor
고영인
김도균
이태현
안민수
박우찬
김동석
Original Assignee
삼성전자주식회사
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 삼성전자주식회사 filed Critical 삼성전자주식회사
Priority to KR1020100044243A priority Critical patent/KR101670930B1/ko
Publication of KR20110124834A publication Critical patent/KR20110124834A/ko
Application granted granted Critical
Publication of KR101670930B1 publication Critical patent/KR101670930B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F30/00Computer-aided design [CAD]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4494Execution paradigms, e.g. implementations of programming paradigms data driven
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/451Execution arrangements for user interfaces
    • G06F9/453Help systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06QINFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
    • G06Q10/00Administration; Management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Business, Economics & Management (AREA)
  • Human Resources & Organizations (AREA)
  • Evolutionary Computation (AREA)
  • Human Computer Interaction (AREA)
  • Computer Hardware Design (AREA)
  • Economics (AREA)
  • Entrepreneurship & Innovation (AREA)
  • Geometry (AREA)
  • Marketing (AREA)
  • Strategic Management (AREA)
  • Quality & Reliability (AREA)
  • Operations Research (AREA)
  • Tourism & Hospitality (AREA)
  • General Business, Economics & Management (AREA)
  • Image Generation (AREA)

Abstract

하드웨어를 이용하여 케이디 트리를 생성하는 방법 및 장치를 제공한다. 하드웨어를 이용한 케이디 트리 생성 장치는 리스트 데이터의 인덱스(index)를 참조하여 메모리로부터 트라이앵글 데이터를 읽어오고, 상기 트라이앵글 데이터에 기초하여 SAH 방식으로 현재 노드의 코스트가 최소가 되는 위치를 찾는 코스트 계산부, 상기 코스트 계산부에 의하여 상기 코스트가 최소가 되는 위치를 찾으면 상기 계산된 위치를 기준으로 상기 리스트 데이터의 좌우를 분류하는 좌우 분류부, 상기 코스트 계산부에 의하여 상기 코스트가 최소가 되는 위치를 찾지 못하면, 리프(Leaf) 노드를 생성하고, 스택에 대한 팝 연산에 기초하여 내부 노드를 생성하는 트리 생성부를 포함한다.

Description

하드웨어를 이용한 케이디 트리 생성 방법 및 장치{APPARATUS AND METHOD FOR GENERATING KD-TREE USING HARDWARE}
기술분야는 레이 트레이싱(Ray tracing)을 위한 가속 구조인 케이디 트리를 생성하는 방법 및 장치에 관한 것이다.
레이 트레이싱 방식은 전역 조명(global illumination)에 따른 렌더링 방식이다. 전역 조명을 따른 다는 것은 다른 물체에서 반사되거나 굴절된 빛도 현재 물체의 영상에 영향을 준다는 것을 의미한다. 따라서, 레이 트레이싱 방식은 빛이 진행하면서 물체에 부딪힘에 따라 발생하는 반사, 굴절, 그림자 효과가 자연적으로 제공되기 때문에 현실감 있는 3D 영상을 생성할 수 있다.
레이 트레이싱을 수행하기 위해서는 현재 영상의 전체 지오메트리 데이터(geometry data)를 가지고 생성된 케이디 트리나 BVH 같은 가속 구조(acceleration structure)가 요구된다. 따라서, 레이 트레이싱을 수행하기 이전에 가속 구조를 생성해야 한다.
지금까지 가속 구조 중에서 케이디 트리(Kd-tree)를 고속으로 생성하는 방식은 소프트웨어에 기반하여 이루어졌다. 즉, CPU에서 케이디 트리 생성에 필요한 연산을 담당하였다. 그러나 소프트웨어 기반으로 케이디 트리를 고속으로 생성하는 방식은 아직까지 연산량이 많기 때문에 실시간 처리가 매우 어렵다.
일 측면에 있어서, 하드웨어를 이용한 케이디 트리 생성 장치는 리스트 데이터의 인덱스(index)를 참조하여 메모리로부터 트라이앵글 데이터를 읽어오고, 상기 트라이앵글 데이터에 기초하여 SAH 방식으로 현재 노드의 코스트가 최소가 되는 위치를 찾는 코스트 계산부, 상기 코스트 계산부에 의하여 상기 코스트가 최소가 되는 위치를 찾으면 상기 계산된 위치를 기준으로 상기 리스트 데이터의 좌우를 분류하는 좌우 분류부, 상기 코스트 계산부에 의하여 상기 코스트가 최소가 되는 위치를 찾지 못하면, 리프(Leaf) 노드를 생성하고, 스택에 대한 팝연산에 기초하여 내부 노드를 생성하는 트리 생성부를 포함한다.
다른 일 측면에 있어서, 하드웨어를 이용한 케이디 트리 생성 장치는 상기 좌우로 분류된 리스트 데이터가 메모리에 저장되면, 현재 노드 상태(current node status)를 스택에 푸쉬하고, 현재 노드 어드레스(current node address)를 증가시키는 주 제어부를 더 포함할 수 있다.
상기 주 제어부는 상기 코스트 계산부에서 계산된 코스트를 전달받아 좌우 분류부에 제공할 수 있다.
상기 주 제어부는 상기 트리 생성부에 노드 데이터, 리스트의 인덱스 데이터 및 리프 노드에 속하는 트라이앵글의 수를 제공할 수 있다.
상기 코스트 계산부는 현재 노드에 대한 코스트 계산시 필요한 상수 데이터를 생성하는 셋업부, 상기 현재 노드의 스플릿 데이터를 메모리로부터 불러와 버퍼에 저장하는 제1 메모리 제어부, 상기 버퍼에 저장된 스플릿 데이터의 스타트 값과 엔드 값을 비교하면서 정렬된 순서대로 계산부에 전달하는 스플릿 판독부 및 상기 셋업부에서 생성된 상기 상수 데이터와 상기 스플릿 판독부에서 전달된 스플릿 데이터를 가지고 SAH를 적용하여 코스트를 계산하는 계산부를 포함할 수 있다.
상기 좌우 분류부는 소정의 트라이앵글들의 인덱스 데이터를 메모리로부터 불러와 인덱스 버퍼에 저장하고, 상기 인덱스 데이터와 상기 인덱스에 해당하는 트라이앵글 데이터를 순차적으로 분류부에 전달하는 제2 메모리 제어부, 상기 전달 받은 트라이앵글 데이터가 상기 계산된 코스트의 왼쪽 또는 오른쪽에 위치하는지를 판단하는 분류부, 상기 판단된 트라이앵글 데이터의 인덱스를 리스트 버퍼에 순차적으로 저장하는 리스트 저장부 및 상기 리스트 버퍼에 저장된 인덱스를 상기 메모리에 저장하는 메모리 저장부를 포함할 수 있다.
상기 트리 생성부는 주 제어부에서 입력되어 노드 버퍼에 저장된 노드 데이터를 상기 메모리에 저장하는 노드 메모리 제어부, 상기 주 제어부로부터 입력된 상기 리프 노드에 대한 리스트의 인덱스 데이터와 상기 리프 노드에 속하는 트라이앵글의 수에 기초하여 리스트를 생성하는 리스트 생성부 및 상기 생성된 리스트에 있는 상기 트라이앵글의 수만큼 인덱스 데이터를 상기 메모리에 저장하는 리스트 메모리 제어부를 포함할 수 있다.
또 다른 일 측면에 있어서, 하드웨어를 이용한 케이디 트리 생성 장치는 메모리로부터 트라이앵글로 구성된 화면 데이터(scene data)를 불러오는 로딩부, 상기 트라이앵글 데이터에 매트릭스 데이터를 적용하여 변환(transform)시키는 변환부, 상기 변환된 전체 트라이앵글 데이터에 대하여 x, y, z 로 이루어지는 3개의 축을 기준으로 스타트 값과 엔드 값을 가진 리스트 데이터를 생성하는 리스트 데이터 생성부, 상기 리스트 데이터의 스타트 값과 엔드 값을 상기 트라이앵글의 인덱스를 기준으로 정렬하는 리스트 데이터 정렬부를 더 포함할 수 있다.
또 다른 일 측면에 있어서, 하드웨어를 이용한 케이디 트리 생성 장치는 상기 좌우 분류기에서 리스트 데이터가 좌우로 분류되면 현재 노드 상태가 푸쉬되고, 상기 트리 생성부에서 상기 리프 노드 생성 후 팝 연산의 대상이 되는 스택을 더 포함할 수 있다.
일 측면에 있어서, 하드웨어를 이용한 케이디 트리 생성 방법은 메모리로부터 리스트 데이터와 트라이앵글 데이터를 읽어오는 단계, 상기 리스트 데이터 및 트라이앵글 데이터에 대하여 SAH 방식으로 현재 노드의 코스트가 최소가 되는 위치를 찾는 단계, 상기 코스트가 최소가 되는 위치를 찾으면, 상기 코스트가 최소가 되는 위치를 기준으로 상기 리스트 데이터 및 트라이앵글 데이터의 좌우를 분류하는 단계, 상기 좌우 분류를 마치면 현재의 노드 상태를 스택에 푸쉬(push)하는 단계, 상기 코스트가 최소가 되는 위치를 찾지 못하면, 현재 리스트 데이터와 현재 리스트 어드레스를 메모리에 저장하고, 현재의 트라이앵글 수만큼 현재 리스트 어드레스를 증가시키는 단계, 상기 현재 리스트 어드레스 증가시킨 후, 리프 노드 데이터를 생성하는 단계, 상기 리프 노드 데이터 생성 후, 상기 스택에서 팝(pop) 연산을 수행하는 단계, 상기 팝 연산 결과 엠프티(empty)가 아니면 내부 노드 데이터를 생성하는 단계 및 상기 팝 연산 결과가 엠프티이면, 노드 생성을 종료하는 단계를 포함한다.
하드웨어를 이용하여 케이디 트리를 생성함으로써 레이 트레이싱 방식으로 역동적인 영상을 지원할 수 있다.
또한, 하드웨어로 모듈화하여 케이디 트리를 생성하므로 모바일 기기에 사용할 수 있다.
또한, 소프트웨어 방식에 비해 하드웨어를 이용함으로써 케이디 트리를 생성하는 시간을 감소시킬 수 있다.
또한, 하드웨어를 이용하여 케이디 트리를 고속으로 생성할 수 있으므로 실시간으로 변화하는 역동적인 영상이 지원되어야 하는 3D 게임이나 3D유저 인터페이스에 사용할 수 있다.
도 1은 레이 트레이싱의 처리과정을 나타낸 일예시도이다.
도 2는 일반적인 케이디 트리의 전체 구성도이다.
도 3은 일측에 따른 하드웨어를 이용한 케이디 트리 생성 장치의 블록도이다.
도 4는 일측에 따른 하드웨어를 이용한 케이디 트리 생성 장치를 좀 더 구체적으로 나타낸 블록도이다.
도 5는 일측에 따른 하드웨어를 이용한 케이디 트리 생성 장치에서 소프트웨어를 이용하는 부분을 나타낸 블록도이다.
도 6은 일측에 따른 코스트 계산부의 블록도이다.
도 7은 일측에 따른 좌우 분류부의 블록도이다.
도 8은 일측에 따른 트리 생성부의 블록도이다.
도 9는 일측에 따른 하드웨어를 이용한 케이디 트리 생성 방법의 흐름도이다.
도 10은 일측에 따른 케이디 트리의 노드가 생성되는 순서를 나타낸 도면이다.
이하, 일측에 따른 실시예를 첨부된 도면을 참조하여 상세하게 설명한다.
도 1은 레이 트레이싱의 처리과정을 나타낸 일예시도이다.
도 1을 참조하면 레이 트레이싱(ray tracing) 방식은 먼저 카메라에 담고자 하는 영상에 있어서, 카메라로 보이는 화면의 각 픽셀마다 카메라의 위치에서 primary ray를 생성하고, primary ray와 만나는 물체를 찾기 위한 계산을 수행한다. primary ray와 만나게 된 물체가 반사나 굴절의 성질이 있으면 primary ray와 물체가 만난 위치에서 반사 효과를 나타내는 reflection ray나 굴절 효과를 나타내는 refraction ray가 생성된다. 또한, primary ray와 물체가 만난 위치에서 그림자 효과를 나타내기 위하여 빛의 광원 방향으로 shadow ray가 생성될 수 있다. 이때, shadow ray와 어떤 물체가 만나면 그림자가 생성이 되며 만나지 않는 경우에는 그림자가 생성되지 않는다. Reflection ray와 refraction ray는 secondary ray라고 불리며 각각 자신과 만나는 물체를 찾기 위한 계산을 수행한다. 이러한 과정은 반복하여 재귀적으로 발생한다.
레이 트레이싱(Ray tracing)을 수행하기 위해서는 먼저 전체 지오메트리 데이터(geometry data)를 가지고 생성된 kd-tree나 BVH와 같은 가속 구조(acceleration structure)가 필수적으로 요구된다. 여기서 지오메트리 데이터는 트라이앵글의 좌표들로 구성이 될 수 있다. 따라서, 레이 트레이싱을 수행하기 이전에 가속 구조를 생성해야 된다.
도 2는 일반적인 케이디 트리의 전체 구성도이다.
도 2를 참조하면, 케이디 트리(KD-Tree)는 분할한 공간에 대하여 계층(hierarchy) 구조를 갖는 2진 트리(binary tree)이다. 케이디 트리는 내부 노드(inner node, 최상위 노드 포함)와 리프 노드(leaf node)로 구성된다. 리프 노드는 노드와 교차되는 오브젝트들을 포함하고 있는 공간이다. 오브젝트는 지오메트리 데이터를 가지고 있어서 영상을 구성하는 최소단위로서 트라이앵글로 이루어질 수 있다. 반면 내부 노드는 바운딩 박스(bounding box)기반의 공간을 가지고 있다. 바운딩 박스는 다시 2개의 영역으로 나뉘어서 두 개의 하위 노드에 할당 된다. 결국 내부 노드는 분할 평면과 분할 평면을 통해 나누어진 두 개 영역의 서브 트리(sub-tree)로 구성되고, 리프 노드는 일련의 트라이앵글들 만을 포함 하게 된다. 공간을 분할하는 위치 p는 임의의 ray와 충돌하는 트라이앵글을 찾기 위한 코스트(노드 방문 횟수, 트라이앵글과 교차되는지 계산하는 횟수 등)가 최소가 되는 지점이다. 현재 코스트가 최소가 되는 지점인 공간을 분할하는 위치 p를 찾기 위해 가장 많이 사용하는 방법은 SAH(Surface area heuristic)이다.
도 3은 일측에 따른 하드웨어를 이용한 케이디 트리 생성 장치의 블록도이다. 
도 3을 참조하면, 일측에 따른 하드웨어를 이용한 케이디 트리 생성 장치는 코스트 계산부(310), 좌우 분류부(320), 트리 생성부(330)를 포함한다.
코스트 계산부(310)는 리스트 데이터의 인덱스(index)를 참조하여 메모리로부터 트라이앵글 데이터를 읽어오고, 트라이앵글 데이터에 기초하여 SAH 방식으로 현재 노드의 코스트가 최소가 되는 위치를 찾는다. 즉, 코스트 계산부(310)는 현재 노드의 전체 트라이앵글에 대한 코스트를 계산함으로써, 현재 노드의 코스트가 최소가 되는 위치를 찾을 수 있다. 코스트 계산부(310)는 현재 노드에 대해서 메모리에 저장된 리스트 데이터 및 인덱스 데이터를 읽어온다. 리스트 데이터는 트라이앵글 각각의 인덱스로 구성되어 있으므로, 리스트 데이터의 인덱스를 참조하여 트라이앵글 데이터를 읽어올 수 있다. 현재 노드를 구성하는 전체 트라이앵글에 대해 순차적으로SAH(Surface Area Heuristic)방식을 적용하면 노드 방문 및 트라이 앵글을 탐색하기 위해 필요한 연산량이 최소가 되는, 즉 코스트가 최소가 되는 위치 p를 계산하여 찾을 수 있다.
또한, 좌우 분류부(320)는 코스트 계산부(310)에 의하여 코스트가 최소가 되는 위치를 찾으면 계산된 위치 p를 기준으로 리스트 데이터의 좌우를 분류한다. 좌우 분류부(320)는 코스트 계산부(310)에 의해 코스트가 최소가 되는 위치, 즉 분할평면을 찾으면 분할평면을 기준으로 리스트 데이터의 좌우를 분류한다. 좌우 분류부(320)는 리스트 데이터를 좌우로 분류함으로써, 현재 노드를 왼쪽 노드와 오른쪽 노드로 분류할 수 있다.
리스트 데이터는 x, y, z 3가지 축을 기준으로 추출된 각 트라이앵글의 스타트 값과 엔드 값으로 구성되므로 6개의 리스트 데이터가 생성된다. 즉, x축을 기준으로 한 스타트 값의 리스트 데이터, x축을 기준으로 한 엔드 값의 리스트 데이터 등 x, y, z 3가지 축에 대해 6개의 리스트 데이터가 생성된다. 따라서, 좌우 분류부(320)에 의해 좌우로 분류된 각 왼쪽 노드와 오른쪽 노드에는 각각 6개의 리스트 데이터가 생성된다.
또한, 트리 생성부(330)는 코스트 계산부(310)에 의하여 코스트가 최소가 되는 위치를 찾지 못하면, 리프(Leaf) 노드를 생성하고, 스택에 대한 팝 연산에 기초하여 내부 노드를 생성한다. 코스트 계산부(310)는 좌우 분류부(320)에 의해 분류된 왼쪽 노드에 대해 반복하여 코스트를 계산하고, 코스트 값이 계산되면, 좌우 분류부(320)는 계산된 값을 기준으로 다시 노드의 좌우를 분류한다. 이렇게 반복하여 코스트를 계산하고, 좌우를 분류하다 보면 코스트가 계산되지 않는 왼쪽 노드에 이르게 된다. 이때, 코스트가 계산되지 않는 왼쪽 노드를 리프 노드라고 하며, 트리 생성부(330)는 리프 노드에 해당되는 리스트 데이터 및 노드를 메모리에 생성 및 저장시킨다.
트리 생성부(330)는 현재 리프 노드의 6개 리스트 데이터 중 1개와 현재 리스트 어드레스를 메모리에 저장하고, 현재 리프 노드에 있는 트라이앵글의 수만큼 현재 리스트 어드레스를 증가시킨다. 또한, 트리 생성부(330)는 리프 노드를 생성하여 메모리에 저장하고 현재 노드 어드레스를 1만큼 증가시킨다. 리프 노드가 생성되면 주 제어부는 스택에 대하여 팝 연산을 수행한다. 팝 연산 결과 스택에서 노드 데이터가 팝 되면 트리 생성부(330)는 팝 된 노드를 내부 노드로 생성하고, 이때 내부 노드 데이터는 x, y, z 3개의 축 중에 어느 축에 해당하는 지를 나타내는 축 정보, 해당 축에 대한 코스트 값과 오른쪽 자식 노드의 어드레스 값, 즉 포인터 정보를 가지고 있다.
코스트 계산부(310), 좌우 분류부(320), 트리 생성부(330) 각각은 FPGA와 같은 모듈로 제작되어 하드웨어에 장착될 수 있다. 따라서, 케이디 트리를 하드웨어를 이용하여 생성함에 따라 고속으로 생성할 수 있고, 실시간으로 변화하는 역동적인 영상의 지원이 가능하다.
도 4는 일측에 따른 하드웨어를 이용한 케이디 트리 생성 장치를 좀 더 구체적으로 나타낸 블록도이다. 
도 4를 참조하면, 일측에 따른 하드웨어를 이용한 케이디 트리 생성 장치는 주 제어부(410), 스택(420), 메모리 인터페이스(430), 메모리(440)를 포함할 수 있다.
주 제어부(410)는 좌우로 분류된 리스트 데이터가 메모리에 저장되면, 현재 노드 상태(current node status)를 스택에 푸쉬하고, 현재 노드 어드레스(current node address)를 증가시킬 수 있다. 여기서 현재 노드 상태는 노드 데이터(mode data)와 오른쪽 자식 노드를 생성하기 위한 정보인 상태 데이터(status data)를 포함한다. 노드 데이터는 코스트 값과 오른쪽 자식 노드의 메모리 주소를 포함하고, 상태 데이터는 오른쪽 자식 노드의 바운딩 박스 데이터, 트라이앵글 수, 리스트 데이터의 메모리 주소를 포함한다. 또한, 주 제어부(410)는 리프 노드 데이터 생성 후 스택에서 팝 연산을 수행하고, 스택에 노드 데이터가 저장되어 있다면 팝 된 노드 데이터를 내부 노드로 생성하여 트리 생성부(330)에 전달 할 수 있다.
또한, 스택(420)은 좌우 분류기(320)에서 리스트 데이터가 좌우로 분류되면 현재 노드 상태가 푸쉬되고, 트리 생성부(330)에서 리프 노드 생성 후 팝 연산의 대상이 될 수 있다. 일측에 따른 하드웨어를 이용한 케이디 트리 생성 장치는 스택(420)을 이용한다. 스택은 LIFO구조이므로 좌우가 더 이상 분류되지 않는 리프 노드에서 리프 노드 생성 후 팝 연산을 통해 내부 노드 데이터를 제공할 수 있다.
또한, 메모리 인터페이스(430)는 코스트 계산부(310), 좌우 분류부(320) 및 트리 생성부(330)를 메모리에 연결하여 메모리로부터 데이터를 읽어오고, 메모리에 데이터를 저장할 수 있게 하는 통로 역할을 한다.
또한, 메모리(440)는 원본 영상(original scene) 데이터(441), 트리(노드/리스트)데이터(443), 정렬된 데이터(445)를 포함할 수 있다. 원본 영상 데이터(441)는 원본 영상을 구성하는 각 트라이앵글로 이루어진 데이터이고, 트라이앵글 데이터는 리스트 데이터를 생성하는데 사용된다. 트리(노드/리스트)데이터(443)는 트리 생성부(330)에서 생성된 노드 및 리스트 데이터가 저장되어 있는 것이다. 정렬된 데이터(445)는 각 트라이앵글이 x, y, z 3축을 기준으로 스타트 값과 엔드 값으로 정렬된 스타트 값/엔드 값 데이터 및 각 트라이앵글에 인덱스를 부여한 인덱스 데이터를 포함한다.
도 5는 일측에 따른 하드웨어를 이용한 케이디 트리 생성 장치에서 소프트웨어를 이용하는 부분을 나타낸 블록도이다.
도 5를 참조하면, 소프트웨어를 이용하는 부분은 로딩부(510), 변환부(520), 리스트 데이터 생성부(530), 리스트 데이터 정렬부(540)를 포함할 수 있다.
하드웨어를 이용한 코스트 계산부(310), 좌우 분류부(320), 트리 생성부(330)외에 코스트 계산에 사용되는 리스트 및 리스트의 정렬은 소프트웨어를 통해 이루어진다.
로딩부(510)는 메모리로부터 원본 영상 데이터, 즉 트라이앵글 데이터를 불러온다. 변환부(520)는 불러온 각 트라이앵글 데이터를 x, y, z 축에 대하여 매트릭스 데이터를 가지고 변환한다. 리스트 데이터 생성부(530)는 x, y, z축에 대하여 변환된 트라이앵글 각각에서 스타트 값과 엔드 값을 추출하여 6개의 리스트 데이터를 생성한다. 여기서 리스트 데이터는 트라이앵글들의 인덱스로 구성된 배열이다. 리스트 데이터 정렬부(540)는 x, y, z 축 각각에 대하여 인덱스를 기준으로 스타트 값과 엔드 값을 정렬한다. 따라서, 최종적으로 정렬된 6개의 리스트 데이터가 생성된다.
도 6은 일측에 따른 코스트 계산부의 블록도이다. 
도 6을 참조하면, 일측에 따른 코스트 계산부는 셋업부(610), 제1 메모리 제어부(620), 버퍼(630), 스플릿 판독부(640), 계산부(650)를 포함할 수 있다.
셋업부(610)는 주 제어부(410)의 제어를 받아서 현재 노드에 대한 코스트 계산시 필요한 상수 데이터를 생성할 수 있다. 상수 데이터는 현재 노드에 대하여 한 번 생성되며, 생성된 상수 데이터는 계산부에 제공되어 코스트를 계산하는데 사용될 것이다.
또한, 제1 메모리 제어부(620)는 현재 노드의 스플릿 데이터를 메모리 인터페이스(430)를 통하여 메모리로부터 불러올 수 있다. 여기서 스플릿 데이터는 리스트 데이터의 인덱스를 참조하여 찾을 수 있는 트라이앵글들의 스타트 값과 엔드 값들이다.
또한, 버퍼(630)는 제1 메모리 제어부(620)가 메모리에서 불러오는 현재 노드의 스플릿 데이터를 저장할 수 있다. 메모리에서 불러오는 스플릿 데이터의 양이 증가함에 따라 중간에 버퍼(630)를 사용함으로써 코스트 계산의 안정성 및 정확성을 증가시킬 수 있다.
또한, 스플릿 판독부(640)는 버퍼에 저장된 스플릿 데이터의 스타트 값과 엔드 값을 비교하면서 정렬된 순서대로 출력할 수 있다. 스플릿 데이터는 트라이앵글 들의 스타트 값과 엔드 값이므로 스타트 값의 인덱스를 참조하여 정렬된 순서대로 트라이앵글 값들을 출력한다. 여기서 스타트 값과 엔드 값이 정렬되는 방식은 병합 정렬(merge sort)일 수 있다.
또한, 계산부(650)는 셋업부(610)에서 생성된 상수 데이터와 스플릿 판독부(640)에서 출력된 스플릿 데이터를 가지고 SAH를 적용하여 코스트를 계산할 수 있다. 계산부(650)는 상수 데이터와 정렬된 순서대로 입력되는 트라이앵글의 스타트 값과 엔드 값에 기초하여 SAH를 적용하여 코스트를 계산한다. 또한, 계속하여 트라이앵글의 스타트 값과 엔드 값이 입력되므로 이전에 계산된 코스트와의 비교를 통하여 현재 노드에서 코스트 값이 최소가 되도록 베스트 코스트를 업데이트한다. 현재 노드의 모든 스플릿 데이터에 대해 코스트 계산이 이루어지면 최종 코스트 값은 셋업부(610)에 전달되며, 셋업부(610)는 최종 코스트 값을 주 제어부(410)에 전달한다.
도 7은 일측에 따른 좌우 분류부의 블록도이다.
도 7을 참조하면, 일측에 따른 좌우 분류부는 인덱스 버퍼(710), 제2 메모리 제어부(720), 분류부(730), 리스트 저장부(740), 메모리 저장부(750)를 포함할 수 있다.
인덱스 버퍼(710)는 메모리 인터페이스(430)를 통하여 메모리에서 불러온 인덱스 데이터를 임시로 저장하는 공간이다.
또한, 제2 메모리 제어부(720)는 소정의 트라이앵글 들의 인덱스 데이터를 메모리로부터 불러와 인덱스 버퍼에 저장하고, 상기 인덱스 데이터와 상기 인덱스에 해당하는 트라이앵글 데이터를 순차적으로 출력할 수 있다. 제2 메모리 제어부(720)는 상기 인덱스 데이터와 상기 인덱스에 해당하는 트라이앵글 데이터를 하나씩 분류부(730)에 전달한다.
또한, 분류부(730)는 코스트가 최소가 되는 위치를 기준으로 순차적으로 출력된 트라이앵글 데이터가 왼쪽 또는 오른쪽에 위치하는지를 분류할 수 있다. 분류부(730)는 제2 메모리 제어부(720)에서 입력되는 트라이앵글 데이터에 대하여 코스트 p, 즉 분할평면의 왼쪽에 있는지 오른쪽에 있는지를 판단하여 분류한다.
또한, 리스트 저장부(740)는 분류된 트라이앵글 데이터의 인덱스를 리스트 버퍼에 순차적으로 저장할 수 있다. 리스트 저장부(740)는 트라이앵글 데이터가 코스트 p의 왼쪽에 위치한 경우 왼쪽 버퍼에, 오른쪽에 위치한 경우 오른쪽 버퍼에 트라이앵글의 인덱스를 순차적으로 저장할 수 있다. 이때, 코스트 p 값은 코스트 계산부에서 계산된 값으로 주 제어부(410)로부터 전달 받을 수 있다.
또한, 메모리 저장부(750)는 리스트 버퍼에 저장된 인덱스를 메모리에 저장할 수 있다. 인덱스 버퍼(710)에 저장된 모든 인덱스 데이터에 대하여 좌우 분류가 이루어지면, 좌우가 분류된 결과는 리스트 저장부(740)에 저장되어 있다. 이때, 리스트 저장부(740)는 버퍼와 같이 용량이 크지 않으므로 메모리 저장부(750)는 왼쪽 버퍼와 오른쪽 버퍼에 저장된 인덱스 값들을 메모리 인터페이스(430)를 통하여 메모리에 저장하는 역할을 한다.
도 8은 일측에 따른 트리 생성부의 블록도이다. 
도 8을 참조하면, 일측에 따른 트리 생성부는 노드 버퍼(810), 노드 메모리 제어부(820), 리스트 생성부(830), 리스트 메모리 제어부(840), 인덱스 버퍼(850)를 포함할 수 있다.
노드 버퍼(810)는 주 제어부(410)에서 입력된 노드 데이터를 임시로 저장할 수 있다. 역동적인 영상의 레이 트레이싱은 케이디 트리를 생성하기 위해 많은 연산량을 요구하고, 따라서 많은 노드가 생성된다. 트리 생성부는 생성되는 노드를 바로 메모리에 저장하는 것이 아니라 노드 생성의 정확성과 안정성을 높이기 위해 노드 버퍼(810)를 이용할 수 있다.
또한, 노드 메모리 제어부(820)는 주 제어부(410)에서 입력되어 노드 버퍼에 저장된 노드 데이터를 메모리에 저장할 수 있다. 노드 메모리 제어부(820)는 노드 버퍼의 용량을 고려하여 노드 버퍼에 저장된 노드 데이터를 메모리 인터페이스(430)를 통하여 메모리에 저장할 수 있다.
또한, 리스트 생성부(830)는 주 제어부(410)로부터 입력된 리프 노드에 대한 리스트의 인덱스 데이터와 리프 노드에 속하는 트라이앵글의 수에 기초하여 리스트를 생성할 수 있다. 주 제어부(410)는 현재 노드의 상황을 스택에 푸쉬하므로 노드의 상황을 제어하고 있다. 따라서, 주 제어부(410)는 더 이상 코스트 값이 계산되지 않으면 현재 노드를 리프 노드로 정의하고, 리스트 생성부(830)는 현재 노드의 리스트 데이터, 즉 리스트 데이터를 구성하는 트라이앵글의 인덱스 데이터를 리프 노드의 리스트 데이터로 생성할 수 있다.
또한, 리스트 메모리 제어부(840)는 생성된 리스트에 있는 트라이앵글의 수만큼 인덱스 데이터를 메모리에 저장할 수 있다. 리스트 메모리 제어부(840)는 리스트 생성부(830)에서 생성된 리스트 데이터를 메모리 인터페이스(430)를 통하여 메모리에 저장한다. 리스트 메모리 제어부(840)는 생성된 리프 노드의 6개 리스트 데이터 중 1개와 현재 리스트 어드레스를 메모리에 저장한다. 또한, 리스트 메모리 제어부(840)는 생성된 리스트에 있는 트라이앵글의 수만큼 현재 리스트 어드레스를 증가시킨다. 즉, 내부 노드는 노드 데이터만 생성되고, 리프 노드는 노드 데이터와 리스트 데이터가 생성된다.
또한, 인덱스 버퍼(850)는 주 제어부(430)에서 입력되는 리스트 데이터의 인덱스 데이터를 저장할 수 있다.
도 9는 일측에 따른 하드웨어를 이용한 케이디 트리 생성 방법의 흐름도이다.
901단계에서 일측에 따른 하드웨어는 메모리로부터 리스트 데이터와 트라이앵글 데이터를 읽어온다. 메모리에는 이미 소프트웨어를 이용하여 원본 영상 데이터 및 원본 영상을 구성하는 트라이앵글 데이터가 x, y, z 3축을 기준으로 스타트 값, 엔드 값으로 정렬되어 저장되어 있다. 따라서, 일측에 따른 하드웨어는 메모리로부터 상기 원본 영상을 구성하는 리스트 데이터 및 트라이앵글 데이터를 읽어올 수 있다. 또한, 일측에 따른 하드웨어는 BFM(Bus Functional Model)을 이용하여 소프트웨어를 통해 정렬된 리스트 데이터 및 트라이앵글 데이터를 읽어올 수 있다.
903단계에서 일측에 따른 하드웨어는 리스트 데이터 및 트라이앵글 데이터에 대하여 SAH 방식으로 현재 노드의 코스트가 최소가 되는 위치를 찾는다. 일측에 따른 하드웨어는 현재 노드를 구성하는 전체 트라이앵글에 대해 순차적으로SAH(Surface Area Heuristic)방식을 적용하면 노드 방문 및 트라이 앵글을 탐색하기 위해 필요한 연산량이 최소가 되는, 즉 코스트가 최소가 되는 위치 p를 계산하여 찾을 수 있다.
905단계에서 일측에 따른 하드웨어는 코스트가 최소가 되는 위치 p를 계산하여 찾을 수 있는지 여부를 판단한다. 일측에 따른 하드웨어는 코스트가 최소가 되는 위치 p의 존재 여부에 따라 리프 노드의 생성여부를 결정하게 된다. 또한, 리프 노드가 생성 됨에 따라 내부 노드도 생성 될 수 있으므로 코스트가 최소가 되는 위치 p의 존재 여부가 케이디 트리 생성에 중요한 기준이 된다.
907단계에서 일측에 따른 하드웨어는 코스트가 최소가 되는 위치를 찾으면, 상기 코스트가 최소가 되는 위치를 기준으로 리스트 데이터 및 트라이앵글 데이터의 좌우를 분류한다. 일측에 따른 하드웨어는 코스트가 최소가 되는 위치, 즉 분할평면을 기준으로 현재 노드의 리스트 데이터를 좌우로 분류함으로써, 현재 노드를 왼쪽 노드와 오른쪽 노드로 분류할 수 있다.
909단계에서 일측에 따른 하드웨어는 좌우 분류를 마치면 현재의 노드 상태를 스택에 푸쉬(push)한다. 여기서 현재 노드 상태는 노드 데이터(mode data)와 오른쪽 자식 노드를 생성하기 위한 정보인 상태 데이터(status data)를 포함한다. 노드 데이터는 코스트 값과 오른쪽 자식 노드의 메모리 주소를 포함하고, 상태 데이터는 오른쪽 자식 노드의 바운딩 박스 데이터, 트라이앵글 수, 리스트 데이터의 메모리 주소를 포함한다
911단계에서 일측에 따른 하드웨어는 코스트가 최소가 되는 위치를 찾지 못하면, 현재 리스트 데이터와 현재 리스트 어드레스를 메모리에 저장하고, 현재의 트라이앵글 수만큼 현재 리스트 어드레스를 증가시킨다. 즉, 일측에 따른 하드웨어는 코스트가 최소가 되는 위치를 찾지 못하면 리스트 데이터를 생성한다. 또한, 다음 리프 노드의 리스트가 생성되어야 할 어드레스를 위해 현재 리프 노드에 있는 트라이앵글 수만큼 현재 리스트 어드레스를 증가시킨다.
913단계에서 일측에 따른 하드웨어는 현재 리스트 어드레스 증가시킨 후, 리프 노드 데이터를 생성한다. 여기서 리프 노드 데이터는 x, y, z 3개의 축 중에 어느 축에 해당하는 지를 나타내는 축 정보, 현재 리프 노드에 포함된 triangle의 수, 현재 리프 노드에 포함된 트라이앵글로 구성된 리스트의 스타트 어드레스(start address)로 구성된다.
915단계에서 일측에 따른 하드웨어는 리프 노드 데이터 생성 후, 스택에서 팝(pop) 연산을 수행한다. 일측에 따른 하드웨어는 스택에서 팝 연산을 수행하여 노드 데이터가 존재하는지 여부를 판단한다. 이미 좌우 분류 단계를 통과한 후 각 노드의 상태가 스택에 푸쉬되어 있으므로 리프 노드 데이터를 생성한 후, 스택에서 노드 데이터를 하나씩 팝(pop) 한다.
917단계에서 일측에 따른 하드웨어는 스택에서 팝 연산을 수행한 결과 노드 데이터가 팝 되는지 여부를 판단한다. 일측에 따른 하드웨어는 스택에서 노드 데이터가 팝 되지 않으면 모든 노드의 생성이 완료되었으므로 케이디 트리 생성을 종료하면 되기 때문이다.
919단계에서 일측에 따른 하드웨어는 팝 연산 결과 엠프티(empty)가 아니면 내부 노드 데이터를 생성한다. 여기서 내부 노드 데이터는 x, y, z 3개의 축 중에 어느 축에 해당하는 지를 나타내는 축 정보, 해당 축에 대한 코스트 값과 오른쪽 자식 노드의 어드레스 값, 즉 포인터 정보를 가지고 있다. 또한, 상기 팝 연산 결과가 엠프티이면, 노드 생성을 종료한다. 일측에 따른 하드웨어는 스택에 더 이상 노드 데이터가 저장되어 있지 않으면 리프 노드와 내부 노드의 생성을 완료한 것이므로 노드 생성을 종료한다.
도 10은 일측에 따른 케이디 트리의 노드가 생성되는 순서를 나타낸 도면이다.
도 10을 참조하면, 일측에 따른 본 시스템의 처리과정을 수행하여 생성되는 트리의 노드 순서를 알 수 있다. 트리의 노드 생성 순서는 이진 트리 탐색의 중위 탐색 방식(in-order traversal )과 동일하다. 주 제어부(410)와 연결된 스택(420)은 계층적으로 노드를 생성하기 위해 사용된다. 일측에 따른 본 시스템은 현재 노드에서 자식 노드를 생성할 때, 오른쪽 자식 노드의 정보를 포함한 현재 노드 상태를 스택에 푸쉬하고, 왼쪽 자식 노드에 대하여 다시 코스트 값 계산 및 좌우 분류 등의 작업을 수행한다.
예를 들어 노드의 생성 방법 및 순서를 설명해 본다. 먼저 일측에 따른 하드웨어를 이용한 케이디 트리 생성 장치는 최상위 노드(8)의 코스트를 계산하고, 계산된 코스트 값을 기준으로 노드의 좌우를 분류한다. 최상위 노드(8)는 왼쪽 노드(4)와 오른쪽 노드(12)로 분류된다. 이때, 스택에는 현재 노드의 상태로서 최상위 노드(8)과 오른쪽 노드(12)가 저장이 된다. 일측에 따른 하드웨어를 이용한 케이디 트리 생성 장치는 왼쪽 노드(4)에 대해서 다시 코스트를 계산하고, 계산된 코스트 값을 기준으로 노드의 좌우를 분류한다. 왼쪽 노드(4)는 자식노드(2,6)로 분류되고, 스택에는 현재 노드 상태(4,6)가 저장된다. 계속해서, 왼쪽 노드를 코스트 값 계산 및 계산된 코스트 값을 기준으로 분류하다 보면 코스트 값이 계산되지 않는 왼쪽 노드가 나타난다. 이때 코스트 값이 계산되지 않는 왼쪽 노드(1)가 리프 노드이고, 상기 리프 노드(1)를 기준으로 노드를 생성하기 시작한다.
일측에 따른 하드웨어를 이용한 케이디 트리 생성 장치는 리프 노드(1)를 생성한 후 스택에서 노드 데이터를 팝 한다. 스택에는 노드 데이터(2,3,4,6,8,12)가 순서대로 위부터 저장되어 있으므로 노드 데이터(2)가 팝 되어 내부 노드로 생성이 된다. 스택에는 노드 데이터(3,4,6,8,12)가 저장되어 있으므로 노드 데이터(3)에 대하여 코스트 값 계산을 하면 코스트 값이 계산 되지 않는 리프 노드이므로 리프 노드(3)로 생성되고, 다시 스택에서 팝을 하면 노드 데이터(4)가 팝 되어 내부 노드로 생성된다. 반복하여 리프 노드 생성과 내부 노드 생성을 하면 노드(1)부터 노드(15)까지 순서대로 생성하게 되고, 노드(15)를 생성하면 스택에는 더 이상 노드 데이터가 저장되어 있지 않으므로 케이디 트리 생성을 종료하게 된다.
본 발명의 실시 예에 따른 방법들은 다양한 컴퓨터 수단을 통하여 수행될 수 있는 프로그램 명령 형태로 구현되어 컴퓨터 판독 가능 매체에 기록될 수 있다. 상기 컴퓨터 판독 가능 매체는 프로그램 명령, 데이터 파일, 데이터 구조 등을 단독으로 또는 조합하여 포함할 수 있다. 상기 매체에 기록되는 프로그램 명령은 본 발명을 위하여 특별히 설계되고 구성된 것들이거나 컴퓨터 소프트웨어 당업자에게 공지되어 사용 가능한 것일 수도 있다.
이상과 같이 본 발명은 비록 한정된 실시예와 도면에 의해 설명되었으나, 본 발명은 상기의 실시예에 한정되는 것은 아니며, 본 발명이 속하는 분야에서 통상의 지식을 가진 자라면 이러한 기재로부터 다양한 수정 및 변형이 가능하다.
그러므로, 본 발명의 범위는 설명된 실시예에 국한되어 정해져서는 아니 되며, 후술하는 특허청구범위뿐 아니라 이 특허청구범위와 균등한 것들에 의해 정해져야 한다.

Claims (12)

  1. 소프트웨어로부터 생성된 리스트 데이터를 이용하여 케이디 트리를 생성하기 위한 하드웨어를 이용하는 케이디 트리 생성 장치에 있어서-상기 하드웨어와 상기 소프트웨어는 분리되어 있음-,
    상기 소프트웨어로부터 생성된 상기 리스트 데이터의 인덱스(index)를 참조하여 메모리로부터 트라이앵글 데이터를 읽어오고, 상기 트라이앵글 데이터에 기초하여 SAH 방식으로 현재 노드의 코스트가 최소가 되는 위치를 찾는 코스트 계산부;
    상기 코스트 계산부에 의하여 상기 코스트가 최소가 되는 위치를 찾으면 상기 계산된 위치를 기준으로 상기 리스트 데이터의 좌우를 분류하는 좌우 분류부;
    상기 코스트 계산부에 의하여 상기 코스트가 최소가 되는 위치를 찾지 못하면, 리프(Leaf) 노드를 생성하고, 스택에 대한 팝 연산에 기초하여 내부 노드를 생성하는 트리 생성부
    를 포함하는 하드웨어를 이용한 케이디 트리 생성 장치.
  2. 제1항에 있어서,
    상기 좌우로 분류된 리스트 데이터가 메모리에 저장되면, 현재 노드 상태(current node status)를 스택에 푸쉬하고, 현재 노드 어드레스(current node address)를 증가시키는 주 제어부
    를 더 포함하는 하드웨어를 이용한 케이디 트리 생성 장치.
  3. 제2항에 있어서,
    상기 주 제어부는
    상기 코스트 계산부에서 계산된 코스트를 전달받아 좌우 분류부에 제공하는 것을 특징으로 하는 하드웨어를 이용한 케이디 트리 생성 장치.
  4. 제3항에 있어서,
    상기 주 제어부는
    상기 트리 생성부에 노드 데이터, 리스트의 인덱스 데이터 및 리프 노드에 속하는 트라이앵글의 수를 제공하는 것을 특징으로 하는 하드웨어를 이용한 케이디 트리 생성 장치.
  5. 제1항에 있어서,
    상기 코스트 계산부는,
    현재 노드에 대한 코스트 계산시 필요한 상수 데이터를 생성하는 셋업부;
    상기 현재 노드의 스플릿 데이터를 메모리로부터 불러와 버퍼에 저장하는 제1 메모리 제어부;
    상기 버퍼에 저장된 스플릿 데이터의 스타트 값과 엔드 값을 비교하면서 정렬된 순서대로 출력하는 스플릿 판독부; 및
    상기 셋업부에서 생성된 상기 상수 데이터와 상기 스플릿 판독부에서 출력된 스플릿 데이터를 가지고 SAH를 적용하여 코스트를 계산하는 계산부
    를 포함하는 하드웨어를 이용한 케이디 트리 생성 장치.
  6. 제1항에 있어서,
    상기 좌우 분류부는,
    소정의 트라이앵글들의 인덱스 데이터를 메모리로부터 불러와 인덱스 버퍼에 저장하고, 상기 인덱스 데이터와 상기 인덱스에 해당하는 트라이앵글 데이터를 순차적으로 출력하는 제2 메모리 제어부;
    상기 코스트가 최소가 되는 위치를 기준으로 상기 순차적으로 출력된 트라이앵글 데이터가 왼쪽 또는 오른쪽에 위치하는지를 분류하는 분류부;
    상기 분류된 트라이앵글 데이터의 인덱스를 리스트 버퍼에 순차적으로 저장하는 리스트 저장부; 및
    상기 리스트 버퍼에 저장된 인덱스를 상기 메모리에 저장하는 메모리 저장부
    를 포함하는 하드웨어를 이용한 케이디 트리 생성 장치.
  7. 제1항에 있어서,
    상기 트리 생성부는,
    주 제어부에서 입력되어 노드 버퍼에 저장된 노드 데이터를 상기 메모리에 저장하는 노드 메모리 제어부;
    상기 주 제어부로부터 입력된 상기 리프 노드에 대한 리스트의 인덱스 데이터와 상기 리프 노드에 속하는 트라이앵글의 수에 기초하여 리스트를 생성하는 리스트 생성부; 및
    상기 생성된 리스트에 있는 상기 트라이앵글의 수만큼 인덱스 데이터를 상기 메모리에 저장하는 리스트 메모리 제어부
    를 포함하는 하드웨어를 이용한 케이디 트리 생성 장치.
  8. 제1항에 있어서,
    상기 메모리로부터 트라이앵글로 구성된 화면 데이터(scene data)를 불러오는 로딩부;
    상기 트라이앵글 데이터에 매트릭스 데이터를 적용하여 변환(transform)시키는 변환부;
    상기 변환된 전체 트라이앵글 데이터에 대하여 x, y, z 로 이루어지는 3개의 축을 기준으로 스타트 값과 엔드 값을 가진 리스트 데이터를 생성하는 리스트 데이터 생성부;
    상기 리스트 데이터의 스타트 값과 엔드 값을 상기 트라이앵글의 인덱스를 기준으로 정렬하는 리스트 데이터 정렬부
    를 더 포함하는 하드웨어를 이용한 케이디 트리 생성 장치.
  9. 제1항에 있어서,
    상기 좌우 분류부에서 리스트 데이터가 좌우로 분류되면 현재 노드 상태가 푸쉬되고, 상기 트리 생성부에서 상기 리프 노드 생성 후 팝 연산의 대상이 되는 스택
    을 더 포함하는 하드웨어를 이용한 케이디 트리 생성 장치.
  10. 소프트웨어로부터 생성된 리스트 데이터를 이용하여 케이디 트리를 생성하기 위한 하드웨어를 이용하는 케이디 트리 생성 방법에 있어서-상기 하드웨어와 상기 소프트웨어는 분리되어 있음-,
    상기 소프트웨어로부터 생성된 상기 리스트 데이터와 트라이앵글 데이터를 메모리로부터 읽어오는 단계;
    상기 리스트 데이터 및 트라이앵글 데이터에 대하여 SAH 방식으로 현재 노드의 코스트가 최소가 되는 위치를 찾는 단계;
    상기 코스트가 최소가 되는 위치를 찾으면, 상기 코스트가 최소가 되는 위치를 기준으로 상기 리스트 데이터 및 트라이앵글 데이터의 좌우를 분류하는 단계;
    상기 좌우 분류를 마치면 현재의 노드 상태를 스택에 푸쉬(push)하는 단계;
    상기 코스트가 최소가 되는 위치를 찾지 못하면, 현재 리스트 데이터와 현재 리스트 어드레스를 메모리에 저장하고, 현재의 트라이앵글 수만큼 현재 리스트 어드레스를 증가시키는 단계;
    상기 현재 리스트 어드레스 증가시킨 후, 리프 노드 데이터를 생성하는 단계;
    상기 리프 노드 데이터 생성 후, 상기 스택에서 팝(pop) 연산을 수행하는 단계;
    상기 팝 연산 결과 엠프티(empty)가 아니면 내부 노드 데이터를 생성하는 단계; 및
    상기 팝 연산 결과가 엠프티이면, 노드 생성을 종료하는 단계
    를 포함하는 하드웨어를 이용한 케이디 트리 생성 방법.
  11. 제10항에 있어서,
    상기 현재 노드의 코스트가 최소가 되는 위치를 찾는 단계는,
    상기 계산시 필요한 상수 데이터를 생성하는 단계;
    상기 현재 노드의 스플릿 데이터를 메모리로부터 불러와 버퍼에 저장하는 단계;
    상기 버퍼에 저장된 스플릿 데이터의 스타트 값과 엔드 값을 비교하면서 정렬된 순서대로 출력하는 단계; 및
    상기 상수 데이터와 상기 정렬된 순서대로 출력된 스플릿 데이터를 가지고 SAH를 적용하여 현재 노드의 코스트가 최소가 되는 위치를 찾는 단계
    를 포함하는 하드웨어를 이용한 케이디 트리 생성 방법.
  12. 제10항에 있어서,
    상기 좌우를 분류하는 단계는,
    소정의 트라이앵글들의 인덱스 데이터를 메모리로부터 불러와 인덱스 버퍼에 저장하고, 상기 인덱스 데이터와 상기 인덱스에 해당하는 트라이앵글 데이터를 순차적으로 출력하는 단계;
    상기 코스트가 최소가 되는 위치를 기준으로 상기 순차적으로 출력된 트라이앵글 데이터가 왼쪽 또는 오른쪽에 위치하는지를 분류하는 단계;
    상기 분류된 트라이앵글 데이터의 인덱스를 리스트 버퍼에 순차적으로 저장하는 단계; 및
    상기 리스트 버퍼에 저장된 인덱스를 상기 메모리에 저장하는 단계
    를 포함하는 하드웨어를 이용한 케이디 트리 생성 방법.
KR1020100044243A 2010-05-12 2010-05-12 하드웨어를 이용한 케이디 트리 생성 방법 및 장치 KR101670930B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020100044243A KR101670930B1 (ko) 2010-05-12 2010-05-12 하드웨어를 이용한 케이디 트리 생성 방법 및 장치

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020100044243A KR101670930B1 (ko) 2010-05-12 2010-05-12 하드웨어를 이용한 케이디 트리 생성 방법 및 장치

Publications (2)

Publication Number Publication Date
KR20110124834A KR20110124834A (ko) 2011-11-18
KR101670930B1 true KR101670930B1 (ko) 2016-11-10

Family

ID=45394447

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020100044243A KR101670930B1 (ko) 2010-05-12 2010-05-12 하드웨어를 이용한 케이디 트리 생성 방법 및 장치

Country Status (1)

Country Link
KR (1) KR101670930B1 (ko)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101993835B1 (ko) * 2013-02-25 2019-06-27 삼성전자주식회사 스택 관리를 위한 방법 및 장치
CN106503196B (zh) * 2016-10-26 2019-05-03 云南大学 云环境下可扩展存储索引结构的构建和查询方法
CN108038118B (zh) * 2017-11-01 2021-10-15 华东师范大学 一种位置优先并维护最小外接矩形的kd树构建方法
CN108171785B (zh) * 2018-01-22 2021-12-10 中南大学 用于光线跟踪的sah-kd树设计方法

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100894136B1 (ko) * 2006-08-31 2009-04-20 세종대학교산학협력단 광선 추적을 위한 비 스택 방식의 케이디 트리 탐색알고리즘을 적용한 영상검출 장치 및 방법
KR100878142B1 (ko) * 2006-12-19 2009-01-13 연세대학교 산학협력단 플래시 메모리 상에서의 효율적인 동작을 위한 수정된b-트리 인덱스 구성 방법
KR101610194B1 (ko) * 2008-10-15 2016-04-07 삼성전자주식회사 영상처리를 위한 데이터 처리 장치 및 방법

Also Published As

Publication number Publication date
KR20110124834A (ko) 2011-11-18

Similar Documents

Publication Publication Date Title
US11861786B2 (en) Determining lighting information for rendering a scene in computer graphics using illumination point sampling
US20220245111A1 (en) Hierarchy Merging in Computer Graphics
US8854369B2 (en) Systems and methods for concurrent ray tracing
CN102282591B (zh) 光线跟踪系统架构和方法
Dammertz et al. Shallow bounding volume hierarchies for fast SIMD ray tracing of incoherent rays
JP6336727B2 (ja) 並列パイプラインを用いるグラフィック処理方法及び装置
US8773422B1 (en) System, method, and computer program product for grouping linearly ordered primitives
KR20100128337A (ko) 광선 추적 렌더링을 위한 병렬화 교차 테스트 및 세이딩의 아키텍처
US7990380B2 (en) Diffuse photon map decomposition for parallelization of global illumination algorithm
WO2015070618A1 (zh) 多光源下的全局光照绘制方法及装置
KR20180069461A (ko) 가속 구조를 생성하는 방법 및 장치
KR101670930B1 (ko) 하드웨어를 이용한 케이디 트리 생성 방법 및 장치
JP2007242022A (ja) 衝突感知装置及び方法
Evangelou et al. Fast radius search exploiting ray-tracing frameworks
Zeh I/O-efficient algorithms for shortest path related problems
US20240095993A1 (en) Reducing false positive ray traversal in a bounding volume hierarchy
US20240095995A1 (en) Reducing false positive ray traversal using ray clipping
Garrett et al. Gpu-accelerated descriptor extraction process for 3d registration in augmented reality
CN115512031A (zh) 图形处理
US20150186288A1 (en) Apparatus and method of operating cache memory
Byrne et al. Applications of the VOLA format for 3D data knowledge discovery
US20240078741A1 (en) Graphics processing
US20240095994A1 (en) Reducing false positive ray traversal using point degenerate culling
US20240037840A1 (en) Bounding volume hierarchy (bvh) widening based on node compressibility
WO2023250250A1 (en) Accelerated bounding volume hierarchy (bvh) traversal for shadow rays

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20190910

Year of fee payment: 4