16台プロジェクター同期投影 -AMD Radeon Pro Wx9100で4K5枚を同期出力

# 目的
１つのPCから**フレーム同期した4Kを4画面分＋制御画面１枚：合計５面の4K映像を出力したい**。4K1枚から、4つのFullHD映像を分岐投影するので、合計16台のプロジェクターを同期投影することが可能になる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/70810/529b365f-db8c-951a-f4e8-59468c1e3d73.png)


この記事の続編です。
https://qiita.com/shks/items/580640b95f37ea42b2de


> [関連展示](https://www.ginzasonypark.jp/program/021/)が2020年3月15日までやっています。
> 本システムを使った、映像・展示に関するワークショップが2020年3月14日に[オンライン開催](https://tdsw023.peatix.com/?fbclid=IwAR08IJy4-Xq324wfBZSDbxdzpuYyQPCLm3cirdjag7b1dyE4AQcbheE1wqc)されます。（内容は本システムに加えて幾何・色彩キャリブレーション・Visual効果制作などの内容です。）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/70810/01974673-9bd4-d52a-3971-dae4ec4d7f4c.png)

## 既存手法の問題点と方針

- Nvidia系のGPUでは、HDMI / DP出力ポート4つまでなので、全てを使用してしまうと制御用画面が使えなくなってしまう。
- 制御画面出力用にCPU統合側グラフィックを経由するとパフォーマンスに影響が出る可能性があるので、単一のGPUで完結させたい。
- Quadro GPU x 2 + NVIDIA Quadro Sync II で複数GPUを構成して、DPポートを8個まで増設することができるがコストアップになる。かつ、複数GPUでのパフォーマンス検証が必要。欲しいのは5個・・

よって、**5つ以上の映像出力ポートを持ち、4K（ 3840 x 2160, 60Hz )を出力できるGPU**が欲しい。


## 経緯
たまたま、Twitterのタイムラインに[AMD RadeonGPU](https://www.amd.com/ja/products/professional-graphics/radeon-pro-w5700)の広告が出る。よく見るとminiDPポートが5つ並んでいる。すごいなTwitter広告。

さらに、調べると[**AMD Radeon Pro Wx9100**](https://www.amd.com/ja/products/professional-graphics/radeon-pro-wx-9100)では、**miniDPポートが6つ**並んでいる。事前調査の後、AMD Radeon Pro Wx9100を採用し、4K5枚を同期出力(4K4枚を同期出力 + 1枚制御用）を実現したので、下記に手順を記録します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/70810/bd270d15-4e4a-efcd-a964-dbfc6fcfe550.png)


# AMD Radeon Pro Wx9100で4K5出力するための手順

## 環境：
- Radeon Pro Driver version: 19.Q4.1
- GPU AMD Radeon Pro Wx9100
- Windows 10
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/70810/5cc836ba-2c71-b6d6-5c15-37a2b8170d35.png)


ディスプレイ設定とRadeon Pro設定と、Radeon Pro詳細設定を用いる
デスクトップ画面上で、右クリックメニューでGPU設定が表示される。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/70810/a560dd26-c83e-e367-39e2-7ebc140b1e0f.png)


## システム構成の概要

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/70810/7ae3f03e-fc65-78e4-9c96-95b37744fb23.png)

AMD Radeon Pro Wx9100 GPUから4つのHA5-4K (1本の4K HDMIを4つのFullHD SDI へ変換する）へ接続。かつ、制御用の4Kディスプレイも接続する。
4K x 4つの映像（8K映像）はPC内部のTouchDesigner内で生成されて、ディスプレイアウトとして送出される。

## 1. EDIDエミュレーション

AMD Radeon Pro GPUでは、**EDIDエミュレーション機能**が提供されています。

EDID（Extended Display Identification Data）は、ディスプレイやプロジェクターなどの表示機器の情報や対応するデータ形式などが記述された機器固有の識別データです。映像機器がGPUに接続された時、GPUシステム側がEDIDをもとに（基本的には）対応する最大解像度の映像を送出します。[参考](http://www.hdmi-navi.com/edid/)

複数ディスプレイ装置を用いたシステムを構築する際、接続されたディスプレイがどのような配置になるかは、接続した後に確認する必要がある。さらに、問題となるのが何らかの原因でディスプレイが認識されなかった場合、ディスプレイID / 配置設定が崩れることで正しい映像出力が行えなくなります。

これらは、1つのディスプレイ装置が抜けただけでも、接続している他のディスプレイ機器もEDIDの情報の再取得やIDのふり直しが起きるため、そのリカバリー作業もディスプレイIDの確認作業も時間がかかるため致命的なエラーとなってしまいます。

EDIDエミュレーションは、例えば、現在接続している表示ポート（HDMI / Display Port)に接続されている表示機器のEDIDをエミュレーション（仮想的に保持）します。これにより、**たとえ接続されている表示機器が抜けたとしても、その表示機器が接続されている状態として取り扱い**、ディスプレイ配置設定やIDを保持し続けることができます。

### AMD Radeon Pro GPUのEDIDエミュレーション手順

1. 全てのディスプレイを接続する。
2. Radeon Pro設定 > ディスプレイのタブを開き、「すべてのディスプレイをエミュレート」

個別の映像機器ごとにエミュレートする際には、個別のポートの「…」からEmulateを設定。全体をエミュレートした後に、制御用ディスプレイを変更するために、一つだけエミュレートを解除することも可能。（remove)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/70810/fa196954-d8af-456a-f1c4-abff443052e2.png)


ここまでで、AMD Radeon Pro Wx9100に、HA5-4Kが4つと制御用のディスプレイ1つが接続された状態になります。ここまでで、4K5枚を出力することは出来ていますが、このままだとフレーム同期が実現出来ません。（少なくとも、我々の環境では）

次に、HA5-4Kが4つ対して出力をしている4K4枚を仮想的な1枚のディスプレイとして認識させます。マルチディスプレイを仮想的な1つのディスプレイとして認識される（ [**NVIDIAにおける Mosaic™**](https://www.nvidia.com/ja-jp/design-visualization/solutions/nvidia-mosaic-technology/) ）AMD GPUの機能として、[**Eyefinity**](https://www.amd.com/ja/technologies/eyefinity)があります。



## 2. AMD Radeon Pro Eyefinity設定

まずは最初のディスプレイ状態を確認します。Windows標準のディスプレイ設定でディスプレイの順序を所望の配置に設定しておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/70810/3a09338f-4455-df20-38f2-ae4dcb017fb5.png)

次にRadeon Pro設定→AMD Eyefinity「高度なセットアップ」に移ります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/70810/583cf689-5930-8a3c-326e-1240f789ce55.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/70810/c974a75b-e6f2-a275-be65-71a61f21c0c5.png)


まずは、[Select Layout]でディスプレイレイアウトを指定する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/70810/8859cf2b-61bf-dd44-c53d-4f777cde6e5c.png)


今回は、5枚のうち4枚を横に長いディスプレイとして認識させるので、 Select layout で[4x1]を選択

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/70810/8f581cc2-5b9c-7b21-f22f-19571737adb4.png)

ここの画面で、4x1のレイアウトに、どのディスプレイをアサインするのかを指定する。配置が完了したら、**Creat AMD Eyefinity Configuration**で設定を作成開始

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/70810/7da4e771-2f65-b9a1-2f86-0eed0954f834.png)

ここまでくると連結完了。ディスプレイ出力状態が変化する。


## 3. 画面連結状態の確認
ここで設定されて、1つの4K(ディスプレイ）を４つのHA5-4K出力が仮想的な一つの画面になる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/70810/81dc4511-73fa-b614-8990-eb4390a59e35.png)

通常の使用方法であれば、ここまで仮想的なディスプレイ環境構築が完了する。

しかし、Eyefinity適応後、ディスプレイ解像度16382 x2160になっていて、4 x (1920 x 2 )の解像度ではないため、HA5-4K側で認識されない。かつ、初期状態では、「 (4 x (1920x2) ) x 2160つまり、15360 x 2160」選択肢も表示されない。

## 4. 連結画面の解像度を変える
RadeonPro詳細設定→Eyefinityデスクトップ解像度のカスタマイズ
再度、デスクトップメニューから、次はRadeonPro詳細設定を開く。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/70810/df15d933-bebf-eaf0-bc6e-40b077db19e0.png)

RadeonPro詳細設定→Eyefinityデスクトップ解像度のカスタマイズを開き、カスタム解像度で、15360 x 2160を指定する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/70810/55a3a856-34bd-4744-d2c4-f1feb15a4f2c.png)

自分の環境ではこれだけではまだ、解像度は反映されず、windowsのOS側のディスプレイ設定で指定する。15360 x 2160が指定できるようになっている。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/70810/4ce26cd5-a7b5-aa9d-ecf7-2d878862f797.png)


**（それでもうまくいなか無い時）**
RadeonPro詳細設定から、Eyefinityディスプレイグループを再度有効にする。Windowsディスプレイだけでうまくいくときと、行かない時がある。反映されない場合には、RadeonPro詳細設定から、Eyefinityディスプレイグループを再度有効にする


## 5.TouchDesignerからの映像出力
本システムは、TouchDesignerをジオメトリー変換・色変換・映像生成に使用しています。TouchDesignerからの映像の出力は通常通りのwindow COMPを用いて、上記で作成したEyefinityディスプレイを出力先に指定して映像を出します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/70810/f7fc8c65-99f8-f875-90e6-85bddac902dd.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/70810/3769eca8-7bab-e333-e3fc-c42538528e10.png)


# Conclusion

16台のFullHDプロジェクターを同期出力するために、AMD Radeon Pro Wx9100で4K4枚をEyefinityディスプレイ機能で同期出力し、さらに4K1枚制御用ディスプレイを確保したシステムを構成しました。
AMD Radeon ProのEDIDエミュレート機能は致命的ショーストップを防ぐ意味でもかなり心強い機能でした。

本件は、@satoruhiga とともに取り組んだ内容になります。
いつか誰かの役に立ちますように。

# Appendix 1
 
こちらのシステムを使用した展示が、[こちら](https://www.ginzasonypark.jp/program/021/)で2020年3月15日まで行われています。
また、本システムを含めた展示技術に関するワークショップが2020年3月14日に[オンライン](https://tdsw023.peatix.com/?fbclid=IwAR08IJy4-Xq324wfBZSDbxdzpuYyQPCLm3cirdjag7b1dyE4AQcbheE1wqc)で行われます。オンラにワークショップでは実際に、ワークショップ参加者が送ってくれたプログラム・映像を、本システムから投影してその様子を配信します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/70810/7501d15b-5688-2a9b-5d58-bb0f091320f5.png)



# Appendix 2
4K映像から、4つのFull HD - SDIへ分割送出してくれるHA5-4Kは長期稼働の熱対策のために、ヒートシンクを貼りファンで挟むことによって冷却。現状仕込み期間を含めて50日24時間稼働させても問題なく稼働。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/70810/f2d643f5-d1a5-587c-8e18-6187a5ba4b1b.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/70810/694998ea-9f12-24e3-253c-8bcbda563a11.png)

プロジェクター配置の様子

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/70810/e017001a-9e31-f296-8198-978f53a38575.png)


# Reference

Shunichi Kasahara, Satoru Higa, and Akihiro Komori. 2019. Fragment shadow: generating fragmented shadows with multi-projectors geometry and color calibration. In ACM SIGGRAPH 2019 Studio (SIGGRAPH ’19). Association for Computing Machinery, New York, NY, USA, Article 6, 1–2. DOI:https://doi.org/10.1145/3306306.3328003