新媒体交互装置-拥抱充电站

用户头像
深圳/设计爱好者/4年前/1099浏览
新媒体交互装置-拥抱充电站

原本写在微信公众号上的,一年前的项目了。但是链接太长总是分享不出去,放站酷应该就OK了

离当初做好这个项目过去了也有一年了,这个项目也是我简历上的一个常驻项。不过在一些公司官网投简历的时候经常会需要提交作品的链接,而我总是没有,所以想借着这个复盘的机会,后续需要提供链接时,我也可以直接把推文链接拿出来。


这个装置的背景是:现如今,人们的交流越来越少,交际圈越来越小,我们希望能鼓励人们回到从前乡里乡镇的那种亲切。因此我们制作了这个以拥抱为触发点的灯光交互装置,以拥抱打破彼此的犹豫,以灯光给予彼此力量。



装置的实现分为三步:kincet2.0捕捉体验中动作节点、Touchdesigner处理kinect2.0的数据并搭建装置的交互逻辑、madmapper把Touchdesigner的逻辑赋予实体装置。我主要负责“Touchdegisner交互逻辑的搭建”,当然除此之外还有装置的搭建、材料的选购、灯光动效的设计等内容,这部分是大家一起协作。
由于装置需要保持拥抱才能触发,难保不会有人中途取消拥抱,所以我们的体验者交互分为两种:正常结束or中途中断。在正常结束的流程中,两位体验者需要同时进入就位区,此时小圆会发亮,以此提示用户“您已就位,可进行下一步。”此时两位体验者拥抱,便可触发灯光动效。在中途中断的流程中,两位体验中在任意时刻停止拥抱,都会导致装置触发失败,此时会有一段触发失败时特有的灯光动效展示。
TD是一个比较新的可视化编程软件,并且当初我并没有找到汉化包,所以在最初的使用上其实困难重重,我需要在大量的组件中找到我需要的,并且了解如何运用组合。具体的学习经历我这里就不具体复述,不过还是花了不少时间的。


(TD组件)


TD中分为两个部分,一个是处理Kincet传入数据,一个是处理装置交互逻辑。处理Kinect的这部分由于需要配合Kincet2.0测试,因此交由负责Kinect的人处理。他的职责是在TD中将Kinect2.0识别的人体图像转换为具体的文字数据,通过设置零点,识别两位体验者的位置和彼此的距离。而这个距离便是我们判断体验者状态的关键数据。由于日常紧迫且专业问题,我们采用体验者的胸口作为识别点。识别到的状态分为三种:未就位、已就位、已拥抱,三种状态分别输出0、1、2三个信号,并由我根据这三个信号进行后续处理。


(Kinect处理流程图)


由于灯光动效是以“将预设的影片通过madmapper投映在灯光装置上”的形式实现,且影片需要放在TD中,因此我需要将体验者的三种状态和三个影片(已就位影片、拥抱中的影片、中途中断的影片)对应起来。并且最终合并为一个影片,输出到madmapper中。


(TD全框架)


首先是小圆的已就位影片。这里说是影片,其实是没有动效的,但用的组件还是影片组件(move file in),只是影片固定在特定帧上。当判定体验者已就位时,播放影片;当判定体验者已拥抱或者未就位时,中断影片。这里需要确保不论何时中断影片,影片都是全黑状态。这里我使用的是level组件控制影片的透明度。当体验者已就位时,透明度为1;当体验者状态切换成拥抱中或是未就位时,透明度为0。这样一来,就实现了小圆仅会在体验者已就位时出现灯效。



(已就位影片判定流程)


接下来是拥抱中和中途中断的影片。当判定体验者拥抱中的时,拥抱中的影片播放;当拥抱正常结束时,影片停止。由于TD中影片组件(move file in)播放完毕后会自动循环且无法取消,因此我需要确保当影片结束时候不会循环。由于影片(move file in)组件无法直接判定影片是否结束,因此我需要计时器组件(Timer)来帮我判断。首先需要为影片结尾处增加0.1秒的空画面拿来做后续处理。接着我需要将计时器的时间分成两段,第一段是0~43秒(影片长度为43秒),第二段是43~+43.1秒,并将这两段时间转化成0和1,控制影片组件中play的on和off,计时器时间在0~43秒时,play为on,时间在43~43.1秒时,play为off。用体验者是否拥抱的判定控制计时器的cue,cue为on时,影片会被强制固定在特定帧(cue point)我将这个特定帧设置为影片的最后一帧。
这里我先解释一下为什么要把计时器的时间增加0.1秒,并且为什么要把特定帧(cut point)选在最后一帧。其实按常理来说,应该是当影片播到最后一帧,或者回到第一帧的时候暂停播放,但事实上因为计时器的精度是0.001秒,而负责动效影片的人只能给我把影片长度精确到1秒。比如上面所说的影片长度是43秒,它可能比43秒多出零点几秒或零点零几秒,但我没法验证,可能计时器已经计时结束了,但影片还有几帧没播放,或者影片已经播完了第一遍,第二遍已经播放了几帧,计时器才结束,只有计时器和影片的时长能完美符合的时候,才能采用计时器时间=影片时间的方式。因此,我先是为影片结尾增加了短暂的空画面,然后将计时器区分为两个时段,一个是大致的影片时长,一个是兼容时长。当影片内容播完,进入结尾的空画面时间段时,计时器会在这时进入兼容时长的时间段。由于这里判断的节点是两个时间段,而不是两个特定的时间点,所以我在适当的测试后,将计时器的影片时长设定得比影片内容时长多一点点,确保影片内容能播完,再随意的设置一个兼容时长后,便可以完成计时器和影片的长度匹配了。
然后由于影片结尾已经有空画面了,因此我就将影片的最后一帧作为特定帧(cut point),这样一来就不用再在影片开头增加空画面了。




此时逻辑如下:初始状态下paly是off,cue是on,装置判定到体验者拥抱,控制影片组件的cue切换为off,同时计时器从0开始计时,play切换为on,此时影片从最后一帧播放(此帧结束会从头播放)。当影片进入43~+43.1秒时,play切换为off,影片停止播放。当体验者状态不是已拥抱时,cue切换为on。此时影片play回到了初始状态,play是off,cue是on,计时器停止在43.1秒。此时再将计时器与体验者状态关联,每当体验者状态更变为已拥抱时,刷新计时器(从零开始计时)。此时只要当新一组体验者进入装置并且拥抱,计时器便会进行刷新,重新计时,同时影片组件的play也切换成了on,便成功完成了拥抱时的影片的循环。(在两组体验者之间,计时器始终保持在43.1秒的状态,因此计时器的默认状态是43.1秒)


(拥抱时流程图)


接下来需要考虑如何插入中途中断的影片。首先要确定什么时候算是“中途中断”,这里我的定义是“从装置判定体验者为拥抱中状态开始,到拥抱中的影片播放结束”中的这一段时间内任意时刻被装配判定为停止拥抱,则视作中途中断。这里需要新增一个计时器,我这里称其为计时器2,原来的计时器称为计时器1。将计时器2和中途中断的影片,按照计时器1和拥抱中的影片的方式关联起来,但是计时器2的时间段分为0~2秒和2~+2.1秒。(因为中途中断的影片只有2秒)因为计时器2的触发(play)与计时器1和体验者状态关联,当体验者状态不是拥抱中,且计时器1的时间在0~43秒区间内时,则判定此时体验者为中途中断拥抱,计时器2的play切换为on。(这里需要组合两个数据并形成新的0/1,但此处不再赘述)又由于中途中断的影片需要在播放时覆盖拥抱中的影片,不播放时隐藏,因此需要使用level组件控制中途中断影片的透明度,将透明度与计时器2关联,当计时器时间在0~2秒时显示,在2~2.1秒时隐藏。于此,便完成了装置灯光动效随着体验者状态而变化的交互逻辑。


(完整流程图)


但后续的问题还没结束,当我们初步组装完成装置,并进行测试的时候发现,由于kinect2.0的精度有限,且装置的灯光会对kinect2.0的人体识别产生干扰,因此导致体验者在拥抱的过程中会出现一个人或者两个人的骨骼消失,然后直到两个人离开一定距离的情况下才会重现,或者保持拥抱不动时突然重现。不论一个人还是两个人的骨骼消失,都会被判定为未就位的状态,因为这时kinect会给出一个错误数值,而这个数值大于拥抱中和已就位的数值。因此需要修改逻辑框架,增加装置的容错性。


(容错性优化)


经过一系列的思考,我发现主要是拥抱结束的判定节点不够明确,不具有唯一性,只要体验者骨骼消失就会判定结束。于是我将体验者拥抱开始与结束的判定从原先的“距离”更变为“距离+数量”,其中距离是指两个体验者胸口骨骼点的距离,数量是指识别到的人体骨骼数量。这样一来,原先拥抱开始的判定不受影响,而拥抱结束的判定从原来的“体验者骨骼消失就会判定拥抱结束”变成了“当识别到两个骨骼相距一定距离时,才会判定拥抱结束”。而由于两个骨骼相距较远,因此识别失败的情况也不再出现,这样一来便解决了这个问题。
TD逻辑框架的搭建主要运用了影片组件(move file in)的cue和play、计时器(timer)的start和play、logic的bounds和math。其中logic和math用于处理数据,以类似y=2x的这种函数关系去转换数据。计时器的start是刷新,play是播放。最值得一提的是影片组件的cue和play,在我搭建的框架中,play负责表层的播放与暂停,cue负责里层的重置与还原,就像客户端和服务端的关系一样。play为off的时候装置其实已经没有灯效了,但实际上影片还在中途暂停的状态,只是这个状态离结束只有0.1秒,而当体验者结束拥抱,影片被cue固定在最后一帧的时候,影片在无限趋近于结束。如果没有cue对影片进行重置与还原。则每当一组用户体验结束,计时器和影片会有一个0.1秒的偏差,十组体验者就有1秒的偏差,这是十分严重的问题。此外,如果只有一个play或cue,那么只有两种组合,而同时使用play和cue,则有四种组合,容错性显然要更高。
除了上面TD的搭建之外,其实装置的搭建也是困扰了我们很久的一件事,我们需要亲自动手去把灯带和电线焊在一起,这其中遇到了灯带粘不住灯管,立不起来、焊点焊的不好导致信号传输异常、解决了焊点问题后发现由于电线过长过弯导致信号还是传输异常、超成本等各种问题。整个装置虽然简单,但是对于非专业的我们来说也是零零散散花了两周时间去不断的优化,把能解决的问题都解决了,不能解决的问题向下兼容,最终才成功完成。



这是一个很新鲜的体验,开展前1天傍晚开始就在为了临时出现的各种问题通宵忙碌,直到第二天早上才小睡了两个小时,随后下午检查时发现文件异常,又继续修正,最后在开展前五分钟才确保没有问题,安心的坐下休息。因为资金问题,装置的美观性其实不太行,视频上比现场又更捞了些哈哈。但当我们发现我们的装置吸引到了人来体验,且大家都很愿意过来体验的时候,确实是一件很令人鼓舞的事情。



9
举报
|
19
分享
相关推荐
评论
用户头像
评论你的想法~
表情
喜欢TA的作品吗?喜欢就快来夸夸TA吧!
加载中
推荐素材
科技背景13
乐陶创意体验工坊标志设计
香盒包装设计国风国潮通用香礼盒
小心蛇IP授权
汉堡插画
新能源腊八节海报
彩灯_花灯_春节彩灯_春节花灯_马年彩灯_马年花灯
love玫瑰花
苏门答腊虎母子插画
走进寿县:历史、美食、民俗交织的魅力画卷
玫瑰
木纹贴图设计师常用
船坞民宿概方案
24款ps常用植物笔刷
女生半身插画
卡通兔子插画
国画水墨江南山水画装饰画电视背景墙装饰画
古典中国风线香礼盒包装设计矢量素材
宠物纪念相册H5模板系列 · 温馨治愈系 · 三款主题
暗色系奶油风家装效果图,低调高级 极致享受
 ps常用偷懒笔刷
中秋佳节花好月圆
夏天的游泳池
豌豆射手
中国风书法汉字字体设计其他
你可能喜欢
相关收藏夹
大家都在看
登录注册