Skip to main content

シェーダ(shader)とは

メンタルレイではシェーダが重要な役割を果たすのでここで述べておきます.

シェーダ(shader) とは,光が物体に当たった時に,どのように物体の明るさを計算するかというプログラムコードです.(shade には影という意味があります.)しかし,これは最初にシェーダが考えられた時の元々の意味であって,現在はもっと拡張された意味を持っています.コンピュータグラフィクスでは物体をポリゴンなどの多角形で表現し,各頂点の明るさを計算し,そして多角形の内部を様々な方法で補間するということがかつて行なわれていました.時代と共に光と物体の相互作用の計算方法は発展し,複雑になっていきました.そしてシェーダの発展方向は主に二つの方向に進みました.一つはより速度,インタラクティブ性に重点を置いたハードウェアによるシェーディング,もう一つはよりリアリズムに重点を置いたソフトウェアによるシェーディングです.

グラフィックスに特化したハードウェアは現在 GPU (Graphics Processing Unit) と呼ばれています.初期の GPU には固定されたシェーダ機能が実装されました.できるだけ高速に大量の Pixel を生成するには機能を固定し,深いパイプラインで高いスループットを得るという手法が実際的だったためです.しかし計算能力の発展によってより高品質をめざすようになり,シェーダはプログラム可能になりました.シェーダプログラミングは最初アセンブラ言語に近いものでしたが,やがて Cg などの Shading 言語が実装されるようになりました.それはますます発展してCUDA, OpenCL (2009 年現在)のような一般的な言語となり,シェーダを書くだけのものではなくなりました.

一方でメンタルレイのシェーダの出発点は高品質な画像の生成を第一の目的として発展してきました.高品質を達成するために光が物体に当った時にどのような現象が起きるかをシミュレートするのがシェーダの主な役割でした.特にハードウェアのシェーダは各ピクセルで独立した計算を行う,つまり 局所的(local) 計算は得意ですが,実際の現象は 大域的 (global)です.遠くの物体が他の物体に影を落とす.という日常で見かけることは既に global な現象で,一つの物体がシーン全体に影響する可能性があります.このような 大域照明(globa lillumination) をある程度真面目に計算するのがメンタルレイです.メンタルレイでもシェーダは局所的な計算を行うものが多いですが,これらの現象をレイトーレーシング法によって大域的な現象として計算します.

現在この二つの方法は融合する方向に発展しています.今は GPU でレイトレーシング(ray tracing) を行う時代になりつつあり,メンタルイメージでは MetaSLというソフトウェアシェーダを GPU の言語 (Cg など)やメンタルレイシェーダにコンパイルする製品(mental mill (http://www.mentalimages.com/products/mental-mill.html))を出していま
す.

現時点では GPU のシェーダはゲーム業界の要求からまだ計算速度を重要視しており,質という点ではソフトウェアのシェーダはまだ一日の長があると思います.

(また,メンタルイメージは 2007年の 11 月に NVidia という GPU の大手の会社に買収されています.http://www.nvidia.com/object/mental_images.html)

Comments

Popular posts from this blog

メンタルレイの構成

図 1 にメンタルレイの通常の構成を示します. 図 1 メンタルレイの構成 F1: Application scene file: アプリケーション固有のファイルで .max (3dsmax), .ma または .mb (Maya),.scn (XSI) などです. F2: .mi file: mental ray の scene description ファイルフォーマットです.多くの mental ray をサポートしている DCC ソフトウェアは .mi ファイルをエクスポート(export)する機能があります.(A2) 1. Application: DCC (Digital contents creation)ソフトウェア (Maya, 3DSMax, XSI, ...) や CAD プログラムです. 2. mental ray core: メンタルレイのコアプログラムです.メンタルレイにはライブラリ版とstand alone 版があります.ライブラリバージョンのメンタルレイは,アプリケーションからトランスレータ(translator) というモジュールを通じて命令やデータを受けとり,レンダリングを実行します.トランスレータというのは DCC アプリケーションの内部データを mental ray のデータに翻訳(translation)するプログラムです.スタンドアロンバージョンのメンタルレイは.mi ファイルを読み込み,レンダリングを実行します.メンタルレイはコア自体だけでは動作せず,シェーダが常に必要なことに注意して下さい.シェーダがプラグインであることを考えれば,理解しやすいと思います. 3. mental ray base shader: メンタルレイがデフォルトでサポートしているシェーダです.基本的な光源(lihgt),基本的なマテリアル(material),たとえば 最も簡単なシェーダとしては Lambert シェーダなどがあります. 4. Application shaders: 各 DCC ソフトウェアや,CAD ソフトが独自に持っているシェーダです.3DSMax は 3dsmaxshaders, Maya は mayabase などというシェーダパッケージを持っています. 5. Custom shaders: ユーザ独自のシェーダや,メン...

iray を standalone mental ray で使いたい(5)

これまでは standalone mental ray のための export の話でしたが,ようやくshader conversion の話になります. iray は mia_material のみのサポートなので,3dsmax シーン中のshader をできるだけ自動で mia_material (Arch&Design) に変換します.おそらく他の shader もサポートしてくるでしょうが,CUDA で動くことを考えれば,divergence の問題のために,いろんな shaderを使うだけでレンダラの性能が落ちることは自然です.それに新しいレンダラですから, mental images が native にサポートしているshader にした方が問題は少ないことも予想できます.ですから変換した方が良いと個人的に思いました. 3dsmax の shader を mia_material にコンバートする max script のコードをここ( https://code.google.com/p/shitohichi-tools/source/browse/#hg/mentalray/max2mia_material )に置きました.これは Zap の blog の VRay shader to mia_material converter ( http://mentalraytips.blogspot.com/ ) を元に作ったものです.Zap さんありがとうございます.2つのファイルを download し,max script として open して run とするとシーン中の shader を convert します.yh_max2mia_material.ms が main のファイルでこちらを評価します.(yh_material_object_map.ms は subroutine 集です.) もちろん,自動で全部コンバートすることは不可能です.とりえあえずレンダリングできるというレベルです.それでも一つのシーンには多数のshader があるので,以前作成したシーンを変換するスタート地点として使えると思います. 来週から SIGGRAPH です.(私は SIGGRAPH には行ったことがありません) 何か ira...

iray blog unofficial translation: はじめまして, iray ユーザの皆さん!

以下は iray dev blog の個人的な翻訳です. この翻訳は iray 開発者あるいはNVIDIA とはまったく関係がありません. 原文:  http://blog.irayrender.com/post/12196196279/welcome はじめまして, iray ユーザの皆さん! 私達はここで iray に関係するマテリアルの知識,新たな機能のデモ,そしてワークフローの例,などについて直接あなたがたに語りかける機会を得ることができ,とても嬉しく思っています.このブログではirayを使う上で役に立ちそうなヒントやトリック,そしてユーザの皆さんからの興味深い利用例をポストできればと思っています.そして,たぶん我々が iray を設計した際に考えたことからビジョンや哲学めいたものまでご覧に入れられるかもしれません.どうかご期待下さい. iray 開発チーム