RU
обложка автора Krond

Krond

Разработка игр на Unity с нуля
Krond
5
подписчиков
цели
1 из 16 платных подписчиков
Человек, который двигает горы, начинает с того, что носит маленькие камни (с)

Об авторе

В разные периоды жизни и в разных компаниях меня знали и знают под ником Krond. О личных данных я предпочитаю не распространяться, да и за человека должны говорить его дела, а не фото профиля. Если вкратце, то большинство меня знает как программиста. Работал на фрилансе, в веб-студии, много лет проработал в компьютерном журнале "Игромания". Занимался разработкой небольших игр для собственного развлечения - мобильных, для веб и не только. В какой-то момент решил, что баловства достаточно и можно задуматься о создании и публикации полноценной игры. В качестве инструмента я выбрал один из популярных на сегодняшний момент движков - Unity. Сам движок и лежащий в его основе C# мне практически не знакомы, но я считаю, что это делает процесс только интереснее. Хотя и откладывает реализацию моей финальной цели на некоторое время. Собственно моим успехам (и неудачам) на этом пути и будет посвящён данный блог. Получится ли у меня шаг за шагом воплотить давнюю мечту и что меня ждёт в конце пути? Поживём - увидим...

Unity bits #27

При создании кастомных редакторов в Unity нет прямого способа воспроизвести заголовок аналогичный стандартной конструкции [Header("...")]. Однако чтобы сделать подобное можно воспользоваться применением стилей к Label примерно так:
EditorGUILayout.LabelField("My Custom Settings Title", EditorStyles.boldLabel);

Unity bits #26

Есть два сходных вида карт отражений - карты шероховатости (roughness) и карты металлизации (metalic):
Карта шероховатости (Roughness)
Эта карта, которая отображает способность материала отражать и рассеивать свет. При этом черный цвет соответствует максимальной "зеркальности", а белый - полностью матовому материалу. Наиболее простой пример применения карты шероховатости - наличие отпечатков пальцев на глянцевой поверхности, которые выглядят более матово. Следует отметить, что иногда с материалом может быть не карта шероховатости, а карта глянцевости (glossiness). Расстраиваться не нужно - достаточно инвертировать эту карту и использовать в качестве шероховатости, поскольку по смыслу это одно и то же и различие лишьь в том, какие значения считаются глянцевыми, а какие - наоборот.
Карта металлизации (Metallic)
Данные карты отображают физическую сущность материала и по поведению в целом похожи на карты шероховатости. При этом черный цвет соответствует полностью матовому "не металлу", а белый цвет - полностью отражающему металлу. Эти карты используются в шейдерном режиме (workflow mode) "Metallic" для указания того, какие части модели более металлические и по сути просто "больше отражают свет".

Unity bits #25

Существует три понятия, которые могут быть не очевидны: карты рельефа (bump maps), карты нормалей (normal maps) и карты высот (heght map или displacement map). На самом деле карты нормалей и карты высот обычно считают общей категорией "карты рельефа", а сами карты рельефа - это уже устаревшая технология, которая вышла из употребления после появления карт нормалей. Карту высот от карты нормалей можно легко отличить по виду. Карта высот будет серой, а карта нормалей - сиренево-фиолетовых оттенков.
Читать далее

Unity bits #24

При работе с PBR-материалами можно столкнуться с тем, что существует два варианта карт нормалей: в формате OpenGL и в формате DirectX. Unity использует формат OpenGL/Y+ (к примеру в том же Unreal используется DirectX). Если при назначении материалу карты нормалей изображение выглядит искажённым, то скорее всего она "противоположного" ( то есть DirectX/Y-) формата. Чтобы это исправить достаточно открыть карту нормалей в графическом редакторе и просто инвертировать зелёный (green) канал изображения.

Unity bits #23

Иногда материалы нужно сконвертировать для использования в стандартных URP шейдерах Unity. У разных движков и приложений PBR-материалы компонуются с незначительными отличиями, однако для Unity стандартный формат таков:
Albedo
Базовый цвет (Base Color) использует по умолчанию все три канала цвета. Если у материала есть прозрачные области, то прозрачность (Opacity) можно разместить в альфа-канал (Alpha). Следует не забывать использовать методы с прозрачностью (non-opaque) рендера при настройке материалов/шейдеров. Если прозрачности у материала нет, то лучше всего вырезать из текстуры данный канал, потому что его использование удваивает затраты ресурсов/памяти.
Читать далее

Unity bits #22

При разработке на Unity рано или поздно приходится столкнуться с тем, что для вывода графики могут быть использованы разные виды рендеринга с разными возможностями. Свечение не сделаешь пока не перейдёшь со стандарта на универсал, а для нативной поддержки объемного освещения придётся посмотреть и в сторону HD. Почему не использовать сразу всё и по максимуму? Есть некоторая разница между тремя базовыми конвейерами рендеринга (render pipeline) и она видна в приведённой ниже таблицы. Упрощённым выводом из этого можно считать то, что для двухмерных (2D), простых игр а также мобильно-кроссплатформенной разработки вполне подходит стандартное решение. Если же нужны дополнительные эффекты, то для этого следует использовать URP (Universal RP). Ну а когда вы создаёте серьёзный продукт, ориентированный на PC и консоли, то нужно использовать HDRP (High Definition RP).

Внереальность

Немного выпал из реальности во всех смыслах. Даже в плане геймдева. Небольшая зарисовка из нынешнего проекта по известной вселенной

Итоги года

Время стремительно летит и до наступления следующего года осталось совсем чуть-чуть. А я опять вывалился из темпа публикаций в бусти. Но этому есть весьма солидная причина, о которой я расскажу в самое ближайшее время. А пока что буквально в двух словах "для истории" подведу итоги уходящего 2023 года. В этом году я начал серьёзно заниматься разработками игр и приложений на Unity. Доволен ли я своим прогрессом? Скорее да, чем нет. В начале года я не тянул даже на "джуна", а к его концу подхожу с уровнем уже ближе к миддлу. И хотя реального опыта разработки "под ключ" у меня пока маловато, но за этот год удалось даже выпустить несколько законченных проектов. Они небольшие, но это лишь первые шаги и я ими горжусь. Надеюсь, что итогами следующего года уже станут проекты серьёзнее, а может и с коммерческим успехом. Чего желаю и всем коллегам в грядущем году.

Unity bits #21

Иногда в билде под WEBGL могут появляться вот такие предупреждения:
FS.syncfs operations in flight at once, probably just doing extra work
Сами разработчики уверяют, что ничего страшного в этом нет и это просто информационные сообщения. Но если это вас всё же напрягает, то можно внести изменения в файле по адресу:
...Unity\Hub\Editor\<unity_version>\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\src\library_fs.js
Где-то в районе строки 496 требуется удалить следующую строку:
console.log('warning: ' + FS.syncFSRequests + ' FS.syncfs operations in flight at once, probably just doing extra work');
PS: Для Mac адрес будет таким:
Applications/Unity/PlaybackEngines/WebGLSupport/BuildTools/Emscripten/src/library_fs.js

Unity bits #20

Если вы хотите использовать struct в качестве ключа Dictionary, то замените стандартные методы GetHashCode() и Equals() на собственные. Дело в том, что стандартные применяемые к структурам методы очень медленные. У них проблемы с конкурентным выделением памяти и приведением типов. Так что если реализовать собственные методы получения хэша и проверки на соответствие, то скорость работы увеличивается минимум вдвое. Более подробно о проблеме с производительностью хэширования структур можно узнать из статьи Performance implications of default struct equality in C# (на английском).

Уровни подписки

Неравнодушный

$ 1,13 в месяц
Небольшая поддержка на пути к мечте. Если просто хотите поддержать и посмотреть на результаты моих трудов.

Спонсор

$ 4,5 в месяц
Возможность посмотреть на процесс разработки поближе, а то и поучаствовать в разработке тем или иным способом. Доступ в закрытый дискорд-чат.
+ чат

Особый спонсор

$ 11,3 в месяц
Для тех, кто настроен серьёзно помочь или обменяться опытом разработки игр. Доступ к исходникам моих проектов и возможность обсудить ваши. Отдельный дискорд-чат для разработчиков.
+ чат

Меценат

$ 57 в месяц
Те, кому не безразлична судьба независимых разрабочиков игр. Практически святые люди. Любых благодарностей таким людям будет мало!
Наверх