![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Unity Shader 入门精要
文章平均质量分 93
buzhengli
25届211大学生一枚
展开
-
Unity Shader入门精要 第十二章——屏幕后处理效果
卷积操作指定是使用一个卷积核(kernel)对一张图像中的每个像素进行一系列的操作。卷积核通常是一个四方形网格结构,该方格每个区域都有一个权重值。对图像中的某个像素进行卷积时,我们会把卷积核的中心位置放置于该像素上(如下图),翻转核之后依次计算核中每个元素和其覆盖的图像像素值的乘积并求和,得到的就是该位置的新像素值。不同的卷积和就可以得到不同的效果计算核中每个元素和其覆盖的图像像素值的乘积并求和。原创 2023-09-03 10:57:41 · 499 阅读 · 0 评论 -
Unity Shader入门精要 第十一章——纹理动画、顶点动画
动画效果往往都是把时间添加到一些变量的计算中,随着时间变换画面也可以随之变换。原创 2023-08-15 14:00:48 · 570 阅读 · 1 评论 -
Unity Shader入门精要 第十章(上)——立方体纹理
立方体纹理(Cubemap)是环境映射(Environment Mappi)的一种方式。环境映射可以模拟物体周围的环境,像是镀了层金属一样反射周围的环境。立方体纹理包含六张图像,对应正方体六个面。对立方体纹理的采样需要一个三维的纹理坐标,表示在世界空间下的一个3D方向矢量。如下图,这个方向矢量从立方体中心开始向外部延伸会与立方体的六个纹理之一发生相交,采样得到的结果就是由这个焦点计算出来的。立方体纹理的好处在于,实现简单快速,效果也比较好。原创 2023-08-08 11:40:24 · 232 阅读 · 0 评论 -
Unity Shader入门精要 第十章(下)——渲染纹理、程序纹理
摄像机的渲染结果会输出到颜色缓冲,并显示到我们的屏幕上。现代的GPU允许我们把整个三维场景渲染到一个中间缓冲中,即这个技术指的是GPU允许我们把场景同时渲染到多个渲染目标纹理,而不用为每个渲染目标纹理单独渲染完整场景。【某度:允许程序同时渲染到多个颜色缓冲,向不同的颜色缓冲中送入渲染结果的不同方面(如不同RGBA 色彩通道的值、深度值等)。】延迟渲染就使用了多重渲染目标。Unity为了渲染目标纹理定义了一种专门的纹理类型——。下面会依次学习这两种方法。原创 2023-08-10 11:32:13 · 652 阅读 · 1 评论 -
Unity Shader入门精要 第九章——Unity的光照衰减、Unity的阴影、标准UnityShader
实际上,光照衰减和阴影对物体最终渲染的结果本质是相同的——都是把光照衰减因子和阴影值和与光照结果相乘得到的最终的渲染结果,对应的代码中的这一行(如下图)。9.2中我们有使用下面的这样的两行代码来计算光照衰减。我们在上面的效果图中可以看到,右边平面的阴影并没有投射在正方体上,但是可以投射在下面的平面平面上,这是因为平面使用了内置的Standard Shader。传统的阴影映射纹理的实现:得到阴影映射纹理后,在其他的Pass中就可以使用这个阴影映射纹理,使用xy分量对阴影映射纹理采样,得到对应位置的深度信息。原创 2023-08-05 10:50:39 · 290 阅读 · 2 评论 -
Unity Shader入门精要 第九章——Unity的渲染路径、Unity的光源类型
如果一个物体在多个逐像素光源的影响区域,那么这个物体就要执行多个Pass,每个Pass计算一个逐像素光源的光照结果,最后在帧缓存中八这些结果混合得到最终的颜色。在前向渲染中,Unity会对光源根据光源的设置、对物体的影响程度等,对光源进行一个重要度的排序。其中一定数目的光源会按逐像素的方式处理,然后最多有四个光源按逐顶点的方式处理,剩下的光源按SH方式处理。而且延迟渲染路径的每个光源都可以按逐像素的方式处理。光源类型指的是该光源是平行光还是其他类型的光源,光源的渲染模式指的是该光源是否是。原创 2023-08-02 10:32:06 · 279 阅读 · 1 评论 -
Unity Shader入门精要 第八章——透明效果
透明度测试:只要有一个片元的透明度不满足条件(通常是小于某个阈值),那么其对应的片元将会被舍弃。被舍弃的片元将不会再进行任何处理,也不会对颜色缓冲产生任何影响,否则就会按照普通的不透明物体的处理方式来处理它。根据描述,我们发现透明度测试是不需要关闭深度写入,但产生的效果也很极端,要么完全透明,要么完全不透明。我们一般使用clip函数来进行透明度测试。clip是CG当中的一个函数:void clip(float4 x),里面的参数还可以是float3、float2、float2、float1、float。原创 2023-07-30 17:00:38 · 2569 阅读 · 1 评论 -
Unity Shader入门精要 第七章——基础纹理
纹理的最初目的,就是使用一张图片来控制模型的外观,相当于贴图,把一张图贴在一个模型上,可以逐(纹素类似于像素)地控制模型的颜色,这种技术叫在建模软件中会利用纹理展开技术把存储在每个顶点上。纹理映射坐标定义了该顶点在纹理图片中对应的2D坐标(也就是每个顶点对应图片中的位置)。这个坐标用一个二位变量(u,v)表示,u是横坐标,v是纵坐标,所有纹理映射坐标也成为UV坐标。纹理图片的大小可以是多种多样的,如256*256或者1024*1024,但转换为UV坐标时,通常都会被归一化到[0,1]范围内(如下图)。原创 2023-07-27 16:01:36 · 1232 阅读 · 1 评论 -
Unity Shader入门精要 第六章——Unity中的基础光照
逐像素光照,以每个像素为基础,得到它的法线(可以是对顶点法线插值得到的,也可以是从法线纹理中采样得到的),然后进行光照模型计算,这种在面片之间对顶点法线进行插值的技术称为Phong着色,也被称为Phong插值或法线插值技术,这不同于Phong光照模型。上面两个模型(也叫兰伯特光照模型)有个问题就是,光照没有照射到的地方是全黑的,没有明暗变化,导致背面就像是有个平面一样。与原来的兰伯特光照模型相比,半兰伯特光照模型没有使用max操作来防止n*I的点积为负值,而是进行了一个α倍的缩放和β大小的偏移。原创 2023-07-21 15:18:06 · 1989 阅读 · 1 评论 -
Unity Shader入门精要 第五章——shader代码基本结构、一个简单的顶点/片元着色器
Pass语句也可以进行状态设置,在SubShader里面的状态设置会影响所有的Pass语句,在Pass语句里面的状态设置只会影响该Pass语句。比如我做了一个效果,但是不知道用什么颜色比较好,我就可以在里面声明一个Color类型的属性,这样我在Unity的材质面板就可以随时更改,而不用跑到shader里面来更改。不同的显卡配置、能力不一样,有些显卡可能不支持一些SubShader的内容,如果所有的SubShader都不支持的话,Unity就会使用Fallback语义指定的Unity Shader。原创 2023-07-16 12:43:51 · 327 阅读 · 1 评论