基础知识: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;
扫描二维码关注公众号,回复:
1113433 查看本文章
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纹理贴图