https://www.bilibili.com/video/av41316597?from=search&seid=16258485520600473382
此筆記是視頻整理所得 詳細的可以看視屏
http://blog.shuiguzi.com/2014/10/28/Release/
環(huán)境搭配
這個是VS的編寫shader的插件
當(dāng)然也可以在
搜索hlsl安裝第一個 然后速度挺慢的1M
我的安裝完是在桌面
運行安裝這個應(yīng)該是根據(jù)你VS型號自動匹配的
最好這樣安裝吧
但是這個有提示但是打{}時候不會自動換行對齊要自己手動空格調(diào)位置很麻煩 所以就有了VSCode
鏈接:https://pan.baidu.com/s/1eteXU72gL7_CY-Uc5D2roQ
提取碼:ca2i
這是個package包
其實只有這個是有用的
進入官方下載VSCode
然后安裝打開
Ctrl+Shift+p
搜索Configure Language
回車選擇zh-cn
安裝語言
然后就成了中文版 不行的話可能是順序反了 先安裝語言包再設(shè)置
然后再 ctrl+shif+p 并鍵入 install from vsix
然后按鍵盤上的Enter鍵樊拓。
就是Package包里的這個程序安裝然后就完畢了 重啟就有提示了
Shader和渲染管線是什么
Shader是圖形可編程方案的程序片段
渲染管線是一種計算機從數(shù)據(jù)到最終圖形成像的形象描述
材質(zhì)是商品 Shader是方法 貼圖是材料
Shader三大高級匯編語言 (之前是用匯編 難度增加)
基于OpenGL的GLSL
基于DirectX(微軟)(單機游戲超級多需要安裝) HLSL
基于NVIDIA (N卡)的Cg (其實Cg由N卡公司和微軟一起開發(fā)的,HLSL和Cg其實是一門語言)
為什么使用GPU編程
優(yōu)點: GPU高并行結(jié)構(gòu) 擁有更多邏輯運算單元(ALU)適合用于密集型數(shù)據(jù)處理辩尊,對數(shù)據(jù)進行獨立運算(多個數(shù)據(jù)并行運算時間和一個數(shù)據(jù)單獨執(zhí)行時間是一樣的)
CPU大部分面積為控制器和寄存器
GPU并行處理能力強于CPU 讓它同一時間處理很多頂點數(shù)據(jù)
缺點:由于是數(shù)據(jù)獨立運算難以實現(xiàn)數(shù)據(jù)之間相關(guān)性的算法(射線和物體的求交運算)
GPU無法實現(xiàn)CPU強大邏輯運算能力(這就是為何GPU如此牛皮卻無法取代CPU的原因)
Unity的Shaderlab結(jié)構(gòu)
shader“name”{
[Properties] //屬性
SubShaders //編寫Shader 至少要有一個SubShader 但是多個SubShader只能選一個執(zhí)行 所以多個SubShader是為了不同設(shè)備環(huán)境所編寫(就是游戲里的畫質(zhì)高中低分級渲染)
[FallBack] //回滾 如果以上SubShader都帶不動就運行絕大多數(shù)都能運行的SubShader(一般往往是Unity自帶的)
}
常用Unity Shader分類
Unlit 只是個紋理不被光照影響(一般用于UI)
VertexLit 頂點光照 放在頂點著色器
Diffuse 漫反射(也是一種光照)放在片段著色器
Normal mapped法線貼圖(凹凸貼圖) 比漫反射昂貴 (表現(xiàn)更多細節(jié) 以假亂真)
Specular高光 模擬光滑物體 高光反射 (金屬 玻璃)
Normal Mapped Specular 高光法線貼圖 比高光昂貴
Parallax Normal mapped視差法線貼圖 (視差: 視覺的差異)
Parallax Normal mapped Specular 視差高光法線貼圖
Fixed function shader(功能有限 速度最快 可在幾乎所有平臺運行)
選擇第一個Create Shader Surface Shader
切記不要習(xí)慣加只锻; 會導(dǎo)致報錯
Shader "Sbin/ff1"http:// Shader中的位置這個最后一個名字要和你創(chuàng)的Shader名字一樣
{
Properties{
_Color("Main Color",COLOR)=(1,1,1,1)
}
SubShader {
//編寫一個通道pass
pass{
//COLOR(1,0,0,1)小括號固定值
Color[_Color]//中括號參數(shù)值
}
}
}
然后就可以創(chuàng)一個Material把Shader改為自己寫的 然后就可以滑動調(diào)節(jié)顏色
Shader "Sbin/ff1"http:// Shader中的位置這個最后一個名字要和你創(chuàng)的Shader名字一樣
{
Properties{
_Color("Main Color",COLOR)=(1,1,1,1)
}
SubShader {
//編寫一個通道pass
pass{
//COLOR(1,0,0,1)小括號固定值
//Color[_Color]//中括號參數(shù)值
Material//材質(zhì)
{
DIFFUSE[_Color]//漫反射顏色 本身固有顏色
}
Lighting on//開燈 off關(guān)燈
}
}
}
關(guān)燈
關(guān)燈后是他固有顏色
開燈
背光面是黑的
Shader "Sbin/ff1"http:// Shader中的位置這個最后一個名字要和你創(chuàng)的Shader名字一樣
{
Properties{
_Color("Main Color",COLOR) = (1,1,1,1)
_Ambient("Ambient",COLOR)=(0.3,0.3,0.3,0.3)
}
SubShader{
//編寫一個通道pass
pass {
//COLOR(1,0,0,1)小括號固定值
//Color[_Color]//中括號參數(shù)值
Material//材質(zhì)
{
DIFFUSE[_Color]//漫反射顏色 本身固有顏色
ambient[_Ambient]//環(huán)境光影響
}
Lighting on//開燈 off關(guān)燈
}
}
}
Shader "Sbin/ff1"http:// Shader中的位置這個最后一個名字要和你創(chuàng)的Shader名字一樣
{
Properties{
_Color("Main Color",COLOR) = (1,1,1,1)
_Ambient("Ambient",COLOR)=(0.3,0.3,0.3,0.3)
_Specular("Specular",COLOR)= (1,1,1,1)
_Shininess("Shininess",Range(0,8))=4//范圍0-8默認=4 越光滑物體 值越高
}
SubShader{
//編寫一個通道pass
pass {
//COLOR(1,0,0,1)小括號固定值
//Color[_Color]//中括號參數(shù)值
Material//材質(zhì)
{
DIFFUSE[_Color]//漫反射顏色 本身固有顏色
ambient[_Ambient]//環(huán)境光影響
SPECULAR[_Specular]//高光
Shininess[_Shininess]//控制反光點集中
}
Lighting on//開燈 off關(guān)燈
SeparateSpecular on//獨立的鏡面高光
}
}
}
開始跟點一樣顯示
Shader "Sbin/ff1"http:// Shader中的位置這個最后一個名字要和你創(chuàng)的Shader名字一樣
{
Properties{
_Color("Main Color",COLOR) = (1,1,1,1)
_Ambient("Ambient",COLOR)=(0.3,0.3,0.3,0.3)
_Specular("Specular",COLOR)= (1,1,1,1)
_Shininess("Shininess",Range(0,8))=4//范圍0-8默認=4 越光滑物體 值越高
_Emission("Emission",COLOR)= (1,1,1,1)
}
SubShader{
//編寫一個通道pass
pass {
//COLOR(1,0,0,1)小括號固定值
//Color[_Color]//中括號參數(shù)值
Material//材質(zhì)
{
DIFFUSE[_Color]//漫反射顏色 本身固有顏色
ambient[_Ambient]//環(huán)境光影響
SPECULAR[_Specular]//高光
Shininess[_Shininess]//控制反光點集中
Emission[_Emission]//自發(fā)光
}
Lighting on//開燈 off關(guān)燈
SeparateSpecular on//獨立的鏡面高光
}
}
}
默認白為最亮
Shader "Sbin/ff2"http:// Shader中的位置這個最后一個名字要和你創(chuàng)的Shader名字一樣
{
Properties{
_Color("Main Color",COLOR) = (1,1,1,1)
_Ambient("Ambient",COLOR)=(0.3,0.3,0.3,0.3)
_Specular("Specular",COLOR)= (1,1,1,1)
_Shininess("Shininess",Range(0,8))=4//范圍0-8默認=4 越光滑物體 值越高
_Emission("Emission",COLOR)= (1,1,1,1)
_MainTex("MainTex",2d)=""
}
SubShader{
//編寫一個通道pass
pass {
//COLOR(1,0,0,1)小括號固定值
//Color[_Color]//中括號參數(shù)值
Material//材質(zhì)
{
DIFFUSE[_Color]//漫反射顏色 本身固有顏色
ambient[_Ambient]//環(huán)境光影響
SPECULAR[_Specular]//高光
Shininess[_Shininess]//控制反光點集中
Emission[_Emission]//自發(fā)光
}
Lighting on//開燈 off關(guān)燈
SeparateSpecular on//獨立的鏡面高光
SetTexture[_MainTex]//紋理
{
// Combine合并
Combine texture * primary double//代表之前屬性乘上材質(zhì)合并 不然之前的屬性沒用 倍數(shù) 看著亮度加或者減
}
}
}
}
Shader "Sbin/ff2"http:// Shader中的位置這個最后一個名字要和你創(chuàng)的Shader名字一樣
{
Properties{
_Color("Main Color",COLOR) = (1,1,1,1)
_Ambient("Ambient",COLOR)=(0.3,0.3,0.3,0.3)
_Specular("Specular",COLOR)= (1,1,1,1)
_Shininess("Shininess",Range(0,8))=4//范圍0-8默認=4 越光滑物體 值越高
_Emission("Emission",COLOR)= (1,1,1,1)
_MainTex("MainTex",2d)=""
_SecondTex("SecondTex",2d)=""
}
SubShader{
//編寫一個通道pass
pass {
//COLOR(1,0,0,1)小括號固定值
//Color[_Color]//中括號參數(shù)值
Material//材質(zhì)
{
DIFFUSE[_Color]//漫反射顏色 本身固有顏色
ambient[_Ambient]//環(huán)境光影響
SPECULAR[_Specular]//高光
Shininess[_Shininess]//控制反光點集中
Emission[_Emission]//自發(fā)光
}
Lighting on//開燈 off關(guān)燈
SeparateSpecular on//獨立的鏡面高光
SetTexture[_MainTex]//紋理
{
// Combine合并
Combine texture * primary double//代表之前屬性乘上材質(zhì)合并 不然之前的屬性沒用 倍數(shù) 看著亮度加或者減
}
SetTexture[_SecondTex]
{
Combine texture * previous double//代表乘上之前所有材質(zhì)的效果 根據(jù)硬件可以添加多個 目前一般兩個
}
}
}
}
Shader "Sbin/ff2"http:// Shader中的位置這個最后一個名字要和你創(chuàng)的Shader名字一樣
{
Properties{
_Color("Main Color",COLOR) = (1,1,1,1)
_Ambient("Ambient",COLOR)=(0.3,0.3,0.3,0.3)
_Specular("Specular",COLOR)= (1,1,1,1)
_Shininess("Shininess",Range(0,8))=4//范圍0-8默認=4 越光滑物體 值越高
_Emission("Emission",COLOR)= (1,1,1,1)
_MainTex("MainTex",2d)=""
_SecondTex("SecondTex",2d)=""
}
SubShader{
//渲染隊列
Tags {"Queue"="Transparent"}
//編寫一個通道pass
pass {
Blend SrcAlpha OneMinusSrcAlpha//混合之前的層級Alpha 正常模式(透明度混合)
//COLOR(1,0,0,1)小括號固定值
//Color[_Color]//中括號參數(shù)值
Material//材質(zhì)
{
DIFFUSE[_Color]//漫反射顏色 本身固有顏色
ambient[_Ambient]//環(huán)境光影響
SPECULAR[_Specular]//高光
Shininess[_Shininess]//控制反光點集中
Emission[_Emission]//自發(fā)光
}
Lighting on//開燈 off關(guān)燈
SeparateSpecular on//獨立的鏡面高光
SetTexture[_MainTex]//紋理
{
// Combine合并
Combine texture * primary double//代表乘上之前屬性乘上材質(zhì)合并 不然之前的屬性沒用 倍數(shù) 看著亮度加或者減
}
SetTexture[_SecondTex]
{
Combine texture * previous double//代表乘上之前所有材質(zhì)的效果 根據(jù)硬件可以添加多個 目前一般兩個
}
}
}
}
Shader "Sbin/ff2"http:// Shader中的位置這個最后一個名字要和你創(chuàng)的Shader名字一樣
{
Properties{
_Color("Main Color",COLOR) = (1,1,1,1)
_Ambient("Ambient",COLOR)=(0.3,0.3,0.3,0.3)
_Specular("Specular",COLOR)= (1,1,1,1)
_Shininess("Shininess",Range(0,8))=4//范圍0-8默認=4 越光滑物體 值越高
_Emission("Emission",COLOR)= (1,1,1,1)
//不加括號可以 _Constant("ConstantColor",COLOR)=(1,1,1,0.3)放兩個貼圖上面
_MainTex("MainTex",2d)="white"{}
_SecondTex("SecondTex",2d)=""{}
_Constant("ConstantColor",COLOR)=(1,1,1,0.3)
}
SubShader{
//渲染隊列
Tags {"Queue"="Transparent"}//是一個值 譯為透明的
//編寫一個通道pass
pass {
Blend SrcAlpha OneMinusSrcAlpha//混合之前的層級Alpha 正常模式(透明度混合)
//COLOR(1,0,0,1)小括號固定值
//Color[_Color]//中括號參數(shù)值
Material//材質(zhì)
{
DIFFUSE[_Color]//漫反射顏色 本身固有顏色
ambient[_Ambient]//環(huán)境光影響
SPECULAR[_Specular]//高光
Shininess[_Shininess]//控制反光點集中
Emission[_Emission]//自發(fā)光
}
Lighting on//開燈 off關(guān)燈
SeparateSpecular on//獨立的鏡面高光
SetTexture[_MainTex]//紋理
{
// Combine合并
Combine texture * primary double//代表乘上之前屬性乘上材質(zhì)合并 不然之前的屬性沒用 倍數(shù) 看著亮度加或者減
}
SetTexture[_SecondTex]
{
ConstantColor[_Constant]//改為用灰度系數(shù)控制透明度
//代表乘上之前所有材質(zhì)的效果 根據(jù)硬件可以添加多個 目前一般兩個
//Combine texture * previous double,texture //針對貼圖自身Alpha之前的Alpha無效 一般用于美工給的圖自帶Alpha通道
Combine texture * previous double,texture*constant
}
}
}
}
效果是一樣的 調(diào)節(jié)透明度方式不一樣