Shader显示模型外轮廓线

简介: Shader显示模型外轮廓线

前言:每日记录自己学习Shader的心得和体会,小弟才疏学浅,如有错误的地方,欢迎大佬们指正,感谢~


image.png

shader代码

Shader "WCL/Wireframe" {

Properties {

       _Color("Color",Color)=(1.0,1.0,1.0,1.0)

       _EdgeColor("Edge Color",Color)=(1.0,1.0,1.0,1.0)

       _Width("Width",Range(0,1))=0.2

   }

SubShader {

   Tags {  

   "Queue"="Transparent"  

   "IgnoreProjector"="True"  

   "RenderType"="Transparent"  

   }

   Blend SrcAlpha OneMinusSrcAlpha

   LOD 200

   Cull Front

   zWrite off

   Pass {

   CGPROGRAM

   #pragma vertex vert

   #pragma fragment frag

   #pragma target 3.0

   #include "UnityCG.cginc"

   struct a2v {

       half4 uv : TEXCOORD0 ;

       half4 vertex : POSITION ;

   };

   struct v2f{

       half4 pos : SV_POSITION ;

       half4 uv : TEXCOORD0  ;            

   };

   fixed4 _Color;

   fixed4 _EdgeColor;

   float _Width;

 

   v2f vert(a2v v)

   {

       v2f o;

       o.uv = v.uv;

       o.pos=UnityObjectToClipPos(v.vertex);

       return o;

   }

   fixed4 frag(v2f i) : COLOR

   {

       fixed4 col;

       float lx = step(_Width, i.uv.x);

       float ly = step(_Width, i.uv.y);

       float hx = step(i.uv.x, 1.0 - _Width);

       float hy = step(i.uv.y, 1.0 - _Width);

       col = lerp(_EdgeColor, _Color, lx*ly*hx*hy);

       return col;

   }

   ENDCG

   }

   Blend SrcAlpha OneMinusSrcAlpha

   LOD 200  

   Cull Back

   zWrite off

   Pass {

   CGPROGRAM

   #pragma vertex vert

   #pragma fragment frag

   #pragma target 3.0

   #include "UnityCG.cginc"

   struct a2v {

       half4 uv : TEXCOORD0 ;

       half4 vertex : POSITION ;

   };

   struct v2f{

       half4 pos : SV_POSITION ;

       half4 uv : TEXCOORD0  ;            

   };

   fixed4 _Color;

   fixed4 _EdgeColor;

   float _Width;

 

   v2f vert(a2v v)

   {

       v2f o;

       o.uv = v.uv;

       o.pos=UnityObjectToClipPos(v.vertex);

       return o;

   }

   fixed4 frag(v2f i) : COLOR

   {

       fixed4 col;

       float lx = step(_Width, i.uv.x);

       float ly = step(_Width, i.uv.y);

       float hx = step(i.uv.x, 1.0 - _Width);

       float hy = step(i.uv.y, 1.0 - _Width);

       col = lerp(_EdgeColor, _Color, lx*ly*hx*hy);

       return col;

   }

   ENDCG

   }

}  

   FallBack "Diffuse"

}


相关文章
|
编解码 开发框架 Java
Unity 之 打包参数 -- Player面板属性详解
Unity Project Setting Player面板详解,看完这篇文章,彻底搞懂各个选项设置实际作用。
3306 0
Unity 之 打包参数 -- Player面板属性详解
|
算法 前端开发 Java
【开发规范系列】(二):Java后台开发规范
【开发规范系列】(二):Java后台开发规范
|
图形学 Android开发 容器
解锁爬坑新技能:FairyGUI在Unity中遇见的问题
众所周知,人生是一个漫长的流程,不断克服困难,不断反思前进的过程。在这个过程中会产生很多对于人生的质疑和思考,于是我决定将自己的思考,经验和故事全部分享出来,以此寻找共鸣!!!
1298 0
|
Java 应用服务中间件 Linux
解决Tomcat启动闪退问题的详细指南
解决Tomcat启动闪退问题的详细指南
conda和pip指定镜像源下载
conda和pip指定镜像源下载
1347 1
|
算法 图形学
【推荐100个unity插件之4】OpenFracture插件实现unity3d物体破裂和切割
【推荐100个unity插件之4】OpenFracture插件实现unity3d物体破裂和切割
486 0
|
缓存 图形学 异构计算
【#Unity Shader#Amplify Shader Editor(ASE)_第二篇】
【#Unity Shader#Amplify Shader Editor(ASE)_第二篇】
|
SQL 安全 Linux
搭建网络安全靶场环境
搭建靶场环境 我们将通过Docker来搭建靶场 首先我们需要下载Centos7来安装Docker,下载链接https://mirrors.ustc.edu.cn/centos/7.9.2009/isos/x86_64/CentOS-7-x86_64-DVD-2009.iso 下载完成后创建虚拟机 版本选择centos7(64位)
1531 0
搭建网络安全靶场环境
|
Ubuntu Windows
【18.04Ubuntu中解决无法识别显示屏】
【18.04Ubuntu中解决无法识别显示屏】
3209 0