Add shaders
This commit is contained in:
@@ -0,0 +1,219 @@
|
||||
Shader "Custom/MobShader" {
|
||||
Properties {
|
||||
_Color ("Skin Color", Color) = (1,1,1,1)
|
||||
|
||||
_Shift ("Shift", Range(0,1)) = 0.1
|
||||
|
||||
_Brightness ("Brightness", Range(0,1)) = 0.0
|
||||
_Contrast ("Contrast", Range(0,2)) = 0.0
|
||||
|
||||
_MainTex ("Albedo (RGB)", 2D) = "white" {}
|
||||
_TexEquipA ("Equip A (RGB)", 2D) = "" {}
|
||||
_ColEquipA ("Color Equip A", Color ) = (1,1,1,0)
|
||||
_TexEquipB ("Equip B (RGB)", 2D) = "" {}
|
||||
_ColEquipB ("Color Equip B", Color ) = (1,1,1,0)
|
||||
_TexEquipC ("Equip C (RGB)", 2D) = "" {}
|
||||
_ColEquipC ("Color Equip C", Color ) = (1,1,1,0)
|
||||
_TexEquipD ("Equip D (RGB)", 2D) = "" {}
|
||||
_ColEquipD ("Color Equip D", Color ) = (1,1,1,0)
|
||||
_TexEquipE ("Equip E (RGB)", 2D) = "" {}
|
||||
_ColEquipE ("Color Equip E", Color ) = (1,1,1,0)
|
||||
_TexEquipF ("Equip F (RGB)", 2D) = "" {}
|
||||
_ColEquipF ("Color Equip F", Color ) = (1,1,1,0)
|
||||
_TexEquipG ("Equip G (RGB)", 2D) = "" {}
|
||||
_ColEquipG ("Color Equip G", Color ) = (1,1,1,0)
|
||||
}
|
||||
SubShader {
|
||||
Tags {"Queue"="Geometry" "RenderType"="Opaque"}
|
||||
//LOD 200
|
||||
|
||||
//Pass {
|
||||
// ZWrite On
|
||||
// ColorMask 0
|
||||
//}
|
||||
|
||||
CGPROGRAM
|
||||
// Physically based Standard lighting model, and enable shadows on all light types
|
||||
//fullforwardshadows ?
|
||||
#pragma surface surf Standard fullforwardshadows
|
||||
|
||||
// Use shader model 3.0 target, to get nicer looking lighting
|
||||
#pragma target 3.0
|
||||
|
||||
sampler2D _MainTex;
|
||||
sampler2D _TexEquipA;
|
||||
sampler2D _TexEquipB;
|
||||
sampler2D _TexEquipC;
|
||||
sampler2D _TexEquipD;
|
||||
sampler2D _TexEquipE;
|
||||
sampler2D _TexEquipF;
|
||||
sampler2D _TexEquipG;
|
||||
|
||||
struct Input {
|
||||
float2 uv_MainTex;
|
||||
};
|
||||
|
||||
float _Brightness;
|
||||
float _Contrast;
|
||||
float _Shift;
|
||||
fixed4 _Color;
|
||||
fixed4 _ColEquipA;
|
||||
fixed4 _ColEquipB;
|
||||
fixed4 _ColEquipC;
|
||||
fixed4 _ColEquipD;
|
||||
fixed4 _ColEquipE;
|
||||
fixed4 _ColEquipF;
|
||||
fixed4 _ColEquipG;
|
||||
|
||||
|
||||
float3 rgbTohsv(float3 RGB)
|
||||
{
|
||||
float3 HSV;
|
||||
|
||||
float minChannel, maxChannel;
|
||||
if (RGB.x > RGB.y) {
|
||||
maxChannel = RGB.x;
|
||||
minChannel = RGB.y;
|
||||
}
|
||||
else {
|
||||
maxChannel = RGB.y;
|
||||
minChannel = RGB.x;
|
||||
}
|
||||
|
||||
if (RGB.z > maxChannel) maxChannel = RGB.z;
|
||||
if (RGB.z < minChannel) minChannel = RGB.z;
|
||||
|
||||
HSV.xy = 0;
|
||||
HSV.z = maxChannel;
|
||||
float delta = maxChannel - minChannel; //Delta RGB value
|
||||
if (delta != 0) { // If gray, leave H S at zero
|
||||
HSV.y = delta / HSV.z;
|
||||
float3 delRGB;
|
||||
delRGB = (HSV.zzz - RGB + 3*delta) / (6.0*delta);
|
||||
if ( RGB.x == HSV.z ) HSV.x = delRGB.z - delRGB.y;
|
||||
else if ( RGB.y == HSV.z ) HSV.x = ( 1.0/3.0) + delRGB.x - delRGB.z;
|
||||
else if ( RGB.z == HSV.z ) HSV.x = ( 2.0/3.0) + delRGB.y - delRGB.x;
|
||||
}
|
||||
return (HSV);
|
||||
}
|
||||
|
||||
float3 hsvTorgb(float3 HSV)
|
||||
{
|
||||
float3 RGB = HSV.z;
|
||||
|
||||
float var_h = HSV.x * 6;
|
||||
float var_i = floor(var_h); // Or ... var_i = floor( var_h )
|
||||
float var_1 = HSV.z * (1.0 - HSV.y);
|
||||
float var_2 = HSV.z * (1.0 - HSV.y * (var_h-var_i));
|
||||
float var_3 = HSV.z * (1.0 - HSV.y * (1-(var_h-var_i)));
|
||||
if (var_i == 0) { RGB = float3(HSV.z, var_3, var_1); }
|
||||
else if (var_i == 1) { RGB = float3(var_2, HSV.z, var_1); }
|
||||
else if (var_i == 2) { RGB = float3(var_1, HSV.z, var_3); }
|
||||
else if (var_i == 3) { RGB = float3(var_1, var_2, HSV.z); }
|
||||
else if (var_i == 4) { RGB = float3(var_3, var_1, HSV.z); }
|
||||
else { RGB = float3(HSV.z, var_1, var_2); }
|
||||
|
||||
return (RGB);
|
||||
}
|
||||
|
||||
void surf (Input IN, inout SurfaceOutputStandard o) {
|
||||
// Albedo comes from a texture tinted by color
|
||||
//Original
|
||||
//fixed4 c = tex2D (_MainTex, IN.uv_MainTex) * _Color;
|
||||
fixed4 c = tex2D (_MainTex, IN.uv_MainTex);
|
||||
float val = ( c.r + c.g + c.b ) / 3;
|
||||
//Manual skin
|
||||
|
||||
//c = lerp(_ColorDark, _Color, val );
|
||||
|
||||
|
||||
float3 hsv = rgbTohsv( float3(_Color.r, _Color.g, _Color.b) );
|
||||
hsv.x += val * _Shift;
|
||||
if( val < 0.1 )
|
||||
hsv.y = 1;
|
||||
else if( val < 0.5 )
|
||||
hsv.y = lerp( 1, 0.2, (val-0.1)/0.4 );
|
||||
else if( val < 0.9 )
|
||||
hsv.y = lerp( 0.2, 0.0, (val-0.5)/0.4 );
|
||||
else
|
||||
hsv.y = 0;
|
||||
|
||||
hsv.z = val;
|
||||
|
||||
|
||||
|
||||
float3 col = hsvTorgb(hsv);
|
||||
c.r = col.x;
|
||||
c.g = col.y;
|
||||
c.b = col.z;
|
||||
|
||||
//Contrast
|
||||
c.rgb = ((c.rgb - 0.5) * max(_Contrast, 0)) + 0.5;
|
||||
// Apply brightness.
|
||||
c.rgb += _Brightness;
|
||||
|
||||
o.Metallic = 0;
|
||||
o.Smoothness = 0.1;
|
||||
float EquipSmooth = 0;
|
||||
|
||||
fixed4 e = float4(0,0,0,0);
|
||||
//Auto skin
|
||||
//Equip
|
||||
if( _ColEquipA.a > 0 )
|
||||
{
|
||||
e = tex2D( _TexEquipA, IN.uv_MainTex);
|
||||
c = lerp(c,e * _ColEquipA, e.a * _ColEquipA.a);
|
||||
o.Smoothness = EquipSmooth;
|
||||
}
|
||||
|
||||
if( _ColEquipB.a > 0 )
|
||||
{
|
||||
e = tex2D( _TexEquipB, IN.uv_MainTex);
|
||||
c = lerp(c,e * _ColEquipB, e.a * _ColEquipB.a );
|
||||
o.Smoothness = EquipSmooth;
|
||||
}
|
||||
|
||||
if( _ColEquipC.a > 0 )
|
||||
{
|
||||
e = tex2D( _TexEquipC, IN.uv_MainTex);
|
||||
c = lerp(c,e * _ColEquipC, e.a * _ColEquipC.a);
|
||||
o.Smoothness = EquipSmooth;
|
||||
}
|
||||
|
||||
if( _ColEquipD.a > 0 )
|
||||
{
|
||||
e = tex2D( _TexEquipD, IN.uv_MainTex);
|
||||
c = lerp(c,e * _ColEquipD, e.a *_ColEquipD.a);
|
||||
o.Smoothness = EquipSmooth;
|
||||
}
|
||||
|
||||
if( _ColEquipE.a > 0 )
|
||||
{
|
||||
e = tex2D( _TexEquipE, IN.uv_MainTex);
|
||||
c = lerp(c,e * _ColEquipE, e.a * _ColEquipE.a);
|
||||
o.Smoothness = EquipSmooth;
|
||||
}
|
||||
|
||||
if( _ColEquipF.a > 0 )
|
||||
{
|
||||
e = tex2D( _TexEquipF, IN.uv_MainTex);
|
||||
c = lerp(c,e * _ColEquipF, e.a * _ColEquipF.a);
|
||||
o.Smoothness = EquipSmooth;
|
||||
}
|
||||
|
||||
if( _ColEquipG.a > 0 )
|
||||
{
|
||||
e = tex2D( _TexEquipG, IN.uv_MainTex);
|
||||
c = lerp(c,e * _ColEquipG, e.a * _ColEquipG.a );
|
||||
o.Smoothness = EquipSmooth;
|
||||
}
|
||||
|
||||
o.Albedo = c.rgb;
|
||||
// Metallic and smoothness come from slider variables
|
||||
|
||||
//o.Alpha =_msAlpha;
|
||||
}
|
||||
ENDCG
|
||||
}
|
||||
FallBack "Diffuse"
|
||||
}
|
||||
Reference in New Issue
Block a user