TA小学生的Unity Shader(一)

 

相信很多人开始学习Shader都是从“连连看”开始的,所见即所得,喜闻乐见。深入探究,你会发现即时“连连看”也需要理论支持。我们一起来做TA小学生,慢慢来学习怎么编写Shader。...

TA小学生的Unity Shader(一)
相信很多人开始学习Shader都是从“连连看”开始的,无论是Unity的Shader Forge还是Unreal的材质模块,所见即所得,喜闻乐见。

深入探究一些以后,你会发现即时“连连看”也需要理论支持。废话不多说,现在开始,我们一起来做TA小学生,慢慢来学习怎么编写Shader。

PS:本人对Shader这块的理解还颇为浅薄,只想抛砖引玉,大家一起来好好学习。有纰漏之处请大家及时指正。

在开始码代码之前,我们先来看看图形硬件是如何工作的。

以下引用“CG Tutorial”第一章的内容:



A pipeline is a sequence of stages operating in parallel and in a fixed order. Each stage receives its input from the prior stage and sends its output to the subsequent stage. Like an assembly line where dozens of automobiles are manufactured at the same time, with each automobile at a different stage of the line, a conventional graphics hardware pipeline processes a multitude of vertices, geometric primitives, and fragments in a pipelined fashion. 

Pipeline是一组并行的Stage,它们按照一定的顺序排列。每个Stage都从前一个Stage接受到输入,把它的输出传递到下一个Stage。就像汽车生产流水线处理汽车部件一样,常规的图形硬件的pipeline处理一堆点,图元,和fragment。

 

配上这张流程图,看得更清楚,一步一步:



不理解上面每一步在干嘛也没关系,现在只要清楚处理的过程是流水线。更方便的是,我们在Shader里面看到的是两个大处理步骤,处理vertex的代码,和处理fragment的代码,可以简单理解为顶点着色器和像素着色器。这样就可以写一个最简单的Unity Shader了:

Shader "TAShaders/TAShader_001"{

SubShader

{

Pass

{

CGPROGRAM

//告诉图形硬件,我的vertex program是叫做vtx的函数

#pragma vertex vtx

//告诉图形硬件,我的fragment program是叫做frag的函数

#pragma fragment frag

//结构定义,把场景中的信息传递给vertex program

struct app2vtx

{

//把场景中的点的位置信息传递给vertex

float4vertex     :    POSITION;

};

//结构定义,把vertex program处理后的信息传递给fragment program

struct vtx2frag

{

//把vertex program处理后的点的位置信息传递给pos

float4pos    :    POSITION;

//把vertex program处理后的点的颜色信息传递给color

float4color    :    COLOR;

};

//vertex program

vtx2fragvtx(app2vtx appIn)

{

vtx2fragvtxOut;

//把点从本地坐标系切换到投影坐标系,不理解没关系,先用着

vtxOut.pos =mul(UNITY_MATRIX_MVP, appIn.vertex);

//给模型的颜色为黄色

vtxOut.color =float4(1,1,0,1);

return vtxOut;

}

//fragment program

//把最终的float4输出为颜色数据

float4frag(vtx2frag vtxIn)    :    COLOR

{

return vtxIn.color;

}

ENDCG

}

}

}
技术美术(TechArtist)公众号,长按关注:


    关注 技术美术


微信扫一扫关注公众号

0 个评论

要回复文章请先登录注册