Урок Houdini "Python для чайников" (RUS)

แชร์
ฝัง
  • เผยแพร่เมื่อ 2 เม.ย. 2019
  • Курс по частицам: gum.co/popnet
    Курс по Chops: gum.co/chopnet
    Курс по Redshift: gum.co/rsrop
    Телеграм-канал и чат: t.me/hipnc
    Наш Патреон: / hipnc
    Урок для самых маленьких о том, как использовать язык Python в Houdini для создания инструментов автоматизации.

ความคิดเห็น • 51

  • @taymarov
    @taymarov 5 ปีที่แล้ว +22

    Самое доступное объяснение ООП что видел! Огромное спасибо, Учитель!

    • @RoKoFoRu
      @RoKoFoRu 4 ปีที่แล้ว

      +1 Только приложенные к делу методы начинают "цвести" - наконец понял суть ООП. Благодарю!

  • @maksbers3886
    @maksbers3886 4 ปีที่แล้ว +7

    Спасибо! Вот бы целый курс по Питону для Гудини

  • @hved
    @hved 5 ปีที่แล้ว +7

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

  • @user-tv9dp8np4h
    @user-tv9dp8np4h 5 ปีที่แล้ว +6

    Вы прекрасный лектор!

    • @hipnc
      @hipnc  5 ปีที่แล้ว

      Спасибо!

  • @hipnc
    @hipnc  5 ปีที่แล้ว +8

    Тайминги:
    0:00 - Вступление. Чем Python отличается от VEX
    5:11 - Принципы ООП (Объектно-ориентированного программирования)
    10:54 - Модуль hou
    13:10 - Где можно писать код Python в Гудини
    15:37 - Создание нового Shelf и инструмента на нем
    17:56 - Написание скрипта Object Merger

  • @tammba1
    @tammba1 5 ปีที่แล้ว

    Стас огромное спасибо вам! Этого видео реально не хватало!

  • @AlexUdilov
    @AlexUdilov 5 ปีที่แล้ว

    Очень полезно и понятно, спасибо огромное. Очень приятно было смотреть

  • @eXactMa7X
    @eXactMa7X 5 ปีที่แล้ว

    Хотел просить снять такое видео, а оно уже вышло..
    Прекрасно

  • @N3.1Kryuk
    @N3.1Kryuk ปีที่แล้ว

    Круто. Интересно было узнать про работу с Питоном в Гудини. Будет полезно узнать про работу TD и как именно создаются\полируются инструменты в реальном продакшене.

  • @dan323609
    @dan323609 4 ปีที่แล้ว +2

    4:47 У меня кот задолбал уже толстый ходить тяжело, ползает все время

  • @antonu6492
    @antonu6492 5 ปีที่แล้ว +1

    Отличный урок!
    Я бы еще добавил строчку merge.parm('xformtype').set(1) для того, чтобы параметр "Transform" в "Object Merge" был установлен в "Into This Object" сразу по-умолчанию :)

    • @hipnc
      @hipnc  5 ปีที่แล้ว

      Хорошее дополнение, спасибо!

    • @antonu6492
      @antonu6492 5 ปีที่แล้ว +2

      @@hipnc и еще, после активного теста скрипта c привязкой к горячей клавишe, выявился такой момент, когда при выделении самой ноды Geometry на верхнем уровне (да собственно любой другой ноды, Camera, например) создаётся такая же копия, со всеми вытекающими.
      Вобщем можно еще добавить проверку: находятся ли выделенные ноды в только в контексте Geometry или нет, если нет, то выйдет соотвествующее сообщение, ну и добавлена своеобразная "защита от дураков" :):
      import hou
      if not hou.selectedNodes():
      print("No nodes selected")
      else:
      root=hou.node('/obj/')
      for curnode in hou.selectedNodes():
      name = 'merge_'+curnode.name()
      curType = curnode.type().name()
      if hou.node('/obj/'+name):
      hou.node('/obj/'+name).destroy()
      if curType != 'geo' and curnode.relativePathTo(root) == '../..':
      if curType != 'object_merge':
      node=root.createNode('geo', name)
      merge=node.createNode('object_merge')
      merge.parm('objpath1').set(curnode.path())
      merge.parm('xformtype').set(1)
      node.moveToGoodPosition()
      else:
      print("Wrong object")
      else:
      print("Select nodes inside Geometry context")

  • @sergeyborzikov7520
    @sergeyborzikov7520 5 ปีที่แล้ว

    Очень интересно и полезно! Спасибо!! Интересно, как создать камеру с нужными параметрами?

    • @hipnc
      @hipnc  5 ปีที่แล้ว

      Таким же образом. Мы создаем ноду типа geo, а надо создать ноду типа cam. И точно также можно записывать в нее параметры.

  • @vladimir1125
    @vladimir1125 4 ปีที่แล้ว

    Станислав, спасибо огромное за вводный урок! Удивительно доходчиво! Скажите, не считая модуля hou package и использования методов из него, в целом синтаксис питона в Гудини чем нибудь отличается от чистого питона? Можно ли на первых порах учить язык в отрыве от Гудини, а уже потом погружаться в их связку?

    • @hipnc
      @hipnc  4 ปีที่แล้ว +1

      Язык в отрыве от Гудини, конечно, имеет смысл учить. Вообще нужно в целом погружаться в логику программирования, и не важно, в какой именно среде. Тем более Python очень часто используется в CG-софте.

  • @Nicollaos
    @Nicollaos 5 ปีที่แล้ว

    Ничего не понял.. но очень интересно!

  • @mostovaya_ru
    @mostovaya_ru 3 ปีที่แล้ว

    Верно говорят , что для того , чтобы работать в Гудини , надо быть программистом .

  • @kasali2739
    @kasali2739 4 ปีที่แล้ว

    Save "Node as Python Code" в 18 версии больше не работает?

  • @dimonodinlimon
    @dimonodinlimon 5 ปีที่แล้ว

    лайк еще даже не начав смотреть)
    и вопрос, можно ли в гудини в питоне в самом скрипте интегрировать VEX, как можно в maya. то есть
    "питоновкий скрипт:
    vex;
    питоновский скрипт."
    понимаю нахрена, если есть набор питоновских команд, но просто интересно)))

    • @hipnc
      @hipnc  5 ปีที่แล้ว

      Не очень понимаю, где такое может пригодиться. Вообще, есть метод hou.runVex(), но он берет на вход скомпилированный код, а не исходник.

    • @dimonodinlimon
      @dimonodinlimon 5 ปีที่แล้ว

      @@hipnc да, это наверно нигде не пригодится, ну хотя, просто так для справки было интересно))) спасибо, что ответили)

  • @ztarlitz
    @ztarlitz 5 ปีที่แล้ว

    Ну камон, что значит VEX - функциональный язык, можно задать несколько вопросов на этот счет? Есть ли в VEX переменные? Есть ли в VEX циклы? И главное меняет ли программа написанная на VEX свое состояние во время исполнения?

    • @hipnc
      @hipnc  5 ปีที่แล้ว

      Циклы-условия-переменные есть, конечно. Векс - это урезанный Си. Насчет последнего вопроса я не понял.
      Функциональный или процедурный (извиняюсь, что мешаю их в кучу, но по мне так это одно и то же) - это парадигма программирования, когда ты оперируешь функциями-процедурами, передавая им аргументы. Например если хочешь удалить точку, ты вызываешь функцию removepoint и в качестве аргумента передаешь номер точки. То есть тебе надо где-то найти этот номер точки, где-то его хранить и т.п.
      В отличие от этого подхода объекто-ориентированные языки работают с объектами. У тебя есть конкретный объект класса точка и ты говоришь: точка.удались. То есть тебя не интересуют номера точек, у тебя каждая точка представляет собой цельный объект со всей информацией внутри.

    • @ztarlitz
      @ztarlitz 5 ปีที่แล้ว

      ​@@hipnc Спасибо за ответ. Кажется я понял в чем непонимание. Мне кажется вы имеете ввиду под противопоставлением функциональной-процедурной-ООП парадигмы, на самом деле противопоставление императивной-декларативной парадигмы. Точка удались - это в чистом виде декларативное программирование. В императивном ключе вам надо весь механизм удаления точки описать. А под последним вопросом я имел ввиду следующее, допустим:
      int a = b;
      int a = c;
      в процедурном и ООП языке переменная "a" изменит свое значение с "b" на "c", это и есть изменение состояния программы. В функциональных языках такого произойти не может в принципе они не меняют своего состояния, в этих языках нет понятия переменной, только константы, поэтому в функциональном языке создастся новая константа "a" в другой области памяти и туда запишется значение "c". Изменение состояния это главное отличие процедурных и ООП языков от функциональных.

  • @vfxenthusiast1244
    @vfxenthusiast1244 5 ปีที่แล้ว

    получается if hou.node(..name): возвращает тру или фолс?

    • @hipnc
      @hipnc  5 ปีที่แล้ว

      Если ноды нет, то node() возвратит None, можно использовать в IF таким образом. Если нода есть, то возвращается ссылка на сам объект ноды.

  • @kasali2739
    @kasali2739 3 ปีที่แล้ว

    как прочитать аттрибут с точек(python)? нигде не могу найти, чтобы работало

    • @hipnc
      @hipnc  3 ปีที่แล้ว +1

      Получаем объект hou.geometry (например через hou.node.geometry()). У его класса есть методы для работы с атрибутами. www.sidefx.com/docs/houdini/hom/hou/Geometry.html

  • @vladimirkuleshov4968
    @vladimirkuleshov4968 5 ปีที่แล้ว

    А как сделать чтобы путь создаваемый в ноде object_merge был относительным?

    • @hipnc
      @hipnc  5 ปีที่แล้ว

      В данном случае в этом особо смысла нет, потому что относительный путь это путь, где /obj заменено на ../../
      Но если есть такая необходимость, то метод node.relativePathTo(base_node) возвращает относительный путь до ноды относительно base_node.

    • @vladimirkuleshov4968
      @vladimirkuleshov4968 5 ปีที่แล้ว

      @@hipnc Спасибо, есть именно такая необходимость.

  • @andrejermolenko8813
    @andrejermolenko8813 3 ปีที่แล้ว

    Sublime text платный редактор?

    • @hipnc
      @hipnc  3 ปีที่แล้ว +1

      Он иногда просит за него заплатить. А так можно пользоваться и бесплатной версией без ограничений.

  • @xsarbeats326
    @xsarbeats326 5 ปีที่แล้ว

    Выпусти ролик, с нуля до норм выучение, по изучению ГУДИНИ, пж я очень жду!

    • @Urtello
      @Urtello 5 ปีที่แล้ว

      ролик на полчасика? Надо просто всё смотреть, что уже есть на этом канале. Повторять шаг за шагом. А не за один ролик.

    • @yh_watch3429
      @yh_watch3429 5 ปีที่แล้ว +2

      Я без ролика тебе отвечу. Лучший способ чему-то научится - это ставить перед собой задачи и выполнять их. От самых простых до сложных. Что не ясно гуглить и искать ответы. Видеоуроками заполнять пробелы.

    • @berkutovich
      @berkutovich 5 ปีที่แล้ว

      Боюсь это не реально))) гудини не возможно выучить на 100% ))) есть классный сайт - перевод всем, вот там англ уроки с рус переводом, дерзайте.

    • @adeleprisnilos
      @adeleprisnilos 5 ปีที่แล้ว

      @@berkutovich можно поподробнее про сайт?

  • @yaroslavefimov1941
    @yaroslavefimov1941 5 ปีที่แล้ว

    В версии 16.0.705 почему то создается 2 ноды object_merg и file, причем display flag на ноде file. В 17ой всё ок.

    • @hipnc
      @hipnc  5 ปีที่แล้ว +1

      Это потому что в 16-й версии при создании ноды geo внутри есть нода file. Поэтому можно после создания удалить внутри ноду file.
      node.children()[0].destroy()
      В данном случае мы берем все вложенные ноды, берем первую из них (а она всего одна) и удаляем. После этого уже можно создавать ноду merge.

    • @yaroslavefimov1941
      @yaroslavefimov1941 5 ปีที่แล้ว

      ​@@hipnc Спасибо, классная инфа!

  • @paulvlasov7087
    @paulvlasov7087 2 ปีที่แล้ว

    Для новичков, блять, ага.

  • @danield.7018
    @danield.7018 5 ปีที่แล้ว

    Нода??? В моей универе такие штуки называли графами. Вот почему я смотрю видеоуроки исключительно на английском

    • @oleksandr.zakora
      @oleksandr.zakora 4 ปีที่แล้ว +1

      А узел графа нодами не называли? Боюсь, что ты сильно разочаруешься английской версией, услышав все те же ноды.

    • @oleksandr.zakora
      @oleksandr.zakora 4 ปีที่แล้ว

      Ну а ноды и связи между ними называй графом, кто ж спорит или запрещает.

    • @izvarzone
      @izvarzone 3 ปีที่แล้ว +1

      Англичане их тоже называют нодами, во всех программах (substance designer, Unreal Engine, Houdini). Ни разу не слышал слова graph. В том числе и в уроках.

    • @dezm0n679
      @dezm0n679 3 ปีที่แล้ว +1

      В самом Гудини и даже во встроенных методах и классах это называется Node, так что да, нода