Unity3D Shader编程 原文链接:
http://blog.csdn.net/zhmxy555/article/category/2681301
今天看完了第二篇博客,然后实现了一下博客中的内容。
Subshder的结构
首先是接着上文,讲了一下Subshder的结构。前一篇文章已经说到Subshader中可以有一个或多个Pass。Pass块中可以写的内容如下:
Color Color 颜色
Material { } 材质块 定义材质属性
Lighting On | Off 开启/关闭光照
SeparateSpecular On | Off 开启/关闭独立镜面反射
ColorMaterial AmbientAndDiffuse | Emission
使用每顶点的颜色替代材质中的颜色集。AmbientAndDiffuse 替代材质的阴影光和漫反射值;Emission 替代 材质中的光发射值。
其中Material块中可以写的内容如下:
DiffuseColor(R,G,B,A) 漫反射颜色构成
AmbientColor(R,G,B,A) 环境色颜色构成
SpecularColor(R,G,B,A) 对象反射高光的颜色
ShininessNumber 加亮时的光泽度
EmissionColor 自发光颜色
而打在对象上的完整光照颜色最终是:
FinalColor = Ambient * RenderSettings ambientsetting +(Light Color * Diffuse + Light Color *Specular) + Emission
翻译过来的中文式子便是:
最终颜色=环境光反射颜色* 渲染设置环境设置 *(灯光颜色*漫反射颜色+灯光颜色*镜面反射颜色)+自发光
简单的Shader示例
博客上有很多示例,由简单到复杂,讲的很清楚。这里只粘一个光照材质完备版的代码,并附上注释。
其中,涉及到的纹理混合的知识,后面会讲解。
另外,晚上读了一点上次提到的《猫都能学会的Unity3D Shader入门指南》,发现内容还是蛮多的,所以准备以博客为主,这篇文章就当做参考。下面是一些博客上没有,或者之前没有get到的点的摘抄:
1.Shader(着色器)实际上就是一小段程序,它负责将 输入的Mesh(网格)以指定的方式 和 输入的贴图或者颜色等 组合作用,然后输出。
(这句话开始咋读都没读懂,做个断句……)
2.属性中的{option},它只对2D,Rect或者Cube贴图有关,当我们需要打开特定选项时可以把其写在这对花括号内。如果需要同时打开多个选项,可以使用空格分隔。可能的选择有ObjectLinear, EyeLinear, SphereMap, CubeReflect, CubeNormal中的一个,这些都是OpenGL中TexGen的模式,具体的留到后面有机会再说。
吸一口再走吧~