問題タブ [mipmaps]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
textures - HLSL tex2D()-グラデーションはどこから来るのですか?
ピクセルシェーダーでテクスチャをサンプリングする場合、テクスチャユニットは、シェーディングされるピクセルの周囲のテクスチャ勾配に基づいてミップマップを選択する必要があります。
tex2Dgrad()
グラデーションに関する情報を手動でtex2Dlod()
提供し、ミップマップを手動で選択できる機能がありますが、呼び出すだけtex2D()
で、追加のグラデーション情報はどこから取得されますか?
tex2D()
ほとんどのシェーダーで使用されるテクスチャマッピングの最も一般的なケースですが、グラデーションがどこから来ているのかわかりません。ミップマッピングは明らかに機能するので、どこかから来ている必要があります。
U
計算された座標を使用して、ピクセルシェーダーのルックアップテーブルとしてテクスチャを使用したいのですが、で予期V
しない「魔法」tex2D()
が発生することは望ましくありません。
tex2Dlod()
これを回避するために使用する必要がありますか?tex2Dlod()
私はそれが遅いと読んだtex2D()
。
opengl - SOIL - OpenGL を使用した奇妙なミップ マップ関連の問題
SOIL を使用して OpenGL テクスチャを生成しています。SOIL でのミップ マップの生成によって引き起こされる遠方のアーティファクトを除いて、すべて問題ありません。フラグを使用しない場合:
アーティファクトではありませんが、見栄えが悪いです。このようなアーティファクトを見た人はいますか?水の上はあずき色で、砂の上は薄緑/青の歪みのように見えます。
これは次のようになります。
opengl - OpenGL でテクスチャに含まれるミップマップの数
最初にテクスチャを作成したのは私であり、ロード/生成したミップマップの数を完全に把握している必要があります。私はユニットテストのためにこれをやっています。glGetTexParameter
これを見つけるためのパラメーターはないようです。私が来た最も近いものは次のようなものです:
とにかく、glGetTexLevelParameter()
NVidia GPU を使用している場合、存在しないミップマップに対して幅 0 を返しますが、Mesa では をGL_INVALID_VALUE
返します。
テクスチャに取り込んだミップマップ レベルを確認するにはどうすればよいですか?
ios - iOS glGenerateMipmap は同期ですか、それともおそらく非同期ですか?
OpenGL ES で大きなテクスチャを使用する iPad アプリを開発しています。シーンが最初に読み込まれると、下の図に示すように、数フレームの間、天井に大きな黒いアーティファクトが表示されます。より高いレベルのミップマップがまだ埋められていないかのようです。後続のフレームでは、天井が正しく表示されます。
この問題は、ミップマッピングを使い始めたときにのみ現れ始めました。考えられる説明の 1 つは、glGenerateMipmap() 呼び出しが非同期で動作し、(別のプロセスまたはおそらく GPU で) ミップマップ作成ワーカーを生成して戻ることです。
これは可能ですか、それとも間違ったツリーを吠えていますか?
ios - テクスチャの「二乗」によって引き起こされるテクスチャの歪み、およびミップマッピングとの相互作用にどのように対処しますか?
自然に正方形ではないテクスチャ(たとえば、アスペクト比が4:1の写真のテクスチャ)があるとします。そして、PVRTC圧縮を使用して、このテクスチャをiOSデバイスに表示したいとします。これには、テクスチャが正方形である必要があります。圧縮時にテクスチャが正方形になるように拡大すると、テクスチャを遠くから見たときに非常にぼやけた画像になります。
これはミップマッピングが原因だと思います。ミップマップフィルターは新しいより大きな引き伸ばされた寸法を認識するため、それを使用して低いミップレベルを選択しますが、これらのピクセルはちょうどそのサイズに引き伸ばされているため、実際には正しくありません。他の次元を見ると、より高い解像度のmipレベルが選択されます。
この理論は、正方形である必要のない形式でテクスチャを残すと、ミップマップバージョンがちょうどダンディに見えるという観察によって(ある程度)確認されています。
LODバイアスパラメータがありますが、ドキュメントにはそれが両方の次元に適用されると書かれています。求められているのは、LODにバイアスをかける方法のようですが、1つの次元にのみバイアスをかけます(つまり、スケールアップされたテクスチャの次元でより高い解像度にバイアスをかける)。
元のテクスチャの正方形のサブセットを使用できるようにジオメトリを切り刻む以外に(これは実行不可能であり、本番パイプラインを提供します)、この問題に対処するために使用した巧妙なハックはありますか?
graphics - Ogre material lod: どのように設定すればよいですか?
私は Ogre マテリアルを持っていますが、GPU フィルタリングに満足していないので、手動でミップマッピングを作成したいと考えています。つまり、すべてのテクスチャを作成し、lod ベースの戦略を設定して正しいテクスチャをロードします。
問題は、どの戦略を使用しても、lod_value を使用しても、マテリアルがテクスチャを変更しないことです。私は何をすべきか?マニュアルを読んでいますが、本当に役に立ちませんでした。
これが私のコードです:
android - glGenerateMipmap IMGSRV エラー
アプリでテクスチャを使用しようとしていますが、エラーが発生しています
私のギャラクシーネクサスで。EVO 4G ではこれらのエラーは発生しません。
関連する読み込みコードは次のとおりです。
何が起こっているのか、どうすれば修正できるのでしょうか?
編集: エラーの原因となっている画像は 1 つだけで、1024x2048 の png です。
c# - xna でテクスチャを生成するミップマッピング
ゲームでいくつかのテクスチャを生成していますが、それらのミップマップが必要です。コンストラクターで mipMap を true に設定してもミップマップが生成されないのはなぜですか? また、ミップマップを生成するにはどうすればよいですか?
android - OpenGL ES 2.0 texture2D バイアス/ロッド
OpenGL ES 2.0 GLSL 機能を使用して画像を操作しています。私が実現したいのは、フラグメント シェーダー内のテクスチャからサンプルをフェッチするときに、特定の詳細レベル (LOD) を選択することです。どうやら、OpenGL ES 2.0 のフラグメント シェーダーではサポートされていません (ただし、オプションでそれを提供できるtexture2DLod()
拡張機能があります)。GL_EXT_shader_texture_lod
ただし、デフォルトtexture2D()
関数は、3 番目のオプション パラメータ バイアスを提供します。私が理解している限り、このパラメーターは現在の LOD に追加されたオフセットであると想定されています。
私のテストでは、画面サイズのクワッドを描画し、サンプル座標をスケーリングしてテクスチャを拡大しています。縮小フィルターとして GL_LINEAR_MIPMAP_LINEAR を使用して、テクスチャのミップマッピングを有効にしました。ARM Mali-400 GPU でゼロ以外のバイアス パラメーターを使用してサンプリングした場合の結果は、下の画像で確認できます。
一部のピクセルが縮小フィルターを使用し、他のピクセルが拡大フィルターを使用していることを示す ISTM。
これはどのように制御されていますか?また、バイアスを使用する場合に初期 LOD を決定するにはどうすればよいですか? 頂点シェーダーから調整できますか?
関連する質問は次のとおりです。
GLSL サンプラーは、テクスチャの縮小、つまりミップマップ レベルをどのように決定しますか?
更新: 画面を覆うようにテクスチャをサンプリングすると、(拡大されていても) 適切なミップマップ ルックアップを実行しているように見えることに気付きました。ここで、サンプル座標に小さなオフセットを追加すると、上の画像に見られるバンディングが見え始めます (さらに拡大されています)。バイアス パラメータを使用しない場合、バンディングはまったく見られません。
textures - D3D11 での作成後にテクスチャの miplevel を更新する
Direct 3D 11 では、ID3D11DeviceContext::CreateTexture2Dを使用して空のテクスチャを作成し、 ID3D11DeviceContext::UpdateSubresourceメソッドを使用してテクセル データを更新し、D3D11_BOX 構造で変更するために必要なミップ レベルを指定できます。これは可能ですが、Direct 3D での作成後に 2D テクスチャのミップ レベルの数を変更することは可能ですか?
この質問は「なぜそんなことをするの?!」応答しますが、いくつかの移植/テスト要件により、そうする必要があります。