Сопоставление текстур OSL [дубликат]
Я новичок в OSL и Blender. Я использую следующий код для создания круга на плоскости. Самолет, однако, кажется разделенным на два треугольника. Может ли кто-нибудь объяснить, как это исправить, чтобы мой круг OSL отображался правильно? Спасибо!
shader Circle(
float rad=0.75 [[float min=0, float max=1]],
float sharp=0.8 [[float min=0, float max=1]],
int rep=1[[int min=1, int max=10]],
point cent=point(0.5, 0.5, 0),
output color c = 0)
{
point pt = point(rep*u, rep*v,0);
float ctx = floor(pt[0])+cent[0];
float cty = floor(pt[1])+cent[1];
point ct = point(ctx, cty, 0);
float d = fmod(distance(ct, pt), rep)/rad;
c = 1-smoothstep(0.5*sharp, 1-0.5*sharp, d);
}

Ответы
u
и v
являются глобальными переменными, предоставляемыми OSL. Они относятся к параметрическим U и V; нормализованные барицентрические координаты точки затенения в текущем закрашенном треугольнике. Это те же U и V, которые возвращаются в 2D-векторе, который вы получаете из узла Geometry > Parametric output.
Чтобы получить U и V квадрата, как показано на карте, вам нужно найти U и V на активной UV-карте объекта, используя getattribute()
:
shader Circle(
float radius = 0.75,
float sharpness = 0.8,
int tiles = 1,
point center = point(0.5, 0.5, 0.0),
output color c = (0.0)
)
{
vector UV = (0.0);
int hasUV = getattribute( "geom:uv", UV);
point pt = point(tiles*UV[0], tiles*UV[1],0);
float ctx = floor(pt[0])+center[0];
float cty = floor(pt[1])+center[1];
point ct = point(ctx, cty, 0);
float d = fmod(distance(ct, pt), tiles)/radius;
c = 1-smoothstep(0.5*sharpness, 1-0.5*sharpness, d);
}
... но здесь мы сталкиваемся с невыполненным обещанием в руководстве по Blender, которое, судя по возрасту этого ответа , вы можете ожидать, что к настоящему времени оно исправлено. Как ни странно, с точки зрения пользователя, реализация OSL в Blender отказывается давать значение geom:uv
, если где-то в дереве нет узла текстуры изображения . (Если вы хотите оценить какую-либо другую UV-карту по имени в вашем OSL, дерево также должно содержать узел UV-карты с таким же именем, связанный с узлом Image Texture .)
Итак, ваше дерево выглядит так:

Надеюсь, этот ответ сэкономит вам время .. :)