1. 程式人生 > >unity shader入門教程視訊

unity shader入門教程視訊

siki老師shader教學視訊
連結: https://pan.baidu.com/s/14ZOJKzdpVCc4Q9tV1UpYcg
(直接儲存自己網盤,不要點資料夾進入,會被和諧!如遇和諧請留言!)

筆記相關內容:
Mesh Filter : 儲存一個Mesh(網格,模型的網格,就是模型的由哪些三角面組成,組成一個什麼樣子的模型,三角面的一些頂點資訊)
Mesh Renderer:用來渲染一個模型的外觀,就是樣子, 按照 mesh給它面板,給它顏色
通過Material(材質)控制模型渲染的樣子

Material
	貼圖(可以沒有,可以是一個單純的顏色)
	Shader

書籍
unity shader 入門精要(樂樂程式猿)
unity 3d shaderlab開發實戰詳解(第二版)
unity 5.x shaders and effects cookbook(中文版 unity著色器和螢幕特效開發祕籍)

CG語言教程官網
http://http.developer.nvidia.com/CgTutorial/cg_tutorial_frontmatter.html

一些網站
www.shadertoy.com
http://blog.csdn.net/poem_qianmo?viewmode=contents

數學函式線上演示
http://zh.numberempire.com/graphingcalculator.php

UnityCG.cginc中一些常用的函式

//攝像機方向(視角方向)
float3 WorldSpaceViewDir(float4 v)  	根據模型空間中的頂點座標 得到 (世界空間)從這個點到攝像機的觀察方向
float3 UnityWorldSpaceViewDir(float4 v) 世界空間中的頂點座標==》世界空間從這個點到攝像機的觀察方向
float3 ObjSpaceViewDir(float4 v) 		模型空間中的頂點座標==》模型空間從這個點到攝像機的觀察方向
//光源方向
float3 WorldSpaceLightDir(float4 v) 	模型空間中的頂點座標==》世界空間中從這個點到光源的方向
float3 UnityWorldSpaceLightDir(float4 v) 	世界空間中的頂點座標==》世界空間中從這個點到光源的方向
float3 ObjSpaceLightDir(float4 v) 	模型空間中的頂點座標==》模型空間中從這個點到光源的方向
//方向轉換
float3 UnityObjectToWorldNormal(float3 norm) 把法線方向 模型空間==》世界空間
float3 UnityObjectToWorldDir(float3 dir) 把方向 模型空間=》世界空間
float3 UnityWorldToObjectDir(float3 dir) 把方向 世界空間=》模型空間

什麼是OpenGL、DirectX
shader可以認為是一種渲染命令 ,由opengl 或者dx進行解析,來控制渲染豐富多彩的圖形

OpenGL 使用GLSL 編寫shader
DirectX 使用HSSL 編寫shader
英偉達 CG 編寫shader(跨平臺)

Unity Shader的分類
使用的是ShaderLab編寫Unity中的Shader
1,表面著色器 Surface Shader
2,頂點/片元著色器 Vertex/Fragment Shader
3,固定函式著色器 Fixed Function Shader

Unityshader中屬性的型別有哪些
_Color(“Color”,Color)=(1,1,1,1)
_Vector(“Vector”,Vector)=(1,2,3,4)
_Int(“Int”,Int)= 34234
_Float(“Float”,Float) = 4.5
_Range(“Range”,Range(1,11))=6
_2D(“Texture”,2D) = “red”{}
_Cube(“Cube”,Cube) = “white”{}
_3D(“Texure”,3D) = “black”{}

從應用程式傳遞到頂點函式的語義有哪些a2v
POSITION 頂點座標(模型空間下的)
NORMAL 法線( 模型空間下)
TANGENT 切線(模型空間)
TEXCOORD0 ~n 紋理座標
COLOR 頂點顏色

從頂點函式傳遞給片元函式的時候可以使用的語義
SV_POSITION 剪裁空間中的頂點座標(一般是系統直接使用)
COLOR0 可以傳遞一組值 4個
COLOR1 可以傳遞一組值 4個
TEXCOORD0~7 傳遞紋理座標

片元函式傳遞給系統
SV_Target 顏色值,顯示到螢幕上的顏色

什麼是光照模型
光照模型就是一個公式,使用這個公式來計算在某個點的光照效果

標準光照模型
在標準光照模型裡面,我們把進入攝像機的光分為下面四個部分
自發光
高光反射
Blinn光照模型
Specular=直射光 * pow( max(cosθ,0),10) θ:是反射光方向和視野方向的夾角
Blinn-Phong光照模型
Specular=直射光 * pow( max(cosθ,0),10) θ:是法線和x的夾角 x 是平行光和視野方向的平分線
漫反射 Diffuse = 直射光顏色 * max(0,cos夾角(光和法線的夾角) ) cosθ = 光方向· 法線方向
環境光

Tags{ “LightMode”=“ForwardBase” }
只有定義了正確的LightMode才能得到一些Unity的內建光照變數
#include “Lighting.cginc”
包含unity的內建的檔案,才可以使用unity內建的一些變數

normalize() 用來把一個向量,單位化(原來方向保持不變,長度變為1)
max() 用來取得函式中最大的一個
dot 用來取得兩個向量的點積
_WorldSpaceLightPos0 取得平行光的位置
_LightColor0取得平行光的顏色
UNITY_MATRIX_MVP 這個矩陣用來把一個座標從模型空間轉換到剪裁空間
_World2Object 這個矩陣用來把一個方向從世界空間轉換到模型空間
UNITY_LIGHTMODEL_AMBIENT用來獲取環境光
reflect(-lightDir,normalDir)取反射光方向
_WorldSpaceCameraPos 世界空間下相機位置

半蘭伯特光照模型
Diffuse = 直射光顏色 *( cosθ *0.5 +0.5 )
蘭伯特光照模型
Diffuse = 直射光顏色 * max(0,cos夾角(光和法線的夾角) ) cosθ = 光方向· 法線方向

shader中的各種空間座標
http://blog.csdn.net/lyh916/article/details/50906272
什麼是切線空間
http://blog.csdn.net/bonchoix/article/details/8619624

pixel = (normal+1)/2 pixel 畫素 normal 法線

normal = pixel*2 - 1 UnpackNormal(normalColor) 得到切線空間下的法線

TANGENT_SPACE_ROTATION 呼叫這個之後,會得到一個矩陣roation 用來把模型空間下的方向轉換到切換空間下