原创 數據結構與算法之美學習筆記--複雜度分析

如何評估一個算法的執行效率,一種是通過不同的數據進行測試,這種方法叫做事後統計法,但這種方法受限與測試數據規模,並且對測試環境的依賴性比較高,所以侷限性比較大;那另外一種就是我們常說的複雜度分析 複雜度分析 複雜度分析就是不使用具

原创 unity shader學習筆記(一)——基礎光照之標準光照模型定義

標準光照模型 標準光照模型只關心直接光照(direct light)。它把進入攝像機的光照分爲4個部分: 自發光(emissive),這部分用於給定一個方向時,物體表面會向這個方向產生多少的光,當沒有使用全局光照時,自發光物體不

原创 unity shader學習筆記(二)——在Unity中計算漫反射光照

逐頂點計算漫反射光照 蘭伯特模型計算方法 以下是在頂點着色器中使用蘭伯特光照模型計算漫反射光照的shader代碼: Properties { _Diffuse("Diffuse", Color) = (1.0, 1.0,

原创 Lua中的 table.sort 算法原理

Lua中的table.sort算法原理 table.sort的介紹 table.sort是Lua自帶的一個排序函數,函數原型爲: table.sort(list[, comp]) 其中list是目標table,comp是一個可選

原创 unity shader學習筆記(二十)——Unity中的高級紋理之立方體紋理菲涅耳反射

菲涅耳反射   菲涅耳反射通常用來根據視角方向控制反射程度。它是一種光學現象,當光線照射到物體表面時,一部分反射,一部分進行折射或散射。真實的菲涅耳公式非常複雜,所以在實際渲染中,會使用一些近似的公式計算,如Schlick菲涅耳近似等式:

原创 Lua源碼分析-table

table的數據結構   Lua把 table 的儲存分爲數組部分和哈希表部分。數組部分從 1 開始作整數數字索引。 這可以快速高效的訪問。而不能被儲存在數組部分的數據全部放在哈希表中, nil不能 做哈希鍵值。Lua的哈希表的操作時

原创 unity shader學習筆記(十)——Unity中的透明效果之開啓深度寫入的半透明效果

開啓深度寫入的半透明效果   在進行透明度混合時關閉深度測試會讓一些複雜網格因爲各種各樣的的排序錯誤而產生錯誤的透明效果。因此,下面要在開啓深度寫入的情況下實現透明效果。      在開啓深度寫入的情況下實現深度寫入的一種解決辦法是使

原创 unity shader學習筆記(十三)——Unity中的複雜光照之渲染路徑

Unity的渲染路徑   渲染路徑(Rendering Path)決定了光照是如何應用到shader中的。因此在shader中需要計算光照時就需要爲每個Pass指定它使用的渲染路徑。Unity中支持多種渲染路徑,Unity5.0之前主要有

原创 unity shader學習筆記(二十一)——Unity中的高級紋理之渲染紋理

渲染紋理   渲染目標紋理(Render Target Texture, RTT)是指一個攝像機將渲染結果輸出到顏色緩衝中,並顯示到屏幕上,而不是傳統的幀緩衝和後備緩衝。   多重渲染目標(Multiple Render Target,

原创 unity shader學習筆記(十四)——Unity中的複雜光照之光源類型

光源類型   Unity中共有四種光源,平行光、點光源、聚光燈和面光源。面光源僅在烘焙是纔可發揮作用。最常使用的光源屬性有光源的位置、方向、顏色、強度以及衰減這5個屬性。    平行光   平行光的幾何定義是最簡單的,它可以照亮的範圍

原创 unity shader學習筆記(十九)——Unity中的高級紋理之立方體紋理折射

折射   折射是當光線從一種介質斜射到另一種介質時,傳播方向會發生改變。在給定入射角的情況下可以使用斯涅耳定律(Snell’s Law)來計算反射角,計算公式如下:                       θ1是光在介質1中和表面法

原创 Lua源碼分析-GC原理

GC的原理   首先Lua是以union+type的形式來保存值的。如果是需要被GC管理的值,就以GCObject指針的形式保存,否則就直接存值。而所有的GCObject都有相同的CommonHeader,在CommonHeader中ne

原创 unity shader學習筆記(十五)——Unity中的複雜光照之光照衰減

光照衰減   Unity中是使用一張紋理作爲查找表在片元着色器中計算逐像素光照的衰減。這樣可以使計算不依賴於數學公式的複雜性,但也有一些不好的地方: 需要預處理得到採樣紋理,紋理的大小也會影響衰減的精度; 不直觀,也不方便,一旦數據存儲

原创 unity shader學習筆記(十八)——Unity中的高級紋理之立方體紋理

立方體紋理   立方體紋理(Cubemap)是環境映射(Environment Mapping)的一種實現方式,它可以模擬周圍的環境。   立方體紋理的好處是簡單快速,效果也好,但是到場景發生一些變化時,需要重新生成立方體紋理。立方體紋

原创 Lua源碼分析-堆棧

Lua中的堆棧   Lua中的堆棧主要是用來C和Lua進行交互。lua中的堆棧可以通過正數索引和負數索引兩中方式進行索引。正數索引就是棧底爲1,向上依次+1。負數索引就是棧頂爲-1,依次向下-1。   在C中訪問堆棧時,要先用 lua_g