PREZRAK писал(а):Receptor, как Вы, продвинулись в своём вопросе?
Сейчас закончил с процедурным покрытием снега. То есть рисование снега идет не сплэт картой, а считается в шейдере, моделируя покрытие снега так, как оно должно по идее лежать в жизни. То есть сверху на объектах есть, снизу соответственно нет. Работает уже по бородатому принципу обсчета нормалей объекта (в т.ч. учитывается распакованная карта нормалей, тобишь текстура). Сделал доп текстуру с одним каналом, которая служит маской для снега, то есть где-то его можно убрать, где-то оставить. Получается, что я все так же на терреине рисую сплэт картой, а сверху кидаю снег процедурно. Камни кст тож процедурно рисуются (трипланарным методом). В планах сделать деформацию снега под объектами с ипользованием тесселяции. Так же хочу сделать ледянные места (обмороженные) и разнообразить текстуру нормали снега. Еще хочуд обавить мерцание снега (glittering), и для полного счастья подповерхностное рассеивание (scatering)
Короч дел се кучу придумал!
Да. Еще. Что бы повысить производительность шейдера использую распаковку текстур экономно. Вместо одной текстуры нормали я паспаковываю сразу 2. Проще говоря, в текстуре у меня хранится сразу две карты нормалей (1 - RG, 2 - BA). Что вместо:
Используется csharp
bump0 = tex2d();
bump1 = tex2d();
позволяет сделать
Используется csharp
bumps = tex2d();
bump0 = bumps.rg;
bump1 = bumps.ba;
При таком подходе надо корректно настраивать импорт текстуры. Тип NormalMap не подойдет - Юнити просто вырезает у вас два канала (проверьте, если хотите). По этому нужно ставить тип импорта Advanced, и прежде всего включить sRGB сэмплинг (т.к. нормалка не имеет цвета).
Тоже самое для снего, я не использую текстуру вообще. Альбедо снега по сути это = float4(1,1,1,1), тобишь белая заливка. Для снега распаковываю только нормаль, опять же две, одну для мелкого шума, другую для более крупного рельефа, но этот момент я еще буду дорабатывать.
Примитивная реализация "глубины" снега. Сдвиг вершин по направлению нормали.