Shader学习笔记(三)

来源:互联网 发布:护士资格考试视频软件 编辑:程序博客网 时间:2024/05/17 09:10
Shader"MyShader/Demo2"{Properties{}SubShader{Pass{CGPROGRAM//顶点函数 这里只是声明了顶点函数的函数名#pragma vertex vert//片源函数 这里只是声明了片源函数的函数名#pragma fragment frag//POSITION (Shader中的语义说明,把顶点坐标传递给v)相当于每一个顶点坐标都会调用这个函数,把顶点坐标转换为剪裁控件坐标float4 vert(float4 v : POSITION) : SV_POSITION{//参数后面跟的语义表示对参数的解释说明,括号后的语义表示对返回值的解释说明//SV_POSITION这个予以用来解释返回函数,意思是返回值是剪裁空间下的顶点坐标//计算矩阵和向量相乘float4 pos = UnityObjectToClipPos(v);//这里我本来写的是mul(UNITY_MATEIX_MVP,v),这是一个矩阵的宏,把一个坐标和一个矩阵相乘,unity将这个函数自动转化成了新的函数return pos;}fixed4 frag():SV_Target {//SV_Target语义:返回值就是处理模型对应到屏幕中每一个颜色return fixed4(0.5,0.5,1,1);}ENDCG}}FallBack "VertexLit"}


顶点函数的基本作用:
模型是由一个个三角面组成的,mesh中存储了模型每个三角面的顶点信息,顶点信息就是模型的顶点坐标,顶点坐标是相对于模型的中心来说的,以自身的中心,(不一定是模型的正中心,是建模的时候的中心),也就是模型空间的坐标系。
将顶点从模型空间转换到剪裁空间。将模型转换到屏幕视野中。(从游戏环境转换到视野相机屏幕上)


片源函数:
处理模型对应到屏幕中每一个像素(返回模型对应屏幕上的每一个像素的颜色值)


UnityCG.cginc中一些常用的函数

//摄像机方向(视角方向)
float3 WorldSpaceViewDir(float4 v)  根据模型空间中的顶点坐标 得到 (世界空间)从这个点到摄像机的观察方向
float3 UnityWorldSpaceViewDir(float4 v) 世界空间中的顶点坐标==》世界空间从这个点到摄像机的观察方向
float3 ObjSpaceViewDir(float4 v) 模型空间中的顶点坐标==》模型空间从这个点到摄像机的观察方向
//光源方向
float3 WorldSpaceLightDir(float4 v) 模型空间中的顶点坐标==》世界空间中从这个点到光源的方向
float3 UnityWorldSpaceLightDir(float4 v) 世界空间中的顶点坐标==》世界空间中从这个点到光源的方向
float3 ObjSpaceLightDir(float4 v) 模型空间中的顶点坐标==》模型空间中从这个点到光源的方向
//方向转换
float3 UnityObjectToWorldNormal(float3 norm) 把法线方向 模型空间==》世界空间
float3 UnityObjectToWorldDir(float3 dir) 把方向 模型空间=》世界空间
float3 UnityWorldToObjectDir(float3 dir) 把方向 世界空间=》模型空间


阅读全文
0 0