Плавное изменение прозрачности объекта.

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

Плавное изменение прозрачности объекта.

Сообщение tr1te 04 сен 2012, 19:16

Как сделать чтобы объект плавно исчезал и так же появлялся?

Настолько простая вещь, что мне сложно представить, что надо искать/писать дополнительный шейдер или скрипт. Но тем не менее ничего внятного я не нашел. Единственное более менее подходящее это стандартный шейдер Transparent/Diffuse, у которого просто меняешь со временем альфу, и когда альфа 0 все прекрасно, но если сделать альфу 255, то он не выглядет так как еслибы на объект наложить шейдер Diffuse. Конечно объект с Transparent/Diffuse перестает быть прозрачным относительно других обхектов, но он прозрачный по отношению у себе. А я хотел бы получить результат как если бы у Diffuse шейдера можно было бы изменить альфу, и объект становился постепенно прозрачным. На вертексном уровне менять альфу я тоже слышал, но что будет если надо по не сколько раз в секунду менять 50к вертексов.
Аватара пользователя
tr1te
UNец
 
Сообщения: 27
Зарегистрирован: 04 апр 2012, 12:20

Re: Плавное изменение прозрачности объекта.

Сообщение DbIMok 05 сен 2012, 14:29

если нет готового подходящего шейдера с нужным функционалом, то нужно написать свой. это не сложно. скачать исходники встроенных шейдеров
Скрытый текст:




посмотреть отличия Normal-Diffuse.shader от Alpha-Diffuse.shader. они реализованы как surface шейдеры, там все легко и понятно
Скрытый текст:




насчет производительности вертексной альфа - возьмите попробуйте.
правильный вопрос - половина ответа. учитесь формулировать вопросы понятно.
Новости > _Telegram чат @unity3d_ru (11.6k/4.8k online) > _Telegram канал @unity_news (4.8k подписчиков) > Телеграм тема > "Спасибо"
Аватара пользователя
DbIMok
Адепт
 
Сообщения: 6372
Зарегистрирован: 31 июл 2009, 14:05

Re: Плавное изменение прозрачности объекта.

Сообщение tr1te 06 сен 2012, 13:34

TransparentShader.jpg


Diffuse и Transparent/Diffuse (alpha = 1) выглядят по разному.

Решение:
Такой эффект происходит в том случае если объект состоит из нескольких блоков и они неправильно сортируются. В Transparent шейдере не используется Z сортировка.

После пары изменений и добавления строки ZWrite On, все отлично сортируется. Вот обертка стандартного Transparent/diffuse шейдера:

Синтаксис:
Используется csharp
Shader "SplitWorld/DiffuseZWrite" {
        Properties {
                _Color ("Main Color", Color) = (1,1,1,1)
                _MainTex ("Base (RGB) Trans (A)", 2D) = "white" {}
        }

        SubShader {
                Tags {"Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent"}
                LOD 200

                // extra pass that renders to depth buffer only
                Pass {
                        ZWrite On
                        ColorMask 0
                }
               
                UsePass "Transparent/Diffuse/FORWARD"
        }

        Fallback "Transparent/VertexLit"
}
У вас нет доступа для просмотра вложений в этом сообщении.
Аватара пользователя
tr1te
UNец
 
Сообщения: 27
Зарегистрирован: 04 апр 2012, 12:20


Вернуться в Почемучка

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 27