美文网首页
Unity_Shader着色器(顶点片段着色器)

Unity_Shader着色器(顶点片段着色器)

作者: Your_w | 来源:发表于2017-03-11 14:08 被阅读0次

//顶点片段着色器

//流程:

//1.首先,vertexprogram收到系统传递给它的数据模型

//2.然后把这些数据处理成我们后续需要的数据(至少包含顶点的位置信息)进行输出,其他的数据还有

//纹理的UV坐标,以及其他需要传递给fragment,program的数据

//3.系统对vertexprogram输出的顶点数据进行插值,并将插值结果传递给fragment,program

//4.最后,fragment,program根据这些插值结果计算成屏幕上显示的像素颜色

Shader"CustomLearn/Fourth"{

Properties{

_myColor("Color",color) = (1,1,1,1)

_outLine("OutLine",Range(0,1)) =0.1

}

SubShader{

//渲染不透明物体,渲染类型:非透明物体不受投影的影响

Tags{"Queue"="Geometry""RendererType"="Qpaque""IgnoreProject"="True"}

//第一通道

Pass{

CGPROGRAM

//告诉程序定义了一个顶点着色器

#pragmavertexvert

//告诉程序定义了一个片段着色器

#pragmafragmentfrag

//使用顶点和片段的CG时,需要引入头文件,相当于引入C#的命名空间

#include"UnityCG.cginc"

fixed4_myColor;

//定义vertextofragment结构体

//v2f表示:顶点程序到片段程序的信息传递,这里传递的是位置和颜色的参数

//顶点着色器将计算color并输出给片段着色器

structv2f{

//还有一些其他成员变量

//1.float4vertex:POSITION顶点/位置

//2.float3normal:NORMAL顶点法线

//3.float4texcoord:TEXCOORD0第一UV坐标

//4.float4texcoord:TEXCOORD1第二UV坐标

//5.float4tangent:TANGENT切线向量(一般用在法线贴图中)

//6.float4color:COLOR每个顶点的颜色

float4pos:SV_POSITION;

float3color:COLOR;

};

//顶点函数,参数是一个结构体返回值也是一个结构体

//appdata_full是UnityCG.cginc的结构体类型

//结构体里面的类型有:

//appdata_base:包含顶点位置,法线和一个纹理坐标

//appdata_full:包含顶点位置,切线,法线和两个纹理坐标

//appdata_tan:包含顶点位置,切线,法线和一个纹理坐标

//appdata_img:包含位置和一个纹理坐标

v2f vert(appdata_full v) {

v2f o;

//UNITY_MATRIX_MVP:当前模型视图投影矩阵

//UNITY_MATRIX_MV:当前模型视图矩阵

//UNITY_MATRIX_V:当前视图矩阵

//UNITY_MATRIX_P:当前投影矩阵

//UNITY_MATRIX_VP:当前视图投影矩阵

//UNITY_MATRIX_T_MV:转置模型+视图模型

//UNITY_MATRIX_IT_MV:逆转置模型+视图模型

//mul是矩阵相乘的方法

o.pos =mul(UNITY_MATRIX_MVP,v.vertex);

//彩虹色

o.color= v.vertex*0.8+0.5;

//纯色

//o.color=v.normal*0.4+0.5;

returno;

}

//片段函数参数是v2f的结构体,返回值是fixed4类型

fixed4frag(v2f i):COLOR{

returnfixed4(i.color* _myColor,1);

}

ENDCG

}

//第二通道

Pass{

Name"Border"

Tags{"LightModel"="ForwadBase"}

//前方剔除

CULLFront

LightingOn

CGPROGRAM

#pragmavertexvert

#pragmafragmentfrag

//编译指令:编译正向渲染基础的通道

//用于正向渲染中,应用环境光照,主方向光照和顶点所需要的变体

//这些变体用于处理不同的光源模型贴图,主要方向光照的阴影选项的开关与否

#pragmamulti_compile_fwdbase

#include"UnityCG.cginc"

float_outLine;

structa2v {

float4vertex:POSITION;

float3normal:NORMAL;

};

structv2f {

float4pos:POSITION;

};

//顶点函数

v2f vert(a2v v) {

v2f o;

float4pos =mul(UNITY_MATRIX_MV,v.vertex);

float3normal=mul(UNITY_MATRIX_IT_MV,v.normal);

pos = pos +float4(normalize(normal),0)*_outLine;

o.pos =mul(UNITY_MATRIX_P,pos);

returno;

}

//片段函数

fixed4frag(v2f i):COLOR{

returnfixed4(0,0,0,1);

}

ENDCG

}

}

FallBack"Diffuse"

}

相关文章

  • Unity_Shader着色器(顶点片段着色器)

    //顶点片段着色器 //流程: //1.首先,vertexprogram收到系统传递给它的数据模型 //2.然后把...

  • Shader-基础

    简介 分类 固定管线着色器(没有嵌套CG语言 代码中没有CGPROGARAM的) 顶点shader(顶点片段着色器...

  • Hello Triangle

    使用OpenGL绘制图形的步骤 一般来说,顶点着色器和片段着色器需要我们自定义的。所以首先自定义顶点着色器和片段着...

  • OpenGL ES学习

    在 OpenGL ES 中你必须创建两种着色器:顶点着色器 (vertex shaders) 和片段着色器 (fr...

  • OpenGL 几何着色器及billboard广告牌

    几何着色器 在顶点和片段着色器之间有一个可选的着色器叫几何着色器(Geometry Shader)。如果编译程序的...

  • WebGL编程指南入门基础篇

    WebGL编程指南入门基础篇 着色器介绍 着色器分为顶点着色器 跟 片元着色器 顶点着色器描述顶点特性,包括位置,...

  • 七:GLSL灰度,翻转,马赛克滤镜

    默认 顶点着色器代码: 片元着色器代码: 灰度滤镜 顶点着色器代码不变,片元着色器代码: 颠倒滤镜 顶点着色器代码...

  • OpenGL ES手册翻译---2.OpenGL ES操作(三)

    2.10 顶点着色器 顶点着色器处理通过DrawArrays和DrawElements指定的顶点。每个被顶点着色器...

  • 着色器

    顶点着色器 片段着色器 这个长方形所覆盖到的每一个像素,都会调用一次fragment shader。片段着色器的责...

  • OpenGL ES -顶点着色器

    顶点着色器输入包括: 着色器程序 - 描述顶点上执行操作的顶点着色器源代码和可执行文件 顶点着色器输入 - 顶点数...

网友评论

      本文标题:Unity_Shader着色器(顶点片段着色器)

      本文链接:https://www.haomeiwen.com/subject/umwagttx.html