Unity3D|Unity3D表面着色器(Surface Shader)资料整合

一、Shader 表面着色器语法
Unity 的表面着色器 (Surface Shader) 是一种代码生成方法,用它来编写光照着色器比用低级的顶点/像素着色器程序容易得多


二、编写一个灰度效果的Shader


三、Shader 内置 Shader 之 Normal-Diffuse
Normal-Diffuse 是一个简单的光照模型,光照强度随着物体表面和光入射角夹角的减小而减小。光照强度只和入射角度有关,与摄像机无关。


四、Shader 内置 Shader 之 Bumped Diffuse 学习
Bumped Diffuse 基于 Lambert 光照模型,同时使用了 normal mapping 技术来增加物体表面细节。相对于通过增加剖分来表现物体表面细节的方式,normal mapping 并不改变物体的形状,而是使用一张称为 Normal Map 的特殊纹理来达到这种效果。在 normal map 中,每个象素的颜色代表了该像素所在物体表面的法线,然后通过这个法线(而不是通过物体模型计算而来的法线)来计算光照。可以说 Normal Map 在计算光照的过程中“高效地修改”了整个模型。


五、Shader 内置 Shader 之 Vertex Lit 学习
最简单的一种Shader之一,所有照射在该物体上的光在一个Pass里面渲染完,光源只在顶点计算。所以不会有任何基于像素渲染得效果


六、Shader 内置 Shader 之 Specular 学习
Specular 使用和 Diffuse 相同的光照模型,但是它添加了一个和观察角度相关的反射高光。一个被称为 Blinn-Phong 的光照模型。这个光照模型包含了一个反射强光,使它与物体表面角度,光的入射角度以及观察者角度都有关系。实际上这种高光计算方法是对实时光源模糊反射的一种具有可行性的模拟。模糊的等级通过 Shininess 变量控制。


七、Shader 内置 Shader 之 Bumped Specular 学习
和 Specular 一样的光照模型,相比 Specular 而言,它额外使用一张 Tangent Space Normal Map 纹理贴图来描述物体表面法向量的变化以及增加物体表面的细节。一般而言,这个 shader 的渲染代价会比较大。


八、Shader 内置 Shader 之 Diffuse Detail 学习
这是一个普通的 diffuse shader 加上一些额外数据的 shader。它允许你定义第二张纹理,称为 Detail Texture。当 Camera 靠近时,Detail Texture 逐渐显示出来,这个着色器一般用于地形。Detail 纹理是覆盖在主纹理上面的。Detail 纹理中深色的部分将会使得主纹理变深,而淡色的部分将会使主纹理变亮,Detail 纹理通常是浅灰色。(与Decal 里面 Decal 纹理不同的是,Decal 纹理是 RGBA,通过 alpha 控制 Decal Texture 与 Main Texture 的融合,而 Detail 的纹理是 RGB,直接是两张纹理的 rgb 通道分别相乘再 *2,就是说,Detail 纹理中颜色数值等于 0.5 时不会改变主纹理颜色,大于 0.5 时会变亮,小于 0.5 时会加深)
【Unity3D|Unity3D表面着色器(Surface Shader)资料整合】

九、Shader 内置 Shader 之 Parallax Diffuse 学习
Parallax Normal mapped 与传统的 normal mapped 一样,但是对“深度”的模拟更佳。额外的深度效果是通过 Height Map(高度图)来实现的。Height Map 在 Normal map 的 alpha 通道里面保存。

    推荐阅读