您当前的位置: 首页 > 

幻世界

暂无认证

  • 4浏览

    0关注

    237博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Shader基础《九》 基本的顶点片元着色器

幻世界 发布时间:2020-06-28 16:46:23 ,浏览量:4

简单的顶点/片元着色器 

// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'


Shader "a幻世界/顶点片元着色器"
{
	//暴露在外面的属性栏
	Properties{
    //声明一个color属性
	_Color("Color",Color) = (1,1,1,1)
	}
	//针对显卡a的shubshader
	SubShader{
				Pass{
		            //设置渲染状态和标签
		            
		            //开始CG代码片段
					CGPROGRAM
					#pragma vertex vert
					#pragma fragment frag
			        //为了在cg代码段访问_Color属性,我们必须在这里定义一个跟Properties里面相对应的变量,名称和类型必须一致
					float4 _Color;
	                //使用一个结构体来定义顶点着色器的输入
					struct a2v {
							float4 pos:POSITION;//用模型空间的顶点填充pos变量
							float4 color:COLOR0;//用模型空间的颜色填充color
							float4 normal:NORMAL;//用模型的法线方向填充normal变量
							float4 texcoord:TEXCOORD0;//用模型的第一套纹理坐标填充texcoord变量

						};
					//使用一个结构体来定义顶点着色器的输出,在顶点着色器跟片元着色器之间传递信息
					struct v2f {
							float4 pos:SV_POSITION;//SV_POSITION语义告诉unity,pos里面包含了顶点在裁剪空间里的位置信息
							float4 color:COLOR0;//COLOR0语义存储颜色信息
					    };
					//写一个输出模型空间信息输出裁剪空间信息的函数
					v2f vert(a2v v) {
						v2f o;//创建一个顶点着色器输出的结构体
						o.pos = UnityObjectToClipPos(v.pos);//把模型空间的顶点位置转换到裁剪空间的位置
						o.color = v.normal*0.5f + fixed4(0.5, 0.5, 0.5,0.5);//把模型空间的法线方向分量[-1,1]映射到裁剪空间传递给片元着色器
						return o;
					}
					//片元着色器接收到顶点信息后通过插值把颜色渲染到屏幕上
					float4 frag(v2f i):SV_Target{
						float4 c = i.color;
						c *= _Color.rgba;
						return fixed4(c);
					}
					ENDCG
                }
		        //其他需要的pass
    }
		
		Fallback "Diffuse"
}
关注
打赏
1660704426
查看更多评论
立即登录/注册

微信扫码登录

0.3151s