月: 2018年11月

CG, KATANA

KATANA+Arnold でシェーディング&ライティング

KATANA といえば lookdev&Lighting ツールということで、ついにシェーディングとライティングをおこなってみます。

本当はマテリアルとライトで二回に分けて記事を稼ごうかとわかりやすくしようかと思ったんですが、マテリアルをアサインした場合はこれまで使っていた素のマテリアルと違ってライトを置いてやらないと反応してくれず、真っ黒になってしまうのでこの二つは一緒におこなう必要がありました。おかげで長いです。書くのもむちゃんこ疲れました、、、

そのため、今回は極力手順を簡単にするために、arnold の car paint シェーダを使用し、ライティングはドームライトのみを用いるようにします。

まずはマテリアルの作成からおこないます。マテリアルの作成には

  • ArnoldShadingNode
  • NetworkMaterial

の二つを使用します。NetworkMaterial がいわゆるマテリアル本体で、オブジェクトへのアサインをおこなう場合もこれを指定します。ArnoldShadingNode はマテリアル中のシェーダーノードで、具体的な計算内容やパラメータを扱います。

上記二つのノードを作成したら、最初にマテリアルのインターフェースを作成します。NetworkMaterial のパラメータ内で Add Terminal をクリックし、arnold グループから surface を選びます。こうすることで、ノードへの入力口(Port)が作成されます。下図で arnoldSurface と表示されているのが作成した Port です。

続いて ArnoldShadingNode 中で nodeType を car_paint にします。これで、このノードは car paint shader として機能するようになります。

マテリアルが定義できたので、メインキャラクタにアサインします。まずはメインキャラクタのツリーとマテリアルのツリーをマージし、MaterialAssign ノードでマテリアルをアサインします。ここでももうおなじみの CEL を使用します。Statement にアサインするジオメトリを指定し、materialAssign でアサインするマテリアルを指定します。図では見えないですが、ツリー中に /root/materials/NetworkMaterial があるので、それを中ボダンドラッグアンドドロップで指定できます。

続いてライトを作成します。こちらも二つ、

  • LightCreate
  • Material

の二つのノードを作成します。LightCreate は名前の通りライト(になるノード)を作成し、Material でライトの機能を作るイメージです。ライトの機能は別になっているため、LightCreate だけではレンダリング時にライトとして作用しません。

Material では Add Shader で arnold グループから light を選びます。更に、arnoldLightShader として skydome_light を選びます。

私は、Material ノードはシェーダと MaterialNetwork を一つにまとめたもので、よく使って簡単な構成なマテリアルを作る際に一々 MaterialNetwork などをいろいろ作らなくても良いように用意されたノードで、同様なことはこれが無くても実現できるものだと理解しています。

続いて、先ほどと同様ノードにマテリアルをアサインします。

ここまで来たらあと一息です。長かったです。。。。(-。-)y-゜゜゜
全てのノードをエイヤっ!!とマージします。

左がカメラ、真ん中がマテリアルをアサインしたメインキャラクタ、右側がライトです。これまでの流れが追いかけることができていればもう簡単ですね。

では待望のッ!!レンダリングをしてみましょうッ!!

できました!!やったね!!

CG, KATANA

KATANA+Arnold でカメラプロパティを調整する

昨日の記事で、まだご紹介していなかったノードが映りこんでしまっていたのでついでにご紹介します。
オブジェクトへのアトリビュートの付与と同様、カメラについても Arnold 特有のアトリビュートを追加して細かく調整することができます。

これには ArnoldCameraSettings ノードを使用します。下図を見ての通り、たくさんのプロパティを編集することができます。どのカメラに対して適用するかは、昨日も出てきた CEL で指定します。今回はパスを直接指定できる Path タイプのステートメントを使用してみます。

登録はとても簡単で、Scene Graph から目的のオブジェクトをマウス中ボタンドラッグアンドドロップで放り込むことでできます。

試しに exposure を変えてみます。左がデフォルト、右が +1 したものです。見ての通り美白肌が一段と強調されています。

CG, KATANA

KATANA+Arnold で subdivision surface

レンダリング時にメッシュをいい感じに分割してくれる機能、Subdivision Surface は皆さんお使いのことと思います。KATANA+Arnold 環境でも当然これを使用可能です。

KATANA では、オブジェクトのアトリビュートの操作もノードベースで行い、そのノードを通ったデータに対して指定したルールに沿って処理することができます。そして、あるメッシュを Subdivision Surface として扱うかどうかもこの方法でおこないます。

Alembic_In で読み込んだジオメトリに対して Subdivision Surface を適用するには ArnoldObjectSettings を用います。

処理を適用するルールは CEL(Collection Expression Language) というものを用います。これを使うことで、単純なパス指定やあるルールに沿って処理をおこなうというちょっと複雑なこともできます。

Custom タイプの CEL を 追加し、/root/world/geo/asset/GEO//*Shape を指定します。これは、/root/world/geo/asset/GEO 以下の階層で *Shpae にマッチするノード全てを選ぶという意味になります。今回のシーンでは、この方法で polymesh が抽出できます。

設定がおわったら Render ノードで Preview Render をするとスムースのかかったメッシュがレンダリングされます。スクリーンショットを見てもわかる通り元のジオメトリはかなり粗いままなので、レンダリング時に分割されていることがわかります。

CG, KATANA

KATANA のレンダリング設定

レンダリングをおこなう際に使用するレンダラやカメラ、解像度といった情報も KATANA シーン上で複数持つことができます。

これらもノードになっているので、前回レンダリングに使用した Merge ノードの先に Render Settings ノードと Render ノードを繋ぎます。

Render Settings ノードで resolution を HD にし、 adjustScreenWindow を “Adjust width to match resolution” にすると FullHD で望んだ感じの絵をレンダリングすることができます。


ちなみに CameraCreate ノード中で screenWindow を適切に指定すれば adjustScreenWindow を No adjustment にしても正しい絵を出力することはできるのですが、サンプルシーンを見ても adjustScreenWindow を使っているようです。

じゃあ screenWindow は何に使うかと言うと。。。何に使うんでしょうね?きちんとレンダリングする場合には Maya でいう aperture と同じようにきちんと設定する必要があるんじゃないかなと思うんですが。

CG, KATANA

KATANA+Arnold でレンダリング

KATANA には標準で 3Delight がついていて、何もしなくてもレンダリングが可能です。

が。

まあ今のところ現実的に採用可能なレンダラは Arnold でしょう。ということで、Arnold でレンダリングをしてみます。

Arnold プラグイン(KtoA) は標準で含まれていないのでサイトからダウンロードする必要があります(要 Autodesk アカウント)

ダウンロード待ちの間にドキュメントも読んで何をしなければいけないか確認をしておきます。インストールに関しては Installation のページですね。とは言ってもコロッサスさんが既に KATANA3.0+Arnold を動かすための記事を書かれているのでそれを読めば十分な気がしますががガガガ。

KtoA を使用するためには環境変数を幾つか設定する必要があるようです。私はこのような katana.sh ファイルを作成しました。

#!/bin/sh

export KATANA_ROOT=/opt/Katana3.0v6
export DEFAULT_RENDERER=arnold

export KTOA_ROOT=/opt/KtoA-2.2.1.0-kat3.0-linux
export “KATANTA_TAGLINE=With KtoA 2.2.1.0”

export KATANA_RESOURCES=$KTOA_ROOT

export PATH=$KATANA_ROOT/bin:$KTOA_ROOT/bin:$PATH
export PYTHONPATH=${KTOA_ROOT}/python:$PYTHONPATH

$KATANA_ROOT/bin/katanaBin

これを実行すると。。。。

[chiyama@docker ~]$ ./katana.sh
[INFO LicenseCheck]: Interactive License OK
[INFO python.Main]: Launching Katana 3.0v6 …
[INFO python.PyUtilModule.ResourceFiles]: Additional Katana resource paths from KATANA_RESOURCES:
[INFO python.PyUtilModule.ResourceFiles]: /opt/KtoA-2.2.1.0-kat3.0-linux
[INFO plugins.KtoA]: Arnold for Katana loaded, version 2.2.1.0 with Arnold 5.2.1.0 [7c7c9701] linux clang-5.0.0 oiio-1.7.17 osl-1.9.9 vdb-4.0.0 clm-1.0.3.513 rlm-12.4.2 2018/10/19 22:25:43
[INFO python.Main]: KATANA_RENDER_TILE_SIZE defaulting to 256×256
[INFO python.Main]: KATANA_IMAGE_MEMORY defaulting to 11188 MB
[INFO python.Main]: KATANA_IMAGE_DISK_MEMORY defaulting to 8052 MB
[INFO python.Main]: KATANA_SPEC_CACHE_ENABLED defaulting to 1
[INFO python.HydraViewer]: MSAA samples: 16
[INFO python.HydraViewer]: MSAA samples: 16

無事に KtoA が認識されています。

本当に Arnold が使えるのか試してみましょう。おなじみのカメラと .abc ファイルを読み込んで Merge でまとめて、Merge ノード上で右クリック→Preview Render を実行します。

すると、図のように Monitor 上に画像がレンダリングされました。ウォーターマークも入っているので間違いなく Arnold でレンダリングされています。

CG, KATANA

KATANA のカメラ操作

KATANA でカメラを作ってカメラから見たシーンの表示をしてみます。

KATANA 上ではカメラもプリミティブや Alembic キャッシュと同様、ノードから作ることができます。
使用するのは Camera Create ノードなので、Node Graph 上で Tab キーを押して作成します。
また、カメラから見ることのできるものを用意する必要があるので Alembic_In ノードを使って .abc ファイルを読み込みます。

そして、これらを一つのシーンとしてまとめるために Merge ノードに繋ぎます。

ただ、このままではカメラもオブジェクトも原点に存在するため、カメラを移動します。Node Graph 上で Merge ノードをダブルクリックで選んで Viewer 上でカメラオブジェクトを選び、w キーを押すとカメラを移動することができます。ちなみに回転は e 、スケールは r です。このあたりの操作は 3DCG ソフトに慣れていれば何となく直感的に使うことができます。

カメラを移動したときにカメラからどのように見えるのか確認するには Viewer 領域の下部にあるメニューから、表示するビューポートを選択します。

また、既存のビューポートは残しつつ新たにカメラ用のビューポートを作成したい場合、プルダウンメニューから Viewer(Hydra) を選んでタブを追加し、ビューポートを設定すればよいです。

そんなこんなでカメラからのビューを設定するとこのようになります。

CG, KATANA

KATANA で Merge ノードを使ってみる

今日は KATANA の機能のうちでも恐らく触ってみないと想像がつかない、でも触ってしまうとこれなしでは考えられないであろう機能、Merge についてです。

Merge を一言で言うと、3D シーンでコンポジットソフトの合成と同じことをおこなう機能です。。。と一言で済ませられるならいいんですが、これは実際に動いているものを見てみないとナンノコッチャ?という感想しか沸かないので試してみます。

まず、PrimitiveCreate を使って Sphere と Cube を作成します。それぞれ作成するパスは /root/world/geo/polysphere と /root/world/geo/cube です。同じ位置にあると結果がわかりづらいので translate に値を入れて位置をずらしておきます。

そして、この二つを Merge に入力します。するとどうなるでしょう。

/root/world/geo 直下に polysphere と cube が配置されました。こうして二つのツリーが一つに合成されたのです。こうすることで、たとえば別々に取った Alembic キャッシュを読み込んで一つのツリーにまとめることができるようになります。

更にすごいのは、Merge はノードベースで処理が行われているため、一つの KATANA シーンファイルの中で複数の異なるツリーを持つことができるのです。たとえば、今回作成した PrimitiveCreate, PrimitiveCreate1, Merge はそれぞれ別のツリーを持っていますし、Merge ノードをもう一つ増やして別の合成をするとそれも別のツリーとして存在します。これが一シーン中に一ツリーという既存の CG ソフトとの大きな違いです。

例えるなら、今まで 3DCG 制作と言えば一枚の紙にレイヤ情報も何もなく絵を描いていたところに、パーツ毎にレイヤを分けてレイヤを組み合わせながら作業を進めることができるようになった感じでしょうか。これはとても画期的です。

CG, KATANA

KATANA で .abc ファイルを読み込む

何をするにしてもアセットの読み込みができないと始まらない KATANA さん。ということで Alembic の読み込み。これくらいの基本機能だとさすが KATANA と言えど Google 先生にお伺いを立てればすぐに答えが見つかります。

Node Graph 内でおもむろに Tab キーを入力すると作成するノードの候補が表示されるので、”Alembic” と入力してくと Alembic_In が絞り込まれます。そこで Enter を押すとノードが作成されるのでダブルクリックもしくはノード右側の□をクリックしてパラメータを表示し、abcAsset に .abc ファイルへのパスを入力すれば OK。Scene Graph で root 右クリック→ Expand All でビューポートにもジオメトリが表示されます。

試しにアニメーション付きのファイルをロードしてみたところ、特に問題も無くサクッと読み込むことができました。きちんと読み込むためには fps なんかもちゃんとセットする必要があるようです。また、name でシーン中の階層名を指定することができます。今回は /root/world/geo/Zombie_on_Fire と指定しているため、読み込んだシーンのトップがそこになっています。

この名前を適切に指定しておくと、複数のシーンを読み込んで Merge でまとめた時に階層を適切に処理して一つにまとめてくれるようです。

CG, KATANA

KATANAのサンプルファイル

KATANA を触り始めるにあたってチュートリアルビデオを見ながらあれこれ試してみるのもいいんですが、とりあえずどんなことができるかサンプルを見てみたいッ!!って思うのが人情かと思います。

そんな場合、KATANA のインストールディレクトリの demos 以下にサンプルファイルがあります。KATANA のシーンファイルは katana_files 以下にあるので、こちらを読んでみます。

こちらのファイルはとても丁寧にできていて、どんなサンプルなのか、どんな処理がされているのかという詳細なコメント付きです。まずはこれを開いてみて、よくわからないなりにフムフムナルホド。。。。とわかった風になってみるのもいいんじゃないでしょうか。。。というか、私はそれをやっています。笑。