AR 中的阴影与浮现效果 (Unity+高通实现)

http://dev.arinchina.com/unity3dwz/ar6298/6298/

在 AR 制作过程中,添加阴影及浮现能够增强 AR 的效果。
从网上学习了这两种效果的实现方法并分享给大家。
添加阴影
在 Unity 中我们通常给物体添加阴影来增加真实感。


技术分享

但是我们直接这么做的话会在画面中也看到一个白色的平面。所以我们需要一个透明的平面,但能够接收阴影。为了达到这个目的,我们需要一个自定义的着色器。--- Shader "FX/Matte Shadow"

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" }

Shader "FX/Matte Shadow" {
 //语法: Shader "名字" {[Properties] Subshaders [Fallback]}   []--可选项目
// Properties  Shader可以有多个属性(properties),每一个属性都显示在Unity的inspector. 如颜色,贴图,或者任意值
Properties {
    //Color    Color Color-value 在顶点光照打开时,选用的顶点颜色
    _Color ("Main Color", Color) = (1,1,1,1)
    //即使用名叫red的材质,如果有其他也可叫其名字
    _MainTex ("Base (RGB) Trans (A)", 2D) = "white" {}
    //中断值(cutoff value) 做透明效果
    _Cutoff ("Alpha cutoff", Range(0,1)) = 0.5
}
 /*
 Subshaders & Fallback
  每个shader包含多个子shader, 至少包含有一个。当加载shader时,
   Unity会遍历所有子shader.从上往下选择第一个可以支持的。 如果没有可以支持的, Unity会试着用Fallback shader.
 */
SubShader {
 /*
 SubShader { [Tags] [CommonState] Passdef [Passdef ...] }

一个SubShader可以定义一组渲染通道,可选设置共同状态针对所有通道,也可以指定标签
当Unity确实使用那个SubShader时,
它会用该Subshader每个通道一一给对象进行渲染,每一次渲染是一个比较昂贵的操作。尽可能的少用通道。


打开Alpha测试。
加入IgnoreProjector标签来忽略投影机的作用
"Transparent":绝大部分透明的物体、包括粒子特效都使用这个;
LOD 200,200是个代号,设成此的目的就是限制shader级别只到200为止,高过200的不采用,即使显卡支持,也不会使用高过200的shader级别的渲染方式
  // Blend mode values
  我们选择混合的选项的过程是通过以下面的等式来进行RGBA颜色的计算的:
float4 result = SrcFactor * fragment_output + DstFactor * pixel_color;
 */
    Tags {"Queue"="AlphaTest" "IgnoreProjector"="True" "RenderType"="TransparentCutout"}
    LOD 200
    Blend Zero SrcColor
 /*
1.CG代码必须用

CGPROGRAM

。。。

ENDCG括起来
 */
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。原理是我们将使用一个透明但看不到内部的盒子将低于物料的物体隐藏起来。
技术分享

在透明盒子上加上 DepthMask.shader,将 SetRenderQueue.cs 加在需要影藏的物体上。最终我们获得视频中的效果。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,686评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,668评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,160评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,736评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,847评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,043评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,129评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,872评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,318评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,645评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,777评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,470评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,126评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,861评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,095评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,589评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,687评论 2 351

推荐阅读更多精彩内容

  • 111. [动画系统]如何将其他类型的动画转换成关键帧动画? 动画->点缓存->关键帧 112. [动画]Unit...
    胤醚貔貅阅读 12,984评论 3 90
  • 那些年,我的手写回报
    戴帽子的泛泛阅读 125评论 0 0
  • 1、从本篇文章中学到最重要的概念: 要珍惜和家人在一起的时光,多陪陪父母。 2、从本篇文章中学到怦然心动的单词: ...
    a6dfdbc06a45阅读 202评论 0 0
  • 本文参加#漫步青春文学社#活动,作者王思琦。本人承诺,文章内容为原创,且未在其他平台发表过。 又随风 远行八千里。...
    王大人wsq阅读 110评论 0 0
  • 天气好极了。云层挡着太阳,昨晚下过雨,地上有些积水。空气中透出一丝凉意,没有太多灰尘。一年中这样的天色在德里可不多...
    HugoYe阅读 299评论 0 1