学习教材:《UnityShader入门精要》——冯乐乐 部分计算图例为《UnityShader入门精要》书中截图 代码和实例截图均为实际操作运行结果 渲染流水线 渲染流水线从概念部分分为三个部分: 应用阶段 应用阶段为开发者完全控制部分,主要提供渲染所需要的渲染数据,输出为渲染图元,该阶段可以细分为: 加载渲染数据(HDD-->RAM-->VRAM) 设置渲染状...

Unity Shader入门教程(一)

Shader

  

2019-08-10 02:21:19

转载链接如下:https://www.cnblogs.com/JackSamuel/tag/%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B/ Unity Shader是着色器,将纹理、网格信息输入,得到材质的一段程序,具体是个什么东西,还需要亲自实践才知道。一个Unity大神推荐我:如果要学计算机图形编程(游戏编程的基础),可以先学习UnityShader,往后再学习Op...

在实现该模型之前,我对shader和计算机图形学的知识可谓是空白,但是立志成为伟大游戏设计师的我又怎么能放弃对梦想的探寻,在网上寻找相应的课程,恰好看到一篇关于Shader入门的教程,学完之后觉得有所收获,这里记录也顺便分享给大家。一个基础的Shader编程,实现高光漫反射模型。 在正式编写shader代码前,我们首先得对一些基础知识做相应的了解,这里涉及到GPU的渲染流程和Shader编程的数学...

噪声的使用会使结果充满随机性,从而表现效果更加自然。 消融效果 消融效果常在游戏中角色死亡,物品烧毁中被使用。消融效果往往从不同区域开始,并向看似随机的方向进行扩张,最后整个物体都消失不见。消融效果可以通过噪声纹理+透明度测试去实现。使用对噪声纹理进行采样的结果与某个控制消融效果的阈值进行比较,小于阈值,使用clip函数将该像素点裁剪掉,对应被烧毁的部分,而边缘部分的烧焦效果则将两种颜色进行混合,...

Shader笔记十七 卡通渲染

shader

  

2019-11-27 06:45:02

卡通风格渲染的游戏画面通常物体颜色分界明显,具有黑色的线条描边。卡通渲染的实现有多种方法,基于色调的着色技术是其中之一,实现过程中通过使用漫反射系数对一维纹理进行采样,控制漫反射色调。之前通过一张渐变纹理来控制漫反射颜色实现过卡通风格的渲染效果。卡通风格的高光效果往往是一块分界明显的色块,而物体边缘通常会有描边。本节中将通过基于模型的方式进行描边,而不是之前的屏幕后处理的方式。 轮廓线渲染 轮廓线...

利用深度纹理实现运动模糊 之前实现的运动模糊是通过混合多张屏幕图像来模拟运动模糊。另一种实现运动模糊的方式是通过速度映射图,而且该方式应用更加广泛。速度映射图中存储每个像素的速度,使用该速度决定模糊的方向和大小。生成速度缓冲可以将场景中所有物体的速度渲染到一张纹理中,不过该方法需要修改场景中所有物体的Shader代码,使其添加计算速度的代码并输出到下一个渲染纹理中。 有一种方法是通过深度纹理在片元...

很多时候不仅需要当前屏幕的信息,同时希望得到深度和法线信息。例如在做边缘检测时,是直接根据渲染完后的屏幕图像的RGB值进行计算的,如果某些物体受到阴影的影响,那么检测结果就不一定准确。如果可以直接在深度纹理和法线纹理上进行边缘检测,那么就不会受到场景中的阴影的影响。 获取深度和法线纹理 首先深度纹理是一张纹理图,既然是一张纹理图,那么其值的范围是在[0,1]之间的,那么这个值的范围是如何转化得到的...

屏幕后处理是指渲染完整个场景得到屏幕图像后,再对屏幕图像做处理,实现屏幕特效。 实现屏幕后处理效果的关键在于得到渲染后的屏幕图像,Unity提供了对应的接口 OnRenderImage ,其函数声明 参数 src :源纹理,用于存储当前渲染的得到的屏幕图像 参数 dest :目标纹理,经过一系列操作后,用于显示到屏幕的图像 在OnRend...

该效果的首发在https://zhuanlan.zhihu.com/p/32131147 参考喵神的优化建议,自己对其中代码做了部分优化,自己实现的效果: 该效果的核心思想在与判断角色模型与场景中的“黑洞”的位置和距离关系,当两者距离到达一个阈值时,开始受到类似吸引的效果,实际上是将顶点向“黑洞“的方向靠近,若变化后的新顶点超过了”黑洞&...

Shader笔记十二 动画效果

shader

  

2019-11-27 07:42:21

动画效果 动画效果需要引入时间变量,Unity内置的时间变量: 这些时间变量可以用来实现纹理动画和顶点动画 纹理动画 序列帧动画 序列帧动画是通过依次播放一系列关键帧图像,当播放速度达到一定数值时,看起来就像是一个连续的动画。灵活性较强,通过一张包含关键帧的图像可以得到比较细腻的动画效果,缺点在于需要大量时间制作包含关键帧的图像。 关键帧实现的关键在于,每个时刻计算该时刻下应该播放的关键帧的位置 ...

Unity中的光照衰减 Unity在内部使用一张名为_LightTexture0的纹理来计算光源衰减,好处在于计算衰减不依赖于复杂的数学公式。 通常只会关心_LightTexture0对角线上的纹理颜色值,这些值表明了在光源空间中不同位置点的衰减值。(0,0)点表明了与光源位置重合的点的衰减值,(1,1)表明了在光源空间中所关心的距离最远点的衰减。 在对光照纹理进行采样得到光照衰减值之前,先得到光...

渲染路径&复杂光照 渲染路径(Rendering Path)决定光照如何应用到UnityShader中。为了获取场景中的光源数据,需要为每个Pass指定其渲染路径。5.0以后的版本中,Unity支持前向渲染(Forward Renddering Path)和 延迟渲染(Deferred Rendering Path)。系统默认情况下选择的是前向渲染路径,可以更改,同时若想使用多个...

最近在喵神的专栏里看到了这个实现方法: https://zhuanlan.zhihu.com/myashader 自己试着写了下看看效果,主要思想是在顶点着色器内根据光源,顶点和地面的位置关系,利用相似原理计算投影点,xz平面即为场景中的固定高度平面,即: 完整的计算思路大家也可以去参考喵神的专栏。 Shader完整代码: 实例效果: 只使用第一个Pass: 使用第二个Pass后: 这种阴影效果基...

使用两个Pass可以实现模型描边效果,一个Pass正常渲染图元,另一个Pass中剔除正面,并在裁剪空间对定点进行移动,移动的方向为顶点对应的法线方向,这样在经过逐片元操作后背面会生成面片,由于Pass按照顺序渲染,因此只有超出模型边缘的面片会显示出来,然后指定面片颜色,即可实现类描边效果。 实例代码: 实例效果: 这里值得注意的是,描边效果实际上在第二个Pass过后生成的是面片而非线条,这一点在模...