Unity Shader 实现描边OutLine效果

2023-11-05

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的片段不会被深度剔除。

运行效果图:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Unity Shader 实现描边OutLine效果 的相关文章

  • unity 渲染流水线

    渲染流水线 主要分为应用阶段 几何阶段 光栅化阶段 应用阶段 这一阶段最重要的输出是渲染所需的几何信息 即渲染图元 几何阶段 重要任务就是把顶点坐标变换到屏幕空间 通过对输入的渲染图元进行多次处理后 输出屏幕空间的二维顶点坐标 每个顶点对应
  • Unity Shader数学基础——矩阵

    矩阵的定义 由m n个数a 排成的m行n列的数表称为m行n列的矩阵 简称m n矩阵 记作 这m n个数称为矩阵A的元素 简称为元 数a位于矩阵A的第i行第j列 称为矩阵A的 i j 元 以数a为 i j 元的矩阵可记为 a 或 a m n
  • Unity UGUI 添加 Material(材质)

    在给 UGUI 添加 Material 时 如果 Material 中的 Shader 不做特殊处理的话 那么此组件将会变成纯黑色 如果需要添加 Material 则需要在 Shader 中做 UGUI 专门的处理 Properties U
  • Unity Shader 学习 004-Shader 调试 平台差异性 第三方调试工具

    文章目录 学习时间 学习产出 1 调试Shader 1 1 我们打开FrameDebug窗口 1 2 通过FrameDebug窗口查看我们shader渲染目标的状态 2 平台差异性 2 1 抗锯齿 2 2 DX平台定义变量更严格 3 第三方
  • 3.Unity Shader 基础

    目录 一对好兄弟 材质和Unity Shader Unity中shader ShaerLab Unity Shader 的结构 1 创建 2 Properties 3 SubShader 状态设置 RenderSetup SubShader
  • unity渲染队列render quaue

    本文转载自http blog csdn net candycat1992 article details 37345251 本系列主要参考 Unity Shaders and Effects Cookbook 一书 感谢原书作者 同时会加上
  • Unity Shader 实现描边OutLine效果

    Shader实现描边流程大致为 对模型进行2遍 2个pass 绘制 第一遍 描边pass 在vertex shader中对模型沿顶点法线方向放大 fragment shader设置输出颜色为描边颜色 第二遍正常绘制模型 除被放大的部分外 其
  • Unity Shader入门精要文章目录

    前言 从今天开始 我将每天开始学习一些有关于Shader的知识 并把所学到的知识简化 写成文章来供大家参考或者学习 一方面是为了巩固知识 另一方面是我也没有找到什么系统的文章来学习Shader的知识 我的Shader学习大部分是参考了Uni
  • Unity 云雾shader

    先上效果图 Shader Demo MainCloud Properties LightIntensity 光照强度 Range 0 75 1 1 MainColor MainCol Color 0 6 0 6 0 6 1 MainTex
  • Unity中Cg的基本语法和使用

    Cg是类似于C语言的发展起来的图形编程语言 Cgraphics 它的很多表达式if else 和C语言非常相像 也和C 非常相像 由于Shader是写给显卡执行的 所以没有输出语句来调试 很多地方调试不了 只能靠Unity编辑器来帮我们报错
  • Unity Shader初学——《Unity Shader入门摘要》

    由于项目需要加上本人兴趣 所以开始学习shader相关知识 主要参考冯乐乐的 Unity Shader入门摘要 作者的博客在此 https blog csdn net candycat1992 作者的个人网站 http candycat19
  • Shader中的一些专业用语的解释

    Shader中的一些专业用语的解释 此文章收录于我主页顶置的 Unity Shader入门精要文章目录 点击即可跳转 一 什么是OPenGL DirectX 简单的来说 就是图像应用编程的接口 这些接口用语渲染二维和三维的图形 架起了上层应
  • Unity shader 笔记之迷雾效果

    先看效果图 Shader Unlit FogOfWar Properties MainTex Texture 2D white CGINCLUDE include UnityCG cginc struct appdata float4 ve
  • unityShader之固定渲染管线

    固定渲染管线功能较单一 能实现的效果不多 基本快要被淘汰了 老式的机器上还能用一用 附上几个脚本示例简单说明一下 shader likang king01 properties Color MainColor color 0 0 0 1 固
  • unityShader物体表面流光效果

    本文转载自http blog csdn net lyh916 article details 51831720 参考链接 http liweizhaolili blog 163 com blog static 162307442012726
  • Unity_Shader高级篇_16_Unity Shader入门精要_减少计算复杂度

    16 8 减少计算复杂度 16 8 1 Shader的LOD技术 和16 5 2提到的模型的LOD技术类似 Shader的LOD技术可以控制使用的Shader等级 它的原理是 只有Shader的LOD值小于某个设定的值 这个Shader才会
  • (五)unity shader基础之——————学习shader所需的数学基础:下篇(坐标空间:模型空间、世界空间、观察空间、裁剪空间、屏幕空间、法线变换等)

    一 坐标空间 上篇文章讲述了如何使用矩阵来表示基本的变换 如平移 旋转和缩放 在本节我们将关注如何使用这些变换来对坐标空间进行变换 渲染游戏的过程可以理解成是把一个个顶点经过层层处理最终转换为屏幕上的过程 本节我们就将学习这个转换过程是如何
  • Unity3D关于ComputeShader

    由于最近在实验中需要大量循环计算产生网格 所以可能需要GPU的加速 对于compute shader学习下 可能对于做GPU加速有帮助 以下补充修改了转载文章的内容 原文链接 https blog csdn net csharpupdown
  • unity透明shader

    Shader Custom AlphaSelfIllum Properties Color Main Color Color 1 1 1 0 SpecColor Spec Color Color 1 1 1 1 Emission Emmis
  • Unity Shader之——UV旋转动画

    Unity中通过Shader实现UV旋转动画 实现一个旋转效果 并且可以控制速度 方法是 以纹理中心为旋转中心 直接上代码如下 Shader Custom Simple Properties Color Color Color 1 1 1

随机推荐

  • js断点和调试学习总结3

    使用Chrome调试JavaScript的断点设置和调试技巧 你是怎么调试 JavaScript 程序的 最原始的方法是用 alert 在页面上打印内容 稍微改进一点的方 法是用 console log 在 JavaScript 控制台上输
  • 插入方法(Insert Methods)

    进入MongoDB中文手册 4 2版本 目录 MongoDB提供了以下将文档插入到集合中的方法 方法 说明 db collection insertOne 将单个文档插入集合中 db collection insertMany 将多个 文档
  • 单元测试时间机器

    没有单元测试 您怎么称呼重构 任何人 是 这是一个技巧问题 不是吗 没有单元测试的重构不称为重构 这称为更改代码 甚至可以称其为破坏代码 随手添加测试 当您需要更改未经测试的代码时 添加单元测试很有用 您实际上可以添加两种类型 一个明显的用
  • STM32全国研讨会:且看Python 和OpenMV如何在 STM32 MCU上运行AI 2020-09-15 07:10 预计 24 分钟读完

    What is the state of machine learning at the edge today What tools can help engineers collect data and run inferences Wh
  • Rust学习笔记(三)——注释

    Rust学习笔记 三 注释 单行注释 多行注释 和大多数高级语言一样 Rust同样支持单行注释和多行注释 单行注释 单行注释是 或 开头的注释内容 Rust会将 或 到其后的第一个换行符之间的内容作为注释内容 所不同的是 以三个反斜杠 开头
  • 【安装教程】夜神模拟器+抓包工具mitmproxy

    夜神模拟器官网下载 应用商城搜索 小红书 下载软件即可 python 安装 mitmproxy 1 安装Microsoft Visual buildtools 链接 https pan baidu com s 1GyLNOOydBoOtNB
  • class from quick

    原文链接 http www jianshu com p 9587fffc7d8f 创建一个类 lua 定义名为 Shape 的基础类 local Shape class Shape ctor 是类的构造函数 在调用 Shape new 创建
  • OGG流媒体文件格式分析

    摘自 http www studa net yingyong 080505 16283240 html 摘 要 流媒体文件格式在流媒体系统中占有重要地位 设计合理的文件格式是提高流媒体服务器工作效率最直接和最有效的办法 该文在剖析常用流媒体
  • mac笔记本怎么外接显示屏_苹果MAC笔记本怎么外接显示屏

    苹果MAC笔记本外接显示器设置方法 步骤 1 如果要在 Mac 上外接显示器的话 首先是要考虑采用什么样的接口 一般我们是通过 VGA 或 HDMI 来外接显示器的 如果 Mac 电脑上没有可以外接显示器的 VGA 或 HDMI 接口的话
  • Anoconda安装open3d

    非虚拟环境安装需指定 user选项 pip install user open3d
  • 恐怖谷效应

    恐怖谷效应 Uncanny Valley 是仿真机器人领域中的一个理论 是指一个机器人的外貌或行为越来越逼真的过程中 观察者的心态会从认同到不适 再到认同这样一种现象 数学上X轴为接近度 Y轴为亲近感 则会出现一段山谷曲线 所以命名为恐怖谷
  • Nmap的介绍、安装 并进行网络扫描

    Nmap概述 Nmap Network Mapper 网络映射器 是一个网络连接端扫描软件 用来扫描网上电脑开放的网络连接端 确定哪些服务运行在哪些连接端 并且推断计算机运行哪个操作系统 这是亦称 fingerprinting 它是网络管理
  • K-means聚类算法的三种改进(K-means++,ISODATA,Kernel K-means)介绍与对比

    原文 http www cnblogs com yixuan xu p 6272208 html K means聚类算法的三种改进 K means ISODATA Kernel K means 介绍与对比 一 概述 在本篇文章中将对四种聚类
  • 独立服务器的优点

    独立服务器有哪些优势 独立服务器的优势 1 稳定性好 一个人独享 拥有专业技术人员维护 2 独立服务器支持自动更新系统 自主设置安全策略以及系统环境是独立的 因此更加安全可靠 2 独立服务器操作系统中的http ftp ssh都是独立的 供
  • 判断两个List<Map>是否相同以及其他类操作

    根据自身的业务 搞了个list 是否相等的方法 较笨拙 有更好的方法 欢迎各位大佬指教 仅根据自身业务编写 如需改动请自便 改动也好改动 注释很详细 import com google common collect Maps import
  • [非线性控制理论]1_Lyapunov直接方法

    非线性控制理论 1 Lyapunov直接方法 非线性控制理论 2 不变性原理 非线性控制理论 3 基础反馈稳定控制器设计 非线性控制理论 4 反馈线性化 反步法 非线性控制理论 5 自适应控制器 Adaptive controller 非线
  • 【Python】Python可变参数*args **kwargs

    可变参数 args 和 kwargs 作为函数定义时 收集未匹配参数组成tuple或dict对象 参数也就是 args收集所有未匹配的位置参数组成一个tuple对象 局部变量args指向此tuple对象 参数也就是 kwargs收集所有未匹
  • 巧用异频测量快速评估友商4G网络覆盖

    摘 要 通过在联通4G网络异频测量配置数据中增加友商使用的4G网络频点 让联通现网中使用全网通的用户上报的测量报告数据 MR 包含有友商频点的测量信息 再对测量报告数据 MR 进行统计分析 可以实现快速 高效的对友商4G网络的覆盖进行全面评
  • 电流检测总结

    电流检测总结 电流检测是工业上常用到的一门技术 平常工作也经常与之打交道 因为我是小白 所以今天打算对它做一个简单的总结 防止遗忘 对于被检测的电路 一般使用阻值很小的采样电阻串联在电路中进行采样 然后检测这个采样电阻两端的电压信号 Vin
  • Unity Shader 实现描边OutLine效果

    Shader实现描边流程大致为 对模型进行2遍 2个pass 绘制 第一遍 描边pass 在vertex shader中对模型沿顶点法线方向放大 fragment shader设置输出颜色为描边颜色 第二遍正常绘制模型 除被放大的部分外 其