Урок Houdini "Кватернионы для чайников" (RUS)

Поделиться
HTML-код
  • Опубликовано: 12 янв 2025

Комментарии • 81

  • @maksimslobodian5211
    @maksimslobodian5211 6 лет назад +32

    Это лучшее объяснения практического применения кватернионов. Большое спасибо за Вашу работу!

  • @МатвейОсипов-л7о
    @МатвейОсипов-л7о 4 года назад +22

    У меня профессор в ВУЗе объяснить не мог, а ты за 20 минут управился, дай бог здоровья, братец

  • @AlexUdilov
    @AlexUdilov 6 лет назад +60

    вот это поворот)

  • @sergeyborzikov7520
    @sergeyborzikov7520 6 лет назад +4

    Традиционно - четко, просто и понятно. Огромное спасибо!

  • @sazankarpovich2506
    @sazankarpovich2506 5 лет назад

    Первое действительно понятное и наглядное объяснение того, что же такое Кватернионы. Миллион спасибо!

  • @PetrovMaxim3dmarks
    @PetrovMaxim3dmarks 6 лет назад +3

    Спасибо за человеческое объяснения сути кватернионов!

  • @doctormaddyson
    @doctormaddyson 3 года назад +2

    Углы, обозначающие поворот вокруг осей x,y,z - это не углы Эйлера, это самолётные или корабельные углы. Углы Эйлера задаются совсем по-другому

    • @canis_mjr
      @canis_mjr 3 года назад

      Это ролик для тех кто не знает что такое математика и механика))

    • @doctormaddyson
      @doctormaddyson 3 года назад

      @@canis_mjr тогда зачем вообще называть эти углы углами Эйлера? В лучшем случае это просто бесполезная для разработчика информация, а в худшем - если вдруг разработчик и столкнется с этой терминологией либо в разговоре, либо после какого-нибудь будущего обновления с4d и 3dsmax, где вдруг по какой-то причине внезапно добавят названия различных углов, то он попадет впросак и перепутает углы.

    • @canis_mjr
      @canis_mjr 3 года назад

      @@doctormaddyson вы правы, проще сказать три угла и всё сразу понятно. Я часто сталкиваюсь с тем, что углы Михайлова называют углами Эйлера, или наоборот, или просто три угла называют углами Эйлера или Михайлова, аж бесит. Назвался углами Эйлера, значит чётко задал последовательность поворотов и связь угол-ось.
      Мораль то проста, надо сначала изучать математику ^_^

  • @RobotYoshi
    @RobotYoshi 2 года назад +1

    Очень толковое видео

  • @Jozeff222
    @Jozeff222 6 лет назад +4

    Блин, как же долго я искал хоть какой то тутор по работе с камерой.

  • @vitaliyv.7071
    @vitaliyv.7071 6 лет назад +2

    Ух, как класно!!! Большущее спасибо за такой урок!

  • @Cryunreal
    @Cryunreal 4 года назад +2

    Мне тут говорят что есть еще такая штука как ротор, и типо она понятнее чем кватернион и при этом работает так же. Но я не специалист в этом, утверждать ничего не могу)

  • @pavelbalagazov3647
    @pavelbalagazov3647 3 года назад

    Доктор Стас! Спс!

  • @3dportableinc64
    @3dportableinc64 3 года назад

    Спасибо, было полезно. Отдельное спасибо за 13:10

  • @azersalmanov9498
    @azersalmanov9498 4 года назад

    огромная благодарность

  • @alexeyignatov7297
    @alexeyignatov7297 3 года назад

    Восторг!

  • @Dddimax
    @Dddimax 6 лет назад +2

    Спасибо за урок! Ждем практики)

  • @vitalie96
    @vitalie96 6 лет назад

    Я так и не понял, как этот кватерион решает проблему шарнирного замка. Я указал в VEX оси вращения по кватериону и крутанув Y на 90 градусов, далее получил такой же результат при повароте X и Z как и при Эйлере.
    Далее, поигрался немного с нодами типа Rotate by Quaterion. Подключил к входу ноду Quaterion и соответственно вектор, а result сумировал в ноде add с P, sum подал на вход в P в geometryvopoutput. Ожидал, что будет происходить поворот вокруг подключеного вектора, но оказалось что объект сдвинулся на длину вектора но не повернулся. А где обещянный поворот то? Или я как-то не правильно все подключил?
    Было бы и в правду очень полезно если бы был урок по практическому использованию кватерионов с использованием указаных нод и ситуацию как кватерион выходит их проблемного положения в отличие от Эйлера.

  • @vladyslavlavrenov9167
    @vladyslavlavrenov9167 6 лет назад +1

    Спасибо за такие полезные уроки!

  • @kovalenkov
    @kovalenkov 6 лет назад +1

    Стас, спасибо - нереально полезный урок.

  • @Reshavskyi
    @Reshavskyi 5 лет назад

    Столкнулся при работе с частицами, ох и подгорело у меня. Принцип понятен, визуально вроде тоже примерно соответствует представлению, а начинаю напрямую задавать значения, какой-то бред. Спасибо за объяснение.

  • @cultura_ue
    @cultura_ue 5 лет назад +1

    Спасибо за видео, но все равно образовался вопрос. Накинул на объект скаттер, на точки скаттера перекинулись нормали. Как можно эти нормали перевести в ориент аттрибут? Что бы после копи ту поинт поворачивать клоны вокруг нормали?
    upd. посчитал кросс продукт от нормали и вектора вверх (0,1,0) и записал его в вектор up.
    после этого с сайта cgwiki скопировал немного кода:
    matrix3 m = maketransform(@N,@up);
    @orient = quaternion(m);
    Помимо того что теория с матрицами осталась для меня в тумане, там есть еще решение по поводу поворота точек на рандомное значение, которое для меня то же непонятно как работает, тут нужно видимо углубляться в математику.
    Меня все еще интересует такой момент - как можно в point vop повернуть точки. Например я сначала для теста взял готовый ориент (полученный из N и up), преобразовал его в вектор и сразу же обратно в кватернион, и забаиндил в аттрибут orient. Это сразу все сломало. Ну или допустим, что нужно сделать, что бы каждую точку повернуть на 45 градусов от существующей позиции.
    Вобщем не могли бы вы немного подробней рассказать как вращать точки?

    • @wgway
      @wgway 5 лет назад +1

      полученный тобой ориент из нормалей и ап вектора это ориентация(это два вектора N и up), но не аттрибут orient(кватернион). Чтобы повернуть каждую точку на 45 градусов от существующей позиции, нужно в аттрибуте orient (кватернион), задать вектором ось, по которой ты хочешь производить вращение, и потом в радианах повернуть на нужный угол ((для перевода в радианы) a * pi/180, где a - угол в градусах).
      Например можешь в вексе на точках
      1) создать два канала float angle и vector axis
      2) и скормить это в аттрибут: @orient = quaternion(angle, axis);

  • @ivank2661
    @ivank2661 3 года назад

    150 лет назад математики ломали голову как описать движение в 3х-мерном пространстве. Гамильтон придумал кватернионы. Но следующее поколение математиков и физиков не осилило объект, поэтому Хевисайд все упростил до векторов, введя роторы и дивергенции. В итоге сейчас и в физике и в математике имеем массу проблем.

  • @SowilTM
    @SowilTM 3 года назад +1

    Спасибо, очень полезно. Сам я работаю в Unity, где ситуаций с поворотами море, так что данное видео пришлось в тему.

  • @kovalenkov
    @kovalenkov 6 лет назад

    Стас подскажи какой эквивалент функции VEX chs - в питоне, чтобы строку из какого-нибудь окна(ну например путь до ноды, которую выбрал пользователь) вставить в код выше напечатанный drive.google.com/open?id=1_kZrYqXJpjiZS_GfHZeOd8348IU1HDUN вобщем чтоб с одной контрольной ноды все кэши пересчитывать нажав одну кнопку а не искать их по всему дереву нод

    • @hipnc
      @hipnc  6 лет назад +1

      parm=node.parm("название параметра").evalAsString()
      node - это объект с выбранной нодой, естественно. Это аналог chs.

    • @kovalenkov
      @kovalenkov 6 лет назад

      Спасибо! Буду экспериментировать

  • @ArntorRUS
    @ArntorRUS 6 лет назад

    Расскажи пожалуйста, возможно ли процедурно создавать несложные текстуры для процедурно генерированых объектов в COP? Например, задача - создать коробки на палетах разных размеров и на них разместить разные эмблемы и знаки.
    По COP нетворку вообще не очень много информации.

    • @hipnc
      @hipnc  6 лет назад

      Да, из коп можно читать текстуру прямо в шейдер. А в нем можно все, что можно в нодовом компоузере типа Нюка или Fusion. То есть накладывать картинки с альфой легко. Там есть и switch, которым можно переключать входные картинки через экспрешн.
      Большая задача - рандомить параметры в рендер-тайме из шейдера.
      В мантре можно поставить ноду random, читать с геометрии атрибут seed и переключать результатом текстуры. В редшифте так не получится.
      И придется похитрить, чтобы читать разные текстуры из копа в рендер-тайм. Возможно через анимированный параметр.

    • @ArntorRUS
      @ArntorRUS 6 лет назад

      Не совсем то что имел ввиду. Нужно загрузить UV карту для куба внутрь COP (желательно без сохранения на диск). С координатами точек UV подстроенными под размер композиции (т.е. 1024х1024, 2048х2048 и т.д.) и групами, чтобы определять верх, низ и боковые примитивы.
      Далее зная где боковые примитивы и их координаты точек в 2д пространстве рандомно раскидать этикетки по ним, чтобы они естественно не выходили за пределы UV сетки. (для этого и координаты).
      Ну и уже после экспортировать в текстуру шейдера.
      Я себе так это представляю. Скажем в АЕ можно легко это сделать с помощью выражений. А не выходя из гудини и подстраиваясь к размерам примитивов.

    • @hipnc
      @hipnc  6 лет назад

      Да, я об этом и говорю, можно расставить что нужно, куда нужно в КОП. Проблема лишь в том, что в шейдере ты не сможешь поменять параметры Seed внутри КОП нетворка, значит, надо как-то хитрить со скриптами. Возможно получится это сделать через Style sheets, не пробовал.

    • @ArntorRUS
      @ArntorRUS 6 лет назад

      Спасибо! Я видимо не совсем понимаю принцип связывания этого всего)

    • @vladimirfedorchook7942
      @vladimirfedorchook7942 6 лет назад

      @@hipncТекстур оверрайд в редшифте работает хорошо

  • @RenoirEW
    @RenoirEW 5 лет назад

    Я этот видос неделю искал! тоже столкнулся с поворотом на 90 град и тем что ось пропадает. ох бедаа....

  • @boole_cat
    @boole_cat 5 лет назад

    А если у нас камера, как в том же максе таргетная и анимируется таргет а не сама камера(при этом лишь меняются координаты таргетной точки)

    • @hipnc
      @hipnc  5 лет назад

      Шарнирный замок возникает везде, где есть повороты по углам Эйлера. Так что в этом случае он просто перенесется на нуль, к которому привязана камера. Надо делать несколько последовательных нулей, где каждый будет отвечать за свой поворот.

  • @АэроФотоВидео
    @АэроФотоВидео 6 лет назад

    Спасибо за Ваши труды

  • @ztarlitz1
    @ztarlitz1 6 лет назад

    Наверное надо сказать и о преимуществе углов Эйлера они все же быстро работают. Кватернионы довольно затратны по вычислениям.

    • @JohnWickMovie
      @JohnWickMovie 6 лет назад +2

      Наоборот кватернионы быстрее работают

  • @beatamvitam4782
    @beatamvitam4782 6 лет назад

    Спасибо за урок! По чаще бы что-то из обыденного для вас, а для новичков - новое будет!

  • @andreikorda
    @andreikorda 5 лет назад

    А можно с октонионами так?

  • @EDVVRD
    @EDVVRD 6 лет назад

    Спасибо большое , как всегда грамотно и доступно

  • @DRUMMATEC
    @DRUMMATEC 6 лет назад +2

    Только за одно упоминание углов Эйлера ставлю +

  • @untitled_exr
    @untitled_exr 6 лет назад

    Привет, ты не мог бы подсказать, как рендерить анимацию?
    Пока что все что я нашел по рендеру -- это рендер картинок через мантру

    • @hipnc
      @hipnc  6 лет назад

      В имени файла пишешь выражение типа image_$F4.exr - вместо $F4 подставится номер кадра из секвенции. Потом эту секвенцию затягиваешь в компоузер или монтажку.

    • @untitled_exr
      @untitled_exr 6 лет назад

      то есть полноценно рендерить в видео формате нельзя? Можно отрендерить секвенцию и сделать анимацию?

    • @untitled_exr
      @untitled_exr 6 лет назад

      Вот пример того, что я имею в виду
      вимео ком/260841030 (8:14)
      он это сделал не только в гудини?

    • @hipnc
      @hipnc  6 лет назад

      Можно из мплея сохранять в видео, но не рекомендую. Да, секвенция картинок - наше всё.

    • @untitled_exr
      @untitled_exr 6 лет назад

      А на досуге не мог бы сделать видео обо всем, что касается рендера?

  • @ЕвгенийВодолажский-н8в

    а какое практическое применение этому "гимбл локу" зачем его сделали это-ж фактически баг? не?

    • @hipnc
      @hipnc  2 года назад

      Его не сделали, это просто особенность работы углов эйлера, которую необходимо учитывать.

  • @AndruPavlov
    @AndruPavlov 6 лет назад

    Круто! Спасибо за урок!

  • @andreyVK_D3D
    @andreyVK_D3D 4 года назад

    Отлично! про Gimbal Lock хорошо описано

  • @NegativeYee
    @NegativeYee 6 лет назад

    Спасибо за урок! Очень круто. Радуйте нас почаще такими видео. Станислав, подскажите пожалуйста, как добавить свой пресет кода в ноде attribute wrangle или отредактировать пресеты, которые там уже есть по умолчанию.

    • @hipnc
      @hipnc  6 лет назад

      Рекомендую сохранять через стандарный вариант - шестеренка/Save preset. Так он сохраняется вместе со всеми дополнительно созданными параметрами, это удобнее. А вообще, эти сниппеты лежат в отдельном файле, и там специальное форматирование. Обсуждение здесь: forums.odforce.net/topic/26244-how-to-enter-my-code-presets-in-a-wrangle/

    • @NegativeYee
      @NegativeYee 6 лет назад

      Ок. Спасибо!

  • @TheMaiden6666
    @TheMaiden6666 6 лет назад

    2 вопросика - ты говоришь о том, что оси должны быть нормализованы, однако в случае оси {1,1,0}, она очевидно, не нормализована, и что делать в этом случае? Qconvert в этом случае выдаёт некорректный результат, а если нормализовать - вообще дикий.
    Второй вопрос - я использую Quaternion + Qrotate для поворота геометрии, однако, как-бы я не ухищрялся, поворот всегда происходит вокруг начала координат, хотя я на вход для оси подавал вектора, полученные разными способами, типа {1,0,0}+@P, надеясь, что это сдвинет ось в позицию точки, но фигушки...Ну собственно вопрос - как задать произвольную ось, то-есть находящуюся в нужной мне точке пространства?

    • @hipnc
      @hipnc  6 лет назад

      С помощью Normalize. Это нода в Воп или функция в вексе. Она на выходе выдает вектор с длиной 1.

    • @hipnc
      @hipnc  6 лет назад

      По поводу Pivot. Вообще главная задача Orient - это вращение копируемой на частицы геометрии.
      Если нужно просто повернуть один объект, то есть такой вариант:
      1. Сохраняем исходную позицию, двигаем объект в центр координат (@P-центроид)
      2. Вращаем кватернионом.
      3. Восстанавливаем позицию.
      Это можно сделать в одном Воп. Берем Bbox от первого входа, его выходы подаем на Average (чтобы найти центроид), Subtract (P-центроид), результат подаем как вектор в Qrotate. Выход Qrotate прибавляем к @P и выводим в позицию. Если объектов много, это вставляется в цикл по ним.
      Ну или можно сделать одну точку, на ней создать Orient и скопировать геометрию на нее.

    • @TheMaiden6666
      @TheMaiden6666 6 лет назад

      ​@@hipnc конечно же я знаю про Normalize. А, возможно я тут просто прохлопал ушами - если использовать вектор 110, входная величина угла 45 не соотвествует той, что мы видим в в атрибуте @ang на выходе после qconvert, (31.8) но это видимо, потому, что это проекции осей, а сферический угол наверное те самые 45 (я надеюсь) c2n.me/3Zg9Yep

    • @TheMaiden6666
      @TheMaiden6666 6 лет назад

      @@hipnc А, да, спасибо что напомнил, метод с переносом в начало координат мне попадался, где-то в заметках у меня есть
      Копирование на точку не подходит, мне нужно повернуть массу обьектов, и даже в идеале не обьектов, а отдельных точек каждого куска, которые должны поворачиваться с разной силой, в зависимости от атрибута(представь например кусочки облупившейся краски, края загибаются сильнее вдоль трещины, была мысль для каждого кусочка создать ось вращения в центре, и угол поворота привязать к расстоянию пойнта до этого центра, но не вышло, всё крутится вокруг нуля...

  • @kreatifchk6354
    @kreatifchk6354 4 года назад

    А поворот сразу по нескольким осям кватернионом не показан

  • @m22d52
    @m22d52 2 года назад

    9:04

  • @SergeiKrumas
    @SergeiKrumas 6 лет назад

    Спасибо за урок!

  • @ВалерийЖмышенко-г7й

    Числа компле'ксные, а не ко'мплексные.

    • @hipnc
      @hipnc  3 года назад

      Нет. Можно и так, и так. Далее в Википедии указано двойное ударение.

  • @JohnWickMovie
    @JohnWickMovie 6 лет назад

    Ты че программист?

  • @МаирбекЦховребов-и7и

    Математики расходимся... И да, правильнее компле́ксные числа

    • @hipnc
      @hipnc  Год назад

      Правильно и так, и так, во всех словарях двойное ударение. Математики обычно проверяют свои гипотезы перед отправкой.

  • @kotikvadik3000
    @kotikvadik3000 3 года назад

    И это "кватернионы для чайников"? Муть какая-то!

  • @xlista1543
    @xlista1543 4 года назад

    Спасибо за урок.