Shader
小猴子的程序员
记录代码的点点滴滴
展开
-
Unity利用Shader将指定颜色的纹理转换成透明
Shader代码如下:// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'Shader "Custom/Forground" { Properties { _MainTex ("Base (RGB)", 2D) = "white" {} _Fo...原创 2018-03-06 23:07:57 · 2734 阅读 · 0 评论 -
Unity Shader入门教程(十) :多光源的光照处理以及光照衰减
首先,我们来了解渲染路径。之前我们在代码中设置标签:该标签表示告诉Unity,该Pass使用前向渲染中的ForwardBase路径。而前向渲染路径还有一种路径叫ForwardAdd,分别对应了下文说到的Base Pass已经Addtional Pass。这里我们将讨论最常用的前向渲染路径,即ForwardBase和ForwardAdd。而Pass的LightMode标签还支持如下的渲染路径...原创 2019-06-11 16:39:06 · 4614 阅读 · 2 评论 -
Unity Shader入门教程(八) :透明以及半透明效果
在Unity中一般使用两种方式来实现透明效果,即透明度测试和透明度混合。透明度测试:使用透明度测试只会产生2种结果,要么完全透明,要么完全不透明。原因是只要一个片元的透明度不满足条件(一般是小于某个阈值),那么它对应的片元就会被舍弃。被舍弃的片元将不会再进行任何处理,也不会对颜色缓冲产生任何影响;否则,就会按照普通的不透明物体的处理方式来处理它,即进行深度测试,深度写入等。也就是说,透明度测试...原创 2019-06-04 18:41:32 · 2233 阅读 · 0 评论 -
Unity Shader入门教程(九) :开启深度写入的半透明效果
在上篇文章有讲到实现透明度混合时需要关闭深度写入。而为了不造成错误的排序效果,渲染引擎一般都会先对物体进行排序,再渲染。常用的方法如下:(对于上篇文章shader代码中使用的渲染队列Transparent)先渲染所有不透明物体,并开启他们的深度测试和深度写入; 把半透明物体按他们距离摄像机的远近进行排序,然后按照从后往前的顺序渲染这些半透明物体,并开启他们的深度测试,但关闭深度写入;其实这...原创 2019-06-05 11:27:53 · 2602 阅读 · 1 评论 -
Unity Shader入门教程(七) :纹理遮罩
纹理遮罩用处很多,简单来讲就是允许我们可以保护模型中的某些区域不受某些因素的影响。例如我们有时希望模型表面某些区域的反光强烈一些,而某些区域弱一些。为了得到更加细腻的结果,我们需要用一张遮罩纹理来控制该光照。还有一些情况就是某些模型需要多张纹理混合时,此时使用遮罩纹理可以控制如何混合这些纹理。具体流程为:通过采样得到遮罩纹理的纹素值,然后使用其中某个或者几个通道的值来与某种表面属性进行相乘。当...原创 2019-05-30 17:31:13 · 317 阅读 · 0 评论 -
Unity Shader入门教程(五) :凹凸映射
凹凸映射就是使模型的纹理贴图看起来有凹凸不平的效果。一般主要有两种方式实现凹凸映射:高度纹理和法线纹理,但实际运用中一般结合这两种方式一起使用。高度纹理:用一张高度图实现凹凸映射。高度图中存储的是强度值,用于表现模型表面局部的海拔高度。因此,颜色越浅表明该位置的表面越向外凸起,而颜色越深表面该位置的表面越向里凹。这种方法的好处就是非常直观,但缺点是计算更加复杂,是通过计算像素的灰度值而得到的,...原创 2019-05-27 19:03:54 · 736 阅读 · 0 评论 -
Unity Shader入门教程(六) :渐变纹理
在了解了上篇教程后,实现渐变纹理就比较简单了。我们需要准备一张渐变图即可。渐变图的参考如下:需要注意的是,需要将该纹理的Wrap Mode设置为Clamp模式。这是因为在使用Repeat模式时在高光区域会产生一些黑点,如下这是由于浮点精度造成的,当我们使用fixed2(halfLambert,halfLambert)对渐变纹理进行纹理采样时,虽然理论上的值在[0,1],但可能会有1...原创 2019-05-30 11:44:50 · 660 阅读 · 0 评论 -
Unity Shader入门教程(四) :单张的纹理贴图
首先我们需要了解Unity中纹理的属性。在Unity中导入一张图片并设置为纹理类型时,可以看到如下属性:Alpha Source栏预选值分别代表:InputTextureAlpha表示该纹理需要带透明通道;FromGrayScale表示依据灰度产生alpha通道Alpha Is Transparen :当alpha用于透明处理时,我们要勾上该选项,可以防止不透明边缘锯齿现象Wrap...原创 2019-05-22 15:45:46 · 1812 阅读 · 0 评论 -
Unity Shader入门教程(三) :实现逐顶点和逐像素的漫反射效果
在利用shader实现漫反射这种基本光照效果时,我们需要先知道漫反射的计算公式:其中Clight为光照的强度和颜色,Mdiffuse为材质的漫反射系数,n为表面法向量,I为光源的方向。max操作是防止n和I的点积出现负数,控制其结果在[0,1]范围内。而在unity shader中有一些内置的参数可以直接获取到这个公式所用到的变量。光照的强度和颜色可以用_LightColor0这个变量...原创 2019-02-21 14:59:34 · 1168 阅读 · 0 评论 -
Unity Shader入门教程(二) :实现顶点和片元着色器之间的通信
这篇文章将介绍Pass{}内的代码的编写。我们先看如下Unity Shader代码:(此文部分采自《unity shader入门精要》)关于顶点着色器和片元着色器不懂的学习可以自行搜索概念的意思,这里就不介绍了。Shader "Custom/myTest" { SubShader { Pass{ CGPROGRAM //申明顶...原创 2018-10-16 17:41:48 · 648 阅读 · 0 评论 -
Unity Shader入门教程(一)
转载链接如下:https://www.cnblogs.com/JackSamuel/tag/%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B/Unity Shader是着色器,将纹理、网格信息输入,得到材质的一段程序,具体是个什么东西,还需要亲自实践才知道。一个Unity大神推荐我:如果要学计算机图形编程(游戏编程的基础),可以先学习UnityShader,往后再学习O...转载 2018-08-21 11:28:31 · 670 阅读 · 0 评论 -
Unity Shader入门教程(十一) :不透明物体的阴影
在计算阴影映射纹理时其中一种方法是:先把摄像机放置到光源的位置,然后按正常的渲染流程,即调用Base Pass和Additional Pass来更新深度信息,即得到阴影映射纹理。但这种方法会对性能造成一定的浪费,因为我们实际上仅仅需要深度信息而已,而Base Pass和Additional Pass中往往涉及很多复杂的光照模型计算。因此,Unity选择使用一个额外的Pass来专门更新光源的阴影映射...原创 2019-06-18 17:13:04 · 858 阅读 · 0 评论