(57)【要約】  所望のグラフィックスの一連の出力特性に基づき、シェーダソースコードを自動的に生成するシステム、方法、およびコンピュータプログラム製品。
2008517403.tif 000002
【特許請求の範囲】
【請求項１】
バーテックスシェーダのためのシェーダ・プリアンブルとパラメタ・リストを作成するステップと、
バーテックスと垂線の座標を変換するステップと、
随意にテクスチャ座標を生成し、テクスチャ座標を変換するステップと、
該変換したテクスチャ座標および該変換したバーテックスと垂線の座標に応じて、少なくとも数個のシェーダパラメタの値を含むバーテックスシェーダのソースコードをグラフィックス処理部に送信するステップと、
から成る、バーテックスシェーダ用コード生成方法。
【請求項２】
グーロー・シェーディングが選択された場合に、各光源の照明コードを生成するステップからさらに成る請求項１に記載の方法。
【請求項３】
フォン・ライティングが選択された場合に、頂点ごとの色値をフラグメントシェーダへ受け渡すためのコードを生成するステップからさらに成る請求項１に記載の方法。
【請求項４】
照明がなされていない場合、最終的な色として頂点ごとの色値をフラグメントシェーダへ受け渡すためのコードを生成するステップからさらに成る請求項１に記載の方法。
【請求項５】
フラグメントシェーダのためのシェーダ・プリアンブルとパラメタ・リストを作成するステップと、
フラグメント色値を記憶するステップと、
パラメタ値を含むフラグメントシェーディングコードを送出するステップと、
から成る、フラグメントシェーダ用コード生成方法。
【請求項６】
バンプマッピングが選択された場合、バンプマップを用いて新たな垂線ベクトルを算出するためのコードを生成するステップからさらに成る請求項５に記載の方法。
【請求項７】
フォン・シェーディングが選択された場合に、各光源の照明コードを生成するステップからさらに成る請求項５に記載の方法。
【請求項８】
グーロー・ライティングが選択された場合に、補間された頂点ごとの色値を最終的なフラグメント色として受け渡すためのコードを生成するステップからさらに成る請求項５に記載の方法。
【請求項９】
テクスチャリングがある場合、すべてのテクスチャにアクセスし、その結果生じたテクセルを互いに混合し、また生じたテクセルを照明を受けたフラグメント色と混合するためのコードを生成するステップからさらに成る請求項５に記載の方法。
【請求項１０】
環境マップのテクスチャにアクセスし、その結果生じたテクセルを環境マップの反射率パラメタにしたがって、照明を受けたフラグメント色に対して混合するためのコードを生成するステップからさらに成る請求項５に記載の方法。
【請求項１１】
環境マップのテクスチャにアクセスし、その結果生じたテクセルを環境マップの反射率パラメタにしたがって、照明を受けたフラグメント色および他の非環境テクセルに対して混合するためのコードを生成するステップからさらに成る請求項１に記載の方法。
【請求項１２】
複数のシェーダパラメタ値および第１のオブジェクトの属性を含む第１のシェーダコードを受け取るステップと、
変更されたオブジェクトの属性を受け取るステップと、
該変更されたオブジェクトの属性が対応する第１のオブジェクトの属性に代わって使用される場合、該シェーダコードと該変更されたオブジェクトの属性とに対応して更新されたシェーダコードを生成するステップと、
該更新されたシェーダソースコードをグラフィックス処理部に送出するステップと、
から成る、シェーダ用コード生成方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータ・グラフィックス一般に関するものである。
【関連出願】
【０００２】
本出願は，参照により本書に含まれる、２００４年１０月２０日に出願されたアメリカ合衆国仮特許出願番号６０／６２０，６３８の出願日の利益を享受することを主張するものである。
【技術背景】
【０００３】
近年、市販されているグラフィックスアダプタは高度にプログラム可能なものとなって来ている。このようなグラフィックスアダプタは、ホストコンピュータにおいて動作中の主導権を持つアプリケーションプログラムによりダウンロードされた実際のコードを実行することができる。プログラム可能なグラフィックスハードウェアにダウンロードされるこれらのプログラムに「シェーダ」（ｓｈａｄｅｒ）と呼ばれるものがある。一般的にシェーダとは、その構成とプログラミングに応じて、頂点や多角形、その他のオブジェクトへカスタム照明、カラーリング等の効果をピクセルごとに与えるグラフィックス機能である。シェーダを用いることで、プログラマーは三次元世界のオブジェクトに対して複雑な特殊効果を加えることが可能となる。従来技術においては、このようなシェーダプログラムの作成はユーザが行っている。シェーダは熟練したソフトウェア専門家により作成されなければならないが，その使用は熟練した芸術分野の専門家によってなされることもある。
【０００４】
芸術分野の専門家の多くは、ある外観を作り出すために所望の出力特性を指定するが、このような特性を実現するために必要となるシェーダソースコードを自分で作り出すことはできない。
【０００５】
そのため、この技術分野ではグラフィックスの一連の所望の出力特性に基づいて自動的にシェーダソースコードを作成するシステム、プロセス、およびコンピュータ・プログラム製品が求められている。
【発明の概要】
【０００６】
本発明の好適な一実施例は、グラフィックスの所望の一連の出力特性に基づいて自動的にシェーダソースコードを作成するシステム、プロセス、およびコンピュータ・プログラムを提供する。本発明の好適な一実施例は、新しいシェーダ言語であるＣｇおよびＧＬＳＬの双方をサポートするものであり、その他の言語（ＨＬＳＬ等）にも応用が可能である。この好適な形態における重要な点は、これまではグラフィックスの専門家に特殊なコードを書いてもらわない限りは組み合わせられなかったサポートされたグラフィックス効果を実質的に任意に組み合わせることができる高性能なシェーダを手軽に形成する点にある。実際、ここに記載された発明の形態には、広い範囲において考えられるグラフィックス効果から選ばれた特定の目的のためにシェーダを形成する際に必要とされるコンピュータグラフィックスの専門家の熟練した知識が含まれている。
【０００７】
以上は、本発明の特徴および技術的な効果についてやや大まかに概略を述べたものであるが、これにより当業者であれば以下に述べる発明の詳細な説明をよりよく理解できるであろう。本発明の請求項の主題を構成している本発明のさらなる特徴および効果を以下に述べる。当業者であれば、本発明と同じ目的を実施する他の構成を改良、設計する原理としてこの概念や具体例を容易に活用することができる。さらに、当業者であれば、このような同等である構成は広範な意味において本発明の精神または範囲から逸脱してないものと理解することができる。
【０００８】
以下の発明の詳細な説明に移る前に、本特許明細書を通して用いられている用語や表現の定義を述べておく。「含む（ｉｎｃｌｕｄｅ）」、「有する（ｃｏｍｐｒｉｓｅ）」およびこれらの派生語は非限定な包含を表す。「または（ｏｒ）」は包括的であることを示し、「および／または」という意味である。「関する（ａｓｓｏｃｉａｔｅｄ  ｗｉｔｈ、ａｓｓｏｃｉａｔｅｄ  ｔｈｅｒｅｗｉｔｈ）」という表現およびこれらの派生形は「〜を含む」「〜に含まれる」「〜と相互に接続する」「〜を入れている」「〜に入れられている」「〜に接続する」「〜に結合する」「〜に通じている」「〜と協働する」「交互配置する」「〜と並列する」「〜に近似の」「〜と結合した」「持つ」「〜という特性を持つ」等の意味を持つ。ｃｏｎｔｒｏｌｌｅｒは少なくとも１つの動作を制御するのであればどのような装置、システムまたはその一部でもよく、装置はハードウェア、ファームウェア、ソフトウェアまたはこれらのうちの２つ以上の組み合わせによって実施されてもよい。特定のコントローラに関する機能性は一つに集中させても分散させても近傍で行っても遠隔で行ってもよい。特定の用語や表現の定義については本特許明細書中に示す。当業者であれば、このような定義は、このように定義された用語や表現の過去、さらには将来用いられる用法の多くに該当するということを理解できるであろう。
【実施例】
【０００９】
以下に述べる図１から図６およびこの特許明細書に示された本発明の原理を説明するために用いられている各実施例は、例証のためのみのものであり、いかなる場合においても発明の範囲を限定するものではない。当業者であれば、本発明の原理はどのような装置でも適切に構成されたものであれば実施されると理解するであろう。本出願の多様で新規な教示をここに挙げる好適な実施例を参照して示す。
【００１０】
図１は、好適な一実施例を実施するデータ処理システムを表すブロック図である。ここに図示するデータ処理システムはレベル２キャッシュ／ブリッジ１０４に接続されたプロセッサ１０２を有し、このレベル２キャッシュ／ブリッジ１０４はローカルシステムバス１０６に接続されている。ローカルシステムバス１０６はペリフェラル・コンポーネント・インターコネクト（ＰＣＩ）のアーキテクチャバス等である。ここに示す実施例中のローカルシステムバスにはメインメモリ１０８およびグラフィックスアダプタ１１０も接続されている。
【００１１】
その他、ローカルエリアネットワーク（ＬＡＮ）、ワイドエリアネットワーク、ワイアレス（ＷｉＦｉ等）のアダプタ１１２等の周辺機器もローカルシステムバス１０６に接続されていてよい。拡張バスインターフェース１１４によりローカルシステムバス１０６が入出力（Ｉ／Ｏ）バス１１６に接続されている。Ｉ／Ｏバス１１６はキーボード／マウス用アダプタ１１８、ディスク・コントローラ１２０、Ｉ／Ｏアダプタ１２２に接続されている。
【００１２】
さらに、この実施例のＩ／Ｏバス１１６には音声用アダプタ１２４が接続され、音声用アダプタ１２４には音声を再生するためのスピーカ（図示せず）を接続してもよい。キーボード／マウス用アダプタ１１８はマウスやトラックボール、トラックポインタといったポインティングデバイス（図示せず）を接続するものである。
【００１３】
当業者であれば、図１に示すハードウェアの細部は一様でなくてよいことを正しく理解するだろう。たとえば、光ディスクドライブ等、他の周辺装置を加えて使用しても、このハードウェアの代わりに使用してもよい。ここに挙げる実施例の目的は説明のためのみであって、本発明の構成を限定するものではない。
【００１４】
本発明の好適な一実施例によるデータ処理システムは、グラフィックス・ユーザ・インターフェースを用いたオペレーティングシステムを有する。オペレーティングシステムにより、複数の表示ウィンドウが同時にグラフィックス・ユーザ・インターフェースに表示され、各表示ウィンドウがそれぞれ異なるアプリケーションのインターフェースを示したり、ひとつのアプリケーションで異なったインスタンスのインターフェースを示したりする。グラフィックス・ユーザ・インターフェースのカーソルはポインティングデバイスを介してユーザーに操作される。カーソル位置は変更でき、および／または、マウスのボタンをクリックした場合等にはカーソル位置が生成されて所望の反応動作を実行させる。
【００１５】
ワシントン州レッドモンドに本社を置くマイクロソフト社の製品、マイクロソフト・ウィンドウズ（登録商標）のいずれかのバージョン等、商品化されている様々なオペレーティングシステムが適切な変更を加えることで利用できる。オペレーティングシステムは、ここに示すように本発明にしたがって変更を加えたり、作成される。
【００１６】
好適な一実施例によれば、所望の一連のグラフィックスの出力特性に基づき、シェーダソースコードを自動的に作成するシステム、方法およびコンピュータ・プログラム製品を提供する。好適な一実施例であるＪｔシェーダ・エフェクトは、テキサス州プレーノー市のＵＧＳ社より発売されているモデリングシステムとともに使用される視覚化ツールの一部として実施され、新しいシェーダ言語であるＣｇおよびＧＬＳＬの双方をサポートする。Ｊｔシェーダ・エフェクトの重要な点は、これまではグラフィックスの専門家に特殊なコードを書いてもらわない限り組み合わせられなかったサポートされたグラフィックス効果を実質的に任意に組み合わせることができる高性能なシェーダを手軽に形成する点にある。実際、Ｊｔシェーダ・エフェクトには、広い範囲において考えられるグラフィックス効果から選択した特定の目的のためにシェーダを形成する際に必要とされるコンピュータグラフィックスの専門家の熟練した知識が含まれている。
【００１７】
以下の説明ではそのほとんどがＪｔシェーダ・エフェクトおよび前述の視覚化ツールに関わる特定の実施例に関するものであるが、当業者であれば本発明の教示はこの実施形態に限られるものではなく、他の多くのソフトウェア・アプリケーションに適用可能であると理解することができるであろう。
【００１８】
ここで用いられているように、Ｊｔアトリビュートという用語は、シーングラフ上のモディファイアを指し、シーングラフ上の幾何学オブジェクトをレンダリングする方法のある特徴を表現するためのものである。各Ｊｔアトリビュートはシステムによってオブジェクトがどのようにレンダリングされるべきかという情報のごく一部をエンコードする。Ｊｔアトリビュートの例としては、材質の色、テクスチャマップ、光源等がある。このようなＪｔアトリビュートはグラフ上に「平塗り」あるいは「蓄積」され、オブジェクトがいかにレンダリングされるべきかの全体の表現を示す最終的なＪｔステートに達する。
【００１９】
Ｊｔシェーダ・エフェクトは、アプリケーションに応じた視覚的特殊効果の表現を受け取り、この表現をシーングラフ上のある点で使用されているＪｔアトリビュートと組み合わせ、このような表現を実行時生成するＪｔシェーダへと変換して、実行した時に所望の視覚的効果を作り出すという高度なタスクも行う。
【００２０】
Ｊｔシェーダ・エフェクトは、それ自体がＪｔアトリビュートでもあり、他の属性とともにシーングラフ上に平塗りされる。属性の平塗りの手順としては、ロジカル・シーン・グラフ（ＬＳＧ）に加えられた属性変更を自動的に検知し、必要に応じてＬＳＧの対象部分に属性を塗りなおす。この動作の結果、ＬＳＧ上にレンダリングされ得るものそれぞれに対して、すべての面で特定され、全体にわたって最新の状態となるＪｔステートがもたらされる。そして、このように蓄積されたＪｔシェーダ・エフェクトの属性により、モデリングシステム状態の情報を最大限に活用してシェーダソースコードが生成される。主導権を持つアプリケーションの受け持つ動作は相当簡略化されており、モデリングシステムはシェーダソースコードがいつ生成されるかを制御を実行するが、これは必要な場合のみに行う。
【００２１】
現在存在しているＪｔアトリビュートは、その背後で動作するグラフィックス・インターフェース（ここではＯｐｅｎＧＬ）に正確に適合する機能を持つ低レベル制御とみなされるものであり、「高次」の視覚的効果の制御はＪｔシェーダ・エフェクトのＡＰＩと類別されている。これを、例を使って説明する。テクスチャマッピング、環境マッピング、バンプ（あるいは一般）マッピングの３つの概念について考慮する。テクスチャマッピングはＪｔテックス・イメージ属性によって扱われる総括的な機能である。テクスチャマップには環境マップやバンプマップのような特定の高次での使用や目的はない。後者の二つは、テクスチャマッピングの一般的機能を利用して実行されるが、バンプマップおよび環境マップ自体がテクスチャイメージが正確にどのように、どんな目的で使用されるのか、暗示的な意味まで含んでいる。さらに、ＯｐｅｎＧＬグラフィックスのＡＰＩでは環境マッピングやバンプマッピングの概念を直接具体化することはできない。
【００２２】
つまり、テクスチャマッピングはモデリングシステムのＪｔアトリビュートにより管理される機能であり、環境マッピングおよびバンプマッピングはＪｔシェーダ・エフェクトにより管理される機能である。フォンシェーディング、シャドー生成、ペイントエフェクト等のその他の効果にも同様なことが言える。
【００２３】
Ｊｔシェーダ・エフェクトは以下の視覚的特徴に関する要求に応じることができ、これらすべては一体的な実行形態にまとめられる。モデル座標光源（現在蓄積されているＪｔステートから暗示的に）、ビュー座標光源（現在蓄積されているＪｔステートから暗示的に）、ワールド座標光源（現在蓄積されているＪｔステートから暗示的に）、複数のテクスチャマップ（現在蓄積されているＪｔステートから暗示的に）、環境マップ（球体または立方体、この特徴により、アクティブなテクスチャマップの中から環境マップとして適用されるべき一つが指定される）、バンプマップ（この特徴により、アクティブなテクスチャマップの中からバンプマップとして適用されるべき一つが指定される）、フォンシェーディングまたはグーローシェーディング、および影である。
【００２４】
Ｊｔシェーダ・エフェクトの属性がＪｔステートに蓄積される場合、Ｊｔステートにあるグラフィックの状態の表現すべてを用いて、どのようなグラフィックの特徴をサポートすべきかを認知する。Ｊｔステートがエンコードするものとしては、たとえば、存在する光源の数および種類、適用されているすべてのテクスチャマップおよびこれらに関連して、これらがどのように使用されるのかを示すテクスチャ環境、テクスチャ座標の自動生成、バンプマップとして指定されているテクスチャマップ、環境マップとして指定されているテクスチャマップおよび存在すればその反射率、材質の色（環境、鏡面反射、乱反射、放射）およびその関連するパラメタ（光沢、アルファ）がある。
【００２５】
このようなパラメタをいかようにも効果的に組み合わせることのできるシェーダは、現在使われているシェーダにはない。よってＪｔシェーダ・エフェクトはグラフィックな特性のリストを確認し、背後で動作するグラフィックス用ハードウェア上で最適に動作するよう特別に構築された１つまたはそれ以上のシェーダプログラムを生成する。
【００２６】
多様な実施例によりこのモデリングシステムのグラフィックス・ミドルウェアツールキットおよびＪＴファイルフォーマットに新たな機能性をもたらすことで、テクスチャ、材質、イメージ、影、とりわけシェーダについての新たな重要な能力に対応することができる。
【００２７】
ここでは、以下の定義及び用語が使用されるが、当業者であれば、ここにあげる特殊な定義ではなく一般的な意味が適用される場合はこれを判別できるであろう。
【００２８】
・シェーダ…ユーザにより定義可能なプログラムであり、対象アセンブリ言語で直接表現されている、あるいは高次形態で表現しコンパイルされる。シェーダプログラムにより、通常機能性が固定されているグラフィックパイプラインの一部を、ユーザ定義プログラムに置き換える。現在では、各ハードウェアメーカーより、処理された各頂点および／またはレンダリングされた各ピクセルに対してシェーダを動作させる技術が提供されている。
【００２９】
・バーテックスシェーダ…ＧＰＵに送出され処理される頂点それぞれに対して動作する、ユーザ定義の小型プログラム。バーテックスシェーダは頂点位置、垂線の変更、テクスチャ座標の作成、グーロー法による頂点のライティング等を行うことができる。
【００３０】
・ピクセルシェーダ…（より正確な名称は「フラグメントシェーダ」。）フラグメントは三角形の走査変換により生成されるがまだフレームバッファ中には配置されないピクセルの原形である。ハードウェアの走査変換ロジックにより生成された各フラグメントに対してユーザ定義の小型プログラムが動作する。フラグメントシェーダはフォンシェーディング、シャドーマッピング、バンプマッピング、反射マッピング等の高度な効果に対応することができる。
【００３１】
・Ｃｇ…ｎＶＩＤＩＡ社設計・推奨のＣ言語に似た高次シェーディング言語。
【００３２】
・ＯＧＬＳＬ…ＯｐｅｎＧＬ２．０バージョンの実装により可能となるＣ言語に似た高次シェーディング言語。Ｃｇに代わるベンダー中立、プラットホーム中立な言語として３Ｄｌａｂｓ社より設計・推奨。
【００３３】
・ＨＬＳＬ…マイクロソフト社とｎＶＩＤＩＡ社とで共同設計されたＤｉｒｅｃｔ３ＤグラフィックスＡＰＩのためのＣ言語に似た高次シェーディング言語。ｎＶＩＤＩＡ社およびＡＴＩ社対応。ＨＬＳＬは現在のところ実質的にはＣｇと同一である。
【００３４】
・テクスチャマッピング…形状を持つものへのテクスチャイメージ（下記参照）のマッピング技術。もっとも簡潔な形態としては、テクスチャマッピングは表面への壁紙の貼り付けに例えられる。テクスチャマップはテクスチャイメージとテクスチャ環境の２つに分けられるが、これを総合したものである。
【００３５】
・テクスチャイメージ…テクスチャマッピングに使用されるイメージであり、一般的には二次元のカラーイメージ。文字通り、テクスチャイメージはテクセル（ピクセルと比較のこと）を四角形に配置しただけのものであり、画像が形状上にどのようにマッピングされるかという情報は含まれても示唆されてもいない。
【００３６】
・テクスチャ環境…テクスチャイメージ（上記参照）がある形状上にどのようにマッピングされるかを正確に表す各属性を合成したものである。テクスチャ環境の代表的な要素としては、ラップ／クランプ・モード、ブレンディング・タイプ、自動テクスチャ座標生成機能等が含まれる。
【００３７】
・バンプマッピング…起伏の少ない荒い表面に多く見られる小規模なシェーディング効果を生じさせるために、記憶されている垂線マップに基づいてピクセルごとの垂線ベクトルを調整するテクスチャマッピング技術。
【００３８】
・ＮＶＩＤＩＡ社…カリフォルニア州サンタクララに本社を置くグラフィックスハードウェア・メーカー。Ｑｕａｄｒｏ（プロフェッショナル向け）ＧＰＵおよびＧＥＦｏｒｃｅ（コンシューマ向け）ＧＰＵを製造。現在、量産商品としてのグラフィックスハードウェア業界において市場および技術分野での優勢をＡＴＩ社（下記参照）と競い合っている。ＯｐｅｎＧＬのＣｇ高次シェーディング言語の発明者であり、Ｄｉｒｅｃｔ３Ｄ用ＨＬＳＬシェーディング言語の共同発明者。
【００３９】
・ＡＴＩ社…カナダ、オンタリオ州マーカムに本社を置くグラフィックスハードウェア・メーカー。現在量産商品としてのグラフィックスハードウェア業界において市場および技術分野での優勢をｎＶＩＤＩＡ社（上記参照）と競い合っている。ゲーム業界向けの供給が主だが、高性能なＯｐｅｎＧＬ製品をいくつか提供している。
【００４０】
・３Ｄｌａｂｓ社…クリエーティブ・テクノロジーズ・インコーポレーテッドの全額出資子会社であるグラフィックスハードウェア・メーカー。プロフェッショナル向けグラフィックスアダプタのＷｉｌｄｃａｔ、Ｒｅａｌｉｚｍシリーズを製造。ＯｐｅｎＧＬシェーディング言語（上記参照）の製作者。市場規模サイズが小さすぎる、あるいは特化しすぎてｎＶＩＤＩＡ社、ＡＴＩ社から注目を引くことのあまりない高性能、没入型アプリケーションの分野での事業で強い。
【００４１】
・ＧＰＵ…グラフィックスプロセッシングユニット。近年、グラフィックスハードウェアがよりプログラム可能なものとなったため、グラフィックスハードウェアを指すのに最もよく使われる用語となった。別の用語であるＣＰＵと比較のこと。
【００４２】
以下の文献を参照文献としてここに取り上げる。
“Ｔｈｅ  Ｃｇ  Ｔｕｔｏｒｉａｌ，”  Ｒａｎｄｉｍａ  Ｆｅｒｎａｎｄｏ  ａｎｄ  Ｍａｒｋ  Ｊ．  Ｋｉｌｇａｒｄ，  ｎＶＩＤＩＡ  Ｃｏｒｐｏｒａｔｉｏｎ，  Ａｄｄｉｓｏｎ  Ｗｅｓｌｅｙ  Ｐｕｂｌｉｓｈｉｎｇ  Ｃｏｍｐａｎｙ，  Ａｐｒｉｌ  ２００３；  Ｔｈｅ  ＯｐｅｎＧＬ  １．５  Ｓｐｅｃｉｆｉｃａｔｉｏｎ。
1181808443093_0.html
；
ＯｐｅｎＧＬ  Ｓｈａｄｉｎｇ  Ｌａｎｇｕａｇｅ  Ｓｐｅｃｉｆｉｃａｔｉｏｎ，  ｈｔｔｐ：／／ｗｗｗ．ｏｐｅｎｇｌ．ｏｒｇ／ｄｏｃｕｍｅｎｔａｔｉｏｎ／ｏｇｌｓｌ．ｈｔｍｌ；  ａｎｄ  ｔｈｅ  Ｃｇ  Ｔｏｏｌｋｉｔ  Ｕｓｅｒｓ  Ｍａｎｕａｌ，ｈｔｔｐ：／／ｄｅｖｅｌｏｐｅｒ．ｎｖｉｄｉａ．ｃｏｍ／ｏｂｊｅｃｔ／ｃｇ_ｕｓｅｒｓ_ｍａｎｕａｌ．ｈｔｍｌ；
【００４３】
Ｊｔシェーダ・エフェクト…Ｊｔシェーダ・エフェクトはこの特徴の最も重要なものである。Ｊｔシェーダ・エフェクトはＪｔアトリビュートから派生したもので、他のＪｔアトリビュートと同様、ＬＳＧにおいて広められる。
【００４４】
Ｊｔシェーダ・エフェクトは、アプリケーションに応じた特定の視覚的効果の表現を受け取り、この表現をシーングラフ上のある点で使用されているＪｔアトリビュートと組み合わせ、このような表現を実行時生成するＪｔシェーダへと変換して、利用された時に所望の視覚的効果を作り出すという高度なタスクも行う。
【００４５】
この方式は、Ｊｔシェーダ・エフェクトが「工場のような」オブジェクトとして存在する従来の方式より決定的に優れている。以下のケースを考える。あるシーングラフにおいて、そのルートノードにＪｔシェーダ・エフェクトを与え、デフォルトの一組の光もルートノードに与える。このとき、更なる光あるいはさらなるＪｔテックス・イメージがシーングラフ主部のどこかに加えられた場合を考慮する。このサブグラフにおいて、新たな光あるいはテクスチャを明らかにするため、実際に生成されるシェーダーソースは異なるものであらねばならない。
【００４６】
Ｊｔシェーダ・エフェクトが工場のようなオブジェクトとして実現されている場合、主導権を持つアプリケーションは、ＬＳＧ上に異なるシェーダーソースコードを必要とした２つの異なる状況があることを認識し、Ｊｔシェーダ・エフェクトを２回操作してその結果を適切にＬＳＧに塗布する。よって、主導権を持つアプリケーションはＬＳＧへの属性の変更を常時監視し、属性変更があった場合には任意の量のシェダーコードを再生成するという大きな負担を担っている。すなわち、この方法によれば、モデリングシステムの強力かつ不精な属性蓄積機構が少しも活用されていないことになる。
【００４７】
しかし、Ｊｔシェーダ・エフェクトがＪｔアトリビュートであれば、他のすべてのアトリビュートとともにＬＳＧに平塗りされる。前述のケースでは、従来の属性平塗り機構は自動的にＬＳＧへの属性変更を検知して、必要に応じてＬＳＧの対象箇所に属性を平塗りし直す。このような操作の当然の結果として２つの異なる属性状態がリーフレベルで現れる。元の方はルートノードから平塗りされた状態、変更を加えられた方は光あるいはテクスチャマップの追加により生じた状態である。そして、このような蓄積Ｊｔシェーダ・エフェクト属性はモデリングシステム状態の情報を十分に活用してシェーダソースコードを生成する。主導権を持つアプリケーションの仕事は比較的簡略化され、モデリングシステムはシェーダソースコードをいつ生成すべきかを制御するが、それは必要が生じたときのみである。
【００４８】
まず、シェーダ・エフェクトがどのように機能するかその働きを詳しく説明するために、必要とされる入力、および意図されている出力の説明から始める。
【００４９】
まず、シェーダ・エフェクトの本実施例に対する入力から説明する。当業者であれば、これ以外の視覚効果を表現するためにシェーダ・エフェクトにパラメタをさらに加えることも可能であることを理解できよう。Ｊｔシェーダ・エフェクトは、ここに述べる特定の入力に限られるものではない。これらの特定の入力は単に第１の実施のために取り上げたものである。
【００５０】
蓄積Ｊｔステート状態よりは、以下のものがある。
【００５１】
定義された光源データすべて。とりわけ、各光源に対しては以下のパラメータがある：
【００５２】
光源の種類（無限遠光、ポイント照明、スポットライト等）、
【００５３】
モデル座標、ワールド座標、あるいは視点座標等の光源座標系。このようなデータは光源がどの形状座標系において作用するのかを制御する。
【００５４】
光源位置（ポイント照明、スポットライトの場合）、
【００５５】
光源方向（無限遠光の場合）、
【００５６】
光源カラー情報。これには、乱反射色、鏡面反射色、環境色等のモデル化されたパラメタすべてが含まれる。
【００５７】
スポット方向、円錐角、円錐角に対して光強度分布を制御する減少パラメタ等のスポットライト・パラメタ（照明がスポットライトの場合）。
【００５８】
以下のような照明情報。
【００５９】
照明は有効か、
【００６０】
両面照明は有効か、
【００６１】
バックフェース・カリングは有効か、
【００６２】
定義されているアクティブなテクスチャすべて。定義されているアクティブな各テクスチャについて、以下のデータが用いられる。
【００６３】
テクスチャのチャネル番号。複数のテクスチャが同時に適用されることもある。その場合、小さいチャネル番号のテクスチャの上に大きいチャネル番号のテクスチャを重ねる。
【００６４】
テクスチャのＯｐｅｎＧＬテクスチャオブジェクト名もしくは関連するＯｐｅｎＧＬテクスチャユニット番号等、シェーダ内のテクスチャ自体へのアクセス方法。
【００６５】
テクスチャのｔｅｘｇｅｎ環境。これらの設定はプリセットした方式に基づいた頂点処理においてテクスチャ座標の自動生成に用いられる。
【００６６】
テクスチャ変換マトリックス。
【００６７】
シェーダ・エフェクト自体よりは、以下のものがある。
【００６８】
テクスチャマップがある場合、そのうちのどのテクスチャマップが環境マップとして指定されているか。これらのパラメタとともに、マッピングされた表面がどの程度、環境マップを反射するかを制御する反射率パラメタも指定されている。
【００６９】
テクスチャマップがある場合、そのうちのどのテクスチャマップがバンプマップとして指定されているか。これらのパラメタ以外に２つのパラメタが指定されている。１つはテクスチャマップがタンジェントスペース・バンプマップと解釈されるべきか、モデルスペース・バンプマップと解釈すべきかをコード化するフラッグである。タンジェントスペース・バンプマップは表面の固有の垂線に対する垂線ベクトルの摂動をコード化する。モデルスペース・バンプマップは、文字どおり所望の垂線ベクトルマップとして解釈され、特定の形状に対してユーザによって作られるものである。２つめのバンプに関するパラメタはタンジェントスペース垂線マップにおいての摂動が視覚的にどの程度の大きさなのかを調整する便利な手段として与えられている。
【００７０】
（ピクセルごとの）フォン・ライティングは有効か。
【００７１】
対象シェーディング言語は、ＧＬＳＬ、Ｃｇのどちらか。
【００７２】
共有のグラフィックス環境よりは、以下のものがある。
【００７３】
例としてグローバル環境光色を含むが、これに限定されることはない、グローバル照明モデル情報。
【００７４】
例として４ｘ４モデルマトリックス、ビューマトリックス、投影マトリックスを含むが、これらに限定されるものではない、ビューモードに関するパラメタ。
【００７５】
Ｊｔシェーダ・エフェクトからの出力として、シェーダパラメタのリストがある。これらのパラメタはホスト側グラフィックスシステムのグラフィックス、形状に関する必要量と関連していなければならない。
【００７６】
図５は、好適な一実施例によるバーテックスシェーダ生成処理のフローチャートである。
【００７７】
バーテックスシェーダ生成にあたり、Ｊｔシェーダ・エフェクトは大まかには以下のようなステップを実行する。
【００７８】
上記の情報を用いてシェーダのプリアンブルおよびパラメタ・リストを作成する（ステップ５０５）。シェーダパラメタが必要であるのは以下のものである。
【００７９】
受け取った頂点位置、垂線ベクトル、頂点色を入力。
【００８０】
入手可能かつアクティブなテクスチャ・チャンネルそれぞれについてテクスチャ座標を入力。
【００８１】
タンジェントスペース・バンプマッピングが選択された場合に必要となる頂点ごとのモデル座標タンジェントベクトルを入力。
【００８２】
モデルマトリックス、ビューマトリックス、投影マトリックスを入力。
【００８３】
アクティブなテクスチャ・チャンネルそれぞれのテクスチャマトリックスを入力。
【００８４】
グーロー・シェーディングが選択された場合、アクティブな光源すべてを十分表現するために必要なパラメタすべてを入力。
【００８５】
グーロー・シェーディングが選択された場合、現在の材質の特性（色、光沢等）を表現するために必要なパラメタすべてを入力。
【００８６】
テクスチャ・チャンネルが必要とするテクスチャ座標生成パラメタを入力。
【００８７】
送出される、変換後の頂点位置、未変換の頂点位置、転換後の垂線ベクトルを出力。
【００８８】
タンジェントスペース・バンプマッピングが選択された場合にバーテックスシェーダから送出されなければならないビュー座標タンジェントベクトルを出力。
【００８９】
変換後のテクスチャ座標を出力。
【００９０】
ライティングの演算を通して算出された色、そうでない場合は現在の頂点に関連する色を出力。
【００９１】
プログラムボディ・ソースコードを生成。
【００９２】
受け取った頂点および垂線を元のモデル座標からビュー座標系へ変換する（ステップ５１０）。
【００９３】
対応するｔｅｘｇｅｎ環境が必要とするのであれば、アクティブなテクスチャ・チャネルそれぞれについてテクスチャ座標を生成する（ステップ５１５）。
【００９４】
すべてのチャネルのテクスチャ座標を、対応するテクスチャマトリックスにより変換する（ステップ５２０）。
【００９５】
グーロー・ライティングが選択された場合、各光源に対し照明コードを生成する（ステップ５２５）。各光源よりもたらされる照明の効果を集計し、適切な出力シェーダパラメタに与える、グラフィックスパイプラインを通じて伝えられる。
【００９６】
グーロー・ライティングが選択された場合、上記の頂点ごとの照明コードの結果を、次の処理のためにフラグメントシェーダに送出する（ステップ５３２）。
【００９７】
フォン・ライティングが選択された場合、次の処理のために頂点ごとの色値をフラグメントシェーダに送出する（ステップ５３０）。
【００９８】
照明が全くなされない場合は、頂点ごとの色を最終色として送出する（ステップ５３５）。頂点ごとの色がなければ、代わりに現時点での材質の乱反射色を送出する（ステップ５４０）。
【００９９】
入力されたシェーダパラメタそれぞれに結び付けられる値等バーテックス・シェーディングコードを、当業者には周知であるようなホストシステムに適切な手段で、ホスト側のグラフィックスシステムに送出する（ステップ５４５）。
図６は好適な一実施例によるフラグメントシェーダ生成処理のフローチャートである。
【０１００】
フラグメントシェーダを生成するにあたり、Ｊｔシェーダ・エフェクトは大まかには以下のようなステップを実行する。
【０１０１】
上記の情報を用いて、シェーダのプリアンブルおよびパラメタ・リストを作成（ステップ６０５）。シェーダパラメタは以下のために必要である。このような入力の多くが、対応するバーテックスシェーダからの出力に直接結び付けられている。
【０１０２】
受け取った頂点位置、垂線ベクトル、頂点色を入力。
【０１０３】
入手可能かつアクティブなテクスチャ・チャネルそれぞれのテクスチャ座標を入力。
【０１０４】
タンジェントスペース・バンプマッピングが選択された場合は、ベクトルシェーダから要求される頂点ごとのビュー座標タンジェントベクトルを入力。
【０１０５】
モデルマトリックス、ビューマトリックス、投影マトリックスを入力。
【０１０６】
フォン・シェーディングが選択された場合、すべてのアクティブな光源を十分に表現するために必要なすべてのパラメタを入力。
【０１０７】
フォン・シェーディングが選択された場合、現時点での材質の特性（色、光沢等）を表現するために必要なすべてのパラメタを入力。
【０１０８】
アクティブなテクスチャ画像のハンドル（またはサンプラー）を入力。
【０１０９】
環境マッピングが選択された場合、環境マップの反射率を入力。
【０１１０】
タンジェントスペース・バンプマッピングが選択された場合、バンプマップに適用されるバンプの程度を入力。
【０１１１】
照明演算により算出された色、そうでない場合は現時点のピクセルに関連した色を出力。
【０１１２】
以下のようにプログラム本体のソースコードを生成する。
【０１１３】
バンプマッピングが選択された場合、指定されたバンプマップにアクセスするコードを生成し、それを用いて存在する垂線ベクトルを摂動させるか、直接新たな垂線ベクトルを生成する（ステップ６１０）。この摂動された垂線ベクトルは以下のように実行される照明演算に直接送り込まれる。
【０１１４】
フォン・ライティングが選択された場合、各光源に対して照明コードを生成（ステップ６１５）。各光源による照明の寄与を集計し、実行中の仮フラグメント色変数に代入されるが、これは後でテクスチャリングコードにより変換される場合もある。
【０１１５】
グーロー・ライティングが選択された場合、バーテックスシェーダから送出された頂点ごとの色値はそのままコピーされる（ステップ６２０）。照明がまったくなされていない場合は、頂点ごとの色がそのままコピーされる。
【０１１６】
テクスチャリングがある場合、要求されたテクセルにアクセスするコードを生成し、これをテクスチャブレンドモードにしたがって、上記のように演算された実行中の仮フラグメント色と混合する（ステップ６２５）。このステップには、環境マッピングされたテクスチャのシェーダソースコードの生成が含まれる。
【０１１７】
最終の実行中仮フラグメント色値は、次のグラフィックスパイプラインのバックエンドでの処理のため、適切な出力シェーダパラメタとして保存される（ステップ６３０）。
【０１１８】
入力されたシェーダパラメタそれぞれに結び付けられる値等バーテックス・シェーディングコードを、当業者には周知であるようなホストシステムに適切な手段で、ホスト側のグラフィックスシステムに送出する（ステップ６３５）。
【０１１９】
当業者であれば、本発明との使用に適しているすべてのデータ処理システムの全構造および動作は、簡単明解にするためにここでは描写、記載されていないことを認識するであろう。その代わりに、１つのデータ処理システムにおいて本発明に特異な部分のみ、あるいは本発明の理解に必要な部分のみを示した。データ処理システム１００の構成および動作について説明に加えなかった部分は、従来技術における多様な実施形態のいずれかに準拠すればよい。
【０１２０】
重要な点として、本発明はそれ自体で完全に機能するシステムという状況の中で説明されているが、当業者であれば、本発明の機構の少なくともいくつかの部分が、機械に使用され得るさまざまな形態の媒体に含まれるインストラクションという形で分配させることができるということを理解するであろう。そして、本発明は、そのような分配を実際に実行するために用いられる特定の種類のインストラクションまたは信号を保持した媒体がどんなタイプのものであるかに関係なく、等しく適用されることも理解するであろう。機械に使用されうる媒体としては、たとえばリードオンリーメモリー（ＲＯＭ）、消去可能で電気的にプログラム可能なリードオンリーメモリー（ＥＥＰＲＯＭ）等のハードコード方式の不揮発性媒体、フロッピーディスク、ハードディスクドライブ、コンパクトディスク・リードオンリーメモリー（ＣＤ−ＲＯＭ）、デジタルヴァーサタイルディスク（ＤＶＤ）等のユーザが記録可能な方式の媒体、デジタルおよびアナログのコミュニケーションリンク等の送信方式媒体がある。
【０１２１】
本発明の好適な一実施例を詳しく説明してきたが、当業者であれば、広範な形態での発明の精神および範囲から逸脱することなく、ここに述べた発明にさまざまな変更、置換、変形、改良を行うことができることを理解するであろう。
【０１２２】
本願のいかなる記載事項も、特定の要素、ステップ、機能が請求項の範囲に必ず含まなければならない不可欠な要素であるという意味にとられるべきではない。特許の主題の範囲は許可請求項によってのみ定義される。また、これらの請求項はいずれも、正確に「〜の手段（ｍｅａｎｓ  ｆｏｒ）」という語がその後に分詞形を伴う場合を除いては、米国特許法第１１２条６項の適用を意図したものではない。
【０１２３】
以下に述べる図１から図６およびこの特許明細書に示された本発明の原理を説明するために用いられている各実施例は、例証のためのみのものであり、いかなる場合においても発明の範囲を限定するものではない。当業者であれば、本発明の原理はどのような装置でも適切に構成されたものであれば実施されると理解するであろう。本出願の多様で新規な教示をここに挙げる好適な実施例を参照して示す。
【０１２４】
本発明およびその効果をよりよく理解するため、添付の図面を参照して説明する。この図面の同じ参照番号は同じものを示す。
【図面の簡単な説明】
【０１２５】
【図１】好適な一実施例を実例するデータ処理システムを表すブロック図である。
【図２】好適な一実施例によるＪｔアトリビュート、Ｊｔテックス・イメージ、Ｊｔシェーダの分類を示す図である。
【図３】好適な一実施例によるＪｔライトセットおよびＪｔドロースタイルの分類を示す図である。
【図４】好適な一実施例によるインターフェースの実施に必要な特定のタイプおよび一覧を説明するＵＭＬ図である。
【図５】好適な一実施例によるバーテックスシェーダのソースコード生成処理におけるフローチャートである。
【図６】好適な一実施例によるフラグメントシェーダのソースコード生成処理におけるフローチャートである。
【図１】
2008517403.tif 000003
【図２】
2008517403.tif 000004
【図３】
2008517403.tif 000005
【図４】
2008517403.tif 000006
【図５】
2008517403.tif 000007
【図６】
2008517403.tif 000008
【国際調査報告】
2008517403.tif 000009
2008517403.tif 000010
2008517403.tif 000011