国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      一種3d渲染方法、裝置及引擎的制作方法

      文檔序號(hào):9922504閱讀:374來源:國(guó)知局
      一種3d渲染方法、裝置及引擎的制作方法
      【技術(shù)領(lǐng)域】
      [0001 ]本發(fā)明涉及圖像處理技術(shù)領(lǐng)域,尤其涉及一種基于DirectX Effect系統(tǒng)的3D清染方法、裝置以及3D游戲引擎。
      【背景技術(shù)】
      [0002]3D引擎需要有各種渲染效果(Effect),比如方向光、點(diǎn)光、陰影等等這些基礎(chǔ)效果,又比如中毒、冰凍、隱身這些游戲中特殊渲染效果。
      [0003]實(shí)現(xiàn)渲染效果的最底層技術(shù)就是Shader,這是一種直接運(yùn)行在顯卡GPU上的程序,一般效果都會(huì)由頂點(diǎn)Shader與像素Shader組成,負(fù)責(zé)整個(gè)渲染流程的不同功能。
      [0004]Shader的輸入包括頂點(diǎn)、貼圖與參數(shù),當(dāng)Shader程序確定功能之后,用戶改變這些輸入就可以顯示出不同的畫面表現(xiàn)。頂點(diǎn)決定渲染物體的形狀,貼圖決定渲染物體的基本顏色與紋理,參數(shù)則最終決定各種特殊效果的具體表現(xiàn),比如方向光效果的方向參數(shù)決定物體的明暗面朝向、隱身效果的Alpha參數(shù)決定了物體透明的程度。
      [0005]游戲畫面每一次渲染即為一次GPU DrawCall。每一次DrawCall對(duì)應(yīng)著一個(gè)Effect、一套Shader,還對(duì)應(yīng)著渲染物體的頂點(diǎn)、貼圖、參數(shù)。DrawCall是GPU進(jìn)行渲染的最基礎(chǔ)調(diào)用。一幀3D畫面的DrawCal I數(shù)量與畫面中的物體數(shù)量成正比,簡(jiǎn)單的物體只有一次DrawCall,復(fù)雜的物體可能有多次DrawCall。
      [0006]3D引擎可能有非常多的渲染效果,這么多的效果不可能都寫在引擎代碼里,因此Effect的描述需要在引擎之外去定義。引擎提供一個(gè)基礎(chǔ)的框架系統(tǒng),支持用戶去擴(kuò)展各種渲染效果。
      [0007]Eff ect系統(tǒng)是底層Shader與各種輸入數(shù)據(jù)之間的橋梁,Eff ect系統(tǒng)定義了Eff ect文件。Effect文件是一種用戶可閱讀和修改的描述文本,它要描述Shader代碼本身,它要定義頂點(diǎn)的格式,它要定義這個(gè)效果需要多少貼圖,最后還要描述各種Shader參數(shù)的定義,一般的Effect都會(huì)帶有幾個(gè)到幾十個(gè)參數(shù)。而Effect系統(tǒng)具體的主要功能有兩個(gè):I)在引擎加載模塊中解釋Effect文件中各種輸入數(shù)據(jù)的定義,2)在引擎渲染模塊中高效的把各種渲染輸入數(shù)據(jù)傳遞到底層的Shader。
      [0008]現(xiàn)有3D引擎的Effect系統(tǒng),一般有兩種實(shí)現(xiàn)選擇:
      [0009]I)直接使用DirectX (Direct extens1n,簡(jiǎn)稱DX)的Ef feet系統(tǒng),這是微軟在DirectX中已經(jīng)實(shí)現(xiàn)的一套Effect系統(tǒng)。優(yōu)點(diǎn)是此系統(tǒng)直接可用且Effect文件格式比較通用,缺點(diǎn)就是無(wú)源碼,不夠靈活,性能方向只能說勉強(qiáng)夠用,真的要做極限的優(yōu)化還有一段距離。這種方案在很多游戲公司自研端游引擎中比較常見。
      [0010]2)自己實(shí)現(xiàn)一套Effect系統(tǒng)。由于微軟DirectX不是跨平臺(tái)的,因此當(dāng)3D引擎有跨平臺(tái)的需求時(shí),引擎開發(fā)者會(huì)自己實(shí)現(xiàn)一套Effect系統(tǒng)。這個(gè)方案的優(yōu)點(diǎn)當(dāng)然就是靈活、有需要可以自行修改,缺點(diǎn)是開發(fā)成本比較大,因?yàn)镋ffect文件是一種比較復(fù)雜的描述文本,基本就是一套簡(jiǎn)化的編程語(yǔ)言,解釋難度比較大。

      【發(fā)明內(nèi)容】

      [0011]經(jīng)工程測(cè)試研究發(fā)現(xiàn),DirectXEffect系統(tǒng)的功能性方面做得還是不錯(cuò)的,引擎沒有跨平臺(tái)需求時(shí)是比較好的選擇,唯一的問題就是它的運(yùn)行性能離理想情況還有不少距離。當(dāng)前大型3D游戲需要渲染大量的物體,而每個(gè)物體Shader越來越復(fù)雜,參數(shù)越來越多,它的性能問題會(huì)更突出一些,因?yàn)镋f feet系統(tǒng)的運(yùn)行消耗,基本上就是與DrawCal I和Shader參數(shù)數(shù)量這兩個(gè)數(shù)值成正比。
      [0012]再具體來說,DirectX Effect的Shader參數(shù)設(shè)置方案是最大的性能問題所在。由于它會(huì)把所有物體參數(shù)記錄在它內(nèi)部的內(nèi)存中,因此這樣會(huì)使整個(gè)渲染流程多一次內(nèi)存的拷貝。即存在DirectX Effect系統(tǒng)時(shí),會(huì)先將物體參數(shù)從引擎內(nèi)存拷貝到DirectX Effect系統(tǒng)的內(nèi)存,然后再?gòu)腄irectX Effeet系統(tǒng)的內(nèi)存拷貝到Shader的驅(qū)動(dòng)內(nèi)存。
      [0013]性能方面的另一個(gè)問題,是參數(shù)設(shè)置數(shù)量的問題,3D引擎的渲染中,有些物體參數(shù)是全局的,比如整個(gè)場(chǎng)景的燈光方向,對(duì)于每一個(gè)DrawCall都是固定的。如果DirectXEffeet系統(tǒng)能有效利用這些信息,就能減少參數(shù)的設(shè)置數(shù)量,最終做到只設(shè)置每個(gè)DrawCalI都不一樣的參數(shù)。但很可惜現(xiàn)有的DirectX Effeet系統(tǒng)并沒有提供這種參數(shù)設(shè)置優(yōu)化,它只會(huì)把整個(gè)Ef f ect的所有參數(shù)在調(diào)用DrawCal I的時(shí)候全部重設(shè)一次。這兩個(gè)問題疊加起來,就會(huì)使得現(xiàn)有的DirectX Effect系統(tǒng)的DrawCall消耗比較大,而且基本都是消耗在參數(shù)的內(nèi)存拷貝上。
      [0014]因此在為了成本考慮不自行實(shí)現(xiàn)一套Effect的前提下,有必要找一種DirectXEffect的運(yùn)行優(yōu)化方案,減少這些Effect參數(shù)的拷貝,提升3D引擎的渲染效率。
      [0015]為實(shí)現(xiàn)上述目的,本發(fā)明提供一種基于DirectXEffect系統(tǒng)的3D渲染方法、裝置及引擎,能夠有效解決DirectX Effeet系統(tǒng)的運(yùn)行性能問題,提高渲染效率。
      [0016]本發(fā)明實(shí)施例提供了一種基于DirectXEffect系統(tǒng)的3D渲染方法,包括步驟:
      [0017]S1、在調(diào)用DrawCall對(duì)當(dāng)前畫面的物體進(jìn)行渲染時(shí),根據(jù)預(yù)置的映射表獲取3D引擎內(nèi)存中的所述物體的參數(shù)值所對(duì)應(yīng)的shader參數(shù)索引值;其中,所述映射表中記錄有DirectX Effect系統(tǒng)的Effect參數(shù)名與shader參數(shù)索引值的映射關(guān)系,且所述3D引擎內(nèi)存中的每一物體的參數(shù)值設(shè)有對(duì)應(yīng)的Effect參數(shù)名;
      [0018]S2、將所述3D引擎內(nèi)存中的所述物體的參數(shù)值拷貝到所述shader參數(shù)索引值所對(duì)應(yīng)的驅(qū)動(dòng)內(nèi)存中。
      [0019]作為上述方案的改進(jìn),所述映射表具體通過以下方式預(yù)先得到:
      [0020]為DirectX Effeet系統(tǒng)中的每一Effeet參數(shù)名設(shè)置對(duì)應(yīng)的唯一識(shí)別碼,并記錄Effect參數(shù)名與唯一識(shí)別碼的映射關(guān)系;其中,每一所述唯一識(shí)別碼作為對(duì)應(yīng)的Effect參數(shù)名的參數(shù)值;
      [0021]將所述唯一識(shí)別碼拷貝到shader的驅(qū)動(dòng)內(nèi)存中以進(jìn)行Effect參數(shù)設(shè)置,使所述DirectX Effect系統(tǒng)產(chǎn)生shader級(jí)別的API回調(diào);
      [0022]在所述API回調(diào)中獲取shader參數(shù)索引值及對(duì)應(yīng)的shader參數(shù)值;其中,所述shader參數(shù)值與所述唯一識(shí)別碼--對(duì)應(yīng);
      [0023]基于所述shader參數(shù)值與所述唯一識(shí)別碼的對(duì)應(yīng)關(guān)系以及所述Effect參數(shù)名與唯一識(shí)別碼的映射關(guān)系,得到所述Effect參數(shù)名與shader參數(shù)索引值的映射關(guān)系。
      [0024]作為上述方案的改進(jìn),所述方法還包括步驟:
      [0025]S3、若當(dāng)前畫面的所有物體渲染完成,則將渲染完成后的當(dāng)前畫面輸出,否則返回步驟S I。
      [0026]作為上述方案的改進(jìn),所述畫面為游戲畫面。
      [0027]本發(fā)明實(shí)施例還提供了一種基于DirectX Effect系統(tǒng)的3D清染方法,包括步驟:
      [0028]S1、在調(diào)用DrawCall對(duì)當(dāng)前畫面的物體進(jìn)行渲染時(shí),根據(jù)預(yù)置的映射表獲取3D引擎內(nèi)存中的所述物體的參數(shù)值所對(duì)應(yīng)的shader參數(shù)索引值;其中,所述映射表中記錄有DirectX Effect系統(tǒng)的Effect參數(shù)名與shader參數(shù)索引值的映射關(guān)系,且所述3D引擎內(nèi)存中的每一物體的參數(shù)值設(shè)有對(duì)應(yīng)的Effect參數(shù)名;
      [0029]S2、根據(jù)所述物體的參數(shù)名判斷對(duì)應(yīng)的參數(shù)值是否為全局Effect參數(shù)值,若在判斷為是全局Effect參數(shù)值并且非首次對(duì)當(dāng)前畫面調(diào)用DrawCall時(shí),返回執(zhí)行步驟SI,否則執(zhí)行步驟S3;其中,所述全局參數(shù)值是指同一場(chǎng)景中所有物體都相同的參數(shù)值;
      [0030]S3、將所述3D引擎內(nèi)存中的所述物體的參數(shù)值拷貝到所述shader參數(shù)索引值所對(duì)應(yīng)的驅(qū)動(dòng)內(nèi)存中。
      [0031]作為上述方案的改進(jìn),所述映射表具體通過以下方式預(yù)先得到:
      [0032]為DirectX Effeet系統(tǒng)中的每一Effeet參數(shù)名設(shè)置對(duì)應(yīng)的唯一識(shí)別碼,并記錄Effect參數(shù)名與唯一識(shí)別碼的映射關(guān)系;其中,每一所述唯一識(shí)別碼作為對(duì)應(yīng)的Effect參數(shù)名的參數(shù)值;
      [0033]將所述唯一識(shí)別碼拷貝到shader的驅(qū)動(dòng)內(nèi)存中以進(jìn)行Effect參數(shù)設(shè)置,使所述DirectX Effect系統(tǒng)產(chǎn)生shader級(jí)別的API回調(diào);
      [0034]在所述API回調(diào)中獲取shader參數(shù)索引值及對(duì)應(yīng)的shader參數(shù)值;其中,所述shader參數(shù)值與所述唯一識(shí)別碼--對(duì)應(yīng);
      [0035]基于所述shader參數(shù)值與所述唯一識(shí)別碼的對(duì)應(yīng)關(guān)系以及所述Effect參數(shù)名與唯一識(shí)別碼的映射關(guān)系,得到所述Effect參數(shù)名與shader參數(shù)索引值的映射關(guān)系。
      [0036]作為上述方案的改進(jìn),所述方法還包括步驟:
      [0037]S4、若當(dāng)前畫面的所有物體渲染完成,則將渲染完成后的當(dāng)前畫面輸出,否則返回步驟S I。
      [0038]作為上述方案的改進(jìn),所述畫面為游戲畫面。
      [0039]本發(fā)明實(shí)施例對(duì)應(yīng)提供了一種基于DirectXEffect系統(tǒng)的3D渲染裝置,包括:[°04°] shader參數(shù)索引值獲取模塊,用于在調(diào)用DrawCalI對(duì)當(dāng)前畫面的物體進(jìn)行清染時(shí),根據(jù)預(yù)置的映射表獲取3D引擎內(nèi)存中的所述物體的參數(shù)值所對(duì)應(yīng)的shader參數(shù)索引值;其中,所述映射表中記錄有DirectX Effect系統(tǒng)的Effeet參數(shù)名與shader參數(shù)索引值的映射關(guān)系,且所述3D引擎內(nèi)存中的每一物體的參數(shù)值設(shè)有對(duì)應(yīng)的Ef fee t參數(shù)名;
      [0041]參數(shù)設(shè)置模塊,用于將所述3D引擎內(nèi)存中的所述物體的參數(shù)值拷貝到所述shader參數(shù)索引值所對(duì)應(yīng)的驅(qū)動(dòng)內(nèi)存中。
      [0042]作為上述方案的改進(jìn),所述映射表具體通過以下方式預(yù)先得到:
      [0043]為DirectX Effeet系統(tǒng)中的每一Effeet參數(shù)名設(shè)置對(duì)應(yīng)的唯一識(shí)別碼,并記錄Effect參數(shù)名與唯一識(shí)別碼的映射關(guān)系;其中,每一所述唯一識(shí)別碼作為對(duì)應(yīng)的Effect參數(shù)名的參數(shù)值;
      [0044]將所述唯一識(shí)別碼拷貝到shader的驅(qū)動(dòng)內(nèi)存中以進(jìn)行Effect參數(shù)設(shè)置,使所述DirectX Effect系統(tǒng)產(chǎn)生s
      當(dāng)前第1頁(yè)1 2 3 4 
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
      1