>   >  痴山紘史の日本CG見聞録:第3回:USD環境の構築
第3回:USD環境の構築

第3回:USD環境の構築

みなさんこんにちは。先日、Walt Disney Animation Studiosが映画『モアナと伝説の海』で使用したデータを公開しました。弊社のように直接映像制作を行わず、開発を行なっているようなところではテスト用の素材を用意するのが意外と大変なので、このような大規模プロダクションで使用されたデータが公開されるのはとても助かります。折角貴重なデータを入手することもできたわけですし、是非とも自力でレンダリングできるようにしたいところです。皆さんも早速ダウンロードしてシーン構築とレンダリングを試されているのではないでしょうか。この記事が公開されるときにはデータの公開から三週間ほど経っているので、多くの方がご自分の手元でレンダリングすることに成功していることでしょう:-)

TEXT_痴山紘史 / Hiroshi Chiyama(日本CGサービス
EDIT_尾形美幸 / Miyuki Ogata(CGWORLD)

前述のデータを肴に本連載でも記事を書いてみたいところなのですが、データを使用する目的が研究・開発用途に限られているため、その内容を元に記事にしてしまうのはちょっと微妙かなぁと思っています。研究・開発をした結果のレポートと言えば言えなくもないんですけどね。このあたりの線引きは迷うことが多いです。

余談ですが、CG系の論文で良く使われるウサギ(Stanford Bunny)や龍(Dragon)、それから両腕を上げた小太りなおじいさん(Happy Buddha)などのモデルデータにも使用の際の注意事項が明記されています。こういう文章は本来きちんと読むべきで、読んでみると結構興味深いことが書いてあります。そして一度読むと、あー、読まないで使っている人結構いるな~というのがわかったりします。笑。

環境構築の続き

前回に引き続き、環境構築のお話を進めていきます。

まず初めにお詫びしておかなければいけないことがあります。前回の予告として今回はCY2016環境の構築を行いますとお伝えしていたのですが、ちょっとそれ以前に対応しておかなければいけないことが多かったので、今回はCY2016に一部対応しつつPixar Animation Studios(以下、Pixar)のUSDを使用できる環境構築を行なっていきます。期待していただいた方はすみません。そして、今回も駆け足での説明になります。詳細な説明は省いているものの、一通りの手順は解説していますし自分で環境構築をする際のハマり所は押さえているので、この記事を参考に自分で調べながらチャレンジしてみてください。

今回構築する環境

今回はDockerコンテナ内でGPU(GeForce GTX 1080)を使用できるようにし、usdviewを動かすところまで行います。そのためには以下の手順を踏む必要があります。

  • ・NVIDIAドライバのインスト―ル
  • ・nvidia-dockerのインストール
  • ・Dockerコンテナ内にUSD環境構築

Dockerを使わずに実機上で直接動く環境をつくるだけであればそれほど難しいことはなく、ほぼマニュアル通りに操作をしていくだけで環境をつくることができるはずです。個人で使用するのであればそれでもいいですが、数十人数百人という規模のプロダクションでそのような管理をしていては、現場の細かい要求に対応しきれません。そのため、本記事ではこのような構成にしています。

また、記事を書く際の環境も更新しています。前回までは仮想マシン上で動いているCentOS7上でDockerを動かして環境を構築していたのですが、今回からはGPUを使用するため実機を用意しました。そこで、弊社の技術の粋を集めた世界標準マシンを本連載で初お披露目します!!


はい剥き出しです。どのご家庭にもある余ったPCパーツを寄せ集めてつくりました。技術検証目的のPCって大体こんな感じですよね :-)

スペックとしては以下のような感じです。GPUは最新のものですが、それ以外は数年前のパーツ構成です。

CPU:Core i7-3770
Mem:32GB
SSD:SanDisk SDSSDHII 960GB
GPU:GeForce GTX1080

このマシンに環境構築をしていきます。


・環境構築

まずはCentOSのアップデートをし、デスクトップ環境をインストールします。

$ sudo yum -y update
$ sudo yum -y groupinstall "GNOME Desktop"
$ sudo reboot

・NVIDIAドライバのインストール

NVIDIAドライバをインスト―ルします。この時注意点として、OSがUEFIを使用して起動するように設定されている場合、デフォルトではドライバのインストールの際に署名が必要になるようです。本来ならこれもきちんと行うべきなのでしょうが、ちょっとめんどくさそうなのでUEFI設定メニューからSecure Bootをオフにして署名が必要ないようにしておきます。

ドライバはNVIDIAのWebサイトからダウンロードしてください。今回は390.67を使用しました。

$ wget http://jp.download.nvidia.com/XFree86/Linux-x86_64/390.67/NVIDIA-Linux-x86_64-390.67.run
$ chmod +x NVIDIA-Linux-x86_64-390.67.run

CentOS7では標準でnouveauというドライバが使用されています。NVIDIA純正ドライバを使用するためにはこれを無効にする必要があります。ちょっと前はドライバの無効化は自分で行う必要があったため、検索して出てくる記事でもそのようにしているところがたくさんあります。今ではかなり自動化されているため、インストーラを実行するだけで自動的に行なってくれます。

まずはドライバをビルドするために必要なパッケージをインストールします。

$ sudo yum -y install kernel-devel kernel-headers gcc make git pciutils tmux

ドライバをインストールする際にはXを落としておく必要があります。この際、nouveauを無効にするために一度再起動してからドライバのインストールをする必要があるので、システムの設定としてオフにしておきます。

$ sudo systemctl set-default multi-user.target

一度目のNVIDIA-Linux-x86_64-390.67.runの実行でnouveauを無効化します。

$ sudo ./NVIDIA-Linux-x86_64-390.67.run
$ reboot

再起動後、nouveauが無効になっていることを確認します。

$ lsmod | grep nouveau

何も表示されなければ成功です。続いてドライバのインストールをします。最近のインストーラは本当に親切で、メニューに従っていくだけで完了します。

$ sudo ./NVIDIA-Linux-x86_64-390.67.run

ドライバのインストールができたらXが起動するようにしておきます。

$ sudo systemctl set-default graphical.target
$ reboot

きちんと認識されているか確認します。

$ lspci | grep -i nvidia
01:00.0 VGA compatible controller: NVIDIA Corporation GP104 [GeForce GTX 1080] (rev a1)
01:00.1 Audio device: NVIDIA Corporation GP104 High Definition Audio Controller (rev a1)
$ lsmod | grep vidia
nvidia_uvm            760845  2
nvidia_drm             39676  1
nvidia_modeset       1104417  6 nvidia_drm
nvidia              14364138  397 nvidia_modeset,nvidia_uvm
drm_kms_helper        177166  1 nvidia_drm
drm                   397988  4 drm_kms_helper,nvidia_drm
ipmi_msghandler        46608  2 ipmi_devintf,nvidia
i2c_core               63151  4 drm,i2c_i801,drm_kms_helper,nvidia

※このスクリーンショットはWebブラウザ上で表示が崩れないようにするために後日取得しました。


・Animal Logicのdocker-usdを使ってUSD環境を構築する

Google様やGitHub様にお伺いを立てたところ、Animal Logicが公開しているUSD環境構築システムをベースに作業をするのが良さそうです。

こちらはUSD環境をつくるためのものなのでCY2016にほぼ準拠、ただしPySide2は未対応ということです。ただし、前回ご紹介したptigas/vfxplatformとちがって環境構築用のコードも全てあるのでCY2016にきちんと準拠する場合でもこれをベースにするのが良いでしょう。ちなみに、今回はやりませんがdocker-usdにはUSD対応maya2016やmaya2017環境を構築するためのスクリプトも含まれています。本当、Animal Logic様様です。

※docker-usdは環境構築の手順がかなりシビアなようで、途中まで実行して失敗した場合に二度目以降はそのままでは正常に実行できないなど問題も多々あります。この辺りは各自必要に応じてDockerfileや環境構築用スクリプトの中身を確認しながら対応していくことになります。ここで何か問題があるからと言ってAnimal Logicに文句を言うのは筋違いです。オープンソースソフトウェアというのは、問題があったら自分の力で対応していくのが正しい関わり方です :-)


・Dockerのインストール

こちらは前回と同じです。

sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum makecache fast
sudo yum install -y docker-ce
sudo systemctl start docker
sudo systemctl enable docker

・nvidia-dockerのインストール

Dockerコンテナ内のプログラムからGPUを使用するためにnvidia-dockerを使用します。ここで注意事項があります。nvidia-dockerにはnvidia-docker1とnvidia-docker2があります。記事執筆時点ではnvidia-docker2はOpenGL対応をするのが一手間かかるようです。そこで、今回はnvidia-docker1を使います。

$ wget -P /tmp https://github.com/NVIDIA/nvidia-docker/releases/download/v1.0.1/nvidia-docker-1.0.1-1.x86_64.rpm
$ sudo rpm -i /tmp/nvidia-docker-1.0.1-1.x86_64.rpm
$ sudo systemctl start nvidia-docker
$ sudo systemctl enable nvidia-docker

以上でnvidi-dockerのインストールができたので、Dockerコンテナ内でGPUが認識されているか確認します。

※このスクリーンショットはWebブラウザ上で表示が崩れないようにするために後日取得しました。


nvidia-smiでGPUが認識されています。


・docker-usdのインストール

$ sudo yum -y install git
$ git clone https://github.com/AnimalLogic/docker-usd.git
$ cd docker-usd/
$ cd linux/
$ mkdir ../apps

そのままでは以下のようなエラーになるので、build-centos7.shを書き換えます。

Copy local root certificates for corporate networks
cp: cannot stat '/etc/pki/ca-trust/source/anchors/*': No such file or directory
$ vi build-centos7.sh
# コメントアウト
# [ -e /etc/pki/ca-trust/source/anchors ] && cp -u /etc/pki/ca-trust/source/anchors/* cert/

また、SourceForgeからファイルを取得しようとすると証明書関連のエラーが出たので、--no-check-certificateオプションをつけてこれを回避します。

※これも本当はもっときちんとした対応をしないといけないはずなんですが。

$ vi scripts/download_vfx.sh

    if [[ -z "${HTTP_HOSTNAME}" ]]; then
      # wget $wgetPath -P "$DOWNLOADS_DIR" -O "$DOWNLOADS_DIR/$filepath" -nc
      wget $wgetPath -P "$DOWNLOADS_DIR" -O "$DOWNLOADS_DIR/$filepath" -nc --no-check-certificate
      if [[ $? -ne 0 ]]; then

次ページ:
USDのバージョン指定

その他の連載