Unity urp でティーセン多角形のボロノイ擾乱を実現

Georgy Voronoiにちなんで名付けられたボロノイ図としても知られるティーセン多角形は、2つの隣接する点セグメントを接続する垂直二等分線で構成される連続多角形のセットです。ティーセン ポリゴン内の任意のポイントは、他のポリゴンのコントロール ポイントよりも、ポリゴンを構成するコントロール ポイントまでの距離が短くなります。
-百度百科事典からの抜粋

ここでは、ase を使用してノードを設定し、ソース コードを表示してコードを抽出するという簡単な方法を示します。
時間と労力を節約できます. 次に、私がどのようにそれを実現したかを見てみましょう.
まず, Lianliankan:
ここに画像の説明を挿入
生成された効果をリアルタイムで見ることができます, これは便利で使いやすいです. 案の定, 視覚化は未来です.
uv に接続すると、Angle は生成されたノイズの結果を値で変更できます。
スケールは結果の密度を変更できます. 上の画像は 5 倍のズームです. 50 倍の効果を見てみましょう:
ここに画像の説明を挿入
出力の最後に 3 つの結果を使用できます. 1 つは生成された白黒画像です. Out ノードの出力:
ここに画像の説明を挿入
これは、明確な多角形構造を持つ効果的な A 遷移白黒画像です。
もう 1 つは、上記の ID カラーです。
ラストはUV
ここに画像の説明を挿入
がそういう起毛感を出せるUV感です。

ここに画像の説明を挿入
また、計算方法を変更したり、生成された結果のトランジション効果を変更したりすることもできます. 密度ポイントが必要な場合は、これらは問題ではありません.
ここに画像の説明を挿入
上記は Method を Caustic に変更した後の効果で、以前のものとは明らかに異なります。この効果は特に水面のゆらめき効果と似ているのでしょうか? これを水面に重ねて使うと水面効果がアップします。

コードのこの部分だけが必要な場合はどうでしょうか。
次に、最初にボロノイ ノードを調整し、必要な効果を呼び出してから、コードを開きます。

float2 voronoihash6( float2 p )
{
    
    
	
	p = float2( dot( p, float2( 127.1, 311.7 ) ), dot( p, float2( 269.5, 183.3 ) ) );
	return frac( sin( p ) *43758.5453);
}

float voronoi6( float2 v, float time, inout float2 id, inout float2 mr, float smoothness )
{
    
    
	float2 n = floor( v );
	float2 f = frac( v );
	float F1 = 8.0;
	float F2 = 8.0; float2 mg = 0;
	for ( int j = -1; j <= 1; j++ )
	{
    
    
		for ( int i = -1; i <= 1; i++ )
	 	{
    
    
	 		float2 g = float2( i, j );
	 		float2 o = voronoihash6( n + g );
			o = ( sin( time + o * 6.2831 ) * 0.5 + 0.5 ); float2 r = f - g - o;
			float d = 0.5 * dot( r, r );
	 		if( d<F1 ) {
    
    
	 			F2 = F1;
	 			F1 = d; mg = g; mr = r; id = o;
	 		} else if( d<F2 ) {
    
    
	 			F2 = d;
	 		}
	 	}
	}
	return F1;
}

苦労した後、それによって生成されたボロノイ関数がコード内にあることがわかります。それをコピーして使用するだけです。
渡す値がわからない場合

float time6 = _Angle;
float2 texCoord12 = IN.ase_texcoord3.xy * float2( 1,1 ) + float2( 0,0 );
float2 coords6 = texCoord12 * _Scale;
float2 id6 = 0;
float2 uv6 = 0;
float voroi6 = voronoi6( coords6, time6, id6, uv6, 0 );
float3 temp_cast_0 = (( voroi6 + 0.0 )).xxx;

検索を続けると、関連する呼び出しが行われた場所が見つかります。5 つのパラメーターをサポートしていることがわかります。1 つ目は uv で、設定したスケールの値が直接乗算されます。2 つ目の値は妨害値で渡され、3 つ目は inout であり、After を表します。関数が実行されると、宣言した id も変更され、uv についても同様であり、それらの宣言は、操作の結果を取得するためのものでもあります。そしてこれも滑らかさをサポートしており、デフォルトは0で、ミップマップとしてはギリギリ使える感じです。たとえば、ノイズ テクスチャを使用したくないが、自分で生成したい場合、この種類にはミップマップがありません.これを使用して、ミップマップ効果を実現できます.
ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/qq_30100043/article/details/127386983