Shader

unity shader之——着色器的组织和复用

我们经常使用#include 指令包含UnityCG.cginc。这个文件中包含了unity预定义的大量结构和函数,通过#include指令可以复用这些结构和函数,而不必每次都重新定义它们。我们可以定义自己的cginc文件,然后用#include指令包含该文件,实现着色器代码的复用。虽然包含了整个cginc文件,但unity只会在实际代码中包含被用到的cginc文件中的那部分代码。

unity shader之——分割物体效果(着色器分割物体的方法)

在很多打斗游戏中,经常能看到物体被撕碎或者打破的效果,这种效果比较直观,可以通过分割一个网格来实现,即在原来网格基础上,再算出一个新的网格,本章将介绍一种通过着色器分割一个物体的方法。

unity shader之——透明和半透明材质

SSS(sub-Surface Scattering,3S)的中文意思是次表面散射或称半透明材质。它适用于表现各种有次表面反射的材质,如透明橡胶、有机玻璃或玉石等。因为实时渲染是不可能做大量的运算来计算光的折射和反射的,所以SSS属于比较高级的材质范畴。

unity Shader——非真实感渲染:下篇(素描风格的渲染)

有篇著名的论文中提到过,使用了提前生成的素描纹理来实现实时的素描风格渲染,这些纹理组成了一个色调艺术映射,这些纹理笔触逐渐增多,用于模拟不同光照下的漫反射结果,从上到下对应了每张纹理的多级渐远纹理,这些纹理的生成并不是简单的对上一层纹理进行降采样,而是需要保持笔触之间的间隔,以便更真实的模拟素描效果。

unity Shader——非真实感渲染:上篇(卡通风格的渲染)

尽管游戏渲染一般都是以照相写实主义作为主要目标,但也有许多游戏使用了非真实感渲染(NPR)的方法来渲染游戏画面。非真实感的一个主要目标是,使用一些方法使得画面和某些特殊的绘画风格相似的效果,例如卡通、水彩风格等。

unity shader之——面积光:下篇(面积光源)

面积光其实就是一个长方形光线,是所有几何形体中最易计算的一类面积,这个例子中,面积光和线光源最大的不同是,面积光把空间分成了更多的区域。如果不考虑光源法线,一个长方形的面积光会把空间分成9个区域,共4种类型的照明条件。因此,对于面积光的计算,主要就是确定点落在了这9个区域内的哪一个区域,并使用相应的照明条件计算点的光照。

unity shader之——面积光:上篇(线光源)

面积光是具有形体的一类光源,不像点光源和平行光这类完全抽象化,没有形体的光源。面积光适用于表达柔和的自然光,如通过灯发出的光具有明显的几何形体光源。unity实现了面积光,但仅用于灯光烘焙,而在实时渲染中仍然无法使用面积光。

unity shader之——使用噪声:下篇(水波效果)

在模拟真实水面过程中,我们往往也会使用噪声纹理。此时噪声纹理通常会用做一个高度图,以不断修改水面的法线方向。为了模拟水不断流动的效果,我们会使用和时间相关的变量来对噪声纹理进行采样,当得到法线信息后,在进行正常的反射+折射计算,得到最后的水面波动效果。