1.天牛质感
ASE连接图
2.藤蔓生长
ASE连接图
3.魔镜世界
4.火焰燃烧
ASE连接图
5.钻石渲染
ASE连接图
6.晶体渲染
ASE连接图
7.星云能量体渲染
ASE连接图
ASE连接图
8.粘液效果渲染
ASE连接图
9.传送效果
ASE连接图
10.护盾效果
ASE连接图
11.二次元角色渲染
Shader "Toon_Standard"
{
Properties
{
_BaseMap ("BaseMap", 2D) = "white" {}
_NormalMap("NormalMap", 2D) = "bump" {}
_AoMap("AoMap", 2D) = "white" {}
_DiffuseRamp("DiffuseRamp", 2D) = "white" {}
_TintLayer1("TintLayer1 color",color) =(0.5,0.5,0.5,1)
_TintLayer1_offset("TintLayer1 0ffset", Range(-1,1)) = 0
_TintLayer2("TintLayer2 color" ,color)= (0.5,0.5,0.5,1)
_TintLayer2_offset("TintLayer2 0ffset", Range(-1,1)) = 0
_TintLayer3("TintLayer3 color" ,color)= (0.5,0.5,0.5,1)
_TintLayer3_offset("TintLayer3 0ffset", Range(-1,1)) = 0
_SpecColor("Spec Color",color) = (0.5,0.5,0.5,1)
_SpecIntensity("Spec Intensity",float)= 1
_SpecShininess("Spec Shininess",float) = 100
_SpecMap("SpecMap", 2D) = "white" {}
_EnvMap( "Env Map", Cube)= "white" {}
_Roughness("Roughness",Range(-1,1))=0
_FresnelMin("Fresnel Min",Range(-1,2))= 0.5
_FresnelMax("Fresnel Max" , Range(-1,2))=1
_EnvIntensity("Env Intensity",float)= 1
_OutlineColor("Outline Color", color) = (0,0,0,1)
_Outline (" Outline Width", float) =1
}
SubShader
{
Tags
{
"RenderType"="Opaque"
}
LOD 100
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
#include "Autolight.cginc"
struct appdata
{
float4 vertex : POSITION;
float2 texcoord0 : TEXCOORD0;
float3 normal :NORMAL;
float4 tangent :TANGENT;
float4 color : COLOR;
};
struct v2f
{
float4 pos : SV_POSITION;
float2 uv : TEXCOORD0;
float3 normalDir :TEXCOORD1;
float3 tangentDir :TEXCOORD2;
float3 binormalDir :TEXCOORD3;
float3 posWold :TEXCOORD4;
float3 vertexColor :TEXCOORD5;
};
sampler2D _BaseMap;
sampler2D _NormalMap;
sampler2D _AoMap;
sampler2D _DiffuseRamp;
float4 _TintLayer1;
float _TintLayer1_offset;
float4 _TintLayer2;
float _TintLayer2_offset;
float4 _TintLayer3;
float _TintLayer3_offset;
float _TintLayer3_Softness;
float4 _SpecColor;
float _SpecIntensity;
float _SpecShininess;
sampler2D _SpecMap;
samplerCUBE _EnvMap;
float4 _EnvMap_HDR;
float _Roughness;
float _FresnelMin;
float _FresnelMax;
float _EnvIntensity;
v2f vert(appdata v)
{
v2f o;
o.pos = UnityObjectToClipPos(v.vertex);
o.normalDir = normalize(UnityObjectToWorldNormal(v.normal));
o.tangentDir = normalize(mul(unity_ObjectToWorld, float4(v.tangent.xyz, 0.0))).xyz;
o.binormalDir = normalize(cross(o.normalDir, o.tangentDir) * v.tangent.w);
o.vertexColor = v.color;
o.uv = v.texcoord0;
return o;
}
half4 frag(v2f i) : SV_Target
{
//向量
half3 normalDir = i.normalDir;
half3 tangentDir = i.tangentDir;
half3 binormalDir = i.binormalDir;
half3 lightDir = normalize(_WorldSpaceLightPos0.xyz);
half3 viewDir = normalize(_WorldSpaceCameraPos - i.posWold.xyz);
//贴图数据
half3 base_color = tex2D(_BaseMap, i.uv);
half ao = tex2D(_AoMap, i.uv).r;
half4 spec_map = tex2D(_SpecMap, i.uv);
half spec_mask = spec_map.b;
half spec_smoothness = spec_map.a;
//法线贴图
float4 normalMap = tex2D(_NormalMap, i.uv);
float3 normalData = UnpackNormal(normalMap);
float3x3 TBN = float3x3(tangentDir, binormalDir, normalDir);
normalDir = normalize(mul(normalData, TBN));
//漫反射
half NdotL = dot(normalDir, lightDir);
half half_lambert = (NdotL + 1.0) * 0.5;
half diffuse_term = half_lambert * ao;
//第一层上色
half3 final_diffuse = half3(0.0, 0.0, 0.0);
half2 uv_ramp1 = half2(diffuse_term + _TintLayer1_offset, 0.5);
half toon_diffuse1 = tex2D(_DiffuseRamp, uv_ramp1).r;
half3 tint_color1 = lerp(half3(1, 1, 1), _TintLayer1.rgb, toon_diffuse1 * _TintLayer1.a);
final_diffuse = base_color * tint_color1;
//第二层上色
half2 uv_ramp2 = half2(diffuse_term + _TintLayer2_offset, 1 - i.vertexColor.g);
half toon_diffuse2 = tex2D(_DiffuseRamp, uv_ramp2).g;
half3 tint_color2 = lerp(half3(1, 1, 1), _TintLayer2.rgb, toon_diffuse2 * _TintLayer2.a);
final_diffuse = final_diffuse * tint_color2;
//第三层上色
half2 uv_ramp3 = half2(diffuse_term + _TintLayer3_offset, 1 - i.vertexColor.b);
half toon_diffuse3 = tex2D(_DiffuseRamp, uv_ramp3).b;
half3 tint_color3 = lerp(half3(1, 1, 1), _TintLayer3.rgb, toon_diffuse3 * _TintLayer3.a);
final_diffuse = final_diffuse * tint_color3;
//高光反射
half3 H = normalize(lightDir + viewDir);
half NdotH = dot(normalDir, H);
half spec_term = max(0.0001, pow(NdotH, _SpecShininess * spec_smoothness)) * ao;
half3 final_spec = spec_term * _SpecColor * _SpecIntensity * spec_mask;
//环境反射/边缘光
half fresnel = 1.0 - dot(normalDir, viewDir);
fresnel = smoothstep(_FresnelMin, _FresnelMax, fresnel);
half3 reflectDir = reflect(-viewDir, normalDir);
float roughness = lerp(0.0, 0.95, saturate(_Roughness));
roughness = roughness * (1.7 - 0.7 * roughness);
float mip_level = roughness * 6.0;
half4 color_cubemap = texCUBElod(_EnvMap, float4(reflectDir, mip_level));
half3 env_color = DecodeHDR(color_cubemap, _EnvMap_HDR);
half3 final_env = env_color * fresnel * _EnvIntensity * spec_mask;
half3 final_color = final_diffuse + final_spec + final_env;
return float4(final_color, 1.0);
}
ENDCG
}
Pass
{
Cull Front
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnitycG.cginc"
sampler2D _BaseMap;
float _Outline;
float _OutlineZbias;
float4 _OutlineColor;
struct appdata
{
float4 vertex: POSITION;
float3 normal: NORMAL;
float2 texcoord0: TEXCOORD0;
float4 color: COLOR;
};
struct v2f
{
float4 pos: SV_POSITION;
float2 uv:TEXCOORD0;
float4 vertex_color : TEXCOORD1;
};
v2f vert(appdata v)
{
v2f o;
float3 normal_world = UnityObjectToWorldNormal(v.normal);
float3 pos_view = UnityObjectToViewPos(v.vertex);
float3 outline_dir = normalize(mul((float3x3)UNITY_MATRIX_V, normal_world));
pos_view = pos_view + outline_dir * _Outline * 0.001 * v.color.a;
o.pos = mul(UNITY_MATRIX_P, float4(pos_view, 1.0));
o.uv = v.texcoord0.xy;
o.vertex_color = v.color;
return o;
}
float4 frag(v2f i): COLOR
{
float3 basecolor = tex2D(_BaseMap, i.uv.xy).xyz;
half maxComponent = max(max(basecolor.r, basecolor.g), basecolor.b) - 0.004;
half3 saturatedcolor = step(maxComponent.rrr, basecolor) * basecolor;
saturatedcolor = lerp(basecolor.rgb, saturatedcolor, 0.6);
half3 outlineColor = 0.8 * saturatedcolor * basecolor * _OutlineColor.xyz;
return float4(outlineColor, 1.0);
}
ENDCG
}
}
FallBack "Standard"
}