|
21.05.2012, 09:06
|
#1
|
Дэвелопер
Регистрация: 24.07.2008
Сообщений: 1,544
Написано 1,095 полезных сообщений (для 2,706 пользователей)
|
Ищу шейдер
Ищу шейдер для Unity, использующий стандартный диффузный рендер, но добавляющий альфу мешу с учетом альфы каждого его вертекса в списке mesh.colors
Если у вас есть подобное на примете - дайте ссылочку пожалуйста
|
(Offline)
|
|
21.05.2012, 09:55
|
#2
|
Unity/C# кодер
Регистрация: 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 color: COLOR; };
void surf (Input IN, inout SurfaceOutput o) { fixed4 c = tex2D(_MainTex, IN.uv_MainTex) * _Color; o.Albedo = c.rgb; o.Alpha = c.a * IN.color.a; } ENDCG }
Fallback "Transparent/VertexLit" }
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
21.05.2012, 11:41
|
#3
|
Дэвелопер
Регистрация: 24.07.2008
Сообщений: 1,544
Написано 1,095 полезных сообщений (для 2,706 пользователей)
|
Ответ: Ищу шейдер
Спасибо большое, pax, как всегда выручаешь
|
(Offline)
|
|
24.05.2012, 15:22
|
#4
|
Дэвелопер
Регистрация: 24.07.2008
Сообщений: 1,544
Написано 1,095 полезных сообщений (для 2,706 пользователей)
|
Ответ: Ищу шейдер
Еще один вопрос.
Знает ли кто-нить шейдер под юнити, который бы делал такой эффект ссылка
Внимание, я ищу шейдер с таким эффектом либо для 2д изображения (текстуры с альфой), либо для 3д модели при ее рендере (чтобы как-бы добавлялась ей толщина контуром, который был бы закрашен как на изображении выше, то есть типа лучами из центра)
|
(Offline)
|
|
24.05.2012, 15:33
|
#5
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Ищу шейдер
имхо не найдешь, либо будет слишком тяжелый
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
24.05.2012, 15:46
|
#6
|
Дэвелопер
Регистрация: 24.07.2008
Сообщений: 1,544
Написано 1,095 полезных сообщений (для 2,706 пользователей)
|
Ответ: Ищу шейдер
Тогда другой вопрос. Есть ли возможность добавить в шейдер настройку, чтобы альфа этого шейдера рендерилась относительно бэкграунда, а не относительно того, что находится за этой моделью.
То есть, грубо говоря, у меня есть модель человека, его материал с альфой/на нем текстура с альфой. Он рендерится с альфой относительно, допустим, синего "clear screen"-фона. Перед ним ставим такую же модель с такой же альфой, но эта модель на переднем фоне ренденится не на фоне задней модели, а на фоне того же монотонного синего фона. Возможно ли подобное?
ссылка
|
(Offline)
|
|
24.05.2012, 15:53
|
#7
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Ищу шейдер
Какие-то сложные задачи у тебя. Я не представляю как это сделать.
Из предположений - отрендерить заранее в рендертекстуру фон, потом рендерить эти модели шейдером, получившим этот фон как текстуру.
|
(Offline)
|
|
24.05.2012, 16:21
|
#8
|
Дэвелопер
Регистрация: 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
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Ищу шейдер
так тебе не шейдер нужен, а доработать меш, рисующий вторую текстуру. Как бы сделать экструд всем открытым граням.
|
(Offline)
|
|
24.05.2012, 17:09
|
#10
|
Дэвелопер
Регистрация: 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
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Ищу шейдер
Создай для модели заранее заготовленный меш развертки
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
24.05.2012, 21:17
|
#12
|
Терабайт исходников
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений (для 6,051 пользователей)
|
Ответ: Ищу шейдер
Знает ли кто-нить шейдер под юнити, который бы делал такой эффект
|
я пилил такой для фикшенья лайтмапов брутфорсом (юзалось как препроцесс): алгоритм тупо проверял если пиксель прозрачный, то смотрим с каждой из 8 сторон от него другой пиксель, если какой-то непрозачен, то красим наш в его цвет. шейдер этот читал одну текстуру а сам рендерил в другую, потом их можно было поменять местами и сделать N пассов, за каждый пасс расширяя границы на 1 пиксель.
если юнити умеет в хлсл (впрочем там всё примитивно, можно портировать на что угодно), и ещё актуально, то могу поискать.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
24.05.2012, 22:41
|
#13
|
Дэвелопер
Регистрация: 24.07.2008
Сообщений: 1,544
Написано 1,095 полезных сообщений (для 2,706 пользователей)
|
Ответ: Ищу шейдер
Сообщение от Mr_F_
я пилил такой для фикшенья лайтмапов брутфорсом (юзалось как препроцесс): алгоритм тупо проверял если пиксель прозрачный, то смотрим с каждой из 8 сторон от него другой пиксель, если какой-то непрозачен, то красим наш в его цвет. шейдер этот читал одну текстуру а сам рендерил в другую, потом их можно было поменять местами и сделать N пассов, за каждый пасс расширяя границы на 1 пиксель.
если юнити умеет в хлсл (впрочем там всё примитивно, можно портировать на что угодно), и ещё актуально, то могу поискать.
|
Да я даже не знаю, понадобится ли он. Я пока пытаюсь довести до ума вариант с поиском "свободных" ребер полигонов и удаления их от центров
з.ы. твой вариант возможно не поможет, так как у меня могут быть текстуры с плавным переходом в альфу
|
(Offline)
|
|
27.05.2012, 19:02
|
#14
|
Дэвелопер
Регистрация: 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 color: COLOR;
};
void surf (Input IN, inout SurfaceOutput o) {
fixed4 c = tex2D(_MainTex, IN.uv_MainTex) * _Color;
o.Albedo = c.rgb;
o.Alpha = c.a * IN.color.a;
}
ENDCG
}
Fallback "Transparent/VertexLit"
}
|
pax, а ты случаем не подскажешь, как в этот шейдер допилить вращение текстуры?
Я нашел несколько примеров, но они конфликтуют с CGPROGRAM-блоком
|
(Offline)
|
|
27.05.2012, 20:30
|
#15
|
Дэвелопер
Регистрация: 24.07.2008
Сообщений: 1,544
Написано 1,095 полезных сообщений (для 2,706 пользователей)
|
Ответ: Ищу шейдер
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 21:46.
|