Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   www.boolean.name > Программирование игр для компьютеров > Unity > Эффекты/Шейдеры

Ответ
 
Опции темы
Старый 28.09.2020, 14:12   #1
Crystal
Терабайт исходников
 
Аватар для Crystal
 
Регистрация: 05.07.2007
Сообщений: 4,918
Написано 1,556 полезных сообщений
(для 4,981 пользователей)
Проваливание текстуры под другую

Столкнулся с болезнью. При определённом угле поворота камеры,
и на определённой удалённости (оба условия важны)
текстура объекта находящегося к камере ближе, чем
объект находящийся позади, проваливается под его текстуру.

Как задать порядок отрисовки текстуры, чтобы её не перекрывали
текстуры находящиеся за ней?

Проблема со всеми стандартными шейдерами текстур,
которые применяются для текстур с пустыми областями (PNG формат),
и которые сглаживают края зарисованной части текстуры граничащие
с пустыми (полностью прозрачными областями).
На скрине ниже например зелёное поле это (Mobile/Particles/AlphaBlended),
а на хелсбаре (UI.Unlit.Detail). Пробовал и другие подобные шейдеры,
эффект одинаковый. Исключение, это при выбранном параметре шейдеров
"Cutout", тогда текстура не перекрывается той текстурой, что позади,
однако такая настройка мне не подходит, так-как текстура не сглаживается, идёт лесенкой.

В общем, что за болезнь, и как её лечить? Кто сталкивался?
Изображения
Тип файла: jpg HBTB.jpg (316.7 Кб, 24 просмотров)
(Offline)
 
Ответить с цитированием
Старый 28.09.2020, 14:54   #2
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,554
Написано 2,995 полезных сообщений
(для 5,303 пользователей)
Ответ: Проваливание текстуры под другую

Это в целом не болезнь, а фича. Все что рисуется в качестве прозрачности сортируется по центру объекта и рисуется от дальнего к ближнему. В твоем случае скорее всего проблема в том, что твоя зеленая сетка это единый объект, у которого центр ближе к камере, чем хэлсбар.
Как простое решение - выстави материалу сетки очередь равную 3000-1 (Transparent-1).
renderer.material.renderQueue 3000-1
В шейдерах очередь задается тегом Queue
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Crystal (28.09.2020)
Старый 28.09.2020, 18:32   #3
Crystal
Терабайт исходников
 
Аватар для Crystal
 
Регистрация: 05.07.2007
Сообщений: 4,918
Написано 1,556 полезных сообщений
(для 4,981 пользователей)
Ответ: Проваливание текстуры под другую

Сообщение от pax Посмотреть сообщение
Это в целом не болезнь, а фича. Все что рисуется в качестве прозрачности сортируется по центру объекта и рисуется от дальнего к ближнему. В твоем случае скорее всего проблема в том, что твоя зеленая сетка это единый объект, у которого центр ближе к камере, чем хэлсбар.
Как простое решение - выстави материалу сетки очередь равную 3000-1 (Transparent-1).
renderer.material.renderQueue 3000-1
В шейдерах очередь задается тегом Queue
Очередная палка в колесо от юнити. Яб сказал говнофича.
Есил у материалов одинаковое Queue, то поверх должен
отрисовываться ближний к камере участок текстуры,
в нормальных движках имхо, без учёта, где чей центр.

Спасибо. Через интерфейс задал 3001 хелсбаровым текстурам.
Я играл с этим параметром на сетке, и не догадался, что нужно на хелсбаре.
3000 тут минимальное, 2999 уже прозрачность всей текстуры.
(Offline)
 
Ответить с цитированием
Старый 28.09.2020, 18:48   #4
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,554
Написано 2,995 полезных сообщений
(для 5,303 пользователей)
Ответ: Проваливание текстуры под другую

Если бы твоя сетка строилась бы отдельными квадами, у которых центр был бы в центре ячеек сетки, то все отрисовалось бы хорошо. Отрисовка прозрачной геометрии всегда большая проблема. И это фича не только юнити. Сортировка полигонов Меша по расстоянию до камеры - это ресурсоемкая задача и не надо ждать от движков чудес, что они такое делают по умолчанию.
__________________
Blitz3d to Unity Wiki

Последний раз редактировалось pax, 28.09.2020 в 20:09.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Crystal (28.09.2020)
Старый 28.09.2020, 19:26   #5
Crystal
Терабайт исходников
 
Аватар для Crystal
 
Регистрация: 05.07.2007
Сообщений: 4,918
Написано 1,556 полезных сообщений
(для 4,981 пользователей)
Ответ: Проваливание текстуры под другую

Сообщение от pax Посмотреть сообщение
Если бы твоя сетка строилась бы отдельными квадами, у которых центр был бы в центре сетки, то все отрисовалось бы хорошо. Отрисовка прозрачной геометрии всегда большая проблема. И это фича не только юнити. Сортировка полигонов Меша по расстоянию до камеры - это ресурсоемкая задача и не надо ждать от движков чудес, что они такое делают по умолчанию.
Мне кажется, что это неправильно работает.
Например я уровень загружу монолитный одним мешем,
и он тогда вылезет поверх объектов расположенных
над ним, на которые натянуты текстуры с прозрачностью.

Больше всего раздражает в этой ситуации то,
что мне теперь всем объектом с прозрачностью нужно повышать
приоритет отрисовки, вместо того, чтобы разово понизить сетке.
(Offline)
 
Ответить с цитированием
Старый 28.09.2020, 19:29   #6
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,554
Написано 2,995 полезных сообщений
(для 5,303 пользователей)
Ответ: Проваливание текстуры под другую

Я не очень понимаю почему у тебя не получилось сетке назначить 2999, почему 3000 минимальное?
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Старый 28.09.2020, 19:32   #7
Crystal
Терабайт исходников
 
Аватар для Crystal
 
Регистрация: 05.07.2007
Сообщений: 4,918
Написано 1,556 полезных сообщений
(для 4,981 пользователей)
Ответ: Проваливание текстуры под другую

Сообщение от pax Посмотреть сообщение
Я не очень понимаю почему у тебя не получилось сетке назначить 2999, почему 3000 минимальное?
При 2999 у меня становится вся текстура прозрачной,
при 3000 (по умолчанию) прозрачны только не закрашенные места на текстуре.
(Offline)
 
Ответить с цитированием
Старый 28.09.2020, 19:35   #8
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,554
Написано 2,995 полезных сообщений
(для 5,303 пользователей)
Ответ: Проваливание текстуры под другую

Сообщение от Crystal Посмотреть сообщение
При 2999 у меня становится вся текстура прозрачной,
при 3000 (по умолчанию) прозрачны только не закрашенные места на текстуре.
Скорее всего ты имеешь ввиду, что пол рисуется выше твоей текстуры сетки? Тебе наверное надо полу сделать тоже 2999 или меньше.
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Старый 28.09.2020, 19:56   #9
Crystal
Терабайт исходников
 
Аватар для Crystal
 
Регистрация: 05.07.2007
Сообщений: 4,918
Написано 1,556 полезных сообщений
(для 4,981 пользователей)
Ответ: Проваливание текстуры под другую

Сообщение от pax Посмотреть сообщение
Скорее всего ты имеешь ввиду, что пол рисуется выше твоей текстуры сетки? Тебе наверное надо полу сделать тоже 2999 или меньше.
У меня при 3000 на всех материалах хелсбар рисуется под сеткой.
Если я ставлю сетке 3000 а хелсбару 3001 то всё отрисовывается верно.
Если я поставлю сетке 2999 а хелсбару 3000 то хелсбар тоже не нырнёт под сетку, но вот сетка станет прозрачной.
Изображения
Тип файла: jpg PPZ.jpg (422.5 Кб, 12 просмотров)
(Offline)
 
Ответить с цитированием
Старый 28.09.2020, 19:59   #10
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,554
Написано 2,995 полезных сообщений
(для 5,303 пользователей)
Ответ: Проваливание текстуры под другую

Сообщение от Crystal Посмотреть сообщение
У меня при 3000 на всех материалах хелсбар рисуется под сеткой.
Если я ставлю сетке 3000 а хелсбару 3001 то всё отрисовывается верно.
Если я поставлю сетке 2999 а хелсбару 3000 то хелсбар тоже не нырнёт под сетку, но вот сетка станет прозрачной.
Синяя сетка же тоже прозрачная? Сделай ей 2998, зеленой сделатьй 2999 и остальное не трогай.
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Crystal (28.09.2020)
Старый 28.09.2020, 20:11   #11
Crystal
Терабайт исходников
 
Аватар для Crystal
 
Регистрация: 05.07.2007
Сообщений: 4,918
Написано 1,556 полезных сообщений
(для 4,981 пользователей)
Ответ: Проваливание текстуры под другую

Сообщение от pax Посмотреть сообщение
Синяя сетка же тоже прозрачная? Сделай ей 2998, зеленой сделатьй 2999 и остальное не трогай.
В общем понизил и эффект такой:
Изображения
Тип файла: jpg ZZP2.jpg (236.8 Кб, 17 просмотров)
(Offline)
 
Ответить с цитированием
Старый 28.09.2020, 20:13   #12
Crystal
Терабайт исходников
 
Аватар для Crystal
 
Регистрация: 05.07.2007
Сообщений: 4,918
Написано 1,556 полезных сообщений
(для 4,981 пользователей)
Ответ: Проваливание текстуры под другую

Но позже я вкурил, что у меня ниже ещё три плейна с прозрачным шейдером,
я отключил их отрисовку, и синяя сетка нормализовалась.
В общем нужно заменить шейдеры на космосе,
и тоже понизить им очерёдность отрисовки.

Спасибо.
Изображения
Тип файла: jpg ZZP3.jpg (156.1 Кб, 13 просмотров)
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
pax (28.09.2020)
Старый 28.09.2020, 20:14   #13
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,554
Написано 2,995 полезных сообщений
(для 5,303 пользователей)
Ответ: Проваливание текстуры под другую

Сообщение от Crystal Посмотреть сообщение
В общем понизил и эффект такой:
Такое ощущение, что у тебя еще что-то на весь экран полупрозрачное рисуется. Что-то типа фона. Ты можешь смотреть как все рисуется в Frame Debugger'е
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Crystal (28.09.2020)
Старый 28.09.2020, 20:28   #14
Crystal
Терабайт исходников
 
Аватар для Crystal
 
Регистрация: 05.07.2007
Сообщений: 4,918
Написано 1,556 полезных сообщений
(для 4,981 пользователей)
Ответ: Проваливание текстуры под другую

Сообщение от pax Посмотреть сообщение
Такое ощущение, что у тебя еще что-то на весь экран полупрозрачное рисуется. Что-то типа фона. Ты можешь смотреть как все рисуется в Frame Debugger'е
Ну вот три плейна космоса с прозрачностью и было фоном, больше ничего.
Канвас разве что ещё висит, но он тут не при чём.

Заменил космосу шейдеры на те, в которых есть транспарент
с возможностью изменения приоритета отрисовки, понизил ниже сеток.

Баг вылечен.
Изображения
Тип файла: jpg ZZP4.jpg (708.0 Кб, 15 просмотров)
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
pax (28.09.2020)
Старый 29.09.2020, 01:02   #15
Arton
Быдлокодер
 
Аватар для Arton
 
Регистрация: 05.07.2009
Адрес: Проспит
Сообщений: 4,852
Написано 2,211 полезных сообщений
(для 5,144 пользователей)
Ответ: Проваливание текстуры под другую

Сообщение от Crystal Посмотреть сообщение
объектом с прозрачностью нужно повышать
Там где тебе не нужна плавная прозрачность, можно обойтись обрезкой «по маске».
Всегда так делаю.
Это есть в любых движках.
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


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


vBulletin® Version 3.6.5.
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com