残った茶葉のようなテクスチャを生成するにはどうすればよいですか?


11

私たちはiPhoneとWindows Phone 7のプロジェクトに取り組んでおり、カップの底に茶葉を生成できるようにしたいと考えています。写実的な外観である必要はなく、実際には漫画でも構いません。

これを達成するためにどのようなテクニックを研究する必要がありますか?役立つライブラリ(Cが望ましいが、翻訳は可能)はありますか?

Google画像検索から抜粋したサンプルをいくつか示します

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


要件を具体的に教えていただけますか?彼らは毎回異なるように渦巻く必要がありますか?アニメーションや一意性の要件がない場合は、写真や描画をテクスチャとして使用できない理由がわかりません。
フィリップウェイ

@phillipweiはい、毎回異なるものにする必要があります。または、少なくともかなり合理的に異なるので、ストックフォトのようには感じられません。
Jedidja

回答:


15

アートコントロールを維持し、プロシージャメソッドを微調整して適切に調整するために長い時間を費やさないようにするには、どうすればよいでしょうか。

最初に、アート「プール」として茶葉の塊のスプライトの数を手動で作成します。それぞれをカップ全体の茶葉としてではなく、より小さなグループのようにします。20人くらいですか

次に、それらのランダムな数を「カップ」ベースのランダムな座標に配置します。それぞれにランダムな回転とスケール、さらにランダムな水平および/または垂直ミラーリングを与えます。これは良い結果を生むはずです。

このアプローチにより、さまざまな結果を可能にしながら(十分なスプライトから選択できる場合)、個々の束を希望どおりの外観で作成する芸術的な自由が得られます。

さらに、これ(およびPerlinノイズベースを含む任意のランダムメソッド)を使用すると、プロセスの開始時に実際に乱数ジェネレーターに既知のシードをシードして、再現可能な結果を​​得ることができます。シードを保存すると、シーケンスが開始する直前に再シードすることにより、同じパターンを正確に再作成できます。誰かに名前を入力させ、文字を数字(ASCIIの合計など)に変換し、それをシードとして、「このティーリーフのYOUに合わせてカスタマイズしたパターン」のようなものとして使用することもできます。事。

ここに私が意味するもののいくつかの疑似コードがあります、それが役立つ場合...

var sprites = [...]; // Array of tea leaf sprites

var n_leaves = rand(5)+5; // Random number of leaves from 5-9
for (i=0; i<n_leaves; i++) {
    var sprite_index = rand(sprites.length);  // Random sprite index
    var r = rand(CUP_DIAMETER);          // Random radius for point on disk calc
    var theta = rand(2*PI);              // Random theta (rotation) for point on disk
    var sprite_x = sqrt(r) * cos(theta); // Sprite X
    var sprite_y = sqrt(r) * sin(theta); // Sprite Y
    var sprite_rotation = rand(2*PI);    // Sprite rotation
    var sprite_scale = rand(1) + 0.5;    // Sprite scale from 0.5 to 1.5
    var sprite_h_mirror = (rand(1) < 0.5 ? true : false); // If true, mirror horizontally
    var sprite_v_mirror = (rand(1) < 0.5 ? true : false);   // If true, mirror vertically
    draw_sprite(sprite_index, sprite_x, sprite_y, sprite_rotation, sprite_h_mirror, sprite_v_mirror);
}

ディスク内のランダムなポイントを選択する方法と、なぜ私がそのsqrt / sin / cos全体を使用しているのかについてのすばらしい議論については、http://mathworld.wolfram.com/DiskPointPicking.htmlをチェックしてください


7

バイナリカットオフ値が0.8程度のパーリンノイズを試しますか?

サンプル画像をhttp://imgur.com/a/Ydc4yにアップロードしました。最初の画像は、しきい値が適用された2番目の画像です。2つ目は基本的なパーリンノイズで、http://en.wikipedia.org/wiki/Perlin_noisehttp://http.developer.nvidia.com/GPUGems2/gpugems2_chapter26.htmlなどの複数の優れたリファレンスがあります。

パーリンノイズのオクターブの数とスケールで少し演奏して、出力がどの程度滑らかになるかを変更したり、しきい値を設定して、茶葉の量(平均として-ノイズ)を決定したりできます。


3
これは、いくつかのリンクと生成される可能性のあるものの例でより良い答えになる可能性があります。
MichaelHouse

良いイメージですが、静的画像を使用でき、円形領域をピクセルシェーダーでクランプし、その円のエッジをぼかしてピクセルごとのPerlinノイズ値を生成する必要はありません(私の経験から、この方法は少し遅いです) )。
teodron 2012

パーリンノイズ自体の生成は少し重いです。ただし、この(および他の多くの)効果には、事前に計算されたノイズテクスチャを使用できます。このメソッドを使用して、いくつかを事前計算することもできます。
dascandy

4
-1。たくさんの茶葉とたくさんのsum(1 / f)パーリンノイズを見てきましたが、どれも同じように見ているとは言えません。パーリンノイズが正しい開始点である可能性がありますが、目標は通常のsum(1 / f)バリアントには適していません。

1
パーリンノイズアプローチは実用的ではないことに同意します。それを確認するために、パーリンノイズから始めてphotoshopで効果を再現してみました。結果は次のとおりです。私はそれが大丈夫に見えると思いますが、問題は私がしなければならなかった微調整のです。その微調整をすべて手続き的に再現する方法を実際に考えることはできないので、Tim Holtによって提案されたスプライトベースのアプローチに投票します。
David Gouveia
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.