首页 > 其他分享 >Unity描边的几种方式

Unity描边的几种方式

时间:2022-11-09 17:55:20浏览次数:75  
标签:渲染 几种 Unity 描边 Pass 像素 Ref 模板

参考:在shader中实现五种描边方法

从描边方式上来讲,大体可分为两种,一种是对着原模型往外扩大挤出,然后通过某种方式裁剪掉与原模型重合的地方,来实现描边。另一种则是通过算法算出一张图片里,

那些地方是边缘。

 

1.背面渲染法

需要2个渲染通道:

其实就是把下面的模板测试换成了剔除操作。正常渲染的时候剔除背面渲染正面,第二次顶点扩张之后剔除正面渲染背面,这样渲染背面时由于顶点外扩的那一部分就将被我们所看见,而原来的部分则由于是背面且不透明所以不会被看见,形成轮廓线渲染原理。因此从原理上也能看出,这里得到的轮廓线不单单是外轮廓线。

 

2.模板测试法

参考:unity-shader模板测试-描边

参考:unity 描边之stencil篇

需要2个渲染通道:

第一个渲染通道,正常渲染,同时开启模板测试,把每个片元的参考值 Ref 都设置为1,Comp Always 总是通过模板测试, 并且 Pass Replace (不写的话默认是 Pass Keep),即把当前对象所渲染区域的所有像素都用Ref值写入模板缓冲。

Stencil
            {
                Ref 1
                Comp Always
                Pass Replace
            }       

第二个通道,把模型往顶点法线方向往外扩一定距离(描边的宽度),在这个Pass中,我们同样把每个片元的参考值 Ref 都设置为1,Comp NotEqual 即只有当前参考值 Ref 和当前模板缓冲区的值不相等的时候才去渲染片元。也就是说,最终只会渲染出模型挤出后并裁剪掉原来模型的部分。即Pass2的渲染区域与Pass1渲染区域的一个补集。

Stencil
            {
                Ref 1
                Comp NotEqual
            }       

 

3.边缘检测法

这种方法其实是用屏幕后处理效果去实现的(也就是基于图像处理)。

屏幕后处理,通常指的是在渲染完整个场景得到屏幕图像后再对这个图像进行一系列操作实现各种特效。这里实现的原理其实是使用特定的材质去渲染一个可以刚好填充整个屏幕的四边形面片。

而边缘检测的原理其实就是用一个特定的卷积核去对一张图像卷积,得到梯度值,再根据梯度值的大小去判断是否为边界。

可以理解为对整张图片逐个像素进行判断,判断每个像素周围的像素,如果符合条件,那就说明该像素是处于边缘的像素

 

 

4.基于观察角度表面法线法

 

 

5.SDF法

 

标签:渲染,几种,Unity,描边,Pass,像素,Ref,模板
From: https://www.cnblogs.com/jeason1997/p/16874657.html

相关文章

  • ASP.NET Core 中间件的几种实现方式
    原文网址:https://article.itxueyuan.com/56jL59匿名函数通常新建一个空的ASP.NETCoreWebApplication,项目名字无所谓啦在启动类里可以看到这么一句://Startup.cs......
  • Unity版本使用情况统计(更新至2022年10月)
    本期UWA发布的内容是第11期Unity版本使用统计,周期为2022年5月至2022年10月,数据来源于UWA网站(www.uwa4d.com)提测的项目。希望给Unity开发者一个行业参考,了解近半年来哪些Uni......
  • MvvmLight的接班人CommunityToolkit.Mvvm包使用介绍
    前面在一家军工类企业上班,公司没有网。最近在需要使用MVVM框架的时候才发现MvvmLight作者宣布停止更新了,有点可惜。微软出了一个CommunityToolkit.Mvvm包来接MvvmLight的......
  • unity3D. 移动的几种方式和区别
    Transform 放在Update中transform.Translate();----------------------------------------------------------------------------Rigidbody.物理放在FixedUpdate中......
  • opencv筛选轮廓的几种方法总结
    在使用opencv处理图像的时候,在获取ROI区域这一步用的最多的就是找到指定区域,一般是根据轮廓提取,我们可以通过opencv中的findContours()函数来查找图片中的轮廓,但是会发现找......
  • unity游戏开发随记
    今天做一个scrollview下面list的动画,效果大概是:从右侧一个接一个滑倒左侧。因为父节点是用VerticalLayoutGroup做的所以我一开始想的是,scrollview获取子节点列表,然后传......
  • 【node专题】node几种调试方式
    【node专题】node几种调试方式前端工作日2021-11-24223点击上方【前端工作日】关注我哦~node项目调试和我们写web界面的调试基本是一致的,本质都是在某个地方查......
  • 水平和垂直居中的几种方式
    行内元素实现水平垂直居中:text-align:center;(text-align:center只能实现文本的垂直居中)line-height:50px;(line-height不能实现多行文本的垂直居中)padding:50px;(不固......
  • 拓端数据tecdat|R语言时间序列平稳性几种单位根检验(ADF,KPSS,PP)及比较分析
     时间序列模型根据研究对象是否随机分为确定性模型和随机性模型两大类。随机时间序列模型即是指仅用它的过去值及随机扰动项所建立起来的模型,建立具体的模型,需解决如下三......
  • 2018之后的Unity3d制作AR教程
    自2017.4以后的unity版本,AR的SDK已经被集成,那么如何用2018unity3d制作AR呢?1.首先打开Unity3d2018,然后打开File->BuildingSetting,接着打开PlayerSetting,找到XRSetting......