知識ゼロで作る3Dサイネージ

大学のサークルで挑戦したので、詳しくまとめてみました。
初めて書く記事なので読みにくいところがあると思いますが、ご容赦ください。

使用ソフトはBlender4.1です。

大部分は下記の動画を参考にしているので、Blenderに慣れている方はこちらを見たほうが早いかもしれません。

https://youtu.be/xK3q641dd2c?si=mD1Axd8X8pbzpZTj

:::note warn
筆者自身Blender初心者なので、間違っている部分があると思います。
訂正が必要な部分を見つけたら、コメントしていただけると助かります。
:::

# 環境を再現する
まずは、動画を流すディスプレイなどの環境を再現します。ここが不正確だと、出来上がった動画を実際に流したとき、きれいな立体映像になりません。

### ディスプレイと建物を作る
小見出しの通り、ディスプレイと建物を作ります。ディスプレイの所有者などに
- ディスプレイの大きさ・解像度・地上からの距離
- ディスプレイと観客の距離と角度
- 放送可能な動画ファイルの形式
を確認しておきましょう。

今回は5m × 5m × 3mで地面から10m、建物から20m離れて観るという想定で作っていきます。

新規プロジェクトを作ったときに立方体が置いてあるため、これを変形してディスプレイと建物にしましょう。
先にディスプレイを作ります。

<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3521926/c37f01fc-e633-e94b-da4c-33dced0e83ea.png">

立方体を選択した状態でここをドラッグするとパネルが出てくるので、寸法から数値入力でサイズを変えましょう。地面からの高さはオブジェクトの中心で計算しているので、注意が必要です。

<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3521926/8f50f420-cf10-c558-f329-90120b29373a.png">

次にディスプレイが設置されている建物を作ります。
左上のドロップダウンで、「オブジェクトモード」から「編集モード」に切り替え、すぐ右の3つから一番右の「面選択モード」にしましょう。

<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3521926/bdaca977-a86f-a54f-fcdb-b173bcba454f.png">

この状態でディスプレイの底面を選択し、```Shift + D```を押します。これで底面を「複製」できました。マウスを動かすと面も動いてしまいますが、右クリックで元の位置に置けます。
ディスプレイとの境界をわかりやすくするために、```B``` で「スケール」を選び、少し小さくしておきましょう。
面を選択した状態で```E```から「面を押し出し」ができるため、```Ctrl```を押したまま下に向かってドラッグします。Ctrlを押すことで、きれいに地面と揃えることができます。地面と揃ったら、左クリックで決定します。

物によってはディスプレイが湾曲しているものがあるため、それもできる限り正確に再現します。
面選択モードの左、「辺選択モード」で湾曲している辺を選びます。その状態で```Ctrl + B```を押すことで、角を滑らかにすることができます。スクロールで滑らかさを変えられます。

### カメラの位置を調整する

次は観客の再現です。デフォルトでカメラが用意されているので、それを使います。
ディスプレイと同じように位置を動かし、ディスプレイがきれいにカメラに収まるよう角度を調整します。

<img width="150" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3521926/1b8a08eb-3862-177e-e59e-a859217a1386.png"> 
<img width="172" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3521926/0fd724b3-28e3-b55c-4653-55cfa96b124b.png">

「カメラビュー」に移り、ディスプレイが小さく見える場合は、焦点距離を上げて調節します。動画の中では80～100mmが良いと紹介されていました。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3521926/92ac18f6-2e84-9de6-5afa-0e91fe5fbfea.png">

こんな感じになっていればOKです。

# 3Dモデルで映像を作る
いよいよ映像の作成です。ただ、少し前準備が必要になります。

### 前準備
まずは、面選択モードでディスプレイを選択して複製します。あとで元の位置に戻すため、Ctrlを押しながら、別の場所に置いておきましょう。
移動させたら```P```を押して「分離」の中から「選択」を選びます。
その後オブジェクトモードに切り替え右クリックから「原点を設定」→「原点をジオメトリに移動」をクリックします。
コピー元のディスプレイは不要なので、面選択モードで削除しましょう。

<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3521926/d2d54e36-ef8c-c3cc-0f2d-cdfdfa23d5a7.png">

ここからは必須ではないため、次項の[映像を作る](https://qiita.com/drafts/7e24b7a2456b4f31d3b5/edit#%E6%98%A0%E5%83%8F%E3%82%92%E4%BD%9C%E3%82%8B)に飛んでも大丈夫です。

下記の参考映像のように、ディスプレイに擬似的な枠を作ることで、映像が飛び出ているように見せやすくなります。

https://youtu.be/XXovsaBcjVI?si=n9smMMEiKOJuASHL

動画ほどしっかりしたものではないですが、それに似たものを作ります。

とはいっても簡単で、面選択モードで先程削除した内側を選択して、右クリックから「法線に沿って面を押し出し」を選ぶだけです。
面を一つずつ選べば、枠の太さを変えることもできます。

<img width="250" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3521926/17b43718-203f-8a4b-2f9d-df4181f1d9fe.png"><img width="280" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3521926/c8d3413d-f632-761e-7116-e2843f9458d1.png">

### 映像を作る
ようやく映像を作る段階になりました。とはいったものの、私はここが全然わかっていない上に、人によって必要な知識が異なるため、参考になるサイトやチャンネルを紹介するだけに留まらせていただきます。

https://styly.cc/ja/tips/blender/nimi-blender-animation/

https://www.youtube.com/@kasaharacg

https://www.youtube.com/@user-sy9do4tr4h

　
　
私は今回こちらをお借りしました。

https://www.cgtrader.com/free-3d-models/character/anatomy/hand-low

![アニメーション.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3521926/859dc0b4-318a-d1fa-8d59-2405bb5a46f9.gif)

手を抜いたらホラーチックにw

<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3521926/ea081478-de9b-1b73-e78d-fc3c2eab82b1.png">

映像が完成したら、右上の「アウトライナー」で右クリックをすることで「コレクション」を作れるので、ディスプレイとアニメーションのオブジェクトを別々のコレクションに入れておきます。

# 映像を出力する
映像が完成したら、ディスプレイに流す用の動画に変換します。

### ディスプレイの設定
まず、ディスプレイに仮表示させる画像を用意します。```Ctrl + F12```で「アニメーションをレンダリング」しましょう。レンダリングされた画像は、出力プロパティで指定された場所にあります。

<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3521926/9ed73450-20cc-4dbe-fc67-fb31520f048b.png">

コレクションのチェックマークを外してアニメーションに使用したモデルを非表示にし、横に置いていたディスプレイをもとに戻しましょう。モディファイアープロパティの「モディファイアーを追加」から「編集」→「UV編集」と進み、「UVマップ」を「UVMap」に、「オブジェクト」をカメラに設定します。アスペクトのXを1.78にすることで、画像がきれいに貼り付けられます。

<img width="200" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3521926/e532e66b-a0db-9137-df38-e1e15910eb3c.png">

新規マテリアルを作り、ベースカラーの黄色の丸から画像テクスチャを選んで先程レンダリングした画像をすべて選択します。
「粗さ」を1、「スペキュラーIORレベル」を0にすることで、ディスプレイに光が反射せずきれいに動画を出力できます。
動画では「放射光」にも同じ画像を割り当てていましたが、私の場合ではあまり違いがわかりませんでした。

<img width="200" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3521926/00e46e8f-c607-2f86-9f51-44d4e89ae91e.png">

マテリアルプロパティで「ループ」と「自動更新」をオンにすることで、スペースキーで再生できるようになります。

<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3521926/ee4bdde7-2153-a190-cf75-8d46bf95bba9.png">

### ディスプレイを平面にする

編集モードでディスプレイ全体を選択し、```Ctrl + R```で横方向に辺を追加しましょう。

<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3521926/025432d3-de77-b32c-29d1-ea2b2656ebe5.png">

オブジェクトモードでディスプレイを複製し、右クリック
↓
モディファイアープロパティの中をクリックし、```Ctrl + A```でUV投影を適用
↓
選択中のディスプレイを別の場所に移動

と進みます。

移動したディスプレイを選択してからデータプロパティから画像の場所を2回クリックし、「ベース」と「キー」を作ります。

<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3521926/ea4496d9-110c-5fce-198c-90afeec2908b.png">

次はディスプレイを平らにします。
まずは中央上の画像の部分から「3Dカーソル」を選択し、右上から表示を「ワイヤーフレーム」にします。

<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3521926/1b2d40ee-988a-7ebb-f386-31ca1e4ccc32.png">
<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3521926/c731781e-d4f1-c22f-04cc-6ab500b615a2.png">

頂点選択モードにして、真上から見下ろす状態にしましょう。

<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3521926/ec59fbac-571a-d1f0-fac1-f99826d28057.png">

ここから少し面倒な操作が必要になります。

①曲がっていない一番端の頂点を、範囲選択で選び、```Shift + S```で「カーソル → 選択物」でカーソルを移動させる。

<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3521926/2837cadc-ae40-f8ea-7b1d-e2c2488ac081.png">

②曲がっている側のすべての頂点を選び、```R```で回転させて平らにする。

<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3521926/a46a4c0d-801f-38c4-3007-ecdbca40d28e.png">

この2つを繰り返して、以下のようにします。

<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3521926/b182897a-2831-f447-d44e-422939a9ed6e.png">

### 動画として出力する

表示を「レンダー」に、モードをオブジェクトモードにします。
平らにしたディスプレイがまた曲がっていますが、先程設定したキーの値を1にすることで、平らになります。

まずはレンダリングのためにカメラを追加しましょう。
動画では別の方法でカメラを調整していましたが、私がやりやすかった方法を紹介します。

まず、カメラを平面のディスプレイが収まるように移動させましょう。
回転の値は入力して、ディスプレイと並行にしてください。
暗い場合はライトを追加し、適切な明るさにしましょう。

<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3521926/b40c4961-6896-7a93-8a9f-e90b5d53d173.png">

新しく追加したカメラの横にある、カメラマークを押してからカメラビューにします。

<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3521926/4bbfccc5-9ebc-866b-0c00-d9a1d8fdcebb.png">

出力プロパティから解像度やフレームレートを設定し、「レンダー領域」にチェックマークをつけます。

<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3521926/f8ed845b-4c55-3bad-9ccc-1698c6a3ab51.png">

白い角で囲われている部分がレンダー領域なので、下の画像のように、ディスプレイとぴったり合わせましょう。

<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3521926/80d772bb-93eb-4e6c-b322-c22221ecb7b3.png">

最後に「ファイルフォーマット」と「コンテナ」から適切なフォーマットを選択し、「出力の品質」を高品質にします。

<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3521926/e0b1a0e9-a354-c1c8-7bd0-06a9105bcced.png">

これでアニメーションをレンダリングすれば完成です。

![完成動画.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3521926/b5c65507-bb27-01ac-0463-9c7007ddda17.gif)

ディスプレイに動画を貼り付けてみると、こんな感じになりました。

![流してみると.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3521926/aac064be-de0d-6730-2d9b-582620ed6221.gif)
　
　
　
　
　
分かりづらいところが多々あったと思いますが、最後まで読んでいただき、ありがとうございました！
今後も時々記事を書いていく予定なので、よろしくお願いします。