在《Real Time Rendering, third edition》一书中,作者把轮廓线的实现方法分成5种类型基于观察角度和表面法线的轮廓线渲染过程式几何轮廓线渲染,使用两个Pass渲染基于图像处理的轮廓线渲染(屏幕后处理)基于轮廓检测的轮廓线渲染混合了上述的几种渲染方法基于观察角度和表面法线的轮廓线渲染原理:法线和视线垂直的地方认为是边缘,这种方法和实现边缘光类似,可以参考这篇文章,Sh
效果:绘制物体的外轮廓(不是所有的,只是最外围的),比如LOL中选中塔的效果:       这部分知识在ShaderLab开发实战详解有详细的说明,不过我做了修改,用另一种更简单的方法解决了在不写深度的情况下,被遮挡的问题。       原理:要画2遍,第一遍画稍
转载 2024-02-29 16:46:32
445阅读
参考文章:方法一:对指定Layer层(Outline层)的物体进行处理原理:使用一个只渲染Outline层的摄像机进行渲染,将渲染结果存入临时渲染纹理rt,再利用Graphics.Blit(rt, destination, targetMat, 0); 函数使用targetMat材质的shader的第一个Pass进行渲染,即对Outline层的物体进行边缘检测,然后将被认定为边缘的屏幕像素点替
转载 2024-05-07 08:16:04
1420阅读
前言在本文中使用的是基于空间的3D模型的,着手于1条的2个邻接面,即退化四形进行边缘检测和绘制。本文读者默认为有图形学基础和编写Shader基础,若没有请先去把这些基础学习一下,再来阅读本文,否则可能会有阅读障碍。一、边缘检测算法3D模型有两种方式,一种是基于图像,即在所有3D模型渲染完成一张图片后,对这张图片进行边缘检测,最后得出效果。一种是基于空间,即针对3D模型的三角面三个顶
之前的文章中我们通过两种方式分别实现了效果,他们各有优缺点,也比较简单,今天我们来通过后期处理这种方式来实现效果,相对于之前两种实现方式要稍微复杂一点。后期处理的最终效果图如下:实现大致思路:首先我们添加一个额外的摄像机用来专门渲染需要的对象,通过设置摄像机的LayerMask即可,然后将摄像机的Render Target设置为我们设定好的一张Render Texture上,设置如
转载 2024-03-18 08:54:41
1798阅读
说道卡通渲染,应该都会想到: 我所学的有三种: 一种是计算边缘深度检测 一种是色差检测 一种是利用顶点法线向外扩展返回单色pass,使用正面裁剪 我用的第三种:pass { //剔除前面 (朝向摄像机的面)保留内部渲染 Cull Front CGPROGRAM #pragma fragment frag float4 _LineColor; float _
  最近遇到了一个非常奇葩的需求:半透明文本,并且要有。这简直就是简直了,然后美术小姐姐还说了一句:不就是加个么?我们一众程序员竟然无言以对,我内心:大姐,这是Unity,不是PS啊0.0  没办法,做不出来只能开始研究。那么为什么透明物体的如此难实现呢,我来分析一下。一、Unity自带的  首先来看Unity自带的,把参数调大就会发现,只是在四个方向多显示了几份。透明物体肯定
转载 2024-02-21 11:54:45
1481阅读
Unity自带的Outline 效率实在太差。 找了 基于Shader实现的UGUI解决方案效果还不错,overdraw和顶点数都不高。 不过方案有2个问题,自己尝试调整了一下, 代码放在这以供参考吧。(注:把ui存储prefab,运行时动态挂到一个canvas上, 这个canvas 如果 additionalShaderChannels 不会自动添加那几个, 主canva
转载 2024-05-21 11:21:43
1421阅读
前言1、前段时间工作,需要给模型,由于对Shader不熟悉,就直接网上找了Shader文件,无奈项目发布环境是WebGL,WebGL对Shader的需求比较特殊,故无法使用。2、因为项目需要的物体并不多,所以萌生出,动态生成整个模型所有的(线条),给各个附上需要的材质球即可。(当然,也可以直接请美术在模型上,但这样不能实现泛光之类的效果)3、现写下三种实现模型的方法,方便日
转载 2024-02-12 07:56:43
452阅读
按照惯例,先上图: 效果分析整体上效果在模型外包围,且永远在模型后面边缘噪波两层思路分析效果上与模型渲染相对分离,且要控制附魔效果的出现与消失,初步思路使用双Pass对卡通模型和附魔效果分别渲染。之前的卡通渲染shader可以直接使用UsePass进行复用由于之前使用的ToonLit shader是表面着色器,如下图,我保留了前向渲染(forward)与延迟渲染(de
UGUI的文本如果当前渲染的像素Alpha>0,那么这个像素肯定是文字本身的像素。 如果当前渲染的像素Alpha<=0,那么这个像素肯定不是文字本身的像素。当渲染像素 2 的时候,会采样到像素 1//如果想要效果更佳平滑的话,升采样的像素点可以扩大到12或者更高,但是会带来更高的性能消耗 static const half2 UpSamplePixelCoord[8] = {
转载 2024-08-15 14:10:41
103阅读
文章目录前言个人介绍一、准备工作1. unity下载安装2. 个人许可证激活3. 素材下载二、项目准备1. 项目创建2. 素材导入三、开始项目1. 将素材变为精灵2. 将精灵放在游戏里3. 粒子效果4. 给Demo添加背景音效5. 淡入淡出6. 流程控制四、项目打包五、完成结语 前言在小时候我的梦想就是开发一款自己的游戏而因为小时候看小说,所以对vr游戏也是极其的感兴趣后来接触了IT才发现不同的
这也是个常见的shader,可以实现类似动漫《枪之国度》的那种轮廓边卡通画风。在我手头的项目里用来给怪物加“霸体”效果,所谓霸体意思是怪物此时无法被击倒。用途诸如此类。下面放效果图:原谅我在Asset Store里找了半天最后找到这么个丑陋的模型,不过刚好它不是很精细,很好的暴露出了缺点,模型表面法向量突变(也就是不光滑)的地方会断掉。这个shader用在cube上时这个问题会更清晰的突显出
unity-shader模板测试,效果,常用于 rpg 项目中 主角 被遮挡的情况,将被遮挡的部分的轮廓绘制出来,这样可以在任何情况都能知道 主角 在哪里。(还有另外一种就是使用 X光 效果,但这种效果不需要用到模板测试,所以这里用 效果 举栗子)效果思路实现这种效果需要两个pass正常绘制,即深度测试 LEqual,正常遮挡,同时往 模板缓冲区 写入一个 参考值 Ref=1(即使深度
文章目录镂空/遮罩镂空Masker shader:再看看Be Masked被镂空的shader:注意绘制顺序的问题运行效果遮罩看看Be Masked被遮罩的shader:运行效果看一下绘制顺序的问题思路整体效果运行效果有透视的无透视的便于理解模板缓存的伪代码上面的伪代码的验证的地方ProjectReferences 关于Unity的模板测试介绍,可查看之前翻译的一篇: Unity
创建物体以及对物体上色了解Unity主界面大致了解界面布局 (以我的界面为例)Scene View 场景视图Game View 游戏视图Hierarchy 层级视图Project 项目视图Inspector 检视视图(我觉得称做属性面板没准好懂一些)创建物体在Hierarchy视图里创建物体在Project视图里创建预制体给物体上色在Project视图里创建材质球将材质球附加到物体上Unity界面
我们都知道效果在游戏中很常见,比如选中某个角色时需要凸显该模型,就会采用效果,今天我们就来实现一下该效果。的效果实现方式有很多种,就以目前我知道的就有三种方式。一:模型扩张效果图:大致思路:需要两个pass,一个pass渲染背面并且沿着法线方向扩张,用来作为轮廓,一个pass渲染正面,正常渲染。核心:主要在第一个pass的顶点着色器中对顶点的偏移,偏移方向为法线方向。话不多说直接上代码
之所以叫简易呢,是因为我发现仅这种方法对单个物体还算有用,但细节上达不到我想要的边框选效果(比不上Unity Scene窗口的效果),而且碰到复杂情况,比如多个物体的时候也容易出问题。但网上查了多个方案,都没有能处理好,因此这里仅作为学习过程中的一个记录。 这里用的最简单的方案,顶点位置向法线方向移动一段距离,再转给世界坐标设置所有像素点_OutlineColor色作为底色,通过
在游戏中,我们都喜欢加一些效果,来凸显人物的边缘,提高识别度。美术一般都喜欢加。方式一般有两种,一种的模型边缘,一种的人物的转折点(这种需要用到卷轴)在游戏中比较常用的就是模型边缘了,shader一般是这样Shader "Outline" { //属性 Properties{ _Diffuse("Diffuse", Color) = (1,1,1,1) _Outli
转载 2024-03-15 07:54:05
140阅读
使用alpha混合,实现被遮挡时物体透视。shader代码:Shader "SharedShader/CartoonOccluTransparent"{ Properties { _Color("Main Color", Color) = (1,1,1,1) _MainTex ("Texture", 2D) = "white" {} _OutlineWidth("Outlin...
原创 2021-11-18 16:45:09
1083阅读
  • 1
  • 2
  • 3
  • 4
  • 5