KR20120055089A - 부하분산을 이용한 병렬형 충돌검사 방법과 병렬형 거리계산 방법 - Google Patents

부하분산을 이용한 병렬형 충돌검사 방법과 병렬형 거리계산 방법 Download PDF

Info

Publication number
KR20120055089A
KR20120055089A KR1020100116600A KR20100116600A KR20120055089A KR 20120055089 A KR20120055089 A KR 20120055089A KR 1020100116600 A KR1020100116600 A KR 1020100116600A KR 20100116600 A KR20100116600 A KR 20100116600A KR 20120055089 A KR20120055089 A KR 20120055089A
Authority
KR
South Korea
Prior art keywords
node
parallel
bvtt
collision
visiting
Prior art date
Application number
KR1020100116600A
Other languages
English (en)
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 KR1020100116600A priority Critical patent/KR20120055089A/ko
Priority to US13/114,137 priority patent/US20120131595A1/en
Publication of KR20120055089A publication Critical patent/KR20120055089A/ko

Links

Images

Classifications

    • 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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5083Techniques for rebalancing the load in a distributed system

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Image Generation (AREA)
  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)

Abstract

본 발명은 부하분산을 이용한 병렬형 충돌검사 방법과 병렬형 거리계산 방법에 관한 것이다. 본 발명의 중앙처리장치(CPU)에서 다수의 스레드에 의해 병렬적으로 수행되는, 두개의 다각형 집합의 충돌을 검사하기 위한, 부하분산을 이용한 병렬형 충돌검사 방법은, 상기 다각형 집합에 대한 경계볼륨 계층구조(BVH)를 이용하여, 경계볼륨 순회트리(BVTT)를 방문하고, 상기 BVTT를 방문할 때, 트리의 노드가 내부노드이고, 노드 안의 두 경계볼륨(BV)이 중첩된 경우에는, 재귀적으로 상기 내부노드(부모노드가 됨)의 자식노드를 방문하고, 상기 BVTT를 방문할 때, 트리의 상기 노드가 단말노드이고, 상기 단말노드 안에 있는 충돌단위가 중첩하는 경우에는, 상기 단말노드 안의 상기 충돌단위를 저장하며, 방문할 자식노드의 수를 예측한다.

Description

부하분산을 이용한 병렬형 충돌검사 방법과 병렬형 거리계산 방법{METHOD FOR PARALLEL TYPE COLLISION DETECTION AND METHOD FOR PARALLEL TYPE DISTANCE COMPUTATION BY USING LOAD BALANCING}
본 발명은 병렬형 충돌검사와 거리계산 방법에 관한 것으로서, 보다 상세하게는 물리기반 시뮬레이션이나 햅틱 등 가상현실 시스템에 사용하기 위한 부하분산을 이용한 병렬형 충돌검사와 거리계산 방법에 관한 것이다.
1965년, IBM의 고든 무어(Gordon Moore)박사는 반도체에 집적할 수 있는 트랜지스터의 숫자가 18개월마다 2배씩 증가한다는 무어의 법칙(Moore's law)을 발표하였다. 지난 40년간 이러한 무어의 법칙은 잘 지켜졌지만, 최근에는 클락 속도(clock speed), 발열 등과 같은 실제 세계의 물리적 제한으로 인해 성능향상을 더 이상 기하급수적으로 증가시킬 수 없게 되었다. 하지만 이러한 물리적 한계점들을 해결하며 더 나아가 PC의 성능이 무어의 법칙을 여전히 따르도록 하기 위하여 최근 멀티코어(multi-core) CPU가 등장하게 되었다.
멀티코어란 하드웨어적으로 둘 이상의 코어를 가지는 프로세서를 뜻한다.
도 1은 멀티코어 프로세서의 작업 모델을 설명하기 위한 개념도이다. 도면에 도시된 바와 같이, 멀티코어를 사용하면 하나의 프로그램을 분할하여, 각 코어(core)들이 동시에 병렬적으로 작업을 수행할 수 있다.
이처럼, 프로그램 내의 프로세스들을 동시에 처리하는 것을 병렬 프로그래밍(parallel programming)이라 한다. 그리고, 병렬 프로그래밍에서 연산이 병렬처리되는 기본 단위를 스레드(thread)라 한다. 병렬 프로그래밍은 작업을 동시에 수행함으로써, 순차적 프로그래밍보다 빨리 작업을 수행할 수 있으므로, 데이터베이스, 의료영상, 경제학 등 여러 분야에 이용되고 있다.
p개의 스레드 사용에 따른 성능향상(speedup)
Figure pat00001
는 다음 수학식과 같이 표현할 수 있다.
Figure pat00002
이때
Figure pat00003
은 1개의 스레드를 사용할 때의,
Figure pat00004
는 p개의 스레드를 이용할 때의 측정된 시간이나 연산 개수이다. 일반적으로,
Figure pat00005
Figure pat00006
보다 크거나 같으므로
Figure pat00007
가 되지만, 간혹
Figure pat00008
인 경우가 발생하기도 한다. 이러한 경우를 초선형 성능향상(superlinear speedup)이라고 한다. 초선형 성능향상은 주로 메인 메모리 공유에 따른 캐싱(caching) 적중률이 높아지는 경우나, 알고리즘을 분할하여 수행하는 과정에서 솔루션에 빠르게 도달할 경우에 발생할 수 있다.
그러나, 이러한 스레드 수의 증가로 얻을 수 있는 성능향상은 한계가 있다. 암달의 법칙(Amdahl's law)에 의하면 병렬 프로그래밍에서 최대로 얻을 수 있는 성능향상은 다음의 수학식과 같다.
Figure pat00009
이 식에서
Figure pat00010
은 전체 프로그램에서 순차적으로 처리되어야 하는 부분,
Figure pat00011
은 병렬처리 가능한 부분의 비율이다. 그러나, 수학식2는 병렬 프로그래밍에서 최대로 얻을 수 있는 성능향상을 나타낸 것으로, 실제 병렬 프로그래밍에서는 경쟁상태(race condition), 데이터 전송, 병렬에 따른 오버헤드(overhead) 등의 이유로 결과값을 그대로 얻기에는 한계가 있다.
병렬 프로그래밍을 분류하는 방법으로 가장 널리 사용되는 방법은 플린의 분류방법(Flynn's taxonomy)이다. 도 2는 플린의 분류방법을 설명하기 위한 개념도이다. 도면에 도시된 바와 같이, 플린의 분류방법은 코어들이 처리하는 명령어들과 데이터에 따라 크게, 단일명령어 단일데이터(Single Instruction, Single Data; SISD), 다중명령어 단일데이터(Multiple Instruction, Single Data; MISD), 단일명령어 다중데이터(Single Instruction, Multiple Data; SIMD) 및 다중명령어 다중데이터(Multiple Instruction, Multiple Data; MIMD)의 4가지로 구분된다.
특히 그래픽처리장치(Graphic Processing Unit; GPU)는, 플린의 분류에 따르면 SIMD 구조로 분류된다. 이것은 여러 개의 스레드가 하나의 제어장치에 의해 통제되며, 모든 스레드들이 서로 다른 데이터를 동일한 명령어로 처리하는 방식을 의미하는 것이다. 반면에, 멀티코어 중앙처리장치(Central Processing Unit; CPU)는 여러 개의 스레드가 서로 다른 데이터를, 서로 다른 명령어로 처리하는 MIMD 구조로 작동된다.
GPU는 컴퓨터 그래픽스의 처리를 위해 특별히 고안된 하드웨어로서, 최근 눈부신 성능향상을 보이고 있다. 특히 GPU를 범용 연산의 용도로 사용할 수 있는 GPGPU(general purpose computing on GPU)가 개발됐으며, 병렬 프로그래밍을 수행하는데 최적화되어 있다.
그러나, GPU는 CPU보다 빠른 연산처리가 가능하지만 상대적으로 데이터 전송시간이 오래 걸린다는 문제점이 있다. 또한, SIMD 기반의 구조이므로, 스레드마다 각기 다른 명령을 수행하는 것이 불가능하다. 따라서 일반적으로 데이터와 연산이 적은 프로그램의 경우 CPU를 이용해 병렬 프로그래밍을 하는 것이 더 큰 성능향상을 얻을 수 있다.
한편, 근접질의란(proximity query)란, 두 물체들 간의 위치에 관한 상대적인 정보를 찾아내는 것을 말한다. 근접질의에 대한 대표적인 예로, 충돌검사(collision detection), 거리계산(distance computation), 침투깊이(penetration depth) 등이 있다.
충돌검사란, 두 물체의 중첩여부와 함께, 중첩이 발생했을 경우 중첩된 부분을 찾는 것을 말한다. 거리계산이란, 두 물체 사이의 유클리디언 최단 거리(Euclidean distance)를 구하는 것이다.
이러한 근접질의들은 게임, 컴퓨터 애니메이션, 가상 현실, 햅틱 등 다양한 응용분야에서 널리 사용되고 있다. 이들 응용분야에서는, 사용자에게 빠른 응답시간(response time)을 보장하고, 안정적인 시뮬레이션을 생성할 수 있도록, 복잡한 다각형 모델에 대해 실시간으로 근접질의를 빠르게 계산하는 것이 특히 중요하다.
최근, 멀티코어, 멀티프로세서 등 하드웨어의 발달로 근접질의 계산을 병렬 처리하려는 연구가 진행되고 있다. 이러한 연구는 변형체(deformable model)에 대한 연속충돌감지(continuous collision detection; CCD)와 같이, 연산이 많고 복잡한 경우에 국한되어 초점이 맞춰져 왔으며, 강체(rigid body)에 대한 근접질의는 충돌검사에 대한 연구가 일부 진행되어 왔으나, 그 결과가 만족스럽지 못하다.
그 이유를 크게 세가지로 나눠서 살펴보면, 첫째, 강체에 대한 근접질의는 변형체에 비해 수행할 연산이 적은 점을 들 수 있다. 연산이 적은 프로그램을 병렬처리 할 경우, 잠금(lock)이나 부하분산하는 과정에서 생기는 오버헤드가 커져 실행시간이 더 길어지는 문제점이 있다. 둘째, 대부분의 근접질의 알고리즘은 경계볼륨 계층구조(Bounding Volume Hierarchy; BVH)를 이용한 계산 과정에서, 높은 분지가 자주 발생하여 정확한 연산 시간 예측이 불가능하여, 이러한 상황에서 최적화된 부하분산 알고리즘을 찾기 어려운 문제점이 있다. 마지막으로, 강체간의 근접질의를 계산하는데, RAPID(Robust and Accurate Polygon Interference Detection), PQP(Proximity Query Package)와 같은 최적화된 알고리즘을 이용할 경우, 병렬 처리할 수 있는 부분이 적어 좋은 성능향상을 얻기 어려운 문제점이 있다.
본 발명은 상기한 바와 같은 문제점을 해결하기 위하여 제안된 것으로, CPU를 이용하여 다각형 집합(poligon-soup)으로 구성된 강체(rigid body) 간의 근접질의 계산(proximity query)을 병렬적으로 실시간으로 구하는, 부하분산을 이용한 병렬형 충돌검사 방법을 제공하는데 그 목적이 있다.
CPU를 이용하여 다각형 집합(poligon-soup)으로 구성된 강체(rigid body) 간의 근접질의 계산(proximity query)을 병렬적으로 실시간으로 구하는, 부하분산을 이용한 병렬형 거리계산 방법을 제공하는데 또 다른 목적이 있다.
상기와 같은 목적을 달성하기 위해, 중앙처리장치(CPU)에서 다수의 스레드에 의해 병렬적으로 수행되는, 두개의 다각형 집합의 충돌을 검사하기 위한, 본 발명의 부하분산을 이용한 병렬형 충돌검사 방법은, 상기 다각형 집합에 대한 경계볼륨 계층구조(BVH)를 이용하여, 경계볼륨 순회트리(BVTT)를 방문하는 단계; 상기 BVTT를 방문할 때, 트리의 노드가 내부노드이고, 노드 안의 두 경계볼륨(BV)이 중첩된 경우에는, 재귀적으로 상기 내부노드(부모노드가 됨)의 자식노드를 방문하는 단계; 상기 BVTT를 방문할 때, 트리의 상기 노드가 단말노드이고, 상기 단말노드 안에 있는 충돌단위가 중첩하는 경우에는, 상기 단말노드 안의 상기 충돌단위를 저장하는 단계; 및 방문할 자식노드의 수를 예측하는 단계를 포함한다. 이때, 상기 두개의 BV가 충돌하지 않는 경우에는, 해당 노드를 컬링하는 단계를 더 포함하는 것이 바람직하다.
본 발명의 방법에서, 방문할 자식노드의 수를 예측하는 단계는, 노드가 얼마나 깊게 중첩되어 있는지를 상기 BV의 침투깊이를 통하여 판단하는 것이 바람직하며, 이때, 상기 BV의 넓이에 대한 침투깊이가 상대적으로 큰 경우에는, 방문할 자식노드가 많은 것으로 판단하여, 왼쪽 자식노드를 인큐하는 것을 특징으로 한다. 여기서, 상기 침투깊이의 상대적인 값은,
Figure pat00012
을 이용하여 결정하는 것이 바람직하다. 이때,
Figure pat00013
는 BV
Figure pat00014
Figure pat00015
의 침투깊이이고,
Figure pat00016
은 주어진 중첩된 두 BV
Figure pat00017
Figure pat00018
에 대하여 서로 다른 15축 중 BV의 중심과 변의 반지름을 정사영한 값의 차 중 가장 짧은 것이고,
Figure pat00019
는 그에 해당하는 축이다, 또한,
Figure pat00020
Figure pat00021
는 BV
Figure pat00022
Figure pat00023
의 각 변의 반지름을 나타내는 벡터이고, α는 사용자가 지정하는 값이다.
그리고, 본 발명의 방법에서, 상기 왼쪽 자식노드는, 상기 부모노드를 방문한 스레드 이외의 스레드가 방문하는 것이 바람직하고, 상기 부모노드를 방문한 스레드는, 오른쪽 자식노드를 재귀적으로 방문하는 것이 바람직하다.
한편, CPU에서 다수의 스레드에 의해 병렬적으로 수행되는, 두개의 다각형 집합의 거리를 계산하기 위한, 본 발명의 부하분산을 이용한 병렬형 거리계산 방법은, 상기 다각형 집합에 대한 BVH를 이용하여, BVTT를 방문하는 단계; 상기 BVTT를 방문할 때, 트리의 노드가 내부노드인 경우, 노드 안의 두 BV의 유클리디언 최단거리를 계산하여 소정의 상한보다 작은 경우, 재귀적으로 상기 내부노드(부모노드가 됨)의 자식노드를 방문하는 단계; 상기 BVTT를 방문할 때, 트리의 노드가 단말노드인 경우, 상기 단말노드 안에 있는 모델간의 거리를 계산하고, 계산된 거리가 상기 소정의 상한보다 작은 경우에는, 상기 소정의 상한을 계산된 거리로 갱신하는 단계; 및 방문할 자식노드의 수를 예측하는 단계를 포함한다.
여기서, 방문할 자식노드의 수를 예측하는 단계는, 소정의 가중치를 준
Figure pat00024
(
Figure pat00025
는 유클리디언 최단거리를 구하는 연산이고, A, B는 상기 두개의 다각형 집합임)의 추정치를 계산하여, 노드
Figure pat00026
의 유클리디언 최단거리인
Figure pat00027
가 상기 추정치보다 작으면, 노드
Figure pat00028
의 자식노드 중에 유클리디언 최단거리가 되는 것이 있다고 판단하여, 왼쪽 자식노드를 스택에 푸쉬하는 것이 바람직하고, 상기 추정치는,
Figure pat00029
(단,
Figure pat00030
는 BVTT의 루트노드이고, ω는 상기 소정의 가중치이며, σ는 상기 소정의 상한임)을 이용하여 구하는 것이 바람직하다.
상기와 같은 본 발명은, 복잡한 연산을 사용하여 근접질의를 구하지 않고, 간단한 침투깊이 연산과, 상한 및 하한의 가중치의 합을 사용하여 BVTT를 부하분산함으로써, 충돌검사와 거리계산을 빠른 속도로 병렬적으로 처리할 수 있도록 하는 효과가 있다.
또한, 본 발명은 분리축 정리를 이용하여 OBB간의 침투깊이를 간단하게 구할 수 있도록 하는 효과가 있다.
도 1은 멀티코어 스레드의 작업 모델을 설명하기 위한 개념도이다.
도 2는 플린의 분류방법을 설명하기 위한 개념도이다.
도 3은 본 발명의 병렬처리를 위한 부하분산을 설명하기 위한 일실시예 개념도이다.
도 4는 작업공유장을 이용한 동적 부하분산을 설명하기 위한 일실시예 개념도이다.
도 5는 BVH와 BVTT를 설명하기 위한 일실시예 개념도이다.
도 6a 내지 도 6c는 OBB간 충돌유형을 설명하기 위한 일실시예 개념도이다.
도 7a 및 도 7b는 각각 본 발명의 충돌검사와 거리계산에서의 BVTT의 방문패턴을 비교한 일예시도이다.
도 8은 본 발명의 거리계산을 위하여 사용하는 SSV의 일예시도이다.
도 9는 본 발명의 SSV간 최단거리의 상한과 하한을 설명하기 위한 일실시예 개념도이다.
도 10은 본 발명의 벤치마킹을 위한 모델의 일예시도이다.
도 11a 내지 도 11c는 (토끼1, 토끼2) 다각형 집합의 본 발명의 충돌검사에 대한 케이스1 내지 케이스3을 디스플레이한 것이다.
도 12a 내지 도 12c는 (클럽, 기어) 다각형 집합의 본 발명의 충돌검사에 대한 케이스1 내지 케이스3을 디스플레이한 것이다.
도 13a 내지 도 13c은 (시계1, 시계2) 다각형 집합의 본 발명의 충돌검사에 대한 케이스1 내지 케이스3을 디스플레이한 것이다.
도 14는 스레드 개수에 따른 본 발명의 충돌검사 수행 시간(초당 프레임 수(frame/second))을 나타낸 일실시예 그래프이다.
도 15는 스레드가 하나일 때의 수행시간 대비 본 발명의 충돌검사 수행시간의 향상율을 도시한 일실시예 그래프이다.
도 16a 내지 도 16c는 (토끼1, 토끼2) 다각형 집합의 본 발명의 거리계산에 대한 케이스4 내지 케이스6을 디스플레이한 것이다.
도 17a 내지 도 17c는 (클럽, 기어) 다각형 집합의 본 발명의 거리계산에 대한 케이스4 내지 케이스6을 디스플레이한 것이다.
도 18a 내지 도 18c은 (시계1, 시계2) 다각형 집합의 본 발명의 충돌검사에 대한 케이스4 내지 케이스6을 디스플레이한 것이다.
도 19는 스레드 개수에 따른 본 발명의 거리계산 수행 시간(초당 프레임 수)을 나타낸 일실시예 그래프이다.
도 20은 스레드가 하나일 때의 수행시간 대비 본 발명의 거리계산 수행시간의 향상율을 도시한 일실시예 그래프이다.
도 21은 초선형 성능향상의 일예이다.
도 22는 본 발명의 거리계산 방법에 의한 스레드의 수에 따른 방문노드 수의 변화를 나타낸 일실시예 그래프이다.
본 발명은 다양한 변경을 가할 수 있고 여러가지 실시예를 가질 수 있는바, 특정 실시예들을 도면에 예시하고 상세한 설명에 상세하게 설명하고자 한다. 그러나, 이는 본 발명을 특정한 실시 형태에 대해 한정하려는 것이 아니며, 본 발명의 사상 및 기술범위에 포함되는 모든 변경, 균등물 내지 대체물을 포함하는 것으로 이해되어야 한다.
본 발명의 설명에서는, 먼저, 본 발명의 병렬처리를 위한 부하분산과, 병렬형 근접질의를 먼저 설명하고, 이후, 본 발명의 병렬형 충돌검사 방법과 병렬형 거리계산 방법에 대하여 설명하기로 하겠다.
병렬 프로그래밍을 설계할 때는 스레드의 동시성(concurrency)과 명령어 사이의 종속성(dependency)을 모두 만족시켜 최대 성능을 얻을 수 있는 부하분산 방법(load balancing)을 고려하여야 한다. 도 3은 본 발명의 병렬처리를 위한 부하분산을 설명하기 위한 일실시예 개념도이다. 도면에 도시된 바와 같이, 부하분산에 의해 수행 시간이 단축되었음을 알 수 있다.
부하분산 방법은 미리 수행시간을 예측하여 프로그램 수행 전에 분산하는 정적(statically)인 방법과, 실행 도중에 분산하는 동적(dynamic)인 방법이 있다. 정적 부하분산 기법은 일반적으로 분산된 작업의 정확한 수행시간은 예측이 어렵기 때문에 동적 부하분산 기법이 주로 이용된다.
작업공유장(work pool)이란 분할한 일을 모아 놓은 곳으로 동적 부하분산에서 사용되는 기법이다. 도 4는 작업공유장을 이용한 동적 부하분산을 설명하기 위한 일실시예 개념도이다. 도면에 도시된 바와 같이, 스레드(P)가 작업공유장에 작업을 요청함으로써, 동적으로 작업을 분배할 수 있게 된다. 이때, 작업공유장으로서, 큐(queue)외에 스택(stack)이나 힙(heap)도 작업 공유장으로 이용될 수 있다. 여기서, 큐란, 처음에 들어온 자료가 가장 빨리 나가는 구조이고, 스택은 처음에 들어오는 자료가 가장 나중에 나가는 구조이다.
작업공유장을 이용한 부하분산 방법은 고전적인 탐색 기법인 분지한계법(branch and bound)에도 응용된다. 분지한계법이란, 상태공간트리(state space tree)를 탐색하는 것을 말한다. 상태공간트리를 탐색할 때는 루트노드(root node)부터 자식노드(children node)로 방문하게 된다. 이때, 모든 노드를 방문하는 것이 아니라, 컬링(culling; 발췌)하여 조건에 맞는 트리의 일부 노드들만 방문하여 문제를 해결한다. 상태공간트리의 특징은, 다른 탐색트리들과는 다르게 탐색하기 전에 어떤 노드들을 방문하게 될지 예측할 수 없다는 것이다. 상태공간트리의 예로 BVH와 경계볼륨 순회트리(Bounding Volume Traversal Tree; BVTT)가 있다.
중앙 작업공유장의 큐 하나를 이용하여 상태공간트리를 병렬적으로 탐색할 경우에, 최대 다음 수학식과 같은 성능향상을 얻을 수 있다.
Figure pat00031
이때,
Figure pat00032
은 상태공간트리의 최대 차수이고,
Figure pat00033
는 큐에 접근하는 시간의 평균,
Figure pat00034
는 각 노드의 연산시간의 평균이다. 수학식 3을 보면, 성능향상은 노드당 연산시간이 크고, 큐에 접근하는 시간이 작을수록 커지는 것을 알 수 있다.
서로 다른 스레드의 동시 작업공유장 접근은, 잘못된 연산수행을 발생시킬 수 있다. 또한, 스레드들의 경합을 방지하기 위해 작업공유장에 하나의 스레드만 접근하도록 잠금(lock)을 거는 과정에서, 병렬처리에 따른 오버헤드가 발생한다. 이러한 스레드간의 경합 문제를 해결하기 위해 도입된 방법이 작업가로채기(work stealing)이다. 작업가로채기란, 작업이 끝난 스레드가 다른 스레드의 작업을 가져와 수행하는 것으로, 작업가로채기 방법을 사용하면 잠금에 따른 스레드의 낭비를 줄일 수 있다.
한편, 병렬형 근접질의에 대하여 설명하면 다음과 같다.
강체간의 충돌검사는 연산이 적고, 스레드마다 서로 다른 제어가 필요하므로 CPU를 사용하여 병렬처리 하는 연구가 대부분이다. 충돌검사는 BVH를 이용하면 빠르게 구할 수 있으므로, 병렬형 충돌검사에서도 BVH를 사용한 연구가 많이 진행되고 있다. 'Huagen et al'은 구(sphere)와 AABB(Axis-Aligned Bounding Box)가 혼성된(hybrid) BVH를 병렬 프로그래밍으로 탐색하는 알고리즘을 제안하여 CPU가 4개일 때 순차 프로그래밍에 비하여 2.5배의 성능 향상을 얻었다. 'Zhao et al' 또한 혼성된 BVH를 사용하여 충돌검사를 병렬처리 하였지만, 스레드가 4개를 넘어가면서 성능 향상이 감소하였다.
변형체는 강체와 다르게 충돌검사 중 별도의 BVH 갱신뿐만 아니라, 자체 충돌검사(self-collision detection)가 필요하다. 연산이 많고 복잡할수록 병렬처리에 적합하여, 많은 충돌검사 연구가 변형체에 집중되어있고, 결과 또한 강체에 비해 만족스럽다. 'Tang et al.'은 충돌가능 여부에 따른 우선수위를 이용하여 CCD를 구함으로써, 16코어 CPU를 이용하여 최대 13배까지 성능을 향상시켰다. 'Kim et al .'은 CPU에서 BVH를 갱신하고, GPU에서는 CCD(Continuous Collision Detection)를 계산하는 방법을 사용하여 스레드의 수에 따른 선형적(linear)인 성능향상을 얻었다.
BVH는 근접질의 계산에 응용되는 자료 구조이다. 변형체의 경우 BVH를 자주 갱신해야 하므로, BVH 구축을 병렬 처리하게 되면 성능이 빨라질 수 있다. 'Wald'는 광선추적(ray tracing) 연구로, BVH 구축 연산을 구간별로 병렬처리 하는 방법을 제시하였다. 'Ize et al .'은 렌더링(rendering)할 때 BVH를 비동시적으로 재구축하는 방법을 연구했다. 'Lauterbach et al .'은 GPU기반의 BVH 구축 기법을 제안하였다.
이하, 일반적인 충돌검사 방법에 대해 논의한 후, 본 발명의 부하분산을 이용한 병렬형 충돌검사 방법을 설명하기로 하겠다.
경계볼륨(Bounding Volume; BV)은 포함 모델보다 훨씬 단순한 기하학적 형태를 가지기 때문에, BV를 이용한 근접질의 계산이 모델 자체를 이용한 계산보다 훨씬 빠르다. 대표적으로 사용되는 BV로는 구(sphere), 유향경계상자(Oriented Bounding Box; OBB), 축이 정렬된 경계상자(axis-aligned bounding box; AABB), 구면기반볼륨(swept sphere volume; SSV) 등이 있다.
경계볼륨 계층구조(Bounding Volume Hierarchy; BVH)는 BV를 노드로 갖는 트리구조이다. BVH의 루트노드(root node)는 모델 전체의 BV가 되고, 단말노드(leaf node)는 모델의 충돌단위(collision primitive)를 포함하게 된다. 또한 자식노드(children node)는 부모노드(parent node)에 포함된 모델을 분할한 모델의 BV이다. 루트노드부터 단말노드까지 순서대로 BVH를 차례로 방문하면서 근접질의를 빠르게 구할 수 있다.
경계볼륨 순회트리(Bounding Volume Traversal Tree; BVTT)는 두 BVH를 이용하여 재귀적으로 근접질의를 구하는 모습을 나타내는 트리로, 각 노드는 서로 다른 BVH 노드의 쌍에 해당한다. 도 5는 BVH와 BVTT를 설명하기 위한 일실시예 개념도이다. 도면에 도시된 바와 같이, 예를 들어, 모델 A, B에 대한 BVH인 BVH A , BVH B 가 있다고 하자. 이 경우 BVTT의 루트노드는 BVH A 와 BVH B 의 루트노드의 쌍인 가 된다.
Figure pat00036
의 왼쪽 자식노드는
Figure pat00037
대신
Figure pat00038
의 왼쪽 자식노드인
Figure pat00039
으로 교체되어
Figure pat00040
가 된다. 이는,
Figure pat00041
를 방문한 뒤에
Figure pat00042
을 방문하여 근접질의를 수행해야 하기 때문이다. 위 방법을 다시 적용하여
Figure pat00043
의 오른쪽 자식노드를
Figure pat00044
로 정의할 수 있다. 근접질의를 구한다는 것은 BVTT 트리를 방문하는 것과 같다. 이러한 BVTT는 근접질의가 수행되는 순간에 동적으로 만들어진다. 이때, 컬링 방법에 따라 방문되는 BVTT의 모양이 변하기 때문에, 생성되는 BVTT의 모습을 미리 예측할 수는 없다.
한편, OBB는 충돌검사에 많이 사용되는 BV이다. OBB사이의 충돌검사는 분리축 정리를 이용하여 쉽게 구할 수 있다. 두 물체를 정사영(projection) 하였을 때 중첩되지 않는 축이 하나라도 있다면 두 물체는 충돌하지 않는 것이다. 도 6a 내지 도 6c는 OBB간 충돌유형을 설명하기 위한 일실시예 개념도로서, 도 6a는 분리상태를, 도 6b는 중첩상태를, 도 6c는 접촉상태를 설명하기 위한 것이다. 충돌검사 방법은, 다음의 수학식을 만족하는 분리축
Figure pat00045
이 존재하면, 두 OBB
Figure pat00046
,
Figure pat00047
는 충돌하지 않는 것으로 한다.
Figure pat00048
여기서,
Figure pat00049
Figure pat00050
는 OBB
Figure pat00051
Figure pat00052
의 각 변의 반지름을 나타내는 벡터이고,
Figure pat00053
Figure pat00054
Figure pat00055
의 중점을 연결하는 벡터이다. 분리축 정리에 의하면, 15개의
Figure pat00056
(
Figure pat00057
에서의 평면 3개,
Figure pat00058
에서의 평면 3개,
Figure pat00059
Figure pat00060
에서의 각 변(edge)의 쌍 9개)에서, 그 중 하나라도 위 수학식 4를 만족한다면 AB는 중첩된 상태가 아니다.
중첩되어 있는 두 물체에서의 침투깊이란, 두 물체를 분리하는 최소 이동(translation)을 의미한다. 특히, 일반화된 모델(non-convex model)의 경우에는, 침투깊이를 구하는 것은 매우 어렵고 복잡한 일이다. 두 OBB
Figure pat00061
Figure pat00062
가 중첩되어 있다면, 15개의 축 모두
Figure pat00063
을 만족하게 된다. 이는 도 6b에 나타나 있다. 15개의 축
Figure pat00064
가운데 다음 수학식을 만족시키는 것을
Figure pat00065
라 하자.
Figure pat00066
이때,
Figure pat00067
Figure pat00068
Figure pat00069
의 침투깊이가 되며 이를 정리하면 다음과 같다.
주어진 중첩된 두 OBB
Figure pat00070
Figure pat00071
에 대하여 서로 다른 15축 중 OBB의 중심과 변의 반지름을 정사영한 값의 차가 가장 짧은 것을
Figure pat00072
이라 하고, 그에 해당하는 축을
Figure pat00073
라 할 때,
Figure pat00074
Figure pat00075
Figure pat00076
의 침투깊이이다.
이하에서는, 부하분산을 이용한 병렬형 충돌검사 방법에 대하여 설명하기로 한다. 본 발명이 수행되는 충돌검사 장치는, 바람직하게는 CPU일 수 있다.
본 발명의 병렬형 충돌검사 방법은, BVH를 이용하여 근접질의를 구한다. BVH를 이용하여 근접질의를 구한다는 것은, BVTT를 동적으로 방문하는 것과 같다. BVTT를 방문하는 방법에는 깊이우선탐색(depth first search)과 넓이우선탐색(breadth first search)이 있다. 이 경우 BVTT의 노드를 방문할 때, 노드가 단말노드인지 내부노드인지에 따라 탐색하는 방법이 달라질 수 있다. 즉, 내부노드인 경우에는, 수학식 4를 이용하여 노드 안에 두 BV가 중첩되는지 아닌지를 검사한다. 중첩된 경우에는 재귀적으로 자식노드를 방문하거나 인큐하고, 그렇지 않은 경우에는 더 이상 자식노드를 방문하지 않는다. 한편, 노드가 단말노드인 경우에는, 단말노드 안에 있는 충돌단위가 중첩하는지 검사한다. 만약 두 충돌단위가 중첩한다면 단말노드의 충돌단위를 저장한다.
BVTT를 탐색할 때, BV가 중첩되는 노드들만 방문하기 때문에 방문되는 BVTT의 모양은 매번 달라지게 될 것이다. 따라서 BVTT는 병렬 프로그래밍에서의 상태공간트리가 된다. 본 발명의 충돌검사 방법은, BVTT를 병렬적으로 방문하기 위하여 작업공유장 큐를 사용하여 부하분산 하였다. 이와 같은 본 발명의 충돌검사 방법은, 추가적인 계산이 적기 때문에 병렬 프로그래밍하는 과정에서 오버헤드를 최소화할 수 있다.
부하분산시 중요한 점은 작업수행 시간을 미리 예측하여 스레드에게 동등하게 분배하는 것이다. 다시 말하자면 BVTT에서 노드
Figure pat00077
의 작업을 수행할 때, 재귀적으로 방문할 자식노드의 수를 예측하는 것이 바람직하다.
Figure pat00078
Figure pat00079
가 깊게 중첩되어 있을수록
Figure pat00080
Figure pat00081
가 포함하는 충돌단위들이 중첩되어 있을 확률이 높으므로, 자식노드를 방문할 확률 또한 높아진다. 노드
Figure pat00082
가 얼마나 깊게 중첩되어 있는지는
Figure pat00083
Figure pat00084
의 침투깊이를 통하여 알 수 있다. 다음의 수학식은 BVTT의 노드의 침투깊이를 예측한 것이다.
Figure pat00085
여기서, α는 사용자가 지정해야 하는 값으로, 바람직하게는 0.8로 설정할 수 있다. 위 수학식 6은 수학식 5와 달리,
Figure pat00086
,
Figure pat00087
넓이에 대한 침투깊이의 상대적인 값이다.
Figure pat00088
,
Figure pat00089
넓이에 비하여 침투깊이 값이 크다면, 방문할 자식노드가 많다는 의미가 되므로, 왼쪽 자식노드를 인큐(큐에 데이터를 넣음)한다. 다른 스레드가 인큐된 왼쪽 자식노드를 방문하고, 부모노드를 방문한 스레드는 오른쪽 자식노드를 재귀적으로 방문한다.
이하에서는, 본 발명의 부하분산을 이용한 병렬형 거리계산 방법을 설명하기로 한다. 본 발명이 수행되는 거리계산 장치는, 바람직하게는 CPU일 수 있음은 위에서 설명한 바와 같다.
본 발명의 거리계산 방법에서, BVTT의 생성방법과 구조는 동일하지만, BVTT를 방문하는 방법이 다르다. 본 발명의 충돌검사 방법은, 수학식 4를 이용하여 컬링하였지만, 거리계산에서는 상한 σ를 이용하여 컬링한다.
즉, 내부노드에 대해서는, 노드 안의 두 BV의 유클리디언 최단거리를 계산하여 σ보다 작은 경우 재귀적으로 자식노드를 방문하거나 푸쉬하게 되고, 그렇지 않은 경우에는 더이상 자식노드를 방문하지 않는다. 단말노드에 대해서는, 단말노드 안에 있는 모델간의 거리를 계산한다. 계산된 거리가 σ보다 작은 경우에는 σ를 계산된 거리로 갱신한다.
도 7a 및 도 7b는 각각 본 발명의 충돌검사와 거리계산에서의 BVTT의 방문패턴을 비교한 일예시도이다. 하늘색은 BVTT의 전체 모습을, 파란색은 근접질의를 계산하는 과정에서 방문된 노드를 나타낸다.
본 발명의 충돌검사 방법은, 모든 BVTT 노드를 방문해야 하지만, 거리계산 방법은 최소거리를 갖는 모델을 찾고 σ를 빠르게 갱신하는 것이 목적이므로, 충돌검사 방법에 비해, 보다 많은 BVTT 노드가 컬링될 수 있다. 즉, 도 7b에 도시된 바와 같이, 거리계산에서 컬링되는 노드가 더 많다. 따라서, 계산하는 양이 적고 σ를 갱신하는 동안 다른 스레드들이 접근하지 못하도록 해야 하므로, 일반적으로 거리계산을 병렬처리하는 것이 충돌검사를 병렬처리하는 것보다 더 어렵다.
본 발명에서는, 거리계산을 위한 BV로서 SSV를 사용하였다. SSV는 주어진 반경의 구와 기본이 되는 도형의 민코우스키 합(Minkowski sum)으로 표현될 수 있다. SSV는 기본이 되는 도형에 따라 세가지 종류가 있다. 하나는, 점구면기반(Point Swept Sphere; PSS)로서, 점을 기본으로 사용하여 구와 같은 모양이다. 하나는, 선구면기반(Line Swept Sphere; LSS)로서, 선을 기본으로 하여 캡슐과 같은 모양이다. 나머지 하나는, 직사각구면기반(Rectangular Swept Sphere; RSS)로서, 직사각형을 기본으로 하였다. 도 8은 본 발명의 거리계산을 위하여 사용하는 SSV의 일예시도로서, 좌로부터 각각 PSS, LSS 및 RSS를 도시한 것이다.
SSV는 근접질의를 구하는데 효율적으로 이용할 수 있다. 특히 거리계산의 경우, SSV의 기본이 되는 물체(점, 선, 직사각형)간의 거리에 주어진 구의 반경만 빼면 쉽게 구할 수 있다.
본 발명의 병렬형 거리계산 방법은, 위에서 설명한 병렬형 충돌검사 방법과 유사하다. 그러나, 부하분산하는데 이용되는 조건이 다르다. 본 발명의 거리계산 방법에서는 σ을 빠르게 갱신하여 많은 노드들이 컬링되어야 한다. 특히, σ을 갱신하기 위해서는 단말노드에 도달해야 하므로, 큐 대신 스택을 이용한다. 큐는 처음에 들어온 자료가 가장 빨리 나가는 구조이고, 스택은 처음에 들어오는 자료가 가장 나중에 나가는 구조임은 위에서 설명한 바와 같다. 이는, 스택을 사용하면 BVTT에서 레벨(level)이 높은 노드가 먼저 팝(pop)(스택에서 자료를 뺌)하므로, 깊이우선탐색이 가능해지기 때문이다.
본 발명의 충돌검사 방법의 부하분산에서는 인큐(큐에 데이터를 넣음)하는 조건에 관심을 두었다면, 거리계산 방법의 부하분산에서는 스택에 푸쉬(push)(스택에 데이터를 넣음)하는 방법에 초점을 둔다. 집합 A, B에서 BVTT 노드
Figure pat00090
의 푸쉬 조건은 다음 수학식 7과 같다.
Figure pat00091
여기서,
Figure pat00092
는 유클리디언 최단거리를 구하는 연산이고,
Figure pat00093
는 BVTT의 루트노드이다. σ는 BVTT 노드의 컬링조건이면서,
Figure pat00094
의 예측값이 된다. 도 9는 본 발명의 SSV간 최단거리의 상한과 하한을 설명하기 위한 일실시예 개념도이다. 도면에 도시된 바와 같이,
Figure pat00095
와 σ이 각각
Figure pat00096
의 하한 및 상한임을 알 수 있다. 즉,
Figure pat00097
이다.
위 수학식 7에서
Figure pat00098
는 가중치 ω를 준
Figure pat00099
의 추정치가 된다.
Figure pat00100
가 추정된 값보다 작게 되면, 노드
Figure pat00101
의 자식노드 중에 유클리디언 최단거리가 되는 모델이 있다고 예상하여, 왼쪽 자식노드를 스택에 푸쉬한다. 본 발명의 일실시예에서는, ω를 0.9로 설정하였다. 처음 σ는 임의의 기본형에 대한 거리이므로, σ보다는
Figure pat00102
Figure pat00103
에 가까울 것으로 예상되기 때문이다.
[실시예]
본 발명은, 강체에 대한 충돌검사와 거리계산을 CPU를 이용하여 병렬적으로 구현하였다. 도 10은 본 발명의 벤치마킹을 위한 모델의 일예시도이다. 본 발명의 실험을 위하여, 도 10의 왼쪽부터 나열된, (토끼1, 토끼2), (클럽, 기어), (시계1, 시계2)의 다각형 모델을 사용하여, 9가지 경우에서의 충돌검사와 거리계산을 수행하였다.
먼저, 충돌검사와 관련한 실시예를 설명하면 다음과 같다.
본 발명의 실시예로서, 두 다각형 집합을 ¼(케이스1), ½(케이스2) 및 1(케이스3) 정도 중첩시키고, 강체 하나를 5°씩 72번 y축을 중심으로 회전하여(총 360°회전함), 각 프레임의 충돌검사 시간을 측정하여 평균을 구하였다. 수학식 6에서의 α는 0.8로 설정하였다. 도 11a 내지 도 11c는 (토끼1, 토끼2) 다각형 집합의 본 발명의 충돌검사에 대한 케이스1 내지 케이스3을 디스플레이한 것이고, 도 12a 내지 도 12c는 (클럽, 기어) 다각형 집합의 본 발명의 충돌검사에 대한 케이스1 내지 케이스3을 디스플레이한 것이며, 도 13a 내지 도 13c은 (시계1, 시계2) 다각형 집합의 본 발명의 충돌검사에 대한 케이스1 내지 케이스3을 디스플레이한 것이다. 도면에서, 오른쪽에 있는 초록색 물체가 회전하게 되고, 도면의 빨간색 부분은 중첩된 충돌단위를 나타내는 것이다.
도 14는 스레드 개수에 따른 본 발명의 충돌검사 수행 시간(초당 프레임 수(frame/second))을 나타낸 일실시예 그래프이다. 도 14에서, 도 11a에 관한 그래프는 A로 나타내었으며, 도 11b는 B, 도 11c는 C, 도 12a는 D, 도 12b는 E, 도 12c는 F, 도 13a는 G, 도 13b는 H, 도 13c는 I로 각각 나타내었다.
도면에 도시된 바와 같이, 스레드의 수가 많아질수록 수행 시간이 빨라지는 것을 볼 수 있다. 또한, 상대적으로 중첩된 충돌단위가 적은 케이스1(A, D, G)이 중첩된 충돌단위가 많은 케이스3(C, F, I)보다 빠른 것을 알 수 있다.
도 15는 스레드가 하나일 때의 수행시간 대비 본 발명의 충돌검사 수행시간의 향상율을 도시한 일실시예 그래프이다. 도면에 도시된 바와 같이, 전반적으로 스레드의 개수에 따라 성능향상이 증가했음을 알 수 있다. 또한, 중첩된 충돌단위가 많은 케이스3(C, F, I)이 다른 케이스보다 성능이 더 많이 향상되었음을 알 수 있다. 중첩된 충돌단위가 많고 연산이 많은 시나리오일수록 병렬처리 할 수 있는 부분이 많아지기 때문이다.
한편, 본 발명의 거리계산과 관련한 실시예를 설명하면 다음과 같다.
본 발명의 실시예로서, 두 다각형 집합 사이의 유클리디언 최단거리를 대략 0~1(케이스4), 1~3(케이스5), 3~5(케이스6)로 설정하고, 다각형 집합 하나를 5°씩 72번 회전해 각 프레임의 거리계산 시간을 측정하여 평균을 구하였다. (토끼1, 토끼2) 다각형 집합은 z축에 대하여 회전하였고, (클럽, 기어)와 (시계1, 시계2) 다각형 집합은 x축을 중심으로 회전하도록 하였다. (토끼1, 토끼2) 다각형 집합의 경우 x축으로 회전할 경우 최단거리가 매 회전마다 같아지므로 정확한 성능을 측정하기 위해 회전축을 z축으로 변경한 것이다. 수학식 7의 ω는 0.9로 설정하였다.
도 16a 내지 도 16c는 (토끼1, 토끼2) 다각형 집합의 본 발명의 거리계산에 대한 케이스4 내지 케이스6을 디스플레이한 것이고, 도 17a 내지 도 17c는 (클럽, 기어) 다각형 집합의 본 발명의 거리계산에 대한 케이스4 내지 케이스6을 디스플레이한 것이며, 도 18a 내지 도 18c은 (시계1, 시계2) 다각형 집합의 본 발명의 충돌검사에 대한 케이스4 내지 케이스6을 디스플레이한 것이다. 도면에서 오른쪽에 있는 초록색 물체가 회전하게 되고, 도면에 나타난 빨간색 선은 두 물체의 유클리디언 최단거리이다.
도 19는 스레드 개수에 따른 본 발명의 거리계산 수행 시간(초당 프레임 수)을 나타낸 일실시예 그래프이다. 도 19에서, 도 16a에 관한 그래프는 J로 나타내었으며, 도 16b는 K, 도 16c는 L, 도 17a는 M, 도 17b는 N, 도 17c는 O, 도 18a는 P, 도 18b는 Q, 도 18c는 R로 각각 나타내었다. 도면에 도시된 바와 같이, 전반적으로 스레드의 수가 많아질수록 수행 시간이 빨라지는 것을 볼 수 있다.
도 20은 스레드가 하나일 때의 수행시간 대비 본 발명의 거리계산 수행시간의 향상율을 도시한 일실시예 그래프이다.
도면에 도시된 바와 같이, 전반적으로 스레드의 개수가 증가할수록 거리계산의 속도가 향상되고, 스레드의 수가 8개일 때 최대 9.7배의 성능 향상을 보였다.
거리계산에서는 σ에 의해 BVTT 노드의 컬링이 결정된다. σ의 초기값과 유클리디언 최단거리의 차가 클수록 더 많은 노드를 방문하게 되므로, 병렬처리할 수 있는 부분이 많아진다. 결과적으로 σ의 초기값과 유클리디언 최단거리의 차이가 병렬 프로그래밍에서 성능을 향상시키는 요인이 된다. 도 20을 참조로 하면, σ 초기값이 같은, 즉 같은 색의 선끼리 비슷한 성능향상을 보임을 알 수 있다.
본 발명의 충돌검사에서의 성능향상은 2.2~5.0으로 안정적인데 비하여, 거리계산은 2.3~9.7배로 성능향상 폭이 넓다는 것을 알 수 있다. 이는 거리계산에서 변수(σ, ω)가 충돌검사에서의 변수(α)보다 많기 때문이다. 따라서, 병렬형 거리계산 방법에서는 σ, ω의 설정에 따라 도 19의 R의 경우와 같이 초선형 성능향상을 얻을 수 있다.
즉, 도 19에서 R의 그래프를 살펴보면, 스레드가 8개일 때에 1개일 때보다 8배 이상의 성능향상을 보인 것을 알 수 있다. 이와 같이 성능향상이 스레드의 수를 초과한 경우를 초선형 성능향상이라고 함은 위에서 설명한 바와 같다.
초선형 성능향상은 주로 메인 메모리 공유에 따른 캐싱 적중률이 높아지는 경우나, 알고리즘을 분할하여 수행하는 과정에서 솔루션에 빠르게 도달할 경우에 발생한다. 도 21은 초선형 성능향상의 일예이다. 도면에 도시된 바와 같이, 빨간 점을 찾는 것이 목표라 할때, 순차적으로 탐색할 때의 수행시간은
Figure pat00104
가 된다. 그러나, 4개의 스레드를 이용하게 되면
Figure pat00105
안에 빨간 점을 찾을 수 있게 되는 것이다.
본 발명의 거리계산에서 초선형 성능향상이 나타난 또 다른 이유는, BVTT가 상태공간트리이기 때문이다. 도 22는 본 발명의 거리계산 방법에 의한 스레드의 수에 따른 방문노드 수의 변화를 나타낸 일실시예 그래프이다.
도면에 도시된 바와 같이, R의 경우, 즉 (시계1, 시계2)의 다각형 집합에서 유클리디언 최단거리를 3~5로 설정한 경우에는, 스레드를 1개만 사용하였을 때 방문된 노드의 수를 100이라 했을 때, 스레드를 8개 사용하였을 때는 60개만 방문하여 유클리디언 최단거리를 구하는 것을 알 수 있다. 이처럼, 스레드의 수가 많아지면 σ의 갱신이 빨라져 많은 노드가 컬링되어, 수행되는 연산이 적어지게 된다. 즉, 스레드가 1개일 때와 스레드가 8개일 때 작업량이 다르므로, 초선형 성능향상이 발생할 수 있다.
이상에서 본 발명에 따른 실시예들이 설명되었으나, 이는 예시적인 것에 불과하며, 당해 분야에서 통상적 지식을 가진 자라면 이로부터 다양한 변형 및 균등한 범위의 실시예가 가능하다는 점을 이해할 것이다. 따라서, 본 발명의 진정한 기술적 보호 범위는 다음의 특허청구범위에 의해서 정해져야 할 것이다.

Claims (10)

  1. 중앙처리장치(CPU)에서 다수의 스레드에 의해 병렬적으로 수행되는, 두개의 다각형 집합의 충돌을 검사하기 위한, 부하분산을 이용한 병렬형 충돌검사 방법에 있어서,
    상기 다각형 집합에 대한 경계볼륨 계층구조(BVH)를 이용하여, 경계볼륨 순회트리(BVTT)를 방문하는 단계;
    상기 BVTT를 방문할 때, 트리의 노드가 내부노드이고, 노드 안의 두 경계볼륨(BV)이 중첩된 경우에는, 재귀적으로 상기 내부노드(부모노드가 됨)의 자식노드를 방문하는 단계;
    상기 BVTT를 방문할 때, 트리의 상기 노드가 단말노드이고, 상기 단말노드 안에 있는 충돌단위가 중첩하는 경우에는, 상기 단말노드 안의 상기 충돌단위를 저장하는 단계; 및
    방문할 자식노드의 수를 예측하는 단계를 포함하는 병렬형 충돌검사 방법.
  2. 제1항에 있어서, 상기 두개의 다각형 집합이 충돌하지 않는 경우에는, 해당 노드를 컬링하는 단계를 더 포함하는 병렬형 충돌검사 방법.
  3. 제1항에 있어서, 방문할 자식노드의 수를 예측하는 단계는, 노드가 얼마나 깊게 중첩되어 있는지를 상기 BV의 침투깊이를 통하여 판단하는 것을 특징으로 하는 병렬형 충돌검사 방법.
  4. 제3항에 있어서, 상기 BV의 넓이에 대한 침투깊이가 상대적으로 큰 경우에는, 방문할 자식노드가 많은 것으로 판단하여, 왼쪽 자식노드를 인큐하는 것을 특징으로 하는 병렬형 충돌검사 방법.
  5. 제4항에 있어서, 상기 침투깊이의 상대적인 값은, 다음의 수학식을 이용하여 결정하는 것을 특징으로 하는 병렬형 충돌검사 방법.
    Figure pat00106

    (단,
    Figure pat00107
    는 BV
    Figure pat00108
    Figure pat00109
    의 침투깊이이고,
    Figure pat00110
    은 주어진 중첩된 두 BV
    Figure pat00111
    Figure pat00112
    에 대하여 서로 다른 15축 중 BV의 중심과 변의 반지름을 정사영한 값의 차 중 가장 짧은 것이고,
    Figure pat00113
    는 그에 해당하는 축임. 또한,
    Figure pat00114
    Figure pat00115
    는 BV
    Figure pat00116
    Figure pat00117
    의 각 변의 반지름을 나타내는 벡터임. 한편, α는 사용자가 지정하는 값임)
  6. 제4항 또는 제5항에 있어서, 상기 왼쪽 자식노드는, 상기 부모노드를 방문한 스레드 이외의 스레드가 방문하는 것을 특징으로 하는 병렬형 충돌검사 방법.
  7. 제6항에 있어서, 상기 부모노드를 방문한 스레드는, 오른쪽 자식노드를 재귀적으로 방문하는 것을 특징으로 하는 병렬형 충돌검사 방법.
  8. CPU에서 다수의 스레드에 의해 병렬적으로 수행되는, 두개의 다각형 집합의 거리를 계산하기 위한, 부하분산을 이용한 병렬형 거리계산 방법에 있어서,
    상기 다각형 집합에 대한 BVH를 이용하여, BVTT를 방문하는 단계;
    상기 BVTT를 방문할 때, 트리의 노드가 내부노드인 경우, 노드 안의 두 BV의 유클리디언 최단거리를 계산하여 소정의 상한보다 작은 경우, 재귀적으로 상기 내부노드(부모노드가 됨)의 자식노드를 방문하는 단계;
    상기 BVTT를 방문할 때, 트리의 노드가 단말노드인 경우, 상기 단말노드 안에 있는 모델간의 거리를 계산하고, 계산된 거리가 상기 소정의 상한보다 작은 경우에는, 상기 소정의 상한을 계산된 거리로 갱신하는 단계; 및
    방문할 자식노드의 수를 예측하는 단계를 포함하는 병렬형 거리계산 방법.
  9. 제8항에 있어서, 재귀적으로 방문할 자식노드의 수를 예측하는 단계는, 소정의 가중치를 준
    Figure pat00118
    (
    Figure pat00119
    는 유클리디언 최단거리를 구하는 연산이고, A, B는 상기 두개의 다각형 집합임)의 추정치를 계산하여, 노드
    Figure pat00120
    의 유클리디언 최단거리인
    Figure pat00121
    가 상기 추정치보다 작으면, 노드
    Figure pat00122
    의 자식노드 중에 유클리디언 최단거리가 되는 것이 있다고 판단하여, 왼쪽 자식노드를 스택에 푸쉬하는 것을 특징으로 하는 병렬형 거리계산 방법.
  10. 제9항에 있어서, 상기 추정치는, 다음 수학식을 이용하여 구하는 것을 특징으로 하는 병렬형 거리계산 방법.
    추정치=
    Figure pat00123

    (단,
    Figure pat00124
    는 BVTT의 루트노드이고, ω는 상기 소정의 가중치이며, σ는 상기 소정의 상한임)
KR1020100116600A 2010-11-23 2010-11-23 부하분산을 이용한 병렬형 충돌검사 방법과 병렬형 거리계산 방법 KR20120055089A (ko)

Priority Applications (2)

Application Number Priority Date Filing Date Title
KR1020100116600A KR20120055089A (ko) 2010-11-23 2010-11-23 부하분산을 이용한 병렬형 충돌검사 방법과 병렬형 거리계산 방법
US13/114,137 US20120131595A1 (en) 2010-11-23 2011-05-24 Parallel collision detection method using load balancing and parallel distance computation method using load balancing

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020100116600A KR20120055089A (ko) 2010-11-23 2010-11-23 부하분산을 이용한 병렬형 충돌검사 방법과 병렬형 거리계산 방법

Publications (1)

Publication Number Publication Date
KR20120055089A true KR20120055089A (ko) 2012-05-31

Family

ID=46065661

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020100116600A KR20120055089A (ko) 2010-11-23 2010-11-23 부하분산을 이용한 병렬형 충돌검사 방법과 병렬형 거리계산 방법

Country Status (2)

Country Link
US (1) US20120131595A1 (ko)
KR (1) KR20120055089A (ko)

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP2843559A4 (en) 2012-04-27 2016-01-13 Hitachi Ltd DATABASE MANAGEMENT SYSTEM, COMPUTERS AND DATABASE MANAGEMENT PROCEDURES
CN102982567B (zh) * 2012-10-25 2015-09-09 北京航空航天大学 一种基于统计分析的变形体碰撞检测剔除方法
CN102999661A (zh) * 2012-11-16 2013-03-27 上海电机学院 基于粒子群优化的并行碰撞检测系统及方法
KR20150057868A (ko) 2013-11-20 2015-05-28 삼성전자주식회사 레이 트레이싱 시스템에서의 이진트리 탐색 방법 및 장치
US20180060315A1 (en) * 2016-08-31 2018-03-01 International Business Machines Corporation Performing file system maintenance
WO2019183868A1 (en) * 2018-03-29 2019-10-03 Intel Corporation Methods, systems, articles of manufacture and apparatus to improve resource utilization for binary tree structures
WO2020025114A1 (en) * 2018-07-31 2020-02-06 Vestel Elektronik Sanayi Ve Ticaret A.S. Method, apparatus, system and computer program for data distribution
CN110362394B (zh) * 2019-07-22 2022-04-26 北京明略软件系统有限公司 任务处理方法及装置、存储介质、电子装置
CN112700474A (zh) * 2020-12-31 2021-04-23 广东美的白色家电技术创新中心有限公司 碰撞检测方法、设备及计算机可读存储介质

Also Published As

Publication number Publication date
US20120131595A1 (en) 2012-05-24

Similar Documents

Publication Publication Date Title
KR20120055089A (ko) 부하분산을 이용한 병렬형 충돌검사 방법과 병렬형 거리계산 방법
Lauterbach et al. gProximity: hierarchical GPU‐based operations for collision and distance queries
Pan et al. g-Planner: Real-time motion planning and global navigation using GPUs
EP3742343A1 (en) Autonomous vehicle simulation using machine learning
Barnat et al. Employing multiple CUDA devices to accelerate LTL model checking
Zhang et al. Scalable collision detection using p-partition fronts on many-core processors
Van Luong et al. GPU-based multi-start local search algorithms
Erguiz et al. Assessing sparse triangular linear system solvers on GPUs
Dufrechou et al. A new GPU algorithm to compute a level set-based analysis for the parallel solution of sparse triangular systems
Hesam et al. Gpu acceleration of 3d agent-based biological simulations
Afanasyev et al. The comparison of large-scale graph processing algorithms implementation methods for Intel KNL and NVIDIA GPU
Meister et al. Parallel BVH construction using k-means clustering
Hassani et al. Analysis of sparse matrix-vector multiplication using iterative method in CUDA
Booth et al. A comparison of high-level programming choices for incomplete sparse factorization across different architectures
Nazarifard et al. Efficient implementation of the Bellman-Ford algorithm on GPU
Schmidtke et al. Chunked bounding volume hierarchies for fast digital prototyping using volumetric meshes
Hofmann et al. A hybrid CPU/GPU implementation of computationally intensive particle simulations using OpenCL
Gareau et al. Cache-E cient Memory Representation of Markov Decision Processes
Golitsyn et al. CUDA Implementation of an Algorithm for Batch Mode Detection of Collisions
Lauterback et al. Work distribution methods on GPUs
Bourgeois et al. Isosurface Visualization Miniapplication
Hesam et al. arXiv: GPU Acceleration of 3D Agent-Based Biological Simulations
Wu et al. An Analytical Study of Recursive Tree Traversal Patterns on Multi-and Many-Core Platforms
Sung et al. OpenCV Optimization on Heterogeneous Multi-core Systems for Gesture Recognition Applications
Rokos Scalable multithreaded algorithms for mutable irregular data with application to anisotropic mesh adaptivity

Legal Events

Date Code Title Description
A201 Request for examination
E601 Decision to refuse application