DrawCall
由CPU收集美術(shù)的資源信息,傳遞給GPU镰官,通知GPU進行一次渲染過程叫DrawCall
OpenGl 渲染流程
cpu :
FBX->Meshrender
FBX obj : 模型文件蓄诽,包含UV、頂點位置、法線切線等渲染信息
MeshRender : 將信息傳給GPU
Meshfilter : 將那個模型信息傳給GPU
gpu:
頂點著色器->光柵化->片元著色器->alpha測試->模板測試->深度測試->Blend->顯示信息
材質(zhì)球:
Shader + Texture
頂點著色器:頂點信息處理
光柵化:將頂點轉(zhuǎn)換為像素
片元著色器:
圖片處理
紋理處理(Filter Mode):
Point:就近采樣
Bilinear:線型采樣
Trilinear:三線性采樣
批處理:
相同的材質(zhì)店印,合并起來進行一次渲染.
Dynamic batching: for small enough Meshes, this transforms their vertices on the CPU, groups many similar vertices together, and draws them all in one go.
Static batching: combines static (not moving) GameObjects into big Meshes, and renders them in a faster way.
NGUI
UIWidget存放UI中的頂點法線UV等信息
同一個圖集的深度區(qū)間要放到同一個區(qū)間中
1.UIWiget在Onstart()中遞歸的尋找父物體CreatePanel()直到找到第一個UIPanel
2.將UIWiget自身加入UIPanel中存放全部UIWiget的集合中。
3.在UIPanel中l(wèi)ateUpdate逐幀渲染倒慧,調(diào)用UpdateSelf渲染每一個UIWiget
4.UIWiget調(diào)用FillAllDrawCalls按摘,SortWidgets對所有子物體按深度、材質(zhì)纫谅、id排序炫贤,這樣通過對不同圖集之間物體進行深度控制,讓同一個圖集的物體在一個深度區(qū)間付秕。通過對材質(zhì)前后文進行對比兰珍,直到與上一個材質(zhì)不同的,再新建一個DrawCall询吴。
Shader
SubShader
Each shader in Unity consists of a list of subshaders. When Unity has to display a mesh, it will find the shader to use, and pick the first subshader that runs on the user’s graphics card.
Pass
A subshader defines a list of rendering passes and optionally setup any state that is common to all passes.
When Unity chooses which subshader to render with, it renders an object once for each Pass defined
用例:
旗子飄動效果(頂點y坐標(biāo)變換)
在頂點著色器中使用簡諧波根據(jù)x偏移y坐標(biāo)
v2f vert(a2v i) {
float timeOffset = _Time.y * _WaveOffsetSpeed;
i.vertex.y += _WaveH * sin(_WaveSpeed*i.vertex.x + timeOffset);
v2f o;
o.vertex = UnityObjectToClipPos(i.vertex);
o.uv = TRANSFORM_TEX(i.uv, _MainTex);
return o;
}
河流流動效果(紋理坐標(biāo)的變換)
在片元著色器中對紋理坐標(biāo)進行變換
fixed4 frag(v2f v) :SV_Target{
float2 mUV = v.uv;
mUV.y += _Time.y;
fixed4 col = tex2D(_MainTex,mUV);
return col;
}
LOD
LOD技術(shù)即Levels of Detail的簡稱掠河,意為多細節(jié)層次。LOD技術(shù)指根據(jù)物體模型的節(jié)點在顯示環(huán)境中所處的位置和重要度猛计,決定物體渲染的資源分配唠摹,降低非重要物體的面數(shù)和細節(jié)度,從而獲得高效率的渲染運算奉瘤。