原创 考察專題

實際複雜問題: 1.GUI Instancing移動平臺合批:graphics->Instancing Variants 選爲keep all。 官方文檔指出stripUnused選項會在build(這個build應該指的是打包,不知道

原创 (十)unity自帶的着色器源碼剖析之——————AutoLight.cginc文件(包含一些陰影和光照相關計算的函數)

AutoLight.cginc文件包含了一系列用來進行照明和陰影計算的函數,本篇重點講述此文件中關於聚光燈和有向平行光的計算原理。 一、DIRECTIONAL宏的定義 #ifndef AUTOLIGHT_INCLUDED #define

原创 (二十四)unity shader之——————使用噪聲:下篇(水波效果)

在模擬真實水面過程中,我們往往也會使用噪聲紋理。此時噪聲紋理通常會用做一個高度圖,以不斷修改水面的法線方向。爲了模擬水不斷流動的效果,我們會使用和時間相關的變量來對噪聲紋理進行採樣,當得到法線信息後,在進行正常的反射+折射計算,得到最後的

原创 (二十三)unity shader之——————使用噪聲:上篇(消融效果)

很多時候向規則的事物裏添加一些“雜亂無章”的效果往往會有意想不到的效果,這些效果的來源就是造成,我們會學習使用噪聲來模擬各種看似“神奇”的特效。 一、消融效果 消融效果常見於遊戲中角色死亡、地圖燒燬等效果。在這些效果中,消融往往從不同的區

原创 (八)unity自帶的着色器源碼剖析之——————UnityShadowLibrary.cginc文件分析(實時陰影和烘焙陰影、陰影淡化、陰影滲漏處理、PCF陰影過濾解決實時陰影鋸齒)

一、陰影與全局照明系統的關係 Unity3D引擎可以根據宏SHADOWS_SCREEN和LIGHTMAP_ON是否啓用決定是否在全局照明系統下對陰影進行混合處理。如果這兩個宏同時啓用,則HANDLE_SHADOWS_BLENDING_IN

原创 (八)unity自帶的着色器源碼剖析之——————Unity3D的全局光照和陰影:下篇(unity3D中的球諧光照和SH球諧函數、unity實時陰影抗鋸齒解決方案)

一、探針基於球諧函數的全局光照 球諧光照是基於預計算輻射度傳輸理論實現的一種實時渲染技術。預計算輻射度傳輸技術能夠重現在區域面光源照射下的全局照明效果。這種技術通過在運行前對場景中光線的相互作用進行預計算,計算每個場景中每個物體表麪點的光

原创 (七)unity自帶的着色器源碼剖析之——————Unity3D的全局光照和陰影:中篇(光照探針和反射探針)

一、光照探針照明的細節  1.1 光照探針照明概述 使用光照貼圖可以大幅度提升場景渲染的真實程度,但缺點是光照貼圖無法作用在非靜態的物體上,所以看上去運動的物體和場景就顯得恨不協調。爲了解決這個問題,使用光照探針(probe lighti

原创 (六)unity自帶的着色器源碼剖析之——————Unity3D的全局光照和陰影:上篇(全局照明GI和局部照明)

一、全局照明和局部照明 全局照明(global illumination,GI)是用於向三維場景中添加更爲逼真的光照效果的一組算法總稱。全局算法不僅考慮光源發出的光與被照亮物體之間的關係,即直接照明(direct illumination

原创 (二十九)unity shader之——————着色器的組織和複用(cginc文件複用代碼、宏定義和shader變體、自定義材質編輯器)

一、cginc文件 1.1 unity的UnityCG.cginc文件 我們經常使用#include 指令包含UnityCG.cginc。這個文件中包含了unity預定義的大量結構和函數,通過#include指令可以複用這些結構和函數,而

原创 (二十五)unity shader之——————面積光:上篇(線光源)

面積光是具有形體的一類光源,不像點光源和平行光這類完全抽象化,沒有形體的光源。面積光適用於表達柔和的自然光,如通過燈發出的光具有明顯的幾何形體光源。unity實現了面積光,但僅用於燈光烘焙,而在實時渲染中仍然無法使用面積光。下面將通過着色

原创 (三十)unity shader之——————分割物體效果(着色器分割物體的方法)

在很多打鬥遊戲中,經常能看到物體被撕碎或者打破的效果,這種效果比較直觀,可以通過分割一個網格來實現,即在原來網格基礎上,再算出一個新的網格,本章將介紹一種通過着色器分割一個物體的方法。 一、分割一個物體的思路 1.1 我們需要什麼樣的信息

原创 (三十一)unity shader之——————透明和半透明材質

一、半透明材質 SSS(sub-Surface Scattering,3S)的中文意思是次表面散射或稱半透明材質。它適用於表現各種有次表面反射的材質,如透明橡膠、有機玻璃或玉石等。因爲實時渲染是不可能做大量的運算來計算光的折射和反射的,所

原创 (三)unity自帶的着色器源碼剖析之——————UnityCG.cginc文件(下篇:法線貼圖及編解碼操作函數、線性化深度值函數、計算屏幕座標工具函數、陰影處理相關函數、霧相關函數等)

八、法線貼圖及其編解碼操作的函數 法線貼圖存儲的信息是對模型頂點法線的擾動方向向量,利用此擾動方向向量,在光照計算時對頂點原有的法線進行擾動,從而使法線方向排列有序的平滑表面產生法線方向雜亂無序從而導致表面凹凸不平的效果。 要在Unity

原创 (二)unity自帶的着色器源碼剖析之——————UnityCG.cginc文件(上篇:數學常數、顏色空間常數和函數、頂點佈局格式結構體、進行空間變換的函數、HDR級光照貼圖編解碼相關函數等)

一、數學常數 unity3D內置着色器定義了一系列的數學常數,如下: 從第3行開始,第13行結束: #ifndef UNITY_CG_INCLUDED #define UNITY_CG_INCLUDED #define UNITY_P

原创 (三)unity shader在實際項目中出現的問題————部分機型(如三星Note9)在某場景實時陰影閃爍問題

本專欄主要解決一些移動平臺上unity shader效果異常的問題。很多情況下我們發現unity中的shader在PC平臺效果正常,但是在移動平臺上效果不對,或者部分機型效果不對的問題,尤其是低檔老年機,作爲一款上線遊戲難免要支持高中低檔