您的位置:首页 > 移动开发 > Unity3D

Unity Shader基础

2017-03-16 17:42 369 查看
本文分享在学习编写shader过程中的语法知识
由于我觉得我在代码中的注释很详细了,在这里我就直接贴代码,可以根据代码和注释了解shader编程
Shader "LJL/ShaderText"//shader路径,不一定和shader文件名保持一致
{
Properties//属性
{
_Color("Color",Color)=(0,0,0,0)
}

//子shader,一个shader文件可以有多个SubShader,显卡运行时,从第一个SubShader开始运行,如果不能运行则运行第二个,以此类推,倘若都无法运行成功,则运行FallBback里Unity自带的shader
SubShader
{
Pass
{
CGPROGRAM//在这里编写CG代码,如果是GLSL就写成GLSLPROGRAM;SLHL写成SLHLPROGRAM,语法大致和C语言类似

fixed4 _Color;//变量的定义

//声明顶点函数,声明顶点函数的函数名
#pragma vertex vert

//声明片元函数,声明片元函数的函数名
#pragma fragment frag

struct S1
{
float4 selfPosition:POSITION;//Unity的模型顶点赋值
float3 selfNormal:NORMAL;//Unity的模型法线方向赋值
float4 texcoord:TEXCOORD0;//Untiy该模型第一张纹理贴图赋值
};

struct S2
{
float4 position:SV_POSITION;//屏幕顶点信息
float3 temp:COLOR0;//这个语义用于数据存储,比如在vert函数上存放,frag函数上调用
};

//顶点函数:通过语义告诉系统,需要获得模型顶点,最后将模型顶点转换为剪裁顶点并赋值给语义告诉系统显示在屏幕上
//POSITION语义作用是从Unity获取模型顶点
//SV_POSITION作用是模型在屏幕上的位置信息
S2 vert(S1 s1)
{
S2 s2;
s2.position=mul(UNITY_MATRIX_MVP,s1.selfPosition);
s2.temp=s1.selfNormal;//函数间数据传递

//mul是一个矩阵转化函数,UNITY_MATRIX_MVP是一个宏,通过这个参数,进行模型空间到剪裁空间的转换
return s2;
}

//片元函数:返回一个颜色值并赋值给SV_Target语义
//SV_Target语义作用是确定屏幕上每个像素点的颜色信息
fixed4 frag(S2 s2):SV_Target
{
return fixed4(s2.temp,0)*_Color;
//return fixed(0,0,0,0);
}

ENDCG
}
}

Fallback"Diffuse"
}
显示如下图:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  shader