Shader(顶点片段着色器)

来源:互联网 发布:二维数组元素的排序 c 编辑:程序博客网 时间:2024/05/16 00:48
//第一种Shader "VRShader/DiffuseShader"{Properties{_Color("MainColor", Color) = (1, 1, 1, 1)}SubShader{Pass{CGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"//顶点着色器输入结构struct appdata{float4 vertex : POSITION;//顶点位置float3 normal : NORMAL;//法线向量坐标};//顶点着色器输出结构struct v2f{float4 position : SV_POSITION;//像素位置float3 normal : NORMAL;//法线向量坐标};//变量声明float4 _LightColor0;float4 _Color;v2f vert(appdata input){v2f output;//输出的顶点位置为模型视图投影矩阵乘以顶点位置,也就是将三维空间中的坐标投影到了二维窗口output.position = mul(UNITY_MATRIX_MVP, input.vertex);//获取顶点在世界空间中的法线向量坐标output.normal = mul(float4(input.normal, 0.0), unity_WorldToObject).xyz;return output;}fixed4 frag(v2f input) : COLOR{//获取法线的方向float3 normalDirection = normalize(input.normal);//获取入射光线的值与方向float3 lightDirection = normalize(_WorldSpaceLightPos0.xyz);//计算出漫反射颜色值  Diffuse=LightColor * MainColor * max(0,dot(N,L))float3 diffuse = _LightColor0.rgb * _Color.rgb * max(0.0, -dot(normalDirection, lightDirection));//合并漫反射颜色值与环境光颜色值float4 DiffuseAmbient = float4(diffuse, 1.0) + UNITY_LIGHTMODEL_AMBIENT;//将漫反射-环境光颜色值乘上纹理颜色,并返回return DiffuseAmbient;}ENDCG}}}//第二种Shader "VRShader/Rainbow_AdjustRGBValue"{properties{_ColorRValue("R",Range(0,1))=0.2_ColorGValue("G",Range(0,1))=0.2_ColorBValue("B",Range(0,1))=0.2}SubShader{Pass{CGPROGRAM#pragma vertex vert#pragma fragment frag//变量声明float _ColorRValue;float _ColorGValue;float _ColorBValue;//顶点输出结构体struct vertexOutput{float4 position:SV_POSITION;float4 color:TEXCOORD0;};//顶点函数vertexOutput vert(float4 vertexPos:POSITION){vertexOutput v;v.position=mul(UNITY_MATRIX_MVP,vertexPos);v.color=vertexPos+float4(_ColorRValue,_ColorGValue,_ColorBValue,0);return v;}//片段函数float4 frag(vertexOutput output):COLOR{return output.color;}ENDCG}}}//第三种Shader "VRShader/Rainbow_AdjustValue"{properties{_ColorValue("ColorValue",Range(0,1))=0.2}SubShader{Pass{CGPROGRAM#pragma vertex vert#pragma fragment frag//变量声明float _ColorValue;//顶点输出结构体struct vertexOutput{float4 position:SV_POSITION;float4 color:TEXCOORD0;};//顶点函数vertexOutput vert(float4 vertexPos:POSITION){vertexOutput v;v.position=mul(UNITY_MATRIX_MVP,vertexPos);v.color=vertexPos+float4(_ColorValue,_ColorValue,_ColorValue,0);return v;}//片段函数float4 frag(vertexOutput output):COLOR{return output.color;}ENDCG}}}//第四种Shader "VRShader/Vertex&Fragment&Rainbow"{   Properties   {      }   SubShader   {   Pass   {   CGPROGRAM#pragma vertex vert//顶点函数声明#pragma fragment frag//片段函数声明//顶点函数输出结构体struct vertexOutput{float4 position:SV_POSITION;//像素坐标位置float4 color:TEXCOORD0;//0级纹理坐标};//顶点函数vertexOutput vert(float4 vertexPos:POSITION){//声明结构体vertexOutput v;//顶点坐标变换v.position=mul(UNITY_MATRIX_MVP,vertexPos);//设置顶点颜色v.color=vertexPos+float4(0.2,0.2,0.2,1);//返回结果return v;}//片段函数float4 frag(vertexOutput output):COLOR{//返回颜色值return output.color;}ENDCG   }   }}//第五种Shader "VRShader/Vertex&Fragment&SingleColor"{Properties{_Color("Color",color)=(1,1,1,1)}SubShader{//Pass通道Pass{CGPROGRAM#pragma vertex vert//顶点函数声明#pragma fragment frag//片段函数声明float4 _Color;//顶点函数//vertexPos顶点坐标位置(语义绑定POSITION)//返回值float4像素坐标位置(语义绑定SV_POSITION)float4 vert(float4 vertexPos:POSITION):SV_POSITION{return mul(UNITY_MATRIX_MVP,vertexPos);}//返回值(语义绑定COLOR颜色)float4 frag():COLOR{//Hard Coding 硬编码//return float4(1,0,0,1);return _Color;}ENDCG}}}

0 0