[CG実習 > イントロダクション]

イントロダクション

ここでは,CGと CGを作成するために必要なコンピュータとプログラミングについて概説します.

CGについて

CGといえば,一般にコンピュータグラフィクスの略称として通じるほど, CGは身近なものになってきています. ゲームや映画のようなエンターテインメント業界から, 産業,教育,研究などまで, ありとあらゆる分野において,CGが使われているを見ることができます.

CGの大きな利点は,カメラと撮影する対象を実際に用意しなくても, コンピュータのデータのみから映像を作り出せることです. CGでは,対象を完全にコントロールできます. 実写に近い映像を作ることもできますし, 実際にはありえないようなものを映像にすることもできます. また一度作り上げたものは, デジタルデータとして保存できますので,自在に再利用,再加工できます.

産業界では,CGが製品の設計に不可欠になってきています. 研究開発の分野でも,CGは有効に利用されています. 「百聞は一見に如かず」という言葉の通り,たとえば, シミュレーションで得られる膨大な量の数値データの羅列を CGによって目に見えるようにすることで, データの特徴を直観的に理解できるようになります. さらに,計算の実行手順など,抽象的なデータもCGを利用することで, 目にすることができるようになります.

さて,そもそもCGとは何かといえば, コンピュータに記録されているデータを 画像という視覚的な情報へ変換する手法のことです. いわゆるCGの映像を作るようなことだけでなく, たとえば,コンピュータの画面に線や文字を出すためにも, CGの技術が必要となります.

さて,CGによる画像の生成過程をごく大雑把に書いてみると, 次のようになるでしょう.

  1. 描画対象物のモデリング
  2. 観察者と描画対象物を含む「描画」環境の設定
  3. 実際の描画(画像の生成)

このなかで,一般にCGとして とらえられているのは,描画(レンダリング)の技術ではないでしょうか. レンダリング技術としては,二次元の線分や三角形の描画方法にはじまり, 隠面消去(対象物のうち,観察者から見えない部分を隠す), 陰影処理(対象物の明るさを決める), テクスチャマッピング(対象物に模様をつける)などを挙げることができます.

もちろん,レンダリング技術なしに,CGはありえませんし, この実習でも,レンダリング技術を中心に学びます. しかし,CGでもっとも困難なのは,第一段階のモデリング, つまり,対象物をどのようにして,コンピュータ内で表現するか, というステップです. コンピュータには,デジタルな数値データしか保存できませんから, まず,描画対象物を何らかの数学的な方法によって, 数値データとして表現しなければ,レンダリングを行うこともできません. たとえば,ヒトを描こうとすれば, 少なくともヒトの形状を数学的に表現する必要があります. 一枚のCG画像を作るのではなく,CGのヒトを動かそうとすれば, 形状を表現しただけでは動かすことはできませんから, 形状だけでなく, ヒトの構造を何らかの方法で表現しなければなりません.

CGで対象物を描くということは,少々大袈裟にいえば, その対象物を,そっくりそのままコンピュータ内に仮想的に作り上げることに他なりません. 以上から分かるように,CGは単にきれいな絵をつくるための技術ではなく, 描画する対象を理解する学問分野なのです.

ところで,この実習では,さきほども述べた通り,モデリングにまで深く踏みこまず, レンダリングの基礎を中心に学びます. 繰り返しになりますが,モデリングはもちろん重要ですが, レンダリングなしにCG画像を作り上げることはできません. また,いかに実写に近い表現を得るか, 大量のデータを,いかに高速に描画するかなど, レンダリングにおいても,重要な課題が山積しています.

コンピュータの構成

コンピュータシステムは,大まかに

に分けられます.

ハードウェアとはコンピュータを構成する機械のことです. ハードウェアは,ケースの中に入っている計算ユニット,記憶ユニット, 通信ユニットなどの電子機器,キーボードやマウスなどの入力機器, モニタ(ディスプレイ)のような出力機器などで構成されます.

どんな機械でも,それがあるだけでは何もできません. それを操作することではじめて役に立ちます. ソフトウェアとは,ハードウェアを操作するための道具です. ソフトウェアは,通常,コンピュータのケースの中にある記憶ユニットの中に蓄えられています. ソフトウェア(と電気)がなければ,コンピュータで作業を行うことはできません. いま,このページを読むために使っている(はずの)ブラウザやメイルの送受信を行うツール(メイラ),ワードプロセッサなどはすべてソフトウェアです.

このように私たちが直接利用するツール以外にも, コンピュータシステムには,不可欠なソフトウェアがあります. それは,ツールとハードウェアの仲立ちをするソフトウェアで, システムソフトウェアとよばれます. その中核をなすのがOS(Operating System)です. それに対して,私たちが直接利用しているツールを アプリケーション(応用)ソフトウェアとよびます.

MS Windowsやこの演習で用いるLinuxもOSの一種です. OSは,コンピュータを効率的に運用するため, またコンピュータを使いやすくするためになくてはならないシステムの基幹をなすソフトウェアです. たとえば,ノートパソコン,デスクトップパソコン, あるいは大型コンピュータなどの全く異なるハードウェアのコンピュータでも, OSが同じであれば,同じアプリケーションを利用することができます. またいくつものツールを同時に使えるのも, OSがコンピュータを適切に制御しているおかげです.

通常一台のコンピュータにはOSが一つだけ存在して, そのOSがコンピュータを制御します. ところが,この演習室のコンピュータには, Windows2000,Linuxという二つのOSが同居しています. WindowsからLinuxを呼び出した場合, あたかも二つのOSが同時に動いてるかのように (あるいは,まるでLinuxがWindowsのアプリケーションのように!!) 見えますが,このような環境は,内部で VMware という特殊なソフトウェアを使うことで実現されています.

プログラムとは

プログラムは,ソフトウェアとほぼ同じ意味で使われます. プログラム(あるいはソフトウェア)の実体は, コンピュータに与える作業手順書で, 「まずこうして,次にこういうことをして下さい」 などのようにコンピュータに行わせる作業の内容を具体的に示したものです. コンピュータは与えられたプログラムに忠実にしたがって動作します. プログラムがなければ,コンピュータは何もできません (コンピュータは考えることはできません).

ところで,パソコンを購入すると,ほとんどの場合は, いろいろなプログラム(ソフトウェア)が最初から用意されています. OSを含めて,私たちが普段利用するツール (ワードプロセッサ,ブラウザ,表計算ツール,メイラなど)は, パソコンをすぐに使いはじめられるように用意されているプログラムです. ただし買ったときから使えるからといって, これらのプログラムは自然に生まれるものでもなければ, コンピュータで自動的に作成されるものでもありません. すべてのプログラムは,一つ一つプログラマ(プログラム作成者)によって, 手作りされるものです(もちろん,できあがったプログラムはコピーできますので, 一台一台のコンピュータのために別々にプログラムを書く必要はありません).

なお,プログラムの処理内容の手順をアルゴリズム(algorithm)といいます. アルゴリズムを具体化して,コンピュータで処理できるように記述したものが プログラムであるともいえます.

ところで,「ソフトウェア」と「プログラム」という言葉の使い分けですが, 日置は, 「ソフトウェア」といったときには,すでに完成していて すぐに利用できるツールを指すもので, 主に利用者の立場で使う言葉だと考えています. 一方,「プログラム」は 製作者(プログラマ)の立場で使う言葉で, 実際に作成したもの,あるいは 作成中のものを指して使う言葉だと考えています.

プログラミング言語とは

プログラムはどのように記述してもよいというものではありません. 他の人に作業を依頼するように, 通常の文章で作業内容を書いてもコンピュータは理解できません. プログラムは,プログラミング言語とよばれる コンピュータのために作られた人工の言語の文法にしたがって, 厳密に記述しなければいけません. コンピュータは全く融通が利きませんので,プログラムのなかで,たとえ一文字でも 文法にしたがっていない部分があれば,そのプログラムは理解されません. なお,プログラミング言語に対して, 私たち人間が使う日本語や英語などの言語のことを総称して, 自然言語とよびます. 世界中に,数多くの自然言語があるように, プログラミング言語にもいろいろな種類があります.

Rubyとは

Rubyは, 「プログラミングをたのしくする」というモットーのもとに 開発された比較的新しい言語です.わずらわしい文法事項は少なく, かつ強力です. 数値的な処理はもちろん,テキスト処理,ネットワークプログラミングも可能です. また新しい言語であるにも関わらず,すでにライブラリ(プログラムの部品)が 資産として豊富に蓄えられています.ライブラリを利用することで, CGプログラミングも簡単に始めることができます.

もう少しプログラミング言語としての性格を語るなら, Rubyは「オブジェクト指向スクリプト言語」である, ということが言えますが,「オブジェクト指向とは...」と 大上段に構えなくても気軽にプログラミングが始められます.

ところで,Rubyは,まつもとゆきひろさんが 個人で開発した言語で,はじめから日本語がサポートされています (ほとんどのプログラミング言語は,海外で開発されています). Rubyはフリーソフトウェアであり, 無料で自由に手に入れることができます. Rubyを改変することも自由です (ライセンスの詳細).

インタプリタとは

プログラムは,それを記述しただけでは何も起こりません. プログラムの内容にしたがった作業をコンピュータに行わせるには, コンピュータに対して, プログラムを読んで作業をするように指示してやる必要があります. コンピュータにプログラムにしたがって作業をさせることを, プログラムを実行する といいます.

さて,これまでプログラムを記述するのには,Rubyなどのプログラミング言語を 用いると説明しましたが,じつは,コンピュータは, そのようなプログラミング言語で記述されたプログラムを, そのまま理解できるわけではありません. コンピュータが唯一理解できるのは, 一般に機械語とよばれる言語です. 機械語は,CPU(Central Processing Unit;計算を行うハードウェア) によって異なりますが,いずれも0,1のたった2種類の文字を使って記述されます. なお,一般のプログラミング言語を機械語と対比して高級言語ともいいます.

コンピュータが現われた黎明期には,実際に機械語でプログラムを書いていたのですが, 機械語でのプログラミングはあまりにも困難で非効率であることから, 人間にとって理解しやすいプログラミング言語が開発されていきました. ただし,さきほども述べた通り, コンピュータが理解して実行できるのは機械語のプログラムだけですから, 高級言語でプログラムを書くようになると, それと同時に,そのプログラムを機械語に翻訳することも必要になりました. 翻訳作業はもちろん人手で行うのではなく, 翻訳のための専用のプログラムを使って行います. 翻訳作業のことをコンパイルといい, 翻訳ソフトウェアのことをコンパイラといいます. コンパイラによって翻訳された機械語のプログラムは,コンピュータで直接に実行可能となります. ここでプログラムを実行するまでの流れを整理すると, (1)まず高級言語でプログラムを記述して, (2)次にコンパイラで高級言語のプログラムをコンパイルして, 実行可能なプログラムを生成し, (3)最後に実行可能プログラムをコンピュータに渡して実行させる, ということになります.

じつは,コンピュータに高級言語のプログラムを実行させる方法は, コンパイラでコンパイルするだけではありません.もう一つの代表的な プログラムの実行方式として,インタプリタとよばれる プログラムを利用する方法があります. インタプリタは,高級言語のプログラムを読んで,それをその場で解釈して, 実行することができるように作られています. つまり,インタプリタを利用する場合, いったん実行可能プログラムを生成するという段階が不要になります. たとえてみれば,コンパイラがプログラムを機械語に翻訳するのに対して, インタプリタは機械語への同時通訳をしているということができます.

プログラミング言語によって, コンパイラ方式をとる場合とインタプリタ方式をとる場合,あるいは 両方が可能な場合があります. コンパイラ方式とインタプリタ方式を比べると, コンパイルという余分な中間作業が必要のないインタプリタ方式が より優れていると感じるかもしれませんが, 一般に,インタプリタで直接に高級言語のプログラムを実行するよりも, コンパイラで生成された機械語のプログラムを実行する方が, プログラムの実行を完了するまでの処理時間が短くなります. 大規模なプログラムになれば,その違いは極めて顕著になります.

Rubyのプログラムは,インタプリタで実行します(インタプリタはrubyといいます). インタプリタ形式だから, CGのような大量のデータを扱うプログラムには(処理時間の面で)不向きかというと じつはそうでもありません.Rubyでは, コンパイルされた機械語プログラムを部品(ライブラリ)として利用することができます. インタプリタでは時間がかかりそうな部分は, 別途コンパイル可能なライブラリとして作成して (この場合はCという言語を利用します), それを別のプログラムで利用して,全体の処理時間を短くすることができます. この実習でも,そのようなライブラリを利用します.

[CG実習 > イントロダクション]