• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            戰(zhàn)魂小筑

            討論群:309800774 知乎關(guān)注:http://zhihu.com/people/sunicdavy 開源項(xiàng)目:https://github.com/davyxu

               :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
              257 隨筆 :: 0 文章 :: 506 評(píng)論 :: 0 Trackbacks

            image

             

            終于完成了結(jié)構(gòu)最復(fù)雜的Shader管理器,特性如下:

            GlobalShader管理:

            也就是傳統(tǒng)的手寫Shader,完成特殊的任務(wù),例如線條繪制,2D繪制等等

                class ElementPixelShader : public ShaderBinder
                {
                    DECLARE_RTTIOBJECT( ElementPixelShader )
                    DECLARE_RTTISERIAL( ElementPixelShader )
                    DECLARE_SHADER_METAINFO(ST_PixelShader, L"Shader\\SimpleElementPixelShader.usf",L"Main")
             
                public:
             
                    virtual void BindShaderParameter( eShaderType ShaderType, const ShaderParameterMap& ParameterMap )
                    {
                        mTexture.Bind( ParameterMap, "Texture" );
                    }
             
                    void SetTexture( RenderTexture* NewTexture )
                    {
                        mShaderRHI->SetTextureParameter( mTexture, NewTexture );
                    }
             
                    virtual void Serialize( BinarySerializer& Ser )
                    {
                        __super::Serialize( Ser );
             
                        Ser << mTexture;
                    }
             
                private:
                    ShaderParameter mTexture;
                };
             
                IMPLEMENT_GLOBAL_SHADER( ElementPixelShader, 1);

            管理器中,是一種類似單件存儲(chǔ),通過類型可以直接取到實(shí)例

            MaterialPixelShader管理

            這種Shader通過材質(zhì)節(jié)點(diǎn)生成的shader代碼來記錄每個(gè)Shader信息,每個(gè)MaterialVertexShader需要只做MaterialPixelShader需要的信息并在Shader代碼中傳送給它

            MaterialVertexShader管理

            這類Shader最復(fù)雜,其中的控制代碼生成的宏需要由材質(zhì)提供,例如是否使用TangentSpace。還有一些參數(shù)就更頭疼了, 不是材質(zhì)在制作時(shí)能決定的,例如:一個(gè)材質(zhì)可以應(yīng)用給地形,模型,甚至粒子,所以我把這部分參數(shù)叫做晚綁定參數(shù)(Later Bind Material Parameter)

            MaterialVertexShader本身是抽象的,需要在材質(zhì)應(yīng)用到具體對(duì)象時(shí),由對(duì)象提供其特殊的VertexShader處理Shader,同時(shí)根據(jù)特性設(shè)定晚綁定參數(shù)

             

            晚綁定參數(shù):

              MaterialParameter Parameter;
              Parameter.Set( MPT_UseSkin, mSkinned );
              mMaterialInstance->SetVertexShaderProvider( RTTI_CLASS_INFO( ModelMaterialVertexShader),Parameter );

             

            材質(zhì)緩沖系統(tǒng)

            Shader 動(dòng)態(tài)編譯在很多游戲里都有應(yīng)用,例如:戰(zhàn)地2。游戲第一次啟動(dòng)時(shí),就會(huì)編譯一次Shader。按照很多文章說的,編譯器會(huì)根據(jù)你顯卡及配置編譯出最優(yōu)化的代碼。 我就納悶了, D3D編譯函數(shù)根本沒有傳入設(shè)備句柄,怎么可能根據(jù)機(jī)器配置編譯?我也嘗試過,不同機(jī)器上編譯出來根本就是一樣的。

            在以后引擎啟動(dòng)時(shí),Shader系統(tǒng)就會(huì)自動(dòng)從保存好的緩沖內(nèi)讀取,不用再次編譯。

            這里還要提一個(gè)微軟為D3DX做的升級(jí)Patch系統(tǒng)很惡心,類似于D3DXCompileShader及Shader相關(guān)的函數(shù),在每次調(diào)用函數(shù)時(shí),會(huì)載入一個(gè)D3DX9_xx.dll,調(diào)用完畢后又會(huì)卸載,極大的影響性能。 若不是因?yàn)檫@個(gè),估計(jì)我不會(huì)寫緩沖系統(tǒng)的

            動(dòng)態(tài)編譯更新Shader

            這個(gè)功能是很多引擎都有的,RenderMonkey也一樣,實(shí)現(xiàn)起來很簡單,就是一個(gè)文件時(shí)間戳比較問題,此功能完全是為以后編輯器做準(zhǔn)備。

             

            MaterialShader部分終于告一段落,下面終于可以進(jìn)入材質(zhì)節(jié)點(diǎn)系統(tǒng)的進(jìn)一步完善了

            posted on 2010-07-02 15:28 戰(zhàn)魂小筑 閱讀(2305) 評(píng)論(1)  編輯 收藏 引用 所屬分類: 渲染 Shader 引擎

            評(píng)論

            # re: 支持材質(zhì)Shader的Shader管理器完成,發(fā)圖紀(jì)念 2010-07-02 22:49 小時(shí)候可靚了
            很好很強(qiáng)大。幾個(gè)月前我做材質(zhì)系統(tǒng)的時(shí)候,咋沒想過拿個(gè)好點(diǎn)的SHADER測試測試呢。。。第一次,又讓給了別人。。。。  回復(fù)  更多評(píng)論
              

            国产欧美久久一区二区| 国产亚洲精久久久久久无码AV| 97精品依人久久久大香线蕉97 | 少妇精品久久久一区二区三区 | 内射无码专区久久亚洲| 久久人人爽人人爽人人av东京热 | 亚洲第一极品精品无码久久| 国产精品岛国久久久久| 久久99这里只有精品国产| 精品国产福利久久久| 亚洲欧美日韩久久精品第一区| 国产99久久久久久免费看 | 久久精品草草草| 精品久久久中文字幕人妻| 久久99精品久久久久久水蜜桃| 蜜臀av性久久久久蜜臀aⅴ麻豆| 久久久久亚洲av成人无码电影 | 久久精品国产第一区二区三区| 青草久久久国产线免观| 99久久婷婷国产综合精品草原 | 久久久精品久久久久特色影视| 国产精品久久久久久久久鸭| 亚洲精品无码久久久久sm| 亚洲精品无码久久不卡| 香蕉aa三级久久毛片| 国内精品久久久久久久coent| 久久综合国产乱子伦精品免费| 一级a性色生活片久久无少妇一级婬片免费放 | 精品久久久久久综合日本| 人妻无码αv中文字幕久久| 久久亚洲sm情趣捆绑调教 | 精品久久久久久无码国产| 99久久精品国产一区二区三区| 亚洲成人精品久久| 久久se精品一区二区| 色综合色天天久久婷婷基地| 秋霞久久国产精品电影院| 国产精品一区二区久久精品无码 | 久久精品国产99久久久| 久久久精品午夜免费不卡| 久久午夜电影网|