一种基于渲染的分布式行为控制系统的制作方法

文档序号:7899087阅读:164来源:国知局
专利名称:一种基于渲染的分布式行为控制系统的制作方法
技术领域
本发明涉及行为控制技术领域,特别涉及一种基于渲染的分布式行为控制系统。
背景技术
行为控制是一种控制端对被控制端中的对象行为进行控制的技术,其广泛应用于工业、建筑、动漫、网络游戏等领域中。目前基于渲染的行为控制技术的主要技术方案都是以C/S(客户端/服务器)为基础的指令控制系统,即在客户端集中对每个可控对象定义出相关的合法行为集,由服务器集中发送相关指令,再由客户端调出相关的行为定义,最终利用客户端的底层渲染引擎在终端上进行实现。现有的基于渲染的行为控制系统在网络游戏中的应用存在以下缺点1、行为变更操作困难,定义僵化。在客户端定义行为集后,服务器只能发送固定的行为指令,如果出现新的需求,既需要在对客户端行为集中加入新的行为,也需要在客户端与服务器同时定义新的调用指令,更要开发出底层引擎支持新行为的实现。这个过程涉及内容过多,对于客户端和服务器都需要进行修改,很容易出现问题。2、添加新的行为需要同时更新客户端与服务器,所以在更新过程中必须要停止服务,并且必须通过手动或自动的方式对客户端进行更新。这中间既增加了运营成本,又严重影响用户体验。3、安全隐患问题。由于行为集定义集中放在客户端,如果客户端被第三方破解,就极容易被第三方开发出勾子工具,用来实现非法利益,而对用户、开发商和运营商来说,则会造成巨大的经济损失,更会对整个产品造成致使的打击。

发明内容
本发明实施例提供一种基于渲染的分布式行为控制系统,能够增加行为定义的灵活性,提高开发效率,降低技术门槛,减少运营成本,降低安全隐患。为达到上述目的,本发明的技术方案具体是这样实现的一种基于渲染的分布式行为控制系统,该系统包括客户端和多个控制源点;所述客户端,用于根据控制源点发送的渲染脚本使用渲染引擎和渲染数据进行渲染;所述控制源点,用于根据预先确定的控制逻辑,向客户端发送渲染脚本;所述渲染脚本是根据控制源点自身的行为定义构造的可以被客户端渲染引擎执行的文件;所述多个控制源点之间采用分布式设计,一个控制源点实现一个或多个行为定义。较佳地,所述客户端包括数据存储模块,用于保存所述渲染数据;
渲染模块,用于执行控制源点发送的渲染脚本,使用所述数据存储模块保存的所述渲染数据进行渲染。较佳地,所述速度控制信息包括逻辑控制模块,用于根据预设的控制逻辑向脚本指令模块106发送指令;脚本指令模块,用于根据所述逻辑控制模块发送的指令,向指定的客户端发送指定的渲染脚本。由上述的技术方案可见,本发明的这种基于渲染的分布式行为控制系统,将现有行为集定义从客户端中抽出,客户端仅保留基本的底层渲染功能,将行为集定义中各行为定义分布到本发明 提出的多个控制源中,该控制源代替现有服务器的控制指令发送功能, 根据自身的行为定义向客户端发送相应的渲染脚本,而不是控制指令,该渲染脚本可以通过客户端保留的底层渲染引擎直接执行。由于控制源采用了分布式设计,各种行为定义之间互不干扰,提高了行为定义的灵活性,增加或删除行为定义变得异常简便,提高了开发效率,降低了技术门槛,减少了运营成本,且由于客户端不需要保存具体行为定义,因此用户不可能破解行为定义,降低了安全隐患。


图1为本发明实施例基于渲染的分布式行为控制系统结构示意图。
具体实施例方式为使本发明的目的、技术方案及优点更加清楚明白,以下参照附图并举实施例,对本发明进一步详细说明。本发明主要是将现有行为集定义从客户端中抽出,客户端仅保留基本的底层渲染功能,将行为集定义中各行为定义采用分布式设计分布到本发明提出的多个控制源中,该控制源代替现有服务器的控制指令发送功能,根据自身的行为定义向客户端发送相应的渲染脚本,而不是控制指令,该渲染脚本可以通过客户端的底层渲染引擎直接执行。由于控制源采用了分布式设计,各种行为定义之间互不干扰,提高了行为定义的灵活性,增加或删除行为定义变得异常简便,提高了开发效率,降低了技术门槛,减少了运营成本,且由于客户端不需要保存具体行为定义,因此用户不可能破解行为定义,降低了安全隐患。图1为本发明实施例基于渲染的分布式行为控制系统结构示意图,如图1所示,该系统包括客户端101和多个控制源点102 ;客户端101,仅拥有底层渲染能力,和具体用于渲染的渲染数据;用于根据控制源点发送的渲染脚本使用渲染引擎和渲染数据进行渲染;控制源点102,用于根据预先确定的控制逻辑,向客户端发送渲染脚本,该渲染脚本是根据控制源点自身的行为定义构造的可以被客户端渲染引擎执行的文件;多个控制源点102之间采用分布式设计,一个控制源点可以实现一个或多个行为定义。在本发明中,控制源点102是一个逻辑实体,并不是一个具体的物理实体,按照分布式设计理念,在一台设备中可以实现一个控制源点,也可以在一台设备上实现多个控制源点,当然也可以在多个设备上重复实现同一个控制源点。多个控制源点之间,可以是并列的,也可以实现多层次的父子关系,对于父子关系的实现属于现有的成熟技术,这里不再赘述。每个客户端都可以接收所有的控制源点发出的渲染脚本,控制源点对客户端可以全部可用,也可以部分可用,控制源点可以对特定的客户端进行特定操作,而不是统一发送相同的渲染脚本,具体可以根据预设的控制逻辑而定。其中,客户端101具体包括

数据存储模块103,保存用于渲染的渲染数据;渲染模块104,用于执行控制源点发送的渲染脚本,使用所述数据存储模块103保存的所述渲染数据进行渲染。控制源点102具体包括逻辑控制模块105,用于根据预设的控制逻辑向脚本指令模块106发送指令;逻辑控制模块105负责逻辑控制,所有控制源节点中的该模块组合在一起即构成了一个完整的控制逻辑,它依靠向脚本指令模块106发送指令,达到对客户端101进行控制的目的。脚本指令模块106,用于根据逻辑控制模块105发送的指令,向指定的客户端发送指定的渲染脚本。对于网络游戏应用来说,根据不同的行为定义划分控制源点并具体实现的方法举例如下例如游戏中需要如下控制源点场景服务器,负责游戏场景内的显示。场景服务器内同时配置多个子控制源点,包括地形显示控制源点,建筑显示控制源点,全局光照控制源点,天气控制源点,模型控制源点等。模型控制源点又可以包括静物控制源点、非玩家角色(NPC)控制源点、怪物控制源点、玩家控制源点等。天气服务器,用于渲染各种不同的天气氛围,通常与场景服务器中的天气控制源点相配合。包括天气控制源点,特效控制源点等。人工智能(Al)服务器,负责游戏场景内各种活动对象的AI行为。包括动作控制源点,N PC控制源点、怪物控制源点、玩家控制源点,粒子控制源点,用户界面(UI)控制源点等。粒子服务器,负责游戏场景内各种粒子效果的显示。包括粒子控制源点等。特效服务器,负责游戏场景内各种特效的显示。包括特效控制源点,粒子控制源点寸。UI服务器,负责游戏内各种界面UI的显示。包括UI控制源点等。这些服务器既可以部署在一台物理服务器的不同进程上,也可以配置在多个物理服务上,之间依靠套接字(socket)进行通信。下面以场景服务器中的天气控制源点与天气服务器中的天气控制源点的简单配合实现场景中不同氛围的应用给出一些渲染脚本的实例,这些实例仅供参考,实际上对不同的渲染引擎,渲染脚本的实现方式也相应不同,只需要能够被渲染引擎识别并执行即可。例如由场景服务器发出的一段渲染全局漫反射光的渲染脚本,具体内容如下顶点计算公式
Color(Mfe) = A (Intensity) *AColor*Amaterial+DIntensity*D Color* (N dot L) materialA=环境D=漫反射Intensity=强度Amaterial =材质的反射系数,Dmaterial =材质的漫反射系数N=法向量L=光向量Il几个全局变量f 1 oat4x4matffor 1 dViewPrο j ;// 复合变换失巨阵float4x4matfforld ;// 世界矩阵float4 vecLightDir ;//灯光方向float4 materialAmbient ; // 材质反射环境光系数float4 materialDiffuse ; // 材质漫反射系数Il--------------------------------------------------------------//输出结构Il--------------------------------------------------------------struct VS_0UTPUT{float4 Pos POSITION ;float4 Color :C0L0R ;};Il---------------------------------------------------------------//顶点渲染器主函数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设置材质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)));//设置光的方向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 ;以上代码为标准的高级着色器语言(HLSL),用来实现全局漫反射的效果,当客户端收到这段脚本后,由底层引擎进行渲染,显示出漫反射光,可以达到简单的光照效果。在实际应用中,仅仅一个漫反射光并不能达到理想的效果,所以另一部分光照效果由天气服务器来控制。
根据不同环境的需求,如果想要在客户端显示一个比较炫眼的光照效果,就可以由天气服务器发送以下一段脚本来实现镜面反射效果镜面反射颜色计算公式color = AIntensity * Acolor * Amaterial+DIntensity * Dcolor * N dot L * Dmaterial+SIntensity * Scolor * R dot V * SmaterialN是漫反射顶点法向量,L是漫反射入射光向量的反向量,V是镜面反射的观察点向量(从被观察点指向观察点),R是镜面反射的的反射向量(出射光)Il--------------------------------------------------------------//全局变量Il--------------------------------------------------------------float4x4 matfforIdViewProj ;// 复合变换失巨阵float4x4 matfforld ;//世界矩阵float4 vecLightDir ;//灯光方向float4 vecEye ;//观察点位置float4 materialAmbient ; //材质反射环境光系数float4 materialDiffuse ; //材质漫反射系数float4 materialSpecular ; //材质镜面反射系数H--------------------------------------------------------------//输出结构Il--------------------------------------------------------------struct VS_0UTPUT{float4 Pos POSITION ;float4 Color :C0L0R ;};Il--------------------------------------------------------------//顶点渲染器主函数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计算法向量方向和漫反射强度float3 normalWorld = normalize (mul (normal, matWorld));
float4 diff = saturate(dot(normalWorld, IightDir));//计算反射光方向(R= 2*(N.L)*N_L)和镜面反射强度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 ;}//构造观察矩阵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);//构造投影矩阵D3DXMATRIXA16 matProj ;float fAspectRatio = (float)pBackBufferSurfaceDesc- > Width / pBackBufferSurfaceDesc- > Height ;D3DXMatrixPerspectiveFovLH(&matProj, D3DX_PI/4, fAspectRatio,1. Of, 100. Of);//构造世界矩阵D3DXMATRIXA16 matfforld ;D3DXMatrixIdentity(&matfforld);//设置坐标变换矩阵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)));//设置剔出模式,为不剔出任何面
pd3dDevice- > SetRenderState(D3DRS_CULLM0DE, D3DCULL_N0NE);//设置材质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)));以上代码由客户端底层引擎进行渲染,实现了全局镜面反射的效果。同样道理,如果想在客户端实现不同的情景氛围,都可以通过不同的脚本进行实现。由上述的实施例可见,本发明的这种基于渲染的分布式行为控制系统,将现有行为集定义从客户端中抽出,客户端仅保留基本的底层渲染功能,将行为集定义中各行为定义分布到本发明提出的多个控制源中,该控制源代替现有服务器的控制指令发送功能,根据自身的行为定义向客户端发送相应的渲染脚本,而不是控制指令,该渲染脚本可以通过客户端保留的底层渲染引擎直接执行。由于控制源采用了分布式设计,各种行为定义之间互不干扰,提高了行为定义的灵活性,增加或删除行为定义变得异常简便,提高了开发效率,降低了技术门槛,减少了运营成本,且由于客户端不需要保存具体行为定义,因此用户不可能破解行为定义,降低了安全隐患。
权利要求
1.一种基于渲染的分布式行为控制系统,其特征在于,该系统包括客户端和多个控制源点;所述客户端,用于根据控制源点发送的渲染脚本使用渲染引擎和渲染数据进行渲染; 所述控制源点,用于根据预先确定的控制逻辑,向客户端发送渲染脚本; 所述渲染脚本是根据控制源点自身的行为定义构造的可以被客户端渲染引擎执行的文件;所述多个控制源点之间采用分布式设计,一个控制源点实现一个或多个行为定义。
2.如权利要求1所述的基于渲染的分布式行为控制系统,其特征在于,所述客户端包括数据存储模块,用于保存所述渲染数据;渲染模块,用于执行控制源点发送的渲染脚本,使用所述数据存储模块保存的所述渲染数据进行渲染。
3.如权利要求1所述的基于渲染的分布式行为控制系统,其特征在于,所述速度控制信息包括逻辑控制模块,用于根据预设的控制逻辑向脚本指令模块106发送指令; 脚本指令模块,用于根据所述逻辑控制模块发送的指令,向指定的客户端发送指定的渲染脚本。
全文摘要
本发明公开了一种基于渲染的分布式行为控制系统,该系统包括客户端和多个控制源点;所述客户端,用于根据控制源点发送的渲染脚本使用渲染引擎和渲染数据进行渲染;所述控制源点,用于根据预先确定的控制逻辑,向客户端发送渲染脚本;所述渲染脚本是根据控制源点自身的行为定义构造的可以被客户端渲染引擎执行的文件;所述多个控制源点之间采用分布式设计,一个控制源点实现一个或多个行为定义。该系统能够增加行为定义的灵活性,提高开发效率,降低技术门槛,减少运营成本,降低安全隐患。
文档编号H04L29/06GK102158524SQ201010623679
公开日2011年8月17日 申请日期2010年12月30日 优先权日2010年12月30日
发明者陈鑫 申请人:北京像素软件科技股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1