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: концепт-художник
- Сергей Струлев: левел-дизайнер
Свитки разработки
- День 0: объявление о себе
- День 1: первый концепт игры
- День 2: прототип движения персонажа
- День 3: играбельный прототип core-геймплея
- День 4: последняя версия первого прототипа
- День 5: происхождение идеи, часть первая
- День 6: инструменты и документы
- День 7: некоторые задачи дизайна уровней и геймплея
- День 8: первые очертания облика игры
- День 9: название игры и команды
- День 10: маленький апдейт про новый репозиторий
- День 11: визуализация путей перемещения
- День 12: первый прототип с врагами