当前位置: 首页 > news >正文

网站开发涉及技术wordpress 站长

网站开发涉及技术,wordpress 站长,服装网站,麻城做网站一、效果演示 1、PICO4 Ultra MR 发光的球 2、AR实时光照 二、实现原理 PICO4 Ultra MR开发时,通过空间网格能力扫描周围环境,然后将扫描到的环境网格材质替换为一个透明材质并停止扫描;基于Google ARCore XR Plugin和ARFoundation进行安卓手…

一、效果演示

1、PICO4 Ultra MR 发光的球

2、AR实时光照

二、实现原理

        PICO4 Ultra MR开发时,通过空间网格能力扫描周围环境,然后将扫描到的环境网格材质替换为一个透明材质并停止扫描;基于Google ARCore XR Plugin和ARFoundation进行安卓手机的AR开发,通过扫描周围环境进行平面识别,然后将扫描到的平面的材质替换为一个透明材质并停止扫描。此处透明材质可以接收光照和阴影。

三、实现过程

        本教程使用Unity版本为2022.3LTS,渲染管线为URP,Built-In同样可用。

1、创建透明材质

        透明材质着色器来源于Meta的MRUK Sample,点击此处进入其Github页。

        克隆项目至本地,用Unity国际版本打开项目,需要复制着色器及三个依赖文件至计算机本地路径下。

(1)着色器资源准备

        找到下图所示Packages路径下的着色器,右键在资源管理器中打开,复制至本地文件夹下。

        找到下图所示Packages路径下的EnvironmentDepth文件夹,右键在资源管理器中打开,将EnvironmentOcclusion.cginc、URP中的EnvironmentOcclusionURP.hlsl和BiRP中的EnvironmentOcclusionBiRP.cginc复制至本地文件夹下。

        资源复制完成明细如下图所示。

(2)项目导入着色器

        将复制出的着色器及其依赖资源文件拖动至Unity项目合适路径下。此时,着色器会报错。

        此报错为资源引用路径所致,双击打开HighlightsAndShadows着色器脚本进行修改。

        1)找到以下引用:

        修改为:

#include "EnvironmentOcclusionURP.hlsl" //occl

        2)找到以下引用:

        修改为:

#include "EnvironmentOcclusionBiRP.cginc" //occl

注意:此引用有两处,都需修改

        修改完着色器脚本后,其依赖文件也会因资源引用路径而报错。

        双击打开EnvironmentOcclusionBiRP文件进行修改。

        找到以下引用:

        修改为:

#include "EnvironmentOcclusion.cginc"

        双击打开EnvironmentOcclusionURP文件进行修改。

        找到以下引用:

        修改为:

#include "EnvironmentOcclusion.cginc"

(3)创建材质

        按照以上修改完相关文件后,便可以使用HighlightsAndShadows着色器。有两种方式可以将此着色器应用于项目材质。

1)通过着色器直接创建材质

        选中HighlightsAndShadows着色器,鼠标右键-->Create--> Material。

2)材质引用着色器

        选中项目材质,在Shader设置中,选择Meta/MRUK/Scene/HighlightsAndShadows。

(4)材质效果

        可以将材质应用于Plane物体,查看光影效果。

2、PICO4 Ultra MR 发光的球实现

        此处需要使用空间网格,具体配置不再详述,参见:PICO4 Ultra MR开发 空间网格扫描 模型导出及预览或者PICO官网空间网格

(1)材质替换及停止扫描

        需要在扫描完成后,将网格材质替换为HighlightsAndShadows材质。首先需要找到所有网格对象,扫描生成的网格一般会作为挂载PXR_SpatialMeshManager脚本的物体的子物体,所以只需以此查找网格对象即可。具体代码如下:

public Transform spatialMeshParent;  //空间网格生成的父物体,即挂载PXR_SpatialMeshManager脚本的物体
public Material meshMaterial;        //接收光照和阴影的材质private MeshRenderer[] spatialMeshes;//空间网格上的MeshRenderer数组
private XRMeshSubsystem meshSubsystem;//网格子系统void Start()
{meshSubsystem = XRGeneralSettings.Instance.Manager.ActiveLoaderAs<PXR_Loader>().meshSubsystem;
}void Update()
{if (Controller.UXR_GetKeyDown(0, XR_KeyCode.APP)){spatialMeshes = spatialMeshParent.GetComponentsInChildren<MeshRenderer>();foreach(MeshRenderer renderer in spatialMeshes){renderer.material = meshMaterial;}//停止扫描网格meshSubsystem.Stop();}
}

(2)灯光设置

        创建一个点光源作为小球的子物体,并置于小球中心处。

(3)小球弹跳

        若使小球不会穿过墙面并可以在地面上弹跳,需要给网格预制件添加MeshCollider组件并赋予物理材质,物理材质设置合适弹性参数;小球上则需添加SpereCollider组件和Rigidbody组件,同样设置物理材质。

3、AR实时光照实现

        基于ARFoundation进行手机AR开发,若为安卓手机,额外导入Google ARCore XR Plugin,若为苹果手机,额外导入Apple ARKit XR Plugin。

(1)AR环境搭建

        创建XR Origin,并删除场景里的MainCamera物体。

        按照下图所示设置并添加组件。

        其中,ARPlaneManager的PlanePrefab需要手动创建并制作为预制件,赋予此处。

        创建ARSession。

(2)材质替换及停止扫描

        完整代码如下。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.XR.ARFoundation;
using UnityEngine.XR.ARSubsystems;public class ARDanceManager : MonoBehaviour
{public Material transparentMat;         //接收光照和阴影的材质public GameObject dancerPrefab;         //虚拟人物预制件public ARRaycastManager raycastManager; //射线碰撞检测器public ARPlaneManager m_ARPlaneManager; //平面生成器private List<ARRaycastHit> hits;private GameObject dancerObject = null;private bool hasSpawned = false;// Start is called before the first frame updatevoid Start(){hits = new List<ARRaycastHit>();}// Update is called once per framevoid Update(){if (dancerObject == null){if (Input.touchCount == 0)return;}if (!hasSpawned){var touch = Input.GetTouch(0);if (raycastManager.Raycast(touch.position, hits, TrackableType.PlaneWithinPolygon | TrackableType.PlaneWithinBounds)){var hitPose = hits[0].pose;if (dancerObject == null)//没有虚拟物体则生成{dancerObject = Instantiate(dancerPrefab, hitPose.position, /*hitPose.rotation*/dancerPrefab.transform.rotation);dancerObject.name = "Dancer";m_ARPlaneManager.enabled = false;SetAllPlanesTransparent();}else                      //有虚拟物体将虚拟物体锚定到射线碰撞点处{dancerObject.transform.position = hitPose.position;}}hasSpawned = true;}}//设置渲染的平面为透明void SetAllPlanesTransparent(){foreach (var plane in m_ARPlaneManager.trackables){plane.gameObject.GetComponent<MeshRenderer>().material = transparentMat;plane.gameObject.GetComponent<LineRenderer>().material = transparentMat;}}
}

        以上脚本挂载于场景物体,赋值相应变量即可。

四、视频教程

        视频教程参见:

http://www.dtcms.com/a/443627.html

相关文章:

  • 环保类网站模板免费下载湖南省建设工程招标网
  • 国外网站后台模板下载如何在网站上做咨询浮动窗口
  • 响应式网站制作公司wordpress 置顶 不显示
  • 佛山网站推广怎么做一站式网站建设报价
  • Perl 错误处理
  • 岑溪网站开发怎样建个人网站 步骤
  • Amber24 安装指南:Ubuntu 22.04 + CUDA 12.4 环境
  • 做淘宝链接的网站网吧网络组建方案
  • 冀icp 网站建设电商网站的制作流程
  • 银川做网站多少钱郑州高端网站建设多少钱
  • Menji 和 gcd
  • 网站大小多少合适天元建设集团有限公司商业承兑汇票信誉怎么样
  • 晚上必看的正能量网站app世界重大新闻
  • 在征婚网站上认识做期货建站网址打不开
  • 租用网站如何制作网页金马国旅网站建设分析
  • 网络科技有限公司照片企业营销型网站seo推广
  • 网站建设犀牛新媒体营销的概念是什么
  • 阿里云网站备案查询国内ip地址代理免费
  • 算法题(226):L国的战斗之间谍
  • 网站建设投标文档腾讯云买域名
  • 做图文链接网站社团网站模板
  • 鹤壁网站建设优化包商科技wordpress
  • 长春网站建设优化排名wordpress主题调用插件
  • 自己做网站需不需要钱外贸网络推广网
  • 网站开发有什么职位申请了域名先做网站还是先备案
  • 淘宝支持做微交易网站吗宝安高端网站设计怎么样
  • 潍坊大型做网站建设的公司网页设计与制作教程图文混排
  • 做我女朋友吧网站wamp下安装wordpress
  • 期望最大化(Expectation Maximization,EM)
  • 网站空间大小有什么用课程网站开发背景和意义