タグ付けされた質問 「shaders」

グラフィックハードウェア上で実行され、シーンのレンダリング方法を高度に制御するコンピュータープログラム

5
カードゲームでカードのドロップシャドウ効果を描画するために、どのレンダリングテクニックを使用しますか?
どのような種類のシェーディングアルゴリズムを使用して、これらのような影を作成できますか? 私が作っているものは似ていますが、すべてOpenGLを使用した2D描画APIで行われているため、Z座標はありません。 さらに、手自体については、次のような陰影を付けたいと思います。 それに近い影付きの外観を実現する方法がわかりません。 カードの数は変化するはずであり、カードはテーブルに投げられるので、どのような種類のライトマップも使用できません。 どのような種類のアルゴリズムを検討する必要があります(実行する必要があるとわかっているぼかしは別ですか?) ありがとう 更新 2Dカードゲームを作っています。私は、カードからドロップシャドウのオフセットを少し追加します: 私がそれをすることを考えている方法は次のとおりです。 バックバッファと同じサイズのテクスチャを保持します。 そのテクスチャの間に合わせのカードとして暗い長方形を描きます。 そのテクスチャをぼかします。 そのテクスチャにカードを引きます。 カードをさらに照明します。 このテクスチャをバックバッファに描画します。 私の質問は: これは正しい方法ですか? テクスチャにレンダリングせずにそれを行う方法はあり ますか(バックバッファと同じ大きさのビットマップを保持します)? バックバッファサイズが最大テクスチャサイズを超えないと想定しても安全ですか?(つまり、バックバッファ が2000x3000 であれば、 そのサイズのビデオメモリにテクスチャを作成できると言っても安全ですか? ありがとう

2
DirectX11、複数のシェーダー定数バッファーを管理および更新するにはどうすればよいですか?
さて、定数バッファがパイプラインステージにバインドされて更新される方法を把握するのは大変です。DirectX11では、ステージごとに最大15個のシェーダー定数バッファーを使用でき、各バッファーには最大4096個の定数を保持できることを理解しています。ただし、定数バッファーと対話するために使用されるID3D11Buffer COMが、これらのバッファースロットを埋めるために使用されるメカニズム(またはハンドル)だけであるか、またはオブジェクトが実際に前後にプッシュされるバッファーデータの特定のインスタンスを参照するかどうかがわかりませんGPUとCPUの間。 このトピックに関する混乱は、2つの異なる定数バッファーを使用している問題の原因だと思います。 シェーダーコードの例を次に示します。 cbuffer PerFrame : register(b0) { float4x4 view; }; cbuffer PerObject : register(b1) { float4x4 scale; float4x4 rotation; float4x4 translation; }; コードの編成方法では、カメラはフレームごとの関連データの更新を処理し、GameObjectsはオブジェクトごとの独自のデータを更新します。両方のクラスには、これを行うために使用される独自のID3D11Bufferがあります(ハブアーキテクチャを使用しているため、1つのGameObjectクラスが、世界中のインスタンス化されたGameObjectsのレンダリングを処理します)。 問題は、スロットに応じて一度に1つしか更新できないことです。更新順序は、1つのバッファーが満たされ、もう1つのバッファーがゼロになると仮定しています。 これは基本的に私のコードです。両方のクラスは同一の更新ロジックを使用します。 static PerObjectShaderBuffer _updatedBuffer; // PerFrameShaderBuffer if Camera class _updatedBuffer.scale = _rScale; _updatedBuffer.rotation = _rRotation; _updatedBuffer.translation = _rTranslation; pDeviceContext->UpdateSubresource(pShaderBuffer, 0 , 0, &_updatedBuffer, 0, …

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のシェーダーに慣れていないので、適切に機能させる方法がわかりません。

2
ロールシャッハインクブロット(別名心理学テスト写真)シェーダー
(ソース:bonnefil.com) この壮大なパターンを自分のゲームに入れたいです。これまでのところ、私は理解しました... 片側を描画してから、左右に2回レンダリングします。 このパターンを片側にレンダリングするにはどうすればよいですか?うーん... 私は助けが必要です。 このためのシェーダーの作成に関する洞察が必要です。 シェーダーフィッティングタスクではないと思う場合は、できれば代替ソリューションをお知らせください! ただし、GPUを使用せずにこれを達成する方法はありません。(rorscach picの準備された写真の束を保存することを提案しない限り)

4
Unity 5のガラス素材
Unity 5でガラス素材を作る方法を知っている人はいますか? 金属や画像のテクスチャーは作成できますが、ガラス素材の作成方法がわかりません。 Googleで検索してもUnity 5については何も得られないので、かなり簡単にできるはずです。 このようなシャワードアと飛行機のガラス用です:

4
OpenGLでマルチパスシェーダーはどのように機能しますか?
Direct3Dでは、プログラム内でパスを文字通り定義できるため、マルチパスシェーダーの使用は簡単です。OpenGLでは、シェーダープログラムに必要な数の頂点シェーダー、ジオメトリシェーダー、およびフラグメントシェーダーを与えることができるため、もう少し複雑に思えます。 マルチパスシェーダーの一般的な例は、トゥーンシェーダーです。1つのパスは実際のセルシェーディング効果を実行し、もう1つのパスはアウトラインを作成します。2つの頂点シェーダー「cel.vert」と「outline.vert」、および2つのフラグメントシェーダー「cel.frag」と「outline.frag」(HLSLで行う方法と同様)がある場合、どうすればよいですかそれらを組み合わせてフルトゥーンシェーダーを作成しますか? マルチパスGLSLシェーダーの背後にある理論を知りたいだけなので、これにジオメトリシェーダーを使用できると言ってほしくありません;)
12 opengl  shaders  glsl 

2
GLSLで効率的なブルームシェーダーを作成するにはどうすればよいですか?
GLSLを使用してブルームエフェクトのレンダリングに関連するリソースをネットで検索しましたが、何も見つかりませんでした。Philip RideoutのWebサイトのチュートリアルは優れていますが、私のNvidia GPUでのパフォーマンスは非常に劣っています。 誰もこの問題にどのようにアプローチし、ブルーム効果のかなり効率的な実装を構築するべきかについて私を導くことができますか?
12 shaders  glsl  bloom 

3
HLSL半透明プラスチックシェーダー
私はシェーダーを作成して、内部に色のついた光を持つ白いプラスチックのオブジェクトを複製しようとしています。半透明のシェーダーを使用してオブジェクト内にライトを配置すると、ライトが透けて見えるようになるか、ライトの効果を偽装するシェーダーを使用します。 効果は、これらの写真のようなランプシェードを通過する光のようなものです。 理想的には、光の強度と色を制御して、いくつかの素敵な明るい蛍光色を脈動させて回転させることができます どこから始めればいいのかわかりませんが! 私の質問は、そのようなシェーダーを作成できるように研究すべきテクニックを知っている人や、出発点として使用できる同じ/類似のシェーダーの例を持っている人はいますか?または、仕事をするかもしれないシェーダーを提供したい場合でも
12 graphics  shaders  hlsl 

3
画面に自然の雨粒を作るにはどうすればよいですか?
画面にメタボールとトレイルを配置して雨の効果を落とそうとしています。shadertoyに手掛かりが見つかりましたが、実装方法がわかりませんでした。 https://www.shadertoy.com/view/ltffzl 残念ながら、これには多くの数学計算があり、ラグを生成するため、単一で使用することはできません。明らかに、テクスチャを使用する必要がありますが、どのようにしてトレイル効果を持たせることができますか? 私のアイデアは、ドロップにテクスチャとトレイルレンダラーを使用することですが、メタボールエフェクトをどのように使用できますか? 更新 この記事でメタボールを実装できました https://github.com/smkplus/RainFX/tree/master トレイルについてはまだ考えていません


1
GLSLフラグメントシェーダーでこの種のリップルを実装する方法は?
だから私はすでに反射部分を実装しました: uniform sampler2D texture; uniform vec2 resolution; uniform vec3 overlayColor; void main() { vec2 uv = gl_FragCoord.xy / resolution.xy; if (uv.y > 0.3)// is air - no reflection or effect { gl_FragColor = texture2D(texture, vec2(uv.x, uv.y)); } else { // Compute the mirror effect. vec4 color = texture2D(texture, vec2(uv.x, 0.6 …

1
グラフベースのマテリアルシステムで、さまざまな入力および出力タイプをどのようにサポートできますか?
私のようなどのように材料系のまわりで私の頭をラップしようとしているこの、これは実装されています。これらの強力でユーザーフレンドリーなグラフのようなシステムは、プログラマーと非プログラマーの両方がシェーダーをすばやく作成できるようにする方法として比較的一般的であるようです。ただし、グラフィックスプログラミングの私の比較的限られた経験から、私はそれらがどのように機能するか完全にはわかりません。 バックグラウンド: そのため、以前に単純な OpenGLレンダリングシステムをプログラミングしたことがある場合は、通常、手動で作成した静的GLSLファイルからシェーダーを読み込み、コンパイル、リンクするMaterialクラスを作成します。また、通常、このクラスを、GLSLの統一変数にアクセスするための単純なラッパーとして作成します。簡単な例として、基本的な頂点シェーダーとフラグメントシェーダーがあり、テクスチャを渡すための追加の均一なTexture2Dがあるとします。私のMaterialクラスは、これら2つのシェーダーをマテリアルに読み込んでコンパイルし、その時点から、そのシェーダーのTexture2Dユニフォームを読み書きするための単純なインターフェイスを公開します。 このシステムをもう少し柔軟にするために、私は通常、任意の名前/タイプのユニフォームを渡すことができるようにシステムを記述します[ie:SetUniform_Vec4( "AmbientColor"、colorVec4);]。これは均一な材料中に存在する場合、「colorVec4」と呼ばれる特定の4DベクトルにAmbientColorを均一に設定します。]。 class Material { private: int shaderID; string vertShaderPath; string fragSahderPath; void loadShaderFiles(); //load shaders from files at internal paths. void buildMaterial(); //link, compile, buffer with OpenGL, etc. public: void SetGenericUniform( string uniformName, int param ); void SetGenericUniform( string uniformName, float param ); void SetGenericUniform( …


1
頂点シェーダーとフラグメントシェーダーの速度を個別にプロファイルするにはどうすればよいですか?
頂点またはフラグメントシェーダーがレンダリングパイプラインのボトルネックになっているかどうかを確認する方法を知りたいのですが。 OpenGLコマンド間のクロックチェックポイントを取得するためにターゲットを使用glQueryCounterすることについて読みましたGL_TIMESTAMPが、これらは異なるタイプのシェーダーを区別しません。 たとえば、GPUの1つのフレームのレンダリングに8ミリ秒かかった場合、頂点シェーダーに7ミリ秒かかり、フラグメントシェーダーに1ミリ秒かかったと言えますか?

1
テッセレーションとジオメトリシェーダー
私が間違っている場合は修正してください。ただし、ジオメトリシェーダージョブとテッセレーションシェーダージョブはどちらも、グラフィックパイプラインで頂点を生成するためのものです。私が知りたいのは、それらがどのように違うのか、そしてどちらをいつ使うべきかということです。

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