문제

Boxel 엔진을 실행하는 (기본적으로 작동하는 물 시스템이 있습니다. https://www.youtube.com/watch?v=q_tdegioots (내 게임이 아님).


물 값은 플로트의 3D 배열에 저장되며, 0.05s마다 아래의 Voxel을 검사하고 인접한 (y-1, x-1, x + 1, z-1, z + 1)을 계산하고 추가합니다 가치.


이 시스템은 소량의 물에 대해 잘 (70+ FPS) 작동하지만 8+ 덩어리에 물을 계산하면 너무 많이 얻을 수 있습니다. (모든 렌더링 또는 메쉬 생성을 장애인하여 병목 현상인지 확인하기 위해 모든 렌더링, 그것은 순수하게 흐름 계산)을 확인합니다.


나는 매우 숙련 된 프로그래머가 아니므로 내가 이미 한 것처럼 계산을 사잉에서 일어나는 일이 아닌 최적화를하는 곳을 알지 못할 것입니다.


이 게시물 : https://gamedev.stackexchange.com/questions/ 55414 / Define-Area-Water-water-water (하단 근처) Boreal은 컴퓨팅 쉐이더 에서 그것을 실행 시켰습니다. 이것이 나를 위해가는 길입니까? 그리고 나는 그런 일에 대해 어떻게 생각하니?


어떤 도움도 감사합니다.

도움이 되었습니까?

해결책

Voxel 기반 시뮬레이션을 실제로 계산하는 경우 크기가 증가함에 따라 계산 수를 기하학적으로 확장 할 수 있으므로 더 큰 볼륨에서 처리 능력이 부족합니다.

컴퓨팅 쉐이더는 익숙해지는 데는 매우 다른 프로그래밍 패러다임이지만, 대규모 병렬 계산을 신속하게 수행하기에 좋습니다. 컴퓨팅 쉐이더는 버퍼의 내용 (예 : 미국 민간인을위한 '텍스처')의 내용을보고 매우 빠르게 수행합니다.이 경우 버퍼는 픽셀 값이 물 셀을 나타내는 버퍼 / 텍스처가 될 것입니다. 계산 쉐이더를 위 또는 아래로 정말로 단순하게 만드는 것을 원한다면 GPU의 병렬 처리 능력을 사용하여 정말 빠릅니다.

하드 부분은 GPU가 병렬 처리 에 최적화되었습니다. 즉, "texela.value += texelb.value"와 같은 코드를 작성할 수 없음을 의미합니다.이 부분에서 추가 작업이 없으면 버퍼의 각 조각은 다른 조각에서 일어나는 일이 제로 지식으로 처리됩니다. 다른 텍셀을 참조하려면 어떻게 든 텍스처를 다시 읽어야합니다. 일부 기술은 오프셋 (이 GL 예제 블러스를 구현하는 것은 이렇게합니다. 다른 사람들은 텍스처를 반복적으로 처리하고 결과를 일시적인 텍스처에 넣은 다음 재 처리 한 다음 그를 다시 처리합니다.

10,000 피트 수준 : 예, 컴퓨팅 쉐이더는 톤의 자체 유사한 계산을 포함하기 때문에이 종류의 문제에 대한 좋은 도구입니다. 그러나 박쥐에서 쉽지 않을 것입니다. 이전에 기존 셰이더 프로그래밍을 완료하지 않은 경우 GPU가 작동하는 방식에 익숙해지기를 원할 수 있습니다. 정말 기본 도구 (IF-then-else 또는 루프)는 GPU 프로그래밍에서 매우 다른 성능의 의미와 사용을 가지며 차이점을 주위에 두드리는 시간이 걸립니다. 이 글을 쓰면 (1/10/13) NVIDIA 및 udacity가 계산을 제공하는 소개를 제공합니다. 셰이더 코스 속도를 높일 수있는 좋은 방법 일 수 있습니다.

FWIW 또한 관객을 제한 할 수있는 쉐이더를 계산할 수있는 꽤 현대적인 하드웨어가 필요합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top