Category Archives: Computer Graphics

CinemaDNG

0
Filed under Computer Graphics

CinemaDNGは,デジカメで使われるDNGフォーマットの動画版です.

アドビ、高画質RAWビデオ規格「CinemaDNG」のベータ版を公開 – builder by ZDNet Japan

これからデジタルにシフトして行くであろう映画産業においても,こういった規格の統一はなされた方がいいとは思いますが,Adobeって実はハイエンドだと出番少ないんですよね.最後の編集をPremiereでやった,ってのはあまり聞かないですし.

静止画向けのDNG形式も一般に普及しているとは言い難いし,これもどうかなあ.支持している企業のリストにSony,Panasonic,RED,Thomson等がありませんしねえ.ただ,今のデジカメ業界のように,新しい機種が出る度に個別対応しなければならないのは馬鹿げてると思うので,早いうちに統一されて欲しい.

AvidとかAutodeskも参加してくれば,もう少し動きが大きくなりそうです.

Maya Composite

5
Filed under Computer Graphics

AfterEffectsの終焉か?

…まあそんな事はないと思いますけど.
Maya 2010が発表になり,以前”Toxik”として売られていたノードベースのcompositeツールが,Mayaにバンドルされることになったそうです.ついでにcamera trackerも.

fxguide quick takes » Toxik RIP (sort of) + New Maya 2010
Autodesk – Autodesk Maya 2010 – Features

個人的に,こういった2Dワークは日本で最も遅れている部分だと思うのですが,イチからパイプラインを構築するのは相当大変で,経験者も開発者も必要になります.そしてそういう人材は日本にはあまりいない.でも,ある程度ツールにインテグレートされていれば随分楽になるでしょう.

まだ最初の段階なので粗も多いでしょうけど,だんだんとmentalrayとの連携も強化されていくんじゃないかと思います.”all in one”としての強みを生かしきって,2Dと3Dを行き来できるような,上手いpackagingを期待したいですね.

更に,Maya 2010からはUnlimitedとCompleteの区別がなくなったみたい.つまり,アップグレードすればもれなく皆さんにTokix,という事に.これはスバラシイ!日本のプロダクションなんかでは重宝されるんじゃないかな.

是非,活用してもらいたいと思います.

RSL 2.0

0
Filed under Computer Graphics

久しぶりに技術系の話題を書きます.とは言え,かなり現場寄りな話ですが.

PixarのPhotorealistic RenderMan(PRMan)は,13.5からRenderMan Shading Language(RSL)が大改良され,後方互換性はあるものの,今までとはまるで違うshading systemが構築できるようになりました.以下ではこれをRSL 2.0と呼ぶ事にします.

ネットにはまだあまり情報がないようですが,以下で概要を知る事ができます.

RSL – Introduction to Shader Objects

最も大きな変更点は,シェーダをクラスとして記述できるようになった事です.クラスのメソッドとしてsurface()やdisplacement()などを実装してやると,マテリアルとして機能するようになります.pre-definedなメソッドは他にもいくつかあり,それぞれ適切なタイミングでレンダラから呼ばれます.つまり,カスタムシェーダを定義するには,これらのpre-definedなメソッドをoverrideすれば良い,と言うことになりますね.

また,シェーダクラスはメンバ変数を持つ事もできます.このメンバ変数は同じクラス内のメソッドからは等しくアクセスする事ができるので,シェーダ間での値の受け渡しが非常に楽になります.分かりやすい例としては,surfaceシェーダとdisplacementシェーダで同じノイズの値を使いたい場合,今まではmessage passingやoutput変数でやりとりしていましたが,これを単純なメンバ変数へのアクセスで行えます.

クラスですから,もちろん独自のメソッドも定義できます.ただし,これらのメソッドはレンダラから自動的には呼ばれず,明示的に呼んでやる必要があります.これだと今までの関数とあまり変わりなさそうに思えますが,これは次に紹介する新機能で生きてきます.

クラスとして記述されたシェーダは,.rib内で”Shader”という新しいstatementでインスタンスされます.C++で言う所のオブジェクトですね.シェーダオブジェクトです.RSL 2.0では,新しく”shader”という型と,shader型の値を返すgetshader()関数が導入されました.これは.rib内でインスタンスされた任意のシェーダオブジェクトに,別のシェーダ内からアクセスするための仕組みで,更に”->”演算子を使う事でそのシェーダオブジェクトのメソッドを呼ぶ事ができます.アクセス権が許せば,メンバ変数へのアクセスも可能です.

RSLをガッツリ書いた事のある人ならもう気づいたでしょう.これらの仕組みを使うと,簡易的なshading networkを組むことができるのです!Yay!

今までmonolithicなシェーダしか書くことができず,ルーチンの関数化はできても,テクスチャ一枚,ノイズ一つ足すのにコードから変更しなければならなかったRSL 1.0に比べると,これは革命です.dynamic arrayと合わせれば,任意の数のマテリアルをレイヤーすることもできます.

他の大きな利点としては,これらの仕組みによってarealightを楽に記述できるようになりました.PRManはarealightをサポートしておらず,illuminance()ループ内では一つの光源につき一つの(L,Cl)しか返ってこないので,RSL 1.0では全てのlight sampleをmessage passingで無理矢理渡し,自前のlight loopを書く必要があったのですが,RSL 2.0では全てを素直に実装する事ができます.

PixarのプレスリリースでILMのChristophe Heryがこんな事言ってますが,もうまさにその通り!です.

But for us, the most important feature is the modernization of the shading language, allowing us to produce cleaner, yet more efficient shader code, in particular, area light shaders and the layering of complex surface materials.

正直,やっと…という感じですが,上で「簡易的な」と書いたように,RSL 2.0で複雑なshading networkを組むことはできません.一番の理由は,color型やvector型のoutputを持つシェーダを書いたり,それらの型のパラメータに直接つなげる事はできないからです.ただ,RSL 2.0のシェーダはmental rayやMayaのようなinput/outputを使ったshading networkとは少し違ったデザインにすべきかも知れません.この辺についてはまだ自分も悩んでいる所です.

問題は他にもあります.現場にはRSL 1.0で書かれたシェーダが山のようにあり,それがたくさんのプロジェクトで常用されています.RSL 2.0には多くの利点がありますが,あまりにも違いが大きいので,移行するのは簡単ではなさそうです.もちろんRSL 1.0も引き続きサポートされていますから,直ぐに移行する必要はありませんが,シェーダを書いて管理する側からすると,直ぐにでも移行したい気分です.

それに,今のところ,RSL 2.0をサポートするGUI付きのshading network editorはありません.MTORのSlimを含め,RSL 2.0に対応した製品はまだないと思いますから,artistに使ってもらうには新しい製品を待つか,自前で書く必要があります.まあ,RSL 1.0の物に比べれば楽に作れそうですけど.

ここまで来ると,.sloを実行するエンジン部分だけを外部ライブラリとして用意して欲しくなりますね.それがあればRSL 2.0と合わせて色々な事がレンダリングの外でできるようになって,最高にイイ感じなんですけどねー.

今のところ,RSL 2.0はPRManの独自拡張です.RenderMan Interfaceとして規定されているわけではないので,他のRenderMan-compliantなレンダラに組み込まれるかどうかは怪しいですし,何かしらのpatentが絡んでいる可能性もあります.調べてませんが.

PRManのドキュメントには他にも詳しい事が書いてありますので,読める環境にある方は是非一読してみてください.

SIGGRAPH 2008

0
Filed under Computer Graphics

遅くなりましたが,SIGGRAPH 2008の感想など書いてみます.

今年は仕事の都合上二日しか参加できず,見たかった物もほとんど見られなかったのが残念.人にもあまり会えなかったし.以下,少ない中でも印象に残った物を.

[ Technical Papers ]
“Real-Time Rendering”のセクションで,オフラインレンダリングにも応用できそうなアイディアがいくつかありました.”Hair and Realistic Rendering”はbeeさんの発表もあって是非見たかったのですが,スケジュールが合わず.見た人の話では,かなり良かったそうです.これとか凄かったらしい.

[ Talk ]
“To Trace or Not To Trace”が面白かったです.これも色々なヒントが発見できました.

[ Classes ]
“A Gentle Introduction to Bilateral Filtering and its Applications”が興味深い内容でした.Bilateral filterは,単純応用としてはノイズ除去などに使われるようですが,その他の応用例がバラエティに富んでいて面白かったです.あと,これも自分は見損ねたのですが,”Advanced Global Illumination Using Photon Mapping”の後半で発表された,volume renderingでのlightingを高速化する手法が凄かったそうです(元ネタはこれみたいですね).

こんなもんですかねえ.やっぱりちょっと物足りなかったな.

今年は色々と再編されて何だか逆に分かり辛くなったような気がするし,Electric Theaterも分割されてしまっていたし,なんだかなあという感じでした.

来年はNew Orleansですが,自分はあまり好きな場所じゃないんですよねえ…

IBL再び – 2

0
Filed under Computer Graphics

必要な物を一通り作り終わって,基本的な部分は動きました.

予想よりも速度低下が防げて,light shader一つで完結できるような形が作れたのでそれは良かったのですが,PRManのシェーダを書いている時に大きな問題が判明.

PRManはシェーダレベルでarea lightをサポートしていない!

surface shaderから呼ばれたlight shaderは光源毎に一度しか呼ばれず,light shader内でいくら複数サンプルを取っても,各サンプル毎にはsurface shaderに返らないのです.これは即ち,surface shader内でサンプル毎のlight vectorとlight color(RSLでは”L”と”Cl”)が取得できない訳で,BRDFが正しく評価できません.

いくつか回避策があるにはあるんですが,shading systemとしてはどれも気持ちが悪いし,既にあるsurface shader全てを修正しなければなりません.いずれにせよ,パイプライン的に深い部分での変更になるので,少し話し合いが必要そうです.

うーん,やっぱりPRManはhackに弱い.できない事が多いです.その分敷居を下げているのは分かりますが,もう少しlow levelへのフックも用意してくれると嬉しいんですけどね.

この辺の仕組みはmental rayに分があります.