forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Эффекты/Шейдеры (http://forum.boolean.name/forumdisplay.php?f=170)
-   -   Ищу шейдер (http://forum.boolean.name/showthread.php?t=16819)

Amatsu 21.05.2012 09:06

Ищу шейдер
 
Ищу шейдер для Unity, использующий стандартный диффузный рендер, но добавляющий альфу мешу с учетом альфы каждого его вертекса в списке mesh.colors
Если у вас есть подобное на примете - дайте ссылочку пожалуйста

pax 21.05.2012 09:55

Ответ: Ищу шейдер
 
Собственно написать не составляет труда. Проверь (я не тестировал):
PHP код:

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"



Amatsu 21.05.2012 11:41

Ответ: Ищу шейдер
 
Спасибо большое, pax, как всегда выручаешь :)

Amatsu 24.05.2012 15:22

Ответ: Ищу шейдер
 
Еще один вопрос.
Знает ли кто-нить шейдер под юнити, который бы делал такой эффект ссылка
Внимание, я ищу шейдер с таким эффектом либо для 2д изображения (текстуры с альфой), либо для 3д модели при ее рендере (чтобы как-бы добавлялась ей толщина контуром, который был бы закрашен как на изображении выше, то есть типа лучами из центра)

pax 24.05.2012 15:33

Ответ: Ищу шейдер
 
имхо не найдешь, либо будет слишком тяжелый

Amatsu 24.05.2012 15:46

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

ссылка

pax 24.05.2012 15:53

Ответ: Ищу шейдер
 
Какие-то сложные задачи у тебя. Я не представляю как это сделать.
Из предположений - отрендерить заранее в рендертекстуру фон, потом рендерить эти модели шейдером, получившим этот фон как текстуру.

Amatsu 24.05.2012 16:21

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

ссылка
То есть грани второго меша накладываются точно на соответствующие UV-грани первого меша, но при переводе их в пиксели случается некая погрешность, которую я не могу никак выявить.
Я уже на всех текстурах ставил Clamp, трилинейную фильтрацию, отключал мип мапы, смешал текстуру на материале и прочее прочее прочее (второй день с этим сижу). В итоге я пришел к выводу, что текстуру, полученную из второй модели для первой нужно заблюрить на границах UV-развертки первой как показано на скриншоте тремя постами выше.

pax 24.05.2012 16:58

Ответ: Ищу шейдер
 
так тебе не шейдер нужен, а доработать меш, рисующий вторую текстуру. Как бы сделать экструд всем открытым граням.

Amatsu 24.05.2012 17:09

Ответ: Ищу шейдер
 
Цитата:

Сообщение от pax (Сообщение 228666)
так тебе не шейдер нужен, а доработать меш, рисующий вторую текстуру. Как бы сделать экструд всем открытым граням.

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

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

Update
Загнал таки эффект блюра на создаваемую камеру. Эффекта ноль. Видимо шейдеры для рендера камеры не работают когда камера рендерит в текстуру

pax 24.05.2012 21:10

Ответ: Ищу шейдер
 
Создай для модели заранее заготовленный меш развертки

Mr_F_ 24.05.2012 21:17

Ответ: Ищу шейдер
 
Цитата:

Знает ли кто-нить шейдер под юнити, который бы делал такой эффект
я пилил такой для фикшенья лайтмапов брутфорсом (юзалось как препроцесс): алгоритм тупо проверял если пиксель прозрачный, то смотрим с каждой из 8 сторон от него другой пиксель, если какой-то непрозачен, то красим наш в его цвет. шейдер этот читал одну текстуру а сам рендерил в другую, потом их можно было поменять местами и сделать N пассов, за каждый пасс расширяя границы на 1 пиксель.
если юнити умеет в хлсл (впрочем там всё примитивно, можно портировать на что угодно), и ещё актуально, то могу поискать.

Amatsu 24.05.2012 22:41

Ответ: Ищу шейдер
 
Цитата:

Сообщение от Mr_F_ (Сообщение 228682)
я пилил такой для фикшенья лайтмапов брутфорсом (юзалось как препроцесс): алгоритм тупо проверял если пиксель прозрачный, то смотрим с каждой из 8 сторон от него другой пиксель, если какой-то непрозачен, то красим наш в его цвет. шейдер этот читал одну текстуру а сам рендерил в другую, потом их можно было поменять местами и сделать N пассов, за каждый пасс расширяя границы на 1 пиксель.
если юнити умеет в хлсл (впрочем там всё примитивно, можно портировать на что угодно), и ещё актуально, то могу поискать.

Да я даже не знаю, понадобится ли он. Я пока пытаюсь довести до ума вариант с поиском "свободных" ребер полигонов и удаления их от центров
з.ы. твой вариант возможно не поможет, так как у меня могут быть текстуры с плавным переходом в альфу

Amatsu 27.05.2012 19:02

Ответ: Ищу шейдер
 
Цитата:

Сообщение от pax (Сообщение 228390)
Собственно написать не составляет труда. Проверь (я не тестировал):
PHP код:

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-блоком

Amatsu 27.05.2012 20:30

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


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

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