基本原理:被遮挡的部分关闭深度写入, 显示透明效果;未被遮挡的部分不关闭深度测试,显示正常贴图效果,即使用两个Pass即可。

Pass1:关闭深度写入(ZWrite Off),深度测试渲染较远的物体,即模型被物体遮挡的部分(ztest greater)。

Pass2:开启深度写入,正常渲染。

 Shader "xj/Character/Normal" {
Properties {
_Color ("Main Color", Color) = (,,,)
_MainTex ("Base (RGB) Trans (A)", 2D) = "white" {}
_intensity ("Intensity", float ) = 1.0 _RimColor("RimColor",Color) = (,,,)
_RimPower ("Rim Power", Range(0.1,8.0)) = 1.0
} SubShader
{
LOD
Tags { "Queue" = "Geometry+500" "RenderType"="Opaque" }
Pass
{
Blend SrcAlpha One
ZWrite off
Lighting off ztest greater CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc" float4 _RimColor;
float _RimPower; struct appdata_t {
float4 vertex : POSITION;
float2 texcoord : TEXCOORD0;
float4 color:COLOR;
float4 normal:NORMAL;
}; struct v2f {
float4 pos : SV_POSITION;
float4 color:COLOR;
} ;
v2f vert (appdata_t v)
{
v2f o;
o.pos = mul(UNITY_MATRIX_MVP,v.vertex);
float3 viewDir = normalize(ObjSpaceViewDir(v.vertex));
//视线与法线垂直的部分(点乘为0)即是外轮廓,加重描绘
float rim = - saturate(dot(viewDir,v.normal ));
o.color = _RimColor*pow(rim,_RimPower);
return o;
}
float4 frag (v2f i) : COLOR
{
return i.color;
}
ENDCG
}
Pass {
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#pragma fragmentoption ARB_precision_hint_fastest #include "UnityCG.cginc" struct appdata_t {
float4 vertex : POSITION;
half2 texcoord : TEXCOORD0;
}; struct v2f {
float4 vertex : SV_POSITION;
half2 texcoord : TEXCOORD0;
}; sampler2D _MainTex;
fixed4 _Color;
fixed _intensity; v2f vert (appdata_t v)
{
v2f o;
o.vertex = mul(UNITY_MATRIX_MVP,v.vertex);
o.texcoord = v.texcoord;
return o;
} fixed4 frag (v2f i) : SV_Target
{
fixed4 col = tex2D(_MainTex, i.texcoord) * _Color * _intensity;
return col;
}
ENDCG
}
}
}

最新文章

  1. AC日记——C’s problem(c) TYVJ P4746 (清北学堂2017冬令营入学测试第三题)
  2. python模块名和文件名冲突解决
  3. 【poj2226】 Muddy Fields
  4. php数组操作,删除第一个和最后一个元素
  5. 幻灯slider
  6. RabbitMQ安装和配置
  7. 菜鸟级springmvc+spring+mybatis整合开发用户登录功能(下)
  8. 使用 CodeIgniter 框架快速开发 PHP 应用(四)
  9. SQL联表查询
  10. smtplib 报错501
  11. 2018-2019-2 20165234 《网络对抗技术》 Exp3 免杀原理与实践
  12. 最短路径---dijkstra算法模板
  13. python基础(数组)
  14. 「SCOI2016」美味 解题报告
  15. Intellij IDEA注册激活破解
  16. Win下更新pip出现OSError:[WinError17]与PerrmissionError:[WinError5]及解决
  17. taro 项目、代码说明
  18. php统计中英文混合的文章字数
  19. axios构建缓存池存储基础数据
  20. Android ContentProvider、ContentResolver和ContentObserver的使用

热门文章

  1. can总线实现stm32的IAP
  2. fdisk命令详解
  3. API验证
  4. iOS 静态库 与 demo 联合调试
  5. 20145214《网络对抗》MAL_后门原理与实践
  6. class 3 求数组中的最大值(单元测试)
  7. 软工实践-Beta 冲刺 (3/7)
  8. java的小学生四则运算
  9. react 组件构建设计
  10. matlab for 运算的提速