1. 程式人生 > >shader之——移動端次時代

shader之——移動端次時代

明顯 要求 sheng 然而 image 層次 才會 並不是 項目

  做ta有兩年多了,市面上有比較多的次時代手遊出現,然而很多項目組還是望而卻步。最糾結的還是效率問題,

今天就按照自己的理解,聊聊如何可以做一個高效率的次時代手遊。

次時代手遊,最有代表性的一塊,是場景,它在人的視野中占據大部分比例,而場景最重要的是地表,所以今天

只談談地表的次時代制作。

一.貼圖部分

  首先,一個地表需要包含diffcuse、 bump、spemask 如下圖

技術分享圖片技術分享圖片技術分享圖片

spemask 是可以放在diffuse的通道裏的,但是壓縮帶通道的貼圖就不是那麽容易了,所以把它提出來作為一張新的貼圖

而且只需要他的一個通道就可以了,其他的通道可以留著別的貼圖來使用,一張mask貼圖的rgb可以成為3張地表貼圖的

spemask,這樣看也不算特別的浪費。

二 模型部分

這個模型沒什麽好說的,記得一個原則,大結構用模型做結構,小結構靠法線跟貼圖來表現,這是次時代的基本要求

能省則省

三 shader部分

這個是個重點,我們會發現支持法線支持高光貼圖,那麽我們就需要一個實時燈光,不然烘焙完後,燈光關閉了,就sheng

下最原本的diffuse效果+烘焙圖效果了。如下圖:左圖是烘焙前 右圖是烘焙後

技術分享圖片技術分享圖片

在烘焙後的基礎上,再加一盞Directional light,它的法線效果跟高光效果才會出來。但是加了一盞燈,就要考慮到實時光影,它的消耗是

可想而知的。啰嗦了半天,我們要實現的就是,在不要實時光的情況下如何實現高光跟法線效果。那麽我就得從shader下手,在shader裏面

加上一個能模擬實時燈光的變量

一盞Directional light包含的表面信息是

1 lightDir 方向

2 lightColor 顏色

3 Intensity 強度

至於深層次的信息,比如讓物體產生陰影 是否參與烘焙 ....... 等太多太多的東西,我想也是造成他影響效率的主要原因,但是對我們來說並

不重要,我們把這三個變量去替換shader中的light參數:

Properties部分

Shader "Game_XXX/Scenes/Ref_Static" {
    Properties {
        
        _HightLightStrength(
"HLStrength",Range(1,10)) = 1 _lightDir ("lightDir",vector) = (0,1,0,0) _lightColor ("lightColor",Color) = (1,1,1,1) }

我們將這3個參數去貼換真正燈光裏的這幾個參數,就可以了,結果如下圖:

技術分享圖片

我們會發現,這個高光效果跟真正的光沒有區別,會跟著角色移動而動,而很難想象,這並不是實時光

為了效果明顯,故意把效果調的過強了...

總結:我們應該用這樣的方式去做次時代手遊,看到別的遊戲有光影變化效率卻很高的時候也不用詫異,並不一定是實時光

這只是模擬了平行光,點光源的原理也是如此......

shader之——移動端次時代