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

Поділитися
Вставка
  • Опубліковано 25 лис 2024

КОМЕНТАРІ • 81

  • @maksimslobodian5211
    @maksimslobodian5211 6 років тому +32

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

  • @МатвейОсипов-л7о
    @МатвейОсипов-л7о 4 роки тому +22

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

  • @AlexUdilov
    @AlexUdilov 6 років тому +60

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

  • @sergeyborzikov7520
    @sergeyborzikov7520 6 років тому +4

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

  • @PetrovMaxim3dmarks
    @PetrovMaxim3dmarks 5 років тому +3

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

  • @sazankarpovich2506
    @sazankarpovich2506 5 років тому

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

  • @Jozeff222
    @Jozeff222 6 років тому +4

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

  • @RobotYoshi
    @RobotYoshi 2 роки тому +1

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

  • @doctormaddyson
    @doctormaddyson 3 роки тому +2

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

    • @canis_mjr
      @canis_mjr 2 роки тому

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

    • @doctormaddyson
      @doctormaddyson 2 роки тому

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

    • @canis_mjr
      @canis_mjr 2 роки тому

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

  • @vitaliyv.7071
    @vitaliyv.7071 6 років тому +2

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

  • @pavelbalagazov3647
    @pavelbalagazov3647 2 роки тому

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

  • @alexeyignatov7297
    @alexeyignatov7297 3 роки тому

    Восторг!

  • @Cryunreal
    @Cryunreal 4 роки тому +2

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

  • @vladyslavlavrenov9167
    @vladyslavlavrenov9167 6 років тому +1

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

  • @kovalenkov
    @kovalenkov 6 років тому +1

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

  • @azersalmanov9498
    @azersalmanov9498 3 роки тому

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

  • @Dddimax
    @Dddimax 6 років тому +2

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

  • @SowilTM
    @SowilTM 3 роки тому +1

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

  • @andreyVK_D3D
    @andreyVK_D3D 3 роки тому

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

  • @АэроФотоВидео
    @АэроФотоВидео 6 років тому

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

  • @3dportableinc64
    @3dportableinc64 3 роки тому

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

  • @beatamvitam4782
    @beatamvitam4782 6 років тому

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

  • @Reshavskyi
    @Reshavskyi 5 років тому

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

  • @DRUMMATEC
    @DRUMMATEC 6 років тому +2

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

  • @EDVVRD
    @EDVVRD 6 років тому

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

  • @vitalie96
    @vitalie96 5 років тому

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

  • @AndruPavlov
    @AndruPavlov 6 років тому

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

  • @RenoirEW
    @RenoirEW 5 років тому

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

  • @SergeiKrumas
    @SergeiKrumas 6 років тому

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

  • @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х-мерном пространстве. Гамильтон придумал кватернионы. Но следующее поколение математиков и физиков не осилило объект, поэтому Хевисайд все упростил до векторов, введя роторы и дивергенции. В итоге сейчас и в физике и в математике имеем массу проблем.

  • @ztarlitz1
    @ztarlitz1 6 років тому

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

    • @JohnWickMovie
      @JohnWickMovie 6 років тому +2

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

  • @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 років тому

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

  • @boole_cat
    @boole_cat 5 років тому

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

    • @hipnc
      @hipnc  5 років тому

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

  • @andreikorda
    @andreikorda 5 років тому

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

  • @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Текстур оверрайд в редшифте работает хорошо

  • @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 років тому

      Ок. Спасибо!

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

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

    • @hipnc
      @hipnc  2 роки тому

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

  • @kreatifchk6354
    @kreatifchk6354 4 роки тому

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

  • @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 років тому

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

  • @m22d52
    @m22d52 2 роки тому

    9:04

  • @TheMaiden6666
    @TheMaiden6666 5 років тому

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

    • @hipnc
      @hipnc  5 років тому

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

    • @hipnc
      @hipnc  5 років тому

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

    • @TheMaiden6666
      @TheMaiden6666 5 років тому

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

    • @TheMaiden6666
      @TheMaiden6666 5 років тому

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

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

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

    • @hipnc
      @hipnc  Рік тому

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

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

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

    • @hipnc
      @hipnc  3 роки тому

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

  • @JohnWickMovie
    @JohnWickMovie 6 років тому

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

  • @kotikvadik3000
    @kotikvadik3000 2 роки тому

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

  • @xlista1543
    @xlista1543 4 роки тому

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