可変パターン密度のパターン化オブジェクトをリアルタイムで作成する方法は?


8

pフレームごとに計算された、オブジェクトの表面上で連続的に変化する値があると仮定します。の値はp、表面上のパターンの密度を決定します。たとえば、密度p < 0.3が高い場合に2つの密度しかない場合、そうでない場合は密度が低くなります。

私は単純な高レベルのソリューションを考えました。2つのテクスチャを作成し、それぞれが異なる密度でp、適切なものからのサンプルの値に基づいています。ただし、高密度と低密度の境界には問題があります。

これは問題を説明するための例です(私の問題はこのドットパターンの例に限定されないことに注意してください。後で処理するパターンについて説明します)。

ここに画像の説明を入力してください

そして、これが低と高の間のしきい値です(高密度テクスチャに表示されますが、それは関係ありません)。線の下にある場合、高密度テクスチャをサンプリングする必要があることを意味します。

ここに画像の説明を入力してください

そして最後に、この方法を使用して望ましいことと実際に何が起こるかを比較します。

ここに画像の説明を入力してください

問題は、高密度のみの円がラインを横切るときにp、サンプリングされる低密度のテクスチャを示すときに無視され、その結果、円が切り捨てられることです。pフレームごとに異なるため、この問題の解決方法がわかりません。2つの密度の境界を「焼き付ける」ことはできません。下から高密度テクスチャを作成することで、逆の問題を簡単に防ぐことができます(つまり、円が低密度テクスチャ上にある場合は、高密度テクスチャ上にあることを確認してください)。

誰かが私の解決策を改善する方法を持っているか、完全に別の方法を持っているかどうかに興味があります。ここでの制約は、pフレームごとにリアルタイムで計算されることです。別の制約はパターンテクスチャに関連しています。パターンは白黒で、黒はパターン、白は背景です(例の円のように)。パターンは、同じ形状が繰り返されているだけでなく、白い背景の上に任意の黒い形状が配置されている場合もあります。(たぶんパターンは単語の間違った選択です。)

私はこの分野の研究に詳しくないので、どのキーワードを検索すればよいかわかりませんでした。


3
あなたの実際のテクスチャも白の黒い点だけですか?もしそうなら、例えば半径を変えたポアソンディスクサンプリングで、手続き的にテクスチャを生成できるかもしれません。そうでない場合、テクスチャが実際にはより連続的なものである場合、ブレンドがオプションになる可能性があります(ただし、例のような鮮明なテクスチャではうまく機能しません)。したがって、実際のパターン/テクスチャがどのように見えるかを明確にできれば、より役立つ回答を得られる可能性があります。
マーティンエンダー

1
後処理?エッジ検出のバリアントのようなもの:最も近いドットの中心までの距離を書き出し、次に画面空間で、各ピクセルのドットサイズの近傍を検索して、ゼロ値(に近い)がないか調べます。これにより、スクリーンスペースのドットが得られるため、テクスチャスペースに戻るには、UV派生物を作成して混乱させる必要があります...連続性の問題がまだあることに注意してください。そして消えます。pが連続(ソフト境界)である場合、境界に沿ってドットを縮小/拡大できる可能性があります...
ダニエルMゲッセル

1
別のオプションは、Wangタイリングを調べることです。 導入タイル遺伝学GPUの宝石
maogenc

1
テクスチャ爆撃を見たことがありますか?http.developer.nvidia.com/GPUGems/gpugems_ch20.html
Mikkel Gjoel

1
カバーする必要のある形状/パターンの範囲と、アプローチにどの程度の柔軟性があるかを教えてください。密度ではなく円の半径を変更するという@DanielMGesselの提案は、物事をより単純にし、よりスムーズなアニメーションを提供するかもしれませんが、アプローチがどの程度制約されているかはまだはっきりしていません。
trichoplax

回答:


6

パターンシェイプが常に完全に存在するか存在しないかを確認し、切り取らないようにするにはp、シェイプ内のすべてのテクセルに同じ値が使用されるようにする必要があります。円の例では、特定の円のすべてのテクセルがに同意する必要がありpます。

pサーフェス上の特定のポイントで評価する方法があると思います(テクスチャからルックアップされるか、何らかの関数から計算されるか)。次に、テクセルのグループがすべて同じp値を取得するようにする1つの方法は、すべてのセルが同じポイントからルックアップすることを確認することです。

この評価ポイントのUVは、パターンテクスチャの追加チャネルに保存できます。たとえば、評価するUV座標を赤と緑のチャネルに保存pし、パターン要素をオンにするしきい値を青のチャネルに保存し、表示するパターンのアンチエイリアスグレーレベルをアルファに保存することができます。必要に応じて、UV +しきい値データを別のセカンダリテクスチャに含めることもできます。

このUV +しきい値テクスチャを生成するには、入力パターンテクスチャから始めて、接続されたコンポーネントをプログラムで見つけることができます(たとえば、黒いピクセルを検索して塗りつぶしを行うことにより)。各コンポーネントのすべてのテクセルの評価ポイントをコンポーネントの中心のUVに設定し、ランダムなしきい値を生成します。次に、レンダリングするときに、最初にこのテクスチャをサンプリングするピクセルシェーダーを使用してpから、指定された評価ポイントを調べ、指定されたしきい値と比較します。

このようにして、各パターン形状は一定のp値としきい値を参照し、完全にオンまたはオフになります。以下のようにp増加すると、複数の形状の連続的に変化する密度の印象を与え、それらのしきい値を通過して現れます。


1
私はこのアイデアが本当に好きです。試してみる必要があります。それは完全に理にかなっています。ありがとう!
Ryan

0

別の考えはこれらの線に沿っています。平面上に定義された均一なポイントセットと、平面からターゲットサーフェスへのマッピング関数がある場合、表面の密度関数は、エリアが平面サーフェスからターゲットにマッピングされる方法です。そのため、エリアを保持するマップは、ターゲット上の均一なポイントになります。

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