先日は、

 

■ 配列のモディファイヤーとキーフレームなど (Blender 2.82a)

 

にて 【 配列 】 のモディファイヤーとマテリアルのカラーをキーフレームによる制御を行ってみました。

 

 lenderと座標                    

 

 Blenderを立ち上げると、

 

 

のような画面になりますが、 【 N 】キーデシェルフを開くと、

 

 

のように表示が変わります。これは、構図を決める時にも使用しますが、オブジェクトの情報も表示できます。

 

 

のようにオブジェクトの情報が表示されていますが、この数値を変更してキーフレームを打つと、指定したオブジェクトの状態変化を記録できます。形状の変化が存在しない条件下でのオブジェクトの座標変動はこの数値の変動だけで指定できます。ただし、この時の座標はローカル座標が基準となるので、それに注意して指定することになります。

 

 そして、指定する項目はタブで管理されているので、右にあるタブで選択します。

 

 マテリアルの指定などを行う場合、この右側になるプロパティーで指定します。

 

 

のように項目が並んでいますが、オブジェクトヤマテリアルの設定だけでなく、レンダリングやダイナミクスやパーティクルの設定などもここで行います。また、テクスチャーの登録もここで行う事になります。

 

 そして、今回使うモディファイヤーもここで指定します。

 

 

 ディファイヤー(配列)               

 

 この 【 配列 】 ですが、プログラミング言語のループに該当する処置になります。

 

 まず、モディファイヤーのプロパティーのタブを選択し、モディファイヤーを選ぶのプルダウンをクリックすると、

 

 

のように使用できる項目が表示されます。今回は、配列なので、

 

 

のように配列を選択します。すると、

 

 

のように設定する項目が表示されます。

 

 

 列と数値                      

 

配列を追加すると、

 

 

のように通常は、真横に一つ複製されます。

 

 この処理は 【 配列複製 】 なので、オブジェクトは指定した状態で複製されます。この設定ですが、

 

 

のように複製する数と間隔などをしています。オフセットは座標と距離なので、どの軸にどれくらいの間隔で配置するのか?を指定します。画像のように2を指定すると、

 

 

のように 【 オブジェクトのサイズの倍数 】 分だけ間隔があきます。つまり、基準となるオブジェクトから何倍の距離に重心を移動するのか?を決めます。そして、数値を変更すると、

 

 

のように数を増やす事ができます。これを使うと、建物の窓や矢氏らのように一定間隔で配置されている物を用意する時に等間隔で配置する事ができます。

 

 とは言っても、この座標と感覚と数値の指定だと、三軸の直線の設定なので、マイクラでブロックを配置するような状態だと制御ができますが、回転はこの項目では設定できません。

 

 その為、回転複製のような処理だと、別の設定方法を用いることになります。

 

 

 転複製                       

 

 回転複製を行う場合、オブジェクトを基本に動かす事になります。その為に、配列を適応するオブジェクトとは別に、挙動の基準となるオブジェクトを追加します。

 

 まず、 【 SHIFT 】 + 【 A 】 でメニューを出し。任意のオブジェクトを追加します。

 

 

の中から、今回は、モンキーを追加します。

 

 

のように選択するとモンキーが追加できます。Blenderは使う前にプリリファレンスでインストール時に一緒に追加されているアドオンを裕子にする必要があります。メッシュには、

 

 

のように景観生成に向いているアドオンが最初から実装されています。

 

 対象オブジェクトの状態をそのまま反映させる場合、

 

 

の 【 オフセット(OBJ) 】 を使います。ここで、

 

 

のようにシーン内にあるオブジェクトから対象となるオブジェクトを指定します。今回は、モンキーなので、

 

 

のように追加したオブジェクトのZ軸の移動と回転を入れた状態で適応すると、

 

 

のようにらせん階段のように回転しながら移動分だけの座標変動が追加されます。この数値を

 

 

のように変更して、配置する数を増やすと、

 

 

のようになります。基準となるオブジェクトの座標が変わると、

 

 

のようになりますが、このオブジェクトの6DoFの変化で複製時の状態が変わります。

 

 

 ブジェクトの加工                 

 

 配列は計算でこの状態にしていますから、モディファイヤーを適応する前だと、配列を適応しているオブジェクトの形状の変化も適応されます。その為、エディットモードに入り、

 

 

のように面を選択してGキーで移動して形状を変形すると、複製されたオブジェクトにも反映されます。

 

 

その為、

 

 

のような状態になります。更に、

 

 

のようにX軸方向に拡大して、

 

 

のように高さを持たせると、

 

 

のようになります。また、

 

 

のように縮小すると、

 

 

のような感じになります。形状を加工して、

 

 

のような感じにすると、

 

 

のような状態になります。また、 【 E 】キーで押し出すと、

 

 

のようになりますが、これを加工すると、

 

 

 更に、【 I 】キーで加工して、

 

 

のようにします。

 

 

 テリアルを指定する                

 

 オブジェクトは複数の頂点とポリゴンで構成されていますが、指定したポリゴンに異なるマテリアルを指定できます。まず、

 

 

のように新規にマテリアルを追加します。そして、

 

 

のように範囲を指定します。この状態だと、オブジェクトで指定したマテリアルが割り当てられているので、

 

 

のようになっていますが、

 

 

のように追加したマテリアルを指定します。

 

 これを選択した後に、  【 割り当て 】 をクリックすると、

 

 

のようになります。また、この状態で、

 

 

のようになります。その後、状態を指定することになりますが、

 

 

の状態からプロパティーを指定します。

 

 

のようにスクリーンスペース反射を指定し、ポスプロの設定も

 

 

のように行います。Eeveeでは設定項目が多いのですが、事前に設定しないとダメな物もあるので、それについては、次の機会に描こうかなと思います。このままだと、

 

 

の状態になりますが、動画にするのでキーフレームを打ちます。

 

 

 ーフレームでカラーを制御する         

 

 キーフレームは、ビューポート上でオブジェクトを選択して状態変化を加えて 【 I 】 キーを押すと、追加できますが、

 

 

のような感じで、キーフレームを打ちます。最初にベースとなる部分の状態を記録して、挙動を実装しますが、マテリアルで指定した色も変更できます。

 

 

のようにフレーム数を変えて、色を変更してキーフレームを打つと

 

 

のようにキーフレームで制御できます。

 

 

のような感じで、設定できますが、動画については、プロパティーで、書き出しの設定を行います。動画で書き出す場合、ffmpeg動画を選択してコーディックを指定することになりますが、動画で書き出すと、

 

 

のような感じでレンダリングがスタートします。Blenderでは、レンダリングをする場合、ウインドウを最小化して表示しない状態で裏で計算させたほうが速いので、最小化してレンダリングを行う事になります。

 

 今回も動画の話なので、実際に動いてみる物を見たほうが変化が解り易いと思ったので、YouTubeに動画をアップしておきました。

 

 

 ■ 実際に出力した動画               

 

 前回はEeveeを使って動画を書き出したのですが、Eeveeにはいくつかの注意点があります。そこで、Eeveeでの設定などについて書こうかなと思います。

 

 

 evee                          

 

 Blender 2.8から、BIがなくなったので、BlenderレンダーとBGEがなくなりました。この変更と同時に、マテリアルの設定方法が、Cyclesのノードの指定方法に統一されました。そして、この変更により、レンダーも変更になり、ビューポートレンダーにラスタライズ処理で短時間で高品質なレンダリングができるEeveeが追加されました。

 

 Eeveeでは、プリレンダリングで使用するパストレーサーのような処理を行っていませんから、透明、反射、屈折などを計算できない仕様になっていますが、疑似処理によって質感を出す事ができます。

 

 EeveeはCyclesよりも短時間でレンダリングができますが、Eeveeは、ゲームの実行と同じようにGPUでの演算をしているので、2.79bまでのCyclesのGPUレンダリングと同じような問題もあります。

 

 例えば、CyclesでCPUレンダリングを行った場合、レンダリング時間は短縮できますが、シーンが重すぎる場合、VRAM不足で落ちることがあります。そうした影響が出るので、VRAMの容量の大きな製品を選択する必要があります。また、メモリーの実装量も多くしないとレンダリングでは厳しくなるので、重たいシーンになるほどメモリーとGPUのVRAMの容量が重要になります。その為、使用しているマシンが製作したシーンを処理できないような性能だと、レンダリング時間が長くなるのではなく、レンダリングそのものが行えません。

 

 こうした条件は、GPUレンダーだとどれを使っても同じですが、高速にレンダリングができるのでEeveeは便利ですが、そう言った問題もあります。ここで使っている環境は、恐ろしく古く、とんでもなく遅い環境なので、ここで行えている内容は、先日AMDからリリースされたRyzen 5 1600AFだと余裕で出来て、レンダリングも高速なので、出来て当たり前の条件になりますが、その環境を使ってレンダリングをすると、Eeveeでも1フレームの書き出し時間に5秒以上かかるので、動画として書き出すと結構時間がかかります。つまり、60フレーム書き出すのに300秒(5分)かかるわけですから、1分の動画を書き出そうと思うと、5時間かかってしまいます。このように、PCのスペックが低いと、無駄にレンダリング時間が伸びるので、3DCGを行う場合には、古いアーキテクチャは選択しないほうがいいです。ちなみに、Eeveeに限らず、GPUレンダーだとスペックが足りないとエラーが出て落ちるのですが、

 

 ■ DofとFoVとモーションブラーのテスト     

 

ですが、実際には1200フレームでシーンが構築されていたのですが、レンダリングをしてみたら途中でエラーが出て落ちていました。結構負荷の高い処理がかさんでいたので仕方ない感じはしますが、ポスプロを入れて複雑なことをすると、使用している環境では無理が来るようでした。レンダリングをしなくてもディスプレイスメントマップとノーマルマップを併用しても売りが来ていましたから、然るべきマシンスペックにしておく必要があります。

 

 Cyclesでのレンダリングだと、こう言った条件になった場合、CPUレンダリングに切り替えれば、時間がかかるだけでレンダリング自体は行えますが、GPUレンダーの場合はそうはいきません。GPUレンダリングを行う場合や、ビューポートレンダーを用いる場合には、スペック相応の処理が存在していて、それを超えるとレンダリング自体が行えないという事を踏まえて使用することになります。

 

 その為、低スペックなマシンを使っている場合レンダリング自体が遅いのですが、GPUレンダリングの選択肢も狭く、ビューポートレンダリングにおいてもかなり制約を受けてしまいますから、それ相応のスペックにしておく必要があります。

 

 基本的に、Eeveeは

 

 ■ CPUレンダリングが存在しない

 ■ シングルGPUの性能の実で計算している

 ■ 2GPU以上の並列処理が存在しない

 ■ メモリーやVRAMが足りないと落ちる

 

ので、ローエンドの構成やエントリー製品のGPUは除外して考えることになります。ディスクリートGPUを選ぶ場合、VRAMが多い製品を導入することになりますが、結構スペックが高いマシンの構成になってしまいます。その為、CPUレンダリングと言う選択肢のあるプリレンダリングの場合、スレッド数が多く速度の出るGPUとGPUレンダリングの利くGPUの構成にしておけば問題がありませんが、GPUレンダーだと、レンダリング不能と言う条件が発生することを踏まえて使用することになります。

 

 使った感じからすると、ポスプロの処理が入るレンダリングだと負荷が上昇しやすいので、結構無理が来ることが増えました。その為、通常のビューポートレンダリングで重たいシーンだと、Eeeveeのポスプロの処理や疑似処理などを含めた場合には落ちる可能性が高くなります。

 

■ Eeveeでのレンダリング              

 

 Eeveeでのレンダリングですが、過去に動画をアップしていますが、

 

 ■ Eeveeのレンダリング速度(リグ)        

 

 ■ Eeveeのレンダリング速度(パーティクル)  

 

のような感じになります。簡素なシーンですが、結構遅い環境でもこんな感じですから、レンダーとしてはかなり高速です。

 

 ただし、光線の計算をしていないので苦手とする物も存在すしますから、質感が意図した状谷で無い場合もあります。

 

 

 eveeとポスプロ                   

 

 Eeveeのイメージですが、ゲームグラフィックで質感を上げるイメージになります。その為、リアルタイムレイトレーシングやリアルタイムパストレーシングなどが存在しないので、基本的にラスタライズ処理になります。その為、パストレーサーのような光の計算ができません。そうした問題があるので、反射・屈折・透明などの処理におていはいくつか問題が出ます。この問題を解決するために、疑似的な処理で対応する事ができるようになっていますが、反射した物が映らないとか、透明な物を使った場合に、いくつかの制約が存在しています。

 

 今回はその中の反射について書こうかなと思います。

 

 射の検証                      

 

反射とレンダーによる違いについては、

 

■ レンダーと出力結果の違い 【 Blender 2.82a 】

の中でライトローブについて触れていますが、今回はその検証です。

 

 この機能は、Eeveeを使った場合に、平面及び球体を使った場合の反射を適応するための機能になります。

 

 

 証用のセットを作る                

 

 今回ですが、

 

 

のように三つのCUBEを用意して、それぞれに異なるマテリアルを指定することにしました。最初に一番左の素材ですが、

 

 ■ グラスBSDFを適応                

 

については、Cyclesでも使用できるグラスBSDFを適応しました。

 

 

設定ですが、

 

 

のようにしてあります。次に真ん中CUBEには、伝播をしていしました。これが透過になりますが、グラスに近い処理になります。IORが屈折率なので石英ガラスと水などの液体では屈折率が異なるので、iORの数値を変更することになります。設定は、

 

 ■ プリシプルBSDFで伝播を適応         

 

 

 

のようにしてみました。そして一番最後のは、単純に透明度を変えました。

 

 ■ プリシプルBSDFで透明度を下げた物     

 

設定は、

 

 

のような感じになります。Eeveeのレンダリング設定ですが、各種項目はオンにして、スクリーンスペース反射の屈折の項目にもチェックを入れています。

 

 

この状態で、Eeveeでレンダービューで表示を行うと、

 

 

のような違いが出ます。屈折を確認するために、

 

 

のようにCUBEの後ろにモンキーを置いて確認してみます。レンダービューだと

 

 

のような状態になり、視点を変更すると、

 

 

のようになります。

 

 ンダーによる違い                 

 

とりあえず、構図を変更して、

 

 

のようにして、スペキュラーによる反射を入れてみました。マテリアルを変えて違いを見てると、

 

 ■ マテリアル表示                   

 

 ■ Eevee                         

 

 ■ Cycles                       

 

のようになりました。床面の反射の設定を樹脂のような物ではなく、鏡のように反射するメタリックに変更すると、

 

 ■ マテリアル表示                   

 

 ■ Eevee                         

 

 ■ Cycles                       

 

のような違いが出ます。既に結果が違い過ぎるのですが、マテリアル表示だと存在しないIBLが映り込んでしまうので問題がありますし、Eeveeではおかしな映り込みになっています。

 

 この問題を解消するためにライトローブを使ってみます。

 

 イトローブを使う                  

 

 とえいあえず、 【 SHIFT 】 + 【 A 】 でメニューを呼び出し、

 

 

の中からライトローブを選択します。今回は、

 

 

の反射平面を選択します。これは面が存在していて、そこに映り込むこのを反射させる時に使用するものになりますが、以前、映り込みに問題が出る場合がありましたが、これを用いると状態が変わります。これは高さの調整で見え方が変わるのですが、

 

 

のように配置して、拡大して範囲を広げます。反射を適応するオブジェクトの範囲まで広げて使用するのですが、高さによって映り込むの状態が変わるので、状態を見ながら高さを変更します。とりあえず、高さを変更すると、

 

 

のように影になっている部分が消えるという問題は解消するので、シーン内に鏡を入れる場合だと、反射平面を使う事で対応できます。ただし、透明な物があると、

 

 

な感じになりますから、完全という訳ではありません。これについては、実際に変化を度が出観たほうが解り易いので、YouTubeに動画をアップしておきました。

 

 ■ 反射鏡面と効果の確認              

 

また、通常の反射だと問題なく使えますから、

 

 

のような使い方ができます。その為鏡を用意したシーンを作る事が可能です。

 

 とは言っても、苦手な視点もあるようで、こうした鏡同士が重なるような作りにして、オブジェクトが干渉するような作り方(上下のフロアが鏡張りで一体化しているので、一つのオブジェクトで済ませようとした場合)だと

 

 

のように破綻してしまいます。これもレンダーで確認してみると、

 

 ■ マテリアル表示                   

 

 ■ Eevee                         

 

 ■ Cycles                       

 

のような違いが出ます。この状態で、

 

 

のように光源を追加してみると、

 

 ■ マテリアル表示                   

 

 ■ Eevee                         

 

 ■ Cycles                       

 

のような違いが出ます。マテリアル表示は、オブジェクトの前後関係が逆になっているので、鏡を使うのが不可能な状態と言えますが、Eeveeもこの条件で、この視点にすると破綻します。とりあえず、Eeveeでは、伊ラディアンスボリュームを使って間接照明のBAKEが行えるのですが、

 

 

を使ってBAKEをして、正面からの状態を比較してみると、

 

 ■ マテリアル表示                   

 

 ■ Eevee                         

 

 ■ Cycles                       

 

のようになります。マテリアルビューとEeveeはUPBGE 0.3 Alphaで使用できますが、この条件を見ると、軽量で意外と綺麗に出るマテリアル表示の場合、実質的に反射が入る物は使い物になりませんから、そうした表現を避ける必要がありますし、Eeveeについても屈折の入る物の場合、スクリーンスペース反射と組み合わせると調整が難しくなります。

 

 あと、この伝播を使った方法ですが、

 

【 ガラスの中に水を入れる 】

 

ような表現はラスタライズ処理が苦手とする物の一つで、Eeveeも例に漏れず、この条件だと破綻します。あと、透明な物の組み合わせも苦手なので、シーンを作る時に工夫する必要があります。その為、色のついた透明度の低い物だと問題がありませんし、カップの中に入った透明な物などはフツーに使えますが、透明+透明やその条件で共に屈折の要素を持たせた場合には、おかしな振る舞いになります。この辺りがラスタライズの苦手とする部分になりますが、レイトレーシングやパストレーシングではこうした問題は発生しません。

 

 ただし、球体の鏡面反射や平面の鏡面反射やについては、ライトローブの効果で対応できるので、大丈夫ですが、複雑な形状だとパストレーシングのような正確な反射が見込めない場合もあります。

 

 あと、2.83 LTSが出たのでSmokeを使ってみたのですが、

 

 ■ Eevee@Smoke(Blender 2.83 LTS)     

 

のような感じになりました。QuickSmokeが上手く行かないというのが2.8ではあったようですが、フツーにQuick Smokeを使って表示はできました。ただ、コリジョンやガイドの設定が謎なので、この辺りも調べておこうかなと思います。

 

 

回の作業環境                   

 

  ■ Core i5 650

  ■ H55M-Pro 

  ■ DDR 1333 2GBx2+1GBx2(DUAL CH)

  ■ Quadro K620(PCI Express x16 【GEN2動作】)

  ■ SATA HDD

  ■ WINDOWS 10 x64 (1909)

 

  ■ Blender 2.82a (x64) + 2.83 LTS

     https://www.blender.org/

 

  ■ UPBGE 0.3 Alpha  & 0.2.5

     https://upbge.org/

 

  ■ Gimp 2.10.18 (x64)

     https://www.gimp.org/