!!!映像基礎演習 第9回 CG(Computer Graphics)について [2009年度] [コンピュータグラフィックス:Wikipedia|http://ja.wikipedia.org/w/index.php?title=%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%E3%82%B0%E3%83%A9%E3%83%95%E3%82%A3%E3%83%83%E3%82%AF%E3%82%B9&oldid=12192389] !!コンピュータグラフィックス CGは主に'''3D CG(三次元コンピュータグラフィックス)'''と'''2D CG(二次元コンピュータグラフィックス)'''に大別される。 CGはノイズのない鮮やかな色彩、修正や編集の容易さなどを提供する。3Dにおいてはコンピュータシミュレーションによるリアルな映像、滑らかなアニメーション、実際に撮影セットを作らなくてもよいことによる非現実的な映像が可能であることなどを特徴とする。 {{image toystory.jpg,,,,float:left}}映画「'''トイ・ストーリー'''」はフル3DCGで作成された初の劇場用長編と銘打って公開されたが、現在では映画に限らずテレビコマーシャル映像やイラストレーション、漫画などあらゆる画像・映像製作に使われる一般的な方法として定着した。実写による映像もコンピュータによって調整が行われることも珍しくない。 3Dコンピュータグラフィックスはフォトリアリスティックな表現や視点を変更が可能なこと、モデルを一度組めばアニメーションさせやすいことなどが一般的な長所である。3次元グラフィックスの製作プロセスは、形状データを作成する'''モデリング'''と形状データから最終的な画像を出力する'''レンダリング'''に大別され、レンダリング技術には'''スキャンライン'''、'''レイ・トレーシング'''、'''ラジオシティ'''などが主なものである。 またCGは'''フォトリアリスティック'''と'''ノンフォトリアリスティック'''に分かれる。前者は限りなく精密で写真と見紛うようなリアルなものを追求し、後者は逆に鉛筆や絵の具で描いたような画像を作る。ノンフォトリアリスティックな画像生成は1998年頃から'''SIGGRAPH(シーグラフ)'''で流行りだした。一方、従来から研究されているフォトリアリスティックな画像生成では、近年は実写と上手に合成する'''イメージベースドレンダリング'''、レイトレーシング法を改良した'''フォトンマッピング'''などがさらに研究が進められている。 :2DCG:2DCGは一言で言うと「コンピュータを使って描く絵」(コンピュータドローイング)で、写真修正や画材表現に適した'''画素'''ベースの「'''ビットマップ'''グラフィック」(主なソフトウェア:'''Adobe Photoshop、Corel Painter''')と、ロゴデザインや設計などに適したベクトルベースの「'''ベクトル(ドロー)'''グラフィック」(主なソフトウェア:'''Adobe Illustrator''')に分かれる。 さらにビットマップグラフィックは従来暗室などで行っていたような写真の修整や合成を主とするフォトレタッチ(Photoshop)と、筆や画材をコンピューター上で再現したように手で描くペイントグラフィック(Painter)のふたつに大別される。 :3DCG:3DCGはコンピューターに物体の形状・カメラの向きと画角と位置・光源の強度と位置・などの情報を入力して、コンピュータ自身にプログラムで画像を計算させる手法を言う。人間が手で描く必要がなく、カメラの位置を少しずつ変えたり物体の位置を変えたりするだけでいったん作った情報から異なる画像を大量に作り出すことが出来るため動画に向いており、近年の映画のリアリティ向上に多大な貢献をしている。またゲームなどでは主人公に360度の視界を持たせることができるなど利点が多いため多用されている。3DCGの最終的な出力先であるディスプレイモニターやスクリーンなどは二次元(2D)だが、3DCGは作成時に持っている情報が三次元(3D)である。 用途によって様々なソフトウェアが存在するが、統合環境として主なものは、'''Maya、3ds max、LightWave 3D、SOFTIMAGE XSI、Shade'''など、レンダリングソフトとして、'''RenderMan、mental ray、finalRender、POV-Ray'''などがある。 :CAD:CADはコンピュータを用いて設計をすること。あるいはコンピュータによる設計支援ツールおよびそれらを統合したシステムのこと。建築物や工業デザインなどの分野でそれぞれに専門化したソフトウェアが使用される。二次元CADと三次元CADに大別されるが、設計図を作成する目的に特化しているので、設計の技術や知識を持っていることが使用の前提となる。レンダリング等のいわゆるCGとしての出力には別のソフトの支援を要する場合がある。 !!色の表現について 画像を表現するには、CGであれアナログであれ、どのような色なのかを表現するところから始まる。CGにおいて「色」は「'''色空間'''」で表現される。最も代表的なものには「'''RGB'''」、「'''CMYK'''」がある。(他にも「sRGB / AdobeRGB」「RGBA」「CMY」「CMK」「HSV」「HLS」「YIQ」「YCbCr / YPbPr」「マンセル表色系」「オストワルト表色系」「DIC」「Pantone」「NCS color system」「日本塗料工業会標準色」「XYZ」「xyY」「OSA」「UCS」「L*u*v*表色系」「L*a*b*」などが存在する。詳しくは[こちら|http://ja.wikipedia.org/w/index.php?title=%E8%89%B2%E7%A9%BA%E9%96%93&oldid=12717626]を参照) {{image AdditiveColorMixing.gif}} :RGB:一般に、'''加法混色'''を表現するのに使われる。RGBは、それぞれ'''赤 (red) 緑 (green) 青 (blue)''' の頭文字である。'''光の三原色'''であり、数値を増すごとに白に近づく。反対に、数値を減らすごとに黒くなる。コンピュータのモニタで用いられるのも、このRGBである。RGB各'''8'''ビット(256色)、計'''24'''ビットを割り振る事で、'''1677万7216色'''(256X256X256=16777216)の表示を可能にしている。これは、ほとんどの人間の目で識別可能な限界とされ、'''フルカラー'''や'''トゥルーカラー'''などと呼ばれる。しかし24bitでは画像編集の過程で劣化が無視できないため、48bitなどより多ビットで扱うことも多い。 {{image SubtractiveColorMixing2.gif}} :CMYK:印刷の過程で利用する'''減法混色'''の表現法である。CMYは'''絵の具の三原色'''。基本色は白で、それに色の度合いを加えて、黒色にしていく。'''シアン (cyan)、マゼンタ (magenta)、イエロー (yellow) '''。理論上、CMYをすべて均等に混ぜると黒色になるが、インクや紙の特性上、CMYのインクを混ぜて綺麗な黒色を作るのは技術的に困難であり、通常はすべてを混ぜても濁った茶色にしかならない。そこで、'''黒(Key plate)'''の発色をよくするために別途黒インクを用いるようになったのがCMYKである。(キー・プレート (key plate) とは画像の輪郭など細部を示すために用いられた印刷板のことであり、通常黒インクだけが用いられた。) !!座標で空間を表現する {{image wc.jpg}} コンピュータ内部で空間を表現する場合、数値によって場所を指定しなければならない。その「場所」を表現するのが座標である。通常、2次元であれば「'''X軸+Y軸'''」で、3次元であれば「'''X軸+Y軸+Z軸'''」で表現される。座標はどの視点からみるかでいくつかの表現方法が考えられる。空間に絶対的な座標を設定する'''ワールド座標'''と各オブジェクトに固有の座標を与える'''ローカル座標'''などである。 !正射投影法と遠近投影法 {{image view.gif}} 【右上】遠近投影法(パースペクティブ)【その他】正射投影法 3DCGは3次元空間を2次元のスクリーン面に投影して見ることになる。この見方には、X,Y,Zの各方向から全く視覚的な遠近感を持たない'''正射投影法'''(パースがない図法。三面図など)とパースのついた'''遠近投影法'''(パースペクティブ)がある。人間の視覚的には遠近投影法の方が自然な印象をもたせるが、正確な位置関係がつかみにくい場合があり、作業を行う際は正射投影法で行う場合が多い。 !!形を表現する(主に3DCGの場合) !頂点・辺・面 {{image polygon.gif}} ポリゴンモデル CGでは仮想空間内で任意の座標に頂点を置くことができる。二つの頂点をつなぐと線(辺)ができる。この辺は、単純に直線で描くこともできるが二次関数、三次関数によって描かれる曲線にすることもできる。更に辺をつなぐことで面ができる。面も平面も曲面も作ることできる。 :頂点:'''頂点(Vertex)'''は大きさの概念はなく、'''位置'''を表現しているだけなので、画像として表現するためには複数の頂点を結んでできた面などが必要となる。CGソフトウェアなどで表示されている点は便宜上、点の位置を表すために描かれているにすぎない。最終的な画像としては頂点は描かれない。 {{image NURBstatic.png}} NURBSカーブ :辺:'''辺(Line/Edge)'''にも太さの概念はなく、画面には便宜上、線として描かれているだけである。2DCGソフトウェアなどでは、線の太さを自由に変えることができる。頂点と頂点を結ぶ方法はいくつかあり、一番単純なのは'''直線'''で、2頂点間を最小距離で結べばよい。曲線の描き方はいくつもあるが、代表的なのは'''スプライン曲線'''、'''ベジェ曲線'''だろう。 {{image NURBSSurface1.jpg}} NURBSサーフェス :面:3DCGの場合、面を表現する方法はいくつかあり、その代表的なのが'''ポリゴン'''と'''NURBS曲面'''だろう。ポリゴンとは「'''多角形'''」の意味。複数の直線を結んでできた面で、'''最小構成単位は三角形'''である。ポリゴンによって構成される立体は三角形をどのように組み合わせるかで決定される。四角ポリゴンや五角ポリゴンなどと呼ばれるものもあるが、ソフトウェア内部では、スクリーンに表示するときに、三角形の集合体として描画される(三角形+三角形=四角形)。'''NURBS曲面'''などに代表される曲面立体は、頂点と頂点を結ぶ二次・三次関数曲線を組み合わせることで表現される。頂点の他にコントロールポイントなどがあり、それを操作することで曲面の形を変えることができる。NURBS曲面はCADなどでも使用されている。 !!3DCGの制作工程 仮想空間内に造形表現をするために主に用いられるプロセスとして次のようなものが考えられる。 +モデリング(形をつくる) +マッピング(質感を設定する) +アニメーション(動きをつける) +ライティング(光の設定をする) +レンダリング(画像を生成する) !モデリング 3DCGソフトウェア内部では、一つの造形物を「'''オブジェクト'''」と呼ぶ。3DCG内の立体物は'''頂点・辺・面'''で構成されていると述べたが、それらの要素を一つ一つ設定していったのでは、複雑なものを作るのに大変時間がかかってしまう。そこで、様々な造形手段が存在する。その中から基本的なものをいくつか紹介する。 *'''プリミティブオブジェクト''' **球、ボックス、円柱、円錐など *'''オブジェクト加工''' **頂点・辺・面の移動・回転・拡大 **押し出し **旋回(スィープ) **ベンド変形 **テーパー変形 **ノイズ変形 **ラティス(格子)変形 **接続(ブレンド/ブリッジ) **ブーリアン演算 **メッシュスムース(サブディビジョンサーフェス、サブパッチなど) *'''特殊な立体生成法''' **メタボール **ディスプレイス **人工生命シュミレート **パーティクル **立体スキャン !マッピング モデリングして作られた形状に様々な色や質感を与えることができる。大別して二種類のマッピング法が存在する。 {{image mapping.jpg}} {{image procedural_texture.gif}} 【左図】ビットマップ画像を円柱状に貼り付ける例 【右図】プロシージャルテクスチャ *'''テクスチャマッピング''' **テクスチャと呼ばれている'''平面画像をオブジェクト表面に貼り付ける'''もの。二次元の画像を三次元立体に貼り付けるため、場合によっては歪みが生じる(シールを複雑な曲面の立体物に貼り付ける場面を想像してみてください)。そこで様々な貼り付け方が存在する。代表的なのは、マッピング用の座標をオブジェクトに設定する「UVマッピング」。 *'''プロシージャルマッピング''' **'''3DCGソフトウェア内部で画像を生成'''してオブジェクトに材質を与える方法。これはオブジェクト表面のみに材質があるわけではなく3次元的に画像を生成しているので、どのような形であっても適用することができる。また、パラメータを変えることで、模様を変更したりできるので、応用性も高い。だが、プログラム生成されているので、自然さがイマイチだったりもする。そこで、複数のプロシージャルマップを組み合わせて使用したりして複雑さを演出したりすることもある。 *他、'''光沢'''や'''基本色'''、'''自己照明'''、'''反射'''、'''屈折'''、'''バンプ'''、'''ディスプレイス'''などなど、様々なパラメータによって質感表現を与えることができる。 !アニメーション 3DCGは映像表現に用いられることが多く、アニメーションツールとして発達している。手描きのアニメーションと原理は同じで連続する画像を次々と表示することで「動き」を表現しているが、手描きのアニメーションと決定的に違う部分は'''自動的に絵を生成'''してくれることだろう。キーフレームアニメーションでは、キーフレーム(原画)を中割りすることで滑らかなアニメを作るが、CGではその中割り部分を自動補完で作ってくれる。 {{image motioncap.jpg}} モーションキャプチャ キャラクターアニメーションの動きの制作にはいくつか手法が存在する。 *'''手付けアニメーション''' **キーフレームの動きのポーズを設定していく *'''モーションキャプチャ''' **現実の人間の動きを計測して動きのデータを記録し、3DCGキャラクターに適用することで、リアルな動きを与えることができる。計測方法には、光学式、磁気式、機械式が存在する。 **{{ref M_PEA_menc.flv,表現技術-01-2007,サンプルムービー}} *'''モーションブレンド''' **二つの動きのデータを組み合わせることで、新しい動きを作ることができる。使用例としては、歩いてるモーションと走ってるモーションを組み合わせ、「歩き」から「走り」にだんだん変化していく動きなどを作ることができる。 *'''モーフィング''' **あるオブジェクトを変形させたものをいくつか用意し、それらの'''形をブレンド'''させることができる。使用例としては、顔の表情変化を表現するときに用いられる。「笑い」のモーフターゲットと「泣き」のモーフターゲットを用意し、笑っている顔から泣いている顔に移行させることで、表情の変化を作り出せる。 !ライティング 3DCGは本来、光が存在しないため、照明の設定をしなければ'''真っ黒な画面'''になってしまう。「光」がどのようにオブジェクトを照らし出しているかを計算した結果が画像になっているのである。 CGのライティングは現実空間を模倣して作られているため、似たような表現もできるが、本来、現実空間のシミュレートをしているだけなのでパラメータの設定によっては、現実ではありえない表現も可能となる。 CGのライトの特徴 *'''色彩は加色混合''' **ライトが0の場合、黒になり、ライトが増える・強くなるにしたがって白に近づいていく。 *'''マイナスのライトを使用できる''' **現実的にはありえないが、マイナスの値を持ったライトを当てるとその部分を暗くすることもできる *'''ボリュームライト''' **霧の中や埃っぽい部屋の中などで、光が差し込むと光の筋がみえる。このような表現をするときには、ボリュームライトが必要になる。 *'''ライトの減衰''' **現実の光は、光源から発生すると徐々に拡散したりして光が弱くなっていく。だが、通常のCGのライトはどこまでも弱くなることなく照らし出してしまう。そこで、光の強さを減衰させることで光が弱まっていく表現を与えることができる。 *'''影のON/OFF''' **物体が光を受ければその背後に影ができる。だが、CGの場合、影は勝手にできるものではなく、作り出す必要がある。影を落とすか落とさないかは選択でき、どのライトの影を落とすのかなどを選ぶこともできる。 *'''プロジェクタマップ''' **ライトをプロジェクターのように扱うことができ、画像を投影させることができる。使用例としては、映写機や木漏れ日の表現などがある。 !レンダリング オブジェクトを作成したり、ライティングを設定したりした後、最終的に画像を生成するプロセスが'''レンダリング'''である。より高品質な画像を得るために年々新しい方法が考案され、複雑になってきている。レンダリングで重要なのは、高品質な画像を短時間に得ることであり、レンダリング法も様々なものが考案されており、それぞれ長所と短所を備えている。画質、計算時間、反射、屈折、影などの有無を考慮して、レンダリング法を選択する必要がある。 *'''レンダリング処理の流れ''' ++シーンをカメラ座標系に変換 ++オブジェクトを三角形へ分割(テッセレーション) ++オブジェクトとカメラからの視線との交点を求める ++カメラから見えない部分を消去(隠面消去) ++交点の輝度計算(シェーディング) ++影、反射、屈折、透過などの計算 ++フレームバッファへ書き込む *'''陰面消去法''' **'''Zバッファ法''' ***各オブジェクト毎に'''ピクセル(画素)単位'''で色情報と奥行き情報を調べて格納('''Zバッファ''')。そのオブジェクトがカメラから見える場合は、奥行き情報に基づいてカメラから見える面だけを描画する。画素ごとに計算を行うのでシーンの複雑さに影響されにくい。 **'''スキャンライン法''' ***シーンにおける各オブジェクトを構成する各ポリゴンの奥行き情報をディスプレイの'''走査線(スキャンライン)'''毎に分割する。この中で奥行き情報を比較、手前の方の面だけを描画する。ポリゴン単位で空間的に処理するのではなく3D空間内のオブジェクトを2Dに投影して処理するので、一般的に高速な計算が可能でメモリ消費も少ない。 **'''レイトレーシング法''' ***原理は光源から発した'''光(レイ)'''が物体に当たり、反射して最終的にカメラに届くまでの軌跡をたどって物理的に正確な描画を行うもの。ただし、実際の計算では、レンダリング画面の各画素を光として考え、その奇跡をカメラ側から逆トレースしていく。オブジェクトの面にどのような光が当たっているのかを正確に計算するので反射、屈折、影などを精巧に表現できる。だが、計算時間が長くなるのが欠点で、レイ(光)の反射回数を制限するパラメータが存在する(反射回数が無限だと半永久的に計算が終わらないことになる場合がある)。 {{image z_buffering.jpg}} Zバッファ {{image raytracing.jpg}} レイトレーシング レンダリング結果 *'''サンプリング'''による各種効果 **レンダリング画面の各ピクセルの色が決定されることで、画像が生成されるが、1つのピクセルを決定するために周囲の結果を考慮したり、前後のフレームの計算結果を考慮することで、様々な効果を得ることができる。 **'''被写界深度(DOF)''' ***カメラのピントが合う奥行き方向への範囲のことで、ピントから外れるにしたがって画像はボケることになる。CGの場合、基本的にすべてにピントがあってしまうため、被写界深度を表現するためには、あえて効果を与える必要がある。 **'''モーションブラー''' ***現実世界でカメラ撮影した場合、被写体が動いていると残像が生じてボケた画像が生成される。これをモーションブラーという。CGの場合、基本的に残像効果は考慮されないので、あえて生成する必要がある。レンダリングする時間の前後に複数のレンダリングをして重ね合わせることでブレを表現する。 **'''アンチエイリアシング''' ***被写体をレンダリングすると、オブジェクトの境界などにギザギザの線のようなもの(ジャギー)が生じてしまう。1ピクセルにつき1つの計算結果が割り当てられるために起こってしまう現象なのだが、これを緩和するために、周囲を余分に計算してその平均値からピクセルの色を計算するのがアンチエイリアシングである。 {{image DOF-ShallowDepthofField.jpg}} {{image motionblur.jpg}} {{image Anti-alias.png}} !さらに高度なレンダリング('''グローバルイルミネーション''') *ラジオシティ *分散レイトレーシング *フォトンマップ *イメージベースドライティング {{image Global_illumination.jpg}} !!参考文献 *【WEB】Wikipedia http://ja.wikipedia.org/ {{amazon3 4948759511}} 【書籍】CG&映像しくみ辞典 ワークスコーポレーション