3D 모델 예산. 더 많은 수의 삼각형 또는 정점


12

3D 게임용 모델을 만들 때 예산 폴리곤 (삼각형) 또는 꼭짓점에서 측정 값으로 무엇을 취해야합니까? 나는 8 개의 정점과 12 개의 삼각형을 가진 2 개의 세트 40000 큐브, 24 개의 정점과 12 개의 삼각형을 가진 다른 세트로 실험을했습니다. 모든 것이 Unity에서 이루어졌으며 둘 다 절차 적으로 생성되었습니다. 놀랍게도 두 세트의 성능은 거의 같았으며 그 차이는 매우 작았습니다.

정점 수에 대해 걱정하지 않고 삼각형 수만보아야한다는 것을 의미합니까?

편집 : 나는 19602 삼각형과 10000 정점과 같은 양의 tirangles이지만 39204 정점으로 다른 평면을 만든 또 다른 실험을했습니다. 둘 다 4000을 생성했습니다. 이제 정점이 적어지면 14fps에서 19fps로 승리했습니다. 따라서 일반적으로 적은 것이 더 좋지만 큰 차이가 있다고 생각합니다.


9
게임을 작성하고 발생하는 문제를 해결하십시오. 이런 종류의 문제는 결코 일어나지 않을 수 있으며 당신은 당신의 시간을 낭비하고 있습니다 : P
Vaillancourt

답변:


16

지형에 사용할 수있는 것과 같은 큰 그리드 메쉬를 상상해 봅시다. 우리는 렌더링 수 있습니다 n하나의 그리기 호출에서, 말하자면 절반 우리의 1080p의 화면을 덮고, 그 삼각형의 가치를.

모든 정점을 용접하고 스무딩 / 텍스처 이음새가없는 경우 각 삼각형에는 3 개의 정점이 있고 각 정점은 6 개의 삼각형으로 공유되므로 n/2정점이 있습니다.

이를 렌더링하려면 다음을 수행해야합니다.

  • 버텍스 쉐이더를 최소한 한 n/2번 실행

    (정점 결과에 대한 캐시가 너무 커서 "적어도"입니다. 때때로 우리는 이미 변환 한 정점을 제거 할 수 있습니다. 그런 다음 해당 정점을 공유하는 이후 삼각형이 다시 필요하므로 정점 셰이더를 다시 실행해야합니다. 따라서 종이에 보이는 것만 큼 많은 비용을 절약 할 수는 없습니다.)

  • 클립 & 컬 n삼각형.

  • 최소 1920x1080 / 2 또는 약 1 백만 픽셀 이상의 프레임 버퍼를 래스터 화 및 보간합니다 (우리 지형이 화면의 약 절반을 차지한다고 말했기 때문에).

    GPU가 쿼드 픽셀 에서 작동하는 방식으로 인해 "적어도" " 다각형의 가장자리 밖에있는 일부 프래그먼트는 여전히 래스터 화되지만 마스크 처리됩니다. 즉, 프래그먼트를 두 번 처리합니다. 가장 앞면 다각형을 깊이 버퍼에 먼저 그릴 정도로 운이 좋지 않으면 자체를 차단합니다.)

  • > = 1 백만 개의 모든 조각에 대해 조각 쉐이더를 실행하십시오.

  • 프레임 및 깊이 버퍼에 ~ 100 만 개의 결과를 혼합합니다.

자, 이제 그래서 우리의 정점을 모두 unweld 지금 우리가 할 수 3n렌더링 정점을 여섯 번 더 이전보다! 우리의 발걸음은 ...

  • 꼭짓점 셰이더 3n시간을 실행합니다 .

    (모든 정점이 한 번만 사용되므로 캐싱으로 인해 별표가 표시되지 않습니다. 이는 캐시가 시간을 절약 할 수 없음을 의미합니다)

  • 클립 & 컬 n삼각형.

  • 최소 1920x1080 / 2 또는 약 1 백만 픽셀 이상의 프레임 버퍼를 래스터 화 및 보간합니다.

  • > = 1 백만 개의 모든 조각에 대해 조각 쉐이더를 실행하십시오.

  • 프레임 및 깊이 버퍼에 ~ 100 만 개의 결과를 혼합합니다.

... 첫 번째 단계를 제외한 모든 단계 는 동일합니다! 따라서 일반적인 드로우 콜에서 GPU가하는 대부분의 작업은 사용 된 정점 수와 직접 관련이 없습니다. 화면 적용 범위, 오버 드로우 및 총 삼각형 수는 훨씬 더 많은 비용을 구성합니다.

꼭 정점이 완전히 무료라는 의미는 아닙니다. 캐싱을 통해 정점을 공유 할 수있는 경우, 특히 정점 셰이더가 복잡하거나 하드웨어의 정점 파이프 라인이 약한 경우 (일부 콘솔에서와 같이) 그러나 정점 수는 삼각형 수에 비례하거나 일정한 요소를 뺀 비율을 추적한다는 점에서 일반적으로 전체 메쉬 비용의 메트릭만큼 흥미롭지는 않습니다.


정점을 메모리로 보내는 비용은 어떻습니까?
Michał Leszczyński

7
매 프레임마다 정점 버퍼를 변경하지 않는 한, 업로드 비용을 한 번 지불합니다. 텍스처와 프레임 버퍼는 주어진 프레임 내에서 더 큰 비디오 메모리와 대역폭을 차지합니다. 그것은 여전히 ​​정점이 자유롭지 않다는 것을 의미하며, 실용적 일 때 공유하는 것이 낫지 만 공유되지 않은 정점은 게임이 제대로 수행되지 않는 이유는 거의 없습니다.
DMGregory

내 게임에서 숲 등을 할 때 이것에 추가 할 것입니다. 처음 시작했을 때, 나는 vert call 만 사용하여 모델을 그리기 위해 초기에 draw call (내 자신의 엔진을 사용하며, 이것은 귀하의 질문에 완전히 맞지 않을 수도 있음)을 사용했습니다. 그러나 인덱싱을 사용하기 시작했을 때 일부 버트가 공유되고 캐시되어 일부 계산이 두 번 수행되지 않았기 때문에 성능이 향상되었습니다. 결론은, verts의 원시 테스트만이 최고의 지표 vert 대 tri 수는 아니라는 것입니다. 파이프 라인에 너무 많은 영향을 줄 수 있습니다. 다른 답변으로 암시합니다.
ErnieDingo

2

둘 다.

당신이 정말로 많은 수의 트리스 (수백만)를 이야기하지 않는다면, 당신이 관심을 갖는 것은 :

  • 렌더링 된 픽셀 수
  • 프래그먼트 셰이더 비용
  • 드로우 콜 수 (장치에 따라 제한이 매우 높음).

정점 24 개에 4000 큐브가 96'000 개의 정점을 제공합니다.

640x380 픽셀은 243'200 조각을 제공하며 대부분의 장치는 상당히 큰 해상도를 지원합니다.

1'000'000 큐브로 실험을 다시 실행하여 병목 현상 병목 현상을 피할 수 있습니다 (1,000 큐브의 단일 모델).


2
이것은 장면과 렌더링 방식에 따라 다릅니다. 당연히 오버 드로가 거의없는 장면이 있다면 꼭짓점 처리가 성능을 지배 할 수 있습니다. 또한 그리기 호출 사이의 상태가 변경되는 것처럼 그리기 호출 수는 (일부 API의 경우) 문제가 아닙니다.
Nicol Bolas

1

WebGL 애플리케이션을 수행하는 경우 정점 수는 사용자가 다운로드 할 수있는 파일 크기 측면에서 병목 현상이 빠르게 발생합니다. DCC 소프트웨어에 표시된 것보다 동일한 수의 삼각형이지만 종종 2-3 배 더 많은 정점이 있습니다. 이 경우 랩핑을 줄이면 이음새가 줄어들어 많은 도움이됩니다.

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