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

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

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

Ответ
 
Опции темы
Старый 21.05.2012, 09:06   #1
Amatsu
Дэвелопер
 
Аватар для Amatsu
 
Регистрация: 24.07.2008
Сообщений: 1,544
Написано 1,095 полезных сообщений
(для 2,706 пользователей)
Вопрос Ищу шейдер

Ищу шейдер для Unity, использующий стандартный диффузный рендер, но добавляющий альфу мешу с учетом альфы каждого его вертекса в списке mesh.colors
Если у вас есть подобное на примете - дайте ссылочку пожалуйста
(Offline)
 
Ответить с цитированием
Старый 21.05.2012, 09:55   #2
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Ищу шейдер

Собственно написать не составляет труда. Проверь (я не тестировал):
Shader "Custom/Transparent/DiffuseVertexAlpha" {
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

CGPROGRAM
#pragma surface surf Lambert alpha

sampler2D _MainTex;
fixed4 _Color;

struct Input {
    
float2 uv_MainTex;
    
float4 colorCOLOR;
};

void surf (Input INinout SurfaceOutput o) {
    
fixed4 c tex2D(_MainTexIN.uv_MainTex) * _Color;
    
o.Albedo c.rgb;
    
o.Alpha c.IN.color.a;
}
ENDCG
}

Fallback "Transparent/VertexLit"

__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Amatsu (21.05.2012)
Старый 21.05.2012, 11:41   #3
Amatsu
Дэвелопер
 
Аватар для Amatsu
 
Регистрация: 24.07.2008
Сообщений: 1,544
Написано 1,095 полезных сообщений
(для 2,706 пользователей)
Ответ: Ищу шейдер

Спасибо большое, pax, как всегда выручаешь
(Offline)
 
Ответить с цитированием
Старый 24.05.2012, 15:22   #4
Amatsu
Дэвелопер
 
Аватар для Amatsu
 
Регистрация: 24.07.2008
Сообщений: 1,544
Написано 1,095 полезных сообщений
(для 2,706 пользователей)
Ответ: Ищу шейдер

Еще один вопрос.
Знает ли кто-нить шейдер под юнити, который бы делал такой эффект ссылка
Внимание, я ищу шейдер с таким эффектом либо для 2д изображения (текстуры с альфой), либо для 3д модели при ее рендере (чтобы как-бы добавлялась ей толщина контуром, который был бы закрашен как на изображении выше, то есть типа лучами из центра)
(Offline)
 
Ответить с цитированием
Старый 24.05.2012, 15:33   #5
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Ищу шейдер

имхо не найдешь, либо будет слишком тяжелый
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Amatsu (24.05.2012)
Старый 24.05.2012, 15:46   #6
Amatsu
Дэвелопер
 
Аватар для Amatsu
 
Регистрация: 24.07.2008
Сообщений: 1,544
Написано 1,095 полезных сообщений
(для 2,706 пользователей)
Ответ: Ищу шейдер

Тогда другой вопрос. Есть ли возможность добавить в шейдер настройку, чтобы альфа этого шейдера рендерилась относительно бэкграунда, а не относительно того, что находится за этой моделью.
То есть, грубо говоря, у меня есть модель человека, его материал с альфой/на нем текстура с альфой. Он рендерится с альфой относительно, допустим, синего "clear screen"-фона. Перед ним ставим такую же модель с такой же альфой, но эта модель на переднем фоне ренденится не на фоне задней модели, а на фоне того же монотонного синего фона. Возможно ли подобное?

ссылка
(Offline)
 
Ответить с цитированием
Старый 24.05.2012, 15:53   #7
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Ищу шейдер

Какие-то сложные задачи у тебя. Я не представляю как это сделать.
Из предположений - отрендерить заранее в рендертекстуру фон, потом рендерить эти модели шейдером, получившим этот фон как текстуру.
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Старый 24.05.2012, 16:21   #8
Amatsu
Дэвелопер
 
Аватар для Amatsu
 
Регистрация: 24.07.2008
Сообщений: 1,544
Написано 1,095 полезных сообщений
(для 2,706 пользователей)
Ответ: Ищу шейдер

Ок, объясню зачем мне это нужно. У меня есть модель с UV-разверткой. Я создаю вторую модель, полигоны которой установлены ровно в UV-координаты развертки первой модели минус Z-измерение. Я рендерю вторую модель ортографической камерой с сайзом 0.5 в текстуру к первой модели. Получившаяся текстура на первой модели накладывается замечательно кроме мест UV-швов.

ссылка
То есть грани второго меша накладываются точно на соответствующие UV-грани первого меша, но при переводе их в пиксели случается некая погрешность, которую я не могу никак выявить.
Я уже на всех текстурах ставил Clamp, трилинейную фильтрацию, отключал мип мапы, смешал текстуру на материале и прочее прочее прочее (второй день с этим сижу). В итоге я пришел к выводу, что текстуру, полученную из второй модели для первой нужно заблюрить на границах UV-развертки первой как показано на скриншоте тремя постами выше.
(Offline)
 
Ответить с цитированием
Старый 24.05.2012, 16:58   #9
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Ищу шейдер

так тебе не шейдер нужен, а доработать меш, рисующий вторую текстуру. Как бы сделать экструд всем открытым граням.
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Старый 24.05.2012, 17:09   #10
Amatsu
Дэвелопер
 
Аватар для Amatsu
 
Регистрация: 24.07.2008
Сообщений: 1,544
Написано 1,095 полезных сообщений
(для 2,706 пользователей)
Ответ: Ищу шейдер

Сообщение от pax Посмотреть сообщение
так тебе не шейдер нужен, а доработать меш, рисующий вторую текстуру. Как бы сделать экструд всем открытым граням.
Я сначала так и делал, но этот способ очень тормозящий (особенно если в модели 15к полигонов, а мне нужно быстро "запечь" пять таких текстур в реальном времени на десяти таких персонажах). То что сейчас на скриншоте занимает доли секунды, если начну определять внешние грани меша, а потом их смещать по нормалям...

А вот кстати другой вопрос. В Unity PRO есть набор ассетов Image Effects. Я их импортнул в проект. Вручную прицепить, допустим, эффект АА к камере получается легко. А вот как прицепить его программно к созданной программно камере? Пока получилось лишь через cam.AddComponent("AntialiasingAsPostEffect"), но в этом случае этот компонент не дает в проект ссылок на свои элементы (переменная шейдера и множества внутренних настроек эффекта). А использовать cam.AddComponent<AntialiasingAsPostEffect>() я не могу, так как проект не знает скрипта AntialiasingAsPostEffect. Долго гуглил, лишь на одной страничке нашел пример, где в начале в скрипте подключается следующее using Assets.Scripts;
Проблема в том, что мой проект не знает что такое Assets
Пробовал найти его через UnityEngine - хрен

Update
Загнал таки эффект блюра на создаваемую камеру. Эффекта ноль. Видимо шейдеры для рендера камеры не работают когда камера рендерит в текстуру
(Offline)
 
Ответить с цитированием
Старый 24.05.2012, 21:10   #11
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Ищу шейдер

Создай для модели заранее заготовленный меш развертки
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Amatsu (24.05.2012)
Старый 24.05.2012, 21:17   #12
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,051 пользователей)
Ответ: Ищу шейдер

Знает ли кто-нить шейдер под юнити, который бы делал такой эффект
я пилил такой для фикшенья лайтмапов брутфорсом (юзалось как препроцесс): алгоритм тупо проверял если пиксель прозрачный, то смотрим с каждой из 8 сторон от него другой пиксель, если какой-то непрозачен, то красим наш в его цвет. шейдер этот читал одну текстуру а сам рендерил в другую, потом их можно было поменять местами и сделать N пассов, за каждый пасс расширяя границы на 1 пиксель.
если юнити умеет в хлсл (впрочем там всё примитивно, можно портировать на что угодно), и ещё актуально, то могу поискать.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Amatsu (24.05.2012)
Старый 24.05.2012, 22:41   #13
Amatsu
Дэвелопер
 
Аватар для Amatsu
 
Регистрация: 24.07.2008
Сообщений: 1,544
Написано 1,095 полезных сообщений
(для 2,706 пользователей)
Ответ: Ищу шейдер

Сообщение от Mr_F_ Посмотреть сообщение
я пилил такой для фикшенья лайтмапов брутфорсом (юзалось как препроцесс): алгоритм тупо проверял если пиксель прозрачный, то смотрим с каждой из 8 сторон от него другой пиксель, если какой-то непрозачен, то красим наш в его цвет. шейдер этот читал одну текстуру а сам рендерил в другую, потом их можно было поменять местами и сделать N пассов, за каждый пасс расширяя границы на 1 пиксель.
если юнити умеет в хлсл (впрочем там всё примитивно, можно портировать на что угодно), и ещё актуально, то могу поискать.
Да я даже не знаю, понадобится ли он. Я пока пытаюсь довести до ума вариант с поиском "свободных" ребер полигонов и удаления их от центров
з.ы. твой вариант возможно не поможет, так как у меня могут быть текстуры с плавным переходом в альфу
(Offline)
 
Ответить с цитированием
Старый 27.05.2012, 19:02   #14
Amatsu
Дэвелопер
 
Аватар для Amatsu
 
Регистрация: 24.07.2008
Сообщений: 1,544
Написано 1,095 полезных сообщений
(для 2,706 пользователей)
Ответ: Ищу шейдер

Сообщение от pax Посмотреть сообщение
Собственно написать не составляет труда. Проверь (я не тестировал):
Shader "Custom/Transparent/DiffuseVertexAlpha" {
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

CGPROGRAM
#pragma surface surf Lambert alpha

sampler2D _MainTex;
fixed4 _Color;

struct Input {
    
float2 uv_MainTex;
    
float4 colorCOLOR;
};

void surf (Input INinout SurfaceOutput o) {
    
fixed4 c tex2D(_MainTexIN.uv_MainTex) * _Color;
    
o.Albedo c.rgb;
    
o.Alpha c.IN.color.a;
}
ENDCG
}

Fallback "Transparent/VertexLit"

pax, а ты случаем не подскажешь, как в этот шейдер допилить вращение текстуры?
Я нашел несколько примеров, но они конфликтуют с CGPROGRAM-блоком
(Offline)
 
Ответить с цитированием
Старый 27.05.2012, 20:30   #15
Amatsu
Дэвелопер
 
Аватар для Amatsu
 
Регистрация: 24.07.2008
Сообщений: 1,544
Написано 1,095 полезных сообщений
(для 2,706 пользователей)
Ответ: Ищу шейдер

Все, нарыл наконец пример
Если кому понадобится http://answers.unity3d.com/questions...on-a-logo.html
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

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

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


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


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