Страница 1 из 1

Смена цвета у Crease Shading

СообщениеДобавлено: 01 июн 2016, 14:59
Anonymyx
Хай. 1ый раз имею дело непосредственно с кодом шейдера. Возможно ли изменить цвет выделения контура у эффекта Crease Shading? (Например, на красный)
Синтаксис:
Используется glsl

Shader "Hidden/CreaseApply" {
Properties {
        _MainTex ("Base (RGB)", 2D) = "white" {}
        _HrDepthTex ("Base (RGB)", 2D) = "white" {}
        _LrDepthTex ("Base (RGB)", 2D) = "white" {}

}

SubShader {
        Pass {
                ZTest Always Cull Off ZWrite Off

CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"

sampler2D _MainTex;
sampler2D _HrDepthTex;
sampler2D _LrDepthTex;

uniform float4 _MainTex_TexelSize;

uniform float intensity;

struct v2f {
        float4 pos : SV_POSITION;
        float2 uv : TEXCOORD0;
};

v2f vert( appdata_img v )
{
        v2f o;
        o.pos = mul (UNITY_MATRIX_MVP, v.vertex);
        o.uv.xy = v.texcoord.xy;
        return o;
}

half4 frag (v2f i) : SV_Target
{
        float4 hrDepth = tex2D(_HrDepthTex, i.uv);
        float4 lrDepth = tex2D(_LrDepthTex, i.uv);
       
        hrDepth.a = DecodeFloatRGBA(hrDepth);
        lrDepth.a = DecodeFloatRGBA(lrDepth);
       
        float4 color = tex2D(_MainTex, i.uv);

        return color * (1.0-abs(hrDepth.a-lrDepth.a)*intensity);

/*float percent = (1.0-abs(hrDepth.a-lrDepth.a)*intensity);
color.r += color.r * percent;
return color + (color * percent);
*/


}

ENDCG


        }
}

Fallback off

}

 

Пробовал самостоятельно менять строчку return, но из этого ничего не вышло. Прошу помощи.

Re: Смена цвета у Crease Shading

СообщениеДобавлено: 02 июн 2016, 18:24
i_am_kisly
Да, это возможно. Как минимум переименуй шей дер и Кинь в папку ассет. И вытащи его из скрытых.

Re: Смена цвета у Crease Shading

СообщениеДобавлено: 02 июн 2016, 20:12
Anonymyx
Вот, набросал... Один из вариантов. Всегда красный цвет на весь экран как результат... Изменение MainTex на "red" ничего не дает.
Синтаксис:
Используется glsl
Shader "CreaseApplyMod" {

Properties {
        _MainTex ("Base (RGB)", 2D) = "white" {}
        _HrDepthTex ("Base (RGB)", 2D) = "white" {}
        _LrDepthTex ("Base (RGB)", 2D) = "white" {}
        _Color ("Main Color", COLOR) = (250,0,0)
}

SubShader {
        Pass {
                ZTest Always Cull Off ZWrite Off

CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"

sampler2D _MainTex;
sampler2D _HrDepthTex;
sampler2D _LrDepthTex;
fixed4 _Color;

uniform float4 _MainTex_TexelSize;

uniform float intensity;

struct v2f {
        float4 pos : SV_POSITION;
        float2 uv : TEXCOORD0;
};

v2f vert( appdata_img v )
{
        v2f o;
        o.pos = mul (UNITY_MATRIX_MVP, v.vertex);
        o.uv.xy = v.texcoord.xy;
        return o;
}

half4 frag (v2f i) : SV_Target
{
        float4 hrDepth = tex2D(_HrDepthTex, i.uv);
        float4 lrDepth = tex2D(_LrDepthTex, i.uv);
       
        hrDepth.a = DecodeFloatRGBA(hrDepth);
        lrDepth.a = DecodeFloatRGBA(lrDepth);
       
        float4 color = tex2D(_MainTex, i.uv);

        return _Color * (1.0-abs(hrDepth.a-lrDepth.a)*intensity);


}

ENDCG


        }
}

Fallback off

}

 

Re: Смена цвета у Crease Shading

СообщениеДобавлено: 02 июн 2016, 21:44
i_am_kisly
А что он должен делать ? Я не догоняю. Опиши, я исправлю потому что твой шейдер делает всё что угодно но не то что должен..

Re: Смена цвета у Crease Shading

СообщениеДобавлено: 02 июн 2016, 22:08
Anonymyx
Это стандартный Image Effect шейдер. Image Effects - Edge Detection - Crease Shading. Обводка контура объекта черным цветом с заданной толщиной и интенсивностью (но это не суть).
Скрытый текст:
Изображение

Тот что в шапке - без изменений (то что изменял - закомментил).
Мне нужно то же самое, но просто чтобы цвет был не черный, а например красный.
Нашел это: http://answers.unity3d.com/questions/13 ... ffect.html
Но все так же, цвет на весь экран, хотя конечно, я делаю что-то не так...
Был бы благодарен за любую помощь!

Re: Смена цвета у Crease Shading

СообщениеДобавлено: 02 июн 2016, 22:33
waruiyume
Думаю как-то так:
return lerp(color, _TintColor, (1.0-abs(hrDepth.a-lrDepth.a)*intensity));

Re: Смена цвета у Crease Shading

СообщениеДобавлено: 02 июн 2016, 22:40
Anonymyx
Синтаксис:
Используется csharp
_TintColor ("Some Color", Color) = (250,0,0)
...
fixed4 _TintColor;
...
return lerp(color, _TintColor, (1.0-abs(hrDepth.a-lrDepth.a)*intensity));
 


Так, красный на весь экран... :(

Re: Смена цвета у Crease Shading

СообщениеДобавлено: 02 июн 2016, 22:50
waruiyume
Расшарьте здесь тестовый проект(достаточно, только чтобы оригинальный постэффект работал), и я попробую помочь.

Re: Смена цвета у Crease Shading

СообщениеДобавлено: 02 июн 2016, 23:28
Anonymyx
http://rgho.st/7f6PF5fYc
Шейдер в Standart Assets - Effects - Image Effects - Shaders (вроде так).

Re: Смена цвета у Crease Shading

СообщениеДобавлено: 03 июн 2016, 01:15
waruiyume
https://yadi.sk/i/9OA_5ESosDYZS
Синтаксис:
Используется glsl
float str = abs(hrDepth.a-lrDepth.a)*intensity;
return lerp(color, fixed4(1,0,0,0), str);
 

Что странно, у меня тоже сначала заливало весь экран, а при попытке вывести маску (1.0-abs(hrDepth.a-lrDepth.a)*intensity) та выводилась сплошным цветом.
У меня только одна идея, почему-то залип компилятор, ну или что-то проглючило в эдиторном скрипте 8-|

Re: Смена цвета у Crease Shading

СообщениеДобавлено: 03 июн 2016, 23:29
Anonymyx
waruiyume, спасибо огромное! Очень помогли! :ymhug: Уже сделал смену шейдеров при клике, т.е. наведение-синий, кликаем-красный. (popcorn1)

Re: Смена цвета у Crease Shading

СообщениеДобавлено: 04 июн 2016, 23:45
i_am_kisly
т.е. у вас два одинаковых шейдера, только один красный, другой синий ?

Re: Смена цвета у Crease Shading

СообщениеДобавлено: 04 июн 2016, 23:49
Anonymyx
Ага. Лисапед?
Скармливаю скрипту соотв. шейдер при опред. усовиях.
Я так понял SetFloat тут не подойдёт.

Re: Смена цвета у Crease Shading

СообщениеДобавлено: 05 июн 2016, 00:15
i_am_kisly
наверное потому что надо использовать SetColor ?

Re: Смена цвета у Crease Shading

СообщениеДобавлено: 05 июн 2016, 12:32
Anonymyx
SetColor у material же... Как и SetFloat.