Освещение интерьера в Dagon

Добавил в Dagon экспериментальную поддержку зондов освещения среды (environment probes). Это специальные невидимые объекты, которые перезаписывают освещение среды в буфере кадра для всех пикселей внутри прямоугольной коробки заданного размера. То есть, вы можете, например, создать комнату с зондом такого же размера внутри – он будет влиять на освещение внутри комнаты, а все, что снаружи, будет освещаться при помощи глобальной карты окружения, заданной в опциях environment текущей сцены. Таким образом, решается проблема неправильных “наружных” отражений в интерьере. Скриншоты ниже демонстрируют разницу:

Некорректные отражения на стенах внутри комнаты + в целом, слишком яркий интерьер
Световой зонд заменяет освещение среды в комнате на более тусклое

По сути, это простейшая аппроксимация GI. Зонд может освещать интерьер однородным излучением заданного цвета, либо использовать собственную HDR-карту окружения. Единственная нерешенная на данный момент проблема – видимая граница двух сред освещения в тех местах, где отсутствует геометрия здания (т.е. в дверных проемах). Поэтому при использовании данной фичи необходимо как-то маскировать эту границу – например, сделать в этом месте порог или переход текстуры пола.

Новые примеры

Добавил в коллекцию примеров Dagon свою старую демку с планетой – она показывает, как создавать пользовательские шейдеры. Каждый объект сцены использует специализированный шейдер: звездное небо, газовый гигант с эффектом рассеивания света в атмосфере, кольца с тенью.

Также добавлен пример создания ландшафта и многослойного материала для него.

Subsurface Scattering в Dagon

В Dagon наконец-то появилась качественная аппроксимация подповерхностного рассеивания – фича, которую я в том или ином виде пытаюсь реализовать уже не первый год. Идею позаимствовал из Disney BRDF.

(далее…)

Inform 7

Исследуя свободные игровые движки, случайно наткнулся на настоящий бриллиант – платформу для создания текстовых квестов Inform 7. Это штука, не имеющая аналогов – декларативный язык программирования, использующий естественный синтаксис английского (NLP-система). То есть, программы на нем пишутся в форме обычного текста, состоящего из определений и утверждений. Система позволяет вводить любые новые понятия и абстракции, сущности и их свойства. Получившееся в результате семантическое содержание и составляет логику игры, которая затем транслируется в стандартный код для Z-машины. Таким образом, исходник квеста представляет собой своего рода книгу, которая описывает мир игры, ее сценарий, возможности игрока, отношения и взаимодействия между игровыми сущностями и т.д.

До этого я еще не встречал NLP-системы с такой “человеческой” онтологией, ведь обычно взаимодействие с компьютером строится на математико-логическом аппарате, на классах, структурах и алгоритмах, а не на бытовом способе мыслить и разговаривать. В Inform 7 нет никаких структур и даже типов данных – есть лишь языковые инструменты, позволяющие вам выстроить ваш собственный понятийный аппарат, на основе которого будет работать игра.

Жанр классических текстовых квестов, уходящий корнями в культовый Zork, обычно предполагает перемещение игрока по карте воображаемого мира, как в ролевых играх – Inform включает в себя стандартные понятия для описания карты и соответствующий рантайм с готовым интерпретатором команд перемещения. Вы описываете мир как совокупность абстрактных “комнат”, указывая их расположение относительно друг друга (“К востоку от дома расположено озеро”). Потенциально так можно создать все, что угодно – хватило бы фантазии.

Например, впервые сев за Inform, я залип на целый вечер и написал набор определений, описывающий автомат с конфетами и напитками – игрок имеет некоторое количество денег и может делать покупки в автомате. Что такое “деньги”, и что означает “покупать” – это тоже определяет программист. Для этого приходится подключать какие-то особые мозговые доли: Inform заставляет вас думать по-новому, с изрядной долей креативности! Я бы назвал эту платформу философской машиной – в ней нужно мыслить как философ от инженерии, выстраивать в голове сложные абстракции, придумывать свои собственные системы категорий. И мне почему-то кажется, что на одних только текстовых квестах свет клином не сошелся – Inform потенциально можно использовать для каких-то инновационных способов взаимодействия с информацией, в качестве компонента базы знаний, как мощный инструмент прототипирования и описания различных моделей. Обязательно продолжу экспериментировать.

https://ganelson.github.io/inform-website/

Сжатие текстур, часть II. RGTC

Продолжение серии постов о сжатых текстурных форматах. Первая часть тут.

RGTC (BC4, BC5)

Red Green Texture Compression

Формат сжатия для 1- и 2-канальных изображений – условно “красных” и “красно-зеленых”.

BC4 предназначен для хранения монохромных изображений (не обязательно красных, разумеется). Формат использует 64 бита на блок 4×4. Endpoint’ы хранятся в виде 8-битных значений, из них создается 6 промежуточных значений. Индексы пикселей 3-битные. Преимущество BC4 – значительно более высокое качество при хранении монохромных текстур, чем при использовании BC1. Это делает формат самым подходящим выбором для карт высот и различных нецветовых данных, таких как шероховатость и металличность. Качество градиентов почти неотличимо на глаз от несжатого оригинала.

BC5 хранит двухканальные изображения, условно называемые “красно-зелеными”. Принцип сжатия аналогичен BC4, только в данном случае каждый блок 4×4 описывается двумя каналами по 64 бита каждый, при этом красный и зеленый каналы сжимаются независимо друг от друга. В BC5 удобно хранить, например, совмещенные текстуры шероховатости и металличности.

Стандарт RGTC определяет текстуры со знаком и беззнаковые. Они полностью идентичны, разница лишь в том, что формат со знаком кодирует значения от -128 до 127, а не от 0 до 255. Для формата со знаком действует правило: если первый endpoint равен -127, второй не должен быть -128.