Shader山下
文章平均质量分 86
想要学习Shader却不知从何入手?想要入门总得先找对门。本系列着重于介绍Shader的基础知识,希望可以给您入门Shader带来帮助。
凯奥斯
可能是最不会写注释的程序员。
展开
-
Shader山下(二十七)平面阴影
以下摘录自《Unity 3D ShaderLab开发实战详解》,第10章。 转注:这是一个非常简单且廉价的实时假阴影,比较常用到,据我所知,王者荣耀中就使用了类似的手法。缺点就是比较假,只能投射到平面上,不能应对地面的凹凸,最明显的问题就是会插到墙里去。原创 2017-12-09 11:56:31 · 1365 阅读 · 1 评论 -
Shader山下(二十六)Forward渲染路径中的灯光信息
以下摘录自《Unity 3D ShaderLab开发实战详解》,7.7.1-7.7.2。转载 2017-12-07 20:59:51 · 865 阅读 · 0 评论 -
Shader山下(二十五)顶点照明中的灯光信息
以下摘录自《Unity 3D ShaderLab开发实战详解》,6.4.7-6.4.8。顺便吐槽自己:时隔一年多之后的更新。转载 2017-12-07 20:01:00 · 722 阅读 · 0 评论 -
Shader山下(二十四)相机深度纹理
相机可以生成深度和深度法线纹理,以及运动向量纹理(需要Unity5.4以上)。我们可以使用这些纹理来实现屏幕后处理效果。当你需要某种纹理的时候,可以为Camera的depthTextureMode添加以下变量:DepthTextureMode.Depth深度纹理DepthTextureMode.DepthNormals一个包含深度和视图空间法线的纹理原创 2016-11-09 21:48:30 · 4118 阅读 · 0 评论 -
Shader山下(二十三)GrabPass与UsePass
通道(Pass)是子着色器(SubShader)的组成部分,每个Pass代表对象被渲染一次。本文要介绍的是两种特殊的Pass:GrabPass和UsePass。GrabPass用于获取当前屏幕的纹理(Texture)。UsePass实际上不是Pass,而是调用其他的Pass的指令。原创 2016-11-08 21:45:57 · 4813 阅读 · 0 评论 -
Shader山下(二十一)多重变体(Multiple Variants)
Shader山下(二十)编译指令(Compilation Directives)介绍了如何使用编译指令,本文就专文介绍一下多重编译(multi_compile)指令。我们可以使用multi_compile来为shader创建多个稍微有点区别的shader变体。这个Shader被称为宏着色器(mega shader)或者超着色器(uber shader)。实现原理:根据不同的情况,使用不同的预处理器指令,来多次编译Shader代码。原创 2016-10-21 23:34:08 · 6167 阅读 · 0 评论 -
Shader山下(二十)编译指令(Compilation Directives)
Shader中,编译指令分为两种,一种是常规的编译指令,也就是顶点片元着色器(Vetex & Fragment Shader)使用的编译指令,另一种就是表面着色器(Surface Shader)使用的编译指令。二者都使用#pragma语句来编写,并且都需要写在CGPROGRAM和ENDCG之间。区别在于,VF编译指令写在Pass里面,而表面着色器编译指令写在SubShader里面,表面着色器会自行编译到多通道里去,并且需要使用#pragma surface …指令来标识这是一个表面着色器。原创 2016-10-21 11:01:18 · 4173 阅读 · 0 评论 -
Shader山下(十九)标记Tag
Unity Shader里的Tag分为两种,一种是子着色器(SubShader)Tags,一种是通道(Pass)Tags。我们使用Tag告诉渲染引擎我们期望什么时候渲染这些子着色器或者通道,以及怎么样渲染(既然是期望,那么渲染引擎也可能不答应,那么就靠Fallback了)。原创 2016-10-20 10:58:33 · 2346 阅读 · 0 评论 -
Shader山下(十八)混合(Blend)命令
混合(Blend)被用于创建透明的对象。渲染图像时,当所有的着色器执行完并且所有的纹理都被应用之后,像素点会被写入屏幕。如何将这些像素与已有图像进行组合?我们就需要使用混合命令来告诉GPU混合的方式。原创 2016-10-19 23:14:46 · 22107 阅读 · 0 评论 -
Shader山下(十七)语义Semantic
当在编写Cg或者HLSL着色器程序的时候,我们需要使用语义(Semantic)来指明输入输出变量的“意图”。原创 2016-10-18 14:34:15 · 3874 阅读 · 0 评论 -
Shader山下(十六)坐标空间与转换矩阵
模型空间(model space)也称为对象空间(object space)或局部空间(local space)是指以模型原点为原点的坐标系。世界空间(world space)也称全局空间(global space)是以世界原点为原点的坐标系,世界坐标也就是Unity3D里的绝对坐标。观察空间(view space)也称摄像机空间(camera space)是以摄像机为原点的坐标系。(这是原创 2016-10-17 13:47:48 · 7263 阅读 · 1 评论 -
Shader山下(十五)标准库函数
Cg提供了一组内置函数来简化Shader编程,这些内置函数会映射到一个专门的GPU指令,因此使用标准库一般会比自己编写的函数更快并更准确。原创 2016-10-15 19:37:28 · 2165 阅读 · 0 评论 -
Shader山下(十四)顶点片段着色器处理光照
Shader山下(二)光照模型——漫反射里介绍了如何为表面着色器添加光照模型,但是在顶点片段(vertex-fragment)着色器里如何处理光照呢?本文就实现一个与内置Lambert光照模型相同效果的VF着色器。原创 2016-10-14 09:06:22 · 3082 阅读 · 0 评论 -
Shader山下(十三)边缘发光
在很多游戏中,都会让出现模型边缘发光的效果,本文就用表面着色器实现一个简单的边缘发光的效果。原创 2016-10-13 21:36:20 · 2252 阅读 · 1 评论 -
Shader山下(十二)材质属性绘制器
Unity5增加了一个叫MaterialPropertyDrawer的东西,可以使用它们标记在shader的Properties里面,扩充shader的一些参数在编辑器上的样式。本文以Shader山下(十一)纹理混合中的shader为例子,来介绍一下这些标记。原创 2016-10-12 22:11:30 · 1934 阅读 · 0 评论 -
Shader山下(十一)纹理混合
Shader山下(八)片段着色器介绍了如何编写片段着色器,本文就使用它实现纹理混合效果。原创 2016-10-12 13:57:18 · 2749 阅读 · 1 评论 -
Shader山下(十)表面着色器的顶点函数
对于每个顶点,GPU都会执行一次顶点函数,顶点函数的任务就是从3D局部空间或者transform得到的顶点转换到2D屏幕。我们可以使用顶点函数修改顶点的一些参数,例如顶点位置、顶点颜色和UV坐标。修改过这些参数之后,会将它们传递给surf函数。原创 2016-10-12 08:59:30 · 3098 阅读 · 0 评论 -
Shader山下(九)立方体反射【后编】
Shader山下(七)立方体反射【前编】里介绍了如何使用Cubemap来模拟环境反射,本文就再介绍一下其他两个应用。首先介绍立方体反射与法线贴图(Shader山下(四)法线贴图)的结合。我们还可以将立方体反射和镜面高光(Shader山下(六)镜面高光)结合起来。原创 2016-10-11 21:58:47 · 1898 阅读 · 0 评论 -
Shader山下(八)片段着色器
Shader可以分为两类:表面着色器(Surface Shader) - 为你做了大部分的工作,只需要简单的技巧即可实现很多不错的效果,但也显示了部分功能。片段着色器(Fragment Shader) - 可以做的事情更多,但是也比较难写。使用片段着色器的主要目的是可以在比较低的层级上进行更复杂(或者针对目标设备更高效)的开发。原创 2016-10-11 13:29:50 · 2190 阅读 · 3 评论 -
Shader山下(七)立方体反射【前编】
反射着色器可以获取外界的场景信息,并将它们反映到材质表面来模拟周围环境。本文就要实现一个模拟反射的着色器,这里我们需要使用Cubemap来完成这个功能。原创 2016-10-10 09:09:09 · 971 阅读 · 0 评论 -
Shader山下(六)镜面高光
Shader山下(二)光照模型中介绍了漫反射的光照模型,漫反射是投射在粗糙表面上的光向各个方向反射的现象。与之相对的是镜面反射,也就是当平行入射的光线射到这个反射面时,仍会平行地向一个方向反射出来的现象。原创 2016-10-09 09:01:56 · 4308 阅读 · 0 评论 -
Shader山下(五)使用表面着色器实现透明材质
Unity中的表面着色器(Surface Shaders)是一种代码生成的方法,它比底层的顶点(vertex)/像素(pixel)着色程序更容易编写出受光照的着色器。前几篇中,我们使用的就是表面着色器,参考Shader山下(一)第一个Shader。不过他们都是不透明的着色器,那么怎样编写一个透明的着色器呢?方法很简单,这里简单介绍一下。原创 2016-10-08 21:30:41 · 4809 阅读 · 1 评论 -
Shader山下(四)法线贴图
法线向量表示某个点上垂直于该点的向量,而法线贴图(Normal Map)就是保存这些法线的贴图。实际应用中,经常使用法线贴图为低模添加细节。原创 2016-10-08 09:01:25 · 1606 阅读 · 0 评论 -
Shader山下(三)逐帧动画
逐帧动画是一种常见的动画形式(Frame By Frame),其原理是在“连续的关键帧”中分解动画动作,也就是在时间轴的每帧上逐帧绘制不同的内容,使其连续播放而成动画。原创 2016-10-07 23:07:35 · 2097 阅读 · 0 评论 -
Shader山下(二)光照模型——漫反射
光照模型在shader中是一个非常重要的部分,主要用于对象表面某个光照位置的颜色计算。原创 2016-10-07 14:46:09 · 1747 阅读 · 1 评论 -
Shader山下(一)第一个Shader
学习Unity3D就得学Shader,然而新手学习Shader往往不知道从何处下手,没有找对门,谈何入门。本系列主要介绍Shader的一些基础知识,希望可以带你找对门,然后入得了门。原创 2016-10-06 18:08:49 · 4998 阅读 · 1 评论