OpenGL на macOS

После многолетней эпопеи с кривыми драйверами Apple отказалась-таки от поддержки OpenGL в пользу своего проприетарного платформоспецифичного API Metal. В связи с этим я объявляю бойкот Apple и ее продуктам – мне стало понятно отношение этой компании к открытым стандартам (и я уж молчу про профессиональный сектор, VFX, анимацию и т.д). Отныне я не заинтересован в улучшении поддержки macOS в движке Dagon. Непрерывная интеграция Travis под macOS также будет остановлена для всех моих проектов. Призываю поступить схожим образом и прекратить выпускать игры под платформу, которая вынуждает вас привязывать свои программы к несвободным технологиям.

Patreon

Я решил запустить краудфандинг на Patreon: https://www.patreon.com/gecko0307. Упор, в основном, на три моих главных проекта – dlib, Dagon, dmech. Если я наберу ежемесячное финансирование в $100, то допишу документацию по dlib. Если $500, то буду заниматься разработкой dlib, Dagon и dmech в режиме полного дня, включая написание документации и новых уроков. Все, кто пожертвует $10 и выше, будут перечислены в списке спонсоров в репозиториях и на сайтах проектов.

Освещение частиц

Работаю над освещением частиц:

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

Тени от частиц

Добавил поддержку теней от частиц:

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

Карты окружения в отложенном рендере

Несколько новых скриншотов отложенного рендера:

В ближайшее время планирую реализовать поддержку кубических карт с полноценным интегрированием Монте-Карло (сейчас используются равнопромежуточные карты с простым box-фильтром, формируемые стандартным mip-генератором OpenGL, что, конечно, дает достаточно далекий от физически корректного результат, хотя и визуально приемлемый). Также обдумываю вариант загрузки кубической карты из файла DDS, что позволяет строить мип-уровни в сторонних утилитах типа CubeMapGen.