タグ付けされた質問 「shadow-mapping」

1
シャドウマッピングが標準である理由
私は貿易のプログラマですが、ゲーム開発にはほとんど触れていません。私はしばらくの間この質問をしてきましたが、今はゲーム開発を検討しているので、尋ねるのに良い時期だと思いました。 ゲームがシャドウを作成するために、シャドウマッピングが排他的な方法であるように見えるのはなぜですか?率直に言って、ひどく見えます。シャドウ設定が最大化された最新のゲームでさえ、非常に注意をそらすギザギザのブロックyシャドウがあります。 11年前に作成されたDoom 3は、この質問が投稿された同じ週にリリースされたAAAゲームを含む、これまでに見たどのシャドウマップの実装よりもはるかに優れたシャドウボリュームを使用しました。Doom 3のサードパーティ製のMODは、シャドウのエッジをさらに柔らかくし、視覚的な印象をさらに高めました。 シャドウボリュームなどの実装には、何らかの技術的な問題や制限がありますか?シャドウマップの実装は非常に簡単で、開発者は他に何も考慮していませんか? このテーマについて私が見つけた唯一の情報は、ボリュームを構成するポリゴンが非常に大きくなり、要求が厳しくなることです。おそらくシャドウボリュームにははるかに高いシステム要件がありますが、その場合、2004年にシャドウボリュームを使用することでどのように逃げましたか? この質問は、シャドウマッピングとシャドウボリュームに固有のものではありません。それらは完全な製品で使用された2つだけであり、他のテクニックに関する多くの情報を見つけることができませんでした。

1
シャドウマップアーティファクト
3D XNAゲームに影を追加してみたい。1つのライトと1つのカメラでテスト環境をセットアップしました。しかし、私は自分のアプローチでアーティファクトに直面しています。 私はhttp://pastebin.com/zXi0hmsUのシェーダーコードを使用して最終結果をレンダリングし、http://pastebin.com/rY4Gcj9Nを使用してシャドウマップを作成しています。コードは非常に単純で、ライトの観点から深度マップを生成し、それをカメラ空間に投影し、オクルージョンをチェックする必要があります。 しかし、ほとんどの角度から私はかなりresultsい結果を得ています シーンは、いくつかの単純なキューブ(手で構成され、外側を向き、背面がカリングされます)、1つのライト(左上隅に表示されるシャドウマップ-大丈夫に見えます)、1つのカメラで構成されます。 シャドウマップのRenderTargetは、以下によって初期化されます int shadowMapSize = 512; RenderTarget2D shadowMap = new RenderTarget2D(GraphicsDevice, shadowMapSize, shadowMapSize, true, GraphicsDevice.PresentationParameters.BackBufferFormat, DepthFormat.Depth24Stencil8); GraphicsDevice.SetRenderTarget(shadowMap); GraphicsDevice.Clear(Color.White); GraphicsDevice.DepthStencilState = DepthStencilState.Default; その後、CreateShadowMapエフェクトが適用され、続いてLambertWithShadowsエフェクトが適用されます。最後に、を使用してシャドウマップが描画されSpriteBatchます。 残りのコードは、シェーダーに正しい値を提供するだけで構成されています。必要に応じて、私はそれをうまく提供できます。

2
遅延レンダリングのシャドウ
遅延レンダリングに関する資料を読んだので、その要点は理解できたと思います。しかし、私が理解していないのは、それがどのように影を達成するかです。私が知る限り、Gバッファは各ライトのシャドウマップの作成を含まないため、ライティングパスが各ピクセルがオクルードされているかどうかをどのように認識するかについて混乱しています。結局のところ、カメラの視点から見える特定のピクセルは実際には特定の光の視点からは見えない可能性があり、そのオクルージョンジオメトリはカメラの視点からは見えない可能性があるため、Gバッファーに何も書き込まれません。 。 シャドウマップのレンダリングを開始すると、フォワードレンダリングとほぼ同じように見えます。シャドウマップをレンダリングするために、すべてのライトに対してシーン内のすべてのジオメトリをレンダリングします。 では、遅延レンダリングは、フォワードレンダリングと同等のシャドウをどのように実現するのでしょうか。

2
遅延照明設定での二重放物面ポイントライトシャドウ
私はこのチュートリアル/サンプルコードをいじってみました。このサンプルコードは、遅延照明設定の一種であるlight-pre-passの簡単な実装を示しています。 デュアル放物面シャドウマップを使用して、ポイントライトシャドウを実装しているところです。このDPMの説明に従っています:http : //gamedevelop.eu/en/tutorials/dual-paraboloid-shadow-mapping.htm シャドウマップを作成できましたが、見栄えが良いようです。 私が現在抱えている問題は、ポイントライトをレンダリングするときにシャドウマップで深度値を検索するピクセルシェーダーにあると思います。 これが私のポイントライトシェーダーコードです:http : //olhovsky.com/shadow_mapping/PointLight.fx 対象のピクセルシェーダー関数はですPointLightMeshShadowPS。 誰かがその関数に目立ったエラーを見ていますか? うまくいけば、誰かが前にこの問題に取り組みました:) 上の画像からわかるように、投稿の影は投稿の位置と一致していないため、変換がどこかで間違っています... これは、ポイントライトが地面に非常に近い(ほとんど地面に触れている)場合の外観です。 ポイントライトが地面に近づくと、シャドウが集まり、2つのシャドウマップが交わる線に沿って(つまり、ライトカメラが反転して2つのシャドウマップをキャプチャした平面に沿って)影が接触します。 編集: さらに詳しい情報: ポイントライトを原点から遠ざけると、ライトカメラの「右」のベクトルに平行な線が影を切り取ります。上の画像は、ポイントライトを左に移動した結果を示しています。ポイントライトを右に移動すると、代わりに右側に同等のクリッピングラインがあります。だから、これは私が思ったように、ピクセルシェーダーで何かを間違って変換していることを示していると思います。 編集:この質問をより明確にするために、ここにいくつかのコードを示します。 これが、シャドウスポットライトを描画するために現在使用しているコードです。これは機能し、期待どおりにシャドウマッピングを使用します。 VertexShaderOutputMeshBased SpotLightMeshVS(VertexShaderInput input) { VertexShaderOutputMeshBased output = (VertexShaderOutputMeshBased)0; output.Position = mul(input.Position, WorldViewProjection); //we will compute our texture coords based on pixel position further output.TexCoordScreenSpace = output.Position; return output; } ////////////////////////////////////////////////////// …

4
シャドウマッピングと透明なクワッド
シャドウマッピングでは、深度バッファーを使用して、シャドウを描画する場所を計算します。 私の問題は、いくつかの半透明のテクスチャクワッドに影を落としてほしいということです。深度値は、表示されている部分だけでなく、すべてのクワッドに設定されるため、クワッドシャドウが投影されますが、これは私が望んでいることではありません。 シャドウマッピングを使用して、透明なクワッドに正しいシャドウをキャストさせるにはどうすればよいですか?

3
初めてのシャドウマッピングの問題
OpenGLでシェーダーを使用して初めて基本的なシャドウマッピングを実装しましたが、いくつかの問題に直面しています。以下に、レンダリングされたシーンの例を示します。 私がフォローしているシャドウマッピングのプロセスは、光の視点からのビューマトリックスと、通常のレンダリングに使用される投影およびモデルマトリックスを使用して、シーンをフレームバッファーにレンダリングすることです。 2番目のパスでは、上記のMVPマトリックスをライトの視点から、位置をライトスペースに変換する頂点シェーダーに送信します。フラグメントシェーダーは遠近法による分割を行い、位置をテクスチャー座標に変更します。 これが私の頂点シェーダーです、 #version 150 core uniform mat4 ModelViewMatrix; uniform mat3 NormalMatrix; uniform mat4 MVPMatrix; uniform mat4 lightMVP; uniform float scale; in vec3 in_Position; in vec3 in_Normal; in vec2 in_TexCoord; smooth out vec3 pass_Normal; smooth out vec3 pass_Position; smooth out vec2 TexCoord; smooth out vec4 lightspace_Position; void main(void){ pass_Normal …

1
分散シャドウマップは適切にレンダリングしたくない
エンジンにVSM(およびESM)を実装しましたが、ネットワークで公開されている多くの例で期待した結果が得られませんでした。 シャドウマップのフィルタリングをGL_LINEARに設定しましたが、結果を通常のシャドウマップと比較すると、明らかに悪くなります。 ほとんどのチュートリアルと同じように、ポイントライトシェーダーで直接モーメントを計算するか、テクスチャから取得しましたが、結果は同じです。 コード: uniform samplerCubeShadow shadowMap; ... vec4 worldSpace=inverse(ViewMatrix)*vec4(pos,1); vec4 coord=LightViewMatrix*worldSpace; vec4 abs_coord=abs(coord); float fs_z=-max(abs_coord.x, max(abs_coord.y, abs_coord.z)); vec4 clip=LightProjectionMatrix*vec4(0.0,0.0,fs_z,1.0); float d2=(clip.z / clip.w)*0.5+0.5; // clamp to [0..1] ... float shadowTexel=texture(shadowMap,vec4(coord.xyz,d2)); // VSM (Variance Shadow Map) // get partial derivatives float dx = dFdx(d2); float dy = dFdy(d2); vec2 moments …

1
シャドウマップの粒度
すべてのライトに同じシャドウマップを再利用できると思いました。しかし、ライト間のシャドウマップを再利用することはできず、個別のサーフェスを使用する必要があることを示唆する業界の記事を見てきました。 ライトごとに1つのシャドウマップが必要ですか?または、プロセス全体の1つですか?

2
ぼかしポイントライト分散シャドウマップ
私はゲームの分散シャドウマッピングの実装に取り​​組んでいます。エイリアスマップを適用するためにガウスぼかしをシャドウマップに適用して、分散シャドウマッピングでスポットライトを機能させることができました。現在、ポイントライトを実装しようとしていますが、キューブマップに格納されているシャドウマップで動作するようにガウスぼかしを適応させる方法がわかりません。しばらく探してみましたが、ポイントライトを使用した例を見つけることができません。誰かがここで私を手伝ってくれる?

2
ポイントライトソフトシャドウ
全方向性(ポイント)ライトにソフトシャドウを実装する方法。典型的なシャドウマッピングテクニックを使用します。深度はテクスチャキューブにレンダリングされ、追加は非常に簡単です。ライトからフラグメントのワールド位置までのベクトルを使用するだけです。それは完全に動作します。ソフトシャドウが必要になるまで。私たちのエンジンでは、スポットライトにPCSS技術を使用しています。しかし、ポイントライトの場合は問題が発生します。 3Dでサンプリングする方法は? 方向とアップベクター(0,1,0)から正規直交基底を作成する手法を開発しました。次に、サンプリングベクトル(この(1.0、i / depthMapSize、j / depthMapSize)のようなもの)にこの基準を乗算します。ただし、これは(もちろん:))(0,1,0)と(0、- 1,0)。 私はこれについてどんな助けにも感謝します。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.