当前位置:网站首页>【Unity Shader】插入Pass实现模型遮挡X光透视效果
【Unity Shader】插入Pass实现模型遮挡X光透视效果
2022-07-07 16:31:00 【InfoQ】
实现效果:
分Pass渲染:
- 透视效果Pass,在渲染的时候使用ZTest Greater,首先渲染的是前面遮挡的Cube,此时深度缓存中有了Cube的深度值。然后再渲染模型,模型未遮挡的部分深度测试不通过,不会渲染,被遮挡的部分深度测试通过,正常显示。
- 正常渲染Pass,首先渲染的是前面遮挡的Cube,此时深度缓存中有了Cube的深度值。然后再渲染模型,模型被遮挡的部分深度测试失败,不会渲染,未被遮挡的部分正常显示。
- ZTest Less:深度小于当前缓存则通过
- ZTest Greater:深度大于当前缓存则通过
- ZTest LEqual:深度小于等于当前缓存则通过
- ZTest GEqual:深度大于等于当前缓存则通过
- ZTest Equal:深度等于当前缓存则通过
- ZTest NotEqual:深度不等于当前缓存则通过
- ZTest Always:不论如何都通过
Shader代码:
//原Pass不变,插入一个Pass,用于显示模型遮挡部分
Shader "Test/Model_XRay"
{
Properties
{
_MainTex ("Diffuse (RGB)", 2D) = "grey" {}
_Color("Color (RGBA)", Color) = (1,1,1,1)
_XRayColor("XRay Color", Color) = (1,1,1,1)
}
SubShader
{
Tags
{
"RenderType"="Opaque"
"Queue"="AlphaTest+1"
"IgnoreProjector"="True"
}
LOD 200
Fog { Mode Off }
//渲染X光透视效果的Pass
Pass
{
Blend SrcAlpha One
ZWrite Off
ZTest Greater
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "Lighting.cginc"
fixed4 _XRayColor;
struct v2f
{
float4 pos : SV_POSITION;
float3 normal : normal;
float3 viewDir : TEXCOORD0;
};
v2f vert (appdata_base v)
{
v2f o;
o.pos = UnityObjectToClipPos(v.vertex);
o.viewDir = ObjSpaceViewDir(v.vertex); //计算顶点到相机的向量
o.normal = v.normal;
return o;
}
fixed4 frag(v2f i) : SV_Target
{
//利用法线跟视线向量的点乘值计算颜色浓度
float3 normal = normalize(i.normal);
float3 viewDir = normalize(i.viewDir);
float rim = 1 - dot(normal, viewDir);
return _XRayColor * rim;
}
ENDCG
}
Pass
{
CGPROGRAM
//定义顶点/片元着色器代码
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
sampler2D _MainTex;
//定义顶点着色器的输入
struct a2v
{
float4 vertex : POSITION;
float2 uv :TEXCOORD0;
};
//定义顶点着色器的输出、片元着色器的输入
struct v2f
{
float4 vertex : SV_POSITION;
float2 uv:TEXCOORD0;
};
v2f vert (a2v v)
{
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
o.uv = v.uv;
return o;
}
fixed4 frag (v2f i) : SV_Target
{
return tex2D(_MainTex,i.uv);
}
ENDCG
}
}
FallBack "Diffuse"
}
边栏推荐
- SD_DATA_SEND_SHIFT_REGISTER
- Debian10 compile and install MySQL
- Mui side navigation anchor positioning JS special effect
- Target detection 1 -- actual operation of Yolo data annotation and script for converting XML to TXT file
- What is agile testing
- 磁盘存储链式的B树与B+树
- [principle and technology of network attack and Defense] Chapter 6: Trojan horse
- Wireshark分析抓包数据*.cap
- 元宇宙带来的创意性改变
- 三仙归洞js小游戏源码
猜你喜欢
Performance test process and plan
三仙归洞js小游戏源码
Improve application security through nonce field of play integrity API
Yarn capacity scheduler (ultra detailed interpretation)
手撕Nacos源码(先撕客户端源码)
Introduction of common API for socket programming and code implementation of socket, select, poll, epoll high concurrency server model
Wireshark分析抓包数据*.cap
科学家首次观察到“电子漩涡” 有助于设计出更高效的电子产品
Use onedns to perfectly solve the optimization problem of office network
Import requirements in batches during Yolo training Txt
随机推荐
Introduction to OTA technology of Internet of things
Interviewer: why is the page too laggy and how to solve it? [test interview question sharing]
Based on pytorch, we use CNN to classify our own data sets
C语言中匿名的最高境界
[demo] circular queue and conditional lock realize the communication between goroutines
Ten thousand words nanny level long article -- offline installation guide for datahub of LinkedIn metadata management platform
JS pull down the curtain JS special effect display layer
Yarn capacity scheduler (ultra detailed interpretation)
Chapter 3 business function development (safe exit)
Backup Alibaba cloud instance OSS browser
线程池和单例模式以及文件操作
zdog. JS rocket turn animation JS special effects
你真的理解粘包与半包吗?3分钟搞懂它
Afghan interim government security forces launched military operations against a hideout of the extremist organization "Islamic state"
AI defeated mankind and designed a better economic mechanism
[trusted computing] Lesson 13: TPM extended authorization and key management
Target detection 1 -- actual operation of Yolo data annotation and script for converting XML to TXT file
Tips of the week 136: unordered containers
Do you really understand sticky bag and half bag? 3 minutes to understand it
Personal best practice demo sharing of enum + validation