Shaders for Game Programming and Artists を読んでいます。第 13 章「ゼロからマテリアルを構築する」では、パーリン ノイズを使用して大理石や木材などの複雑なマテリアルをシミュレートするレンダリング テクニックをいくつか紹介しました。しかし、私は木のレンダリングに困惑しています。木をシミュレートするには、森の中に輪を作成できるように、特定の平面に沿って円の値を与える関数が必要です。これは、著者が「平面に沿って 2 つの軸のドット積を取り、その平面上に円の値を作成する」と述べたことです。
Circle = dot(noisetxr.xy, noisetxr.xy);
noisetxr は float3 です。ノイズ テクスチャをサンプリングするためのテクスチャ座標です。内積が円形の値になる理由がわかりません
。完全なコードは次のとおりです (hlsl のピクセル シェーダ):
float persistance;
float4 wood_color; //a predefined value
sampler Texture0; // noise texture
float4 ps_main(float3 txr: TEXCOORD0) : COLOR
{
// Determine two set of coordinates, one for the noise
// and one for the wood rings
float3 noisetxr = txr;
txr = txr/8;
// Combine 3 octaves of noise together.
float final_noise = 0;
for(int i=0;i<2;i++)
final_noise += ((1.0/pow(persistance,i))*
((tex3D(Texture0, txr*pow(2,i))*2)-1));
// The wood is defined by a set of concentric rings in the XY
// plane. Those rings are pertubated by the computed noise.
final_noise = abs(final_noise);
float grain = cos(dot(noisetxr.xy,noisetxr.xy) + final_noise*4);//what is this ??
return wood_color - pow(grain,8)/2; //raising the cosine to higher power
}
コサイン関数をより高いべき乗にすると、よりシャープなリングが作成されることはわかっていますが、内積はどういう意味ですか? 円の値を作成できるのはなぜですか?