GPUレンダーを比べてみた その1-Octane Render 4を使ってみよう

このブログでは過去にGPUレンダリングの「RedShift」の解説を連載しておりました。その連載も再開を考えていたのですが、どうせならGPUレンダリングをいろいろ試して比較してみようかと思います。

今回は「OctaneRender4」を試してみようと思います。RedShift同様にGPUを使ったレンダラーです。


トゥーンレンダーが得意なのも特徴の1つです。


こちらのShowCaseもご覧ください。

今年の春先にバージョン4になったようで、詳しくはこちらのブログの解説をご覧いただいた方がいいでしょう。
こちらフリーでダウンロードして使えますので早速インストールします。注意として、別途3DCGソフトのプラグインをダウンロードしないといけません。

機械や建築CADなど幅広く対応しています。今回はMaya2016で試してみますが、ベータ版なのが気になります。

特に難しい手間もなくインストールできます。プラグインマネージャーをONにするだけです。Demo版は特にユーザー登録なども不要です。

プラグインがONになると、以下のようにシェルフが登録されます。右2つがアイコンが見えませんが、ちゃんと存在します。

メニューも追加されます。Octaneはトゥーンのマテリアルがありますね。


ハイパーシェードにもOctaneの機能が追加されます。

「レンダー設定」でOctaneに切り替えます。

テストするのは毎度おなじみのBrosロボです。

レンダリングすると・・・ワイヤーフレームになります。これはエラーではありません。デモ版なので透かしは仕方ないです。

「レンダー設定」でレンダリングで使うCuda(GPU)の設定が正しく表示されません。スクロールバーで移動して操作はできます。ベータ版のバグなのか英語版Mayaでも同じでした。
 

OctaneRenderタブの「RenderSetting」の各項目の「CreateNew」します。
今回は詳細説明しませんが、これをやらないと正しくレンダリングされません。

Octaneの標準のDiffuseマテリアルを設定します。

Octane用カメラを作成します。

Octane用のDaylightを作ります。Skyライトですね。

ライトの角度を調整します。アうトライナーの表示がTransfrom1なので解りにくいです・・・
こんな感じでレンダリングされます。GPUですから1秒もかかりません。

GPU-ZというツールでGPUのモニタをするとフル稼働してるのが解ります。
テクスチャーを貼ってみましょう。シェーダーのアトリビュートからDiffuseのマップボタンを押します。

OctaneImageTextureを選択します。

カラーテクスチャーを貼ることができます。
GPUレンダリングですので、レンダービューを出したまま、アトリビュートを変化させると、リアルタイムで結果が反映されます。とても速くて便利です。

今度はMetallicなマテリアルを設定してみます。いい感じな金属感です。これも1秒かかりません。

今度はトゥーンレンダリングを試してみます。ToonMaterialを設定します。

Toon用のライトを作ります。

こんな仕上がりになります。

ラインの設定など細かくは次回で解説していこうと思います。

さて、動画レンダリングを・・・と思ったのですが、Demo版はできないような制限があるようです。Maya2018のArnoldレンダーもできるシーケンスレンダーを使ってもできないようです。

 

基礎から始める3dsmax/Python(MaxPlus)プログラミング⑤

今回は3dsMaxのPythonでこんなアニメーションを自動で作ってみようと思います。

そのまえに前回の回転の設定の補足です。
ちょっと面倒だったと思いますが、もう少し楽な方法もあるのです。
例えば、ティーポット作って回転します。

これをリスナーで見ると・・・

このように表示されます。これはmaxスクリプトで回転している方法です。
max rotate
は「選択して回転」ツールを選ぶコマンドです。

rotate $ (angleaxis -94.1097 [0,0,1])
は、前回説明のクォータニオンでZ回転で-94度で回転していることが解ります。
しかし、Pythonではこのままでは動きません。
そこで、このようにプログラムを書きます。

import MaxPlus
MaxPlus.Core.EvalMAXScript("rotate $ (angleaxis 90 [0,0,1])")

これを実行すると、ちゃんとZに90度回転してくれます。

このようにMaxPlusの命令が解りにくい場合、MaxPlus.Core.EvalMAXScript(“maxスクリプトの命令”)
と書いて実行することでmaxスクリプトをPyhtonから実行できるのです。
あまり良い書き方ではないのですが、maxスクリプトだけの命令もあるので、知っていると便利です。

では、今回のプログラムです。参考にした元サンプルはこちらです。

import MaxPlus as mp
# フレーム数に160倍で毎秒4800ティックにする
ticks = 160

def CreateTeapot():
  theTeapot = mp.Factory.CreateGeomObject(mp.ClassIds.Teapot)
  node = mp.Factory.CreateNode(theTeapot)
  return node

def AnimateTransform(teapot):
# ティーポットを選択、アニメーションのオブジェクト定義
  teapot.Select()
  anim = mp.Animation
#オートキーをON
  anim.SetAnimateButtonState(True)
# タイムスライダーを30フレームにする
  anim.SetTime(30 * ticks)
# ティーポットを移動1
  teapot.Move(mp.Point3(50, 0, 0))
# タイムスライダーを50フレームにする
  anim.SetTime(50 * ticks)
# ティーポットを移動2
  teapot.Move(mp.Point3(-50, 0, 0))
# ティーポットを回転1 
  mp.Core.EvalMAXScript("rotate $ (angleaxis 180 [0,0,1])")
# タイムスライダーを100フレームにする
  anim.SetTime(100 * ticks)
# ティーポットを移動3 
  teapot.Move(mp.Point3(50, 0, 0)) 
# ティーポットを回転2 
  mp.Core.EvalMAXScript("rotate $ (angleaxis 180 [0,0,1])") 
# オートキーをOFF
  anim.SetAnimateButtonState(False)

def DemoAnimation():
#新規シーン
  mp.FileManager.Reset(True)
#ティーポット作成の関数へ
  teapot = CreateTeapot()
#アニメーション設定の関数へ
  AnimateTransform(teapot)

#メインプログラム実行
DemoAnimation()

これを実行すると、最初にご覧いただいたアニメーションが自動で生成されます。
まず、今回は関数にすることで読みやすく工夫しています。
メイン関数は35~41行で、44行でその関数を実行しています。

mp.FileManager.Reset(True)
これは3dmaxを新規作成する命令です。プログラムを作る時には結構便利です。

teapot = CreateTeapot()
CreateTeapot関数でティーポットを作るだけです。これは前回でもやっているので省略します。

AnimateTransform(teapot)
ティーポットにアニメを付ける関数です。今回のメインのプログラムです。

3行目に飛びます。
ticks = 160
ちょっと解りにくいのですが、フレーム数を160倍しないとMaxPlusでは正しい時間指定にならないのです。
これは3dsmaxの中ではティックという単位で時間を管理していて、毎秒4800ティックなので、4800/30=160なので160倍する、という仕組みなのです。

10行目で作ったティーポットを関数で受け取ります。
def AnimateTransform(teapot):
12行でティーポットを選択、13行でアニメーションのオブジェクト(別の回に説明します)をanim作成します。

14~33行でアニメーションを付けていますが、3dsMaxユーザーの方なら解ると思いますが、いつもの手順のままプログラムを書きます。
1)AutoKeyをON
2)タイムスライターで時間を移動
3)移動や回転、スケール、モディファイアなど変化を設定する
4)2に戻って繰り返す
5)アニメを付け終わったら、AutoKeyをOFFにする

これをMaxPlusの命令に置き換えると・・・
1)が、 anim.SetAnimateButtonState(True)
2)が、anim.SetTime(フレーム数 * ticks=160)
3)が、teapot.Move(mp.Point3(移動X, Y, Z))
で、回転が最初に説明したMaxScript版のクォータニオンで、
mp.Core.EvalMAXScript(“rotate $ (angleaxis 回転角 [軸X,軸Y,軸Z])”)
5)が、anim.SetAnimateButtonState(False)

という流れです。
30フレーム=X50移動
50フレーム=X-50移動+Z180度回転
100フレーム=X50移動+Z180度回転
グラフを見てお分かりかと思いますが、値は相対値に設定されています。

いかがでしょうか?それほど難しくはないと思いますので、ぜひお試しください。

UnrealEngine4/Voxel Global Illumintaion (VXGI) をテスト③

ちょっと間が空きましたが、UnrealEngine4のVXGIの連載3回目です。
前回までは適当な素材で実験でしたが、今回から具体的なコンテンツにしていこうと思います。
テーマは「車」です。まず完成品をご覧いただきます。UE4で動画作成すると、1280x720サイズで50フレームが1.5秒で終わります。

素材はこちらのフリーのものを使わせていただきました。Mayaで見るとこれくらいです。123万5千ポリゴンくらいあります。

UE4にインポートした状態です。

これに以下のUE4オフィシャルの車用のマテリアルアセットを入れます。

そのままの状態を設定するだけで、こんな感じに仕上がります。

新規のレベル(シーン)を起動します。完全に何もない状態から作ります。
ライトが無いので真っ暗ですので、「非ライティング」で表示しています。

モードから「VXGI Anchor」を配置します。前回は使いませんでしたが、この場所から離れれば大きなボクセルになり計算が軽減されるようです。

スフィア反射キャプチャを置きます。大きさはステージ全体くらいでOKです。

以下のようにポストプロセスボリュームを全体で覆います。

VXGIエリアライトを置きます。ちょっと細長くしています。これで基本的な準備はOKです。
シネマカメラを置きます。

FocalLengthやFocusの設定はここで行います。

ポストプロセスのVXGIAreaLightをONにします。前回は全部ONにしましたが、まずはこれだけでOKです。

このようにレンダリングされます。もちろんリアルタイムです。

表示メニューから「VXGI OpacityVoxcel」で確認すると車がボクセルであるのを確認できます。

以下のようにライトを複製して並べます。

車のレンダリングでよく使われるラインの入った光沢ができます。

VXGIエリアライトを大きくして、前に置きます。

キーライトで全体的に明るくしました。

複製して反対側にも置きます。

こんな仕上がりになりました。瞬時にライティングを確認できるのもリアルタイムの醍醐味です。

最後に動画作成のためのカメラ・アニメーションを付けます。

シーケンサーでカメラにキーを打ちます。
あとは動画を書き出すだけです。
このシーンを使ってVXGIの細かいパラメータの解説を次回からしていきます。