固定機能とシェーダー:初心者向け?


16

現在、私は大学でコンピューターサイエンスを学んでいます。小さなゲームを作成するために、ある時点で既存のエンジンを利用することを計画していますが、今の私の目標は、基礎、つまり3Dプログラミングを学ぶことです。私はすでにDirectXとOpenGLの選択に関するいくつかの研究を行ってきましたが、それから生まれた一般的な感情は、トレーニングホイールプラットフォームとしてOpenGLまたはDirectXを選択するかどうか、多くの知識が他のプラットフォームに移転可能であるということでした。したがって、OpenGLはより多くのシステムでサポートされているため(おそらく、学習対象を選択する愚かな理由)、OpenGLを最初に学習することにしました。

OpenGLを習得するというこの決定を行った後、私はさらに調査を行い、これまで何らかの形で気づかなかった二分法、つまり固定機能OpenGLと最新のプログラマブルシェーダーベースのOpenGLを発見しました。最初は、シェーダーベースのOpenGLを学ぶことを選択するのは当然の選択だと思ったのは、それが今日の業界で最も一般的に使用されているからです。しかし、その後、ここにあるJason L. McKessonによる非常に人気のあるLearning Modern 3D Graphics Programmingに出会いました:http : //www.arcsynthesis.org/gltut/

私は入門書を読み、「この本について」セクションで、著者は次のように述べています。

「まず、このアプローチで学んだことの多くは、ユーザーがプログラマビリティで解決しなければならないグラフィックの問題に遭遇した場合、必然的に放棄されなければなりません。

同時に、次のように述べることにより、固定機能が初心者にとってより簡単で迅速な学習曲線を提供するというケースも作ります。

「一般的に、固定機能パイプラインを使用して新人グラフィックプログラマーに教えるのが最も簡単であると考えられています。」

当然、どのパラダイムを学ぶべきかについて私が対立する理由を見ることができます:固定機能の方法の学習(そしてその後の学習)に多くの時間を費やしますか、それともシェーダーから始めることを選択しますか?私の主な関心事は、現代のプログラマブルシェーダーでは、プログラマーが固定機能パイプラインを既に理解していることをどういうわけか必要とすることですが、私はそうではありません。

TL; DR =意欲的なゲームグラフィックプログラマーとして、固定機能または最新のシェーダーベースのプログラミングを通じて3Dプログラミングを学ぶことは私の一番の関心事ですか?


これにも同様の質問がいくつかあります
...-notlesh

「それと同時に、固定機能が初心者にとって、より簡単でより迅速な学習曲線を提供するというケースも作ります。」私は興味があります。それはどのように正確にそのケースを作りますか?引用文には明確に「一般的に最も簡単だと考えられている ...」(強調が追加されている)ためです。のように、それは真実であると考えられるかもしれませんが、それが真実であるという意味ではありません。
ニコルボラス

ええ、それは言いにくい言い方でした。
ロブ・ヘイズ

固定機能パイプラインはOpenGLとDirectXの両方で廃止されているため、時間を無駄にしないでしょう。基本的なシェーダーは非常に単純で、確かに、レンダリングコンテキストを機能させるために十分に理解することほど複雑ではありません。
3Dave

回答:


30

固定機能のものから始める方が簡単だという議論は買わない。固定機能を使用すると、少ないコードで特定の処理を実行できる場合があります。たとえば、固定機能OpenGLでは、実行glEnable(GL_LIGHTING)や他のいくつかの呼び出しによって非常に基本的な照明/シェーディングを取得できます。問題は、ピクセルごとの照明、たとえば頂点ごとの照明ではなく、少し異なるものが必要になるとすぐに、固定機能のものを完全に放棄し、使用している固定機能の両方を実装するシェーダーを作成する必要があることです前に加えて、変更したいものは何でも。

ずっとシェーダーを使用する方が簡単で混乱が少ないようです。シェーダーには、ロードしてコンパイルする必要のある別のソースファイル、パラメーターを検索して設定するための追加のC呼び出しなどがあるため、もう少しセットアップ作業が必要です。しかし、シェーダーを実行したら、それが最も簡単ですいくつかの異なる効果をコーディングするには、異なるアイデアを試してみてください。また、固定機能システムの限界がどこにあるのか、そしてそれが望むことを行うことができるかできないのかを気にする必要はありません。シェーダーは、パフォーマンスとメモリの通常の制限を法として、コードを記述できるあらゆることを実行できます。


クール、対応してくれてありがとう。私はほとんどの場合、シェーダーにちょうどいい結果になるでしょう。
ロブヘイズ

3
+1-「Learning C ++」対「Learning BASIC」のようなものです。C ++を習得するには時間がかかりますが、長期的にはより多くのことを学べます。
ジョナサンディキンソン

3
opengl-tutorial.orgをお勧めします。このサイトでは基本を非常にうまく説明しており、シェーダーのみを使用しています。
Exilyth

3

GLUTの固定機能から始めたいと思います。これについてはあまり言いませんが、シェーダーの背後にあるアイデアはかなり複雑であり、必要な知識は基本的な3Dプログラミング(つまり、頂点の作成と変換行列など)です。シェーダーを使用して台無しにできる場所は他にもたくさんありますが、コーディングにはさらに多くのものがあります。

私のチュートリアルチェックアウト、およびこれらlighthouse3dものを


2

2つ目はシェーダーです。それは本当にないことをはるかに困難に設定すると、あなたはその最初のハードルを渡すときには、あなたの指先でフルパワーを持っています。

要するに、シェーダープログラミングは、大学の本やグラフィックスの講義で見られる数学の方程式とより密接に一致することがわかります。


0

固定機能パイプラインをプログラムのバックボーンとして使用することをお勧めします。純粋なシェーダーの代わりにそれを使用して何かを表示する方が簡単だと思います。その後、頂点または法線を台無しにしていないことがわかったら、ゆっくりと、しかし確実に、シェーディングの世界へと進みます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.