게임 엔진이 쿼드를 사용하는 대신 모델을 삼각형으로 변환하는 이유는 무엇입니까?


47

애니메이션과 영화 중심의 프로젝트에 Maya를 사용하여 작업했지만 비디오 게임 개발에 대한 연구에도 중점을두고 있습니다. 어쨌든, 나는 교수 중 한 명과 이야기하고 있었고, 내가 아는 모든 게임 엔진이 삼각형으로 변환되는 이유를 알 수 없었습니다.

왜 게임 엔진이 모델을 4면 다각형으로 남겨두고 삼각형으로 변환하는지 아는 사람이 있습니까? 또한이 작업의 장단점은 무엇입니까?


1
NVidia NV1은 삼각형 / 다각형 대신에 사각형을 사용하는 2 차 텍스처 매핑을 사용했습니다. 가장 적게 말하면 큰 타격은 아니 었습니다. en.wikipedia.org/wiki/NV1을 참조하십시오 .
Macke

5
@Macke : "2 차 방정식"에서와 같이 2 차식이 아닌 "2 차 방정식"에서와 같이 2 차식입니다. 쿼드를 사용하지 않고 9 포인트로 정의 된 2 차 곡선을 사용합니다. stason.org/TULARC/pc/3d-graphics-cards-faq/…

9
귀하의 질문에 +1하지만 교수님에게는 -1입니다. 이것은 그가 알고 있어야 할 기본적인 것들이며, 자신의 손등을 알고 있으며 지난 15 년 동안의 발전에 약간의 영향을 미쳤다는 신호입니다.
Maximus Minimus

1
내 교수 방어에서 그는 게임 개발자 쪽이 아니고 애니메이터 / 모델러에 더 가깝습니다. 그는 그것이 트리스로 변환되었다는 것을 알았지 만 렌더링의 이유에 대한 수학 이유를 알지 못했습니다. 그러나 그는 아마 알고 있었을 것입니다.
Grant

답변:


56

결론은 컴퓨터가 화면에 객체를 렌더링하는 방법 인 Triangle Rasterization입니다. 다른 사람들이 나보다 더 늦게 말하지만 :

컴퓨터 화면에서 볼 수있는 모든 3D 개체는 실제로 기본 요소라고하는 작은 작은 기하학적 개체로 만들어집니다. 사변형, 삼각형, n- 곤 등이 프리미티브의 예입니다. 우리는 주로 하나의 주된 이유 때문에 삼각형에 집중할 것입니다 : 모든 객체는 삼각형으로 나눌 수 있지만 삼각형은 삼각형 이외의 것으로 나눌 수 없습니다. 이 때문에 삼각형을 그리는 것은 높은 순서의 다각형을 그리는 것보다 훨씬 간단합니다. 처리해야 할 일이 줄었습니다. 이러한 삼각형이 컴퓨터 그래픽에서 일반적으로 사용되는 이유입니다.

강조합니다. 출처 : http://www.devmaster.net/articles/software-rendering/part3.php


2
대박! 당신이 그것에 대해 생각할 때 그것은 많은 의미가 있습니다. 답변 해주셔서 감사합니다!
그랜트

1
OpenGL ES에서는 API를 단순화하려는 노력의 일환으로 쿼드 및 폴리곤도 지원되지 않습니다. 따라서 삼각형을 사용하는 실질적인 이유는 다른 선택의 여지가 없기 때문입니다. 그러나 ES와 같은 간소화 된 API가 다른 기본 유형을 피하는 이유는 이것과 다른 답변에 요약 된 이유 때문입니다.
Suboptimus

5
+1 누군가가 같은 질문을 할 때 북마크에 대한 참조로 안전하게 사용할 수있는 답입니다. 오직 삼각형이 작은 프리미티브 인 이유는 항상 부동 소수점 산술의 부정확성으로 tris가 모든 경우에 평면을 보장 할 수있는 유일한 안전한 다각형이기 때문입니다. 항상 평평해야합니다. 모델링 소프트웨어는 객체를 모델러에게 편의상 쿼드 또는 n- 곤으로 표시하지만 변환 / 렌더링 분할 다각형을 둘 이상의 삼각형으로 적용합니다.
Hatoru Hansou

56

삼각형에는 그리기가 더 쉽고 빨라지는 많은 속성이 있습니다.

4 개 이상의 점이 같은 평면에 있지 않을 수도 있지만 항상 3 개의 점이 있습니다 (축소 사례 무시). 이것은 스칼라 값이 삼각형의 표면에 따라 선형 적으로 변한다는 흥미로운 특성을 가지고 있습니다. 삼각형이 화면에 투사 되더라도 스칼라 값은 여전히 ​​x '/ z 및 y'/ z에 대해 선형으로 변합니다.

이는 특수 하드웨어에서 매우 빠르게 수행 할 수있는 선형 보간법을 사용하여 삼각형을 음영 처리, 텍스처 맵 및 깊이 필터에 필요한 모든 것이 아니라는 것을 의미합니다.

tl; dr : 삼각형이 가장 간단한 기본 요소이므로 삼각형을 다루는 알고리즘을 크게 최적화 할 수 있습니다.


11
+1. 삼각형이 항상 평면이라는 사실이 주된 이유 중 하나라고 생각합니다. 비평면 다각형은 물건을 훨씬 더 복잡하게 만듭니다.
bummzack

2
+1. 삼각형을 평면으로 보장 할 수있는 유일한 다각형은 삼각형이 필요한 API와 하드웨어를 만드는 주요 기술적 이유라고 생각합니다. 모델링 소프트웨어는 모델러에게 편의상 메시를 쿼드로 표시합니다.
Hatoru Hansou

1
평평한 비평면 유추를 사용합니다 ... 3 개의 다리가있는 의자는 한 방향으로 만 바닥에 서있을 수 있습니다. 발은 삼각형의 모서리와 같습니다. 그러나 다리가 4 개인 의자는 두 가지 방법으로지면에 서서 한쪽 다리가 다른 쪽 다리보다 짧으면 한 위치에서 다른 위치로 흔들립니다.
ChrisC

궁금합니다. 삼각형이 항상 같은 평면을 가리킬 수 있습니까? 그러면 실제로 구를 어떻게 그리나요? 점 중 하나 이상을 다른 평면에서 변환해야합니다. 그렇지 않으면 평평한 표면이 표시됩니다.
rataplan '12

@newbiez 3 개의 꼭지점은 항상 단일 평면을 정의합니다. 구는 다른 삼각형으로 만들어집니다. 구 표면의 패치를 나타내는 두 개의 인접한 삼각형은 두 개의 꼭지점을 공유하지만 같은 평면에 있지 않습니다. :이 이미지는 것들을 명확하게 할 수있다 cse.csusb.edu/tongyu/courses/cs420/images/icos.jpg
ggambett

8

세 점 (삼각형)은 항상 평면을 정의합니다. 즉, 세 점이 주어지면 항상 세 점을 모두 절단 할 수있는 평평한 평면을 만들 수 있습니다. 그러나 네 점에 대해서도 항상 같은 것은 아닙니다. 평면에 4 개의 점을 모두 가질 수 있지만 평면에없는 4 개의 점을 가질 수도 있습니다.


2
실제로 4 개의 임의의 점이 평면에 있지 않을 가능성이 높 으므로 어쨌든 삼각 측량해야합니다.
ChrisF

포인트가 일치하지 않는 경우에만 해당됩니다.
notlesh

1
점이 일치하더라도 무한대의 평면에서 동일 평면 상에 있습니다.
3Dave

동일 평면 상에있는 것은 평면을 항상 정의” 하지 않습니다 .
sam hocevar

6

이를 수행하는 것은 "게임 엔진"이 아닙니다. 사용하는 모든 3D 소프트웨어가이를 수행합니다. 그것은 단지 당신에게 그것에 대해 말하지 않으며, 교수가 이것을 모른다면 상당히 자격이 부족한 것처럼 보입니다. 소프트웨어가 사용자에게 숨겨져 있어도 컴퓨터의 메모리에 존재합니다. 모든 3D 프로그램에는 삼각형을 볼 수있는 옵션이 있습니다. 또한 가장자리를 편집 가능한 가장자리로 나누는 옵션도 제공되므로 함께 사용할 수 있습니다. 그러나 그들은 항상 시작하기 위해 거기에 있었고 당신의 교수 가이 주제를 가르치고 여전히 "삼각형이 무엇인지"궁금해하는 것은 순진합니다.

삼각형은 버텍스를 정렬하고 평평한 표면을 보장하는 유일한 방법입니다. 쿼드가 있으면 구부러져 야하는 방식으로 버트를 정렬 할 수 있습니다. 그러나 이미 삼각형으로 만들어졌으며 굽힘을 허용하는 삼각형입니다.


3

삼각형은 3D로 표면을 설명하지 않는 것보다 적은 3 개의 점을 가지기 때문에 격리되어 설명 할 수있는 가장 단순한 기본 요소입니다 .

삼각형은 고립 된 것으로 간주 될 수 있기 때문에, 반복의 힘을 통해 임의의 표면을 전혀 렌더링 할 수있는 단일 삼각형만을 렌더링 할 수있는 코드 또는 실리콘 조각을 만드는 것이 가능하다.

따라서 "모든 표면"을 렌더링하는 데 성공한 최초의 컴퓨터 시스템은 많은 삼각형을 독립적으로 렌더링함으로써 자연스럽게 그렇게했습니다.

삼각형과 쿼드를 "프리미티브 (primitive)"라고 생각하면 (즉, 문맥이없는 완전히 고립 된 지오메트리 비트) 삼각형이 더 원시적이므로 "승리"하는 경향이 있습니다.

그러나 1980 년대에 엔터테인먼트 급 컴퓨터가 특정 수준의 정교함을 넘어 서면 "기본형"을 격리하는 데있어 단순함이 덜 중요해졌습니다. 그래픽을 대량으로 생산하는 경우 규모의 경제는 관련 정점 처리 그룹을 선호합니다. 한 번에 거의 동일한 자동차 수백 대를 조립하는 것을 선호합니다.

1980 년대에 영화가 "사분면"을 채택한 이유는 3 차원 공간에서 2 차원 정점 격자를 나타내며 격리 된 사변형이 아니라 잘못된 명칭입니다.

삼각형에서 "쿼드 (quad)"로의 동일한 이동은 아직 인터랙티브 엔터테인먼트의 영역에서 일어나지 않았지만, 상당히 빨리, 그리고 같은 이유로 영화 사업에서 일어난 것 같습니다.


2

n면 다각형의 경우 삼각형 대 'n-2'방법을 삼각 측량하는 방법은 하나뿐입니다. 따라서 삼각형은 궁극적으로 다면체 모양을 정의하는 가장 모호한 방법입니다. 또한 다른 포스터가 지적했듯이 삼각형 (4 개 이상이 아닌) 래스터 화를 가속화하는 많은 방법이 있습니다 (일정한 z는 내가 좋아하는 것 중 하나입니다). 또한 광선 임의 다각형 교차 테스트보다 광선 삼각형 교차 테스트를 최적화하는 것이 더 쉽습니다. 실제로, n-면 다각형에 대한 많은 연산은 손으로 삼각 표현을하는 것으로부터 이익을 얻습니다. 즉, n면 다각형 표현이 '나쁜'것은 아닙니다. 매우 유용하지만 궁극적으로 많은 메쉬 작업을 위해 삼각형으로 작업하고 싶습니다.


2

삼각형이 세 개의 비선형 정점에 의해 정의되는 한 (읽기 : 각도가 정확히 Pi가 아닌) 정점이 고유 평면을 정의합니다.

쿼드는 물론 4 개의 정점으로 정의됩니다. 해당 정점이 동일 평면 상에 있지 않을 수 있습니다. 이 경우 쿼드는 실제로 사각형에서 대각선으로 나눈 두 개의 삼각형이됩니다. 그것은 두 개의 평면, 두 개의 표면 법선 등입니다.

사용 가능한 모든 모델링 도구, 텍스처링, 조명 등의 모든 알고리즘은 모두 모델이 평면 세그먼트로 구성되어 있으며 모든 공식 (일반 계산을위한 교차 제품이 가장 먼저 사용됨)은 절대 최소 입력 데이터 셋을 사용합니다. 꼭짓점은 평면을 정의하고 평면은 우리가 멋진 일을 모두 수행해야하는 것입니다.

쿼드로 작업하기 위해 엔진을 확실히 작성할 수는 있지만 쿼드를 정의하는 다른 세 가지와 동일 평면 상에 있는지 확인해야하는 경우를 제외하고 거의 모든 경우에 네 번째 정점을 무시하는 것을 알게 될 것입니다. 그리고 동일 평면 상 에 있지 않은 경우에 대한 가장 논리적 인 해결책 은 쿼드를 두 개의 삼각형으로 나누는 것입니다. 그렇다면 왜 그렇게 시작하지 않습니까?

지구상에서 쿼드 작업의 요점은 무엇입니까?

쿼드를 원한다면 두 개의 삼각형을 합치십시오.


2

우리가 4 점을 동일 평면에 놓는 것이 문제가 아니라고 가정하면 (다른 점에서 지적했듯이 나에게 견딜 수 있음) 임의의 사다리꼴 (사변형이 일반적으로 보이는 모양)을 렌더링한다는 것을 알 수 있습니다 화면 공간으로 변환 할 때)는 삼각형을 렌더링하는 것과 특별히 다르지 않습니다. 실제로 클리핑을 수행하면 추가 꼭지점이 발생할 수 있으므로 거의 동일하게 작동합니다. (적어도 소프트웨어 모델에서는 하드웨어가 클리핑을 수행하는 간단한 무차별 방식을 가질 수 있습니다.)

따라서 나머지 문제는 표현 효율성 중 하나입니다. -2 개의 삼각형으로 사각형을 쉽게 표현할 수 있으며, 삼각형 스트립을 사용하는 경우 추가 정점없이 쉽게 표현할 수 있습니다 (첫 번째 삼각형의 경우 3 개의 vert, 두 번째 삼각형의 경우 추가 vert). 반면, 사각형이있는 삼각형을 표현하려고하면 4 개의 꼭짓점을 사용해야하고 다른 것과 동일한 축을 가지고 있어야합니다. 이것은 효율성 측면에서 이상적이지 않습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.