Unity Shader实现描边OutLine效果
作者:elegentbeauty 时间:2022-01-13 03:11:13
本文实例为大家分享了Unity Shader实现描边OutLine效果的具体代码,供大家参考,具体内容如下
Shader实现描边流程大致为:对模型进行2遍(2个pass)绘制,第一遍(描边pass)在vertex shader中对模型沿顶点法线方向放大,fragment shader设置输出颜色为描边颜色;第二遍正常绘制模型,除被放大的部分外,其余被覆盖,这样就有了描边的效果。
实现代码如下:
Shader "Custom/OutlineShader" {
Properties {
_MainTex ("Albedo (RGB)", 2D) = "white" {}
_OutLineWidth("width", float) = 1.2//定义一个变量
}
SubShader {
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
struct appdata {
float4 vertex:POSITION;
float2 uv:TEXCOORD0;
};
struct v2f
{
float2 uv :TEXCOORD0;
float4 vertex:SV_POSITION;
};
float _OutLineWidth;//设置变量
v2f vert(appdata v)
{
v2f o;
//设置一下xy
//v.vertex.xy *= 1.1;
v.vertex.xy *= _OutLineWidth;//乘上变量
o.vertex = mul(UNITY_MATRIX_MVP, v.vertex);
o.uv = v.uv;
return o;
}
sampler2D _MainTex;
fixed4 frag(v2f i) :SV_Target
{
fixed4 col = tex2D(_MainTex, i.uv);
//return col;
return fixed4(0, 0, 1, 1);
}
ENDCG
}
Pass
{
ZTest Always
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
struct appdata {
float4 vertex:POSITION;
float2 uv:TEXCOORD0;
};
struct v2f
{
float2 uv :TEXCOORD0;
float4 vertex:SV_POSITION;
};
v2f vert(appdata v)
{
v2f o;
o.vertex = mul(UNITY_MATRIX_MVP, v.vertex);
o.uv = v.uv;
return o;
}
sampler2D _MainTex;
fixed4 frag(v2f i) :SV_Target
{
fixed4 col = tex2D(_MainTex, i.uv);
//return fixed4(0, 0, 1, 1);//返回蓝色,因为再次渲染会把第一个颜色覆盖掉
return col;
}
ENDCG
}
}
FallBack "Diffuse"
}
物体被遮挡,仍然需要显示,需要设置描边pass的语句ZTest为Always,深度检测一直通过,这样描边pass的片段不会被深度剔除。
运行效果图:
来源:https://blog.csdn.net/elegentbeauty/article/details/82915299
标签:Unity,Shader,描边
0
投稿
猜你喜欢
简单实现Android应用的启动页
2022-04-15 14:23:45
Java客户端调用.NET的WebService实例
2023-11-03 17:22:00
SpringBoot web静态资源配置详解
2023-09-24 14:13:26
深入HRESULT与Windows Error Codes的区别详解
2023-10-16 15:19:42
Java实现生成n个不重复的随机数
2021-09-16 04:47:07
JNDI简介_动力节点Java学院整理
2023-04-20 03:19:23
Java使用Optional实现优雅避免空指针异常
2023-06-05 15:35:39
Java 实战项目之仓库管理系统的实现流程
2021-10-05 09:14:07
Hadoop+HBase+ZooKeeper分布式集群环境搭建步骤
2022-02-13 01:16:33
Java输入输出流的使用详细介绍
2023-08-01 22:21:22
Android开发之开发者头条(二)实现左滑菜单
2022-02-28 11:18:31
Java过滤器doFilter里chain.doFilter()函数的理解
2023-11-11 14:45:50
【IntelliJ IDEA】Maven构建自己的第一个Java后台的方法
2023-09-24 20:11:16
Java命令设计模式详解
2022-07-14 04:38:31
Android 编程下字库的使用及注意事项
2021-09-23 13:37:59
Java内部类知识汇总
2023-08-18 14:06:54
Android ViewPager实现图片轮翻效果
2023-08-01 00:30:57
Java字符流与字节流区别与用法分析
2023-09-08 07:48:54
java中set接口使用方法详解
2023-03-15 06:10:12
Android微信Tinker热更新详细使用
2021-08-24 01:58:47