Shader
Unity小林
unity使我快乐。
展开
-
Shader 锥形扫描遮挡效果
效果图如下:新建shader,代码如下:Shader "Unlit/ConeScan"{ Properties { _MainTex ("Texture", 2D) = "white" {} _Color("Color",Color)=(1,1,1,1)//颜色 _StrongFloat("_StrongFloat",float)=0.1//增强圆形边缘效果的值 _AlphaDownFloat("_AlphaDownFloat",float)=0.2//降原创 2020-06-09 23:29:47 · 1348 阅读 · 1 评论 -
UnityShader 简单护盾效果
Shader "Unlit/Shield"{ Properties { _Color("Color", Color) = (1,1,1,1)//圈内的颜色 _RimColor("Rim Color", Color) = (1,1,1,1)//边缘颜色 _RimScale("Rim Scale", Float) = 1//边缘大小 _Transparent("Transpar...原创 2020-04-03 17:52:57 · 831 阅读 · 0 评论 -
shader 屏幕后处理之死亡置灰
先看效果:天空盒和角色都慢慢灰度化了,人物死亡的时候将屏幕置灰,很实用。首先创建一个置灰的shader,如下:Shader "MyShader/die"{ Properties { _MainTex ("Texture", 2D) = "white" {} _Speed("Speed",float)=0 } SubShader ...原创 2020-02-22 17:27:58 · 612 阅读 · 0 评论 -
shader 湿地面效果
效果图如下:代码如下:Shader "Custom/017"{ Properties { _Color("Color", Color) = (1,1,1,1) _MainTex("Albedo (RGB)", 2D) = "white" {} _Normal("NormalMap",2D) = "bump"{} _NormalScale("NormalScale",Ra...原创 2020-02-12 23:25:33 · 2321 阅读 · 2 评论 -
shader 水效果(SurfaceShader)
效果图:代码如下:Shader "Custom/Water"{ Properties { _Color("Color", Color) = (1,1,1,1) _WaterShallowColr("WaterShallowColr", Color) = (1,1,1,1) _WaterDeepColr("WaterDeepColr", Color) = (1,1,1,1)...原创 2020-02-12 16:06:21 · 1931 阅读 · 2 评论 -
shader 广告牌
游戏中,有时我们需要让某些物体一直的面向我们,比如天上的云和星星之类的,或者广告牌,如果用模型的话,比较耗性能,所以我们采用quad面片来节省性能,然后quad面片要一直看向摄像机。效果如下:无论我们怎么移动摄像机,quad面片都是面对我们的。代码如下:Shader "MyShader/015"{ Properties { _MainTex ("Text...原创 2020-02-11 23:25:00 · 745 阅读 · 0 评论 -
shader 顶点动画
效果图如下:实现了简单的上下浮动,可模拟简单的水面效果。代码如下:Shader "MyShader/014"{ Properties { _MainTex ("Texture", 2D) = "white" {} _Swing("Swing",float) = 1//振幅 _Frequency("Frequency",float)=1//频率 ...原创 2020-02-11 18:26:24 · 913 阅读 · 0 评论 -
shader 滚动动画
效果图:只是实现了简单的向右偏移。代码如下:Shader "MyShader/013"{ Properties { _MainTex ("Texture", 2D) = "white" {} _ScrollSpeed("ScrollSpeed",Range(0,5))=1 } SubShader { Tags {...原创 2020-02-11 17:59:28 · 323 阅读 · 0 评论 -
shader 序列帧动画
原图:进行序列帧动画后的效果:图片找的不太好,但基本效果已经实现了。这便是序列帧动画。代码如下:Shader "MyShader/012"{ Properties { _MainTex ("Texture", 2D) = "white" {} _RowAmount("RowAmount",float)=4 _ColumnAmount("Colu...原创 2020-02-11 17:41:42 · 385 阅读 · 0 评论 -
shader 玻璃效果
玻璃效果主要是折射效果的计算和反射效果的计算。折射:1.利用Grass Pass对当前屏幕的渲染图像进行采样2.得到法线贴图对折射的影响3.对采集的屏幕图像进行关于法线方向上的扭曲和偏移,以模拟折射效果反射:主要利用环境贴图产生反射的残影,并和主贴图采样结果混合得到反射和折射的结果后,以一个变量控制最终效果(类似于玻璃的透光率);效果如下:代码如下:Shader "MySha...原创 2020-02-10 22:57:43 · 819 阅读 · 0 评论 -
shader 镜面效果
在unity中新建一个plane面片作为镜子,再新建一个摄像机,在Project下建好Material和Render Texture,新建的摄像机的Target Texture那里选择你刚刚新建的Render Texture,表示将新建的摄像机拍摄到的东西显示到Render Texture中(记住新建的摄像机要摆到合适的拍摄位置),新建一个顶点片元shader,Material中选择这个shade...原创 2020-02-09 23:32:28 · 1833 阅读 · 0 评论 -
shader 菲涅尔反射
用来描述光在不同折射率的介质之间的行为。用公式推导出的光的反射称之为“菲涅尔反射”。一般运用于水面效果,试想一下你站在湖边,低头看向水里,你会发现近的地方非常清澈见底(反射较少),而看远的地方却倒映着天空(反射较多),这就是菲尼尔效应。由于真实的菲尼尔公式计算量较多。在游戏里往往会用简化版的公式来提升效率达到近似的效果。Schlick菲涅尔近似等式:Empricial菲涅尔近似等式:...原创 2020-02-09 23:02:16 · 2429 阅读 · 0 评论 -
shader 反射效果与折射效果(Cubemap)
反射效果,是一个渲染中很重要的一个效果。在表现光滑表面(金属,光滑地面),水面(湖面,地面积水)等材质的时候,加上反射,都可以画面效果有很大的提升。反射,应该属于间接光照的范畴,而非直接光照。我们正常计算光的dot(N,L)或者dot(H,N)时计算的均为直接光照,光源出发经过物体表面该像素点反射进入眼睛的光照。然而这只是一部分,该点还可以接受来自场景中所有其他点反射的光照,如果表面光滑,则表面...原创 2020-02-07 23:01:43 · 2561 阅读 · 0 评论 -
shader 雪效果(SurfaceShader)
下雪前:下雪后:需要一张 原贴图 和 原贴图的法线贴图 和 雪的贴图代码:Shader "Custom/14"{ Properties { _Color ("Color", Color) = (1,1,1,1) _MainTex ("Albedo (RGB)", 2D) = "white" {}//原贴图 _Glossi...原创 2020-02-06 22:31:31 · 485 阅读 · 0 评论 -
shader 法线UV扭曲(类似金箔纸效果)(SurfaceShader)
效果:代码:Shader "Custom/06"{ Properties { [HDR]_Color ("Color", Color) = (1,1,1,1) _MainTex ("Albedo (RGB)", 2D) = "white" {} _DistortTexture("distort texture",2D)="bump"{}...原创 2020-02-06 00:27:53 · 699 阅读 · 0 评论 -
shader 法线外扩变化(SurfaceShader)
效果如下:代码如下:Shader "Custom/08"{ Properties { _Color ("Color", Color) = (1,1,1,1) _MainTex ("Albedo (RGB)", 2D) = "white" {} _Glossiness ("Smoothness", Range(0,1)) = 0...原创 2020-02-06 00:15:50 · 660 阅读 · 0 评论 -
shader 物体消融效果(SurfaceShader)
如图:改变MeltValue的值即可控制物体消融的程度。_BurnLength可改变消融边缘的颜色覆盖范围。代码:Shader "Custom/10"{ Properties { _Color ("Color", Color) = (1,1,1,1) _MainTex ("Albedo (RGB)", 2D) = "white" {} ...原创 2020-02-05 23:53:44 · 491 阅读 · 0 评论 -
shader 区域过度(SurfaceShader)
效果如图:Dis能控制颜色过度的距离StartPoint能控制颜色覆盖的高度Tint能控制颜色,如图中的绿色,也可选其他颜色UnderInfluence能控制颜色的深浅代码:Shader "Custom/11"{ Properties { _Color ("Color", Color) = (1,1,1,1) _MainTex ("A...原创 2020-02-05 23:42:59 · 391 阅读 · 0 评论 -
shader 流动效果(SurfaceShader)
如图:运行后,图片中的岩浆会向某个方向进行流动,这便是流动效果。代码:Shader "Custom/05"{ Properties { _Color ("Color", Color) = (1,1,1,1) _MainTex ("Albedo (RGB)", 2D) = "white" {} _Smoothness ("Sm...原创 2020-02-05 22:19:10 · 1406 阅读 · 0 评论 -
SurfaceShader BlinnPhong高光 法线贴图 边缘光 卡通渲染
BlinnPhong高光Shader "Custom/01"{ Properties { _Color ("Color", Color) = (1,1,1,1) _SpecColor("SpecColor", Color) = (1,1,1,1) _MainTex ("Albedo (RGB)", 2D) = "white" {} _Gl...原创 2020-02-05 14:19:36 · 675 阅读 · 0 评论 -
shader 简单模糊效果(surface shader)
模糊前:模糊后:代码:Shader "Custom/09"{ Properties { _Color ("Color", Color) = (1,1,1,1) _MainTex ("Albedo (RGB)", 2D) = "white" {} _Glossiness ("Smoothness", Range(0,1)) ...原创 2020-02-05 00:18:17 · 344 阅读 · 0 评论 -
shader XRay(透视描边高亮效果)
利用ZTest Greater深度测试大于条件即为物体被遮挡了,将物体被遮挡的像素片元进行修改为透视时的颜色。物体没有被遮挡时就正常显示。如图:代码如下:Shader "MyShader/XRay"{ Properties { _MainTex ("Texture", 2D) = "white" {} _XRayPower("XRay Power",R...原创 2020-02-04 15:02:54 · 1438 阅读 · 0 评论 -
shader shadow(物体接收阴影与产生阴影)
光照衰减Unity在内部使用一张名为_LightTexture0的纹理来计算光源衰减。我们通常只关心_LightTexture0对角线上的纹理颜色值,这些值表明了再光源空间中不同位置的点的衰减值。例如(0,0)点表明了与光源位置重合的点的衰减值,而(1,1)点表明了再光源空间中所关心的距离最远的点的衰减。float3 lightCoord = mul(_LightMatrix0,float4(...原创 2020-02-01 21:16:18 · 6026 阅读 · 0 评论 -
shader Stencil模版测试
Stencil (模板测试/蒙版测试):与深度测试,透明度测试类似,决定一个片元是否被扔掉。深度测试的比较数据在深度缓冲中,透明度测试的比较对象是颜色缓冲中的值,而模版测试的比较数据在Stencil中,并且模板测试要先于深度测试与透明度测试,在fragment函数之前就会执行模板测试。Ref 就是参考值,当参数允许赋值时,会把参考值赋给当前像素ReadMask 对当前参考值和已有值进行mas...原创 2020-02-01 20:40:33 · 1226 阅读 · 0 评论 -
shader 延迟渲染后处理
Edit–>Project Settings–>Graphics中的Built-in Shader Settings中的Deferred默认是选择Built-in shader的,这是延迟渲染默认使用的后处理方式。我们选择Custom shader,然后将自己写的延迟渲染后处理的shader代码拖进去,也能实现相应的后处理效果。shader代码如下:Shader "MyShader...原创 2020-02-01 19:54:23 · 671 阅读 · 0 评论 -
shader 延迟渲染
正向渲染(Forward Rendering),或称正向着色(Forward Shading),是渲染物体的一种非常直接的方式,在场景中我们根据所有光源照亮一个物体,之后再渲染下一个物体,以此类推。传统的正向渲染思路是,先进行着色,再进行深度测试。 其的主要缺点就是光照计算跟场景复杂度和光源个数有很大关系。假设有 n 个物体, m 个光源,且每个每个物体受所有光源的影响,那么复杂度就是 O...原创 2020-02-01 19:35:46 · 655 阅读 · 0 评论 -
shader 前向渲染
Unity 渲染路径:Forward (前向渲染)Deferred (延迟渲染)Legacy Vertex LitLegacy DeferredUnity 前向渲染:逐顶点,逐像素处理,球谐函数。逐像素光源:1,当光源设置为Import时,是逐像素光源。(不受限制于质量设置里面pixel light count )(Forward Add)2,光源为auto时,个数在pi...原创 2020-01-29 14:25:51 · 302 阅读 · 0 评论 -
shader 卡通积雪场景
单独使用一个Pass进行描边。需先在Properties中定义:_Outline(“outline”,Range(0,0.2)) = 0.003_OutlineColor(“outline color”,Color)=(0,0,0,0)Pass//描边通道{ Name "Outline" Cull Front CGPROGRAM #pragma vertex vert #pr...原创 2020-01-27 18:14:38 · 453 阅读 · 0 评论 -
shader 积雪效果
通过世界空间的法线方向和雪的方向的点积的值进行判断,从而决定是否积雪。在Properties中添加:_SnowColor(“snow color”,Color) = (1,1,1,1)_Snow(“snow level”,Range(0,1)) = 0.5_SnowDir(“snow dir”,Vector) = (0,1,0)定义:float4 _SnowColor;float4 ...原创 2020-01-27 17:49:25 · 338 阅读 · 0 评论 -
shader 卡通着色
步骤1.贴上纹理贴图 (下面代码中的第三个Pass通道)2.添加漫反射 (下面代码中的第三个Pass通道)3.给物体描边 (下面代码中的第二个Pass通道)4.添加渐变纹理 (下面代码中的第三个Pass通道)5.边缘发光 (下面代码中的第三个Pass通道)6.XRay实现 (下面代码中的第一个Pass通道)XRay中,即第一个Pass通...原创 2020-01-25 21:54:18 · 241 阅读 · 0 评论 -
shader 边缘发光
当视角方向与法线方向垂直时,顶点坐标位置即为边缘位置。在Properties中定义以下变量:_XRayColor(“xray color”,Color) = (1,1,1,1)_XRayPower(“xray power”,Range(0.0001,3)) = 0.1在Pass中定义以下变量:float4 _RimColor;float _RimPower;定义一个结构体:stru...原创 2020-01-25 20:40:53 · 609 阅读 · 0 评论 -
shader 物体描边
描边的方式有三种:1.模型空间法线外拓2.视角空间法线外拓3.裁剪空间法线外拓但我感觉效果都差不多,所以用哪种都可以。Shader "MyShader/NewShader"{ Properties { _MainTex ("Texture", 2D) = "white" {} _Diffuse("diffuse",Color) = (1,1,1,1)...原创 2020-01-23 01:14:54 · 430 阅读 · 0 评论 -
shader 透明度混合
透明度混合透明度混合是实现了真正的半透效果。它会以当前片元透明度作为混合因子,与已经存储在颜色缓冲区中的颜色进行混合,得到新的颜色。同时要关掉深度写入,小心物体的渲染顺序。用Blend SrcFactor DstFactor来进行混合。这个命令在设置混合因子的同时也开启了混合模式,否则不会有混合效果,因为开启了混合模式,片元的透明通道才有意义。我们把源颜色的混合因子设为SrcAlpha,目标的...原创 2020-01-22 21:55:38 · 546 阅读 · 0 评论 -
shader AlphaTest透明度测试
Shader "MyShader/alphaTest"{ Properties { _MainTex("MainTex",2D)="white"{} _Diffuse("diffuse",Color) = (1,1,1,1) _Cutoff("alphaTest",range(0,1))=0.5 } SubShader { Tags { "queue" = "Alph...原创 2020-01-22 01:41:52 · 368 阅读 · 0 评论 -
shader 遮罩纹理
遮罩纹理(mask texture),允许保护某些区域,免于某些修改。类似PhotoShop的蒙板,用于控制部分区域的纹理,值越大越白越用于受影响。配合法线纹理使用。这里控制的是高光反射的值。通过采样得到遮罩纹理的纹素值,然后使用其中某个通道的值来与某个表面属性进行相乘,这样当通道的值为0时,可以保护表面不受该属性的影响。总而言之,使用遮罩可以让美术人员更加精确地(像素级)的控制模型表面的各个...原创 2020-01-21 00:15:53 · 298 阅读 · 0 评论 -
shader 渐变纹理
纹理一开始的作用是用以定义物体的颜色,但后面发现纹理可以存储任何表面属性。比如说,使用渐变纹理来控制漫反射光照的结构。在很多卡通风格的渲染中都使用了该技术。_RampTex实际上是一个一维纹理,因此纹理坐标的u和v方向我们都使用了halfLambertShader "MyShader/rampTexture"{ Properties { _RampTex("RampTex",2D)=...原创 2020-01-20 23:51:42 · 288 阅读 · 0 评论 -
Shader 法线贴图
法线纹理法线纹理中存储的是表面法线的方向。需要使用如下公式将,法线方向的分量[-1,1]映射到像素分量[0,1]:pixel=normal*0.5+0.5当在Shader中对法线纹理进行采样后,需要对结果使用公式进行一次反映射,用于得到原先的法线方向:normal=pixel∗2−1方向是相对于坐标空间来说的,因此法线纹理依据不同的坐标空间,还分为:模型空间的法线纹理(object-...原创 2020-01-20 15:52:00 · 775 阅读 · 0 评论 -
Shader Phong高光反射和Blinn Phong高光反射
Phong高光反射(逐顶点)Shader "MyShader/phong"{ Properties { _Diffuse("diffuse",Color) = (1,1,1,1) _Specular("specular",Color) = (1,1,1,1) _Gloss("gloss",Range(1,256)) = 5 } SubShader { ...原创 2020-01-18 21:26:01 · 401 阅读 · 0 评论 -
shader 兰伯特光照模型和半兰伯特光照模型
基于顶点的Shader "MyShader/Diffuse"{ Properties { _Diffuse("diffuse",Color) = (1,1,1,1) } SubShader { Tags { "RenderType" = "Opaque" } LOD 100 Pass { CGPROGRAM #pragma vertex vert...原创 2020-01-18 19:20:37 · 278 阅读 · 0 评论