先吐槽:
- CSDN的寫文章系統這麼渣,就因為那個自動儲存功能太渣,每10~20秒卡7秒左右,還是準備換平台寫部落格好了。我就像不懂為何這麼渣,不會去優化嗎?不會寫異步處理嗎?
- CSDN的文章寫好後,點選釋出,彈出那個釋出頁面也是無語,每選擇一個選項,都卡5秒,你是将使用者配置的釋出屬性,每個都同步等待發送完畢(WaitingSendToServerComplete)、等待接收伺服器回報(WaitingRecieveServerResponse)嗎?不會寫異步回調處理嗎?想不懂了。
- Unity部分說明文章太垃圾,翻譯的時候,我真的忍不住删減掉備援、啰嗦的描述。(是不是英文描述一件事物時,都是這麼啰嗦的文法?還是我們國語好啊,可惜很多前言知識都掌握在國外,希望國家越來越強大)
目錄:Unity Shader - 知識點目錄(先占位,後續持續更新)
原文:ShaderLab: Legacy Lighting
版本:2019.1
ShaderLab: Legacy Lighting
舊版光照
材質與光照參數用于控制内置的頂點光照。頂點光照是标準的Direct3D/OpenGL的計算逐頂點光照模型。Lighting on 将打開光照。光照受Material 塊,ColorMaterial 和 SparateSpecular 指令的影響。
注意:Material/Lighting 指令将會在使用了vertex programs 時失效;使用此方式的話,所有的計算将在你的vertex shader中完成。建議使用可程式設計的着色器來替代舊版的頂點光照。這樣的話你就不需要使用這些指令來描述在此了,而是使用你自己自定義的vertex and fragment programs 來使用所有的光照,紋理,與其他你想要内容。
頂點顔色與光照是渲染幾何體首先計算内容效果。它是頂點級别的操作,并在紋理應用前計算了基礎顔色。
Synatax
文法
頂級指令控制固定函數的光照與否,或是配置一些選項。主要是再 Material Block (Material塊)中設定的,詳情如下:
Color
Color color
設定對象的顔色。該顔色可以是RGBA值,或是一個屬性名稱使用方括号括起來。
Material
Material塊用于定義對象的材質屬性。
Lighting
Lighting On | Off
為了設定Material塊中的一些效果,你必須開啟光照,使用 Lighting On 指令。如果lighting 是off的話,那麼顔色就直接使用Color指令指定的顔色。
SeparateSpecular
獨立的高光()
SeparateSpecular On | Off
該指令将控制高光光照的開光,高光光照不受紋理影響。
ColorMaterial
ColorMaterial AmbientAndDiffuse | Emission
設定逐頂點顔色而不是使用Material中的顔色。AmbientAndDiffuse 替代材質的Ambient(環境光)和Diffuse(漫反射光)的值;Emission 替代材質的Emission(自發光)值。
Material Block
這包含設定材質如何對光照做出反應。下面的每個屬性都可以設定,預設我部門都是黑色(就是沒有效果的意思)。
- Diffuse color: 漫反射顔色分量。對象的基礎顔色。
- Ambient color: 環境光顔色分量。當對象環境光顔色,可在Light Window 中設定。
- Specular color: 高光顔色。
- Shininess number: 光亮度,0~1的值。0的值,你将得到大塊的高亮塊,就像漫反射光照一樣,1的值,你将得到小塊的高亮點。
- Emission color: 自發光顔色。
對象的光照顔色計算表公式:
Ambient * Lighting Window’s Ambient Intensity setting + (Light Color * Diffuse + Light Color * Specular) + Emission
該表公式中的括号内的設定是對每個對象都生效的光照設定。
Examples
顯示純紅色:
Shader "Solid Red" {
SubShader {
Pass { Color (1,0,0,0) }
}
}
基礎顔色是白色,并且應用了頂點光照:
Shader "VertexLit White" {
SubShader {
Pass {
Material {
Diffuse (1,1,1,1)
Ambient (1,1,1,1)
}
Lighting On
}
}
}
将顔色屬性顯示在Inspector面闆中:
Shader "VertexLit Simple" {
Properties {
_Color ("Main Color", COLOR) = (1,1,1,1)
}
SubShader {
Pass {
Material {
Diffuse [_Color]
Ambient [_Color]
}
Lighting On
}
}
}
最後,一個完整的頂點光照shader(也可參考 SetTexture 應用頁面):
Shader "VertexLit" {
Properties {
_Color ("Main Color", Color) = (1,1,1,0)
_SpecColor ("Spec Color", Color) = (1,1,1,1)
_Emission ("Emmisive Color", Color) = (0,0,0,0)
_Shininess ("Shininess", Range (0.01, 1)) = 0.7
_MainTex ("Base (RGB)", 2D) = "white" {}
}
SubShader {
Pass {
Material {
Diffuse [_Color]
Ambient [_Color]
Shininess [_Shininess]
Specular [_SpecColor]
Emission [_Emission]
}
Lighting On
SeparateSpecular On
SetTexture [_MainTex] {
Combine texture * primary DOUBLE, texture * primary
}
}
}
}