GPU에서 지형 생성


9

내 엔진에서는 CPU에서 계산 된 Perlin noise alghoriTM을 사용하여 무한 지형을 만듭니다.

지형 생성은 다음과 같습니다.

  • 카메라가 언로드 된 패치 근처에 있으면 생성하십시오
  • 주어진 경계를 가진 513x513 노이즈 어레이 계산
  • 법선, 탄젠트, 바이 노멀, 인덱스 계산
  • vbo로 데이터 전달

장점 :

  • 필요할 때만 렌더링하면됩니다
  • 충돌하기 쉽다

범죄자

  • 느린 64 513x513 패치는 3,1 (1 스레드)로 생성됩니다. 각 타일에 대해 ~ 20ms 노이즈 생성, ~ 25ms 정점, 법선, 탄젠트, 비트 탄젠트, 인덱스. 카메라가 빠르게 움직이면 타일이 로딩되는 것을 볼 수 있습니다.
  • 메모리 소비 ???

이제 GPU에서 지형을 완전히 생성하여 속도를 높이는 방법이 궁금했지만 의심의 여지가 있습니다.

  • 셰이더가 모든 프레임에서 실행되는 경우이 계산 전력이 계속해서 잡음을 계산하는 데 낭비되지 않습니까? 이것은 RBGA 텍스처에 결과를 써서 피할 수 있고 나중에 버텍스 쉐이더에서 변위를 위해 사용되지만 메모리 사용량을 증가시킵니다. 반면에 제작이 매우 빠르면 보이는 타일 만 메모리에 남아 있어야합니다. 그러나 버퍼를 분리하면 gpu-cpu 동기화가 발생하여 앱 속도가 느려질 수 있습니다 (맞습니까?)
  • 터 레인이 버텍스 셰이더로 대체 된 평평한 그리드 인 경우 충돌 지점에서 높이와 법선을 계산하려면 CPU에서 동일한 작업을 수행해야합니다.
  • 이것은 단지 개념이지만 모든 것을 가속화하기 위해 뷰포트에 그리드 투영에 대해 생각했기 때문에 최소한의 꼭짓점 만 사용됩니다. 이것이 효과가 있다고 생각합니까?

마지막 질문은 :

GPU에서 무한 지형을 생성하기 위해 가장 빠르고 가장 널리 사용되는 기술은 무엇입니까?


8
GPU에서 터 레인을 생성하면 충돌 감지, 피킹 감지 또는 터 레인과의 거의 모든 종류의 상호 작용을 수행하기가 어려워집니다.
MichaelHouse

1
컴퓨팅 셰이더 (DX10 또는 11)를 사용하여 GPU에서 터 레인을 생성 할 수 있습니다. 그러나 Byte56에서 언급했듯이 상호 작용하려면 GPU에서 값을 다시 가져와야합니다. msdn.microsoft.com/ko-kr/library/windows/desktop/…
UnderscoreZero

나에게 나쁜 생각처럼 GPU 종류의 사운드에서 지형을 만드는 것. 작동 할 수도 있지만 CPU 측에서 지형을 생성하고 표준 드로잉을 GPU로 보내면 아마 조금 더 잘 작동 할 것이라고 생각합니다.
벤자민 위험 존슨

단지 내 경험; 나는 실제로 이것을 아파 라피 (aparapi)와 함께했고 실제로 그 일을 해냈다; 그러나 실제로 CPU가 작업을 수행하는 것보다 속도가 느려졌습니다. GPU와 데이터를주고받는 오버 헤드 때문에 생각합니다. 내가 정확하게 기억한다면 gpu는 계산이 데이터의 크기와 비교할 때 (그리고 절대적인 용어로도) 큰 경우에만 작동합니다.
Richard Tingle

이 기사는 당신에게 몇 가지 아이디어를 줄 수 있습니다 http.developer.nvidia.com/GPUGems3/gpugems3_ch01.html
Jeremiah Leslie

답변:


2

글쎄, 그런 일에 GPU를 사용하려고한다면 컴퓨팅 / opencl / cuda로 갈 것이라고 생각합니다.

그러나 GPU 또는 CPU (실제로 수행하는 작업) 사용에 관계없이 비동기 방식으로 수행하여 현재 프레임에 새로운 지형이 필요하다고 판단하면 너무 늦을 수 있습니다 (예 : 1000ms / 60 = 16.666ms, 전체 프레임이 그에 맞기를 원합니다).

워커 스레드에서 터 레인 생성 (또는 압축 파일에서로드)을 시작하고 워커가 완료되면 게임의 나머지 부분과 렌더링에 사용할 수 있도록합니다. 일반적으로 다음 프레임 또는 그 이후의 프레임이됩니다. 사용자는 실제로 그 차이를 알지 못하지만 일을 더 매끄럽게 만듭니다.

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