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编程
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"
}
显示如下图:
相关文章推荐
- Unity shader 官网文档全方位学习(一)————Surface Shaders基础及Examples详尽解析
- [UnityShaderCookbook 读书笔记] [01] Unity Shader 基础
- Unity Shader之剔除、深度测试、alpha测试基础示例
- Unity Shader入门精要笔记(九):Unity 的基础光照——漫反射的实现
- UnityShader入门精要学习笔记(九):基础纹理之渐变纹理与遮罩纹理
- unity基础开发--shader基础知识
- Unity Shader入门基础
- Unity Shader 基础知识
- Unity Shader 基础(4) 由深度纹理重建坐标
- Unity Shader学习笔记:基础数学
- 【Unity】Shader编程 基础总结
- Unity Shader 之一 语法基础
- [Unity基础]从“漫反射光照模型”了解Unity Shader渲染原理
- Unity Shader入门精要学习笔记 - 第4章 学习 Shader 所需的数学基础
- 【Unity】Shader编程 基础总结
- 【Unity】Shader编程 基础总结
- Unity Shader学习5 —— Cg语言的基础
- Unity Shader基础(2)--shader的结构解析
- Unity Shader入门精要笔记(二):Unity Shader基础
- unity shader:数学基础