Урок Houdini "Кватернионы для чайников" (RUS)
Курс по частицам: gum.co/popnet
Курс по Chops: gum.co/chopnet
Индивидуальные занятия по Гудини: hipnc.club
Телеграм-канал: t.me/hipnc
Что такое кватернионы, зачем они нужны и как ими пользоваться - вот три главных жизненных вопроса русскоязычной интеллигенции. Отвечаем.
Для понимания необходимо просмотреть уроки:
Векторы для чайников
• Урок Houdini “Векторы ...
Вращение частиц
• Houdini - Ответы - Вра...
Приложение для контроля рендера:
• RenderSpy - приложение...
Пікірлер: 78
Это лучшее объяснения практического применения кватернионов. Большое спасибо за Вашу работу!
вот это поворот)
У меня профессор в ВУЗе объяснить не мог, а ты за 20 минут управился, дай бог здоровья, братец
Традиционно - четко, просто и понятно. Огромное спасибо!
Ух, как класно!!! Большущее спасибо за такой урок!
Спасибо за урок! Ждем практики)
Спасибо за человеческое объяснения сути кватернионов!
Очень толковое видео
Спасибо за такие полезные уроки!
огромная благодарность
Доктор Стас! Спс!
Стас, спасибо - нереально полезный урок.
Восторг!
Круто! Спасибо за урок!
Спасибо за Ваши труды
Спасибо большое , как всегда грамотно и доступно
Спасибо за урок!
Блин, как же долго я искал хоть какой то тутор по работе с камерой.
Углы, обозначающие поворот вокруг осей x,y,z - это не углы Эйлера, это самолётные или корабельные углы. Углы Эйлера задаются совсем по-другому
@canis_mjr
2 жыл бұрын
Это ролик для тех кто не знает что такое математика и механика))
@doctormaddyson
2 жыл бұрын
@@canis_mjr тогда зачем вообще называть эти углы углами Эйлера? В лучшем случае это просто бесполезная для разработчика информация, а в худшем - если вдруг разработчик и столкнется с этой терминологией либо в разговоре, либо после какого-нибудь будущего обновления с4d и 3dsmax, где вдруг по какой-то причине внезапно добавят названия различных углов, то он попадет впросак и перепутает углы.
@canis_mjr
2 жыл бұрын
@@doctormaddyson вы правы, проще сказать три угла и всё сразу понятно. Я часто сталкиваюсь с тем, что углы Михайлова называют углами Эйлера, или наоборот, или просто три угла называют углами Эйлера или Михайлова, аж бесит. Назвался углами Эйлера, значит чётко задал последовательность поворотов и связь угол-ось. Мораль то проста, надо сначала изучать математику ^_^
Первое действительно понятное и наглядное объяснение того, что же такое Кватернионы. Миллион спасибо!
Толково, спасибо!
Спасибо за урок! По чаще бы что-то из обыденного для вас, а для новичков - новое будет!
Спасибо за урок.
Мне тут говорят что есть еще такая штука как ротор, и типо она понятнее чем кватернион и при этом работает так же. Но я не специалист в этом, утверждать ничего не могу)
Стас подскажи какой эквивалент функции VEX chs - в питоне, чтобы строку из какого-нибудь окна(ну например путь до ноды, которую выбрал пользователь) вставить в код выше напечатанный drive.google.com/open?id=1_kZrYqXJpjiZS_GfHZeOd8348IU1HDUN вобщем чтоб с одной контрольной ноды все кэши пересчитывать нажав одну кнопку а не искать их по всему дереву нод
@hipnc
6 жыл бұрын
parm=node.parm("название параметра").evalAsString() node - это объект с выбранной нодой, естественно. Это аналог chs.
@kovalenkov
6 жыл бұрын
Спасибо! Буду экспериментировать
Спасибо за видео, но все равно образовался вопрос. Накинул на объект скаттер, на точки скаттера перекинулись нормали. Как можно эти нормали перевести в ориент аттрибут? Что бы после копи ту поинт поворачивать клоны вокруг нормали? upd. посчитал кросс продукт от нормали и вектора вверх (0,1,0) и записал его в вектор up. после этого с сайта cgwiki скопировал немного кода: matrix3 m = maketransform(@N,@up); @orient = quaternion(m); Помимо того что теория с матрицами осталась для меня в тумане, там есть еще решение по поводу поворота точек на рандомное значение, которое для меня то же непонятно как работает, тут нужно видимо углубляться в математику. Меня все еще интересует такой момент - как можно в point vop повернуть точки. Например я сначала для теста взял готовый ориент (полученный из N и up), преобразовал его в вектор и сразу же обратно в кватернион, и забаиндил в аттрибут orient. Это сразу все сломало. Ну или допустим, что нужно сделать, что бы каждую точку повернуть на 45 градусов от существующей позиции. Вобщем не могли бы вы немного подробней рассказать как вращать точки?
@maksimzyuzin3656
5 жыл бұрын
полученный тобой ориент из нормалей и ап вектора это ориентация(это два вектора N и up), но не аттрибут orient(кватернион). Чтобы повернуть каждую точку на 45 градусов от существующей позиции, нужно в аттрибуте orient (кватернион), задать вектором ось, по которой ты хочешь производить вращение, и потом в радианах повернуть на нужный угол ((для перевода в радианы) a * pi/180, где a - угол в градусах). Например можешь в вексе на точках 1) создать два канала float angle и vector axis 2) и скормить это в аттрибут: @orient = quaternion(angle, axis);
Я так и не понял, как этот кватерион решает проблему шарнирного замка. Я указал в VEX оси вращения по кватериону и крутанув Y на 90 градусов, далее получил такой же результат при повароте X и Z как и при Эйлере. Далее, поигрался немного с нодами типа Rotate by Quaterion. Подключил к входу ноду Quaterion и соответственно вектор, а result сумировал в ноде add с P, sum подал на вход в P в geometryvopoutput. Ожидал, что будет происходить поворот вокруг подключеного вектора, но оказалось что объект сдвинулся на длину вектора но не повернулся. А где обещянный поворот то? Или я как-то не правильно все подключил? Было бы и в правду очень полезно если бы был урок по практическому использованию кватерионов с использованием указаных нод и ситуацию как кватерион выходит их проблемного положения в отличие от Эйлера.
Спасибо, было полезно. Отдельное спасибо за 13:10
Расскажи пожалуйста, возможно ли процедурно создавать несложные текстуры для процедурно генерированых объектов в COP? Например, задача - создать коробки на палетах разных размеров и на них разместить разные эмблемы и знаки. По COP нетворку вообще не очень много информации.
@hipnc
6 жыл бұрын
Да, из коп можно читать текстуру прямо в шейдер. А в нем можно все, что можно в нодовом компоузере типа Нюка или Fusion. То есть накладывать картинки с альфой легко. Там есть и switch, которым можно переключать входные картинки через экспрешн. Большая задача - рандомить параметры в рендер-тайме из шейдера. В мантре можно поставить ноду random, читать с геометрии атрибут seed и переключать результатом текстуры. В редшифте так не получится. И придется похитрить, чтобы читать разные текстуры из копа в рендер-тайм. Возможно через анимированный параметр.
@ArntorRUS
6 жыл бұрын
Не совсем то что имел ввиду. Нужно загрузить UV карту для куба внутрь COP (желательно без сохранения на диск). С координатами точек UV подстроенными под размер композиции (т.е. 1024х1024, 2048х2048 и т.д.) и групами, чтобы определять верх, низ и боковые примитивы. Далее зная где боковые примитивы и их координаты точек в 2д пространстве рандомно раскидать этикетки по ним, чтобы они естественно не выходили за пределы UV сетки. (для этого и координаты). Ну и уже после экспортировать в текстуру шейдера. Я себе так это представляю. Скажем в АЕ можно легко это сделать с помощью выражений. А не выходя из гудини и подстраиваясь к размерам примитивов.
@hipnc
6 жыл бұрын
Да, я об этом и говорю, можно расставить что нужно, куда нужно в КОП. Проблема лишь в том, что в шейдере ты не сможешь поменять параметры Seed внутри КОП нетворка, значит, надо как-то хитрить со скриптами. Возможно получится это сделать через Style sheets, не пробовал.
@ArntorRUS
6 жыл бұрын
Спасибо! Я видимо не совсем понимаю принцип связывания этого всего)
@vladimirfedorchook7942
5 жыл бұрын
@@hipncТекстур оверрайд в редшифте работает хорошо
Отлично! про Gimbal Lock хорошо описано
А можно с октонионами так?
А если у нас камера, как в том же максе таргетная и анимируется таргет а не сама камера(при этом лишь меняются координаты таргетной точки)
@hipnc
5 жыл бұрын
Шарнирный замок возникает везде, где есть повороты по углам Эйлера. Так что в этом случае он просто перенесется на нуль, к которому привязана камера. Надо делать несколько последовательных нулей, где каждый будет отвечать за свой поворот.
Привет, ты не мог бы подсказать, как рендерить анимацию? Пока что все что я нашел по рендеру -- это рендер картинок через мантру
@hipnc
6 жыл бұрын
В имени файла пишешь выражение типа image_$F4.exr - вместо $F4 подставится номер кадра из секвенции. Потом эту секвенцию затягиваешь в компоузер или монтажку.
@untitled_exr
6 жыл бұрын
то есть полноценно рендерить в видео формате нельзя? Можно отрендерить секвенцию и сделать анимацию?
@untitled_exr
6 жыл бұрын
Вот пример того, что я имею в виду вимео ком/260841030 (8:14) он это сделал не только в гудини?
@hipnc
6 жыл бұрын
Можно из мплея сохранять в видео, но не рекомендую. Да, секвенция картинок - наше всё.
@untitled_exr
6 жыл бұрын
А на досуге не мог бы сделать видео обо всем, что касается рендера?
Я этот видос неделю искал! тоже столкнулся с поворотом на 90 град и тем что ось пропадает. ох бедаа....
Спасибо, очень полезно. Сам я работаю в Unity, где ситуаций с поворотами море, так что данное видео пришлось в тему.
Только за одно упоминание углов Эйлера ставлю +
Столкнулся при работе с частицами, ох и подгорело у меня. Принцип понятен, визуально вроде тоже примерно соответствует представлению, а начинаю напрямую задавать значения, какой-то бред. Спасибо за объяснение.
Спасибо за урок! Очень круто. Радуйте нас почаще такими видео. Станислав, подскажите пожалуйста, как добавить свой пресет кода в ноде attribute wrangle или отредактировать пресеты, которые там уже есть по умолчанию.
@hipnc
6 жыл бұрын
Рекомендую сохранять через стандарный вариант - шестеренка/Save preset. Так он сохраняется вместе со всеми дополнительно созданными параметрами, это удобнее. А вообще, эти сниппеты лежат в отдельном файле, и там специальное форматирование. Обсуждение здесь: forums.odforce.net/topic/26244-how-to-enter-my-code-presets-in-a-wrangle/
@NegativeYee
6 жыл бұрын
Ок. Спасибо!
2 вопросика - ты говоришь о том, что оси должны быть нормализованы, однако в случае оси {1,1,0}, она очевидно, не нормализована, и что делать в этом случае? Qconvert в этом случае выдаёт некорректный результат, а если нормализовать - вообще дикий. Второй вопрос - я использую Quaternion + Qrotate для поворота геометрии, однако, как-бы я не ухищрялся, поворот всегда происходит вокруг начала координат, хотя я на вход для оси подавал вектора, полученные разными способами, типа {1,0,0}+@P, надеясь, что это сдвинет ось в позицию точки, но фигушки...Ну собственно вопрос - как задать произвольную ось, то-есть находящуюся в нужной мне точке пространства?
@hipnc
5 жыл бұрын
С помощью Normalize. Это нода в Воп или функция в вексе. Она на выходе выдает вектор с длиной 1.
@hipnc
5 жыл бұрын
По поводу Pivot. Вообще главная задача Orient - это вращение копируемой на частицы геометрии. Если нужно просто повернуть один объект, то есть такой вариант: 1. Сохраняем исходную позицию, двигаем объект в центр координат (@P-центроид) 2. Вращаем кватернионом. 3. Восстанавливаем позицию. Это можно сделать в одном Воп. Берем Bbox от первого входа, его выходы подаем на Average (чтобы найти центроид), Subtract (P-центроид), результат подаем как вектор в Qrotate. Выход Qrotate прибавляем к @P и выводим в позицию. Если объектов много, это вставляется в цикл по ним. Ну или можно сделать одну точку, на ней создать Orient и скопировать геометрию на нее.
@TheMaiden6666
5 жыл бұрын
@@hipnc конечно же я знаю про Normalize. А, возможно я тут просто прохлопал ушами - если использовать вектор 110, входная величина угла 45 не соотвествует той, что мы видим в в атрибуте @ang на выходе после qconvert, (31.8) но это видимо, потому, что это проекции осей, а сферический угол наверное те самые 45 (я надеюсь) c2n.me/3Zg9Yep
@TheMaiden6666
5 жыл бұрын
@@hipnc А, да, спасибо что напомнил, метод с переносом в начало координат мне попадался, где-то в заметках у меня есть Копирование на точку не подходит, мне нужно повернуть массу обьектов, и даже в идеале не обьектов, а отдельных точек каждого куска, которые должны поворачиваться с разной силой, в зависимости от атрибута(представь например кусочки облупившейся краски, края загибаются сильнее вдоль трещины, была мысль для каждого кусочка создать ось вращения в центре, и угол поворота привязать к расстоянию пойнта до этого центра, но не вышло, всё крутится вокруг нуля...
9:04
А поворот сразу по нескольким осям кватернионом не показан
150 лет назад математики ломали голову как описать движение в 3х-мерном пространстве. Гамильтон придумал кватернионы. Но следующее поколение математиков и физиков не осилило объект, поэтому Хевисайд все упростил до векторов, введя роторы и дивергенции. В итоге сейчас и в физике и в математике имеем массу проблем.
а какое практическое применение этому "гимбл локу" зачем его сделали это-ж фактически баг? не?
@hipnc
2 жыл бұрын
Его не сделали, это просто особенность работы углов эйлера, которую необходимо учитывать.
Ты че программист?
Наверное надо сказать и о преимуществе углов Эйлера они все же быстро работают. Кватернионы довольно затратны по вычислениям.
@JohnWickMovie
5 жыл бұрын
Наоборот кватернионы быстрее работают
Числа компле'ксные, а не ко'мплексные.
@hipnc
3 жыл бұрын
Нет. Можно и так, и так. Далее в Википедии указано двойное ударение.
Математики расходимся... И да, правильнее компле́ксные числа
@hipnc
Жыл бұрын
Правильно и так, и так, во всех словарях двойное ударение. Математики обычно проверяют свои гипотезы перед отправкой.
И это "кватернионы для чайников"? Муть какая-то!