На CBB – Telegram
На CBB
109 subscribers
98 photos
70 videos
5 files
181 links
Блог о развитии компьютерной графики.
Субъективные заметки, наблюдения, исследования.
Download Telegram
#cgnews #modo #foundry

Modo, всё.

Компания Foundry объявила о своем решении прекратить разработку инструмента для 3D-моделирования Modo после выхода версии Modo 17.1 в конце этого года. Это стратегическое решение позволит Foundry сосредоточиться на своих основных предложениях и инвестировать в новые решения, отвечающие развивающимся потребностям медиа и развлекательного сообщества.

https://www.foundry.com/news-and-awards/foundry-winds-down-modo-development

Кто ещё помнит о Athera от Foundry? Платформа, ранее известная как Elara, предоставляла облачный производственный сервис "все в одном", включая виртуальные рабочие места, аренду программного обеспечения, рендеринг, инструменты для совместной работы и аналитику, но в итоге массово так и не пошло. Проект свернули через 18 месяцев после открытия и полностью закрыли к 2020 году.

https://www.cgchannel.com/2019/11/foundry-closes-athera/
👌3
#learning #python #cg #exercism

Отступы - часть кода!

Чёт умильнулся с того как некоторые CG-блогеры изучают Python. Я конечно слышал, что конспектирование материала который читаешь помогает лучше запоминать информацию, однако в программировании крайне важна практика и хорошая IDE, 140 упражнений на ветвление и всё подряд и синтаксис станет вашим вторым языком, что и забыть захочется.

Никогда конспекты по языкам программирования не вёл, даже по системным ЯП, у меня не прижился такой подход, тем более по синтаксису и всегда это были лишь какие-то короткие заметки..
Но может зря?? И рисование котиков на свободных местах реально бустит и помогает в изучении языков? А может это способ чтобы построить ассоциативный ряд в памяти?
Вспоминаю про грустного кота и сразу помню как применять бранч 😅
Каким бы чудесным и весёлым стало изучение ассемблера с таким оформлением, я бы честно говоря посмотрел на арт-бук от этого автора.
💯4😁1🎉1🤡1
#houdini #hdk #github #opensource #fluid #ml

HinaFlow - это дифференцируемый солвер жидкостей и солвер жидкостей на основе глубокого машинного обучения с открытым исходным кодом на Houdini HDK*.

* компилировать надо из исходников под свою платформу и для своей версии Houdini, но это и не сложно.

HinaFlow - это рекурсивный акроним, означающий "HinaFlow is not a Fluid Learning Optimization Workflow".

Ключевые особенности:
HinaFlow работает в двух контекстах: Houdini и Python. В обоих контекстах используются ноды Houdini HDK. (Ноды Python в Houdini отсутствуют).

- При работе в чистом Houdini вы можете использовать HDK HinaFlow в чистом виде как расширенный ассет Houdini. Это ничем не отличается от стандартного рабочего процесса в Houdini.
- При работе в контексте Python вы можете использовать все преимущества всей экосистемы Python, включая PyTorch, TensorFlow, NumPy и т. д., чтобы создать свой собственный конвейер для солвинга.
Оба контекста полностью совместимы друг с другом. Вы можете переключаться между ними в любое время.

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

В Hinaflow в основном используется phiflow в качестве бэкенда для солвинга жидкостей который является полностью дифференцируемым фреймворком с поддержкой PyTorch, JAX и TensorFlow.

https://github.com/HinaPE/HinaFlow
🔥6👍1😍1
#vex #python #programming

Пост вдохновлённый небольшой статьёй A list of ternary operators о разнообразии тернарных операторов.

В VEX или Python наш тернарный оператор ? : называется тернарным потому что принимает 3 аргумента и право называться так стало монопольным поскольку других операторов такого плана не было, но VEX так же имеет ещё один непопулярный способ записать тернарное выражение и мне кажется он проще.

Посмотрим на простую запись ветвления с помощью if:
int res;
if(10 > 5){
res = 42;
}else{
res = 123;
}


Ассемблер (LLVM IR ) у этого куска кода такой:
; Function Attrs: alwaysinline nounwind
define private void @__vex_snippet() #0 {
__llvm_entry:
%return = call i64 @"gt@III"(i64 10, i64 5)
%0 = icmp ne i64 %return, 0
br i1 %0, label %true, label %false

true:
store i64 42, i64* %_bound_res
br label %end
false:
store i64 123, i64* %_bound_res
br label %end
end:
ret void
}


Глазам с непривычки может быть тяжело здесь увидеть осмысленный код, но он не сложный.
Здесь мы видим в основном метки, базовые инструкции и вызов call, функция сравнения чисел на больше call i64 @"gt@III"(i64 10, i64 5), а ниже идёт просто выбор бранча в зависимости от результата.

Но есть ли разница в том, что делает тернарный оператор или это будет тот же самый код? Оказывается, что нет.
int res = 10 > 5 ? 42 : 123;

; Function Attrs: alwaysinline nounwind
define private void @__vex_snippet() #0 {
__llvm_entry:
%return = call i64 @"gt@III"(i64 10, i64 5)
%0 = icmp ne i64 %return, 0
%. = select i1 %0, i64 42, i64 123
store i64 %., i64* %_bound_res
ret void
}
Здесь мы уже не прыгаем по бранчам, а используем инструкцию select, она используется для выбора одного значения на основе условия, без ветвления на уровне IR.

Быстрее ли этот работает? Возможно, но как обычно всегда нужно делать тесты профилирования на производительность. Удобнее ли это? Однозначно да, особенно когда нужно результат присвоить тут же переменной.

Однако, если покопаться в документации по функциям VEX, а так же коде стандартной библиотеки окажется, что мы так же можем вызывать эту функцию select прямо из сниппета самого Wrangle:
int res = select(10 > 5, 42, 123);


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

Разница между select и утвержением if заключается в том, что select оценивает свои аргументы независимо от значения условия. Разумное использование select позволяет избежать сравнений, что позволяет преобразовывать большие участки кода в нативный код.

Мне кажется подход с select может быть легче для восприятия и допускает меньше ошибок при написании кода поскольку это выглядит как ещё одна функция, а не какой-то особый синтаксический сахар который нужно запоминать, ну а выбор всегда остаётся за пользователем.
🔥4👍2
#math #houdini

🔥 Хороший анонс!
#gameengine #opensource #github

Кто хотел потестить какой-то другой движок кроме Unity или UE с плотной поддержкой USD в том числе?
Теперь Nau Engine вышел в бету с открытыми исходниками. И это отличный повод покопаться в структуре кода.

https://habr.com/en/companies/nau_engine/news/861316/
🔥2
#houdini #apex #rigging

( )
( )\ ) ( /(
)\ (()/(( )\())
((((_)( /(_))\ ((_)\
)\ _ )\(_))((_)__((_)
(_)_\(_) _ \ __\ \/ /
/ _ \ | _/ _| > <
/_/ \_\|_| |___/_/\_\


Matt Estela выложил WIP по APEX на своём ресурсе это взгляд дженералиста на APEX, а не как профессионального сетапщика, но и тем более интересно прочитать про этот взгляд со стороны.
Ресурс пока конечно суховат, но можно прочитать про общие концепции, идеи, более простыми словами для артиста чем документация и не сильно углубляясь в детали чтобы сложилось представление об этом контексте.

https://tokeru.com/cgwiki/HoudiniApex.html
👍3
#pipeline #ffmpeg #opensource

Иногда из какого-то шота или видео требуется сделать нарезку для превью через определённое количество кадров чтобы по нему можно было понять всё содержимое от начала до конца.

В очень короткой и наглядной статье показано как это сделать без шума и пыли всего лишь с помощью ffmpeg и кстати это хороший кандидат на то чтобы этот скрипт можно было обернуть в TOP ассет, например с помощью Generic Generator или украсть параметры и вставить в аналогичную ноду ffmpeg и пользоваться прямо из Houdini.

https://steelcm.com/blog/generating-video-sprites-using-ffmpeg/
👍2
#openusd #maya #animation

Мм, что-то вкусное и альтернативное наконец-то для майки выкатили.

ShapeFX Loki - это наше приложение для создания контента нового поколения DCC, созданное специально для OpenUSD. Думайте об этом как о USDView на стероидах - расширенном наборе инструментов, разработанном для того, чтобы выходить за рамки простого просмотра и предлагать мощные функции для оптимизации рабочих процессов с OpenUSD.

Разработанный на базе нашей новой платформы приложений OpenDCC (более подробная информация будет представлена в ближайшее время), ShapeFX Loki обладает функциями и адаптивностью необходимыми для решения сложных задач современных производственных конвейеров.

ShapeFX Loki доступен для публичного скачивания с сегодняшнего дня! Запуск с поддержкой Windows, скоро появятся версии для macOS и Linux!

Мы полностью привержены поддержке индустрии визуальных эффектов и анимации с помощью ShapeFX Loki.

https://shapefx.app/
🔥1💩1
#aoc #day01 #challenge #contest #vex

▄▄▄ ▒█████ ▄████▄
▒████▄ ▒██▒ ██▒▒██▀ ▀█
▒██ ▀█▄ ▒██░ ██▒▒▓█ ▄
░██▄▄▄▄██ ▒██ ██░▒▓▓▄ ▄██▒
▓█ ▓██▒░ ████▓▒░▒ ▓███▀ ░
▒▒ ▓▒█░░ ▒░▒░▒░ ░ ░▒ ▒ ░
▒ ▒▒ ░ ░ ▒ ▒░ ░ ▒
░ ▒ ░ ░ ░ ▒ ░
░ ░ ░ ░ ░ ░

Декабрь начался, а значит время попрактиковаться в решении паззлов на AoC ⚡️. Никогда не участвовал в них на VEX, но это может быть довольно забавный и интересный опыт учитывая, что в VEX у нас ограниченный набор структур данных и готовых алгоритмов.
Первый день довольно простой должен быть и не сложный на самом деле, но на всякий решение кинул на гист если будет кому интересно и захочет сравнить со своим.

GitHub Gist:
https://gist.github.com/alexwheezy/690f31912e752ca1da89f38b7d8bb861
👍1😁1
#aoc #day02 #challenge #contest #vex

▄▄▄ ▒█████ ▄████▄
▒████▄ ▒██▒ ██▒▒██▀ ▀█
▒██ ▀█▄ ▒██░ ██▒▒▓█ ▄
░██▄▄▄▄██ ▒██ ██░▒▓▓▄ ▄██▒
▓█ ▓██▒░ ████▓▒░▒ ▓███▀ ░
▒▒ ▓▒█░░ ▒░▒░▒░ ░ ░▒ ▒ ░
▒ ▒▒ ░ ░ ▒ ▒░ ░ ▒
░ ▒ ░ ░ ░ ▒ ░
░ ░ ░ ░ ░ ░


Второй день зашёл уже с говнолина 🙂 Однако самая полезная часть этого дня в этом контесте функция, итератор window которая пишется легко и бывает частенько нужна когда требует плотно поработать с парами соседних элементов в буфере. Она возвращает слайс со "скользящим окном" из буфера. "Скользящее окно" имеет длину size и на каждой итерации перемещается вперед на величину advance. Возможно будет кому-то она будет полезна, адаптировать её не только под строки не сложно, перегрузить по параметру функции можно на int[].

void window(string input; int size, advance){
if(size < 1 || advance < 1){
error("Assert, size or advance must be greater zero");
return;
}

if(len(input) < size){
// Maybe return the whole string?
// Or something else
return;
}

int l = 0;
int r = len(input);
while(l < r){
string slice = slice(input, l, l + size);
// something code
if(r - l <= size) break;
l += advance;
}
}

// Tests
// Size
// window("abcdefg", 1, 1); // a, b, c, d, e, f, g
// window("abcdefg", 2, 1); // ab, bc, cd, de, ef, fg
// window("abcdefg", 3, 1); // abc, bcd, cde, def, efg
// window("abcdefg", 4, 1); // abcd bcde cdef defg
// window("abcdefg", 5, 1); // abcde bcdef cdefg
// window("abcdefg", 6, 1); // abcdef bcdefg

// Advance
// window("abcdefg", 2, 3); // ab de g
// window("abcdefg", 3, 3); // abc, def, g
// window("abcdefg", 1, 2); // a, c, e, g
// window("abcdefg", 1, 3); // a, d, g


GitHub Gist:
https://gist.github.com/alexwheezy/c8cd4af3bbd86fcd20a5fa520739d770
#3december #meme #houdini

С праздником!

Да, в Houdini на данный момент 10 отдельных маленьких и не очень ЯП на которых можно что-то программировать, некоторые мёртвые или почти мёртвые, Hnoscript Lang и Hnoscript Expression имеют разный синтаксис, многие не считают Hnoscript Expression как таковым языком, а больше языком выражений в духе $FF > 10, однако у него тоже есть control flow: {float out = 0; for (i = 0; i < 10; i++) {out += i;} return out;}, место есть и для джаваскрипта, APEX Script похож на Python, но со статической, строгой типизацией, но вообще учитывая любовь сайдам к С-подобным языкам он не последний..или последний(?)

Вот и думайте! 🙂
🎉32
#houdini #python #qt #beta

Да, так получилось, что SideFX из-за более короткого цикла разработки в 20.5 (в чём они сами признались, а иначе бы 20.5 пришлось бы двигать намного дальше от релиза) не успели перейти на следующей стандарт библиотеки PyQt6 вместе с VFX Reference Platform.
Поэтому в Houdini 20.5 мы видим достаточно много ошибок в Python Panels и других инструментах.

Одна из проблем решалась с помощью отключения песочницы QTWEBENGINE_CHROMIUM_FLAGS='--no-sandbox' для хрома, но на свой страх и риск и вот теперь они анонсировали новую бету с PyQt6 в которой будут решать все потенциальные проблемы.
Однако, я всё равно не понял почему они решили всех предупредить об этом вместо того чтобы тихо допилить всё к H21 когда всех и так злит, что H20.5 оказалась намного менее стабильная чем 20.0 и 19.5, а тут ещё и заявления, что может всё равно что-то не работать 🤡

Тестирование продукта становится всё более открытым 🙂
👍2👌2😁1😢1🤡1
This media is not supported in your browser
VIEW IN TELEGRAM
#houdini #meme #python #noscripting

- Хорошо, я подниму тебе зарплату вдвое, но только если в Network Editor когда-нибудь пойдёт управляемый снег..
- Ни слова больше!
😁10🔥2💯1
Media is too big
VIEW IN TELEGRAM
#houdini #help #patching #estereggs

Начиная с H20.5 сломалась загрузка примеров через внешний браузер устанавливаемый переменной HOUDINI_EXTERNAL_HELP_BROWSER, наверняка с этим кто-то так же сталкивался.

Но раньше ведь это работало...

Исследуем проблему. При нажатии на кнопку Load из документации мы посылаем на веб-сервер запрос PUT https:/127.0.0.1:xxxx/_load_example к нашему эндпоинту _load_example, однако он стабильно возвращает 404 Not Found.
Дело в том, что согласно стандарту HTML единственные допустимые значения для атрибута method - get и post, соответствующие HTTP-методам GET и POST, поэтому PUT не будет работать с атрибутом метода HTML.

Не будем ждать пока они доберутся до этого тикета и сами "пропатчим" методы запроса в роутере и загрузчике и надо изменить лишь метод запроса на POST и всё!

p.s: в конце видео есть пасхалка, пока разбирался с роутингом, увидел, что там есть эндпоинт (allicons) ведущий на все иконки в H. Кому не хватало иконок для своих инструментов в noscript? 🙂
🎉4🙏1
#gaffer #katana #usd #opensource #foundry

Хотя проект Gaffer и опенсорсный тем не менее к своим пользователям разработчики активно прислушиваются и в последнем отчёте Gaffer User Group - December 2024 показали много обновлений по части UI/UX, стало местами намного удобней и практичней.

Новое из отчёта:
- Gaffer RenderMan, да, потихоньку начали интеграцию ещё одного рендера для своего приложения помимо: 3Delight, Arnold, Cycles, работы предстоит ещё много, однако какие-то базовые вещи уже сделаны.
- Gaffer ML. Ещё одна современная гонка в технологиях это поддержка ML (Machine Learning) операторов для работы. Сделали небольшие примеры на ONNX модели.

Какой у этого может быть use case? В отчёте они показывают как с помощью операторов можно в исходном изображении на примере шота из фильма Interstellar плашки по глубине расставить для композа в автоматическом режиме.
А так же большое количество манипуляций для фильтрации изображений, стилизации и т.д.

Так же вчера релизнулась Katana 8.0, теперь она поставляется с полной поддержкой - к USD и обратно - внутри приложения.
Теперь артисты могут легко конвертировать данные Katana в родные данные USD с помощью новой ноды KatanaToUsd.
Это означает, что артисты могут использовать инструменты которые они любят в Katana и применять их к данным в USD. Без необходимости переписывать инструменты конкретно для USD.
Вообще любопытно конечно насколько быстро происходит конвертация данных туда и обратно и конечно каким функционалом теперь обладает Katana для работы с USD.
🔥1
#cg #meme

Базовые механики любого чата. Literally.
😁21👍1💯1
#aoc #houdini #contest #vex #hdk #python #top #expression #solaris #dop

Увидел очень прикольный, японский ресурс, где пользователи уже который год соревнуются в решении задач Advent of Code используя Houdini. Можно почерпнуть много новых, приёмов работы и подходов для самых разных контекстов. Автопереводчики в целом справляются, поэтому проблем с пониманием быть не должно.

https://qiita.com/advent-calendar/2024/houdini
🔥4
This media is not supported in your browser
VIEW IN TELEGRAM
#houdini #vex #formatter #noscripting #python #devlog

Концепт этого маленького проекта возник давно, когда я увидел, что артисты пишут в "сниппетах" в очень разном стиле, как удобно им, однако визуально выглядит хорошо когда код "ровный" и выдержанный в едином стиле везде. Я недолюбливаю внешние редакторы кода для этого поскольку это выглядит громоздко и окна сниппета мне всегда хватало.

В VEX к сожалению нет встроенного авто-форматирования кода, а SideFX не оставила спецификаций или стандартов которых можно придерживаться, поэтому все пишут по-разному.

Короче говоря, мы хотим из такого:
if(1)
{
doSomething(1);
}
else if(2)
{
doSomething(1, 2);
}

Сделать такое:
if (1) {
doSomething(1);
} else if (2) {
doSomething(1, 2);
}

В первой итерации проекта просто "прикрепим" фоном clang-format с гугловским стилем форматирования (по умолчанию) кода на языке C к сниппету и с колбэком на обновление сниппета, когда он меняется - код форматируется, по демонстрации видно, что уже неплохой результат получается.
🔥1🤔1
This media is not supported in your browser
VIEW IN TELEGRAM
#houdini #meme

Ну чё, народ!? Погнали, нахуй! (c)

Посылаю баф, на то чтобы читатели перестали смотреть базу по VEX обновлять постоянно драйвера, стебать мпм солвер за скорость и разобрались чем саблейер отличается от референса.
Не боялись прыгать в новом году в неизведанное, неосвоенное, новое, всё равно кому-то из вас придётся 🙂..и конечно быть/стать первооткрывателями и ведущими специалистами в своих областях. И да прибудет с вами Джефф Вагнер.
14🎉5👍2