Go Rin Showdown, день 13: лунное зеркало, передаваемое в веках

Первая реализация cel shading'a в нашем проекте. Под катом ссылка на туториалы, в том числе для URP, и радость разработчика, нашедшего баг.

Проторенная путь

Уж кто только не реализовывал cel shading. Есть замечательный пост Андрея Торчинского, нашего с Вами коллеги по фестивалю. Есть не менее замечательные туториалы в сети (на английском): раз и два.

Больше всего мне понравился вот этот туториал: блестящее оформление и хорошее раскрытие материала. Если вы сами подумываете в первый раз реализовывать cel shading — рекомендую начать с него.

Но в итоге я выбрал вот этот туториал того же автора, главным образом потому, что это был единственный (хотя скорее просто первый) найденный мной туториал по cel shading в URP. Большинство других туториалов осталось со старых времён и опираются на встроенный визуализатор Unity и стандартные шейдеры.

Из интересного могу ещё отметить регулировку жёсткости теней отдельной текстурой. Можно задавать ступенчатые переходы и хранить несколько разных профилей-текстур:

Но в этом дневнике я расскажу Вам не про реализацию этой техники. Я расскажу что получилось у нас, и что не получилось.

Прольём свет на задачу

По следам туториала, у нас получилось вот примерно такая картинка:

До/после:

В целом получилось неплохо для начала. нужно будет ещё поиграться с параметрами, добавить поддержку нескольких источников света, и т.д и т.п.

Также видно, что на low poly моделях cel shading смотрится не очень хорошо. Всё-таки low poly можно назвать отдельным графическим стилем и вместе их обычно не используют. Нужно будет найти нормальные модели в будущем.

Битва с собой

TL;DR : когда меняете значения по умолчанию в shader graph — не забывайте обновить их в материалах, использующих этот шейдер, сами они не обновляются(

Но вот чего у меня не получилось, это реализовать это быстро. Казалось бы, просто следуй туториалу, приключение на 30 минут. Но у меня ушло два дня (точнее вечера) на этот коротенький туториал.

В редакторе графа шейдера всё отображалось нормально, но с какого-то момента все объекты с этим шейдером на сцене стали белыми.

Ищу белый объект на белой сцене​
Ищу белый объект на белой сцене​

Чего я только не загуглил, пока пытался разобраться с этой проблемой. Знаете же это чувство, когда вроде всё сделал по инструкции, а ничего не работает? Вот я примерно это чувствовал. Но, как обычно, оказалось что сделал я не совсем всё)

В итоге я заметил, что ошибка появляется при добавлении specular составляющей. После этого я пытался найти ошибку в графе, или в использовании функции шейдера GetMainLight(), пока случайно не покрутил настройки одного из материалов. Как оказалось, после добавления очередного параметра и изменения значения по умолчанию эти изменения не пробросились в материал.

Уф.

Но найти ошибку, даже такую простую, всё равно очень приятно. Наверное, это моя лубимая часть программирования. написание кода, продумывание архитектуры — для меня это успокаивающие, медитативные занятия. Но поиск ошибок меня заводит. Я чувствую себя хищником, вышедшим на охоту. И теперь, когда добыча поймана, можно продолжать разработку и совершать новые ошибки. Читайте наш дневник, мы о них обязательно напишем)

Команда "Mad not Crazy"

  • Максименко Денис: программист, гейм-дизайнер
  • Рома: дизайнер по звуку
  • r1gm4r013: музыкант
  • MuteYourBrains: концепт-художник
  • Сергей Струлев: левел-дизайнер

Свитки разработки

55
Начать дискуссию