AR 中的阴影与浮现效果 (Unity实现)
来源:互联网 发布:什么是四九算法 编辑:程序博客网 时间:2024/06/10 17:12
增强现实作为一种交互方式是用来承载内容的。用它来承载 2D 内容,就像是给我们原本的世界增添了一些信息;而用它来承载 3D 内容,就会给人一种将虚拟物体带入到现实中的感觉。这里我们将使用 高通+Unity 的方式来实现 3D 效果,并讨论如何添加阴影及如何使虚拟物体浮现出来。
整备工作
1. 下载最新版本的 Unity5
2. 下载最新的 Vuforia SDK
搭建场景
将上面准备好的 Unity Package 导入到 Unity 中,设置 ARCamera 与 ImageTarget 中得参数。创建一个简单的 Cube 对象。注意不要忘记在 ARCamera 中设置 App License Key。
最后通过编译运行,我们就能看到结果了。
添加阴影
在 Unity 中我们通常给物体添加阴影来增加真实感。
但是我们直接这么做的话会在画面中也看到一个白色的平面。所以我们需要一个透明的平面,但能够接收阴影。为了达到这个目的,我们需要一个自定义的着色器。
Shader "FX/Matte Shadow" {
Properties {
_Color ("Main Color", Color) = (1,1,1,1)
_MainTex ("Base (RGB) Trans (A)", 2D) = "white" {}
_Cutoff ("Alpha cutoff", Range(0,1)) = 0.5
}
SubShader {
Tags {"Queue"="AlphaTest" "IgnoreProjector"="True" "RenderType"="TransparentCutout"}
LOD 200
Blend Zero SrcColor
CGPROGRAM
#pragma surface surf ShadowOnly alphatest:_Cutoff
fixed4 _Color;
struct Input {
float2 uv_MainTex;
};
inline fixed4 LightingShadowOnly (SurfaceOutput s, fixed3 lightDir, fixed atten)
{
fixed4 c;
c.rgb = s.Albedo*atten;
c.a = s.Alpha;
return c;
}
void surf (Input IN, inout SurfaceOutput o)
{
fixed4 c = _Color;
o.Albedo = c.rgb;
o.Alpha = 1;
}
ENDCG
}
Fallback "Transparent/Cutout/VertexLit"
}
Properties {
_Color ("Main Color", Color) = (1,1,1,1)
_MainTex ("Base (RGB) Trans (A)", 2D) = "white" {}
_Cutoff ("Alpha cutoff", Range(0,1)) = 0.5
}
SubShader {
Tags {"Queue"="AlphaTest" "IgnoreProjector"="True" "RenderType"="TransparentCutout"}
LOD 200
Blend Zero SrcColor
CGPROGRAM
#pragma surface surf ShadowOnly alphatest:_Cutoff
fixed4 _Color;
struct Input {
float2 uv_MainTex;
};
inline fixed4 LightingShadowOnly (SurfaceOutput s, fixed3 lightDir, fixed atten)
{
fixed4 c;
c.rgb = s.Albedo*atten;
c.a = s.Alpha;
return c;
}
void surf (Input IN, inout SurfaceOutput o)
{
fixed4 c = _Color;
o.Albedo = c.rgb;
o.Alpha = 1;
}
ENDCG
}
Fallback "Transparent/Cutout/VertexLit"
}
使用 Matte Shadow 制作材质球,再将它拖拽到我们的平面上,就得到了我们期望的效果。注意如果没看到阴影的话,很可能是 Scale 或者 Project Quality 设置的问题。
从识别对象中浮现
要实现这个效果,我们需要使用 [Depth Shader](http://pan.baidu.com/s/1fLnFC)。原理是我们将使用一个透明但看不到内部的盒子将低于物料的物体隐藏起来。
在透明盒子上加上 DepthMask.shader,将 SetRenderQueue.cs 加在需要影藏的物体上。最终我们获得视频中的效果。
0 0
- AR 中的阴影与浮现效果 (Unity实现)
- AR中物体的阴影与浮现效果
- unity使用vuforia实现模型AR效果
- Unity编程笔录--实现AR与3D场景结合效果
- Unity用Vuforia做AR实现脱卡效果
- unity物体产生阴影效果
- Vuforia实现AR效果
- css中的阴影效果
- CSS实现阴影效果
- CSS实现阴影效果
- CSS实现阴影效果
- WPF 实现阴影效果
- css实现阴影效果
- Unity拖拽NGUI中的Texture效果实现
- unity中的简单水效果实现
- iOS下按钮同时实现圆角与阴影效果
- Unity-AR实现学习笔记(一)-ImageTarget
- Unity实时阴影实现图解
- Redis在LNMP一键安装下到的安装和使用
- 为Discuz! X3.2批量添加用户的python脚本
- UVA 11235--Frequent values+RMQ问题
- 一起talk GDB吧(第一回:GDB介绍)
- FPGA图像处理系列——乒乓球追踪设计实例
- AR 中的阴影与浮现效果 (Unity实现)
- 聪明
- centos7安装apache-ant-1.9.5-bin.tar.gz
- 带百分比显示的滑块控件
- 解读Cardinality Estimation算法(第二部分:Linear Counting)
- VS2013使用TeeChart---入门
- Android网络编程中关于AsyncHttpClient获取cookie的问题
- SIFT算法
- android Service后台服务的使用