Shader显示模型外轮廓线

本文涉及的产品
模型在线服务 PAI-EAS,A10/V100等 500元 1个月
模型训练 PAI-DLC,5000CU*H 3个月
交互式建模 PAI-DSW,5000CU*H 3个月
简介: 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"

}


相关文章
|
11月前
layer根据内容动态改变窗口高度
layer根据内容动态改变窗口高度
156 0
|
JSON 前端开发 数据可视化
【图形基础篇】02 # 指令式绘图系统:如何用Canvas绘制层次关系图?
【图形基础篇】02 # 指令式绘图系统:如何用Canvas绘制层次关系图?
178 0
【图形基础篇】02 # 指令式绘图系统:如何用Canvas绘制层次关系图?
|
Java
剪裁NV21任意一部分的代码
剪裁NV21任意一部分的代码
118 0
|
数据可视化 vr&ar C#
Unity学习3,如何显示与隐藏平面检测
首先搭建好基本环境,在AR Session Origin下添加一个AR Plane Manager对象,并添加一个预制体AR Default Plane到AR Plane Manager对象的Plane Prefab属性下(这一部分在Unity配置Android开发环境下有介绍不再记录)Unity配置Android开发环境与第一个Demo
284 0
Unity学习3,如何显示与隐藏平面检测
|
Android开发 异构计算
Android图形显示系统——下层显示4:图层合成上(合成原理与3D合成)
Android显示之图层合成 要点 1.图层合成指综合各个窗口的绘制内容,送往LCD显示的过程。从原理上可分为在线合成与离线合成两种方式。 2.在Android的SurfaceFlinger代码流程中,图层合成方式分3D合成(OpenGL)和硬件合成两大类。 3.图形系统采用垂直同步Vsync机制,由LCD上报vsync,触发图层合成。 图层合成的原理
5941 0
|
缓存 索引
OpenGL学习笔记(九):索引缓冲器(EBO /IBE)的理解与使用,引入线框/填充模式
OpenGL学习笔记(九):索引缓冲器(EBO /IBE)的理解与使用,引入线框/填充模式
OpenGL学习笔记(九):索引缓冲器(EBO /IBE)的理解与使用,引入线框/填充模式
|
计算机视觉
Qt实用技巧:Qt设计器中QIcon的缩放(qss的放大和QIcon自动缩小(无法自动放大))
Qt实用技巧:Qt设计器中QIcon的缩放(qss的放大和QIcon自动缩小(无法自动放大))
Qt实用技巧:Qt设计器中QIcon的缩放(qss的放大和QIcon自动缩小(无法自动放大))
SwiftUI—使用图像视图强大的色彩调整功能
SwiftUI—使用图像视图强大的色彩调整功能
697 0
SwiftUI—使用图像视图强大的色彩调整功能
|
存储
了解OpenGL中的投影方式、存储着色器分类、常见图元连接方式
了解OpenGL中的投影方式、存储着色器分类、常见图元连接方式
232 0
了解OpenGL中的投影方式、存储着色器分类、常见图元连接方式
|
存储 芯片 异构计算