タグ付けされた質問 「graphics-programming」

コンピュータ画面上の情報の視覚的表現に関連するプログラミング。

3
このフラットシェードの外観の再作成
短くしておきます。下の画像に描かれている効果をどのように達成しますか?リアルタイムで実行することは可能ですか?一見シンプルに見えますが、おそらくそうではありません。この外観を実現するためのシェーダーのプログラミングに関する詳細情報を取得するために検索できるキーワードはありますか?ありがとう。

4
シェーダーコードのデバッグ?
ゲームエンジンを作成しています。パースビューカメラを使用すると、黒い画面が表示されます。共有するコードがたくさんあるため、これがなぜなのかを正確に尋ねるつもりはありません。 問題は、デバッグ方法がわからないことです。変化するのは投影行列だけです。投影行列が正常に見える場合、なぜ機能しないのかわかりません。理想的には、シェーダーが計算を行ったときにさまざまな値を出力しますが、GLSLにはprintf()関数がありません。 だから私の質問は次のとおりです。どうすれば問題をデバッグできますか?私が考えることができる唯一のことは、クライアント側でできる限り多くの値をチェックし、順列でプログラミングすることですが、私はそれを行ってどこにも行きませんでした。ビデオカードで何が起こっているかを確認する方法はありますか?私が使用できる完全に異なる技術はありますか? 私はGLSLバージョン420(およびそのバージョンに固有の機能)を使用しているため、2010年に最後に更新されたことを考えると、glslDevilはオプションではないと思います。 編集 まったく関係のないデバッグによって問題を解決できました。

1
アルファブレンドスプライトを通してシルエットを見るシェーダー
Unityで、これらの例のようなシースルー効果を達成したいと思います。 私の特定のシナリオには、いくつかの要件があります。 スプライトはアルファブレンディングを使用しており、スプライトには透明な領域があります。 キャラクターを遮る2種類の要素があります。1つはシルエット効果を作成し、もう1つは通常のように動作する必要があります。 シルエットを作成する要素を遮蔽するには、ZWriteを有効にし、そうでない要素では無効にします。 キャラクターについては、シェーダーのキューをtransparent + 1に設定して、このパスを追加しました。 Pass { ZTest Greater Lighting Off Color [_Color] } そして、効果は部分的に機能します: シルエットは、透明な部分も含めて、キャラクター全体に描かれます。透明な部分はシルエットを作成しないでください。 シルエットは、スプライトの一部が透明であっても、キャラクターがスプライトの背後にあるときに作成されます。スプライトの透明な部分の後ろにいると、シルエットが作成されません。 キャラクターは、要素の後ろにある場合でも、残りの要素の前に表示されます。これは、キューをTransparent + 1に設定しているためだと思います。ただし、透明のままにすると、キャラクターは正しい順序で描画されますが、シルエットは表示されません。 私は誰かが私に与えたこれらのヒントに従おうとしましたが、私はそれを機能させることができません: 1)スプライトをレンダリングするパスはそのままにします。 2)zバッファーに書き込むパスを追加しますが、clip()を使用してアルファに基づいてピクセルを破棄するシェーダーがあります。z-bufferを使用して、MSAAおよびalpha-toカバレッジを使用せずにソフトzテストを作成することはできません。その品質は素晴らしいものではありませんが、あなたができる最善の方法です。より高速な代替手段は、パターンまたはノイズディザーです。スプライトのエッジがかなり鋭い場合は、古き良きしきい値を使用します。 3)zテストを使用してオクルージョンカラーを描画するオクルード可能なオブジェクトに3番目のパスを追加し、最終パスとして描画されることを確認します。 私は、特にUnityのシェーダーに慣れていないので、適切に機能させる方法がわかりません。

1
グラフィックスハードウェアについて学ぶための優れたリソース[非公開]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 閉じた2年前。 グラフィックハードウェア(および関連する低レベルソフトウェア)の優れた学習リソースを探しています。基本的に、実装方法の観点からopengl / direcx APIレイヤーの下で何が起こっているのかをもっと知りたいと思います。 レンダリングパイプラインのさまざまな段階(表示、投影、クリッピング、ラスタライズなど)で原理的に何が起こるかについてはよく知っています。 私の目標は、次の種類の問題に関してグラフィックス/シェーダープログラミングを行う際に、トレードオフと潜在的な最適化について、より多くの情報に基づいた意思決定を行えるようにすることです。 バッチング カリングを表示 オクルージョン 描画順序 状態変化の回避 三角形対ポイントスプライト テクスチャサンプリング 等 基本的に、グラフィックプログラマがより効果的になるために最新のグラフィックハードウェアについて知る必要があるもの。 特定の最適化手法を本当に探しているのではなく、より効率的なコードを自然に書くために、より一般的な知識が必要です。

1
地形で崖の面を表す方法は?
ゲームで地形をプログラムで表現するための最良の方法を見つけようとしています。ハイトマップ(または等間隔の頂点のグリッド)を使用して地形の表面を表現し、スプラットマップを使用して滑らかなテクスチャリングを可能にすることを検討してきました。これは完全に滑らかな地形では機能しますが、問題は崖と鋭い崖面をどのように表現するかです。 崖自体は、他の地形とは異なる方法でレンダリングする必要があります。たとえば、崖の前面に異なる(伸びていない)テクスチャを表示する必要がありますが、これにスプラットマップを使用した場合、崖のテクスチャが透けて見えるほどの崖の面を持つことは不可能です地面から完全に分離されています。 写真は千の言葉を言うので... 崖や地形の高さの他の急激な違いを保存および/またはレンダリングする一般的な方法は何ですか?

3
粒子を滑らかなブロブとして描く
ゲーム/グラフィックスの開発は初めてで、パーティクル(2D)で遊んでいます。液体/水のように、粒子を互いにブロブとして近づけたい。ブロブが滑らかではない(そして大きすぎる)ため、大きな円を重ねて描画したくありません。物理学はあまり知りませんが、表面張力に似たものが欲しいと思います。 stackexchangeやGoogleで何も見つかりませんでした(正しいキーワードがわからないかもしれません)。これまでに2つの可能な解決策を見つけましたが、アルゴリズムに関する具体的な情報を見つけることができません。 それらの1つは、粒子の凹包を計算することです。等価クラスを作成することにより、ブロブを計算できます(「互いに近い」関係に)。不思議なことに私は見つけることができませんでした任意の凹面船体を計算する方法を説明するアルゴリズムを。多くの投稿(およびstackexchange間)は、これを行うライブラリまたは商用製品にリンクしています(C#で動作するにはライブラリが必要です)が、アルゴリズムはありません。また、このソリューションには、粒子の円に問題があり、中央の空きスペースが検出されない場合があります。 凹型船体の研究中に、アルファシェイプと呼ばれるものを見つけました。これはまさに私がやりたいことのように思えますが、凹型船体と同じように、実際にどのように機能するかを説明する情報源は見つかりませんでした。プレゼンテーション資料をいくつか見つけましたが、先に進むのに十分ではありません。私以外の誰もが知っている大きな秘密のようなものです:-/ 凹型の船体またはアルファ形状を計算した後、ベジエ曲線にして滑らかで素敵なものにします。 私のアプローチは少し複雑すぎると感じていますが、おそらくこれを間違った方法で解決しようとしていますか?あなたが私の問題に対する他の解決策を提案するか、私が行方不明になっている部分を説明できるなら、私はとても幸せで感謝します:-) ありがとう。

7
シンプルなパーティクルエフェクトを作成する最速の方法
ゲームで地獄のようにスパムされる本当にシンプルなパーティクル効果を作成する最速の方法を探しています... 基本的に、私のゲームはほとんどが線でできているvectrexゲームのように見えます。 いくつかのポイントを移動してGL_Pointでレンダリングするよりも高速なものがありますか?

1
画面スペースの派生物とは何ですか、いつ使用しますか?
私が見るddxとddyGLSLの機能をし、HLSL同等物は、すべての今してシェーダコードに出てきます。私は現在それらを使用して、接線または接線なしでバンプマッピングを行っていますが、基本的にコードをコピーして貼り付けました。これらの関数が実際に何であるか、それらが何をするのか、いつ使用するのかを理解できません。 だから質問: スクリーンスペース微分関数とは何ですか? これらの関数は何をしますか?入力値と出力値 最も一般的に使用される効果は何ですか? これらの機能に目を向けるには、どのような効果が必要ですか?

2
特定のピクセルを書き込まないようにフラグメントシェーダーに指示するにはどうすればよいですか?
WebGLでは、フラグメントシェーダーによって処理される画面スペースクワッドを送信しますが、フラグメントシェーダーに特定の条件下でのみピクセルを書き出させます(たとえば...円の中にあるか、ピクセルは、曲線方程式などで定義された半空間の正の側に属しています。 フラグメントシェーダー内で「ピクセルを書き込まない」と言うことは可能ですか? これは、アルファブレンディング、これを最初にレンダリングし、ピクセルを描画したくない場所に背景色を配置したり、深度バッファやステンシルバッファでいくつかのトリックを行うなど、他のさまざまな方法を使用して実現できることを知っています。また、レンダリングしたいものと一致するジオメトリの束を作成できることも知っています。 フラグメントシェーダーにピクセルをまったく書き込まないように選択する方法はありますか?

2
デカールの実装
デカールに関する情報を見つけるのに問題があったので、この質問が他の人の役に立つかもしれません。この実装は、フォワードレンダラー用です。 デカールの実装が正しいかどうか誰かが確認できますか? 共通空間での投影ボリュームを定義する任意の次元の立方体を定義します。定義されたキューブとの三角形の交差をチェックして、投影が影響する三角形を受け取ります。 これらの三角形をクリップして保存します。 次に、マトリックストリックを使用して、投影するテクスチャを参照する保存された三角形のUV座標を計算します。 これを行うには、共通空間での立方体の高さ、幅、奥行きを表すベクトルを取り、左下隅が原点になるようにします。 これをi、j、kの単位ベクトルとして行列に入れ、立方体の移動を設定してから、この行列を逆にします。 保存した三角形の頂点にこの行列を掛けます。これにより、UV座標として使用する0から1のサイズの立方体内の座標を取得できます。 このようにして、投影している元の三角形があり、それらのUV座標があります(UV座標は、投影しているテクスチャを参照しています)。 次に、保存した三角形をシーンに再レンダリングすると、投影された画像で投影領域が上書きされます。 今、私が答えを見つけることができなかった質問。最後の点は正しいですか?私はソフトウェアクリッピングを行ったことがありませんが、精度に制限があるため、投影されたテクスチャに対してzファイティングが発生する可能性があるため、エラーが発生しやすいようです。また、UV座標を正しく取得する方法はありますか?

1
OpenGLでは、「ゼロ状態」レンダリングとは何ですか?
最近の就職の面接で、私は自分の近代的なOpenGLと頂点バッファーオブジェクトを使用したレンダリングについて学びました。なぜなら、私の大学では、即時モードレンダリングを使用する固定関数パイプラインしか教えていないためです。インタビュアーは、VBOが「ゼロステートレンダリング」と呼ばれるものに効果的に置き換えられたと私に簡単に割り込んだので、続けます。 すぐに別のテーマに移り、面接官は忙しいスケジュールのために最後に時間切れになったので、私は後でそれが何を意味するかについて尋ねるのを忘れていました。 その後、オンラインで「OpenGLゼロ状態」と「ゼロ状態レンダリング」を検索しましたが、関連すると思われる結果は得られませんでした。ほとんどがOpenGL状態に関するものだけです。 問題の組織は非常に研究に基づいているため、現在ほとんどサポートされていない拡張機能である可能性がありますか、それとも最先端の性質のために使用される用語が異なる可能性がありますか?

2
レンダリング前のオブジェクトの並べ替え
私はシーングラフを実装しようとしています。出会ったすべての記事で、オブジェクトの並べ替えについて話しています。たとえば、オブジェクトを「マテリアル」で並べ替えます。さて、私が座ってそれを実装し始めるまで、これは当然のことと思っていました。しかし、今私はソートが実際に何を変えるのかと思っていますか? 私のエンジンには、UBOのマネージャーがいます。プログラム間で共有されるデータを保存するためにそれらを使用します。現時点では、時間、カメラ、投影行列、ライトのみが関係します(影響するライトの管理については心配していません) ATMを対象としています)。 ここで、各モデルについて、モデルをワールドマトリックスユニフォームに変更する必要があります。並べ替えによって変更されることはありません。それで、このマトリックスを変更することから、各オブジェクトのマテリアルを設定することへのジャンプは悪いのでしょうか? パイプラインで何かを変更するたびにフラッシュする必要があり、それがパフォーマンスの問題を引き起こす可能性があることをどこかで読んだことを漠然と覚えています。しかし、描画を呼び出すたびに、とにかくモデルをワールドマトリックスに設定しているので、これについて心配することにはどのような意味がありますか? ところで、ユニフォームを変更してglBufferSubDataを呼び出す方がコストが高い(または低い)かどうかについての情報があります。

1
ゲート内のクロノトリガーからの移行を再現するグラフィックプログラミング
最近このゲームを始めましたが、これは私の興味のピークになりました 12:08から動きの遷移を見ることができます そこでは興味深い数学がいくつか行われているようです。2つの異なるビューが組み合わされているように見えます。青い波紋が最初に背景にレンダリングされ、次に紫色の振動波が何らかの疑似3D投影でレンダリングされているように見えます。 彼らがこの結果にどのように正確に到達したかは私を超えており、好奇心は私を良くしています。 これがどのように行われるかを多くの人が知っているとは思いませんが、だれかが大規模なグラフィックプログラミングを行った場合、おそらく彼らは私を啓発するでしょう。

1
グラフィックプログラミングに関する本はありますか?
グラフィックプログラミングのボトムアップアプローチを取る本を探しています。つまり、2Dフィルタリングから始まり、通常のマッピングに移行してから、アンビエントオクルージョンなどに移行します。 ゲーム開発でここ数年怠惰で、常にこれを処理するエンジンを使用していたので、質問します。過去に借りてきた不可解なシェーダーに頼るのではなく、ゲームのシェーダーをいくつか書き始めたいです。これに関する非常に強い知識が役立つと思います。私はボトムアップの学習者なので、助けてください! GPU Gemsシリーズは素晴らしいと思いますが、私が望んでいるボトムアップアプローチというより、料理の本のようです。前の章の理論に基づいて構築するのではなく、クックブックからより多くの理論を取得する傾向があります。 編集:できればあなたが読んだもの!私はこれについてamazonを検索できますが、そのように公平なレビューを得るのは難しいです。

3
XNAのシーンマネージャーに適したデータ構造ソリューションは何ですか?
私は自分のゲームプロジェクトでXNAで遊んでいます。以前にOpenGLに触れ、Ogreで少し作業していたので、同じ概念をXNAで機能させようとしています。 具体的には、階層変換、錐台(場合によってはオクルージョン)カリング、および透明度オブジェクトのソートを処理するシーンマネージャーをXNAに追加しようとしています。 私の計画は、階層変換とライティングを処理するツリーシーンマネージャを構築し、錐台のカリングとオブジェクトの並べ替えにOctreeを使用することでした。問題は、透明度を正しくサポートするためにジオメトリの並べ替えを行う方法です。ポリゴンごとに並べ替えると非常にコストがかかるため、Ogreで管理することさえできないほど高価です。しかし、Ogreからの静止画像は正しく見えます。 それを行う方法、および使用するデータ構造とその機能に関するアイデアはありますか?私は周りの人々が使っていることを知っています: オクトリーズ Kdツリー(GameDevフォーラムの誰かが、これらはOctreesよりもはるかに優れていると言っています) BSP(ポリゴンごとの順序を処理する必要がありますが、非常に高価です) BVH(錐台およびオクルージョンカリングのみ) ありがとうございました トゥヌズ

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