Dagon 0.11.0

После полутора лет разработки вышла новая версия игрового движка Dagon. Релиз примечателен серьезным рефакторингом большинства компонентов, в первую очередь – системы рендеринга. Устранена сцепленность кода, теперь рендеринг логически отделен от остальной части движка, стало возможно написать свой собственный конвейер и подключить его к приложению. Улучшена производительность многих эффектов и шейдеров.

Из прочих крупных изменений отмечу следующие:

  • GUI на основе Nuklear, модуль шрифтов на основе Freetype, физический движок и загрузчик анимированных моделей IQM вынесены в расширения (субпакеты Dub), их нужно добавлять в зависимости отдельно (dagon:nuklear, dagon:ftfont). Это было сделано из-за трудностей у пользователей с установкой Nuklear под Linux.
  • Добавлена поддержка эффекта объемного рассеивания света (volumetric light scattering) для направленного источника. Это оптическое явление, возникающие в дисперсной среде, например, в тумане. Объекты, отбрасывающие тень, заслоняют собой свет и блокируют рассеивание, в результате чего в атмосфере образуются видимые лучи и неоднородности. В Dagon этот эффект основан на разновидности ray marching’а – теневая карта сэмплируется несколько раз вдоль луча в направлении взгляда из пикселя, результат нормируется и используется как коэффициент фазовой функции Хеньи-Гринштейна.
  • Добавлена поддержка файлов DDS для текстур. Поддерживаются форматы сжатия S3TC (DXT1/BC1, DXT3/BC2, DXT5/BC3), RGTC (BC4, BC5), BPTC (BC6H, BC7).
  • Добавлен новый оператор тональной компрессии Tonemapper.Filmic, близкий к тому, что используется в Blender/Eevee.

Dagon vs Eevee

В грядущем Dagon 0.11 будет поддерживаться дополнительный метод тональной компрессии схожий по результату с тем, что используется в Blender 2.8 (Filmic View Transform). Ниже – сравнение рендеров Eevee в Blender 2.82 и Dagon на примере сцены со шлемом из коллекции примеров glTF. Моя картинка чуть более контрастна, но зато нет “передержаных” бликов.

Новый домен

Я переношу все свои личные проекты на домен timurgafarov.ru, так что блог отныне будет доступен как https://gamedev.timurgafarov.ru/. Старый адрес в ближайшем будущем сохранится, но будет перенаправлять на новый.

Документация по dlib

Наконец-то у dlib появилась онлайн-документация, генерируемая из исходников при помощи Dub: https://gecko0307.github.io/dlib/docs/dlib.html

Пока, разумеется, подробно задокументированы далеко не все модули, к большинству функций и классов есть только краткое описание – но я надеюсь, то, что есть, уже может кому-то пригодиться. Документирующие pull request’ы приветствуются (dlib использует синтаксис ddoc).

О хакерах

Mozilla туда же. На приветственной странице с предложением установить Facebook Container и Firefox Monitor в очередной раз слово “хакер” используется в негативной коннотации:

Не ожидал такого от компании, которая разрабатывает СПО. Запомните уже: хакер – это компьютерщик-эксперт, относящийся к программированию как к искусству, умеющий и любящий решать нетривиальные задачи. Прекратите называть хакерами киберпреступников! Это выдает в говорящем дилетанта и филистера. Взломщик – это крэкер (cracker), вор паролей – фишер (phisher), создатель вирусов – вирусописатель (virus writer), а тот, кто практикует социальную инженерию – просто мошенник.

Глагол “hack”, вопреки массовому пониманию (и даже определениям в некоторых словарях), не означает “взламывать”. Изначально этим словом обозначалось внесение в код быстрого исправления с целью обойти некую проблему без серьезных архитектурных изменений. Отсюда “хак” – ловкое решение, обходной прием, фокус.

Понятно, что неодобрительный смысл слова сложился исторически – некоторые хакеры дискредитировали себя, и многие продолжают делать это до сих пор – но это не значит, что следует поддерживать это недоразумение. Отождествлять компьютерных экспертов и компьютерных злоумышленников – некорректно и оскорбительно. Слово до сих пор активно используется самими хакерами в первоначальном его смысле, поэтому, пожалуйста, используйте слово “хакер” согласно определениям Jargon File. Некорректное определение тоже упомянуто, но выделено как таковое.

Если этого недостаточно, то привожу цитату из статьи Эрика Реймонда “Как стать хакером”:

“Существует сообщество, некая общая культура, состоящая из опытных программистов и сетевых чародеев, история которой прослеживается вплоть до первых миникомпьютеров с разделением времени и самых ранних экспериментов с сетью ARPAnet. Члены этой культуры и дали рождение термину “хакер”. Хакеры создали Интернет. Хакеры сделали операционную систему Unix тем, чем она является сегодня. Хакеры поддерживают Usenet. Хакеры обеспечивают работу WWW. […]

Также есть и другая группа людей, громко именующих себя хакерами, но не являющихся таковыми. Это те люди (преимущественно молодые люди мужского пола), которым достается за взлом компьютерных и телефонных систем. Настоящие хакеры называют таких людей “крэкерами” и не хотят иметь с ними ничего общего. Настоящие хакеры в большинстве своем считают крэкеров ленивыми, безответственными и не особо умными людьми. То, что человек способен взломать систему безопасности, не делает его хакером, точно так же как умение угонять тачки не делает вас автомобильным мастером. К несчастью, многие журналисты и писатели введены в заблуждение и используют слово “хакер” для описания крэкеров, и это бесконечно раздражает настоящих хакеров. […]

Главное различие в следующем: хакеры создают, а крэкеры ломают”.