Магический шар. Шейдер

<?the_title()?>

Перевод небольшого отчета от Гарри Алисавакиса. Он делится тем, как на основе идеи построения оттеночной карты высот может получиться полупрозрачная текстура мрамора.

Примечание: В своем твите я говорил о “ray marching”, хотя данный термин здесь применим с натяжкой. При использовании цикла по перемещению в определенном направлении техника не совсем похожа на традиционный ray marching. Просто помните об этом.

Основная идея

Я постоянно думаю как бы еще использовать ранее освоенные эффекты, и в этот раз у меня возникла идея насчет «слоистого параллакса».

С помощью данной техники вы можете сэмплировать текстуру с использование координат «изнутри» объекта. Направление обзора камеры берется в касательном пространстве. Эффект очень полезен для добавления глубины льду, мраморной плитке и прочим вещам с подповерхностным рисунком. Выглядит он примерно так:

Мои мысли по поводу данного эффекта были следующими:

  • Давайте отбросим основную текстуру пока она не нужна
  • Что если в каждом «слое» этого эффекта выполнить «пошаговую» функцию для 2D-текстуры шума, со значением отсечки между 0 и 1, определяемым по «индексу» слоя?

На «шаги» (так я буду называть использование «пошаговой» функции) меня навела концепция использования для карты высот текстур в градациях серого. Регулировка значения обрезки простой текстуры с радиальным градиентом выглядит следующим образом:

изменение площади конуса по мере изменения глубины в текстуре

Как если бы текстура действительно представляла конус, и при использовании «шагов» я вырезал из него ломтики, все более маленькие по мере приближения к вершине. Я слишком подробно объясняю суть карты расстояний, но такое представление помогло мне разобраться самому.

Таким образом, если бы я присвоил 1 значению среза самого верхнего слоя, 0 значению самого глубокого слоя и промежуточные значения промежуточным слоям, каждый слой смещения получил бы «ломтик» текстуры разного размера.

Если мы применим такой «шаг» к каждому слою текстуры с равномерным радиальным градиентом, мы получим примерно такую картинку (текстура разбита 10 раз, чтобы средние слои были видны лучше):

Здесь для текстуры использована глубина в 10 «шагов»

Чтобы получить гладкое изображение, достаточно лишь увеличить число слоев (здесь около 128):

Возьмем текстуру посложнее, как, например, для облака (для твердого материала это и будет наша текстура мрамора — прим.пер.). Получится следующее:

Экспериментировать с различными текстурами и шумами было очень весело.

Когда текстура мрамора накладывается на сферу, вы получите магический шар:

Добавьте 2 HDR цвета и перемещайтесь между ними на основе «индекса» слоя, а не просто уменьшая интенсивность от 0 до 1 (плюс еще немного постобработки для изображений):

Для большего разнообразия добавьте легкое волнообразное смещение при выборке текстуры — и вот она магия:

Источник: https://halisavakis.com/write-up-magical-marbles/

Понравилась статья? Поделиться с друзьями:
Переводит для Вас самые интересные статьи про разработку игр. По образованию физик-программист. Техническими переводами начала подрабатывать еще на старших курсах и постепенно это переросло в основное занятие. Интересуется гуманитарными технологиями, пробует себя в журналистике.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *