Вот, нашел время немного покопаться с сабжем. Если кто не в курсе - на последнем Сигграфе в Stupid Renderman Tricks была такая презентация.
Ну, поскольку на Сигграфе я не был ;-) то всё, что у меня есть по этому поводу - PowerPoint slides с renderman.org (http://www.renderman.org/RMR/Examples/srt2001/). Скачать мувики самой презентации с китайского сайта я не смог.
В общем, там нет ничего военного. Взял я его исходники и подкорячил:
surface bouncing(float Kbounce = 0.1; float Fbounce = 1; float Kd = 1.5
{
if (Kbounce > 0.0) {
// проблемное место
point Psample = Ps;
normal Nsample = Ng;
color Csample = Cs;
// конец проблемного места
vector Lsample = Psample - P;
float distsample = length(Lsample);
color CKDsample = 0;
if (distsample < Fbounce) {
illuminance(Psample, Nsample, PI/2) {
CKDsample += Cl * Nsample.normalize(L);
}
CKDsample *= Kd * Csample;
if (distsample != 0.0) Lsample /= distsample;
float NdotLsample = N.Lsample;
if (NdotLsample > 0.0) {
CKDsample += Kbounce * CKDsample * NdotLsample * (1.0 - smoothstep(0.0, Fbounce, distsample));
}
}
Ci = CKDsample;
}
}
Проблемное место в оригинале выглядит вот так:
Psample = transform ("world", "current", Psample);
Nsample = ntransform ("world", "current", Nsample);
причем определяются эти самые переменные как:
Psample = position of the bounce
pointOnSurface -p -u $uPos -v $vPos $surfaceName
Nsample = normal at Psample
pointOnSurface -n -u $uPos -v $vPos $surfaceName
Csample = average color around Psample
Ну то есть как экспортируемые из Maya через Mel в шейдер кастомные переменные. Вот тут мне и пришел полярный зверек - не могу никак эти переменные привязать, хоть ты тресни. Может, день сегодня такой...
Willing to experiment, anyone?
Ну, поскольку на Сигграфе я не был ;-) то всё, что у меня есть по этому поводу - PowerPoint slides с renderman.org (http://www.renderman.org/RMR/Examples/srt2001/). Скачать мувики самой презентации с китайского сайта я не смог.
В общем, там нет ничего военного. Взял я его исходники и подкорячил:
surface bouncing(float Kbounce = 0.1; float Fbounce = 1; float Kd = 1.5
{
if (Kbounce > 0.0) {
// проблемное место
point Psample = Ps;
normal Nsample = Ng;
color Csample = Cs;
// конец проблемного места
vector Lsample = Psample - P;
float distsample = length(Lsample);
color CKDsample = 0;
if (distsample < Fbounce) {
illuminance(Psample, Nsample, PI/2) {
CKDsample += Cl * Nsample.normalize(L);
}
CKDsample *= Kd * Csample;
if (distsample != 0.0) Lsample /= distsample;
float NdotLsample = N.Lsample;
if (NdotLsample > 0.0) {
CKDsample += Kbounce * CKDsample * NdotLsample * (1.0 - smoothstep(0.0, Fbounce, distsample));
}
}
Ci = CKDsample;
}
}
Проблемное место в оригинале выглядит вот так:
Psample = transform ("world", "current", Psample);
Nsample = ntransform ("world", "current", Nsample);
причем определяются эти самые переменные как:
Psample = position of the bounce
pointOnSurface -p -u $uPos -v $vPos $surfaceName
Nsample = normal at Psample
pointOnSurface -n -u $uPos -v $vPos $surfaceName
Csample = average color around Psample
Ну то есть как экспортируемые из Maya через Mel в шейдер кастомные переменные. Вот тут мне и пришел полярный зверек - не могу никак эти переменные привязать, хоть ты тресни. Может, день сегодня такой...
Willing to experiment, anyone?