主角场景Shader效果:遮挡透明
2024-08-25 14:22:06
基本原理:被遮挡的部分关闭深度写入, 显示透明效果;未被遮挡的部分不关闭深度测试,显示正常贴图效果,即使用两个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
}
}
}
最新文章
- AC日记——C’s problem(c) TYVJ P4746 (清北学堂2017冬令营入学测试第三题)
- python模块名和文件名冲突解决
- 【poj2226】 Muddy Fields
- php数组操作,删除第一个和最后一个元素
- 幻灯slider
- RabbitMQ安装和配置
- 菜鸟级springmvc+spring+mybatis整合开发用户登录功能(下)
- 使用 CodeIgniter 框架快速开发 PHP 应用(四)
- SQL联表查询
- smtplib 报错501
- 2018-2019-2 20165234 《网络对抗技术》 Exp3 免杀原理与实践
- 最短路径---dijkstra算法模板
- python基础(数组)
- 「SCOI2016」美味 解题报告
- Intellij IDEA注册激活破解
- Win下更新pip出现OSError:[WinError17]与PerrmissionError:[WinError5]及解决
- taro 项目、代码说明
- php统计中英文混合的文章字数
- axios构建缓存池存储基础数据
- Android ContentProvider、ContentResolver和ContentObserver的使用