Богдан Кищак
3D Generalist/Quality Assurance Specialist
г. Челябинск, Россия
Почта: wotava@ya.ru
Telegram: @wotava
Привет!
Раньше тут была скучная стенка текста о том, какой я классный, но её вряд ли кто-то читал, поэтому я решил сделать всё попроще.
Мне интересна работа в двух направлениях:
- Автоматизация производства/использования 3D-контента – создание различных аддонов для Blender (и не только). Последний год я в основном занимался написанием аддонов для Blender под свой Pet-проект, и задачи зачастую были крайне нестандартными. Решать мне их очень понравилось, о чем можно почитать ниже, поэтому я бы хотел этим позаниматься в более серьезном окружении;
- QC 3D-контента – у меня большой опыт в проверке моделей и взаимодействии с художниками, зачастую приходилось брать на себя роль своеобразного ментора;
Но также мне была бы интересна и любая другая работа, связанная с трёхмерной графикой, будь то общая позиция художника или преподавателя (с этим тоже был своеобразный опыт).
Примечание: в портфолио довольно много «тяжелых» по размеру изображений, поэтому оно может долго загружаться.
Про автоматизацию
За последний год я настолько преисполнился идеей автоматизации любой рутины в Blender, что почти любое действие, требующее больше пары кликов, я обернул в аддоны и скрипты.
Однако помимо рутины есть и были интересные задачи, которые затрагивали и другой софт (например Unreal Engine или Houdini), а также решали задачи, ранее никому в голову не приходившие. Рано или поздно я соберусь с силами и напишу про них соответствующие заметки, а пока вкратце выделю пару интересных:
SyncToUE
Довольно крупный набор скриптов, решающий задачу полного переноса сцены из Blender в Unreal Engine под специфичный пайплайн моего с другом Pet-проекта. Дефолтные решения с USD не подходили из-за использования генераторов на блендеровских геонодах (там сложно выдернуть инстансинг), да и требовался кастомный бейкер AO в Houdini для использования в материалах, а там нужно оффсетить каждый инстанс геометрии на развертке. Деструктивные решения нарушают философию проекта, поэтому были отметены.
Перенос сцены осуществляется путем сериализации всех объектов (меши и лампы) в JSON и воссоздание их уже в движке через HISM-компонент. Сама сцена при этом частично экспортируется в .fbx
- для Houdini в виде реализованной геометрии с кастомной разверткой и оффсетами для каждого релевантного инстанса;
- для Unreal Engine в виде всей не ассетизированной геометрии;
Все ещё в активной разработке/доработке, поэтому код не самый красивый. Но что есть то есть.
PanelShaderTools
В Pet-проекте помимо нестандартного пайплайна используется ещё и довольно нестандартный шейдер, который генерирует рандомизированные бетонные панели исходя из закодированных в текстуры параметров. И не по одному параметру на канал, как обычно, а по несколько, через битовую кодировку в float значениях цвета. Шейдер сделал не я, а вот всю инфраструктуру вокруг него – я.
Аддон в этой ситуации нужен для того, чтобы создавать, модифицировать, сохранять, отображать в реальном времени все изменения и кодировать конечные пресеты в .exr текстуру. Плюс в качестве дополнения он может генерировать простой HLSL-код для раскодирования пресета в конечном софте (Unreal Engine), сразу же проверять корректность кодировки и ещё парочка quality of life моментов.
Особенности вскрылись на стадии реализации шейдера в самом Blender. Потребовалось модифицировать исходники, чтобы сделать шейдер, работающий с EEVEE. По дефолту можно лишь делать OSL-скрипты, работающие с Cycles. А какой может быть lookdev с медленным рендером?
В процессе выяснилось, что Blender округляет значения цвета в ноде Image Texture до 1 или до 0, если все биты экспоненты 00000000
или имеют единицу в первой и любой другой позиции экспоненты (например 10010000
), первый бит знака в этом случае совсем не важен. Это абсолютно неприемлемо, если мы там храним какую-либо значимую битовую информацию. Но на тот момент о конкретных битах ещё не знал.
Проблему удалось решить с помощью денормализации (однако) чисел путем контролируемого изменения 31 бита в 32-битном float значении цвета (первый бит экспоненты), т.к. денормализованные числа с плавающей точкой Blender не изменяет. А с помощью битовых флагов в каждой из компонент пикселей можно в конечном софте отслеживать, когда нужно перед декодом «флипнуть» 31 бит в канале.
Сложно? Да. Непонятно? Да. Но задача крутая, такого никто не делал (в Blender точно), и решение пришлось искать самому. Поэтому и горжусь. Рано или поздно я допишу заметку об этом решении.
Поэтому мне очень интересно поучаствовать в автоматизации и других процессов, связанных с 3D. Это и отличная возможность узнать что-то новое, и в целом работа нетривиальная.
Софт
Моделлинг (poly)
Blender
Моделлинг (CAD)
Fusion 360
Материалы
Substance Painter, Designer, Sampler (Alchemist)
Рендеринг
Unreal Engine 4/5, Marmoset Toolbag
Дополнительно
fSpy, Marvelous Designer, Houdini, ZBrush, Modo, Adobe Photoshop, Python API в Blender для автоматизации процессов, могу работать и в 3DS Max с VRay, если надо
Навыки
Hardsurface
⚫⚫⚫⚫⚫
UV-unwrap
⚫⚫⚫⚫⚫
Материалы
⚫⚫⚫⚫⚪
Рендеринг
⚫⚫⚫⚫⚪
Скульптинг
⚫⚫⚫⚪⚪
Дополняю хайполи версии моделей перед бейком
Одежда
⚫⚫⚪⚪⚪
Умею, но редко требовалось ей заниматься
Мои навыки в той или иной сфере обусловлены задачами работодателя в моменте, ведь используемые в рабочих задачах навыки улучшаются заметно быстрее, чем остальные. Доработать определённые умения до достойного уровня не составит большого труда, т.к. базовые знания уже есть. Нужны лишь соответствующие задачи.
Опыт работы
06.2023 — 08.2024
QC Specialist
3D Molier International
- В основном занимался проверкой трёхмерных моделей на визуальное и техническое соответствие требованиям – пайплайн имел строгие ограничения во многих аспектах;
- Занимался консультированием художников-исполнителей по вопросам улучшения их моделей;
- Участвовал в обосновании, проработке и документировании обновления внутренних пайплайнов, которые уже давно в этом нуждались;
- Записывал обучающие материалы для художников и проводил информационные семинары по своей инициативе – так банально было проще работать, как ни странно;
- Консультировал коллег по вопросам PBR-материалов и работе в Substance Painter;
- NDA 🙁
Ключевые достижения: стабильно выполнял и перевыполнял задачи по KPI на протяжении года, освоил новый для себя пайплайн производства 3D контента за пару дней, добился качественного повышения проработки материалов со стороны художников.
03.2023 — 06.2023
3D-Generalist
3D Molier International
- Перед тем как попасть в эту компанию на позицию QC, я примерно три месяца поработал как простой художник, чтобы освоиться с довольно новым для себя пайплайном (3ds Max 2014 и VRay 3.6, довольно старое комбо).
Ключевые достижения: после того как я поработал тут на QC я пришёл к выводу, что у меня были лучшие hardsurface-модели 🙂
08.2019 — 03.2022
3D-Generalist / QA Assistant
CGTrader Wildcat
- Работал над созданием трёхмерных моделей для e-commerce, AR/VR с полным пайплайном, а также моделей для realtime-рендеринга в целом;
- Работал с фотосканами и круговыми фотосетами;
- Имел доступ к конфиденциальным проектам под NDA;
- Проводил Quality Control моделей с различных внутренних проектов, в т.ч. для пакета архитектурной визуализации Twinmotion;
- Взаимодействовал с технической командой для улучшения технических заданий и документации;
- Консультировал коллег по вопросам, касающимся проектных требований и техническим аспектам исполнения.
Ключевые достижения: топ-2 по KPI среди всех сотрудников, ни одного проваленного задания при 1000+ завершенных, работа над проектами таких компаний, как Google, Epic Games, ECM Manufacture, Made, Ashley Furniture, Flipkart, Chubb Safes, Lowe’s и другие.
09.2018 — 08.2019
Фрилансер
Работа над моделями в различных направлениях:
- Lowpoly окружения для казуальных мобильных игр;
- Обработка CAD-моделей различной фурнитуры/лепнины с последующим созданием материалов и получением конечного рендера.
Образование
2016 — 2020
Программная Инженерия
Бакалавриат, ЮУрГУ (НИУ), Челябинск
- Хотел работать в геймдеве;
- Прекрасно освоил Python, проектирование софта и основы программирования игровой логики;
- Отметился активным участием во внеучебной деятельности университета, а также как интересный публичный спикер.
Софт-скиллы и прочее
Коммуникативность
⚫⚫⚫⚫⚫
Объясню на пальцах всё, что знаю сам
Внимание к деталям
⚫⚫⚫⚫⚫
Работа в команде
⚫⚫⚫⚫⚪
Тайм-менеджмент
⚫⚫⚫⚫⚪
Презентация
⚫⚫⚫⚫⚫
Вы таких презентаций ещё не видели
Объективность вышесказанного
⚫⚫⚫⚫⚫
Абсолютно честно и непредвзято
Уровень английского
C1
Оценка университета, без IELTS
А ещё:
Игра Clay Fortress, сделанная мною в паре со случайным человеком, выиграла спонсорскую номинацию на локальном Global Game Jam в 2020 из-за необычного стиля и нетипичных механик;
В 2023 геймджем-успех удалось повторить с большим размахом: игра UpRooted собрала восторженные отзывы участников джема и несколько номинаций от локальных спонсоров;
Как уже упоминалось, я неплохо разбираюсь в Blender Python API, и могу автоматизировать/упростить многие рабочие рутины с помощью скриптов;
Отметился многократным участием в студенческой олимпиаде в 2016, 2017 и 2019 годах в номинации «Цифровое Творчество» и стабильно был в тройке призёров;
В университете я проводил собственную «школу» трёхмерной графики для студентов своего университета с более чем 100 участниками на первом этапе;
Активно играл в парламентские дебаты в Дебат-клубе ЮУрГУ, благодаря чему мне легко выражать и доказывать свои мысли и идеи. По сей день являюсь активным организатором и тренером клуба;
Мне интересны архитектурный модернизм и брутализм, они лежат в основе стиля моего личного игрового проекта.