在AR应用里,阴影扮演着一个非常重要的角色,通过阴影我们可以直观的感受到当前场景的光源位置、光线强弱、物体的轮廓等,通过将虚拟物体的阴影和现实世界的光照条件统一,我们可以获得更加真实的、符合视觉规律的增强现实体验。
如何在项目中创建阴影?
将主摄像头[Main Camera]设置为深感摄像头[Depth only]。
添加Unity AR Camera Manager脚本,并将主摄像头[Main Camera]拖拽入Camera项。
添加Hit Result Controller脚本,并将下载的AR模型拖入Obj项
脚本内容如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.XR.iOS;
public class HitResultController : MonoBehaviour
{
//private Text text;
public GameObject currentObj;
public GameObject obj;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
if (Input.touchCount > 0)
{
var touch = Input.GetTouch(0);
if(touch.phase == TouchPhase.Began || touch.phase == TouchPhase.Moved)
{
Vector3 screenPos = Camera.main.ScreenToViewportPoint(touch.position);
ARPoint point = new ARPoint
{
x = screenPos.x,
y = screenPos.y,
};
ARHitTestResultType[] resultTypes =
{
ARHitTestResultType.ARHitTestResultTypeFeaturePoint,
ARHitTestResultType.ARHitTestResultTypeEstimatedHorizontalPlane,
ARHitTestResultType.ARHitTestResultTypeExistingPlane,
ARHitTestResultType.ARHitTestResultTypeExistingPlaneUsingExtent,
};
foreach (ARHitTestResultType type in resultTypes)
{
List<ARHitTestResult> hitTestResults = UnityARSessionNativeInterface.GetARSessionNativeInterface().HitTest(point, type);
//text.text = hitTestResults[0].worldTransform.ToString();
if(currentObj == null)
{
currentObj = Instantiate(obj);
}
currentObj.transform.position = UnityARMatrixOps.GetPosition(hitTestResults[0].worldTransform);
//currentObj.transform.rotation = UnityARMatrixOps.GetRotation(hitTestResults[0].worldTransform);
}
}
}
}
}
脚本内容大致为点击后在点击位置显示模型。
模型下载链接:https://www.mixamo.com/
添加平面检测对象及添加Unity AR Generate Plane脚本,其中Plane Prefab项选择 shadowPlanePrefab
添加点云对象并进行相关配置
选择Build Settings并进行项目配置,run。
运行效果
阴影优化,点击[Directional Light],进行相关配置
打开Project Settings,选择Quality,进行相关配置
重新编译运行。得到阴影优化过的效果。
可以看的阴影效果稍微暗淡一点(可以调整),但是显得更加真实。
1、这里使用Unity内置阴影实现,优点是美观、效果好,缺点是性能消耗比较大。
2、内置可以满足学习阶段的开发,在后续的项目实战中,将会采用一些插件来实现阴影,降低性能开销,并且基于环境理解实现动态阴影。
现阶段,大部分的AR技术都会遇到遮罩问题,主要体现在真实物体和虚拟对象的前后位置关系,如果不能实现巧妙的遮挡效果,这个问题将会
影响用户使用时的体验。
如何在项目中加入遮罩?
在开发中,我测试的遮罩效果不太好,就不演示效果了。
本文由 代码君 创作,如果您觉得本文不错,请随意赞赏
采用 知识共享署名4.0 国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
原文链接:https://www.loseboy.cn/archives/02arkit阴影和遮罩
最后更新:2020-04-27 18:42:28
Update your browser to view this website correctly. Update my browser now