3.计算机图形学之 Shader 定义 (顶点着色器)

材质球=人的衣服
shader : 决定材质跟灯光的作用。

shader 属性定义的通用格式:

Properties { Property [ Property ... ] } //(相当于一个类的公共变量)


Properties
{
	//定义一个Int:
	name("display name" , Int) = 1

	//定义一个Float:
	name("display name" , Float) = 1.0

	//定义一个Range (一个同数字滑块表示的变化范围,可为Int或Float类型)
	name("display name" , Range( 1 , 5 ) ) = 2

	//定义一个颜色 (4维表示),默认值为RGBA
	name("display name" , Color) = (1,1,1,1)

	//定义一个 4维数组,默认值为4D矢量
	name ("display name" ,  Vector ) = (1,1,1,1)

	//定义一个2D纹理 (Texture)
	//注:For 2D Textures, the default value is either an empty string, or one of the built-in default Textures: “white” (RGBA: 1,1,1,1), “black” (RGBA: 0,0,0,0), “gray” (RGBA: 0.5,0.5,0.5,0.5), “bump” (RGBA: 0.5,0.5,1,0.5) or “red” (RGBA: 1,0,0,0).
	name ("display name" , 2D ) = "white"()

	//定义一个 CubeMap (6个面的纹理 反射 或 天空盒)
	//Cube为空字符串时,为默认灰色(RGBA: 0.5,0.5,0.5,0.5),可创建cubeMap(有六个面的纹理)使用。
	name ("display name" , Cube ) = ""()

	//定义一个3D的纹理
	name ("display name" , 3D ) = ""()
}

name: 变量名字, 以下划线开头
disply name: 供外界 Unity 菜单栏显示
int/Float/Range: 变量类型
= 1/1.0/2: 默认值
3D纹理(限制):
1.只能用script创建
2.opengl3.0 及以上才支持

问题:为什么三维的世界,要用四维去表示?
答:将三元向量扩充到四元向量,可以用来区分空间向量和空间点的数学表达;此外,在此基础上通过四阶矩阵运算,将空间点的平移、旋转、缩放等操作全部统一到矩阵的乘法运算中。

Shader1.0能操作的只有以下三部分:

一、顶点 着色器:

  1. 计算顶点的颜色
  2. 顶点变换
  3. 灯光的作用

二 、片段着色器:

  1. 纹理采样。(贴纹理)

三、三大测试:
3.计算机图形学之 Shader 定义 (顶点着色器)_第1张图片

第一点:顶点着色器详细讲解:

Shader "TestShader/Vertex"
{
	Properties
	{
		_MainTex("Texture",2D) = "white"()
        _TestColor("Texture",Color) = (0.1.0.1)
	}
	SubShader
	{
		Pass
		{
			//Color(0,1,0,1)
            Color[_TestColor]
            Material
            {
            //Diffuse(1,1,1,1) // 灯光的漫反射与材质如何作用
            Diffuse[_TestColor]
            //环境光设置
            Ambient[_TestColor]
            //高光设置 需要打开高光开关
            Specular[_TestColor]
            //自发光设置
            Emission[_TestColor]
            }
            //高光开关(只对高光起作用)
            SeparateSpecular On
            //灯光总开关(对所有光起作用)
            Lighting On
		}
	}
}

调节 顶点的颜色:
_TestColor(“Texture”,Color) = (0.1.0.1)

  1. Color(0.1.0.1)
  2. Color[ _TestColor]

shader1.0 灯光计算公式:

Ambient * Lighting Window’s Ambient Intensity setting + (Light Color * Diffuse + Light Color * Specular) + Emission

Ambient: 环境光
Diffuse: 满反射光
Specular: 镜面反射
Emission : 自发光
Light Color: 灯光颜色
Lighting On : 灯光的总开关
SeparateSpecular On : 高光开关

你可能感兴趣的:(#,千锋Unity3d图形学笔记)