Render.ru

Carve

Evgeny Kovalev

Активный участник
#1
Всем привет :)
возможно ли сделать равномерный Carve для множества курв без Resample?
проблема в том если не делать Resample,то Carve происходит не на одинаковую длину. это-то понятно почему так происходит .берётся вся длинна одной кривой .
впринципе можно разбить каждую кривую на отдельные примитивы и использовать для каждого примитива длинну , но засада в том ,а как дальше-то... :D
я попробовал сделать, на AttrVop,Carve от точки к точке ,всё работает , но как замиксовать это дело с длинной для каждого примитива на кривой ?

новерное сложно понять мое объяснение поэтому пару скринов и файл в атаче .
буду очень благодарен за любую инфу в каком направление копать дальше =) а может быть тут уже кто-то сталкивался с подобной задачей ?
 

Вложения

#3
Самый простой и удобный способ это ресемпл всех курв на одинаковое количество сегментов.
человек спрашивает же именно, как сделать без ресемпла! (хотя не понимаю, зачем именно это требуется)
Можно просто привязать Carve к длине (периметру) сегмента, который берётся в Measure
 

Evgeny Kovalev

Активный участник
#4
спасибо за ответы :)
вообщем в данном случае когда только два сплайна можно сделать Resample - это более правильный метод , просто и дает то, что нужно ,а что если будет таких сплайнов например 200. тогда Resample будет даволнатаки медленно работать . я возможно ошибаюсь в скорости Resample может быть он будет работать гораздо быстрее чем если сделать без ресампла .

я заморочился этим вопросом только из-за того что будет не 2 сплайна ,а будет гораздо больше и каждому делать Resample....ммм. даже незнаю .

в идеале должно быть как на скрине . при значении карве (2.5 ) первый сплайн почти обрезалася , второй сплайн дошол только до половины , приблизительно до половины .
с Resample каждый сплайн делится на равномерные отрезки и поэтому карве можно сделать равномерно .без ресампле так равномерно обрезать не получится . мне важно чтобы жёлтые линии (отрезание ) были одинаковой длинны !

maiden666 вы имеете ввиду использовать в Carve prim(0,0,"restlength or area ",0)?
carve.jpg
 
#5
спасибо за ответы :)
вообщем в данном случае когда только два сплайна можно сделать Resample - это более правильный метод , просто и дает то, что нужно ,а что если будет таких сплайнов например 200. тогда Resample будет даволнатаки медленно работать . я возможно ошибаюсь в скорости Resample может быть он будет работать гораздо быстрее чем если сделать без ресампла .

я заморочился этим вопросом только из-за того что будет не 2 сплайна ,а будет гораздо больше и каждому делать Resample....ммм. даже незнаю .

в идеале должно быть как на скрине . при значении карве (2.5 ) первый сплайн почти обрезалася , второй сплайн дошол только до половины , приблизительно до половины .
с Resample каждый сплайн делится на равномерные отрезки и поэтому карве можно сделать равномерно .без ресампле так равномерно обрезать не получится . мне важно чтобы жёлтые линии (отрезание ) были одинаковой длинны !

maiden666 вы имеете ввиду использовать в Carve prim(0,0,"restlength or area ",0)? Посмотреть вложение 262774
да, приблизительно это, или периметр, там без разницы, только надо брать обратную зависимость, то-есть чем длиннее сегмент, тем меньше (в процентах) он обрезается. Лучше конечно все вычисления сделать отдельно, вывести в атрибут, и уже его использовать в Карве
 

Evgeny Kovalev

Активный участник
#6
пробую - пробую, но ничего не получается...уже реально всё перепуталось :D
может быть смогли бы накидать простенькую сценку ?
 
#7
ресемпл будет работать быстро, ужеб давно проверил. Засовиваеш все в foreach и compile block делаешь, летать будет. А если не будет после ресемпла сохрани новие курвы в файл. Зачем велосипед изобретать даже не знаю )
 
#8
пробую - пробую, но ничего не получается...уже реально всё перепуталось :D
может быть смогли бы накидать простенькую сценку ?
я тут немного поэкспериментировал, короче, одна из проблем в том, что если нужно получить обратную зависимость, надо писать вот так -
float rest = 1.0 / prim(0, 'restlength', @primnum);

именно "1.0" а не просто "1", иначе в результате ты будешь получать нули ( это кстати после ноды Convert Line)
я использовал Врангл с таким кодом:

float rest = 1.0 / prim(0, 'restlength', @primnum);
f@carve = ch('carve') * rest;

Мы получаем корректный атрибут Carve, который вроде должен делать именно то, что тебе требуется, но тут возникает cледующая проблема - Carve не воспринимает атрибуты в качестве параметров, (видимо, очень старый нод, до которого не дошли руки, то есть, если вставить в First U выражение "@carve", оно не работает), однако он принимает Channel Reference (ch()), и вероятно, экспрешн-функцию prim()
Я сейчас слегка нетрезвый, и голова не очень работает, поэтому прикинь сам, как атрибут Carve вывести в канал, чтобы потом использовать в ноде Carve, если сделаешь это - поделись своим способом
Что касается варианта с експрешном prim(), то я, честно говоря, эти олдскульные экспрешны плохо знаю, конкретно, там требуется номер примитива, и я не очень представляю, где его взять, очевидно, что вексовский @primnum там не работает
 
Последнее редактирование:

Evgeny Kovalev

Активный участник
#9
спасибо за разъяснения.:)
да , работает . но все примитивы одновременно начинают carving
вообщем я порылся в интернете и нашeл , что это "per primitiv carve ". даволнатаки сложно делается.
потестил все возможные для мнея методы и дошло до сложных лупов ,а это означает финиш . на финале будет точно тормознутее чем простой Resample .
время от времени буду тестить , но на этом пока хватит.
у меня другие вопросы образовались , по нормалям . задам вопрос в другой теме :cool:
еще раз спасиб за помощь в разборе этого вопроса :)
 
Сверху