Unity醬~ 卡通渲染技術分析(二)
前面的話
上一篇Unity醬~ 卡通渲染技術分析(一) 寫了CharaMain.cginc,服裝的渲染是怎麼實現的。這篇來分析一下頭髮跟面板的實現
頭髮
本來以為unitychan的頭髮會有各向異性的實現,沒想到她也是用的CharaMain.cginc實現的。我們來看看頭髮的材質
其他實現都一樣,也是通過高光反射貼圖來控制高光區域跟反射區域
計演算法線跟視角向量的點積,這樣的效果是越垂直於視角向量的高光越大,然後用RGB貼圖來控制哪些區域更容易出高光
反射依然是用A通道來控制,越白的地方,反射的越強
如何實現面板效果
這麼漂亮的面板,其實只用了兩個效果就實現了
漫反射+邊緣光
這一次我們來詳細說一下漫反射的實現
float_t normalDotEye = dot( i.normal, i.eyeDir );
float_t falloffU = clamp( 1 - abs( normalDotEye ), 0.02, 0.98 );
還是用法線跟視角向量的點積,並且限制在了0.02到0.98的範圍。
本來是夾角越小的值越大,夾角越大的值越小,用1 - 去點積的絕對值後,表示越靠近視角向量的,就越接近0。跟視角向量夾角越大,值也就越大,也就是邊緣的部位值會越大
float4_t falloffSamplerColor = FALLOFF_POWER * tex2D( _FalloffSampler, float2( falloffU, 0.25f ) ); float3_t combinedColor = lerp( diffSamplerColor.rgb, falloffSamplerColor.rgb * diffSamplerColor.rgb, falloffSamplerColor.a );
用剛剛求出來的值,取樣的這張衰減貼圖,也就是反映出面板質感的重要一步了!值越大,取樣出的顏色就越接近肉色。也就是越邊緣越接近肉色
FALLOFF_POWER 是一個衰減係數,skin shader中的值為1,也就是不衰減
再加上邊緣高光
總結
unity chan的技術分析差不多完了,主要的技術特點如下:
- 漫反射是用N.V的值去取樣一張衰減貼圖實現的,這張貼圖還可以用來實現面板效果
- 通過一張高光反射貼圖來控制高光的細節,以及哪些區域要顯示反射
- 邊緣光沒用菲涅爾反射,而是取樣rim貼圖後去乘以漫反射值得到的邊緣高光
- 描邊不是純色的,取樣了紋理顏色,再做了暗化處理
最後再來兩張照片吧~~ 這套渲染效果其實還是蠻不錯的
相關推薦
Unity醬~ 卡通渲染技術分析(二)
前面的話 上一篇Unity醬~ 卡通渲染技術分析(一) 寫了CharaMain.cginc,服裝的渲染是怎麼實現的。這篇來分析一下頭髮跟面板的實現 頭髮 本來以為unitychan的頭髮會有各向異性的實現,沒想到她也是用的CharaMain.cginc實現的。我們來看看頭髮的材質 其他實現都一樣,也是
Unity醬~ 卡通渲染技術分析(一)
前面的話 unitychan是日本unity官方團隊提供的一個Demo,裡面有很好的卡通渲染效果,值得參考學習 上圖是我整理出來的shader結構,可以看到Unity娘被拆分成了很多個小的部件,我想主要是為了掛動態骨骼吧。因為有很多部件的材質,shader其實都是一樣的可以合併成少數幾個 我打算分3個
k8s架構分析(二)--技術流ken
repl cor 客戶端 https 配置 架構 img 前端 客戶 master節點 k8s的集群由master和node組成,節點上運行著若幹k8s服務。 master節點之上運行著的後臺服務有kube-apiserver 、kube-schedu
linux設備驅動之misc驅動框架源碼分析(二)
linux驅動開發misc設備驅動1、misc_open函數分析 該函數在driver/char/misc.c中,misc.c是驅動框架實現的,這裏面的misc_Open函數是misc驅動框架為應用層提供的一個打開misc設備的一個接口。 1、首先我們要知道在misc.c中的misc_init函數
【雷電】源代碼分析(二)-- 進入遊戲攻擊
engine 場景 aud 初始 cto onf 不變 addchild ems 效果圖: 程序分析: 初始化GameLayer場景觸摸。背景、音樂、UI及定時間器 bool GameLayer::init() { if (!CCLayer::init())
vlc源碼分析(二) 播放流程
.net ges bmp pre https 學習 ref lock 流媒體 http://www.cnblogs.com/jiayayao/p/6752388.html 當點擊播放文件或者輸入要播放的文件後,vlc會執行一系列的流程。 首先需要了解視頻以及流媒體處
java代碼實現highchart與數據庫數據結合完整案例分析(二)---折線圖
end idt 。。 客戶端 屬性 hid pla 循環 scrip 作者原創:未經博主允許不許轉載 在上一篇的博客中,展示和分析了如何做一個餅狀圖,有疑問可以參考上一篇博客。 現在分析和展示折線圖的繪制和案例分析, 先展示效果圖: 與餅狀圖不同的是,折線圖展現更多的數據
使用Apriori進行關聯分析(二)
lis 過程 pre alt lock 不一定 根據 返回 req 書接上文(使用Apriori進行關聯分析(一)),介紹如何挖掘關聯規則。 發現關聯規則 我們的目標是通過頻繁項集挖掘到隱藏的關聯規則,換句話說就是關聯規則。 所謂關聯規則,指通過某個元素集推導出
python的引用計數分析(二)
裏的 %20 賦值 手動 計數 python 作用域 新的 pri python所有對象引用計數被減少1的情況: 一.對象的別名被賦予新的對象; a = 23345455 # 增加了一個引用 b = a # 增加了一個引用 print(sys.getrefcount(
【高斯消元】CDOJ1784 曜醬的線性代數課堂(二)
cst %d can cstring 課堂 esp 線性 memset () 高斯消元求矩陣秩板子。 #include<cstdio> #include<cmath> #include<algorithm> #include&
Java淺談數組之內存分析(二)
說明 變量賦值 com logs .info clas code new blog 引用類型的數組的初始化 1數組元素是引用時的內存分析 package com.java.array; class Person{ public int age;//年齡
Ocata Neutron代碼分析(二)——Neutron RPC啟動過程分析
gre add ice common multi tween wait函數 tex 依次 RPC啟動跟Neutron API的啟動在同一個函數中執行,neutron.server.wsgi_eventlet.py中的eventlet_wsgi_server。 def ev
MapReduce多種join實現實例分析(二)
this hashmap track -- 類型 throw mapjoin pac actor 上一篇《MapReduce多種join實現實例分析(一)》,大家可以點擊回顧該篇文章。本文是MapReduce系列第二篇。 一、在Map端進行連接使用場景:一張表十分小、一張表
Spring的IOC分析(二)源碼
width single def app ali instance exc net classpath 承接上節繼續,分析Ioc的工作原理,在典型的 IOC 場景中,容器創建了所有對象,並設置必要的屬性將它們連接在一起(同時一個叫DI“依賴註入”或DL“依賴查找”的概念
google 分屏 橫屏模式 按home鍵界面錯亂故障分析(二) 分屏的啟動過程
activity 根據 動作 home鍵 更新 lean 全屏 擴展 ddt google 進入分屏後在橫屏模式按home鍵界面錯亂(二) 你確定你了解分屏的整個流
Fork-Join 原理深入分析(二)
框架 ryu 循環 app bject ber setname 索引 skip ??本文是將 Fork-Join 復雜且較為龐大的框架分成5個小點來分析 Fork-Join 框架的實現原理,一個個點地理解透 Fork-Join 的核心原理。 1. Frok-Join 框架的
Linux入侵分析(二)分析SSH登錄日誌
入侵分析 雲安全 SSH日誌 SSH登錄情況分析 1.wtmp日誌 last last -x -F 2.查看在線用戶情況 (1)w 命令用於顯示已經登陸系統的用戶列表,並顯示用戶正在執行的指令。單獨執行w命令會顯示所有的用戶,您也可指定用戶名稱,僅顯示某位用戶的相關信息。 (2)who am i
軟件性能測試技術樹(二)----Linux服務器性能
bsp 分析 處理方法 性能測試 linux ron j2e 跳轉 實時 全圖: 測試目的: 測試範圍&性能指標: 測試與生產環境服務器配置不同的處理方法: 實時CPU監控: 實時內存監控: 實時網絡監控: 實時磁盤監控: 萬能命令: Linux
kafka源碼分析(二)Metadata的數據結構與讀取、更新策略
思路 sync 源碼分析 png ada ret code 入隊 後臺線程 一、基本思路 異步發送的基本思路就是:send的時候,KafkaProducer把消息放到本地的消息隊列RecordAccumulator,然後一個後臺線程Sender不斷循環,把消息發給K
[java源碼解析]對HashMap源碼的分析(二)
具體實現 修改 ring 數組大小 inflate 大小 transient misc ear 上文我們講了HashMap那騷騷的邏輯結構,這一篇我們來吹吹它的實現思想,也就是算法層面。有興趣看下或者回顧上一篇HashMap邏輯層面的,可以看下HashMap源碼解析(一)。