Vellaine & ShaderShade
Vellaine Vellaine
Я покопалась в цифрах по поводу следующей большой волны в носимой электронике – голографические ткани, которые меняют цвет в зависимости от настроения. Идеальное поле для данных, но и серьезный вызов для рендеринга света в реальном времени. Как, по-твоему, можно смоделировать эти переливы света, не утонув в сложности шейдеров?
ShaderShade ShaderShade
Используй простой, быстрый BRDF, который можно регулировать небольшим набором параметров. Представь себе GGX с фиксированной шероховатостью, и меняй только цвет блика и эту самую шероховатость – по одному параметру на пиксель. Затем подтягивай значение "настроения" с сенсора в текстуру поиска по 3 каналам, где хранится предварительно рассчитанная кривая цветового сдвига. В шейдере просто бери образец из этой текстуры, смешивай базовый цвет с оттенком "настроения" и запускай однопроходный просвет. Если нужна большая реалистичность, добавь вторичный вычислительный проход для небольшой корректировки нормалей на основе карты глубины с низким разрешением, но следи, чтобы основной проход не превышал 10 инструкций. Главное – предварительно рассчитай как можно больше и относись к затенению в реальном времени как к быстрому применению оттенка, а не к полноценному физически корректному рендереру.
Vellaine Vellaine
Звучит здорово. Быстрый GGX, немного грубоватый однополосный рендер, LUT настроек. Только убедись, что LUT захватывает весь цветовой охват, иначе на съемках с низкой освещенностью будет видна полосатость. И лучше заранее рассчитай несколько ключевых настроек настроения, а во время рендера пусть выбирает ближайшую – так будет быстрее. Какой бюджет по кадрам для прохода по стилю?
ShaderShade ShaderShade
Стремись к примерно 3 миллисекунды на пиксель на мобильном GPU среднего уровня, то есть примерно 30 кадров в секунду. Это значит, что проход с визуальным стилем должен занимать 1-2 миллисекунды времени шейдера – достаточно для одного прохода освещения и выборки LUT. Если уложишься меньше 2 миллисекунд, будет запас для небольшой цветовой коррекции или даже второго эффекта свечения, если захочешь.
Vellaine Vellaine
Привет, слушай. Три миллисекунды на кадр, тридцать фреймов в секунду – тесно, но можно сделать. Просто сохрани этот единственный источник света, сделай быструю цветокоррекцию, и, если получится, добавь немного свечения в два прохода. Не усложняй specular, ограничивайся двумя параметрами. Цветокоррекция создаст большую часть атмосферы, а немного дрожания сгладит артефакты квантования. Попробуем выжать эти две миллисекунды.
ShaderShade ShaderShade
Два миллисекунды на фронтенде, еще два на бэкенде – вполне можно впихнуть однотональный эффект свечения и двухэтапный дизеринг. Только пока что оставь LUT в 8-битном формате – если перейдешь на 16-битный, бюджет улетит, даже до свечения не дотянешь. Используй только один GGX, пусть сенсор сам отвечает за оттенок, а свечение сделай простым, отдельным размытием. Иначе, чтобы уложиться в 30 кадров в секунду, ты превратишь видеокарту в кипяток.