Shader
迟谋
我不喜欢一成不变的生活,我热衷于尝试新鲜的事物。世间有太多美好还未去体验,新的科技、电影、书籍、音乐、美食、风景、游戏,每时每刻都有大量的值得体验的事物在诞生。
展开
-
一日一Shader·Blend【SS_31】
各种Blend组合所实现的效果:Blend DstColor Zero //源颜色 x 目标颜色 + 目标颜色 x 0,即multiplicative Blend DstColor SrcColor//源颜色 x 目标颜色 + 目标颜色 x 源颜色 ,即2x multiplicative【正片叠底的效果】 Blend SrcAlpha OneMinusSrcAlpha //源颜色 x 源通道+目标颜色 x(1 - 源通道)【可以受源通道影响变完全透明,但Queue要为3000】...原创 2020-08-01 17:15:50 · 471 阅读 · 0 评论 -
一日一Shader·切除扩展效果【SS_30_1】
根据昨天的切除原理,修改了一下,实现了一个类似进入异空间的效果。感觉这个效果还是很有用的,可以用来做角色或物体的隐藏和出现。而且考虑到有双面的效果,还可以用来显示物体的内部结构。PS:如果要做人体的剖面,需要做4套模型——表层、肌肉、骨骼、内脏。简单修改了一下脚本:Shader "MyShader/SS_30_1"{ Properties{ _MainTex("MainTexture",2D) = ""{} _BlendTex("BlendTexture",2D) = ""{..原创 2020-07-31 10:57:17 · 202 阅读 · 0 评论 -
一日一Shader·切除【SS_30】
今天主要利用discard进行一些效果实现。根据对象的世界坐标,进行一定的判断,让满足条件的图元显示,其他图元用discard隐藏掉。可以时实现类似扫描、探照灯、透视、切割等效果。Shader "MyShader/SS_30"{ Properties{ _MainTex("MainTexture",2D) = ""{} _BlendTex("BlendTexture",2D) = ""{} _CutAxis("Cut Axis", Vector) = (0,1,0,0) ..原创 2020-07-30 15:12:10 · 208 阅读 · 0 评论 -
一日一Shader·动态云【SS_29】
天空盒有3种做法:六面图、cubemap和normal texture。前面两种可以制作指定纹理的天空盒,最后一种其实是用一整张连续的图贴到天空上,一般用来做动态云,因为做动态云时不用考虑图形畸变问题。做动态云的方法有很多,只要能满足云层变化就行。当然还要考虑效率问题,所以需要用比较好的算法。返回目录:https://blog.csdn.net/yzy1987523/article/details/107561997...原创 2020-07-29 17:32:55 · 583 阅读 · 0 评论 -
一日一Shader·世界坐标【SS_28】
让纹理与世界坐标相关联。获取片元的世界坐标:o.worldPos = mul(unity_ObjectToWorld, v.vertex);然后根据世界坐标来取UV,注意除以Tiling的倍数。Shader "MyShader/SS_28"{ Properties { _MainTex ("Texture", 2D) = "white" {} _Mask ("Mask", 2D) = "white" {} ...原创 2020-07-28 23:01:34 · 672 阅读 · 0 评论 -
一日一Shader·雾效【SS_27】
由于外出取材,断更了两天,强迫症患者的我表示太难受了。但是可不能半途而废了,还是得续上。作为研究SSS材质的前置知识点,要先研究深度图,从雾效的例子开始实现比较容易入手。Shader "MyShader/SS_27" { CGINCLUDE #include "UnityCG.cginc" sampler2D _CameraDepthTexture; fixed4 frag_depth(v2f_img i) : SV_Target { float depthTextur..原创 2020-07-27 21:22:44 · 203 阅读 · 0 评论 -
Shader效果展示【十二】
镜面水【20200724】https://blog.csdn.net/yzy1987523/article/details/107561585 返回目录:https://blog.csdn.net/yzy1987523/article/details/106676451原创 2020-07-24 15:21:34 · 643 阅读 · 0 评论 -
一日一Shader·天空镜面反射【SS_26】
反射的原理很简单,只要知道对象的位置、镜面的法线,就能获得反射后的图像:不过,如何知道对象的位置呢?一般做法是在镜子的位置放个摄像机,或者用反射探针,不过今天就先不考虑这些问题,先实现最简单的反射效果。如果只是反射天空盒,其实比较简单,因为天空盒的位置是固定的,只要通过反射计算就能获得镜像效果。Shader "MyShader/SS_26"{ Properties { _CubeTex ("CubeTex", Cube) = ""{} } SubShader { ..原创 2020-07-24 15:18:03 · 625 阅读 · 0 评论 -
一日一Shader·水面折射【SG_17】
今天回看昨天做的折射的效果,发现我想的太狭隘了,我完全是按球体的光学原理来实现,所以用其他形状的透镜时,效果就是错误的。想了想,不规则透镜的折射效果更多的是一种模拟。不过,我还是想尝试实现波纹水面的折射效果,因为只用考虑一个面,所以光学模型还是比较容易构建的。将上图中的光线原理转换为几何问题:已知向量AB(-V)、向量AD(-N1)、角BAD(θ,根据V和N1计算出来)、角DAC(λ,根据θ和折射率n计算出来),求向量AC。当然,可以先简化一点,只求单位长度的向量AC,再用另外的参数..原创 2020-07-23 17:17:40 · 633 阅读 · 0 评论 -
一日一Shader·折射【SG_16】
按照光学原理实现折射,先构建整个过程:其中入射光其实是摄像机抓取的图像,经过球形透镜的处理,形成新的图像。按照折射公式:n1*sinA=n2*sinB,可以设定一个n=n1/n2,这样方便计算。然后依靠初中几何基础计算出最后的结果:sinA=V*N1sinB=n*sinAsin2B=2cosBsinB=2sinB(sqrt(1-sinBsinB))N2=-sin2B/N1(B=C,N1、N2外角和为2B)接受光=sinA/N2(A=D)这儿用一个自定义节点封装这个过..原创 2020-07-22 12:33:38 · 239 阅读 · 0 评论 -
一日一Shader·滤镜【SG_15】
今天研究折射效果,网上找的实现方式主要是抓取摄像机看到的图像,然后对该图像进行处理。涉及光学计算的部分先放一边,先实现对图像抓取的功能。有一个方法是GrabPass,但是在SRP管线下不支持。不过倒是能用ShaderGraph的方式实现图像抓取。这里有一点要注意,_CameraOpaqueTexture是比较特殊的变量,它不需要赋值,而是自动会获取当前摄像机的图像。另外ScreenPosition也比较重要,它让图像始终由当前摄像机抓取。最后,目前只对截取的图像进行了单通道渲染,..原创 2020-07-21 19:53:51 · 321 阅读 · 0 评论 -
一日一Shader·包裹【SS_25】
高光与法线贴图的直接结合不太好看,所以就用层叠的方式结合看看,结果实现了这种类似荔枝的效果。Shader "MyShader/SS_25"{ Properties { _MainTex("Texture", 2D) = ""{} _Normal("Normal", 2D) = ""{} _Emission("Emission",Range(0,1))=0.5 _Wrap("Wrap",Range(0,1))=0.5 ..原创 2020-07-20 08:45:51 · 190 阅读 · 0 评论 -
一日一Shader·卡通高光【SS_24】
高光是一种美术用语,指光源照射到物体然后反射到人的眼睛里时,物体上最亮的那个点就是高光,高光不是光,而是物体上最亮的部分——百度百科在光学模型中,高光是属于反射的一种,故又称为高光反射,受观察方向和光源方向影响。根据Blinn模型,引入h矢量,并根据下面的公式实现高光效果。Shader "MyShader/SS_24"{ Properties { _MainTex("Texture", 2D) = ""{} _Normal("N..原创 2020-07-19 16:09:47 · 401 阅读 · 0 评论 -
一日一Shader·基础卡通【SS_23】
卡通效果的特点是颜色呈块状,即便有过渡,也是一块块色块。要实现主要用到floor方法,将本来是过渡的颜色铺平。Shader "MyShader/SS_23" { //属性 Properties{ _MainTex("Texture", 2D) = ""{} _Normal("Normal", 2D) = ""{} _Emission("Emission",Range(0,1))=0.5 _Wrap("W..原创 2020-07-18 17:01:46 · 343 阅读 · 0 评论 -
Shader效果展示【十一】
法线【20200717】https://blog.csdn.net/yzy1987523/article/details/107409986 返回目录:https://blog.csdn.net/yzy1987523/article/details/106676451原创 2020-07-17 15:57:46 · 417 阅读 · 0 评论 -
一日一Shader·法线【SS_22】
开始进击光学领域了,这将扩展出更多效果。先从最基础的法线开始。利用lambert原理:Shader "MyShader/SS_22" { //属性 Properties{ _MainTex("Texture", 2D) = ""{} _Normal("Normal", 2D) = ""{} _Emission("Emission",Range(0,1))=0.5 _Wrap("Wrap",Ran..原创 2020-07-17 15:56:37 · 315 阅读 · 0 评论 -
一日一Shader·手机版笔刷【SS_21】
之前用GL方式制作的笔刷在手机端用不了,于是只能根据最早的笔刷进行改进。其中最关键的地方是如何更换刷头。我用的是遮罩的方式,只让当前刷头显示出来,挡住其他刷头。Shader "MyShader/SS_21"{ Properties { _MainTex ("Texture", 2D) = "white" {}//不可略,否则 Graphics.Blit无法赋值 _Detail ("Detail", 2D) = "white" {} _Mask ("M..原创 2020-07-16 17:50:07 · 241 阅读 · 0 评论 -
一日一Shader·水瓶【SS_20】
今天这个不是原创,是照着这篇文章重新实现了一遍:https://www.patreon.com/posts/quick-game-art-18245226其核心代码:using System.Collections;using System.Collections.Generic;using UnityEngine; public class Wobble : MonoBehaviour{ Renderer rend; Vector3 lastPos; Vec..原创 2020-07-15 20:58:03 · 549 阅读 · 0 评论 -
一日一Shader·线性过渡【SG_14】
今天主要尝试将Time转换为锯齿形波形,类似这种:之前有用多个Node实现过,但是很显然,实现方式相当笨重。于是用数学方式实现:#ifndef CUSTOM_LIGHTING_INCLUDED#define CUSTOM_LIGHTING_INCLUDED//锯齿形波,振幅为1,input为_Time.y,T为周期void JagWave_float(float Time,float T,out float output){ float t2=fmod(Time,T);..原创 2020-07-14 18:56:48 · 210 阅读 · 0 评论 -
一日一Shader·圆形过渡【SG_13】
实现类似饥荒的夜晚效果:点击区域变亮,松开时又变暗。using UnityEngine;public class SG_13 : MonoBehaviour{ Material mat; string size = "_Size"; float sizeValue; string pos = "_Pos"; Vector3 posValue=new Vector3(0.5f,0.5f,0); public float speed = 1;..原创 2020-07-13 20:43:51 · 269 阅读 · 0 评论 -
一日一Shader·帧动画【SG_12】
做一个简单的帧动画功能。其中有2点需要注意:1.动画的播放顺序是根据图集中每个Tile的位置,这儿需要利用的公式:index=ax+y(index是每张图的序号,动画播放时该值递增;a是当前行的行数,用除法获得;y是当前列号,用取模获得;最后可以求出x,并根据x、y确定Tile的位置)。2.要使用有透明通道的图时,需要clip透明区域。返回目录:https://blog.csdn.net/yzy1987523/article/details/106676451...原创 2020-07-12 09:29:06 · 265 阅读 · 0 评论 -
一日一Shader·矩阵变换【SS_19】
今天整理一下矩阵变换的通用公式,其实主要是控制旋转的方式。用了一个shader作为工具,展示不同矩阵变换的效果。Shader "MyShader/SS_19"{ Properties { _MainTex ("Texture", 2D) = "white" {} _Height("Height",float)=0.5 _Matrix1("Matrix1",vector)=(1,0,0) _Matrix2("Matrix2",vector)=(0,1..原创 2020-07-11 09:47:28 · 210 阅读 · 0 评论 -
Shader效果展示【十】
笔刷·改进【20200710】https://blog.csdn.net/yzy1987523/article/details/107262762 返回目录:https://blog.csdn.net/yzy1987523/article/details/106676451原创 2020-07-10 20:13:32 · 419 阅读 · 0 评论 -
一日一Shader·进阶版笔刷【SS_18】
进阶版笔刷的原理还是RT叠加,不过用的是GL的方法,用起来更灵活,可以生成一张小号的图叠加到大图上。Shader "MyShader/SS_18"{ Properties { _MainTex ("Texture", 2D) = "white" {} _Color ("Color", Color) =(0,0,0,0) _Row ("Row", float) = 0 _Column ("Column",float) = 0 _Size("Size"..原创 2020-07-10 20:11:54 · 469 阅读 · 0 评论 -
一日一Shader·进阶版线框【SS_17】
之前有做过UV版线框,觉得有些效果无法实现,所以继续研究线框制作。直到看到了unity内置的GL方法,就像打开了新世界,能做的东西又变多了。今天先试试画线的功能。using UnityEngine;public class SS_17 : MonoBehaviour{ private Material lineMat; public Color lineColor; Mesh mesh; Vector3[] lines; public Mesh M..原创 2020-07-09 19:12:56 · 345 阅读 · 0 评论 -
一日一Shader·顶点阶段之凸起【SG_11】
今天主要是针对指定点周围的顶点进行偏移,看实现的刻印效果。之后还要研究根据遮罩图来实现刻印效果。using System.Collections;using System.Collections.Generic;using UnityEngine;[ExecuteInEditMode]public class SG_11: MonoBehaviour{ Material mat; private Transform target; public float p..原创 2020-07-08 19:39:38 · 316 阅读 · 0 评论 -
一日一Shader·顶点阶段之弹球【SS_16_0】
突然想做个弹球的运动过程,球触底时会形变,然后反弹。这是对我物理基础的考验,可惜运动过程终究还是没弄出来,就只做了弹性形变的过程。实现原理是在顶点着色器中对顶点进行偏移。代码:Shader "MyShader/SS_16_0"{ Properties { _MainTex ("Texture", 2D) = "white" {} _Weight("Weight",float)=1 } SubShader ..原创 2020-07-07 19:10:46 · 271 阅读 · 0 评论 -
一日一Shader·笔刷【SS_15_0】
前几天有人问我,看能不能实现笔刷效果。于是花了点时间研究了一下,找到了一个最简单的方案。原理很简单,核心方法就是使用Graphics.Blit,将图传入shader中,叠加上detial,再保存该结果为RT,下次加入detial时将该结果迭代。我实现了大部分功能,还有一些细节可以根据需要进行修改。比如笔刷的力度、边缘过渡、颜色渐变等。如果还有其它的shader制作需求也可以留言,我会酌情实现。代码:using UnityEngine;public class SS_15 : M..原创 2020-07-06 20:02:04 · 405 阅读 · 0 评论 -
一日一Shader·钻石光泽【SG_10】
今天换换思维模式,切换到ShaderGraph的制作。(PS:SG_9制作失败了,就先不放上来了。)这个是根据之前的一个效果改编的,还是先放构造图:其中主要用到Posterize节点,它可以将平衡的过渡转为阶梯状,然后用不同方向结果的叠加后则变为一个个色值渐变的格子。返回目录:https://blog.csdn.net/yzy1987523/article/details/106676451...原创 2020-07-05 09:36:05 · 524 阅读 · 0 评论 -
Shader效果展示【九】
增厚【20200704】https://blog.csdn.net/yzy1987523/article/details/107126313 返回目录:https://blog.csdn.net/yzy1987523/article/details/106676451原创 2020-07-04 16:44:55 · 452 阅读 · 0 评论 -
一日一Shader·几何阶段之增厚【SS_14】
之前做了一个爆散的效果,那是利用已有顶点的偏移来实现。今天做的增厚效果则是将已有的顶点复制出来一个,然后沿法线方向偏移,形成双层结构,让最终绘制出来的图像有一定的厚度。代码:Shader "MyShader/SS_14"{ Properties{ _MainTex("Texture", 2D) = ""{} _Mask("Mask", 2D) = ""{} } SubShader { CGINCLUDE #include "UnityCG.cginc" ..原创 2020-07-04 16:42:52 · 423 阅读 · 0 评论 -
一日一Shader·卷积之初解【SS_13_0】
早前研究神经网络时有了解过卷积,但是没有形成思维模型,渐渐遗忘了。最近又开始研究卷积在图形学中的应用,或许因为更形象吧,发现卷积变得好理解了。其实最主要的还是看到了这张图。可以这么理解,有A、B两个矩阵(这儿只研究卷积在图形学中的应用,故不考虑其他维度),从A中选取一个元素a0,然后根据B的尺寸,提取出a0周围一圈的元素,构成了一个子矩阵A0,A0与B的尺寸要一致。然后让A0与B的元素一一对应并相乘后求和,最后的值就是a0的卷积。就像一圈数卷住了a0,又被盖了层被子,最后裹挟在一起变成一个新..原创 2020-07-03 20:36:20 · 459 阅读 · 0 评论 -
一日一Shader·图片迭代【SS_12】
这是今天在研究CommandBuffer时无意间想到的一种玩法。效果挺有意思的,原理也很简单。就是将摄像机渲染出RenderTexture赋值给模型材质,而这个模型又被摄像机渲染到RT上……如此往复,形成这种分形的效果。代码都很简单:using UnityEngine;public class SS_12 : MonoBehaviour{ public Material mat; public RenderTexture colorBuf; public Trans..原创 2020-07-02 20:23:42 · 268 阅读 · 0 评论 -
一日一Shader·多层tiling区分【SS_11_1】
当多图叠加时,一般会涉及遮罩,而遮罩位置的变化是依据uv值,但是当图片的tiling变化时,遮罩位置也会改变。为了解决这个问题,需要声明多个uv,有的会随tiling变化,有的不变。代码:Shader "MyShader/SS_11_1"{ Properties { _Mask ("Mask", 2D) = "white" {} _MainTex ("Texture", 2D) = "white" {} _Size..原创 2020-07-01 19:29:39 · 587 阅读 · 0 评论 -
一日一Shader·探照灯【SS_11_0】
接下来我要制作一个较复杂的shader,而每天能抽出来的时间更少了,所以我将这个shader拆分成了多个部分,然后每天实现一个功能。今天要实现的是扇形,需要用cs脚本控制位置、方向和弧度。原理是根据两条点斜式方程表示的直线,将可渲染区域限定在一个角度内。效果图:代码:Shader "MyShader/SS_11_0"{ Properties { _MainTex ("Texture", 2D) = "white" {} _Color("原创 2020-06-30 21:14:49 · 261 阅读 · 0 评论 -
一日一Shader·无限放大【SG_8】
本来只想做个简简单单的效果:放大到突然变小再放大,再加上几层,让它看起来层层叠叠、永无止境。结果没忍住,添加了一堆细节,让整个构造图看起来乱糟糟的。不过好在最终的效果还不错。构造图……还是稍微调整下位置吧,这样好看点:其中用到了两个子节点:Breathe,作用是让递增的Time变成递增->递减->递增的过程;SizeChange,作用是让图片缩放。整个过程的关键就是:用3段变化过程衔接在一起。我是将同一个变化过程,复制出2个,在时间上分别增加三分之原创 2020-06-29 20:07:33 · 301 阅读 · 0 评论 -
一日一Shader·八皇后【SS_10】
今天突然想不起来回溯怎么写了,于是开始研究经典的回溯题——八皇后问题。但是在看到回溯的原理的时候,脑子有点转不过弯来了。于是决定将回溯过程绘制出来。Shader "MyShader/SS_10"{ Properties { _MainTex ("Texture", 2D) = "white" {} _Color("Color",Color)=(1,1,1,1) _Size("Size",float)=0.03 _Pos0原创 2020-06-28 19:50:49 · 239 阅读 · 0 评论 -
Shader效果展示【八】
爆散【20200627】https://blog.csdn.net/yzy1987523/article/details/106979032原创 2020-06-27 10:04:06 · 432 阅读 · 0 评论 -
一日一Shader·几何渲染之爆炸【SS_9】
今天温习一下几何渲染,先拿个简单的效果热个身:这个是三角面沿法线偏移产生的效果,并用cs脚本控制动画播放。Shader "MyShader/SS_9" { Properties{ _MainTex("Texture", 2D) = ""{} _Power("Power",Range(0,10))=0.5 } SubShader { CGINCLUDE #include "UnityCG.cg原创 2020-06-27 10:02:19 · 471 阅读 · 0 评论 -
一日一Shader·模型线框【SS_8】
今天做的效果是连接模型的各顶点,将模型线框化。这个效果的灵感来自于昨天做的星座连线,因为星座间的连线没有规律,所以想用制作好的模型来生成各种线框图。原理其实也很简单,获取顶点,然后连线……好吧,这条路没走通,换个方案。根据UV的渲染原理,限制其渲染范围,倒是也能实现边框的感觉,类似这种:感觉不太理想,三角面没体现出来。要体现出三角面,还得靠Geometry渲染,今天就不深入研究这个了。还是先把UV限制方案完善吧。这时还要处理3D模型时,背面不显示的问题:一般用双Pass就行。但是原创 2020-06-26 16:05:46 · 714 阅读 · 0 评论