Render.ru

Difference Key

#1
Подскажите, кто знает, пожалуста, технику процесса "Разностного Ключа" :) Пытался в Shake сделать нечто вроде LayerX
alpha=r2-r+g2-g+b2-b или то же, но в модуле (abs), или наоборот отнимать r-r2 ... В любом случае, в альфе получается черно-белая смесь двух картинок.

Постановка задачи: есть снимок клавиш, на которые затем нажимают пальцы. Нужны просто пальцы, без клавиш.
 
#2
Собственно экспрешшен

(r+g+b)!=(r2+g2+b2)?(abs(r2-r)+abs(g2-g)+abs(b2-b)):0

можешь сам дальше додумать, например давать не точное соответствие, а, типа так:

abs((r+g+b)-(r2+g2+b2))<(сюда можно local variable повесить и рулить процессом)?1(просто и тупо - 1, маска в этом случае будет грубая):0

Вот тестовый скрипт, в "идеальных" условиях пашет, для реальных условий надо, конечно рихтовать.
PS Хотел у ребят на Хайенде поспрошать, тема то действительно полезная, но Хайенд который день в дауне, мож кто знает что там у "Большого Вилли" стряслось?



Checker1 = Checker(720, 486, 1, 32, xSize);
Color1 = Color(720, 486, 1, 1, 1, 0, 1, 0);
Over1 = Over(Color1, Checker1, 1, 0, 0);
QuickShape1 = QuickShape(720, 486, 1, 0, 0, 0, 1, 1, xScale,
width/2, height/2, 0, 0.5, 0, 128, 144, 171, 1, 0, 1, 0,
1, 1, 252, 351, 1, 0, 1, 0, 1, 1, 494, 321, 1, 0, 1, 0, 1,
1, 526, 214, 1, 0, 1, 0, 1, 1, 404, 128, 1, 0, 1, 0, 1, 1,
266, 89, 1, 0, 1, 0, 1, 1);
SetAlpha2 = SetAlpha(Checker1, 1);
Mask(Color1, QuickShape1, "A", 100, 0, 1);
SetAlpha1 = SetAlpha(Over1, 1);
LayerX1 = LayerX(SetAlpha1, SetAlpha2, r, g, b, (r+g+b)!=(r2+g2+b2)?(abs(r2-r)+abs(g2-g)+abs(b2-b)):0,
z);


// User Interface settings

SetKey(
"nodeView.Checker1.x", "301.25",
"nodeView.Checker1.y", "273.5",
"nodeView.Color1.x", "186.25",
"nodeView.Color1.y", "273.5",
"nodeView.LayerX1.x", "331.75",
"nodeView.LayerX1.y", "66.5",
"nodeView.Over1.x", "247.25",
"nodeView.Over1.y", "204.5",
"nodeView.QuickShape1.x", "65",
"nodeView.QuickShape1.y", "338.75",
"nodeView.SetAlpha1.x", "217.25",
"nodeView.SetAlpha1.y", "135.5",
"nodeView.SetAlpha2.x", "392.25",
"nodeView.SetAlpha2.y", "135.5"
);
 
#3
Если тупо, то можно и так :)

LayerX1 = LayerX(0, 0, r==r2?0:1, g==g2?0:1, b==b2?0:1, a, z);
Reorder1 = Reorder(LayerX1, "rgbl");
Expand1 = Expand(Reorder1, 0, rLo, rLo, 0, 1, rHi, rHi, 0);
 
#4
Можно заменить твой LayerX на два iSub-a и потом один iAdd (у iSub-ов меняются fg и bg) вот так:

Checker1 = Checker(720, 486, 1, 32, xSize);
Color1 = Color(720, 486, 1, 1, 1, 0, 1, 0);
Blur1 = Blur(Color1, 61.3, xPixels, 0, "gauss", xFilter, "rgba");
QuickShape1 = QuickShape(720, 486, 1, 0, 0, 0, 1, 1, xScale,
width/2, height/2, 0, 0.5, 0, 128, 144, 171, 1, 0, 1, 0,
1, 1, 252, 351, 1, 0, 1, 0, 1, 1, 494, 321, 1, 0, 1, 0, 1,
1, 526, 214, 1, 0, 1, 0, 1, 1, 404, 128, 1, 0, 1, 0, 1, 1,
266, 89, 1, 0, 1, 0, 1, 1);
SetAlpha2 = SetAlpha(Checker1, 1);
Mask(Color1, QuickShape1, "A", 100, 0, 1);
Over1 = Over(Blur1, Checker1, 1, 0, 0);
SetAlpha1 = SetAlpha(Over1, 1);
ISub1 = ISub(SetAlpha2, SetAlpha1, 1, 100);
ISub2 = ISub(SetAlpha1, SetAlpha2, 1, 100);
IAdd1 = IAdd(ISub2, ISub1, 1, 100);
Reorder2 = Reorder(IAdd1, "rgbl");
Expand2 = Expand(Reorder2, 0, 0, 0, 0, 1, rHi, rHi, 0.049);

В этом случае можно даже некое подобие "мягкой маски" сотворить, если Expand-om порулить :))
 
#5
И там, кстати давно лежит diffKeyRGB v1.0

http://www.highend2d.com/shake/macros/?group=shakemacros&section=keying

Самый смех, что работает эта штуковина, именно как мы с тобой, Костик, общими усилиями написали выше (два iSub-a и потом iAdd, я уже ее "распотрошил" :), только управы всякой побольше, но это уже дело техники. Умные мы, все же, мужики :)))))))))))))))))
 
#6
Wpiggy привет!
Тут все ругали Огрызок (Mac), я и сам его бы...в белых тапочках, но в "маковой" версии
этот дифференс кей есть штатный :)
 
#7
Стас, привет!

Может найдутся добрые люди и под PC что-то похожее откомпилят, извраты с ColorX, LayerX и WarpX тормозят по определению :) Проблема в том, что SDK нет в свободном доступе (и, наверное, не будет). А то так бы на Хайенде откомпиленые (читай, гораздо более быстрые) скрипты бы лежали :)
 
Сверху