맨위로가기

장면 그래프

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

장면 그래프는 3차원 그래픽스, 그래픽 편집 도구 등에서 객체 간의 관계를 계층적으로 표현하는 데 사용되는 자료 구조이다. 노드, 루트 노드, 리프 노드, 변환 노드, 그룹 노드 등으로 구성되며, 그래픽 편집 도구에서는 레이어 개념과, 게임 및 3D 애플리케이션에서는 객체 간의 논리적, 공간적 관계를 정의하는 데 활용된다. 장면 그래프는 배열이나 연결 리스트와 같은 자료 구조를 사용하여 구현할 수 있으며, 객체 지향 프로그래밍, RTTI, 트리 순회 등을 통해 연산을 적용하고 순회한다. 또한 경계 부피 계층(BVH) 및 공간 분할 기술을 사용하여 렌더링의 효율성을 높인다. 관련 표준으로는 PHIGS, SGI의 오픈지엘 퍼포머, X3D 등이 있다.

더 읽어볼만한 페이지

  • 그래프 자료 구조 - 노드 (컴퓨터 과학)
    노드는 컴퓨터 과학에서 트리 구조를 이루는 구성 요소로, 자료 구조 내 정보를 표현하며, 값, 조건, 다른 자료 구조를 포함하고 부모 노드에 의해 표현되며, 웹 페이지 구조를 표현하는 데 사용된다.
  • 그래프 자료 구조 - 그래프 (자료 구조)
    그래프는 정점과 간선으로 구성되어 정점 간의 관계를 표현하는 비선형 자료 구조로, 방향, 무방향, 가중치 그래프 등 다양한 형태로 존재하며, 인접 리스트, 인접 행렬 등으로 표현되고, DFS, BFS, 다익스트라, 플로이드-워셜 알고리즘 등을 통해 탐색 및 문제 해결에 활용된다.
  • 컴퓨터 그래픽스 자료 구조 - 래스터 그래픽스
    래스터 그래픽스는 이미지를 픽셀 배열로 표현하며 해상도에 종속적인 특징을 갖고 다양한 파일 형식으로 저장되어 여러 분야에 활용된다.
  • 컴퓨터 그래픽스 자료 구조 - 화소
    화소는 디지털 이미지를 구성하는 가장 작은 단위로, 이미지 해상도를 결정하며, 디스플레이 장치, 디지털 카메라, 그래픽 디자인 등 다양한 분야에서 활용되는 요소이다.
장면 그래프

2. 장면 그래프의 기본 구조 및 원리

장면 그래프는 노드들의 트리 구조로 구성된다. 각 노드는 장면의 구성 요소를 나타내며, 부모-자식 관계로 연결되어 계층을 형성한다.

장면 그래프는 3차원 그래픽스와 같이 규모가 큰 월드 또는 레벨을 다루는 최신 게임에 유용하다. 이러한 게임에서 장면 그래프의 노드는 보통 장면에 있는 객체(엔티티)를 나타낸다. 예를 들어, 게임에서 기사와 말 사이의 관계를 정의하여, 기사가 말의 확장으로 간주되도록 할 수 있다. 이때 장면 그래프는 '말' 노드와 거기에 연결된 '기사' 노드를 가진다.

장면 그래프는 다양한 엔티티의 논리적 관계뿐만 아니라, 이들의 공간적 관계도 표현할 수 있다. 예를 들어 기사는 말이 움직임에 따라 3차원 공간에서 함께 움직인다.

이처럼 대규모 애플리케이션에서 장면 그래프를 설계할 때는 메모리 요구 사항이 중요하다. 그래서 많은 대규모 장면 그래프 시스템은 지오메트리 인스턴싱을 사용하여 메모리 비용을 줄이고 속도를 높인다. 위에서 언급한 기사 예시를 다시 살펴보면, 각 기사는 별도의 장면 노드로 표현되지만, 기사의 그래픽 표현(3D 메시, 텍스처, 재료, 셰이더)은 인스턴스화된다. 즉, 데이터는 한 번만 저장되고, 장면 그래프의 모든 '기사' 노드에서 이 데이터를 참조한다. 이렇게 하면 새로운 기사 노드를 생성할 때마다 모양 데이터를 복제할 필요가 없어 메모리 사용량을 줄이고 처리 속도를 높일 수 있다.

2. 1. 노드(Node)

장면 그래프의 기본 단위는 노드이며, 노드는 객체(Object), 속성(Attribute), 변환(Transformation) 등의 정보를 담고 있다. 노드는 다른 노드를 자식으로 가질 수 있으며, 이를 통해 복잡한 장면을 구성한다.

벡터 기반 그래픽 편집에서 각 리프 노드는 문서의 원자적 단위로, 타원이나 베지어 경로와 같은 도형을 나타낸다. 도형 자체(특히 경계선)는 스플라인 노드와 같은 노드로 더 분해될 수 있지만, 장면 그래프를 더 낮은 수준의 표현으로 내려가지 않고 도형으로 구성된 것으로 생각하는 것이 실용적이다.

레이어는 원하는 수의 도형과 도형 그룹을 배치할 수 있는 투명한 시트처럼 작동한다. 문서는 일련의 레이어가 되며, 이러한 레이어는 모두 편리하게 보이지 않게 하거나, 흐리게 하거나, 잠글(읽기 전용으로 만들) 수 있다. 일부 응용 프로그램은 모든 레이어를 선형 목록에 배치하는 반면, 다른 응용 프로그램은 원하는 깊이까지 레이어 내의 레이어를 지원한다.

내부적으로 레이어와 그룹 사이에 실제 구조적 차이가 없을 수 있는데, 둘 다 장면 그래프의 노드이기 때문이다. 차이점이 필요한 경우, C++에서 일반적인 유형 선언은 일반 노드 클래스를 만들고 레이어와 그룹을 하위 클래스로 파생시키는 것이다. 예를 들어 가시성 멤버는 레이어의 기능이 될 수 있지만 그룹의 기능은 아닐 수 있다.

3차원 그래픽스와 점점 더 커지는 월드 또는 레벨을 사용하는 최신 게임에서 장면 그래프의 노드는 일반적으로 장면에 있는 엔티티 또는 객체를 나타낸다.

예를 들어, 게임은 기사와 말 사이의 논리적 관계를 정의하여 기사가 말의 확장으로 간주되도록 할 수 있다. 장면 그래프는 '말' 노드와 이에 연결된 '기사' 노드를 가질 수 있다. 장면 그래프는 다양한 엔티티의 논리적 관계뿐만 아니라 공간적 관계도 설명할 수 있다. 기사는 말이 움직임에 따라 3차원 공간을 통해 움직인다.

대규모 애플리케이션에서 장면 그래프를 설계할 때 메모리 요구 사항은 주요 고려 사항이다. 많은 대규모 장면 그래프 시스템은 메모리 비용을 줄이고 속도를 높이기 위해 지오메트리 인스턴싱을 사용한다. 위의 예에서 각 기사는 별도의 장면 노드이지만 기사의 그래픽 표현(3D 메시, 텍스처, 재료 및 셰이더로 구성됨)은 인스턴스화된다. 즉, 데이터의 단일 복사본만 유지되며, 이 복사본은 장면 그래프의 모든 '기사' 노드에서 참조된다. 이를 통해 메모리 예산을 줄이고 속도를 높일 수 있는데, 새로운 기사 노드가 생성될 때 모양 데이터를 복제할 필요가 없기 때문이다.

2. 2. 리프 노드(Leaf Node)

리프 노드는 트리의 가장 끝에 위치하여 자식 노드가 없는 노드이다. 주로 기하학적 객체(Geometry), 광원(Light), 카메라(Camera) 등을 나타낸다. 벡터 기반 그래픽 편집에서 장면 그래프의 각 리프 노드는 문서의 원자적 단위, 일반적으로 타원 또는 베지어 경로와 같은 도형을 나타낸다. 도형 자체(특히 경계선)는 스플라인 노드와 같은 노드로 더 분해될 수 있지만, 장면 그래프를 더 낮은 수준의 표현으로 내려가지 않고 도형으로 구성된 것으로 생각하는 것이 실용적이다.

2. 3. 그룹 노드(Group Node)

그룹 노드는 여러 개의 노드를 묶어 하나의 그룹으로 관리하는 노드이다. 복잡한 장면을 체계적으로 구성하고 관리하는 데 유용하다. 그룹 노드는 내부적으로 레이어와 구조적 차이가 없을 수 있는데, 왜냐하면 둘 다 장면 그래프의 노드이기 때문이다. 차이점이 필요한 경우에는 C++에서 일반적인 유형 선언을 통해 일반 노드 클래스를 만들고 레이어와 그룹을 하위 클래스로 파생시킬 수 있다. 예를 들어 가시성 멤버는 레이어의 기능이 될 수 있지만, 그룹의 기능은 아닐 수 있다.

3. 장면 그래프의 활용

장면 그래프는 3차원 그래픽스를 사용하는 최신 게임, 특히 월드나 레벨이 넓은 게임에서 유용하다. 이러한 게임에서 장면 그래프의 노드는 보통 장면에 있는 엔티티나 객체를 나타낸다.

예를 들어, 게임에서 기사와 말 사이의 관계를 정의할 때, 기사를 말의 확장으로 간주할 수 있다. 그러면 장면 그래프는 '말' 노드와 이에 연결된 '기사' 노드를 갖게 된다. 결과적으로 기사는 말이 움직일 때 3차원 공간에서 함께 움직인다. 이처럼 장면 그래프는 엔티티 간의 논리적 관계뿐만 아니라 공간적 관계도 표현할 수 있다.

대규모 애플리케이션에서 장면 그래프를 설계할 때 메모리 요구 사항은 주요 고려 사항이다. 많은 대규모 장면 그래프 시스템은 메모리 비용을 줄이고 속도를 높이기 위해 지오메트리 인스턴싱을 사용한다.

3. 1. 그래픽 편집 도구에서의 활용

벡터 기반 그래픽 편집 도구에서 장면 그래프는 각 요소를 개별 노드로 표현한다. 리프 노드는 문서의 기본 단위인 타원이나 베지어 경로와 같은 도형을 나타낸다. 도형은 스플라인 노드와 같은 노드로 더 세분화될 수 있지만, 일반적으로 장면 그래프는 도형들로 구성된 것으로 간주된다.

레이어와 그룹은 내부적으로 구조적인 차이가 없을 수 있으며, 둘 다 장면 그래프의 노드이다. 필요한 경우, 일반 노드 클래스에서 레이어와 그룹을 하위 클래스로 파생시켜 구분할 수 있다.

3. 1. 1. 레이어(Layer)

레이어는 2D 컴퓨터 그래픽스에서 사용되는 개념으로, 투명한 시트와 같이 작동한다. 각 레이어에는 도형이나 도형 그룹을 배치할 수 있다. 문서는 여러 레이어로 구성될 수 있으며, 각 레이어는 개별적으로 보이지 않게 하거나, 흐리게 하거나, 잠글(읽기 전용으로) 수 있다.

일부 그래픽 편집 프로그램에서는 모든 레이어를 선형 목록으로 배치하지만, 다른 프로그램에서는 레이어 안에 레이어를 포함하는 방식으로 더 복잡한 구조를 지원한다.

내부적으로 레이어와 그룹은 장면 그래프의 노드일 뿐이므로 구조적인 차이가 없을 수 있다. 다만, 가시성 설정과 같은 기능은 레이어에서만 가능하도록 구현할 수 있다.

3. 2. 게임 및 3D 애플리케이션에서의 활용

장면 그래프는 3차원 그래픽스를 사용하는 최신 게임, 특히 월드나 레벨이 넓은 게임에서 유용하다. 이러한 애플리케이션에서 장면 그래프의 노드는 일반적으로 장면에 있는 엔티티나 객체를 나타낸다.

예를 들어, 게임에서 기사와 말 사이의 관계를 정의할 때, 기사를 말의 확장으로 간주할 수 있다. 그러면 장면 그래프는 '말' 노드와 이에 연결된 '기사' 노드를 갖게 된다. 결과적으로 기사는 말이 움직일 때 3차원 공간에서 함께 움직인다.

이처럼 장면 그래프는 엔티티 간의 논리적 관계뿐만 아니라 공간적 관계도 표현할 수 있다.

3. 2. 1. 지오메트리 인스턴싱(Geometry Instancing)

장면 그래프는 3차원 그래픽스와 점점 더 커지는 월드 또는 레벨을 사용하는 최신 게임에 유용하다. 이러한 대규모 애플리케이션에서 장면 그래프를 설계할 때 메모리 요구 사항은 주요 고려 사항이다. 많은 대규모 장면 그래프 시스템은 메모리 비용을 줄이고 속도를 높이기 위해 지오메트리 인스턴싱을 사용한다. 지오메트리 인스턴싱은 데이터의 단일 복사본만 유지하고, 이 복사본을 장면 그래프의 여러 노드에서 참조하는 방식이다. 예를 들어, 게임에서 각 기사는 별도의 장면 노드이지만 기사의 그래픽 표현(3D 메시, 텍스처, 재료 및 셰이더로 구성됨)은 인스턴스화되어, 새로운 기사 노드가 생성될 때 모양 데이터를 복제할 필요가 없어 메모리 예산을 줄이고 속도를 높일 수 있다.

4. 장면 그래프 구현

장면 그래프의 가장 단순한 형태는 배열 또는 연결 리스트 자료 구조를 사용하며, 해당 도형을 표시하는 것은 노드를 하나씩 선형적으로 반복하는 문제이다. 마우스 포인터와 교차하는 도형을 확인하는 것과 같은 다른 일반적인 작업도 선형 검색을 통해 수행된다. 작은 장면 그래프의 경우 이것으로 충분한 경향이 있다.

4. 1. 자료 구조

장면 그래프의 가장 단순한 형태는 배열 또는 연결 리스트 자료 구조를 사용하며, 해당 도형을 표시하는 것은 노드를 하나씩 선형적으로 반복하는 문제이다. 마우스 포인터와 교차하는 도형을 확인하는 것과 같은 다른 일반적인 작업도 선형 검색을 통해 수행된다. 작은 장면 그래프의 경우 이것으로 충분한 경향이 있다.

4. 2. 연산 및 디스패치(Dispatch)

장면 그래프에 연산을 적용하려면 노드 유형에 따라 연산을 디스패치(Dispatch)해야 한다. 예를 들어 렌더링 연산에서 변환 그룹 노드는 행렬 곱셈, 벡터 변위, 쿼터니언 또는 오일러 각도를 통해 변환을 누적한다. 이후 리프 노드는 렌더링할 객체를 렌더러로 보낸다. 일부 구현에서는 객체를 직접 렌더링할 수 있는데, 이는 DirectX 또는 OpenGL 같은 기본 렌더링 API를 호출하는 방식이다. 그러나 렌더링 API의 기본 구현은 보통 이식성이 낮기 때문에 장면 그래프와 렌더링 시스템을 분리하는 것이 일반적이다.

4. 2. 1. 객체 지향 프로그래밍에서의 디스패치

C++]와 같은 객체 지향 프로그래밍 언어에서는 각 노드에서 수행할 수 있는 연산을 나타내는

4. 2. 2. 런타임 형식 정보(RTTI) 활용

C++]와 같은 객체 지향 프로그래밍 언어에서는 각 노드에서 수행할 수 있는 연산을 나타내는

4. 3. 순회(Traversal)

순회는 장면 그래프의 모든 노드를 방문하는 과정으로, 렌더링, 업데이트 등의 연산을 적용하는 데 필수적이다.

일부 장면 그래프 연산은 노드가 다른 순서로 순회될 때 더 효율적이다. 이러한 경우 일부 시스템은 장면 그래프를 더 쉽게 파싱할 수 있는 형식이나 트리로 재정렬하기 위해 장면 그래프 재구성을 구현하기도 한다.

예를 들어, 2D 장면 그래프는 일반적으로 트리의 루트 노드에서 시작하여 자식 노드를 재귀적으로 그리면서 렌더링된다. 이때 트리의 리프 노드는 가장 전경의 객체를 나타낸다. 그림은 뒤에서 앞으로 그려지며, 더 가까운 객체가 먼 객체를 덮어쓰는 방식이므로, 이 프로세스를 화가의 알고리즘을 사용한다고 한다. 깊이 버퍼를 사용하는 3D 시스템에서는 더 먼 객체가 렌더링 대신 깊이 테스트만 하는 경우가 많으므로, 가장 가까운 객체를 먼저 그리는 것이 더 효율적이다. 이는 더 가까운 객체에 의해 가려지기 때문이다.

4. 3. 1. 전위 순회(Pre-order Traversal)

순회는 씬 그래프에 연산을 적용하는 데 핵심적인 역할을 한다. 순회는 일반적으로 임의의 노드(대개 씬 그래프의 루트)에서 시작하여 연산을 적용하고(대개 업데이트 및 렌더링 연산이 차례로 적용됨) 씬 그래프(트리)를 재귀적으로 아래로 이동하여 자식 노드로 이동하며, 리프 노드에 도달할 때까지 반복된다. 이 시점에서 많은 씬 그래프 엔진은 트리를 다시 위로 순회하며 유사한 연산을 적용한다. 예를 들어, 변환을 고려하는 렌더링 연산을 생각해 보자. 씬 그래프 계층 구조를 재귀적으로 순회하는 동안 사전 렌더링 연산이 호출된다. 노드가 변환 노드인 경우 자체 변환을 현재 변환 행렬에 추가한다. 연산이 노드의 모든 자식 노드의 순회를 마치면 노드의 사후 렌더링 연산을 호출하여 변환 노드가 변환을 실행 취소할 수 있도록 한다. 이러한 접근 방식은 필요한 행렬 곱셈의 양을 대폭 줄여준다.

4. 3. 2. 후위 순회(Post-order Traversal)

후위 순회는 자식 노드를 먼저 방문하고, 그 다음 부모 노드를 방문하는 방식이다. 씬 그래프에서 연산을 적용할 때, 많은 씬 그래프 엔진은 트리를 아래로 순회하며 리프 노드(leaf node)에 도달할 때까지 연산을 적용한다. 그 후, 트리를 다시 위로 순회하며 유사한 연산을 적용한다. 예를 들어, 변환을 고려하는 렌더링 연산에서 씬 그래프 계층 구조를 재귀적으로 순회하는 동안 사전 렌더링 연산이 호출된다. 노드가 변환 노드이면 자체 변환을 현재 변환 행렬에 추가한다. 모든 자식 노드의 순회를 마치면 노드의 사후 렌더링 연산을 호출하여 변환을 실행 취소한다. 이러한 방식은 필요한 행렬 곱셈의 양을 줄여준다.

5. 장면 그래프와 공간 분할

장면 그래프와 공간 분할을 효과적으로 결합하는 방법은 공간 분할 데이터를 포함하는 장면 리프 노드를 만드는 것이다. 이렇게 하면 렌더링 계산 효율성을 높일 수 있다.

공간 데이터는 일반적으로 정적이며, 분할된 형태로 움직이지 않는 장면 데이터를 포함한다. 일부 시스템은 시스템과 렌더링을 별도로 가질 수 있지만, 두 방식 모두 큰 장점은 없다. 특히, 장면 그래프가 공간 분할 시스템 내에 포함되는 것은 좋지 않은데, 이는 장면 그래프가 공간 분할보다 더 큰 시스템으로 간주되기 때문이다.

런타임에만 생성되는 매우 큰 도면 또는 장면 그래프(예: 광선 추적, 렌더링 프로그램)의 경우, 그룹 노드를 자동화된 방식으로 정의해야 한다. 예를 들어, 광선 추적기는 3D 모델의 장면 설명을 가져와 개별 부분을 경계 상자(경계 슬래브)로 분해하는 내부 표현을 구축한다. 이러한 상자는 계층적으로 그룹화되어 시야 결정의 일부로 광선 교차 테스트를 효율적으로 계산할 수 있다. 시선과 교차하지 않는 그룹 상자는 멤버에 대한 테스트를 건너뛸 수 있다.

2D 애플리케이션에서도 비슷한 효율성을 얻을 수 있다. 사용자가 문서의 일부만 컴퓨터 화면에 보이도록 문서를 확대하고 스크롤하는 경우, 경계 상자(또는 경계 사각형 체계)를 사용하여 어떤 장면 그래프 요소가 표시되는지 빠르게 결정하고 그려야 한다.

애플리케이션의 드로잉 성능에 따라 장면 그래프 설계는 렌더링 효율성 고려 사항의 영향을 받을 수 있다. 퀘이크와 같은 3D 비디오 게임에서는 가시성 테스트를 최소화하기 위해 이진 공간 분할(BSP) 트리가 선호된다. 그러나 BSP 트리는 설계 장면 그래프에서 계산하는 데 오랜 시간이 걸리고, 설계 장면 그래프가 변경되면 다시 계산해야 하므로 레벨은 정적으로 유지되는 경향이 있으며, 동적 캐릭터는 일반적으로 공간 분할 방식에서 고려되지 않는다.

높이 필드 및 다각형 메시와 같은 조밀한 정규 객체의 장면 그래프는 쿼드트리 및 옥트리를 사용하며, 이는 3D 경계 상자 계층 구조의 특수한 변형이다. 높이 필드는 상자 볼륨 자체를 차지하므로, 이 상자를 개별 높이 필드 요소에 도달할 때까지 8개의 하위 상자(옥트리에서 'oct')로 재귀적으로 세분하는 것이 효율적이고 자연스럽다. 쿼드트리는 2D 옥트리이다.

5. 1. 경계 부피 계층(Bounding Volume Hierarchy, BVH)

경계 부피 계층 구조(BVH)는 효율적인 컬링과 물체 간의 충돌 감지 속도 향상 등 다양한 작업에 유용하다. BVH는 공간 구조이지만, 기하학을 분할할 필요는 없다(아래 공간 분할 참조).

BVH는 경계 부피(종종 구, 축 정렬 경계 상자 또는 방향 경계 상자)의 트리이다. 계층 구조의 맨 아래에서 부피의 크기는 단일 물체를 딱 맞게 포함할 만큼 충분히 크다(또는 고해상도 BVH에서는 물체의 작은 부분일 수도 있다). 계층 구조를 위로 올라갈수록 각 노드는 그 아래의 모든 부피를 딱 맞게 포함하는 자체 부피를 갖는다. 트리의 루트에는 트리의 모든 부피(전체 장면)를 포함하는 부피가 있다.

BVH는 물체 간의 충돌 감지 속도를 높이는 데 유용하다. 물체의 경계 부피가 트리의 더 높은 부피와 교차하지 않으면, 해당 노드 아래의 어떤 물체와도 교차할 수 없다(따라서 모두 매우 빠르게 거부된다).

BVH와 장면 그래프 사이에는 몇 가지 유사점이 있다. 장면 그래프는 각 노드에 부피가 연결되어 있거나 계층 구조의 편리한 위치에 특별히 제작된 "경계 노드"가 추가되어 있으면 BVH를 포함하거나 BVH가 되도록 쉽게 조정할 수 있다. 이것은 장면 그래프의 일반적인 관점이 아닐 수 있지만, 장면 그래프에 BVH를 포함하면 이점이 있다.

5. 2. 공간 분할(Spatial Partitioning)

장면 리프 노드에 공간 분할 데이터를 포함시키면 렌더링의 계산 효율성을 높일 수 있다.

공간 데이터는 일반적으로 정적이며, 분할된 형태로 움직이지 않는 장면 데이터를 포함한다. 일부 시스템은 시스템과 렌더링을 별도로 가질 수 있지만, 두 방식 모두 큰 장점은 없다. 특히, 장면 그래프가 공간 분할 시스템 내에 포함되는 것은 좋지 않은데, 이는 장면 그래프가 공간 분할보다 더 큰 시스템으로 간주되기 때문이다.

런타임에만 생성되는 매우 큰 도면 또는 장면 그래프(예: 광선 추적 렌더링 프로그램)의 경우, 그룹 노드를 자동화된 방식으로 정의해야 한다. 예를 들어, 광선 추적기는 3D 모델의 장면 설명을 가져와 개별 부분을 경계 상자(경계 슬래브)로 분해하는 내부 표현을 구축한다. 이러한 상자는 계층적으로 그룹화되어 시야 결정의 일부로 광선 교차 테스트를 효율적으로 계산할 수 있다. 시선과 교차하지 않는 그룹 상자는 멤버에 대한 테스트를 건너뛸 수 있다.

2D 애플리케이션에서도 비슷한 효율성을 얻을 수 있다. 사용자가 문서의 일부만 컴퓨터 화면에 보이도록 문서를 확대하고 스크롤하는 경우, 경계 상자(또는 경계 사각형 체계)를 사용하여 어떤 장면 그래프 요소가 표시되는지 빠르게 결정하고 그려야 한다.

애플리케이션의 드로잉 성능에 따라 장면 그래프 설계는 렌더링 효율성 고려 사항의 영향을 받을 수 있다. 퀘이크와 같은 3D 비디오 게임에서는 가시성 테스트를 최소화하기 위해 이진 공간 분할(BSP) 트리가 선호된다. 그러나 BSP 트리는 설계 장면 그래프에서 계산하는 데 오랜 시간이 걸리고, 설계 장면 그래프가 변경되면 다시 계산해야 하므로 레벨은 정적으로 유지되는 경향이 있으며, 동적 캐릭터는 일반적으로 공간 분할 방식에서 고려되지 않는다.

높이 필드 및 다각형 메시와 같은 조밀한 정규 객체의 장면 그래프는 쿼드트리 및 옥트리를 사용하며, 이는 3D 경계 상자 계층 구조의 특수한 변형이다. 높이 필드는 상자 볼륨 자체를 차지하므로, 이 상자를 개별 높이 필드 요소에 도달할 때까지 8개의 하위 상자(옥트리에서 'oct')로 재귀적으로 세분하는 것이 효율적이고 자연스럽다. 쿼드트리는 2D 옥트리이다.

6. 관련 표준

PHIGS는 최초의 상업용 장면 그래프 사양으로, 1988년 ANSI 표준이 되었다. 유닉스 하드웨어 공급업체에 의해 다양한 구현이 제공되었다.

실리콘 그래픽스(SGI)는 1991년에 오픈지엘 퍼포머(일반적으로 Performer라고 불림)를 출시했는데, 이는 향후 대부분의 SGI 제품을 위한 주요 장면 그래프 시스템이었다. 1992년에는 SGI에서 Performer를 기반으로 구축된 고급 장면 그래프인 아이리스 인벤터 1.0을 출시했고, 1994년에는 Performer의 최신 릴리스를 기반으로 구축된 또 다른 고급 장면 그래프인 오픈 인벤터로 이어졌다.

X3D로열티 프리 개방형 표준 파일 형식이자 XML을 사용하여 3D 장면과 객체를 표현하고 통신하는 런타임 아키텍처이다. 이는 애플리케이션에 내장된 실시간 그래픽 콘텐츠의 저장, 검색 및 재생을 위한 시스템을 제공하는 ISO 승인 표준이며, 광범위한 도메인과 사용자 시나리오를 지원하는 개방형 아키텍처 내에서 이루어진다.

6. 1. PHIGS (Programmer's Hierarchical Interactive Graphics System)

PHIGS는 최초의 상업용 장면 그래프 사양이었으며, 1988년 ANSI 표준이 되었다. 유닉스 하드웨어 공급업체에 의해 다양한 구현이 제공되었다.

6. 2. SGI (Silicon Graphics)

실리콘 그래픽스(SGI)는 1991년에 오픈지엘 퍼포머(일반적으로 Performer라고 불림)를 출시했는데, 이는 향후 대부분의 SGI 제품을 위한 주요 장면 그래프 시스템이었다. 1992년에는 SGI에서 Performer를 기반으로 구축된 고급 장면 그래프인 아이리스 인벤터 1.0을 출시했다. 1994년에는 Performer의 최신 릴리스를 기반으로 구축된 또 다른 고급 장면 그래프인 오픈 인벤터로 이어졌다.

6. 3. X3D (Extensible 3D)

X3D로열티 프리 개방형 표준 파일 형식이자 XML을 사용하여 3D 장면과 객체를 표현하고 통신하는 런타임 아키텍처이다. 이는 애플리케이션에 내장된 실시간 그래픽 콘텐츠의 저장, 검색 및 재생을 위한 시스템을 제공하는 ISO 승인 표준이며, 광범위한 도메인과 사용자 시나리오를 지원하는 개방형 아키텍처 내에서 이루어진다.


본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com