Как стать автором
Обновить

Комментарии 19

Нет, до играбельной версии мне ещё работать и работать, увы.
А зачем такие тени делать? Вы крутите сцену? Если нет то можно сразу на арте предусмотреть, на персонажах отвлекают тени тоже. Достаточно просто овалы.
Как минимум, затем, что просто овалы — слишком просто и неинтересно, да и положительный эффект на общее восприятие картинки от них меньше.

Хм, я далек от игродева, но даже мне понятно. Жги ещё!

А зачем вы используете RectTransform? Вы используете Canvas или SpriteRenderer?
Да, и то и другое. Части мобов и других объектов сделаны на SpriteRenderer, полоски здоровья для них — на Canvas.
Что мешает сделать честную трёхмерную сцену со спрайтами объектов и фиксированной камерой и отбрасывать тени средствами юнити вместо заморочек с 2,5-мерностью?
Боюсь, если в честной трёхмерной сцене на плоскую по оси Y локацию перпендикулярно поставить плоских по оси Z мобов, то не найдётся такого положения камеры, в котором можно собрать из этого приличную картинку. А объекты вроде деталей танка или стен вовсе придётся делать действительно трёхмерными.
Инатор? Фуфелшмертц одобряет.

Вам бы шейдеры изучить хоть немного. И рисовать тени используя свои шейдеры через комманд буфер, а не вот это вот всё.

Смотрел в их сторону, но с ходу не нашёл способа добиться желаемого эффекта.
Поделились бы ссылкой на толковый материал для изучения? Что б с приемлемым соотношением сигнала к шуму.
Где можно об этом почитать чтобы материал соответствовал теме поста я не знаю, но могу расписать пункты как бы я стал делать эту тень.
1. Для каждого объекта, который способен отбрасывать тень нужно подготовить меш, который будет повторять его контуры (вручную или скриптом). Лучше, конечно, скриптом. То есть после запуска игры каждый объект должен иметь набор точек, из которых можно сделать меш. Результат должен содержать как можно меньше точек, чтобы обеспечить меньшую нагрузку на следующем шаге.
2. В каждом кадре собирать один общий меш, состоящий из всех объектов, с тенью которые видит камера. Перед сборкой меша точки каждого объекта не забыть повернуть, масштабировать и сдвинуть в локальном пространстве. Новые значения кешировать и обновлять только если что-то изменилось. Результатом будет меш, содержащий все тени, которые учитывают повороты и удаление от источника. Сборка простого меша довольно дешевая операция даже для слабых мобильников.
3. Используя CommandBuffer.DrawMesh отрисовать собранный меш в билинейную RenderTexture используя шейдер, который всё закрасит в один цвет. Если нужны разные цвета для теней, то в меш на этапе сборки добавить цвет, а в шейдере для заливки использовать его. Разрешение текстуры можно сделать небольшим, а затем заблюрить однопроходным шейдером. Результатом будет текстура с мягкими тенями если использовать блюр и мелкое разрешение. Либо как в этой статье полностью повторяющая контур объектов с жесткими краями если текстура будет такого же разрешения как камера.
4. Получившуюся текстуру отрисовать на плоскости.
Насколько могу судить, в описанном вами способе отличаются использованные методы, но логика происходящего примерно та же. Вероятно, получившиеся тени должны быть производительнее моих. Но для псевдотрёхмерных объектов всё равно пришлось бы создавать тени вручную и частично выделять их рендер из общей логики.
Про меньшее разрешение RenderTexture, в который отрисовываются тени, я, кстати, попросту забыл упомянуть в статье, у меня оно пропорционально меньше разрешения экрана, для 1920x1080 размер RenderTexture будет 1280x720. Если присмотреться к скриншоту в начале статьи, можно заметить, что границы теней не идеально чёткие, а слегка размытые.

Разве в свежей версии Юнити нет теней для 2Д?

Вроде бы в экспериментальных версиях появилось 2D освещение, сам ещё не щупал, но судя по роликам с ним — это не то, что мне было нужно.

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

Полезная статья, спасибо. Сам в свое время мучился с 2д и тенями, правда, не в юнити.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории