Я возвращаюсь на Linux!

Если вы читаете мой блог с самого начала, то должны помнить, что в первой половине десятых я в основном пользовался именно этой ОС: я даже написал две статьи о своем опыте работы с системой – Почему я выбираю Linux? (2012) и 7 лет с Linux (2015). К сожалению, с 2018 года мне по работе пришлось стать виндузятником. Не то, чтобы это создало какие-то неудобства, но времени на Linux хватать перестало – к тому же я купил новые компьютеры, а старый линуксовый ноутбук отдал родственникам. Систему, естественно, пришлось снести. Но недавно захотелось мне привести в рабочее состояние другой ноут, с ужасно тормозной OEM-версией Windows 10. Я выбрал для него все тот же Linux Mint, а именно 21.2 MATE Edition (кто не в курсе – MATE является форком классического рабочего стола GNOME 2). Кстати, впервые в жизни не стал ставить Linux в дуалбут с Windows, переформатировал весь диск – терять было нечего. И вот я опять как дома!

Я был приятно удивлен: за 5 лет моего отсутствия линуксовый десктоп стал заметно лучше. Системные приложения, конечно, в основном все те же, привычные для старого гномовода. Однако в мое время пакеты ставились вручную в консоли, при помощи apt-get – теперь же есть удобный каталог ПО с графическим интерфейсом. Хорошая поддержка оборудования: Wi-Fi заработал из коробки без необходимости устанавливать драйвер. Драйвер для видеокарты система сама обнаруживает и скачивает – правда, показалось странным, что при этом нужно вводить пароль Secure Boot. Ну, видимо, такие теперь порядки в эпоху UEFI.

Пожалуй, самое важное нововведение последних лет – это Flatpak. Я в свое время прошел все круги ада в плане установки приложений – наверное, каждому линуксоиду нулевых знакомы проблемы с зависимостями бинарников, версиями glibc, зоопарком звуковых подсистем. О том, чтобы ставить программы инсталляторами, как в Windows, приходилось только мечтать – я всегда твердил, что популярности Linux на десктопе мешает именно это. Похоже, что Flatpak решает данную проблему: это утилита для создания самодостаточных бинарных пакетов без зависимостей, которые запускаются в изолированном окружении-песочнице. Они могут взаимодействовать с ОС через механизм порталов – можно дать приложениям доступ к диску, сети, устройствам и т.д. При этом в системные папки типа /usr/bin, /usr/lib ничего не устанавливается, и это просто замечательно! Флатпаки, естественно, дистрибутиво-независимы – не нужно создавать отдельные пакеты на каждый дистрибутив и разные его версии, что всегда было дичайшей головной болью разработчиков. В Mint поддержка Flatpak встроена в менеджер приложений: вы можете устанавливать как традиционные deb-пакеты, так и пакеты с Flathub. Минусом такого подхода является то, что флатпаки достаточно много весят, но, по современным стандартам объемов носителей, это не так уж важно.

Очень понравилось, что в виде флатпаков можно установить все бесплатные приложения, нужные мне для работы: Figma, VS Code, GitHub Desktop и др. А еще в мое время под Linux было совсем мало игр. Сегодня ситуация гораздо позитивнее: есть Steam, где я обнаружил linux-версии многих своих любимых игр последних лет. Радует полноценная поддержка Linux в мейнстримных игровых движках, особенно свободных. Установил Node.js, и с полоборота запустились все мои тулчейны для разработки баннеров и браузерных игр – благо там почти все кроссплатформенное. Хобби-проекты теперь, конечно, тоже буду полноценно тестировать под Linux.

Единственный серьезный минус, который пока заметил: свежий Photoshop не запускается под WINE. Но в моем случае жить можно и без ФШ, учитывая, что linux-машина не является основной для работы. Может быть, получится запустить какую-нибудь старую версию – буду экспериментировать.

Обновления

Лето подошло к концу – это печально 🙁 Но при этом спешу порадовать читателей хорошими новостями: одновременно вышли новые версии dlib и Dagon.

dlib 1.2.1 – в основном, исправляющий релиз. Исправлены ошибки в dlib.filesystem.posix.common, предупреждения о депрекациях в dlib.core.thread и dlib.math.utils. В dlib.image добавлен медианный фильтр (модуль dlib.image.filters.median).

Dagon 0.15.0 – первый релиз за последний год. Добавлена поддержка 1D и 3D-текстур и новые методы для класса Texture (setFaceImage, setFaceBit, createFromImage3D). Шейдер цветовых таблиц (LUT) теперь поддерживает таблицы в формате Hald CLUT – нужно создать 3D-текстуру из изображения Hald CLUT и просто передать в game.postProcessingRenderer.colorLookupTable. Появились новые параметры шейдера глубины резкости (DoF) для ручного управления эффектом: dofManual, dofNearStart, dofNearDistance, dofFarStart, dofFarDistance. Загрузчик glTF теперь декодирует встроенные в JSON-файл текстуры. Менеджер событий обзавелся поддержкой относительного режима мыши (EventManager.setRelativeMouseMode) для более надежной реализации управления мышью в играх. Соответственно, компонент управления FirstPersonViewComponent теперь использует по умолчанию относительный режим.
Обновился биндинг Newton Dynamics до свежей версии библиотеки: функция NewtonUserJointSetRowSpringDamperAcceleration удалена в пользу NewtonUserJointSetRowMassDependentSpringDamperAcceleration и NewtonUserJointSetRowMassIndependentSpringDamperAcceleration. Добавлен новый метод для ньютоновских твердых тел: NewtonRigidBody.localPointVelocity.

Реализация движка Sacrifice на D

Недавно узнал, что Dagon использовался для разработки свободной реализации игры Sacrifice (2000 г.) на D – sacengine. Только сейчас дошли руки собрать и протестировать. Сама игра мне не знакома, но проект очень интересный. Dagon используется в нем в качестве графического бэкенда. Как следствие, картинка sacengine имеет ряд существенных улучшений по сравнению с оригиналом – поддерживаются мягкие тени, SSAO, постэффект свечения, антиалиасинг.

Я рекомендую собирать игру компилятором LDC и обязательно в релизном режиме, в противном случае она будет заметно притормаживать:

dub build --compiler=ldc2 --build=release-nobounds

Для запуска нужно скопировать скомпилированный 3d.exe в папку с игрой, также нужны библиотеки freetype.dll, libmpg123-0.dll, OpenAl32.dll, SDL2.dll.

Исходники движка доступны под GNU GPL v3.

Обновления

bindbc-wgpu 0.17.0 – синхронизация с wgpu-native 0.17.0. Биндинг теперь не предоставляет готовые сборки библиотеки, их нужно устанавливать самостоятельно (можно скачать со страницы релиза wgpu-native). Также теперь все сигнатуры функций WebGPU хранятся в модулях bindbc.wgpu.types и bindbc.wgpu.types2, в bindbc.wgpu.funcs – только символы. Это позволило сократить кодовую базу и упростить интроспекцию в bindbc.wgpu.loader.

Сайт https://timurgafarov.ru, который раньше был альтернативным адресом для сайта PixelPerfect, теперь перенаправляет на этот блог https://gamedev.timurgafarov.ru. Актуальное портфолио со ссылками на мои проекты вы можете найти на https://gecko0307.github.io.

Статья о PBR для начинающих

PBR (physically-based rendering) в последние годы стал стандартом фотореалистичной графики во всех мейнстримных игровых движках, пакетах моделирования, магазинах стоковых 3D-моделей и т.д. Любой моделлер сегодня обязан уметь работать с текстурами roughness и metallic, а любой GPU-программист – разбираться в азах оптики и понимать, что такое BRDF. Хорошо, если вы много лет работаете в сфере 3D-рендеринга, и все эти нововведения появились у вас на глазах – вы уже давно понимаете, что к чему – однако с нуля разобраться в этой теме очень непросто. Рендеринг превратился в целую науку на стыке оптики, векторной алгебры и вычислительной геометрии, а PBR уже можно считать фундаментальной теорией в рамках этой науки. Моя статья “PBR. Секреты фотореалистичной графики” для журнала “FPS” посвящена основным концепциям PBR – факторам, которые обязан учитывать любой рендер, претендующий на реалистичность.

https://fps.xtreme3d.ru/index.php?content=article&article=pbr