forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Unity (http://forum.boolean.name/forumdisplay.php?f=144)
-   -   Фейдинг сложного объекта (http://forum.boolean.name/showthread.php?t=20560)

RegIon 10.02.2017 16:19

Фейдинг сложного объекта
 
Вложений: 1
По ТЗ нужно что бы куски высокополигонального здания исчезали плавно.

У частей здания по 10 материалов (ну такое дали), а суммарно оно имеет 400к треугольников.

Сделать на всех материалах Fade = неправильная сортировка.
Вложение 22648

Сделал 3мя камерами:
1 - рендер всего,
2 - рендер того, что нужно, что бы исчезло.
3 - рендер композиции (tex1*(1-Blend*tex2.a) + Blend*tex2) через квад.

Но RenderTexture не работает на ES2 и производительность довольно низкая.

Как зарешать?

Я не знаю как к этому еще AR прикрутить, и так производительность никакая.

Nex 11.02.2017 02:05

Ответ: Фейдинг сложного объекта
 
4 - сообщить что моделька говно и нечего не выйдет.

RegIon 11.02.2017 09:33

Ответ: Фейдинг сложного объекта
 
Цитата:

Сообщение от Nex (Сообщение 311819)
4 - сообщить что моделька говно и нечего не выйдет.

Так и сказал.

Mr_F_ 11.02.2017 16:20

Ответ: Фейдинг сложного объекта
 
Цитата:

Сделать на всех материалах Fade = неправильная сортировка.
возможно покатит такой вариант:
- рисуешь всё непрозрачное
- рисуешь всё исчезающее, но только в Z (в цвет ничего)
- рисуешь всё исчезающее с z-тестом и альфой
в юнити это всё решается через queue

RegIon 11.02.2017 16:30

Ответ: Фейдинг сложного объекта
 
Цитата:

- рисуешь всё исчезающее, но только в Z (в цвет ничего)
Как это сделать?

Mr_F_ 11.02.2017 16:34

Ответ: Фейдинг сложного объекта
 
Видимо придётся сделать копию исчезающих объектов, и на них шейдер отдельный, у которого будут прописаны свойства (некоторые может быть необяз, но чтоб наверняка):
ColorMask 0
ZWrite On
ZTest Lequal

Evgen 11.02.2017 20:38

Ответ: Фейдинг сложного объекта
 
Может Dissolve Shader подойдет для этой задачи?

RegIon 11.02.2017 22:45

Ответ: Фейдинг сложного объекта
 
Цитата:

Сообщение от Evgen (Сообщение 311825)
Может Dissolve Shader подойдет для этой задачи?

нет. Не пойдет.

Mr_F_ 11.02.2017 23:32

Ответ: Фейдинг сложного объекта
 
Ещё немного подробностей добавлю. В юнити в шейдере можно в пассе писать:
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).

RegIon 12.02.2017 04:00

Ответ: Фейдинг сложного объекта
 
В 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 11:05

Ответ: Фейдинг сложного объекта
 
Все. Решил.

Кому так приспичит, то делйте как Mr_F_ говорит, но с несколькими правками:
  • У шейдера, который должен быть прозрачным нужно ZWrite Off
  • Render Queue у Z-шейдера и Прозрачности = 3000.
Если not 1, то частично сортировка будет неправильной и видны будут некоторые грани.
Если not 2, то будет артефакты на мобилах.
Если не делать финт с Z-буффером, то будет полностью неправильная сортировка.


Часовой пояс GMT +4, время: 20:36.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot