|
Unity Мультиплатформенный инструмент для разработки игр |
10.02.2017, 16:19
|
#1
|
Элита
Регистрация: 16.01.2010
Адрес: Новосибирск
Сообщений: 2,158
Написано 502 полезных сообщений (для 1,012 пользователей)
|
Фейдинг сложного объекта
По ТЗ нужно что бы куски высокополигонального здания исчезали плавно.
У частей здания по 10 материалов (ну такое дали), а суммарно оно имеет 400к треугольников.
Сделать на всех материалах Fade = неправильная сортировка.
Сделал 3мя камерами:
1 - рендер всего,
2 - рендер того, что нужно, что бы исчезло.
3 - рендер композиции (tex1*(1-Blend*tex2.a) + Blend*tex2) через квад.
Но RenderTexture не работает на ES2 и производительность довольно низкая.
Как зарешать?
Я не знаю как к этому еще AR прикрутить, и так производительность никакая.
Последний раз редактировалось RegIon, 12.02.2017 в 09:39.
|
(Offline)
|
|
11.02.2017, 02:05
|
#2
|
Гигант индустрии
Регистрация: 13.09.2008
Сообщений: 2,893
Написано 1,185 полезных сообщений (для 3,298 пользователей)
|
Ответ: Фейдинг сложного объекта
4 - сообщить что моделька говно и нечего не выйдет.
|
(Offline)
|
|
11.02.2017, 09:33
|
#3
|
Элита
Регистрация: 16.01.2010
Адрес: Новосибирск
Сообщений: 2,158
Написано 502 полезных сообщений (для 1,012 пользователей)
|
Ответ: Фейдинг сложного объекта
Сообщение от Nex
4 - сообщить что моделька говно и нечего не выйдет.
|
Так и сказал.
Последний раз редактировалось RegIon, 13.02.2017 в 23:11.
|
(Offline)
|
|
11.02.2017, 16:20
|
#4
|
Терабайт исходников
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений (для 6,051 пользователей)
|
Ответ: Фейдинг сложного объекта
Сделать на всех материалах Fade = неправильная сортировка.
|
возможно покатит такой вариант:
- рисуешь всё непрозрачное
- рисуешь всё исчезающее, но только в Z (в цвет ничего)
- рисуешь всё исчезающее с z-тестом и альфой
в юнити это всё решается через queue
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
11.02.2017, 16:30
|
#5
|
Элита
Регистрация: 16.01.2010
Адрес: Новосибирск
Сообщений: 2,158
Написано 502 полезных сообщений (для 1,012 пользователей)
|
Ответ: Фейдинг сложного объекта
- рисуешь всё исчезающее, но только в Z (в цвет ничего)
|
Как это сделать?
|
(Offline)
|
|
11.02.2017, 16:34
|
#6
|
Терабайт исходников
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений (для 6,051 пользователей)
|
Ответ: Фейдинг сложного объекта
Видимо придётся сделать копию исчезающих объектов, и на них шейдер отдельный, у которого будут прописаны свойства (некоторые может быть необяз, но чтоб наверняка):
ColorMask 0
ZWrite On
ZTest Lequal
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
11.02.2017, 20:38
|
#7
|
Разработчик
Регистрация: 12.01.2011
Адрес: Moscow
Сообщений: 422
Написано 68 полезных сообщений (для 100 пользователей)
|
Ответ: Фейдинг сложного объекта
Может Dissolve Shader подойдет для этой задачи?
|
(Offline)
|
|
11.02.2017, 22:45
|
#8
|
Элита
Регистрация: 16.01.2010
Адрес: Новосибирск
Сообщений: 2,158
Написано 502 полезных сообщений (для 1,012 пользователей)
|
Ответ: Фейдинг сложного объекта
Сообщение от Evgen
Может Dissolve Shader подойдет для этой задачи?
|
нет. Не пойдет.
|
(Offline)
|
|
11.02.2017, 23:32
|
#9
|
Терабайт исходников
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений (для 6,051 пользователей)
|
Ответ: Фейдинг сложного объекта
Ещё немного подробностей добавлю. В юнити в шейдере можно в пассе писать:
Tags { "Queue"="тут значение" }
Это порядок рендера объектов.
про значения написано тут: https://docs.unity3d.com/462/Documen...haderTags.html
То же самое можно менять в C# через material.renderQueue: https://docs.unity3d.com/ScriptRefer...nderQueue.html
это свойство по идее оверрайдит то, что в шейдере.
План такой - фейдящиеся объекты временно копируешь. На копию вешаешь Z-only шейдер (с параметрами, которые я описывал выше), при этом ставишь этому шейдеру "Queue" = "Transparent-1" например. Оригиналу материалы не меняешь, но ставишь скриптом renderQueue = 3000. Когда фейд закончился, убираешь копию, а renderQueue возвращаешь на дефолт (-1).
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
12.02.2017, 04:00
|
#10
|
Элита
Регистрация: 16.01.2010
Адрес: Новосибирск
Сообщений: 2,158
Написано 502 полезных сообщений (для 1,012 пользователей)
|
Ответ: Фейдинг сложного объекта
В 5.5 очереди можно выставлять прям в инспекторе.
Это я и сам понял, иначе бы спросил,но спасибо.
Вместо последнего проще менять объект на такой же, с непрозрачный материалом, так как требуется сделать стопку, где объекты выше (а уровня 4,) определенного уровня исчезают или появляются.
И судя по методу будет так:
1. Выключаем непрозрачный оригинал.
2. Включаем z-only
3. Включаем Transparent - объект
4. Фейдим
Результат:
От чего такие артефакты.?
Нужно запретить писать в Z шейдеру с прозрачность, да? - Не помогло. Скачал стандартный дифузз и поставил ZWrite Off - толку 0
Артефакты только в Game-mode и на Устройстве, при этом в редакторе их нет. Это 16 битный Z-Buffer нам пакость сделал? Кажется что очереди не работают и Z-объект на ES2 рисуется в 3000. Видно что полигоны накладываются.
Если бы не артефакты, то работает нормально.
Последний раз редактировалось RegIon, 12.02.2017 в 09:41.
|
(Offline)
|
|
12.02.2017, 11:05
|
#11
|
Элита
Регистрация: 16.01.2010
Адрес: Новосибирск
Сообщений: 2,158
Написано 502 полезных сообщений (для 1,012 пользователей)
|
Ответ: Фейдинг сложного объекта
Все. Решил.
Кому так приспичит, то делйте как Mr_F_ говорит, но с несколькими правками: - У шейдера, который должен быть прозрачным нужно ZWrite Off
- Render Queue у Z-шейдера и Прозрачности = 3000.
Если not 1, то частично сортировка будет неправильной и видны будут некоторые грани.
Если not 2, то будет артефакты на мобилах.
Если не делать финт с Z-буффером, то будет полностью неправильная сортировка.
Последний раз редактировалось RegIon, 12.02.2017 в 12:57.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 06:06.
|