Экспериментирую с шейдером воды — сделал анимацию кругов от дождя и плавный переход прозрачности к берегу:
Улучшенный screen space ambient occlusion в новом Dagon:
Это однопроходный эффект, работающий с G-буфером и реализованный методом спирального сэмплинга.
На днях узнал печальную новость: авторы Spyro: Myths Awaken получили предупреждение от юристов Activision и были вынуждены убрать из игры всю интеллектуальную собственность компании — проект продолжается, но уже под другим названием и с другими персонажами. Я следил за Myths Awaken с самого начала: очень хотелось увидеть фанатское продолжение любимой игровой серии детства, ставшей символом PlayStation. Мы, поклонники классической трилогии Spyro, ждали чего-то подобного 15 с лишним лет — и, действительно, появились талантливые люди, решившие сделать сообществу такой подарок. И ведь фанаты никого не трогали, просто ностальгировали — все подобные проекты делаются на чистом энтузиазме, без цели заработать на чужих идеях. Но, разумеется, в корпорациях думают иначе.
Самое нелепое здесь в том, что до недавних пор Спайро вообще не был интересен правообладателям — только неугасающий фанатский интерес подтолкнул их делать Reignited Trilogy. Нащупали золотое дно, но на полноценное продолжение смелости, похоже, не хватило после многочисленных низкопробных перезапусков. Лицемерие в худшей форме — наживаться на любви фанатов, но при этом ненавидеть эту любвь, душить ее, втаптывать в грязь…
И ведь все могло бы быть по-другому, по-человечески — Activision могли бы договориться с командой Myths Awaken о сотрудничестве. Сама игра и YouTube-каналы авторов могли бы рекламировать Reignited Trilogy и другие продукты компании в обмен на разрешение использовать интеллектуальную собственность. В конечном счете, можно было пригласить разработчиков к себе, сделать этот проект официальным тайтлом. Но нет, проще было все разрушить.
Activision показали себя не с лучшей стороны — и тем хуже для них. Своим существованием Myths Awaken никак не повлияла бы на продажи переиздания, но теперь… Я лично намеревался купить PC-версию, если она выйдет, но после такого красноречивого жеста, естественно, и не подумаю — и советую всем уважающим себя фанатам поступить так же. Компания, которая до такой степени презирает своих потребителей, не заслуживает ни денег, ни уважения.
А Cyreides’у и его команде — респект и наилучшие пожелания в дальнейшем творчестве. Надеюсь поддержать их финансово, как только появится такая возможность — ребята выложились на максимум и доказали, что фан-игры могут быть лучше официальных франшиз.
Обнаружил интересный проект от польского разработчика — Quill3D, OpenGL-движок на D с использованием GLFW. Поддерживаются мягкие тени, normal mapping, анимированные модели, рендеринг ландшафтов, частицы, пост-процессинг, вывод текста. Исходников в публичном доступе, к сожалению, пока нет, но видео и скриншоты очень впечатляют. Рад, что D становится популярнее в области геймдева.
Давно не отчитывался по проектам, хотя за последние месяцы произошло довольно много интересного. Во-первых, я обзавелся новым, более мощным ноутбуком, который отлично тянет Dagon, так что отныне смогу работать над движком гораздо больше. Во время установки софта приятной неожиданностью стало то, что последние версии DMD из коробки линкуют 64-битные приложения под Windows в релизном режиме (dub build —build=release) без необходимости установки Visual Studio. Используется линкер LLD из состава LLVM и набор 64-битных библиотек из MinGW. Наконец-то эта позорная зависимость от продуктов MS устранена, и DMD можно считать полностью самодостаточным тулчейном!
Во-вторых, я вернулся к разработке dlib. В планах сейчас — чистка кода от устаревших и неиспользуемых модулей (подробности в Issues), завершение рефакторинга, связанного с ручным управлением памятью, и реализация пула потоков.
Что касается Dagon, то в настоящее время я работаю над новой системой шейдеров, которая в версии 0.9 заменит старый подход с абстрактными бэкендами материалов, значительно упростит создание новых шейдеров и передачу uniform-параметров. Состоится переход с GLSL 3.30 на 4.00, в убершейдерах будут задействованы шейдерные подпрограммы вместо ветвления. Также все шейдеры будут вынесены из D-кода в отдельные файлы, внедряемые на этапе компиляции, что упростит их отладку. На новую систему уже портирован forward-пайплайн. Вы можете следить за этой работой в ветке smartshader. В остальном разработка нового рендера практически завершена, и я надеюсь выпустить 0.9 до конца года.
Между тем, ветка 0.8 также была обновлена для совместимости со свежими версиями DMD и старыми версиями SDL и Freetype — см. Dagon 0.8.3 и dev_0.8.
Важно: начиная с 0.14.0, dlib не поддерживает macOS. О причинах этого бойкота я ранее высказывался в блоге. Скорее всего, функциональность, основанная на POSIX, продолжит работать нормально, но никаких гарантий на будущее нет, и проблемами совместимости с macOS, если они возникнут, я заниматься не буду. Непрерывная интеграция для macOS на Travis также была остановлена. В общем, рекомендую перейти на Linux, FreeBSD или Windows.
P.S. На сайте LightHouse Software за последние месяцы вышли две мои новые статьи:
Хочу также отметить статью aquaratixc Бинаризация методом Оцу в dlib, код из которой вошел в состав dlib 0.14.0.
P.P.S. К сожалению, пока не могу сказать, когда выйдет новая версия Dagon с отложенным рендером. Очень многое еще нужно дописать и реализовать. Но по завершении работы над Dagon 0.9 я планирую перевести на него Atrium, так что самое интересное только начинается.
Мне встречалось множество разных взглядов на этот вопрос, но все они сводятся к следующим основным пунктам:
1. Нежелание потерять контроль над проектом. Совершенно иррациональный страх — хотя бы потому что таких прецедентов попросту не было. Да, были случаи, когда форк становился популярнее оригинала, но еще ни разу никто не отбирал у изначального автора право развивать его детище так, как он хочет. Как он может «потерять контроль»? Эту мантру повторяют многие, но в ней нет и капли смысла. То, что под ней подразумевается — появление в одночасье сотен форков, несовместимых между собой — не более чем продукт чьей-то больной фантазии. В реальности же никто ничего не форкает без серьезной на то причины. Да, СПО — это анархия, где все делают, что хотят. Но это анархия разумных и опытных людей, и их суммарные усилия дают положительный результат, а не ноль. В противном случае движение СПО давно бы уже заглохло.
2. Страх оказаться обокраденным. Вторая по популярности фобия — многие боятся, что кто-то украдет их исходники, скомпилирует и будет продавать за деньги. Это теоретически возможно, но дело в том, что в случае со свободным ПО понятие кражи кода лишается всякого смысла — все свободные лицензии разрешают коммерческое использование, иначе они не были бы свободными. Вообще я бы не бросался словом «украсть» применительно к нематериальным объектам. К апологетам этого слова у меня много риторических вопросов. Как можно украсть то, что доступно всем? Кто станет покупать то, что в другом месте раздается бесплатно? Если вы считаете, что вашу программу будут покупать под чужим брендом, почему вы сами ее не продаете? Если вы не ведете бизнес, то почему беспокоитесь о недополученной прибыли? И так далее, и тому подобное… И я уже молчу о том, что открытие исходников никоим образом не мешает продавать программу — если хотите извлекать прибыль, можете, например, продавать бинарники.
3. Страх потерять репутацию из-за действий злоумышленников. Кто-то может взять ваши исходники, встроить вирусы-шпионы-бэкдоры, выдать за оригинал и наживаться на несчастных, ничего не подозревающих пользователях, а обвинять будут вас. Звучит пугающе, но, опять-таки, начисто лишено рационального зерна. Вы всегда можете (и должны) дать понять пользователям, где именно находится официальный источник сборок, чтобы скачивали только оттуда (а из других источников — на свой страх и риск). И вы никоим образом не отвечаете за чужие деструктивные действия с вашим кодом — вы даже не отвечаете за корректную и безопасную работу оригинального кода, потому что любой свободный софт распространяется без каких бы то ни было гарантий.
4. Ну и, наконец, то, в чем не каждый признается — нежелание показывать публике свой быдлокод. Могу сказать честно — чужой код мало кто читает, каким бы классным он ни был. Обычно это нужно для исправления багов, во всех остальных случаях люди просто компилируют исходники или копипастят отдельные компоненты, не вникая в детали. Поэтому большая часть программ представляет собой уродливых нечитаемых монстров, и с этим все давно смирились. Конечно, бывает и такой код, который можно смело в рамочке на стенку вешать — читаемый, лаконичный, красивый — но такой встречается очень редко.
Тот, кто все-таки захочет разобраться в вашем коде, вряд ли будет вас публично высмеивать — если, конечно, вы сами не попросите критики. Творчество есть творчество — любой имеет на него право, и никто из нас не идеален. Если вы не публикуете код только из страха критики, то я вас уверяю — бояться абсолютно нечего. Напротив, открытие плохого кода может стать важным шагом на пути саморазвития.
Я, конечно, уважаю авторское право и не считаю, что мне кто-то что-то должен. Открывать или не открывать код — личное дело автора. Есть много закрытых программ с солидным сообществом, и может показаться, что в исходниках там никто особо и не нуждается, пока автор регулярно выпускает релизы и исправляет баги. Но я должен предупредить: стоит автору потерять интерес, как сказка закончится. Поскольку программа бесплатна, у автора нет перед вами никаких обязательств, и вы останетесь с носом. Я видел десятки таких примеров, и в том числе среди коммерческих продуктов.
Никогда не стоит забывать Столлмана: используя закрытые программы, вы становитесь зависимым и беспомощным. Поэтому я предостерегаю от использования freeware — лучше отдайте предпочтение СПО.
Также сделал сайт для движка:
https://gecko0307.github.io/dagon
Лет пять назад я прочитал на MSDN утверждение Microsoft о том, что OpenGL — «устаревшая технология». Тогда я только посмеялся. Всем прекрасно известно, что задачу по поддержке OpenGL берут на себя производители видеокарт, а не операционных систем. Никому на самом деле не важно, насколько хороша нативная поддержка OpenGL в Windows — все равно все устанавливают драйвер от производителя видеокарты. Сейчас же ситуация несколько иная — под macOS вообще никогда не было другого OpenGL, кроме нативного. Это вынуждает разработчиков принимать политическое решение, и я свое принял.
В настоящее время полноценного аналога OpenGL для кроссплатформенной разработки не существует. Direct3D есть только под Windows, Metal — только под macOS, а Vulkan не является прямым аналогом OpenGL. Прекращение поддержки OpenGL в macOS влечет необходимость поддерживать в приложении несколько графических API. Это сложная задача, полноценно решать которую способны только коммерческие компании путем найма отдельных программистов на каждый бэкенд. Любителям, инди-разработчикам и мейнтейнерам СПО необходимость поддерживать несколько API сильно усложняет жизнь (очень сильно!), не давая взамен абсолютно никаких преимуществ. Самым очевидным выходом остается просто забить на macOS.
Да, возможно, немного обидно потерять часть своих пользователей — и только лишь! Если вы раздаете свою работу бесплатно, вас это не должно особо волновать. Я могу назвать десятки операционных систем, на которых ваш код не только не заработает, но даже не скомпилируется, на каком бы графическом стеке он ни был основан. Для реального мира поддержка этих ОС не имеет никакого значения. Если ОС не предоставляет стандартный API (а тем более такой важный в наше время, как графический), значит, она не стоит того, чтобы ее поддерживать. Технологии усложнились, на дворе уже не 90-е, чтобы каждый студент мог на коленке реализовать по бэкенду для кучи несовместимых платформ. Повторяю: забить, как в свое время забили на DOS, OS/2, IRIX, NeXT и еще много чего.
По этому поводу очень хорошо выразился Саймон Рот, автор игры Maia: «I won’t port thousands of lines of my engine to a non standard proprietary API. Neither will many other developers either on principle or due to OSX’s tiny install base. Here lies the end of games on Apple’s desktop platform. Hundreds of thousands of older games will no longer run and there will be no economic incentive for the developers to rewrite their code. Even those using off-the-shelf engines would need to spend time and money to port to a newer release and retest. It’s sad. Games are made of code that goes stale by design. That’s bad, but by using open high level APIs and standards we can keep them alive and supported for much, much longer».
Дословный перевод: «Я не буду портировать тысячи строк кода моего движка на нестандартный проприетарный API. И этого не будут делать другие разработчики — из принципа или из-за небольшой пользовательской базы. Это конец игр на десктопной платформе Apple. Сотни тысяч старых игр больше не будут работать, и для их разработчиков не будет экономического стимула переписывать их код. Даже те, кто использует готовые движки, должны будут потратить время и деньги на портирование на новую версию и повторное тестирование. Это грустно. Код игр всегда устаревал со временем, и это плохо, но, благодаря использованию открытых высокоуровневых API и стандартов, мы можем сохранять их в живых и поддерживать еще очень долго».