《蓝色协议BLUE PROTOCOL》技术分享解读
「ブループロトコル」を“劇場アニメクァ£ティ”たらしめる手法とは?ゲーム制作におけるアニメ表現(xiàn)技法を紹介【CEDEC2020】 OnlineGamer
藍色協(xié)議現(xiàn)在也算是最強的三渲二游戲之一了,所以一直在等發(fā)售好扒,沒想它還沒正式上線就發(fā)了這東西,看來也是個和ARC一樣樂于分享的團隊……同時也讓行業(yè)技術壁壘進一步得到了降低,大家飯碗更加不穩(wěn)了。
但是藏著也沒啥用,對你有威脅的人反正肯定都會知道的,還不如讓大家都知道。藏技術本來就是件很無聊的行為,你自己獨有的技術能有幾個?又能起到多大效果?而你不說,當其他人不會說么?
不要違抗時代的步伐。
描邊
它使用用模型擴邊法繪制頭部,并用后處理描邊處理其他部分。
?
?
模型擴邊用了單獨儲存共點平均法線的方式來修復分叉,是常見做法。它并沒有繼續(xù)解釋,我在這補充一下,這個描邊法線想在蒙皮網格上正常使用需要轉到切線空間,或者直接儲存在切線上。
如果想做得更好一點,還可以根據(jù)法線的角度方差來增強這部分的描線寬度,這樣就能把發(fā)尖做出來。
后處理部分則是重點。后處理描邊之前不適用主要是可控性差,而像二之國那樣增加可控性會耗費比較高的成本。而它現(xiàn)在只用來繪制頭部以外的部分,則降低了一定要求。
根據(jù)深度和粗細來控制線條的粗細是常用的做法,關鍵如何指定描邊的粗細(通常內部會比外部細,小物體會比大物體細),而它沒有給出任何解釋。但即使是選擇不控制粗細,至少也要通過Mask來屏蔽頭部的后處理陰影。
我覺得或許是選擇了多個采樣點中深度最高的那個像素坐標的信息。這樣做雖然在多個物體交會處會不準確,但大概率是OK的,畢竟大家的參數(shù)其實差別不大。顏色的定制也可以用這種方法,如果想節(jié)省帶寬可以用LUT索引來取代具體的顏色值。
然后就是,它用的是外描邊(忽略比自己深度低的部分的貢獻),還是雙側都有?如果用外描邊,好處就是和擴邊描邊表現(xiàn)比較一致,雙側則更容易實現(xiàn)描邊的軟過渡(消除鋸齒)。但藍色協(xié)議也可能是靠TAA來消除這部分鋸齒的,所以不太好判斷。我覺得是后者。
?
這部分用色彩差異來生成內部描邊。不過藍色協(xié)議其實這些物件都是單獨建模了的,本來就能生成大部分描邊,只是因為后處理的深度差異太低了,需要利用這些數(shù)據(jù)強化描線的粗細。另外,原文表示描線的粗細是由這張圖的亮度差決定的,畫面結果也確實像是這樣。但是用這種方式定義寬度必然容易產生沖突,而看結果,大部分情況生成的描邊都是等寬的(clamp到最大值了?)
我覺得他們應該放棄了精確定義不同部位的描線粗細差異,就算有參數(shù)應該也只是屏蔽描邊用。畢竟真需要糾結細節(jié)的時候,也可以直接換普通擴邊描邊。
暗部和投影
?
它搞了一個逆光時亮部區(qū)域增大為70%來解決背部缺少光照的問題。
這是個辦法,缺點就是逆光的時候輪廓光的感覺有點過強了,另一個方案是逆光扭轉光源,缺點是轉過閾值時會發(fā)生突變。
但這樣做會導致亮部區(qū)域和自投影區(qū)域重疊了,那么它們實際上沒有應用自投影?還是將自投影的Normal bais也一并擴大了?目前看,很可能是前者。但投影顯然也是必須要有的,而他們用了固定的控制圖和后處理陰影兩種方式。
?
此圖的藍色區(qū)域就是降低光照閾值的依據(jù)。在正面能夠看到陰影,但是光照從下方發(fā)射時陰影就會消失。這個方案其實效果并沒有真實投影好,既然這樣做就說明并沒有真實投影。
?
這個帽子的投影其實是通過偏移采樣深度圖來生成的(偏移一定距離采樣深度和當前深度比較,高的話就是陰影),可以看到它異常地和投影物邊緣保持了等寬。這其實已經是一種常用技法了,需要預先生成pre-depth,不需后處理,嘴上說成后處理只是一種讓人容易理解的說辭。而這個種影子其實最適合的地方是額發(fā)的投影。
要我說的話……正常的投影還是需要有的,只有正常的投影才能處理裙子投腿,頭發(fā)投背這樣的情景,雖然大部分情況自投影需要屏蔽,但只有一處用,也該有。而處理好屏蔽物體自投影的問題也可以做到不和70%亮部沖突,雖然確實麻煩。現(xiàn)在這樣也是他們自己權衡后的結果吧。
?
至于身體上標記的固定陰影區(qū)域,他們采用了差異不大時候融合,差異大時變得更暗的做法,讓逆光時候也能看到這些陰影細節(jié),不失為一個折中的好辦法。
?
一般天光其實都是頂光(為了生成較少的建筑陰影),所以直接打人臉上都會完蛋。藍色協(xié)議是直接在人物身上將天光方向拉平了50%,也就是仰角最多45度。這樣倒是有挺多好處的,而且可以回避在逆光時,巨乳會被頂光單獨照亮的問題(我是用自投影解決的)。
但有一說一,其實身體不少部分都更適合用頂光照明,比如手臂肩膀,平光產生的垂直陰影部分太少了。所以比較好的方法其實是身體正常打光,臉部單獨修(然后就會出現(xiàn)照亮巨乳的和暗處的臉部不協(xié)調的問題)。
嘛,畢竟沒自投影,也只能這樣。
其實還有個臉部法線修正的問題。雖然他們沒說,但也不一定沒修。其實一般模型只要做的足夠平滑,光照稍微往上拉一點,就足夠形成良好的明暗邊線了。所以也不太好判斷。
他們強調了因為貼圖精度問題而沒有使用法線紋理,所以暗部的定制只能用上面提到的固定暗部紋理來實現(xiàn)。頭發(fā)上肯定用了(在發(fā)瓣邊緣涂深),臉上用沒用也不好說。
?
這個則是他們比較有價值的設計。通常情況,我們都是專門給一張暗部紋理來表示暗部的色指定,雖然不算麻煩但終究是一個美術工作量。但暗部到底應該是什么樣的顏色其實是有規(guī)律的,對于純色貼圖尤其如此。
?
所以他們做了一個變色工具,看界面,第一排的Hue R YR Y GY G……表示的其實是色環(huán),那么數(shù)值就是某個Hue的顏色在暗部應當進行的偏色。后面的Saturation和Value則應該對應飽和度和明度,表示的也是暗部應該增減的飽和度和明度值,分為8檔繪制了變化曲線。
我不知道是離線生成還是實時計算,其實都行。實時可以用LUT。
它這樣有個好處是可以更方便地做服裝染色。
而且對非賽璐璐風格的作品幫助更大,因為那些作品的貼圖繪制成本較高。
高光
?
邊緣光他們采用了和投影類似的深度檢測法,以便生成固定寬度的邊緣光,根據(jù)光照方向決定偏移距離即可。這個邊緣光主要還是面光時出現(xiàn),用于勾勒人物邊緣。
?
他們?yōu)榱俗鲆粋€頭發(fā)光點搞這么麻煩也是奇了。他們的目標是讓光點隨著鏡頭距離而縮小,并不會根據(jù)鏡頭角度移動,整個過程也和法線無關,和一般人想實現(xiàn)的各向異性效果完全不同。但為了實現(xiàn)它,使用了UV2單獨為這些高光元素準備UV,這并不是為了拉直UV,而是為了精度和留出可供縮放的空白區(qū)域。
?
然后用一張RGBA控制圖來處理。R通道是基本亮度,GB通道記錄的是當前像素距離光斑中心點的距離值,A通道不明,有可能是縮放幅度。
具體做法是,當渲染一個像素時,根據(jù)讀取到的BG通道數(shù)據(jù),和當前UV相加,得到光斑中心。然后反過來減這個BG值同時進行一個根據(jù)距離的縮放。數(shù)值放大的時候,光斑在視覺上就會縮小。
這種做法可以確保光斑的邊緣形狀和R通道保持一致。
但是……離線生成這張圖就要做不少工作,QQ號交易必須讓人手動指定每個光點的中心然后生成控制圖,而且在固定距離看,人物光斑其實并沒有任何變化。
但這種方式似乎是可以做和Normal掛鉤的縮放的。一般做法不行,是因為光斑上每個像素點的Normal是不同的,根據(jù)Normal縮放的程度就不同,會導致光斑扭曲。但它這個方案,每個點都可以找到一個共同的中心點,只要使用這個中心點的Normal……
對,我取不到這個點的Normal,所以不行。
所以只能如此。
表情
他們這也是挺騷的。
骨骼搞這么多,應該是沒有BlendShape做的快的,性能也很抱歉。估計只有在特寫時才會開啟,那樣還行。
BlendShape其實也可以復用的,用SkinWarp一類可以讓眉毛睫毛模型跟隨臉部一起運動,而臉大家都一樣的。
組合也可以通過Mask。
硬要用骨骼搞……是為了減少資源量,或者是為了適應捏臉?
我是不懂了,反正也不做捏臉,應該不會這么搞。
也可能是方便做連續(xù)的表情動畫吧,BlendShape只能做成多個關鍵幀,用骨骼調這個或許更方便點。
特效
?
做不透明的特效應該算是一種風格指導吧。(當然并不是全都是不透明的)
不過必須是不透明特效才有下面的事情。
?
它們更多使用了體積模型來作為特效的載體,而如果是透明特效……會有排序問題。
?
這個頂點移動具體怎么弄的還不清楚,總之是為了實現(xiàn)更加有體積感,而非片狀的特效。
?
下面這個是個由多個Mesh進行插值變化的特效,GGX以前也常這么玩的。
?
他們提到了一個使用不透明特效遇到的問題:多個特效疊加的時候特效遮擋太嚴重了。他們的方案是讓特效移到遠處有一個消隱的效果,應該是增加Cutout的值。
?
但效果也不算好吧,而網點抖動也可以做到讓特效一定程度重疊。
估計他們就是要堅持這種不透明特效的感覺。
此外有一點我忘說了。不透明特效還有個好處是對taa更友好。taa的幀間混合是基于深度的,處理透明物體很容易瞎,表現(xiàn)出來是移動鏡頭透明度變低。為了避免這個問題需要讓透明物體也寫速度buffer,但透明物體覆蓋住的物體就不行了,而它這種alphatest為主的方式就沒這問題。
否則……估計只能放棄taa,那么高光邊界就很難這么銳利而且沒鋸齒。那么就只能考慮模糊邊界,或者想辦法把msaa開起來,延遲部分就不好辦。方案選擇會有不少變化。
パラ
?
他們拋出這么個詞然后假裝我們都知道是啥意思。反正我是不知道。
它指的是上圖左上角那塊偏藍的部分,有點類似屏幕暗角。在整個游戲里都始終存在存在,是藍色協(xié)議的畫面特色,也對其“動畫感”的產生起到了很大的效用。
?
?
效果放大10倍的效果
這個效果基本是一個藍色的變色遮罩,是一個軟邊的弧形,存在于屏幕上方,和太陽方向有關。
其實說白了,就是一個畫遮罩進行區(qū)域調色的后處理特效。如果走正常動畫流程,這一步都是肯定有的。所以如果你想做出和動畫差不多的畫面,當然也應該走這個流程。而且,這個東西不能用光照代替,因為光照是HDR下的,而后處理特效是LDR的。而調色只有在LDR才是對的。
它必須是一個后處理效果。但后處理效果一般不會再去畫指定Mesh,只會給你一個參數(shù)調整工具,怎么設計這個效果就是個問題。
藍色協(xié)議的劇情動畫部分之所以亮眼,也是因為有這種效果:
無非就是各種遮罩圓的位置,硬軟邊。不太在乎性能是可能的。雖然他們什么都沒說,只要知道是這是用后處理做的,就可以試試。只考慮固定過場是可以搞的。
后處理也是可以調用管線內容畫Mesh的,定制能力足夠就行。要效果就不要糾結這點性能。
場景
藍色協(xié)議的場景其實基本就是寫實場景,只做了一些微小的變化。它肯定不是最好的,但是目前的性價比不錯。
?
他們基本走的就是傳統(tǒng)PBR流程,模型法線什么都正常做。只是稍微調整了下基本色貼圖。
?
走的也依然是Substance流程,只是專門設計了一些比較卡通的畫筆,之后就用這些畫筆鋪量了。當然,設計這些畫筆的時候還是要有一些“卡通化”設計的。AO的強度,大倒角,高飽和什么。但只要設計一次其他人就可以普通地執(zhí)行了。
能落地的方案,才有意義。
然后它說了一些其他的卡通化方法,首先是草:
?
它還提到了給草地加入一些閃爍的兩點,圖上看不出來。
之后提到了SunFlare,應該是那個屏幕后處理效果。卡通渲染很依賴體積光,所以自然會有好的效果,假也沒關系,假才是對的。
?
此外就是一個叫SNN的過濾器,谷歌搜SNN Filter就行了,我貼個shadertoy的地址。
https://www.shadertoy.com/view/MlyfWd
是SNN和Kuwahara的對比,左邊那個是SNN。
EN,72采樣,計算量可以忽略,跑應該還是能跑。
旁邊的Kuwahara應該是個類似的算法,64采樣。
可以考慮降低下width。
?
它還有一個調整陰影色的方案。近處藍色,遠處變?yōu)榫G色。
因為大概還是在用延遲管線做場景,如果可以自由定義陰影色就意味著要添加兩張GBuffer這太夸張了。我覺得就是根據(jù)深度值插值兩個顏色,并乘到間接光或者天光上。
大概就是這樣,希望碧藍幻想 RELINK早點出,我不想試,只想抄書。
總結
以上是生活随笔為你收集整理的《蓝色协议BLUE PROTOCOL》技术分享解读的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 努力一下,还是可以成为技术美术(TA)的
- 下一篇: 【UE灯光•简介】UE4光照类型和灯光参