정말 고해상도 디스플레이 배열을위한 코딩


17

필자는 60 인치 LED TV의 5x2 어레이, 즉 20 메가 픽셀 디스플레이에서 실행되는 실시간 "전체 화면"데모를 작성하는 일을 맡았습니다.

디스플레이 전체에 단일 Win7 데스크톱 스프레드를 전체 해상도로 실행할 수있는 시스템과 꽤 괜찮은 비디오 카드가 있습니다.

내 질문은 : 내 픽셀 쉐이더가 수행 할 어리석은 양의 작업 외에도 DX10. *의 다른 제한 사항이 있습니까? 다음 주까지 하드웨어에 액세스 할 수 없지만 시스템 벤치마킹에 사용할 수있는 내용을 작성하고 싶습니다.

최신 정보

많은 AMD EyeFinity (6 출력) 카드를 사용하여 단일 시스템에서이 작업을 수행 할 수 있었지만 작업을 매끄럽게 유지하기 위해 "가장 쉬운"방법은 창 범위 표시를 갖는 디스플레이 당 DX 창을 만드는 것으로 판명되었습니다 몇 가지 성능 문제가 발생했습니다. 또한 각 그룹이 두 대의 디스플레이를 구동하는 시스템 그룹에 작업을 분배하여 제대로 작동했습니다.

놀라 울 정도로 쉬웠다. 테스트 XNA 앱의 경우 게임 상태 (카메라 위치 / 방향 등)를 캡처하고 프레임 당 로컬 서브넷을 통해 UDP 스팸하는 GameComponent를 추가했습니다.

해당 구성 요소에는 Mode스위치가 있습니다 (송수신). 이 글은 만약 Receive모드는 UDP 데이터 그램을 잡아 발신자의 정보와 게임 상태를 업데이트합니다. Send모드는 상태 패킷을 전송하고 서비스 / 데몬을 통해 노드가 클라이언트 앱을 시작하거나 중지하도록합니다. 모든 클라이언트는 "마스터"역할을 할 수 있으며 클라이언트를 Send모드 로 전환하면 다른 모든 노드로 전환을 요청합니다 Receive. 사람들이 통제권을 놓고 싸우고있을 때 어떤 일이 일어나는지 보는 것은 꽤 즐겁습니다.

또 다른 좋은 장점 : 위치, 시간 등 일련의 키 프레임 상태 정의를 처리하고 필요에 따라 보간하고 게임 엔진에서 사용되는 것과 동일한 코드를 사용하여 콘솔 응용 프로그램을 보내는 콘솔 응용 프로그램을 만들었습니다. 이를 통해 쉽게 스크립트를 이동하고 웹 브라우저에서 변환을 제출할 수 있습니다.

대체로 앱의 여러 복사본을 동기화 상태로 유지하려면 약 50 줄의 코드가 필요했습니다. 일부 추가 복잡성은 각 머신의 카메라 위치를 설정 해제하고 원근감 / 투영 성가심을 수정하는 데 있었지만 대부분 노드 당 구성 파일로 변경되었습니다.


2
이것은 정말 재미있는 프로젝트처럼 들립니다.
Cypher

1
네. 나는 거의 움켜 쥐고 무 하하했다.
3Dave

3
나는 먼지 상품 기계 10 대를 저렴한 가격으로 사용했는데, 각각 세계의 작은 조각으로 렌더링하는 것에 대해서만 걱정하고 일부 마스터 박스에서 시간 동기화 및 제어를 유지하기 위해 네트워크로 연결되었습니다. 최첨단 R & D 위험이있는 테스트되지 않은 장비 구성의 최첨단 기술은 위험이 매우 낮은 미리 준비된 솔루션입니다. 그래도 YMMV입니다.
Patrick Hughes

그것이 내가 갔을 방법이지만 하드웨어를 구입하지 않았습니다. = /
3Dave

실제로, 네트워크와 동기화 된 렌더링 화면은 대단합니다. 도전적이지만, 나는 이미 그 일을하는 방법을 이미 알고 있습니다. 또한 배열을 분할하려는 경우 하나의 상자에서 여러 스트림을 렌더링 할 필요가없는 유연성을 제공합니다. "병렬"은 내가 가장 좋아하는 단어 중 하나입니다!
3Dave

답변:


5

하드웨어 구성에 대해서는 소프트웨어만큼이나 걱정이됩니다. 각 TV를 기본 해상도로 실행할 필요가 없으며 화면 크기가 해상도와 다릅니다. 60 인치 TV는 각각 1920x1080이라고 가정합니다. TV의 5 행 x 2 열을 의미하는 경우 기본 해상도는 9600x2160, 5 열 x 2 행을 의미하는 경우 3840x5400입니다.

최신 AMD Radeon 카드 인 7970은 DisplayPort 1.2를 사용하여 비디오를 전송하는 경우 최대 2 개의 디스플레이에서 디스플레이 당 최대 4096x2160의 해상도를 지원합니다. 따라서 기본 해상도에 가까울 수 있지만 최대 5 대의 TV에서는 작동하지 않습니다.

AMD Radeon 6870 Eyefinity 6은 ​​한 번에 최대 6 개의 출력을 지원하지만 5760x2160의 최대 해상도에서만 지원합니다. 또한 Crossfire 구성을 지원하므로 성능이 약간 향상됩니다. 추가 GPU는 더 큰 최대 해상도를 생성하지 않습니다.

완전히 맞춤화 된 디스플레이 설정 또는 비디오 신호를 더 많은 모니터 / TV로 분리 할 수있는 기능이 부족하여 한 번에 10 개의 디스플레이에서 어떻게 실행할 수 있는지 잘 모르겠습니다. 그러나 해당 기능이 있다면 원하는 것은 기본 해상도와 가장 가까운 해상도를 지원하는 가장 빠른 그래픽 설정입니다. 일단 가장 좋은 방법은 픽셀 쉐이더를 가능한 한 저렴하게 유지하고 오버 드로우를 피하는 것입니다. 이는 단일 픽셀을 두 번 이상 계산하는 것을 의미합니다. 절두체 및 폐색 제거 및 심도 정렬은 오버 드로우를 줄이는 데 크게 도움이됩니다. DX10 내에서 한도까지는 해상도를 제한하는 것이 확실하지 않으며, 존재하는 DX10 카드보다 클 수도 있습니다.


하드웨어는 이미 전체 어레이를 실행하며 각 개별 디스플레이는 1920x1080입니다. 5 열 2 행. 다른 사람이 회전 와이어 프레임이 실행되는 전체 해상도 OpenGL 창을 얻었습니다. 나중에 다시 와서 물릴 수있는 DX 제한에 대해 궁금해합니다.
3Dave

1
내가 아는 한 DX10은 설명과 같은 해상도로 제한되지 않습니다. 해당 설정에 이미 표시 할 수 있다면 성능이 유일한 관심사이며 해당 성능을 처리하는 것은 다른 게임 / 프로그램과 비슷하며 여분의 화면 공간으로 인해 상당히 확장되었습니다.
Nic Foster

6

성능을 테스트하기 위해 동등한 크기의 렌더 타겟을 쉽게 만들 수 있습니다. 실제 하드웨어를 얻을 때까지 백 버퍼에 복사 할 때 축소하거나 축소해야합니다.

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