DAPP丨NFT卡牌/盲盒/农场/对战链游系统开发技术说明及详细源码

简介: 在mesh正常渲染结束后,再渲染一次,使用decal的shader,向shader中传入一个ClipToDecal的矩阵(=ClipToWorld*WorldToDecal),在FS中计算计算映射到decal框中的坐标,取决于具体的实现,可以将xy坐标作为uv,以及裁剪掉uv0~1之外的部分,将decal渲染出来.

  1.基于面片实现:

  直接用一个Quat的mesh,加上一张贴图,简单直观的实现.

  缺点:只能在平面上贴.

  2.修改贴图:

  将物体的材质贴图替换成原贴图和decal贴图的混合,适用于静态批量的物体

  缺点:只适用于静态物体

  3.基于SubMesh:

  先获取跟目标投影相交的mesh,然后将mesh根据投影框进行裁剪

  1.获取所有可能和投影框相交的mesh,一般游戏引擎都会有Octree或BVH保存mesh的aabb,这一步简单获取aabb相交的mesh即可.

  2.将mesh的顶点数据变换到投影框的三维空间中,这样一来是方便裁剪,二来是裁剪完成后可以将变换后的坐标值直接作为uv值使用.

  3.得到相交的三角形片:

  判断每个点是否在投影框内,如果三角形有任意一个点在框内,则认为三角形与投影框相交.当然这种方法会漏掉一些三角形,比如这中情况:当然如果mesh较小以及要求不精细的话也没有太大问题.

  4.将所有相交的三角形片,合并成新的IndexBuffer,使用新的decal的纹理重新渲染一次,UV可以直接取映射到框中的xy值,当然要注意在shader中把uv 0~1之外的部分clip掉

  5.如果你想的话,也可以对处在边界,不完全在框内部的三角形进行裁剪,最后整理顶点生成新的mesh.

  4.基于Multi-Pass实现:
  和上面方法很相似

  1.获取所有相交的mesh;

  2.在mesh正常渲染结束后,再渲染一次,使用decal的shader,向shader中传入一个ClipToDecal的矩阵(=ClipToWorld*WorldToDecal),在FS中计算计算映射到decal框中的坐标,取决于具体的实现,可以将xy坐标作为uv,以及裁剪掉uv0~1之外的部分,将decal渲染出来.

  Unity的built-in管线中的Projector就是使用的这种方式.

  缺点:如果投影框与多个mesh相交,或者mesh很大,则会产生很大的性能消耗.

  5.修改渲染shader实现

  判断decal框和某个mesh相交时,将decal标记为需要渲染.修改mesh的shader,传入一个或多个decal投影框矩阵+数张decal贴图.FS得到原始的输出颜色后,再根据decal拿到的颜色进行混合,如果同时有多个Decal,则需要不同数量改变shader变体.

  缺点:需要大量调整shader,复杂繁琐,而且一个mesh上的decal数量在运行时发生变化时,需要动态编译shader变体.

  6.基于后处理实现:

  将decal整体作为一个长方体进行渲染两次来对目标进行贴花

  1.首先正常渲染其他的物体,拿到正常渲染的buffer和depth buffer.

  2.将投影框作为一个长方体进行渲染,关闭Face Cull,将depth test设置为GreatEqual,输出一个标志位到stencil buffer(或者任意其他可以标志像素点的方式),不需要输出颜色值

  3.再次将投影框作为长方体渲染,打开Face Cull(只绘制长方形靠前的三个面),再上一步中stencil buffer测试通过的位置绘制,与前面方法不同的是,当前像素点的WorldPosition通过从depth buffer中读取然后反变换获得(后处理中非常常用的方法).

  7.Deferred实现

  大致和上面的方法相同

  deferred渲染管线中渲染所有gbuffer之后

  和上一个方法中讲到的一样,同样是先渲染长方体,写入stencil buffer,然后再次渲染长方体,根据stencil buffer来改变gbuffer中的数据,根据需要选择修改basecolor,normal等;

  因为gbuffer被修改,后面的光照计算会产生decal的效果.

  UE4中的DefferedDecal,就是这种方法(未使用Dbuffer时)

  缺点:只能用于Deferred,不支持烘培光(因为烘培光是在渲染gbuffer时加上的).

  8.Dbuffer

  先进行depth prepass渲染深度图

  用上面提到的方法将decal渲染到类似gbuffer的dbuffer上,然后在渲染gbuffer时(或者forward渲染时),直接应用同样位置对dbuffer进行采样,融合到gbuffer中,可以支持烘培光,支持deferred,forward管线.

相关文章
|
9月前
|
机器学习/深度学习 人工智能 安全
关于Stepn跑鞋NFT链游系统开发技术逻辑|Stepn跑鞋NFT(成熟案例)
智能合约作为Web3下的核心概念from web3 import Web3
|
8月前
|
供应链 IDE 编译器
NFT元宇宙卡牌游戏链游系统开发(技术方案)
  智能合约可以简化交易流程并提高交易速度。它也可以用于供应链管理、资产追踪和其他领域。随着区块链技术的发展,智能合约将成为未来发展趋势之一
|
8月前
|
安全 区块链
NFT卡牌游戏链游系统开发|NFT铸造合约模式系统开发(成熟技术)
区块链技术的点对点、共同参与等特点,保障了参与者最大程度上的自由和隐私
|
10月前
|
存储 算法 安全
Stepn跑鞋链游质押NFT系统开发(成熟技术)案例搭建
mapping(uint=>string)public i2s;//position is 0
|
10月前
|
存储 前端开发 区块链
  NFT卡牌游戏系统开发(链游搭建)
 NFT卡牌游戏系统开发是一项复杂的任务,需要涉及多个方面的技术和知识。
|
10月前
|
存储 前端开发 安全
  从NFT链游到元宇宙:探索卡牌盲盒游戏源码开发
     随着区块链技术和元宇宙概念的兴起,卡牌盲盒游戏成为了数字娱乐领域的热门话题。
|
存储 机器学习/深度学习 JSON
关于Stepn跑步NFT链游开发系统搭建技术
  每个代币都有一个唯一的tokenURI,它在符合特定模式的JSON文件中包含您的资产的元数据。元数据是您存储有关NFT信息的地方,例如名称、图像、描述和其他属性。
关于Stepn跑步NFT链游开发系统搭建技术
|
传感器 编解码 边缘计算
NFT元宇宙卡牌丨盲盒丨农场丨对战区块链游戏链游系统开发(逻辑及规则),NFT元宇宙卡牌丨盲盒丨农场丨对战游戏链游源码功能
元宇宙的发展,从其重要组成部分交互和显示来看,VR要从2K、4K分辨率到视网膜级别(接近16K)的高清晰度,对端到端算力的需求提高数十倍,IT基础设施面临极大挑战。我们需要更大的云数据中心规模,更多的边缘计算,以及数以亿计的各类物理世界的设备端、传感器连接到互联网,共同支撑元宇宙的发展。
|
存储 JSON 网络协议
DAPP丨NFT卡牌/盲盒/农场/对战/链游系统开发(运营版),DAPP丨NFT卡牌/盲盒/农场/对战/链游系统开发(案例及源码)
什么是智能合约? 智能合约(smart-contract)实际上就是运行在以太坊网络中的一段代码。其最大的特点就是:自动执行、一旦部署就不可更改。智能合约这一特点,确保了写在合约里的全部功能,都能够按照逻辑执行。在以太坊部署智能合约之后,就意味着拥有了一段永不消失、自动执行的程度,随时能够与网络合约进行交互。智能合约类似于互联网里的TCP/IP协议,网络的传输运行完全按照协议标准执行。
|
JSON 供应链 JavaScript
NFT卡牌/盲盒/对战/农场链游系统开发方案详细(源码分析)
  一是人机交互技术。这是元宇宙最核心的关键技术之一,主要包括VR虚拟现实技术、AR增强现实技术、MR混合现实技术、全息影像技术、脑机交互技术和体感技术,为元宇宙用户提供了虚拟沉浸现实的体验阶梯,不断深化感知交互。沉浸式交互设备为玩家进入元宇宙提供了真实、持久且顺畅的交互体验,是真实世界与元宇宙的桥梁,而沉浸感的实现需要依托于一个终端设备接口来实现。具备3D显示、大视角高分辨率的AR/VR/MR有望成为元宇宙世界的重要接入方式。