專利名稱:一種基于渲染的分布式行為控制系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及行為控制技術(shù)領(lǐng)域,特別涉及一種基于渲染的分布式行為控制系統(tǒng)。
背景技術(shù):
行為控制是一種控制端對被控制端中的對象行為進(jìn)行控制的技術(shù),其廣泛應(yīng)用于工業(yè)、建筑、動漫、網(wǎng)絡(luò)游戲等領(lǐng)域中。目前基于渲染的行為控制技術(shù)的主要技術(shù)方案都是以C/S(客戶端/服務(wù)器)為基礎(chǔ)的指令控制系統(tǒng),即在客戶端集中對每個可控對象定義出相關(guān)的合法行為集,由服務(wù)器集中發(fā)送相關(guān)指令,再由客戶端調(diào)出相關(guān)的行為定義,最終利用客戶端的底層渲染引擎在終端上進(jìn)行實現(xiàn)?,F(xiàn)有的基于渲染的行為控制系統(tǒng)在網(wǎng)絡(luò)游戲中的應(yīng)用存在以下缺點1、行為變更操作困難,定義僵化。在客戶端定義行為集后,服務(wù)器只能發(fā)送固定的行為指令,如果出現(xiàn)新的需求,既需要在對客戶端行為集中加入新的行為,也需要在客戶端與服務(wù)器同時定義新的調(diào)用指令,更要開發(fā)出底層引擎支持新行為的實現(xiàn)。這個過程涉及內(nèi)容過多,對于客戶端和服務(wù)器都需要進(jìn)行修改,很容易出現(xiàn)問題。2、添加新的行為需要同時更新客戶端與服務(wù)器,所以在更新過程中必須要停止服務(wù),并且必須通過手動或自動的方式對客戶端進(jìn)行更新。這中間既增加了運(yùn)營成本,又嚴(yán)重影響用戶體驗。3、安全隱患問題。由于行為集定義集中放在客戶端,如果客戶端被第三方破解,就極容易被第三方開發(fā)出勾子工具,用來實現(xiàn)非法利益,而對用戶、開發(fā)商和運(yùn)營商來說,則會造成巨大的經(jīng)濟(jì)損失,更會對整個產(chǎn)品造成致使的打擊。
發(fā)明內(nèi)容
本發(fā)明實施例提供一種基于渲染的分布式行為控制系統(tǒng),能夠增加行為定義的靈活性,提高開發(fā)效率,降低技術(shù)門檻,減少運(yùn)營成本,降低安全隱患。為達(dá)到上述目的,本發(fā)明的技術(shù)方案具體是這樣實現(xiàn)的一種基于渲染的分布式行為控制系統(tǒng),該系統(tǒng)包括客戶端和多個控制源點;所述客戶端,用于根據(jù)控制源點發(fā)送的渲染腳本使用渲染引擎和渲染數(shù)據(jù)進(jìn)行渲染;所述控制源點,用于根據(jù)預(yù)先確定的控制邏輯,向客戶端發(fā)送渲染腳本;所述渲染腳本是根據(jù)控制源點自身的行為定義構(gòu)造的可以被客戶端渲染引擎執(zhí)行的文件;所述多個控制源點之間采用分布式設(shè)計,一個控制源點實現(xiàn)一個或多個行為定義。較佳地,所述客戶端包括數(shù)據(jù)存儲模塊,用于保存所述渲染數(shù)據(jù);
渲染模塊,用于執(zhí)行控制源點發(fā)送的渲染腳本,使用所述數(shù)據(jù)存儲模塊保存的所述渲染數(shù)據(jù)進(jìn)行渲染。較佳地,所述速度控制信息包括邏輯控制模塊,用于根據(jù)預(yù)設(shè)的控制邏輯向腳本指令模塊106發(fā)送指令;腳本指令模塊,用于根據(jù)所述邏輯控制模塊發(fā)送的指令,向指定的客戶端發(fā)送指定的渲染腳本。由上述的技術(shù)方案可見,本發(fā)明的這種基于渲染的分布式行為控制系統(tǒng),將現(xiàn)有行為集定義從客戶端中抽出,客戶端僅保留基本的底層渲染功能,將行為集定義中各行為定義分布到本發(fā)明 提出的多個控制源中,該控制源代替現(xiàn)有服務(wù)器的控制指令發(fā)送功能, 根據(jù)自身的行為定義向客戶端發(fā)送相應(yīng)的渲染腳本,而不是控制指令,該渲染腳本可以通過客戶端保留的底層渲染引擎直接執(zhí)行。由于控制源采用了分布式設(shè)計,各種行為定義之間互不干擾,提高了行為定義的靈活性,增加或刪除行為定義變得異常簡便,提高了開發(fā)效率,降低了技術(shù)門檻,減少了運(yùn)營成本,且由于客戶端不需要保存具體行為定義,因此用戶不可能破解行為定義,降低了安全隱患。
圖1為本發(fā)明實施例基于渲染的分布式行為控制系統(tǒng)結(jié)構(gòu)示意圖。
具體實施例方式為使本發(fā)明的目的、技術(shù)方案及優(yōu)點更加清楚明白,以下參照附圖并舉實施例,對本發(fā)明進(jìn)一步詳細(xì)說明。本發(fā)明主要是將現(xiàn)有行為集定義從客戶端中抽出,客戶端僅保留基本的底層渲染功能,將行為集定義中各行為定義采用分布式設(shè)計分布到本發(fā)明提出的多個控制源中,該控制源代替現(xiàn)有服務(wù)器的控制指令發(fā)送功能,根據(jù)自身的行為定義向客戶端發(fā)送相應(yīng)的渲染腳本,而不是控制指令,該渲染腳本可以通過客戶端的底層渲染引擎直接執(zhí)行。由于控制源采用了分布式設(shè)計,各種行為定義之間互不干擾,提高了行為定義的靈活性,增加或刪除行為定義變得異常簡便,提高了開發(fā)效率,降低了技術(shù)門檻,減少了運(yùn)營成本,且由于客戶端不需要保存具體行為定義,因此用戶不可能破解行為定義,降低了安全隱患。圖1為本發(fā)明實施例基于渲染的分布式行為控制系統(tǒng)結(jié)構(gòu)示意圖,如圖1所示,該系統(tǒng)包括客戶端101和多個控制源點102 ;客戶端101,僅擁有底層渲染能力,和具體用于渲染的渲染數(shù)據(jù);用于根據(jù)控制源點發(fā)送的渲染腳本使用渲染引擎和渲染數(shù)據(jù)進(jìn)行渲染;控制源點102,用于根據(jù)預(yù)先確定的控制邏輯,向客戶端發(fā)送渲染腳本,該渲染腳本是根據(jù)控制源點自身的行為定義構(gòu)造的可以被客戶端渲染引擎執(zhí)行的文件;多個控制源點102之間采用分布式設(shè)計,一個控制源點可以實現(xiàn)一個或多個行為定義。在本發(fā)明中,控制源點102是一個邏輯實體,并不是一個具體的物理實體,按照分布式設(shè)計理念,在一臺設(shè)備中可以實現(xiàn)一個控制源點,也可以在一臺設(shè)備上實現(xiàn)多個控制源點,當(dāng)然也可以在多個設(shè)備上重復(fù)實現(xiàn)同一個控制源點。多個控制源點之間,可以是并列的,也可以實現(xiàn)多層次的父子關(guān)系,對于父子關(guān)系的實現(xiàn)屬于現(xiàn)有的成熟技術(shù),這里不再贅述。每個客戶端都可以接收所有的控制源點發(fā)出的渲染腳本,控制源點對客戶端可以全部可用,也可以部分可用,控制源點可以對特定的客戶端進(jìn)行特定操作,而不是統(tǒng)一發(fā)送相同的渲染腳本,具體可以根據(jù)預(yù)設(shè)的控制邏輯而定。其中,客戶端101具體包括
數(shù)據(jù)存儲模塊103,保存用于渲染的渲染數(shù)據(jù);渲染模塊104,用于執(zhí)行控制源點發(fā)送的渲染腳本,使用所述數(shù)據(jù)存儲模塊103保存的所述渲染數(shù)據(jù)進(jìn)行渲染??刂圃袋c102具體包括邏輯控制模塊105,用于根據(jù)預(yù)設(shè)的控制邏輯向腳本指令模塊106發(fā)送指令;邏輯控制模塊105負(fù)責(zé)邏輯控制,所有控制源節(jié)點中的該模塊組合在一起即構(gòu)成了一個完整的控制邏輯,它依靠向腳本指令模塊106發(fā)送指令,達(dá)到對客戶端101進(jìn)行控制的目的。腳本指令模塊106,用于根據(jù)邏輯控制模塊105發(fā)送的指令,向指定的客戶端發(fā)送指定的渲染腳本。對于網(wǎng)絡(luò)游戲應(yīng)用來說,根據(jù)不同的行為定義劃分控制源點并具體實現(xiàn)的方法舉例如下例如游戲中需要如下控制源點場景服務(wù)器,負(fù)責(zé)游戲場景內(nèi)的顯示。場景服務(wù)器內(nèi)同時配置多個子控制源點,包括地形顯示控制源點,建筑顯示控制源點,全局光照控制源點,天氣控制源點,模型控制源點等。模型控制源點又可以包括靜物控制源點、非玩家角色(NPC)控制源點、怪物控制源點、玩家控制源點等。天氣服務(wù)器,用于渲染各種不同的天氣氛圍,通常與場景服務(wù)器中的天氣控制源點相配合。包括天氣控制源點,特效控制源點等。人工智能(Al)服務(wù)器,負(fù)責(zé)游戲場景內(nèi)各種活動對象的AI行為。包括動作控制源點,N PC控制源點、怪物控制源點、玩家控制源點,粒子控制源點,用戶界面(UI)控制源點等。粒子服務(wù)器,負(fù)責(zé)游戲場景內(nèi)各種粒子效果的顯示。包括粒子控制源點等。特效服務(wù)器,負(fù)責(zé)游戲場景內(nèi)各種特效的顯示。包括特效控制源點,粒子控制源點寸。UI服務(wù)器,負(fù)責(zé)游戲內(nèi)各種界面UI的顯示。包括UI控制源點等。這些服務(wù)器既可以部署在一臺物理服務(wù)器的不同進(jìn)程上,也可以配置在多個物理服務(wù)上,之間依靠套接字(socket)進(jìn)行通信。下面以場景服務(wù)器中的天氣控制源點與天氣服務(wù)器中的天氣控制源點的簡單配合實現(xiàn)場景中不同氛圍的應(yīng)用給出一些渲染腳本的實例,這些實例僅供參考,實際上對不同的渲染引擎,渲染腳本的實現(xiàn)方式也相應(yīng)不同,只需要能夠被渲染引擎識別并執(zhí)行即可。例如由場景服務(wù)器發(fā)出的一段渲染全局漫反射光的渲染腳本,具體內(nèi)容如下頂點計算公式
Color(Mfe) = A (Intensity) *AColor*Amaterial+DIntensity*D Color* (N dot L) materialA=環(huán)境D=漫反射Intensity=強(qiáng)度Amaterial =材質(zhì)的反射系數(shù),Dmaterial =材質(zhì)的漫反射系數(shù)N=法向量L=光向量Il幾個全局變量f 1 oat4x4matffor 1 dViewPrο j ;// 復(fù)合變換失巨陣float4x4matfforld ;// 世界矩陣float4 vecLightDir ;//燈光方向float4 materialAmbient ; // 材質(zhì)反射環(huán)境光系數(shù)float4 materialDiffuse ; // 材質(zhì)漫反射系數(shù)Il--------------------------------------------------------------//輸出結(jié)構(gòu)Il--------------------------------------------------------------struct VS_0UTPUT{float4 Pos POSITION ;float4 Color :C0L0R ;};Il---------------------------------------------------------------//頂點渲染器主函數(shù)Il---------------------------------------------------------------VS_0UTPUT VS (float 4Pos POSITION, float3 Normal :N0RMAL){//計算頂點位置VS_0UTPUT Out = (VS_0UTPUT)0 ;Out. Pos = mul (Pos, matfforldViewPro j);H計算頂點顏色float4 Light = normalize (vecLightDir);float4 Norm = normalize (mul (Normal,matWorId));float4 diffuseColor = {1. Of,1. Of,1. Of,1. Of};float4 ambientColor = {0. 5f,0. 5f,0. 5f,1. Of};//saturate Clamps χ to the range
Out. Color = ambientColor * materialAmbient + diffuseColor * saturate(dot(Light,Norm)) * materialDiffuse ;return Out ;}D3DXMATRIXA16 matWorldViewProj ; matWor1dVi ewPrο j = matWorld * matView * matProj ;V_RETURN(g_pConstantTable- > SetMatrix (pd3dDevice, " matfforIdViewProj“ , &matfforldViewProj));V_RETURN(g_pConstantTable- > SetMatrix(pd3dDevice, “ matfforId “, &matfforld));H設(shè)置材質(zhì)D3DMATERIAL9 mtrl ;
ZeroMemory(&mtrl, sizeof (D3DMATERIAL9));mtrl. Ambient, a = 1. Of ;mtrl. Ambient, r = 1. Of ;mtrl. Ambient, g = 1. Of ;mtrl. Ambient, b = 0. Of ;V_RETURN(g_pConstantTable- > SetVector(pd3dDevice, " materialAmbien t“ ,&D3DXVECT0R4(mtrl. Ambient, r, mtrl. Ambient, g,mtrl. Ambient, b, mtrl. Ambient, a)));mtrl. Diffuse, r = 1. Of ;mtrl. Diffuse, g = 1. Of ;mtrl. Diffuse, b = 0. Of ;mtrl. Diffuse, a = 1. Of ;V_RETURN(g_pConstantTable- > SetVector(pd3dDevice, “ materialDiffus e",&D3DXVECT0R4(mtrl. Diffuse, r, mtrl. Diffuse, g,mtrl. Diffuse, b, mtrl. Diffuse, a)));//設(shè)置光的方向D3DXVECT0R4 LightDirect ;LightDirect = D3DXVECT0R4 (cosf (timeGetTime () /350. Of) , 1. Of, sinf (timeGetTime () /350. Of),1. Of);g_p Con st ant Tab Ie- > SetVector (pd3dDevice, " vecLightDir ", &LightDirect);//計算頂點顏色float4 Light = normalize(vecLightDir);float4 Norm = normalize(mul(Normal,matWorld)) ;/////////////////// //////////////////////////////float4 diffuseColor = {1. Of,1. Of,1. Of,1. Of};float4 ambientColor = {0. 5f,0. 5f,0. 5f,1. Of};//saturate Clamps χ to the range
Out. Color = ambientColor * materialAmbient + diffuseColor * saturate(dot(Light,Norm)) * materialDiffuse ;以上代碼為標(biāo)準(zhǔn)的高級著色器語言(HLSL),用來實現(xiàn)全局漫反射的效果,當(dāng)客戶端收到這段腳本后,由底層引擎進(jìn)行渲染,顯示出漫反射光,可以達(dá)到簡單的光照效果。在實際應(yīng)用中,僅僅一個漫反射光并不能達(dá)到理想的效果,所以另一部分光照效果由天氣服務(wù)器來控制。
根據(jù)不同環(huán)境的需求,如果想要在客戶端顯示一個比較炫眼的光照效果,就可以由天氣服務(wù)器發(fā)送以下一段腳本來實現(xiàn)鏡面反射效果鏡面反射顏色計算公式color = AIntensity * Acolor * Amaterial+DIntensity * Dcolor * N dot L * Dmaterial+SIntensity * Scolor * R dot V * SmaterialN是漫反射頂點法向量,L是漫反射入射光向量的反向量,V是鏡面反射的觀察點向量(從被觀察點指向觀察點),R是鏡面反射的的反射向量(出射光)Il--------------------------------------------------------------//全局變量Il--------------------------------------------------------------float4x4 matfforIdViewProj ;// 復(fù)合變換失巨陣float4x4 matfforld ;//世界矩陣float4 vecLightDir ;//燈光方向float4 vecEye ;//觀察點位置float4 materialAmbient ; //材質(zhì)反射環(huán)境光系數(shù)float4 materialDiffuse ; //材質(zhì)漫反射系數(shù)float4 materialSpecular ; //材質(zhì)鏡面反射系數(shù)H--------------------------------------------------------------//輸出結(jié)構(gòu)Il--------------------------------------------------------------struct VS_0UTPUT{float4 Pos POSITION ;float4 Color :C0L0R ;};Il--------------------------------------------------------------//頂點渲染器主函數(shù)H----------------- ---------------------------------------------VS_0UTPUT VS(float4 pos POSITION, float3 normal :N0RMAL){//計算頂點位置VS_0UTPUT Out = (VS_0UTPUT)O ;Out. Pos = mul(pos, matfforIdViewProj) ;//transform PositionH計算燈光方向和觀察方向float3 IightDir = normalize(vecLightDir);float3 posfforld = normalize(mul(pos, matfforld));float3 viewDir = normalize(vecEye-posfforld);H計算法向量方向和漫反射強(qiáng)度float3 normalWorld = normalize (mul (normal, matWorld));
float4 diff = saturate(dot(normalWorld, IightDir));//計算反射光方向(R= 2*(N.L)*N_L)和鏡面反射強(qiáng)度float3 Reflect = normalize(2 * diff * normalWorld-lightDir);float4 specu = pow(saturate(dot(Reflect,viewDir)),0· 5);//計算頂點顏色 float4 diffuseColor = {1. Of, 1. Of, 1. Of, 1. Of};float4 ambientColor = {0. 5f,0. 5f,0. 5f, 1. Of};float4 specularColor = {0. 0f,0. Of, 1. Of, 1. Of};Out. Color = ambientColor 氺 materialAmbient+diffuseColor 氺 diff 氺 materialDiffuse+specularColor 氺 specu 氺 materialSpecular ;return Out ;}//構(gòu)造觀察矩陣D3DXMATRIXA16 matView ;D3DXVECT0R3 vEyePt (0. Of, 3. Of, _5);D3DXVECT0R3 vLookatPt (0. 0f,0. 0f,0. Of);D3DXVECT0R3 vUpVec (0. Of, 1. 0f,0. Of);D3DXMatrixLookAtLH(&matView, &vEyePt,&vLookiitPt,&vUpVec);//構(gòu)造投影矩陣D3DXMATRIXA16 matProj ;float fAspectRatio = (float)pBackBufferSurfaceDesc- > Width / pBackBufferSurfaceDesc- > Height ;D3DXMatrixPerspectiveFovLH(&matProj, D3DX_PI/4, fAspectRatio,1. Of, 100. Of);//構(gòu)造世界矩陣D3DXMATRIXA16 matfforld ;D3DXMatrixIdentity(&matfforld);//設(shè)置坐標(biāo)變換矩陣D3DXMATRIXA16 matfforIdViewProj ;matWorIdViewProj = matfforld * matView * matProj ;V_RETURN(g_pConstant- > SetMatrix(pd3dDevice, “ matfforIdViewProj “, &matfforldViewProj));V_RETURN(g_pConstant- > SetMatrix(pd3dDevice, “ matfforld “, &matfforld));V_RETURN(g_pConstant- > SetVector(pd3dDevice, “ vecEye",&D3DXVECT0R4 (vEyePt. x, vEyePt. y, vEyePt. z,0)));//設(shè)置剔出模式,為不剔出任何面
pd3dDevice- > SetRenderState(D3DRS_CULLM0DE, D3DCULL_N0NE);//設(shè)置材質(zhì)D3DMATERIAL9 mtrl ;ZeroMemory(&mtrl, sizeof(D3DMATERIAL9));mtrl. Ambient, r = 1. Of ;mtrl. Ambient, g = 1. Of ;mtrl. Ambient, b = 0. Of ;mtrl. Ambient, a = 1. Of ;V_RETURN(g_pConstant- > SetVector(pd3dDevice, " materialAmbient",&D3DXVECT0R4 (mtrl. Ambient, r, mtrl. Ambient, g,mtrl. Ambient, b, mtrl. Ambient, a)));mtrl. Diffuse, r = 1. Of ;mtrl. Diffuse, g = 1. Of ;mtrl. Diffuse, b = 0. Of ;mtrl. Diffuse, a = 1. Of ;V_RETURN(g_pConstant- > SetVector(pd3dDevice, “ materialDiffuse “, &D3DXVECT0R4(mtrl. Diffuse, r, mtrl.Diffuse, g,mtrl. Diffuse, b, mtrl. Diffuse, a)));mtrl. Specular, r = 1. Of ;mtrl. Specular, g = 1. Of ;mtrl. Specular, b = 1. Of ;mtrl. Specular, a = 1. Of ;V_RETURN(g_pConstant- > SetVector(pd3dDevice, " materialSpecular “, &D3DXVECT0R4(mtrl. Specular, r, mtrl.Specular.g,mtrl. Specular, b, mtrl. Specular, a)));以上代碼由客戶端底層引擎進(jìn)行渲染,實現(xiàn)了全局鏡面反射的效果。同樣道理,如果想在客戶端實現(xiàn)不同的情景氛圍,都可以通過不同的腳本進(jìn)行實現(xiàn)。由上述的實施例可見,本發(fā)明的這種基于渲染的分布式行為控制系統(tǒng),將現(xiàn)有行為集定義從客戶端中抽出,客戶端僅保留基本的底層渲染功能,將行為集定義中各行為定義分布到本發(fā)明提出的多個控制源中,該控制源代替現(xiàn)有服務(wù)器的控制指令發(fā)送功能,根據(jù)自身的行為定義向客戶端發(fā)送相應(yīng)的渲染腳本,而不是控制指令,該渲染腳本可以通過客戶端保留的底層渲染引擎直接執(zhí)行。由于控制源采用了分布式設(shè)計,各種行為定義之間互不干擾,提高了行為定義的靈活性,增加或刪除行為定義變得異常簡便,提高了開發(fā)效率,降低了技術(shù)門檻,減少了運(yùn)營成本,且由于客戶端不需要保存具體行為定義,因此用戶不可能破解行為定義,降低了安全隱患。
權(quán)利要求
1.一種基于渲染的分布式行為控制系統(tǒng),其特征在于,該系統(tǒng)包括客戶端和多個控制源點;所述客戶端,用于根據(jù)控制源點發(fā)送的渲染腳本使用渲染引擎和渲染數(shù)據(jù)進(jìn)行渲染; 所述控制源點,用于根據(jù)預(yù)先確定的控制邏輯,向客戶端發(fā)送渲染腳本; 所述渲染腳本是根據(jù)控制源點自身的行為定義構(gòu)造的可以被客戶端渲染引擎執(zhí)行的文件;所述多個控制源點之間采用分布式設(shè)計,一個控制源點實現(xiàn)一個或多個行為定義。
2.如權(quán)利要求1所述的基于渲染的分布式行為控制系統(tǒng),其特征在于,所述客戶端包括數(shù)據(jù)存儲模塊,用于保存所述渲染數(shù)據(jù);渲染模塊,用于執(zhí)行控制源點發(fā)送的渲染腳本,使用所述數(shù)據(jù)存儲模塊保存的所述渲染數(shù)據(jù)進(jìn)行渲染。
3.如權(quán)利要求1所述的基于渲染的分布式行為控制系統(tǒng),其特征在于,所述速度控制信息包括邏輯控制模塊,用于根據(jù)預(yù)設(shè)的控制邏輯向腳本指令模塊106發(fā)送指令; 腳本指令模塊,用于根據(jù)所述邏輯控制模塊發(fā)送的指令,向指定的客戶端發(fā)送指定的渲染腳本。
全文摘要
本發(fā)明公開了一種基于渲染的分布式行為控制系統(tǒng),該系統(tǒng)包括客戶端和多個控制源點;所述客戶端,用于根據(jù)控制源點發(fā)送的渲染腳本使用渲染引擎和渲染數(shù)據(jù)進(jìn)行渲染;所述控制源點,用于根據(jù)預(yù)先確定的控制邏輯,向客戶端發(fā)送渲染腳本;所述渲染腳本是根據(jù)控制源點自身的行為定義構(gòu)造的可以被客戶端渲染引擎執(zhí)行的文件;所述多個控制源點之間采用分布式設(shè)計,一個控制源點實現(xiàn)一個或多個行為定義。該系統(tǒng)能夠增加行為定義的靈活性,提高開發(fā)效率,降低技術(shù)門檻,減少運(yùn)營成本,降低安全隱患。
文檔編號H04L29/06GK102158524SQ201010623679
公開日2011年8月17日 申請日期2010年12月30日 優(yōu)先權(quán)日2010年12月30日
發(fā)明者陳鑫 申請人:北京像素軟件科技股份有限公司