卡通渲染效果shard-1
2012-12-05 17:11
483 查看
Shader "Hidden/Edge Detect Normals" {
Properties {
_MainTex ("Base (RGB)", RECT) = "white" {}
_NormalsTexture ("Normals", RECT) = "white" {}
}
SubShader {
Pass {
ZTest Always Cull Off ZWrite Off
Fog { Mode off }
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#pragma fragmentoption ARB_precision_hint_fastest
#include "UnityCG.cginc"
uniform samplerRECT _MainTex;
uniform samplerRECT _NormalsTexture;
uniform float4 _MainTex_TexelSize;
struct v2f {
float4 pos : POSITION;
float2 uv[3] : TEXCOORD0;
};
v2f vert( appdata_img v )
{
v2f o;
o.pos = mul (glstate.matrix.mvp, v.vertex);
float2 uv = MultiplyUV( glstate.matrix.texture[0], v.texcoord );
o.uv[0] = uv;
o.uv[1] = uv + float2(-_MainTex_TexelSize.x, -_MainTex_TexelSize.y);
o.uv[2] = uv + float2(+_MainTex_TexelSize.x, -_MainTex_TexelSize.y);
return o;
}
half4 frag (v2f i) : COLOR
{
half4 original = texRECT(_MainTex, i.uv[0]);
// three samples from normals+depth buffer
half4 normalD1 = texRECT(_NormalsTexture, i.uv[0]);
half4 normalD2 = texRECT(_NormalsTexture, i.uv[1]);
half4 normalD3 = texRECT(_NormalsTexture, i.uv[2]);
// normals filter
half3 n1 = normalD1.rgb*2-1;
half3 n2 = normalD2.rgb*2-1;
half3 n3 = normalD3.rgb*2-1;
half2 ndiff;
ndiff.x = dot( n1, n2 );
ndiff.y = dot( n1, n3 );
ndiff -= 0.9;
ndiff = ndiff > half2(0,0) ? half2(1,1) : half2(0,0);
half ndiff1 = ndiff.x * ndiff.y;
original.rgb *= ndiff1;
// depth filter
float2 zdiff;
zdiff.x = normalD1.a - normalD2.a;
zdiff.y = normalD1.a - normalD3.a;
zdiff = abs( zdiff ) - 0.05;
zdiff = zdiff > half2(0,0) ? half2(0,0) : half2(1,1);
original *= zdiff.x*zdiff.y;
return original;
}
ENDCG
}
}
Fallback off
}
Properties {
_MainTex ("Base (RGB)", RECT) = "white" {}
_NormalsTexture ("Normals", RECT) = "white" {}
}
SubShader {
Pass {
ZTest Always Cull Off ZWrite Off
Fog { Mode off }
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#pragma fragmentoption ARB_precision_hint_fastest
#include "UnityCG.cginc"
uniform samplerRECT _MainTex;
uniform samplerRECT _NormalsTexture;
uniform float4 _MainTex_TexelSize;
struct v2f {
float4 pos : POSITION;
float2 uv[3] : TEXCOORD0;
};
v2f vert( appdata_img v )
{
v2f o;
o.pos = mul (glstate.matrix.mvp, v.vertex);
float2 uv = MultiplyUV( glstate.matrix.texture[0], v.texcoord );
o.uv[0] = uv;
o.uv[1] = uv + float2(-_MainTex_TexelSize.x, -_MainTex_TexelSize.y);
o.uv[2] = uv + float2(+_MainTex_TexelSize.x, -_MainTex_TexelSize.y);
return o;
}
half4 frag (v2f i) : COLOR
{
half4 original = texRECT(_MainTex, i.uv[0]);
// three samples from normals+depth buffer
half4 normalD1 = texRECT(_NormalsTexture, i.uv[0]);
half4 normalD2 = texRECT(_NormalsTexture, i.uv[1]);
half4 normalD3 = texRECT(_NormalsTexture, i.uv[2]);
// normals filter
half3 n1 = normalD1.rgb*2-1;
half3 n2 = normalD2.rgb*2-1;
half3 n3 = normalD3.rgb*2-1;
half2 ndiff;
ndiff.x = dot( n1, n2 );
ndiff.y = dot( n1, n3 );
ndiff -= 0.9;
ndiff = ndiff > half2(0,0) ? half2(1,1) : half2(0,0);
half ndiff1 = ndiff.x * ndiff.y;
original.rgb *= ndiff1;
// depth filter
float2 zdiff;
zdiff.x = normalD1.a - normalD2.a;
zdiff.y = normalD1.a - normalD3.a;
zdiff = abs( zdiff ) - 0.05;
zdiff = zdiff > half2(0,0) ? half2(0,0) : half2(1,1);
original *= zdiff.x*zdiff.y;
return original;
}
ENDCG
}
}
Fallback off
}
相关文章推荐
- 卡通渲染效果shard-2
- 卡通渲染效果脚本
- 着色器和效果——2.5 样例应用程序:卡通渲染(上)
- 着色器和效果——2.5 样例应用程序:卡通渲染(下)
- 【Unity3d脚本】卡通渲染效果脚本
- 崩坏3》画面效果为何惊艳?看米哈游怎么做卡通渲染的你就明白了
- 日式卡通渲染的效果的unity实现
- 【Shader】用一张渐变图实现卡通渲染效果
- 【卡通渲染】关于CG中的2D风格化
- Unity游戏图形渲染效果系列之阴影篇(二)
- css中的像素在iphone6 plus与iphone6渲染的不同效果
- Unity卡通渲染之描边处理
- Vertex Shader 支持的卡通描边渲染
- 在C#中应用MapObjects(渲染效果)
- 【游戏渲染】unity海边波浪效果的实现
- 卡通渲染的一点心得
- [导入]卡通渲染的另类勾边方法 (续)
- 卡通渲染进展(一)
- 给图片按钮等增加渲染的效果
- 卡通效果,没有使用Shader