Unity可編程渲染管道(Scriptable Render Pipeline)

??去年參加Unite2017 Tokyo的時(shí)候,Unity可編程渲染管道(Scriptable Render Pipeline,下面簡(jiǎn)稱SRP)其實(shí)已經(jīng)出來了(資料在這里)。那時(shí)候?qū)nity不太熟所以沒有特別關(guān)注,現(xiàn)在Unity2018已經(jīng)可以用SRP了,所以簡(jiǎn)單介紹一下來龍去脈,以及入門級(jí)的用法,拋磚引玉。

為什么需要SRP

??Unity內(nèi)置的渲染管道只有Forward和Deferred兩種,如下圖。


Unity內(nèi)置的渲染管道

??這兩種內(nèi)置的管道各有優(yōu)缺點(diǎn) ,而你都看不到源代碼,如果為了表現(xiàn)某種特殊的視覺效果修改起來非常不便,所以就有了SRP的誕生。另外,根據(jù)項(xiàng)目的需求寫合適的SRP,也可以降低DC,提高運(yùn)行效率。

怎么使用SRP

安裝
??從這里下載Unity2018之后,就自帶了SRP,無需另外安裝。

使用
?? 接下來我會(huì)一步一步地做一個(gè)只是把屏幕涂成綠色的SRP,可能你不太懂每一步的意義,但是請(qǐng)耐心地跟著做完,再回頭看看每一步就懂了。

第一步:繼承RenderPipeline,編寫實(shí)際的渲染代碼類。

public class BasicPipeInstance : RenderPipeline
{
    //要涂的顏色
    private Color m_ClearColor = Color.black;

    public BasicPipeInstance(Color clearColor)
    {
        m_ClearColor = clearColor;
    }

    //渲染函數(shù),其中ScriptableRenderContext是渲染的上下文,
    //用來執(zhí)行CommandBuffer,而CommandBuffer就是渲染管線每一步的處理
    //CommandBuffer是Unity之前的就有的東西,想詳細(xì)了解請(qǐng)自行百度谷歌
    public override void Render(ScriptableRenderContext context, Camera[] cameras)
    {
        // does not so much yet :()
        base.Render(context, cameras);

        // clear buffers to the configured color
        var cmd = new CommandBuffer();
        cmd.ClearRenderTarget(true, true, m_ClearColor);
        context.ExecuteCommandBuffer(cmd);
        cmd.Release();
        context.Submit();
    }
}

第二步:繼承RenderPipelineAsset,編寫生成SRP數(shù)據(jù)文件的類。

public class BasicAssetPipe : RenderPipelineAsset
{
    public Color clearColor = Color.green;

#if UNITY_EDITOR
    [UnityEditor.MenuItem("SRP-Demo/01 - Create Basic Asset Pipeline")]
    static void CreateBasicAssetPipeline()
    {
        //生成ScriptableObject
        var instance = ScriptableObject.CreateInstance<BasicAssetPipe>();
        //將ScriptableObject保存為文件
        UnityEditor.AssetDatabase.CreateAsset(instance, "Assets/BasicAssetPipe.asset");
    }
#endif

    protected override IRenderPipeline InternalCreatePipeline()
    {
        //應(yīng)該是運(yùn)行時(shí)被調(diào)用生成SRP
        return new BasicPipeInstance(clearColor);
    }
}

第三步:創(chuàng)建SRP asset,如下圖。


創(chuàng)建SRP asset

??這時(shí)候Assets文件夾里會(huì)生成一個(gè)BasicAssetPipe.asset文件。

第四步:將BasicAssetPipe.asset設(shè)置為當(dāng)前使用的SRP。
??打開Editor->Project Settings->Graphics,然后將剛才的BasicAssetPipe.asset文件拖到Scriptable Render Pipeline Settings,如下圖。


SRP設(shè)置

??然后你就可以看到游戲變成一片綠了。


渲染結(jié)果

??代碼在官方的例子里有,路徑和使用的包請(qǐng)自行修改添加。作為不錯(cuò)的入門學(xué)習(xí),也可以看看這位日本大哥的代碼。

參考資料:
https://blogs.unity3d.com/cn/2018/01/31/srp-overview/
http://tips.hecomi.com/entry/2018/02/19/000846

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 111. [動(dòng)畫系統(tǒng)]如何將其他類型的動(dòng)畫轉(zhuǎn)換成關(guān)鍵幀動(dòng)畫? 動(dòng)畫->點(diǎn)緩存->關(guān)鍵幀 112. [動(dòng)畫]Unit...
    胤醚貔貅閱讀 13,518評(píng)論 3 88
  • Why Bothers? 為什么已經(jīng)有ShaderForge這種可視化Shader編輯器、為什么Asset Sto...
    DonaldW閱讀 76,860評(píng)論 16 183
  • 我婆家認(rèn)為,我只顧我自己的身體,不顧老公,孩子,她們的面子,等等所以不值得她們?yōu)槲抑尾。艺J(rèn)為,我難受,自己都照顧...
    秀發(fā)飄飄閱讀 251評(píng)論 0 0
  • 花開終有時(shí), 花謝也有期! 花謝幕的日子來了—— 因?yàn)榱魬偎岳p綿枝頭, ...
    myth神話閱讀 456評(píng)論 1 6
  • 恐懼會(huì)讓你知道什么對(duì)你狠重要
    榕敏閱讀 260評(píng)論 0 0

友情鏈接更多精彩內(nèi)容