Я читаю Шейдеры для игр Программирование и художники. В главе 13 «« Строительные материалы из царапин »» автор представил некоторые методы визуализации для моделирования сложных материалов, таких как мрамор или дерево, с использованием шума Перлина. Но я озадачен деревянным рендерингом. Для моделирования дерева нам нужна функция, которая дает круговое значение вдоль конкретной плоскости, чтобы мы могли создавать кольца в лесу. Это то, что говорит автор, «взять скалярное произведение двух осей вдоль плоскости, создавая круговую значение на этой плоскости»Использование шума Perlin для визуализации дерева
Circle = dot(noisetxr.xy, noisetxr.xy);
noisetxr является float3, это координаты текстуры для образца текстуры шума, I не может понять, почему воля скалярного произведения дает круговое значение
Вот полный код (пиксельный шейдер в 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
}
Я знаю, что повышение функции косинуса к более высокой мощности будет создавать более четкие кольца, но что означает точечный продукт? Почему он может создать значение круга?