Добрый день.
Столкнулся с такой проблемой, что требуется запечь Directional Lightmap. Потыкавшись в ноды суслика пришёл к выводу, что штатными средствами это нереально. Посему обратился к OSL. На данный момент у меня получилось сделать шейдер, который получает вектор освещённости для равномерного рассеянного света. То есть попросту говоря векторный АО. Но это ни то, что мне нужно.
Собственно вопрос такой. При просчёте вектора освещённости я использую не хитрый шейдер типа:
/////////////////////////////////////////////////////////
didhit = trace(P, rayDir, «maxdist», Distance);
getmessage («trace», «N», hit_normal);
if(didhit)
{
hit_normal = reflect(hit_normal, N);
}
else
{
hit_normal = rayDir;
}
hit_normal = normalize(hit_normal);
hit_normal = vector (-hit_normal[0], hit_normal[2], -hit_normal[1]);
/// Здесь я перевожу вектор в систему координат Unity///
outNormal = hit_normal * 0.5 + 0.5; //и перевожу его из (-1, 1) в (0, 1)
/////////////////////////////////////////////////////////
Вектор «rayDir» для каждого последующего семпла случайный(по полусфере), но он сейчас не имеет значения, поэтому я не стал писать всю партянку кода, которая за это отвечает. Просто держим в уме, что он каждый следующий семпл имеет другое направление.
Собственно в чём вопрос. Могу ли я так же как получаю информацию о нормали поверхности, в которую ударился луч в этой строчке:
getmessage («trace», «N», hit_normal);
получать информацию об освещённости поверхности? Или, что тоже вариант, получать информацию о цвете поверхности(учитывая текстуру)? Думаю обычную лайтампу можно предварительно посчитать и считать дирекшенал опираясь на интенсивность цвета из неё.