Stable-DreamFusionで自分のVRChatアバターを作ってみた

本記事は 画像生成AI Advent Calendar 2022 の19日目です。

Needleと申します。2013年からVRにハマり、2014年から2018年までOculus日本チームに在籍した後、現在はフリーランスでVR開発の各種支援を行っています。

上記のようにVR歴はそこそこ長いのですが、現在のVRの使い道の主流のひとつであるVRChat文化には、長らく乗っかれていませんでした。というのも、どうにも自分の中で利用に至るまでの心理的なハードルがあったからです…(しばらくAIに直接関係ない話が続きます。クソ長自分語り注意)。

背景(自分語り)

アバター文化に乗れない。

…どうも自分がアニメ調美少女になる気が起きない。別にアニメ絵自体は嫌いではないのですが。
「みんな最初はそう言うんですよ」と言われてもなる気が起きないものは起きず、何を試着してみても強烈な「自分じゃない」感が拭えません。それ以外のアバターも豊富に存在はするものの、服を買いに行く服がない状態ですし、アバターミュージアムバーチャルマーケット等のアバター展示を巡ってみてもどうにもしっくり来ません。そもそもTwitterですら日本の多数派の匿名・非実写アイコンな使い方ではなく、実名を隠さず実写アイコンで長年使っていたので、今から顔や名前を隠して1からペルソナを作るのも今更感が。

現実でも自分の外見にはあまり興味を持っているほうではないのですが、現実ではどれほど外見に興味がなくて化粧や肉体改造といった外見に関する選択や操作を何も行わなかったとしても、生得的アプリオリに自分の身体や外見が「ただそこにあり」ます。一方、ソーシャルVRにおけるアバターでは、外見を選ぶことが可能であるのみならず、明確な意図を持って選ぶことを事実上強制されるとも言えます。

「やった!これまでの人生のアイデンティティから離れて自由に選べる!」と解き放たれたように感じる人には素晴らしい事なのですが、自分の場合「選べと言われても…『選ばない』っていう選択肢は無いんですか?」という感想になってしまいます。(その点ではclusterは有難いなと思っています。最初の頃はアバターが全て無個性なロボットで統一されており、後からVRM形式モデルの読み込みに対応したという経緯があるため、無個性ロボを選ぶ事である程度「選ばない」をさせてもらえます)

一方VRChatでは、アバター非表示設定時等に使われるシンプルなロボットアバターは一応存在するものの、「選ばない」事は事実上出来ません。せっかくVR界隈に身を置いているし、という事で今年の半ばあたりから意識的にVRChatを使ってみるようにしていたのですが、この時最初は前述のロボットアバターをわざと使っていました。しかしこの格好でいると「アバター選ぶの手伝いましょうか?」「ロボットになってますよ、設定合ってますか?」と親切な人が寄ってきてしまっていたたまれなくなるため(まさか好き好んで使ってるだなんて思わないのでしょう)、別の無個性なアバターをわざわざ探す羽目になりました。

なお、正確には「無個性にしたい」のではなくて「『選ばない』をしたい」なのですが、それは出来ないのでせめてなるべく無味乾燥なものを求める形になっています。もちろん、美少女アバターユーザーが沢山いるVRChatで敢えて使う人の少ない無個性ロボを選ぶのは逆に悪目立ちするのですが、それでも。

これはVRじゃなくて画像生成AIのアドベントカレンダー記事だって?

はいそうでした。ちゃんと繋がりますので。

生成的ジェネラティブAIの話題は、DALL-E 2MidjourneyDALL-E Mini(現Craiyon)が使えるようになった頃から徐々に凄いらしいという話が聞こえてきていましたが、Stable Diffusion (以下SD) の登場は衝撃でした。DALL-EにせよMidjourneyにせよ、実際の処理はWebサイトやAPI越しにどこか遠くの預かり知らぬ所にある雲の中クラウドサーバーで実行されて、自分のデバイスにはその結果が送られてくるだけでしたが、SDは手元のPCで!ローカルに!実行できます。一度インストールしてしまえばサーバーへの接続は不要です。電気さえあれば、プロバイダーの回線が落ちようが海底ケーブルが破断しようがGAFAMのデータセンターが全部爆発しようが動きます。昔PhotoshopやDOOMを初めてインストールした時に感じたような、「自分のPCが魔法の箱になった」と言う感覚を久々に味わう事になりました。

自分のPCは機械学習でデファクトスタンダードの地位にあるNVIDIAではなくAMD製のグラフィックカードを搭載していたため、最初に動かせるまでしばらく手こずりましたが、ひとたび動き出した後は使い放題なのを良いことに夢中で生成をぶん回しまくっていました。ガチャのような中毒性があります。

界隈の技術開発の速度がとんでもなく速いのも魅力です。最初こそコマンドラインを叩いてましたが、すぐにAUTOMATIC1111NMKDのユーザーインターフェイスが作られ、Textual InversionDreamboothなどモデルの追加学習手法が登場し、あの手この手で消費VRAM量や生成速度が改善され…。「日刊 画像生成AI」が無いとついていけない速さで、毎日更新されているやまかずさんには頭が上がりません。

DreamFusionの登場

そんな中、DreamFusionというText-to-3Dを実現する論文がGoogleにより発表されました。SDはプロンプト文字列から画像を生成するものでしたが、これは何と3Dモデルをメッシュとテクスチャ揃えて生成するという代物です。興味深いのは、既存の画像生成AIを活用して3Dモデルを生成するため、大量の3Dモデルデータを学習する必要が無いという点です。DreamFusionはGoogle内製・非公開の画像生成AIであるImagenの上に構築されたため、コードが一般公開されていません。しかし、論文の発表からものの一週間ほどで、論文の内容をベースにStable Diffusion上で動作するようにしたStable-DreamFusionという実装が有志により開発・公開されました。速すぎる。

ここで思いました。アバター作れるんじゃね?
前述の「外見を選びたくない」という問題の解決は置いておくにしても、作れそうと思うとやってみたくなります。

アバター自動生成

2Dラフの生成

3Dの生成は2D画像よりもはるかに時間がかかるため、まずは2Dでおおまかなイメージを考えます。試した当時のStable-DreamFusionは素のStable Diffusion 1.4決め打ちで書かれていたため、アニメ調よりは実写調に近い方で狙います。また、3D生成はまだ精度が高くないため、多少崩れてもおかしく見えにくいロボットをモチーフにしてみます。

手元のPCにインストールしてあるAUTOMATIC1111版GUIを使い、プロンプトを調整しながらたくさん生成してそれっぽいのを探します。なるべく画角中央に、はみ出さずに、Tポーズで立っていてほしいので、そうなるようにプロンプトを書き換えていきます。

A DSLR full body photo of an white with cyan stripes short sleek cybernetic humanoid child robot, arms outstretched straight horizontally t-pose, blank white featureless background, subject placed aligned in middle center of frame
“T-pose”と指定してもなかなか従ってくれない

プロンプトと絵のおおまかな感じが掴めたので、良さげなもののプロンプトとシード値をメモって3Dに行ってみます。(画像の縦横サイズが変わっただけでも絵は大きく変わるので、同じシード値を使うことにどれだけ意味があるかはわかりませんが。)

Stable-DreamFusionモデル生成

Stable-DreamFusionはRadeonでは動かなかったため、NVIDIA GPUをWeb越しにレンタルできるGoogle Colabを使います。Stable-DreamFusionのノートブックを開き、基本的には上から順番に実行ボタンを押していきますが、プロンプト内容やTraining_itersはフォーム上の値を適宜書き換えたうえで実行ボタンを押して反映させます。

Colab ProのNVIDIA A100 (VRAM 40GB)で処理を回す事40分、こんな結果が出てきました。

Prompt: A DSLR full body photo of an white with cyan stripes short sleek cybernetic humanoid child robot, arms outstretched straight horizontally t-pose, blank white featureless background, subject placed aligned in middle center of frame
Stable-DreamFusionのコマンドラインオプションにはネガティブ指定機能が見当たらなかったため、ネガティブプロンプトは無し。

思った以上にちゃんと人の形をしています!顔にあたる部分もよく見ると眼窩のようなへこみが2つ見られます。ただし、腕と足がそれぞれ3本ずつ出来てしまっています。これはJanus問題と言われ、ローマ神話のヤヌスのように頭に顔が2つついてしまったり、今回のように手足が増えてしまったりするDreamFusionの既知の問題です。せっかく生成されたものなのでそのままで残しておこうかとも思いましたが、アバターを自分で動かすときに3本目の手足は何によって動かされるべきなのか…?というのが不明なため、仕方なく切り落とす事にします。

生成後の手作業整備

ボクセルっぽさもありつつ45度角の凸凹もあるメッシュ形状。

まともにBlenderを使うのは初めてですが、生成されたモデルのobjファイルを読み込み、アバターとして使えるようにいくつか整備します。前述の3本目の腕と足を切り落とし、残った2つの足も左右が癒着してしまっているため切り離します。また、後述する自動リギングを行う際にポリゴンが離れていると一連のつながった腕として認識されないため、左右の腕の関節の浮いている箇所を繋ぎます。(この画像は腕の関節を連結させた後のものです。)

一通り整備した後、BlenderからFBX形式で出力します。いずれはこういった手作業が不要なクオリティで出力される日が来るといいのですが。

Mixamoによる自動リギング

アバターのリギングはAdobe Mixamoを使って自動で行います。読み込んだモデルの位置を微調整し、手先・関節などにあたるべき部分の点をマウスでドラッグして指定します。最初に試した時は腕の関節と腕の他の部分が離れていたためエラーが起きましたが、腕を連結させたら正しく認識されました。これによりリギング済みのFBXファイルがダウンロードできます。なお、指は5本しっかり作られていないので、手や指のボーン構造は簡易的なもので済ませます。例によって「AIは手が苦手」はここでも健在です。

VRChatアバターとして読み込み

VRChat Creator Companionから新しいアバタープロジェクトを作成してUnityで開き、リギング済みのFBXファイルを読み込みます。自作アバターは初めてなので凝ったギミックなどは入れず、解説記事を参考にしながらサイズ設定・ボーン構造の差異の修正・視点位置設定・マテリアル設定・メタデータ記入などを行います。日本人VRChatユーザーのアバターは身長が低めな事が多いので、それに合わせて身長130-140cm位に設定しました。全部整ったら最後にアップロード。

VRChatを起動して、PCに繋いだMeta Questをかぶり、アバターを適用。自分の手を見ると青いアバターの手が見えます。
鏡の前に行って体を動かすと、ちゃんと動いてます、成功です!

なぜか生成時点では白っぽかったテクスチャ(これも自動生成です)が全体的に青っぽくなっていますが、なぜこうなったのかはよくわかっていません。しかし靴のような部分は白、関節部分は黒など、部位に応じた色分けは特に指定しなくてもちゃんとされているようです。

このアバターを10月上旬に作って以来、しばらくこれを使い続けていますが、見た目の印象が珍しいからか、時々声をかけられます。AI自動生成だという事を明かすと興味を持ってもらえるし、初対面の人との話のネタにもなっています。これは「外見を選択しない」なのか?と言われるとそうではないですし、じゃあ果たしてこれは「自分」なのか?というと結局確固とした答えは出ていないままなのですが、少なくとも前よりは違和感を纏ったままVR内をうろついている感覚が減ったのは確かです。イケア効果でしょうか…。

その後やった事いろいろ

  • 「建造物も作れるのでは?」と考え、ガゼボ(公園にあるような東屋あずまやの西洋版)のモデルを生成。点対称な形状だとJanus問題の影響を受けないので楽です。なお、1回目は屋根の下が詰まった状態で生成されてしまったので失敗して、これは2回目の生成。
  • VRChat SDKでワールド用プロジェクトを作り、ガゼボを置いた簡単なワールドを作ってCommunity Labsにアップロードしてみる。VRChatがインストール済みの人はこちらのリンクから訪れることが可能です。
    • なお、地面の草のテクスチャもSDによる自動生成です。AUTOMATIC1111版GUIは縦横タイリングできる画像を作る機能があるのでそれを使いました。
  • 作ったアバターはDreamFusionから出力された素の状態では38,000ポリゴンほど。PCアバターとしてはGood判定となるものの、Questアバターとしては重いので、BlenderでデシメートしてQuest版アバターを作り、約7,400ポリゴンまで削ってQuest Excellent判定をゲット。単純にBlenderの内蔵機能でデシメートしてるだけで、普通のアバターなら露骨にガビガビになりそうですが、まあ元からカクカクしてるので気にしない気にしない。

おわりに

今回作ったアバターは抽象的で、モデルとしての質も高くなく、様々な手作業を挟む必要がありました。しかし最近ではDreamFusion以外にも、NVIDIAのGet3DMagic3D、Luma AIのImagine 3D、ほかLatent-NeRFなどなどText-to-3Dを目的とした様々なAIモデルが登場してきました。綺麗なキャラクターのアバターが半自動〜全自動で生成できるようになる日も、もしかしたら遠くないかもしれません。

なお、僕のVRChat IDはNeedleです。見かけたら遊んでください。

Radeon RX 6800でStable Diffusionを動かしてみたメモ

最近話題の画像生成AI、Stable Diffusionを手元のローカル環境のPCのAMD Radeon RX 6800で動かしてみました。慣れない設定が多くて難儀しましたが、なんとか動かす事ができたので、ここにメモを残します。業界標準のGPGPUプラットフォームであるNVIDIA CUDAではなく、そのAMD版と言えるROCmを使う事になるため、Windowsでそのまま動くわけではなかったりとやや複雑ですが、一度設定してしまえば利用料金や回数制限などを気にする事なく使い放題です。

なお、この手順はYouTubeで公開されていた動画 Stable Diffusion (DALLE-2 clone) on AMD GPU を参考にしていますが、試行錯誤の結果、動画とは少し違う手順となっています。なお、筆者は機械学習素人故、おかしな記述もあるかと思います。その場合はご指摘いただけましたら幸いです。

本記事は以下の環境を前提としています。

  • PC/AT互換機(いわゆるMacやRaspberry Pi等ではないPC)
  • AMD Radeon GPU
  • 8GB以上程度のUSBメモリ
  • LinuxをインストールするためのHDD, SSD等ストレージデバイス(256GB以上程度を推奨)
  • インターネット接続

Apple Silicon Macの場合、NVIDIA GeForce GPUの場合はそれぞれ別の方が書かれた記事があるのでそちらを参照してください。

おおまかな手順は次の通りです。Stable Diffusionが動作する環境を整備するため、コンテナ仮想化プラットフォーム Docker 、およびPython用パッケージ管理システム condapip を使用します。

Linuxディストリビューションを実環境にインストール

Stable DiffusionをGPUで使うにはNVIDIA CUDAのAMD版と言えるROCmが必要となりますが、ROCmにはWindows版が存在しません。このため、使用にはLinux OSの動作する環境が必要となります。なお、Virtualbox等のバーチャルマシンVM環境ではGPUの全機能がホストOSからゲストOS側に露出していない事があるため、VMではなく実環境が必要となります。(最近のバージョンのWSL2ではGPUを叩けるらしいという話も一部目にしましたが、未検証です)

僕は Ubuntu Linux 22.04 LTS 日本語 Remix をダウンロードしました。実際のところ、2022年8月現在のバージョンのROCmで公式サポートされているのはUbuntu 20.04 LTSなのですが、こちらで試したところ有線LANが動かないなど無関係の問題が色々発生したため、面倒なので22.04で進める事にしました。

Linuxディストリビューションのインストールに関しては他で詳しく説明されているページが多数あるため細かくは省きますが、

  • 現在のOSで、 Ubuntu Linux 22.04 LTS 日本語 Remix ダウンロードページからISOイメージファイルをダウンロード
  • USBメモリやSDカードにISOイメージファイルを焼き込むツール BalenaEtcher をダウンロード、インストール
  • PCにUSBメモリを刺し、BalenaEtcherを使ってUbuntuのISOイメージをUSBメモリに焼き込む
  • USBメモリを刺してPCを再起動し、起動時にDeleteキー等(マザーボードによって異なります)を押してUSBメモリから起動
  • 起動後、「Ubuntuをインストール」を選び、画面上の手順に沿って用意しておいたストレージデバイスにUbuntu Linuxをインストール

ROCmをインストール

インストールが終わったら、インストールされたLinux環境で起動し、ターミナルを開き、ROCmをインストールします。RadeonOpenCompute GitHubのこちらのページの手順を参考に一部改変しています。なお、sudo (SuperUser Do)から始まる行は管理者権限で実行するため、パスワードを聞かれる場合があります。

# ダウンロード用ツールやバージョン管理ツールが入ってなければインストール(後々使います)
sudo apt install wget curl git
# ROCm用カーネルモジュールを導入
wget -qO - http://repo.radeon.com/rocm/rocm.gpg.key | sudo apt-key add -
# 元ページの記述ではレポジトリのURLが古かったようなので以下に変更
echo deb [arch=amd64] https://repo.radeon.com/rocm/apt/latest/ ubuntu main | sudo tee /etc/apt/sources.list.d/rocm.list

(必要であれば)ROCmインストールをUbuntu 22.04に対応させる

この後 sudo apt-get update && sudo apt-get install rock-dkms と打ち込めばROCmカーネルモジュールがインストールされる…はずですが、Ubuntu 22.04はROCmに公式サポートされていないためそのままだとエラーが出ます。その回避方法はこちらのAsk Ubuntu Q&Aページに載っていました。

15ステップ+αもあり複雑ですが、順番に従っていったところ無事インストールできました。(Ubuntu 20.04ではこの手順は不要なはずです。また、いずれROCmがUbuntu 22.04を公式サポートしたらこの手順は不要となるはずです。)

ROCmをインストール(続)

気を取り直して手順を続けます。

sudo apt-get update && sudo apt-get install rock-dkms
sudo update-initramfs -u
# 一旦再起動
sudo reboot
#再起動後、再びターミナルを開き、現在のユーザーをvideoグループとrenderグループに追加
sudo usermod -a -G video $LOGNAME
sudo usermod -a -G render $LOGNAME

Dockerをインストール

コンテナ仮想化プラットフォームDockerをインストールします。

curl -sSL https://get.docker.com/ | sh

インストール完了後、以下のコマンドを入力してDocker環境の情報を表示します。

sudo docker info

ここで Storage Driveroverlay2 になっていればOKです。僕は最初からなっていたので特に何もせず進めました。 devicemapper になっていた場合、イメージやコンテナのサイズが最大10GBに制限されるため overlay2 に切り替えるべきとのことです。

所有するグラフィックカードに合致するDockerイメージを選ぶ

Dockerイメージの公開サイトDocker Hubで、AMDによりROCm対応PyTorchのイメージが公開されています。下準備として、まずは概要欄に書かれている下記ショートカットコマンドをコピーし、自分のホームディレクトリの ~/.bashrc ファイルの最後尾に追記します:

# GPUなどを適切にホストOS側から露出させ、またdockerxディレクトリをホストOS側からマウントした状態でコンテナを実行できるショートカット
alias drun='sudo docker run -it --network=host --device=/dev/kfd --device=/dev/dri --group-add=video --ipc=host --cap-add=SYS_PTRACE --security-opt seccomp=unconfined -v $HOME/dockerx:/dockerx'
# ついでにこちらも.bashrcに追記しておくと便利
# 最後に作ったコンテナを起動し直して中に入るショートカット
alias redock='sudo docker start -i $(sudo docker ps -q -l)'

前述のROCm対応PyTorchイメージのページの「Tags」タブを開くと、さまざまなAMD GPU用のDockerイメージが一覧となっています。ここで自分の持っているグラフィックカードのアーキテクチャに合わせたイメージを選び、右側の書類マークをクリックして名前をクリップボードにコピーします。僕の場合はRadeon RX 6800(Navi 21アーキテクチャ)のため、 rocm/pytorch:rocm5.2_ubuntu20.04_py3.7_pytorch_1.11.0_navi21 を選びました。わからない場合は latest で動くかもしれません。なお、Radeon RX 6700 XTなど、機種によっては認識させるために環境変数を追記する必要があるとのことです(未確認)。

Dockerfileおよびenvironment.yamlをダウンロード

本記事が参考とするチュートリアル動画ではこの後イメージからコンテナを立ち上げた後、コンテナ内で手作業でconda環境の構築やROCmに合わせた改変などを行っていましたが、これを自動化するためDockerfileとconda設定用のenvironment.yaml改変版を作りました。こちらのGitHubレポジトリからダウンロードし、以下のようにコンテナをビルドして起動します。なお、ここでダウンロードされるDockerfileでは出発元のイメージを前述のRX6800用のrocm/pytorch:rocm5.2_ubuntu20.04_py3.7_pytorch_1.11.0_navi21 にしてありますが、違うグラフィックカードをお持ちの方は適宜最初の行のFROM文を適切なイメージ名に書き換えてください。

git clone https://github.com/heistak/stable-diffusion-radeon.git
sudo docker build --tag stable-diffusion-radeon:1.0 stable-diffusion-radeon
# Dockerfileの中ではStable Diffusionレポジトリを取得し、
# conda環境設定用の改変版yaml(environment2.yaml)をそこに追加、
# またその環境設定ファイルに基づいてROCm対応版pyTorch等をセットアップします
# しばらく時間がかかります
# 構築が完了したのちに前述のショートカットエイリアスを使ってコンテナを起動
drun stable-diffusion-radeon:1.0

Stable Diffusionレポジトリをコピー

drunエイリアスコマンドを使ってDockerコンテナが立ち上がった際、ホームディレクトリ下に~/dockerx/というディレクトリが出来ています。このディレクトリはホストOS側のファイルシステムに所属しますが、コンテナの動作中はコンテナ側からも見えており読み書きが可能です。コンテナ側からはルートディレクトリ直下の/dockerxの位置に見えています。

コンテナ内でここに移動し、rocmというディレクトリを作り、その下にStable Diffusion本体のレポジトリをクローンする…ところですが、実はStable Diffusionのレポジトリは前項のDockerコンテナのビルド時の自動化された流れの中で既に別の場所(/root/)にクローン済みなので、それをコピーして持ってきます。(移動だとうまくいきません)

mkdir /dockerx/rocm
cp -r /root/stable-diffusion /dockerx/rocm/stable-diffusion

Weightsをダウンロード

ターミナルの外でブラウザを開き、機械学習コミュニティサイトHugging Face内のページからWeightsファイルをダウンロードします。ページ右上のSign Upボタンでユーザー登録をした後、Access Repositoryのボタンを押すとダウンロードできるようになります。ダウンロードするのは sd-v1-4.ckpt の方で大丈夫です。

「ファイル」アプリ、あるいはもう一個別のシェルなどを使って、~/dockerx/rocm/stable-diffusion/models/ldm/ 下に stable-diffusion-v1 というディレクトリを作り、その中にダウンロードしたファイルを model.ckpt という名前にして配置します。

# これはDockerコンテナ内ではなくコンテナ外のホストOS側で開いたシェルで操作する
sudo mkdir ~/dockerx/rocm/stable-diffusion/models/ldm/stable-diffusion-v1
cd ~/ダウンロード/ # ダウンロードフォルダの名前は環境によって異なるので適宜読替え
sudo mv ./sd-v1-4.ckpt ~/dockerx/rocm/stable-diffusion/models/ldm/stable-diffusion-v1/model.ckpt

実行

準備が整ったはずなので、コンテナ内のシェルで以下を実行してください。

cd /dockerx/rocm/stable-diffusion
python3 scripts/txt2img.py --prompt "A beautiful sunset on the ocean horizon" --H 512 --W 512 --n_iter 1 --ddim_steps 50 --n_samples 1

初回実行時は色々ダウンロードするので時間がかかります。
“Enjoy”の表示が出て実行が終わった後、~/dockerx/rocm/stable-diffusion/outputs/txt2img-samples/ の中に、水平線に沈む夕日の画像が出ていれば成功です。

なお、コンテナの中ではrootユーザーで動かしている関係上、outputディレクトリ内で生成される画像のオーナーがroot:rootになりますが、適宜ホストOS側で sudo chown -R $USER:$USER ~/dockerx/rocm/stable-diffusion/outputs/* 等で自分の所有に直してください。

2回目以降の使用

2回目以降の使用時には、前に作ったコンテナの名前をdocker ps -aで調べ、docker start -i <コンテナ名>で再度立ち上げれば使えます。途中の手順で~/.bashrcファイルにエイリアス行を入れてあれば、 redock と打つだけで最後に作ったコンテナに入り直せるはずです。

Radeon RX6800 + GIGABYTE B550i AORUS PRO AXでAMD Smart Access Memoryを有効化する

トラブルシューティングのメモ。

手元のPCはRyzen 7 3700X, Radeon 6800, GIGABYTE B550i AORUS PRO AXマザーボードという組み合わせのためAMD Smart Access Memory (SAM)ことResizable BARを有効化して性能向上をはかる事が可能なはずでしたが、なぜか以前から無効となっているままでした。

多くの解説サイトで見るSAM有効化の必須条件は以下の通りです:

  • Radeon 6000シリーズ以降のGPU
  • Ryzen 5000または3000シリーズのCPU(3400G, 3200Gを除く)
  • AMD 500シリーズチップセットのマザーボード
  • AMD Software 20.11.2以降
  • BIOSがAMD AGESA 1.1.0.0以降
  • BIOS設定内にて
    • “Resizable BAR” 有効
    • “Above 4G Decoding” 有効
    • “CSM Support” 無効
      • ここだけ有効ではなく無効なので注意。CSM SupportはUEFI非対応の古い周辺機器との互換を維持するためのものなので、最近のPCなら無効にしていて支障はありません。

が、自分のPCでは上記すべてを満たしているにも関わらずAMD Softwareでは「Smart Access Memory 無効」となっていました。

最近のバージョンのGPU-ZでもSAM/Resizable BARはチェック可能なため確認したところ、BIOS設定で”Resizable BAR”, “Above 4G Decoding”を有効にしているにも関わらず無効という表示。露骨に矛盾。何故。

マザーボードの型番指定で更に検索して回ったところこのRedditスレッドを発見。この相談者はRyzen 5800X + Radeon 6800XT + B550 Gaming Xと自分よりやや上のスペックですが、メーカーやチップセットは同一です。それによると、

  • BIOSアップデートを適用し直し、適用直後の他に何もしていない状態で真っ先にSAM/Resizable BAR関連の設定のみを変更し、起動する

マジかよそんな呪術的な。

半信半疑ながらも改めてBIOSを適用し直し、”Resizable BAR”を有効にし(Above 4G DecodingとCSM Supportは既に正しい設定だったのでそのまま)、起動したところ「ハードウェア設定が変更されました。再起動が必要です」的なダイアログが出現。指示に従ってもう一度再起動して、改めてGPU-Zを開いてみたところ、

有効化された!マジか!

AMD Softwareでもばっちり有効化。よかった。
BIOSのメニュー周りのバグだったんでしょうか。

ただ、BIOSアップデート前に設定を保存しておくのを忘れたため、前に行ったCPU電圧低減アンダーボルティングの設定が初期化されてパーに。もっと前にどこかに保存したような記憶もあるので、それを探し出すか、はたまたもう一度調整をし直すか…。

DAN A4-SFXのグラフィックカードをRadeon RX 6800にアップグレードした際にハマった点メモ

VR用途に力不足を感じてきたため、メインのデスクトップPCのグラフィックカードをEVGA GeForce GTX 1070 SC GAMINGからRadeon RX 6800 (リファレンス版)に換装しました。起動しない問題に当たるなど一筋縄で行かなかったので記録を残します。

TLDR: A4-SFXに入り切るサイズでVRAMが多くて排熱が遮られないカードがRX 6800 (リファレンス)くらいしか無い。起動しなくて色々いじってみたが原因は問題報告の多いライザーケーブルやマザーボードではなく、プラグイン電源の接触不良。

Continue reading

#StayHomeComeVirtual

ambrのtさん提唱された #StayHomeComeVirtual 質問集に乗っかってみます。mixiのバトンとか100の質問とかを思い出すな。

Q1. あなたは誰?

フリーランスでVRコンサルティング/エンジニアリングを行っている人です。以前はOculusの日本チームで働いていました。東京クロノスVARK狼と香辛料VRなど、色々な国産VRコンテンツをOculus Questにリリースするお手伝いをしたりしています。

Q2. VRとの出会いは?

本当の最初まで遡ると90年代前半に親に連れられて行ったショーで試した当時の大型VRシステムかもしれませんが、近年で言うと2013年にOculus Rift DK1のKickstarterに出資したのが最初になります。

Q3. VRの魅力は?

今まで画面越しでしかなかった映像の中に入り込み、直接そこに働きかける事ができる事だと思います。

Q4. あなたのVRデバイスの写真見せて

買いすぎ。この他にPlayStation VRなどもある。

Q5. VRでおすすめのアプリは?

(あえて関わってるものや知り合いが作っているものを除外。)

Q6. 今買うならおすすめのVRデバイスは?

Oculus Quest。なぜなら、利用できるコンテンツの幅が

  • 公式ストアのコンテンツ
  • 非公式ストアSideQuestのコンテンツ
  • Oculus Linkを経由したゲーミングPC(あれば)専用コンテンツ
  • 内蔵ブラウザでのWebXRコンテンツ

…と、最も広いからです。

Q7. 好きなVRの写真見せて

WipEout Omega Collectionより。このクルマ(?)に乗れるの最っ高…

Q8. あなたにとってVRとは?

普及する価値のあるもの。

Q9. 最後に一言!

逆説的ですが、いくらVRといえども、それを成立させている技術や人間はバーチャルでない方の現実からは逃れられません。いずれより良い現実が訪れるようVRを、そしてより良いVRのために現実を、相互に活用していきましょう。