Unity_Shader著色器(頂點(diǎn)片段著色器)

//頂點(diǎn)片段著色器

//流程:

//1.首先,vertexprogram收到系統(tǒng)傳遞給它的數(shù)據(jù)模型

//2.然后把這些數(shù)據(jù)處理成我們后續(xù)需要的數(shù)據(jù)(至少包含頂點(diǎn)的位置信息)進(jìn)行輸出,其他的數(shù)據(jù)還有

//紋理的UV坐標(biāo),以及其他需要傳遞給fragment,program的數(shù)據(jù)

//3.系統(tǒng)對(duì)vertexprogram輸出的頂點(diǎn)數(shù)據(jù)進(jìn)行插值,并將插值結(jié)果傳遞給fragment,program

//4.最后,fragment,program根據(jù)這些插值結(jié)果計(jì)算成屏幕上顯示的像素顏色

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

//告訴程序定義了一個(gè)頂點(diǎn)著色器

#pragmavertexvert

//告訴程序定義了一個(gè)片段著色器

#pragmafragmentfrag

//使用頂點(diǎn)和片段的CG時(shí),需要引入頭文件,相當(dāng)于引入C#的命名空間

#include"UnityCG.cginc"

fixed4_myColor;

//定義vertextofragment結(jié)構(gòu)體

//v2f表示:頂點(diǎn)程序到片段程序的信息傳遞,這里傳遞的是位置和顏色的參數(shù)

//頂點(diǎn)著色器將計(jì)算color并輸出給片段著色器

structv2f{

//還有一些其他成員變量

//1.float4vertex:POSITION頂點(diǎn)/位置

//2.float3normal:NORMAL頂點(diǎn)法線

//3.float4texcoord:TEXCOORD0第一UV坐標(biāo)

//4.float4texcoord:TEXCOORD1第二UV坐標(biāo)

//5.float4tangent:TANGENT切線向量(一般用在法線貼圖中)

//6.float4color:COLOR每個(gè)頂點(diǎn)的顏色

float4pos:SV_POSITION;

float3color:COLOR;

};

//頂點(diǎn)函數(shù),參數(shù)是一個(gè)結(jié)構(gòu)體返回值也是一個(gè)結(jié)構(gòu)體

//appdata_full是UnityCG.cginc的結(jié)構(gòu)體類型

//結(jié)構(gòu)體里面的類型有:

//appdata_base:包含頂點(diǎn)位置,法線和一個(gè)紋理坐標(biāo)

//appdata_full:包含頂點(diǎn)位置,切線,法線和兩個(gè)紋理坐標(biāo)

//appdata_tan:包含頂點(diǎn)位置,切線,法線和一個(gè)紋理坐標(biāo)

//appdata_img:包含位置和一個(gè)紋理坐標(biāo)

v2f?vert(appdata_full?v)?{

v2f?o;

//UNITY_MATRIX_MVP:當(dāng)前模型視圖投影矩陣

//UNITY_MATRIX_MV:當(dāng)前模型視圖矩陣

//UNITY_MATRIX_V:當(dāng)前視圖矩陣

//UNITY_MATRIX_P:當(dāng)前投影矩陣

//UNITY_MATRIX_VP:當(dāng)前視圖投影矩陣

//UNITY_MATRIX_T_MV:轉(zhuǎn)置模型+視圖模型

//UNITY_MATRIX_IT_MV:逆轉(zhuǎn)置模型+視圖模型

//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;

}

//片段函數(shù)參數(shù)是v2f的結(jié)構(gòu)體,返回值是fixed4類型

fixed4frag(v2f?i):COLOR{

returnfixed4(i.color*?_myColor,1);

}

ENDCG

}

//第二通道

Pass{

Name"Border"

Tags{"LightModel"="ForwadBase"}

//前方剔除

CULLFront

LightingOn

CGPROGRAM

#pragmavertexvert

#pragmafragmentfrag

//編譯指令:編譯正向渲染基礎(chǔ)的通道

//用于正向渲染中,應(yīng)用環(huán)境光照,主方向光照和頂點(diǎn)所需要的變體

//這些變體用于處理不同的光源模型貼圖,主要方向光照的陰影選項(xiàng)的開關(guān)與否

#pragmamulti_compile_fwdbase

#include"UnityCG.cginc"

float_outLine;

structa2v?{

float4vertex:POSITION;

float3normal:NORMAL;

};

structv2f?{

float4pos:POSITION;

};

//頂點(diǎn)函數(shù)

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;

}

//片段函數(shù)

fixed4frag(v2f?i):COLOR{

returnfixed4(0,0,0,1);

}

ENDCG

}

}

FallBack"Diffuse"

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • <轉(zhuǎn)>我也忘了轉(zhuǎn)自哪里,抱歉,感謝原作者 什么是Shader Shader(著色器)是一段能夠針對(duì)3D對(duì)象進(jìn)行操作...
    星易乾川閱讀 5,868評(píng)論 1 16
  • 轉(zhuǎn)載注明出處:點(diǎn)擊打開鏈接 Shader(著色器)是一段能夠針對(duì)3D對(duì)象進(jìn)行操作、并被GPU所執(zhí)行的程序。Shad...
    游戲開發(fā)小Y閱讀 3,708評(píng)論 0 4
  • 一、頂點(diǎn)與片段著色器簡(jiǎn)介 Vertex and FragmentShader:最強(qiáng)大的Shader類型,也是本系列...
    半閑書屋半閑人閱讀 9,982評(píng)論 6 10
  • Unity shader 官網(wǎng)文檔全方位學(xué)習(xí)(一)What?? Shader,看起來(lái)好高級(jí)的樣子,是的,這是Uni...
    狼之獨(dú)步閱讀 6,300評(píng)論 0 12
  • 考研復(fù)試被刷。對(duì)父母姐姐們的承諾又落空了,多想讓她們感到驕傲啊。 我的人生又是從何時(shí)變得不正常的。悲觀向我襲來(lái),不...
    朱紀(jì)閱讀 223評(píng)論 0 0

友情鏈接更多精彩內(nèi)容