Shader显示模型外轮廓线

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

}


相关文章
|
3月前
ThreeJs控制模型的隐藏与显示
这篇文章讲解了如何在Three.js中通过代码控制3D模型的显示与隐藏状态。
55 3
ThreeJs控制模型的隐藏与显示
【Unity3D--自由观察模型】模型自动旋转+触屏旋转和缩放
展示3D模型,同时实现模型自动旋转和触屏旋转和缩放
475 0
|
缓存 索引
OpenGL学习笔记(九):索引缓冲器(EBO /IBE)的理解与使用,引入线框/填充模式
OpenGL学习笔记(九):索引缓冲器(EBO /IBE)的理解与使用,引入线框/填充模式
OpenGL学习笔记(九):索引缓冲器(EBO /IBE)的理解与使用,引入线框/填充模式
|
存储
了解OpenGL中的投影方式、存储着色器分类、常见图元连接方式
了解OpenGL中的投影方式、存储着色器分类、常见图元连接方式
250 0
了解OpenGL中的投影方式、存储着色器分类、常见图元连接方式
|
存储 芯片 异构计算
|
图形学
【Unity3D Shader】学习笔记-纹理采样②
前言 上一篇对同一纹理进行多次采样混合,本篇则是通过不同的纹理采样进行混合产生一些效果。 一、简单贴花 贴花简单来说就是在原贴图上面贴上细节贴图,就像墙面上的喷绘一样。下面这个只是最简单的例子,也就是只能在一张图(一个模型)上面贴其他细节。
298 0
【Unity3D Shader】学习笔记-纹理采样②
|
图形学
【Unity3D Shader】学习笔记-纹理采样①
前言 纹理采样属于在片段着色器中进行,通过提供的贴图和uv坐标使用tex2D进行采样。本篇主要介绍对同一纹理多次采样然后进行混合来获得不同的效果。 [声明:本笔记系列文章的图片资源都源自百度图片搜索,如有问题联系我] 一、简单重影 对同一纹理进行两次采样,采样时的UV两次坐标不一样,然后将采样的结果进行取平均得到最终的结果。
584 0
【Unity3D Shader】学习笔记-纹理采样①
|
机器学习/深度学习 JavaScript 前端开发
交互改变参数、360度旋转,这个工具让你不用从头构建NN架构图
目前,NN-SVG 工具支持了全连接神经网络(FCNN)、一类卷积神经网络(CNN)和深度神经网络(DNN)的图构建。
308 0
交互改变参数、360度旋转,这个工具让你不用从头构建NN架构图
|
API Android开发
【Android 内存优化】自定义组件长图组件 ( 获取图像宽高 | 计算解码区域 | 设置图像解码属性 复用 像素格式 | 图像绘制 )
【Android 内存优化】自定义组件长图组件 ( 获取图像宽高 | 计算解码区域 | 设置图像解码属性 复用 像素格式 | 图像绘制 )
179 0
【Android 内存优化】自定义组件长图组件 ( 获取图像宽高 | 计算解码区域 | 设置图像解码属性 复用 像素格式 | 图像绘制 )
|
vr&ar Android开发
【Android 应用开发】Paint 图形组合 Xfermod 之 合成模式表示方法 ( Xfermod 使用步骤 | 透明度 颜色值 公式表示方法 | 老版本表示方法 | 合成区域分块 )
【Android 应用开发】Paint 图形组合 Xfermod 之 合成模式表示方法 ( Xfermod 使用步骤 | 透明度 颜色值 公式表示方法 | 老版本表示方法 | 合成区域分块 )
237 0
【Android 应用开发】Paint 图形组合 Xfermod 之 合成模式表示方法 ( Xfermod 使用步骤 | 透明度 颜色值 公式表示方法 | 老版本表示方法 | 合成区域分块 )

热门文章

最新文章