基础知识:MeshFilter 存储一个mesh(网格,模型网格,模型由哪些三角面组成,组成什么样子的模型,三角面的一些顶点信息)
MeshRender 根据MeshFilter 存储的三角面顶点信息 用来渲染一个模型的外观,就是样子,按照Mesh ,Material给他颜色和皮肤,控制模型渲染的样子。
Material是由 :
贴图 (可以没有,可以是由纯色组成)
shader
Opengl 和 DirectX :shader可以认为是一只渲染命令,由opengl和dx进行解析,来控制渲染丰富多彩的图形
GLSL shader语言用于 Opengl
HLSL shader语言用于 DX
CG语言(跨平台)
Unity Shader 得分类:
使用Shaderlab编写unity中的shader;
1.表面着色器surface shader;
2.顶点/片元着色器 Vertex/Fragment shader
3.固定函数着色器(已弃用);
基本代码架构:
Shader "myshader"{//这里指定shader的名字,不要求跟文件名保持一致
Properties{
//属性(编程时使用) 显示类型(面板上显示) 类型(系统默认不可以写错) = 默认值
//属性中不用分号
_Color("Color",Color) = (1,1,1,1)//对应float4
_Vector("Vector",Vector) = (1,2,3,4)//对应float4
_Int("Int",Int) = 234//对应float
_Float("Float",Float)=0.12//对应float
_Range("Range",Range(1,11))=6//对应float
//对应sampler2D
_2D("Texture",2D) = "white"{}//没有选择图片 默认选择第一个纯色
//对应samplerCube
_Cube("Cube",Cube) = "white"{}//立方体贴图
//对应sampler3D
_3D("3D Texture",3D) = "white"{}//3d纹理贴图
}
SubShader{
//SubShader可以写多个 显卡运行效果的时候,从第一个SubShader开始,如果第一个sub的效果都可以实现,就用第一个,如果发现这里面某些效果实现不了他会自动去运行一下个
//至少有一个Pass
Pass{
//在这里编写shader代码
CGPROGRAM
//使用CG语言编写代码
float4 _Color;//用到的 值 需要重新定义
float4 _Vector;//可以用 half4 fixed4 代替
float _Int;
float _Float;
float _Range;
sampler2D _2D;
samplerCube _Cube;
sampler3D _3D;
//float 32位来存储
//half 16位来存储
//fixed 11位来存储 -2到 +2 一般颜色都进行fixed来存储
ENDCG
}
}
Fallback "VertexLit"//以上的sub都用不了的时候 给显卡指定一个能用的
}
一些基础属性:
_Color("Color",Color) = (1,1,1,1)//颜色
_Vector("Vector",Vector) = (1,2,3,4) //向量
_Int("Int",Int) = 234//整型
_Float("Float",Float)=0.12//浮点数
_Range("Range",Range(1,11))=6//滑动栏
_2D("Texture",2D) = "white"{}//没有选择图片 默认选择第一个纯色
_Cube("Cube",Cube) = "white"{}//立方体贴图
_3D("3D Texture",3D) = "white"{}//3d纹理贴图