描边效果是游戏里面非常常用的一种效果,一般是为了凸显游戏中的某个物体。下面使用Shader实现简单的描边效果。

描边的实现通常有两种方式:一种是将模型顶点沿法线方向扩展一段距离,一种是使用深度偏移。

一、通过法线的延伸

原理:进行两次渲染,第一次剔除正面只渲染背面,把模型顶点沿法线方向延伸一定距离,只显示描边的颜色

第二次渲染剔除背面,只显示正面正常渲染。

Shader "Custom/Stroke"
{Properties{_MainTex("main tex",2D) = ""{}_Factor("factor",Range(0,0.1)) = 0.01     //描边粗细因子_OutLineColor("outline color",Color) = (0,0,0,1)//描边颜色}SubShader{Pass{Cull Front //剔除前面CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"struct v2f{float4 vertex :POSITION;};float _Factor;half4 _OutLineColor;v2f vert(appdata_full v){v2f o;//将顶点沿法线方向向外扩展一下v.vertex.xyz += v.normal * _Factor;o.vertex = UnityObjectToClipPos(v.vertex);return o;}half4 frag(v2f v) :COLOR{//只显示描边的颜色return _OutLineColor;}ENDCG}Pass{Cull Back //剔除后面CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"struct v2f{float4 vertex :POSITION;float4 uv:TEXCOORD0;};sampler2D _MainTex;v2f vert(appdata_full v){v2f o;o.vertex = UnityObjectToClipPos(v.vertex);o.uv = v.texcoord;return o;}half4 frag(v2f v) :COLOR{half4 c = tex2D(_MainTex,v.uv);return c;}ENDCG}}FallBack "Diffuse"
}

二、深度偏移

原理:进行两次渲染,第一次剔除正面只渲染背面,利用Offset指令,进行深度操作。

第二次渲染剔除背面,只显示正面正常渲染。

Offset 深度偏移

Offset   Factor , Units

Factor : 主要影响我们绘制多边形的深度斜率的最大值

Units  : 主要影响的能产生的在窗口坐标系的深度值中可变分辨率差异的最小值。

一般在使用Offset指令中,Units给一个统一值就行,主要起作用的是Factor.,Factor的调整是沿着Z轴方向的,Factor大于0,偏移值就沿着Z轴正方向移动,离屏幕越远。Factor小于0,偏移值就沿着Z轴的负方向,离屏幕近。

Shader "Custom/Stroke2" {Properties{_MainTex("main tex",2D) = ""{}_OutLineColor("outline color",Color) = (0,0,0,1) //描边颜色}/*Offset:深度偏移Offset Factor,UnitsFactor参数表示 Z缩放的最大斜率的值。Units参数表示可分辨的最小深度缓冲区的值。*/SubShader{//描边pass {Cull Front     //剔除正面Offset -5,-1  //深度偏移CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"sampler2D _MainTex;half4 _OutLineColor;struct v2f {float4 pos : SV_POSITION;};v2f vert(appdata_base v) {v2f o;o.pos = UnityObjectToClipPos(v.vertex);return o;}float4 frag(v2f i) : COLOR{return _OutLineColor;}ENDCG}//正常渲染物体pass {Cull Back        //剔除背面CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"sampler2D _MainTex;float4 _MainTex_ST;struct v2f {float4 pos : SV_POSITION;float2 uv : TEXCOORD0;};v2f vert(appdata_base v){v2f o;o.pos = UnityObjectToClipPos(v.vertex);o.uv = TRANSFORM_TEX(v.texcoord, _MainTex);return o;}float4 frag(v2f i) : COLOR    {float4 c = tex2D(_MainTex,i.uv);return c;}ENDCG}}FallBack "Diffuse"
}

效果图:

Shader实现描边相关推荐

  1. URP/LWRP Shader实现描边效果

    2021.1.11 更新: 我觉得我写得比较老了,可以看看下面新整理的文章 LWRP/URP/HDRP中的描边shader:https://zhuanlan.zhihu.com/p/354190065 ...

  2. Unity Sprite2D Outline Shader 图片描边+纯色填充

    2D图片描边,2D图片纯色填充,二合一Shader.支持UGUI UI Mask. Shader "Sprites/SpriteOutline" {Properties{[PerR ...

  3. Unity Shader -描边(后期处理)

    之前的文章中我们通过两种方式分别实现了描边效果,他们各有优缺点,也比较简单,今天我们来通过后期处理这种方式来实现描边效果,相对于之前两种实现方式要稍微复杂一点. 后期处理的描边最终效果图如下: 实现大 ...

  4. Unity 2D图片外轮廓描边和内发光的Shader实现

    很长时间没有写博客了,一方面Sebastian大佬正在更新程序生成星球的教程,所以想等到大佬更新接近尾声的时候开始那个教程的分享.最近主要是在工作之余补一补Unityshader的基础知识,然后正好在 ...

  5. 视频教程-shader 基础之 2D技巧集合-Unity3D

    shader 基础之 2D技巧集合 多年游戏开发经验,曾担任主程,技术美术TA,现在是独立游戏开发者 是帧同步框架: LockstepEngine RayMarch框架: Unity-Raymarch ...

  6. Unity Shader-Command Buffer的使用(景深与描边效果重置版)

    Unity Shader-Command Buffer的使用(景深与描边效果重置版) https://blog.csdn.net/puppet_master/article/details/72669 ...

  7. python写桌宠_【Unity/开源】八重樱桌宠(三):Python自动更新、修复描边

    接下来就到了喜闻乐见的PY环节: defget_html(url):try:headers = { "Host": "github.com","Use ...

  8. Unity Shader - Simple Toon Shading - 简单卡通渲染

    文章目录 最终效果 - Final Effect 无光照,只有纹理与主色调 Shader 加描边 - Outline GIF Shader 添加光影 - RecieveShadow 自身接收阴影 Sh ...

  9. 卡通渲染描边的另一种做法

    在我之前的文章中有一遍的说描边的问题汇总的: https://blog.csdn.net/llsansun/article/details/83744775 这里面也说了一些问题,最典型的问题是描边的 ...

最新文章

  1. Hdu_2063 过山车 -最大匹配(邻接表版)
  2. git commit --amend 改写提交
  3. Cacti 监控网络
  4. C4C和Marketing Cloud的lead以及activity的replication
  5. 细说php这么难懂,挺难懂的解决方法
  6. P4345-[SHOI2015]超能粒子炮·改【Lucas定理,类欧】
  7. 关于FD.io VPP的最新消息
  8. 下 文库 试读_数字资源专题导览 | 科学文库简介
  9. Appium使用教程
  10. Zune vs iPod
  11. 支付宝到账在线生成语音源码
  12. word2016 图片去底灰_Word 2016 可以删除图片背景
  13. 3dmax2014许可证错误20
  14. linux虚拟机对外部sd卡格式化和分区
  15. 古墓丽影暗影显卡测试软件,游戏新消息:战地5古墓丽影暗影8K测试单显卡根本带不动...
  16. 敏捷开发绩效管理之九:阿米巴经营之软件团队经营什么(上)
  17. Webservice-2
  18. 微信公众号(一键互粉)增粉平台的源码分享
  19. 黑盒测试方法——边界值分析法
  20. 俞敏洪微博经典语录:年轻人该如何恋爱

热门文章

  1. 打开microsoft edge 出现搜狗网址导航(Edge浏览器特定页无法修改)
  2. css实现右下角√对号选中样式——基础积累
  3. Jackson:我是最牛掰的 Java JSON 解析器(有点虚)
  4. 学会写企业网络营销方案
  5. Qt之算法:平均数、方差、标准差
  6. 零售商场无线覆盖解决方案
  7. HTML5+CSS3盒布局
  8. Peercast源代码文件结构分析
  9. 01-家居用品词汇(English)
  10. 设置快速的debian源