链游开发公司

简介: 现在的区块链游戏即为一类特殊的dApp,拥有更复杂的智能合约(后端)与更精美的前端,而NFT可以为游戏中的物品提供所有权记录,促进游戏中的经济发展,甚至可以在游戏完成后将其出售来获取利益,因为NFT可以超越游戏本身,始终存在于区块链上。

与传统的一般电子游戏相比,区块链游戏有着以下特点:

  1)去中心化,区块链游戏的所有执行代码和游戏数据都存储在区块链上,由于区块链分布式账本的特性,这意味着游戏运行方式是完全开放透明的.

  2)资产所有权,玩家对游戏内资产的所有权层级在游戏之上,也就是说,即便游戏不再更新、运营,甚至不再有玩家参与游戏,但是玩家在游戏中获得的虚拟资产仍然永久存在于游戏所依托的区块链中,只要资产存在市场,就可以出售其获取代币。

  3)游戏性不同,从游戏的角度看,区块链游戏的优势是其建立在区块链上所获得的天然经济体系,潜在的盈利能力使得老玩家具有粘性,也能吸引新玩家的加入。另一方面,由于区块链的分布式账本在处理数据时,必须经过验证、记账、存储、维护和传输等一系列操作,且是在去中心化的网络上完成,导致处理所需要的时间较之中心化网络更长,去中心化属性与高性能、低延迟难以兼得,意味着区块链游戏在即时响应的性能上较弱。
  静态物体的核心类是UStaticMesh,它有两个成员变量分别是FStaticMeshSourceModel以及FStaticMeshRenderData。FStaticMeshSourceModel包含了FMeshDescription数据,而FMeshDescription数据则是由FBX文件解析得来的。换句话说FStaticMeshSourceModel是对FBX原始数据的一份拷贝,并对其进行了整理。

  FStaticMeshRenderData是供UE4引擎渲染的数据,它由两个重要的部分组成,分别是FStaticMeshLODResourcesArray和FStaticMeshVertexFactoriesArray。

  StaticMesh的每一层LOD都要生成对应的渲染资源,FStaticMeshLODResourcesArray数组包含了所有LOD层的FStaticMeshLODResources。FStaticMeshLODResources中包含了FStaticMeshVertexBuffers及各种Index Buffer。FStaticMeshVertexBuffers中包含了FPositionVertexBuffer,FPositionVertexBuffer是由FVertexBuffer继承而来的,而FVertexBuffer中包含了图形API的渲染数据FRHIVertexBuffer,因为我调试使用的是DX12,所以对应的实际资源是FD3D12VertexBuffer。FPositionVertexBuffer中存储了cpu端的数据,FD3D12VertexBuffer中存储了GPU端使用的ID3D12Resource资源。

  由流程图中可以看到FPositionVertexBuffer数据是由FMeshDescription转换而来的,这个过程是在逻辑线程中完成的,而创建ID3D12Resource资源则是在渲染线程中执行,因为逻辑线程中保证了提交指令的顺序,所以渲染线程会先创建资源,然后才会使用资源。

  FStaticMeshVertexFactoriesArray中包含了每一个LOD层的VertexFactory,VertexFactory中包含了多个FVertexStream,每一个FVertexStream对应了一个FVertexBuffer,这个FVertexBuffer就是上面创建的ID3D12Resource资源。另外每一个FVertexStream还对应了一个FVertexElement,VertexFactory会根据FVertexElement创建顶点描述资源,也就是DX12的D3D12_INPUT_ELEMENT_DESC,具体流程可以参考上面的流程图。

  资源准备完毕后,我们看看这些资源是如何被渲染的。对于静态物体,在创建Actor的时候渲染指令就会生成。创建Actor的时候会创建UPrimitiveComponent组件,这个组件代表actor会在场景中渲染。UPrimitiveComponent组件中包含了UStaticMesh。UPrimitiveComponent是逻辑线程使用的组件,FPrimitiveSceneInfo是渲染线程使用的组件,因此中间加了一个FPrimitiveSceneProxy来做数据的传递。逻辑线程会将新创建的FPrimitiveSceneInfo加入到FScene中。
  逻辑线程Tick的时候会调用ENQUEUE_RENDER_COMMAND(UpdateScenePrimitives)命令调用渲染线程处理场景中增加,更新或删除的FPrimitiveSceneInfo。根据FPrimitiveSceneInfo中的数据进行Batch合并,将场景中的物体组织成FStaticMeshBatch,而FStaticMeshBatch则会转变成FMeshDrawCommand供底层渲染。对于静态物体来说FScene会将FMeshDrawCommand缓存起来。

  不同的Pass及不同的变体会生成不同的FMeshDrawCommand。UE4中的Pass是写死的,因此想要扩展UE4中的Pass必须要改UE4源码。

  动态物体每一次tick的时候都会进行Batch的合并以及生成对应的FMeshDrawCommand,当然这些动态物体必须是通过可见性剔除留下的物体。

  最后每一个FMeshDrawCommand会调用SubmitDraw()将渲染指令加入到RHICmdList中,RHI线程会读取RHICmdList指令将其转换成对应图形API的操作。

相关文章
|
区块链
DAPP众筹互助系统开发(成熟技术)|DAPP众筹互助系统开发案例分析
智能合约是一种以代码形式存在的合约constructor()public
|
存储 人工智能 物联网
NFT链游系统开发(案例详解)丨元宇宙链游开发方案
NFT链游系统开发(案例详解)丨元宇宙链游开发方案
|
存储 算法 安全
元宇宙链游开发丨盲盒系统开发技术方案(成熟技术)
智能合约作为一种计算机技术,不仅能够有效地对进行处理
|
存储 算法 安全
Stepn跑鞋链游质押NFT系统开发(成熟技术)案例搭建
mapping(uint=>string)public i2s;//position is 0
|
Rust 前端开发 Oracle
NFT链游开发GameFi游戏系统部署技术
编写智能合约是创建动态NFT的关键步骤。你需要使用Solidity或其他支持NFT创建的程式语言(eg Rust、Vyper和Move)来创建智能合约,这个合约会结合metadata来定义NFT的属性、图像。
NFT链游开发GameFi游戏系统部署技术
|
JavaScript 前端开发 测试技术
乌托邦UOT系统开发NFT技术实现
智能合约是代码(它的功能)和数据(它的状态)的集合,存在于以太坊区块链的特定地址。智能合约账户能够在彼此之间传递信息,进行图灵完备的运算。智能合约依靠被称作以太坊虚拟机(EVM)字节代码(以太坊特有的二进制格式)上的区块链运行
乌托邦UOT系统开发NFT技术实现
|
安全 区块链
区块链Gamefi链游(游戏)开发丨Gamefi链游(游戏)系统开发技术实现原理丨成熟技术丨Gamefi链游开发源码运营版
 链游,又称“Gamefi”,字面理解就是区块链游戏。Gamefi即game+finance,字面理解就是游戏化金融。
|
区块链 Windows
区块链链游项目系统开发技术功能丨链游NFT元宇宙系统开发技术方案
区块链链游项目系统开发技术功能丨链游NFT元宇宙系统开发技术方案
153 0
|
存储 安全 调度
NFT链游项目系统开发技术方案丨NFT链游铸造定制开发技术
NFT链游项目系统开发技术方案丨NFT链游铸造定制开发技术
133 0
|
存储 安全 区块链
区块链众筹项目系统开发技术丨泰山众筹商城系统开发技术讲解方案
区块链众筹项目系统开发技术丨泰山众筹商城系统开发技术讲解方案
200 0