2010年05月

2010年05月31日

UVWマップのおさらい 3dsmax2011

compositeも無事に起動するようになったし、改めてMax2011の新機能を調べて行きたい。

最初はビューポートキャンバスから。

これは前回もちょっと触れたけど、2010版のものと比べると格段に使いやすくなった感じだ。例えばツールはPhotoShopライクなものが多数用意され、マルチレイヤで作業が出来たり、ペイント途中でオブジェクトが回転できるようになったり、編集可能ポリゴン以外のオブジェクトにもペイント出来るようになったりしている(逆に2010版は正直使い物にならない感じだった・・・)。

ところでこの機能は話の前提として、テクスチャマッピング(主にUVWマップ)の知識は必須だからね(とか言いながら自分も曖昧だけどw)。

一応簡単におさらいしておくと、MAXが扱うオブジェクトは最終的に多数の三角形で構成されるポリゴンメッシュになってレンダリングされる。このポリゴンメッシュの頂点それぞれから(U,V)2組の値を得る仕組みがあって、それを2次元の座標とすると、三角ポリゴンは全て2次元平面に貼り付ける事が出来る。この2次元空間に画像を貼り付ければ2次元の画像と3次元メッシュを対応させる事ができる。これがUVマップの原理だ。MAXの場合はポリゴンメッシュの法線方向にW座標もあるからUVWマップだ。

UVWマップはUVW値の生成方法がいろいろあって、各頂点に値を持たせる場合もあれば、その頂点のワールド座標値から生成させる場合もある。このあたりはマテリアルエディタの「マップ」ロールアウトでマップタイプとして張り込まれているビットマップをクリックすると出てくる「座標」ロールアウトを見ると、そのテクスチャをマッピングしているUVW値がどの方法によって生成されたものなのかを知る事ができる。

fig01

テクスチャと環境の切り替えスイッチは画像をオブジェクトに直接貼り付ける「テクスチャ」マップ方式なのか、それともオブジェクトの回りに仮想の球や円柱なんかを作ってそこに画像を貼り付けて、それをオブジェクト表面に向けて投影する「環境」マップ方式のかを切り替えるものだ。だから「環境」マップの方はUVWは間接的な使い方でオブジェクトに対しては投影マッピングと言える。

オブジェクトに画像をUVWを使って直接貼り付けるのは「テクスチャ」マップ方式の方だ。こっちの方を選んだ場合、マッピングのプルダウンメニューで選ぶのは、各頂点のUVW値がどのように生成取得されるかという事だ。

「明示的マップチャンネル」は各頂点が固定値を持っていて、それを読み出すだけのもの。「頂点カラーのチャンネル」も同様に各頂点に記録できる「頂点カラー」のRGB値をUVW値に見立てて読み出して使うもの。

残りの「オブジェクトXYZからの平面」と「ワールドXYZからの平面」は各頂点のローカル座標値、またはワールド座標値をUVW値として使おうって事だ。

当然ながら各頂点にUVW値を持たせる「明示的マップチャンネル」や「頂点カラーのチャンネル」がマッピングする時には自由度が高いわけで、「頂点カラーのチャンネル」をUVWとして使うのはあくまで流用なわけだから通常は「明示的マップチャンネル」を使うわけだ。

で、この「明示的マップチャンネル」として各頂点に記録されるUVW値はどのように設定するかと言うと、これまた自動と手動があって、やり方が何通りも存在する。

fig02一番簡単なのはオブジェクトを生成する時に同時に生成しちゃう方法で、作成パネルの各オブジェクト作成時のパラメータロールアウトなんかに「マッピング座標を生成」という項目があって、これをONにすると、マッピングチャンネル1にUVWマップが生成される。

例えば円柱を作成する時にこれをONにすると、このようなマップが生成される。

fig03

これは円柱に対してこのような形で割り当てられていて、上面と底面の円の部分はUVマップの上下のところで一直線に潰れて面積を持っていない。

fig04

これを使ってチェックのマテリアルを貼り付けるとこのように上面と底面の部分はエッジ部分のマテリアルが引き伸ばされるだけだ。

fig05

当然このままの状態では上面も底面も自由に絵を貼る事はできない。

このようにオブジェクトを生成する時にそれなりのUVWマップはチャンネル1に生成されるけど、必ずしもそれで全部OKというわけにはいかない。

そこで他のUVW生成方法がいろいろあって、モディファイヤパネルのモディファイヤリストにある「UVWマッピング」「UVWアンラップ」などのモディファイヤをオブジェクトに追加すると使えるようになる。

fig06例えば左の画像はUVWマッピングモディファイヤのパラメータロールアウトだ。このモディファイヤには、オブジェクトの頂点に対して、7通りのUVWマップの生成方法が用意されているのがわかる。

例えばマッピングタイプを球状にしてチェックマテリアルを貼り付けると、このように上下の端面もつぶれずにマッピングされるようになる。これは各頂点を仮想の球に投影した時の球体上のUV値を頂点のUV値としたもので、画像をマッピングすると、その仮想の球体に貼った画像がオブジェクトに投影されるように貼り付けられる。

fig07

実際のUVマップはこのような姿になる。

fig08

このマッピングにもいいところはあるけど、側面の歪みはちょっと頂けない。このように自動的に生成させる場合、どうしても不満なところが出てきてしまう。

fig09そこで最後は手作業で修正となるわけで、その操作ができるのがUVWアンラップモディファイヤなわけだ。パラメータロールアウトの「編集」ボタンを押すとUVマップエディタが起動して、各頂点ごとに自由に編集が出来る。

fig10もちろんこのモディファイヤにも、UVWマップを自動的に生成するための仕組みも付いている。「ペルト」マップは立体を切り開いて伸ばしていくようなイメージで展開図を作ったりできる。
これらはUVWマップエディタと共に使えるので、使いようによって、地道に頂点をチクチクいじって並べるよりは効率がいい場合がある。

例えば先に出てきた円柱だけど、上下の端面だけ垂直方向の投影マップになってくれたら側面の方は満足なわけで、そんな時は円柱をマップ付きで生成した後でUVWアンラップモディファイヤを追加し、パラメータロールアウトの編集を押す。するとUVWを編集パネルが出る。ここで気をつけなくちゃいけないのは、パラメータロールアウトにある「マップチャンネル」の番号。実はこれを変えると現在のマップが変えた番号のマップチャンネルにコピーされてしまう。だから例えばマップチャンネル2の内容を編集しようと思ってこれを1から2に変えたら、1のマップが2にコピーされて2にあったマップが消えてしまう。でも焦る必要は無い。そこで「UVWをリセット」のボタンを押すと、元からあったマップチャンネル2の内容が復元する。ただ、もしその前にマップチャンネル1を編集していたとしたら、その内容も失われてしまう。「UVWをリセット」はあくまでUVWアンラップが加えた編集を全て無効にするだけだからだ。UVWアンラップモディファイヤ1つで編集できるUVWマップチャンネルは1つだけ、2つ編集したいなら2つモディファイヤを追加する必要があるよ。

話がちょっと逸れたけど、円柱のUVWマップが出たら選択モードをポリゴンにする(下の画像の矢印のところのボタン)。

fig11

次にビューポートの方で円柱の上下のポリゴンをCTRLを押しながらクリックして選択する。

fig12

そして、UVWアンラップの「マップパラメータ」ロールアウトの「平面」ボタンをクリックする。

fig13

これで選択した面だけ平面投影されてマップが再生成される。出来たら「平面」のボタンを押して機能を解除し、

fig14

UVWを編集パネルでマップを整理して、このように並べる。側面のUVマップは左右が繋がっているので左右の動きやスケールは避けた方がいいよ。

fig15

そしてこれが新しく作成したUVWマップでマッピングしたもの。端面まで綺麗にマッピングできている。

fig16

 新機能「ビューポートキャンバス」を活かすには、それを活かすUVWマップが必要になるよ。

それではまた次回。

maxまとめページ



take_z_ultima at 11:48|この記事のURLComments(0)TrackBack(0)3ds Max | CG

2010年05月30日

米の栽培キットを買ってみた その4

日照不足と言うか、外に出しとけば良かったなぁ・・・。見ての通り、ひょろひょろになってしまった。最初からこれじゃあ収穫は望めそうにないなぁ。

fig01

最初のうちはグングン伸びて喜んでたけど、考えてみたら光量が足りなかったから成長抑制ホルモンが出なかっただかなんだよね。田植えの苗ってもっと青々して葉も幅がもっと広いよねぇ。

ネット検索してたらこんなJAのサイトを見つけた。稲作りマニュアルがPDFでアップされていたので入手。

バケツ稲ネットワーク

果たして挽回はあるのか・・・。



take_z_ultima at 17:43|この記事のURLComments(0)TrackBack(0)園芸 | Goods

2010年05月28日

バッチレンダリング用シーケンスの書き出し その1 modo 401 SP4

アナグリフで3Dを効果的に見せるにはどういうセッティングがいいかを確かめようと思って、サンプル画像をレンダリングし始めたんだけど、いろんなパターンでレンダリングするうちに、「これをバッチレンダリングしたら楽かな?」とか思い出したわけだ。そこでmodoのヘッドレスモードでレンダリングする方法を調べてプログラムを書き始めたんだけど、リストで選択出来るようにしたユーザー値の戻り値がインデックス番号になったり文字列になったりする謎の現象が起きたりいろいろあって、まだ完全なところまでは行けなかった。

まあそれでもそれなりの形になったので出来たところまでアップしておくね。

プログラムはパネルを記述した「renderque.CFG」とスクリプトを記述した「createQueBatch.py」、ついでにパネルを表示するためのマクロとして「renderque.LXM」の3つのファイルから出来ている。CFGの方はユーザーフォルダのConfigsの方へpyとLXMの方はScriptsの方へ入れてmodoを起動すれば使えるようになる。フォームを出すには「renderque.LXM」を実行すればいい。

fig01

で、出来る事は、ヘッドレスモード版のmodoであるmodo_clに渡すバッチファイルをテキストとして書き出すことだ。

その書き出し先が「バッチファイル」で、テキストファイルとして書き出される。例えば上のパネルの設定で「新規書き出し」ボタンを押すと、「command.txt」には、以下のようなコードが出力される。

pref.value render.threads auto
scene.open "G:\test.lxo"
select.itemType polyRender
render.res 0 720
render.res 1 480
item.channel pAspect 1.0
select.time 0.0333333333333 0 0
render "G:\render\img" $FLEX

このテキストファイルをWindowsだったらコマンドプロンプトから

modo_cl.exe < commands.txt

と入力すればレンダリングが開始される。マックの場合はこうらしい。

modo.app/Contents/MacOS/modo -console < commands.txt

もちろんパスが通ってなかったらフルパスでファイルを指定する必要があるよ。

パネルにある「取得」のボタンは現在編集中のシーンから値を取得するためのものだ。開いていないファイルからは取得しないので間違えないようにね。

それから静止画の場合は開始フレームの位置のフレームをレンダリングするよ。

書き出す場合は「新規」と「追加」があって、追加の場合は前に書き出したものの後からテキストが追加される。これで複数のファイルを指定して行けば、いっぺんにレンダリングさせることが出来る。

バッチレンダリングのボタンは

modo_cl.exe < バッチファイル

を実行するもので、Windows版はいいけどマックではプログラムを書き換えないと動かないと思う。「createQueBatch.py」の203行目の部分がそれだ。

os.system(r'modo_cl.exe < "%s"' % ofile)

まだデフォルトのファイル形式でレンダリングする「*」とかに対応してないし(メニューにはあるけど選ばないでね)、オリジナルファイルの設定も使えないよ(手作業でバッチファイルから設定している部分を削除すれば出来るけどね)。

それでも、作ったバッチファイルにちょっとコードを加えたりして、パラメータをちょっとずつ変えて同じシーンを何度もレンダリングさせたりなんてことをする時は重宝すると思うよ。

時間がなくなったので詳しい話しはまた次回かな。

それではまた来週。

modoカテゴリー別ページ



take_z_ultima at 12:40|この記事のURLComments(2)TrackBack(0)modo | CG

2010年05月27日

Compositeが起動しない 3dsmax 2011 composite

前回も書いた通り、3dsmax2011に付いて来たcompositeがアクティベーションしたマシンで起動途中にフリーズする。他のマシンに体験版でインストールしたら起動したのでどうもマシン固有の問題らしいと言う事だけはわかった。

メインに使ってるマシンは日頃からいろんな実験をしているだけに、何が原因でおかしくなってもおかしくない状態なので、一応過去にやったいろんな思い当たる節をひとつひとつチェックしてみたんだけど、何の効果も無かった。

そこで動いたマシンと動かなかったマシンにはいったい何の違いがあるんだろうと考えた結果、メモリーの搭載量じゃないかと思ったわけだ。

ちなみに動いた方のメモリー量は2GBで動かなかった方は4GB。

そこでタスクマネージャで起動時のメモリー消費量を計測してみたら、メモリーが少ない方は起動時に1.5GBのメモリがシステム全体で使われている状態になっていた。

fig01

そしてこっちが動かなかった方。こっちは2.3GBのメモリが消費されている。

fig02

タスクマネージャのプロセスで見るとcomposite自体は375,700KBのメモリを消費していてこれはどちらも一緒だ。となれば、考えられる事はcompositeが起動する時にマシンのメモリー搭載量から取得出来そうなメモリ量を計算して、作業用として確保する際、メモリーが4GBもあるからって2GBも確保して先にキャッシュに割り当て、後からDLLをロードしてみたら1プロセス当たり2GBの壁でメモリが足りなくなって打ち死にしたって感じかな?

試しに動かなかった方のマシンのメモリを2GB外してcompositeを起動してみたら今度はちゃんと起動したw。

なにこの孔明の罠・・・

さて、原因もわかったのでこういうのはどっかに設定くらいあるだろうと思ってメモリーを4GBに戻し、設定を眺めたりしたんだけど、いまいち判然としない。ここでちょっと気付いたのはスタートメニューに追加されたcompositeの所になぜかコマンドが入ってる。これはCUIレベルで何かしろって事だよね?

で、立ち上げてみたものの何をしたら・・・。で、思いついたのは起動時のオプションスイッチ。これはCUIの方が気軽に出来るよね。どうやらcompositeもオプションスイッチを使えそうで、他のツール類が

コマンド −オプション

って指定の方法だったので、こんな事をやってみた。

composite -?

すぐにコマンドプロンプトが戻って来て落胆したけど一瞬置いてこんなダイアログが出た。

fig03

これは・・・「−?なんてしらねーよ。−hでやってみな」ってことか。−?が−hだってわかっていてこの態度にはちょっとカチンと来たが、仕分けをする権力も無いのですごすごと従った。

composite -h

すると次のウィンドウが出現(スクロールするようになっていたのでつなげて合成してあるよ)した。まさにこれが欲しかった起動スイッチの情報だ。

fig02

どうやら-memory <param> のスイッチで Image RAM cache のサイズを指定できるみたいだ。やり方はsize=2048みたいに直接メガバイト単位の数値で割り当てるか、size=50%みたいにメモリーの何%を割り当てるかみたいだ。

そこでさっそく、

composite -memory size=1024

とやってみたらcompositeがあっさり起動した。

これをコンフィグレーションファイルに反映させれば、問題なく起動するようになるんだろうけど、とりあえずの応急措置として、スタートメニューのcompositeを右クリックしてプロパティを出し、下のようにオプションスイッチを追加しておいた。

fig04

これでスタートメニューからでもcompositeが起動出来る。

設定値はいい加減だけど、支障が出るまで暫くこれで使ってみようかな。

それではまた次回。

maxまとめページ



take_z_ultima at 11:30|この記事のURLComments(2)TrackBack(0)3ds Max | CG

2010年05月26日

レンダー出力の出力ファイル名称について modo 401 SP4

レンダリングした画像ってどうやって保存してる?

自分はF9を押してレンダリングして、出てきたレンダーフレームウィンドウの「画像の保存」ボタンを押して、ファイルリクエスタが出たらファイル名とファイルタイプを指定して保存していた。

fig01

アニメーションをレンダリングするなら、レンダーメニューから「アニメーションをレンダー」を選べば、フレーム範囲と保存方法を選ぶパネルが出てきて、OKを押せば、その後にファイルリクエスタが出てきて保存先とファイル形式を指定できる。

fig02

今までこれらの方法でレンダリングした画像を保存してきて何ら支障が無かったし、これからもこれらの方法があれば必要充分なわけだ。

で、いまさらなんだけど、シェーダーツリーの中にあるRenderOutputアイテムのプロパティにはそれぞれ「出力ファイル名称」って欄があって、出力ファイルが設定出来るようになっているんだけど、これってどうやれば使えるんだろう?

fig03

マニュアルには、

Output Filename(出力ファイル名称)
レンダリング画像を保存するためのファイル名と保存先を設定します。Browse(参照)ボタンをクリックすると、ファイル保存のためのダイアログボックスが開きます。設定後は、Render Animation(アニメーションをレンダー)を実行する(またはショートカットの F10 キーを押す)だけで、自動的に保存が行われるようになります。Render(レンダー)コマンド(F9)で、最終的なレンダリング画像を表示させることができます。

と書いてある。この文章を自分なりに解釈すると、この欄に画像の出力先のファイルを設定して「アニメーションをレンダー」を実行するか、F10キーを押すと、自動的に画像が設定された先に保存されるようになるって書いてあるように思える。

で、試しにF10キーを押すと、これは@ViewRender.plスクリプトが起動して、「被写界深度〜」の警告が出るけど、現在のビューポートの視線にカメラビューをあわせてレンダリングがされて、レンダーフレームウィンドウに表示される。でも、画像は出力されない。

今度は「アニメーションをレンダー」をやってみたら以下のダイアログが出て、

fig04

「はい」を選んだら今度は「出力ファイル名称」の設定に沿って画像が出力された。こうやって使うものなのか。マニュアルの記述とはちょっと印象が違う感じだけど、「アニメーションをレンダー」の方はなんとかこの設定が使えるみたいだ。

この成功した時にどんな形でコマンドが発行されていたのか履歴を見てみると、

render.animation * *

となっていた。どうやらコマンドの後ろに付いた「*」がミソらしい。ちなみに「*」は1つでも同様の動作をしたんだけど違いは何だろう?「*」を減らして実行しても、modoがダイアログを出してパラメータを尋ねてくることは無かった。

まあとりあえずアニメーションの方は出来たので今度はF10を押すと実行される@ViewRender.plに対して「*」を引数で与えてみたけど結果は変わらなかった。

まあスクリプトの引数は無理だったけど、コマンドならどうだろうって事で今度はrenderコマンドに「*」を渡して、

render *

としてみたら今度は画像が出力された。どうやらRenderOutputアイテムの設定値を使うには「*」を使う必要があるらしい。

じゃあ逆に「出力ファイル名称」を設定せずに「*」を使ったらどうなるかと思ってやってみたら、レンダリングはされるけど、ファイルに出力されることは無かった。

ってことはrenderに対しては「*」は付けておいても害は無いのかな?

そこで入力編集とフォーム編集でそれぞれrenderコマンドを修正して、「*」を付けて見た。

fig05


fig06

これでRenderOutputに「ファイル名称」が設定されていれば、F9を押すだけでファイルに書き出されるし、設定が無ければレンダーフレームウィンドウに出力されるだけになった。何か支障があるのか、それともこっちが正解か、どうなんだろう。

どうもマニュアルの記述が怪しげなので原文にあたってみたらこう書いてあった。

Render Output--
Output Filename: This function allows the user
to specify a filename and location for the saving of
rendered images. Click the ‘Browse’ button to open
the ‘File Save’ dialogue box. Images will be saved the
next time the user invokes the ‘Render Animation’
command. Note that Rendering using the ‘Render’
command or ‘F9’ displays final renders in the render
display window (They aren’t saved automatically).

これ読むとレンダーコマンドやF9では自動的に保存されないって書いてある・・・orz 日本語訳の「表示させることができます」はちょっと意訳が過ぎるんじゃないかな。F10ボタンの記述もどこにも無いし。

それではまた次回。

modoカテゴリー別ページ



take_z_ultima at 11:30|この記事のURLComments(0)TrackBack(0)modo | CG
Archives