復刻手遊《一人之下》的角色渲染

以上是復刻的效果圖,右邊爲unity裏的顯示。

因爲項目的需求,我需要研究一下某訊剛上的手遊《一人之下》的角色渲染。

概述

我用到了截幀工具Snapdragon Profiler來研究。文章提供了我自己寫的shader代碼(URP環境下的),因爲版權

原因資源就沒有了。實際上shader只是渲染流程的一半,另一半需要美術開發流程配合,包括AO貼圖、高光貼圖、

描邊貼圖等等,具體的會在文中講解。

具體的渲染

在Snapdragon Profiler裏可看到,shader已經被加密了,無法看到明文,所以渲染的實現只能靠經驗猜。

先看身體部分的渲染,角色的模型是多個模型合併在一起的,這樣操作的具體原因未知。上半身、頭部、頭髮、下半身、鞋子,都是獨立的模型,然後合併到一起的。

AO貼圖

上半身先有一張主貼圖,並且包括了alpha通道:

alpha通道的數據和RGB通道的其實沒太多關聯,那麼根據經驗來判斷,假設alpha通道的數據是用於

AO貼圖(環境光遮蔽),純黑色是陰影,灰色區域不做任何處理。

按照這個假設做的處理,未加AO貼圖:

加了AO貼圖後:

嗯,和手遊效果一致!果然AO貼圖的數據放入了主貼圖的alpha通道里。

內部描邊

接着,看另外一張和主貼圖結構一樣,但是顏色不一樣的貼圖,alpha通道里也有數據。

這是描邊的貼圖嗎?很有可能,可以假定黑色是描邊,白色是不處理任何東西。所以我增加了內部描邊的功能。

下圖分別是無內部描邊和有內部描邊的效果。效果還是算明顯的。

高光貼圖

頭髮上可以明顯看到有高光的感覺,但是主貼圖卻沒有,那這部分高光是如何生成的呢?

在截幀工具裏,我們可以看到有張貼圖:

它的數據都在alpha通道里,如下:

上過原畫課的人就知道,頭髮的高光一般是畫成H或V形狀,或者它們的變形,所以利用這個貼圖就可以在相應的地方

生成高光效果。下面是實際在Unity裏的效果。

絲襪和鞋子上的高光

這部分高光,它們不是高光貼圖,具體實現我也不甚清楚,我是用blin-phong高光來實現的。

效果和手游上的有點差距,下面右邊的圖是我在Unity裏實現的。

如果有知道怎麼實現的朋友,煩請告知一下。

外描邊

最後,看手遊的效果圖,還有外描邊,而且描邊似乎和主貼圖的顏色相關,也就是主貼圖顏色乘以一個0-1的數值。

或者做了正片疊底。於是,另外使用一個描邊的pass來處理。其中frag的代碼裏,就是主貼圖顏色乘以一個0-1的數值。

得到描邊的顏色值。

float4 fragOuline(v2f i) : SV_Target{
		float4 sampleTex = tex2D(_MainTex, i.uv);
		float3 finalCol = sampleTex.rgb;
		return float4( finalCol.rgb* _OutlineColor * _Outlinebool,1);
}

代碼下載

需要Unity的URP環境下運行。

鏈接:https://pan.baidu.com/s/1rchbh0fg5DLgl03MQJfaBw 
提取碼:4r2y

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章