Unity多媒体展示项目经验分享-ImageEffect+动态绑定+网络通信

<ignore_js_op> 
“海尔科技展墙”是去年年初我们为上海家电博览会制作的一个多媒体展项,有限的工期以及对画面的高标准要求为我们的制作带来很大压力,现在来看不得不庆幸当时选对了工具——Unity“简单易用、所见即所得”的特点让我们感受颇深,并且受益匪浅,在此分享一些经验。

首先看视频:

叠加Unity自带的ImageEffects
短暂的开发周期迫使我们需要在有限的时间调试出漂亮的视觉效果,而Unity也确实足够快——通过叠加组合Unity自带的一系列ImageEffect(全屏Shader特效),没有编写一行Shader代码,我们顺利调试出了带有足够科技感的视觉画面,通过下图可以清楚地看到一幅平淡无奇的字符流画面如何被一层层ImageEffect装饰成最终的效果:
<ignore_js_op> 
其中特别值得一提的是Fish Eye特效在这里发挥了非常神奇的功效——扭曲的画面创造出一种曲线字符流的错觉,但实际上所有的字符流在场景中都是平行直线移动的(见图1),省去了编写曲线运动程序的时间。

最后一个Sun Shafts特效是由音频控制的,随着节奏跳跃的光芒是在测试时一边听着音乐一边左右拖动参数滑竿而找到的灵感——所见即所得、实时调试不仅仅是快,而且能够让人发现更多可能性。

最后加入运动模糊特效,不仅增强动态,而且可以用来强调静态的前景:

<ignore_js_op> 
灵活组合Unity自带的一系列ImageEffects可以带来意想不到的结果,而且关键是这个过程够快、够直观,对于周期普遍较短的商业项目而言非常实用。

除此之外Color Correction等颜色调校ImageEffect还可以用来在展会现场的设备上进行色彩调试,让画面色彩不再因为设备质量问题而产生过大偏差。

变色,而且不破坏Dynamic Batching
画面中所有的字符流都是通过Unity的三维文字(TextMesh)来实现的,其支持动态绑定(Dynamic Batching),使得数万的Draw Call可以被减少到几百——但前提是大家共享同一材质。科技展墙中我们设计了两版主题颜色(绿色科技)和(VI配色),如下图:
<ignore_js_op> 
两个配色之间需要平滑过渡,当每一个字符都调用renderer.material.color来改变颜色的时候,Draw Call迅速上升至几万,FPS惨不忍睹——因为renderer.material在调用时会自动创建一个副本,造成每个字符之间的材质不再相同,动态绑定无法执行。而renderer.sharedmaterial虽然不创建副本,直接改变共享材质的属性——但是“牵一发而动全局”导致我们失去了对每一个字符的单独控制能力。

为了解决动态绑定和独立颜色控制间的矛盾,我们不再通过修改材质颜色来变色,而是通过为文字设置不同颜色的材质来实现变色的效果,具体如下:

  • 为渐变过程中每一个颜色创建一个对应的材质并缓存起来(30个)
  • 渐变时根据渐变的进度来为文字设置其中某一个材质。

如此一来场景中最多同时存在的材质实例也只有30个,这使我们在色彩切换时也可以把Draw Call控制在3000左右,在高清画面下实现60FPS已经足够了。

Unity与其他程序进行网络通信
这个项目中有两件事不是Unity做的:

  • Kinect画面处理
  • 音乐播放与频谱分析

当时Unity还没有能够读取Kinect画面的Plugin,我们需要通过OpenFrameworks来读取Kinect画面,处理完毕后再回传给Unity。首先想到的解决方案是osc,因为此前osc已经用过多次——但显然osc不是为这种不间断、大量原始数据传输而设计的,不是慢的问题,而是丢数据。于是换用UDP,轻松胜任,分享接收UDP数据的脚本: <ignore_js_op>UDPReceiver.zip (724 Bytes, 下载次数: 57)

2012-8-16 23:37:42 上传

下载次数: 57 
下载积分: 银子 -1 两

 

音乐播放Unity虽然可以,但是频谱分析不了,所以还是请OpenFrameworks代劳。由于回传的数据只是声音强度(一个整数足以),osc是不二之选,分享当时Unity端使用的OSC脚本: <ignore_js_op> OSC.zip (7.89 KB, 下载次数: 38)

综上,Unity的Plugin功能已经使得它的可扩展性达到极高的水平,但网络仍然不失为一种很好的数据传输方式,毕竟开发Plugin的时间一般会更长,而且将程序功能分开在后期的调试中也更容易一些。


原文地址:http://spotlightor.com/blog/tutorial/haier-kinect-interactive-wall-behind-the-scenes
本项目更多图片和介绍:http://spotlightor.com/case-studies/haier-kinect-interactive-wall/

Unity多媒体展示项目经验分享-ImageEffect+动态绑定的更多相关文章

  1. Unity MMORPG游戏优化经验分享

    https://mp.weixin.qq.com/s/thGF2WVUkIQYQDrz5DISxA 今天由Unity技术支持工程师高岩,根据实际的技术支持工作经验积累,分享如何对Unity MMORP ...

  2. 项目经验分享[转自min.jiang]

        最近三个月,我非常荣幸的做为TeamLeader带领几个小组成员做了一个国外项目,这里想为大家分享一些小经验,尽管我佣有六年多的项目经验,但我一直的方向是架构师.大家知道架构师一般情况是偏向技 ...

  3. Georgia Tech Online Master of Science in Computer Science 项目经验分享

    Georgia Tech Online Master of Science in Computer Science 项目经验分享 Posted on 2014/04/22 项目关键词:工科名校,计算机 ...

  4. IdentityServer4系列之中文文档及实际项目经验分享

    0.前言 原文:http://docs.identityserver.io/en/release/声明: 1.目录一至五章节根据IdentityServer英文文档翻译而来,有些内容会根据自己的理解来 ...

  5. Android 多媒体视频播放一( 多媒体理解与经验分享)

    前言 说到android的多媒体,一把辛酸一把泪,当初听说会多媒体的比较牛掰,公司也有需求,于是乎我也积极的加入研究android多媒体的行列,记得以前刚接触的时候,最开始还是比较头大的,主要是但是很 ...

  6. Matlab项目经验分享-去除震荡点

    Matlab是做科研是比较常用的建模工具,我在研一做项目期间遇到了一个还算比较基础的问题,所以我打算记录下来并分享出来! 处理问题步骤: 1. 抛出问题 2. 思考解决方法 3. 代码验证看结果 抛出 ...

  7. 使用Webpack+Gulp开发运行于Dcloud平台HTML5+引擎的混合APP项目经验分享

    什么是5+Runtime? 首先简单介绍一下5+Runtime: HTML5 Plus Runtime(5+Rumtime)是由Dcloud开发的一套"增强版的手机浏览器引擎",与 ...

  8. [RxJava^Android]项目经验分享 --- 异常方法处理

    简单介绍一下背景,最近RxJava很火,我也看来学习一下,计划在项目的独立模块中使用它.使用过程中遇到很多问题,在这里记录分享一下.可能有使用不当的地方,大家多多包涵.对于RxJava的基本概念和功能 ...

  9. [RxJava^Android]项目经验分享 --- RxLifecycle功能实现分析(一)

      最近在研究RxJava自定义操作符的实现原理,发现成型的项目案例较少.突然想起在项目中应用的RxLifecycle是使用自定义操作符,便拿来研究了一下.分析之前,跟大家了解一些相关操作符和RxLi ...

随机推荐

  1. 精确解释Unicode

    来自:http://blog.csdn.net/gqqnb/article/details/6266542 ---------------------------------------------- ...

  2. zsh命令行

    Linux/Unix提供了很多种Shell,为毛要这么多Shell?难道用来炒着吃么?那我问你,你同类型的衣服怎么有那么多件?花色,质地还不一样.写程序比买衣服复杂多了,而且程序员往往负责把复杂的事情 ...

  3. sublime text3下使用TAG快捷键ctrl+alt+f失效的解决方法

    系统环境:WIN7 版本: sublime text3 问题:为了方便格式化html,下的TAG插件.在package control中在线安装能够安装成功,功能正常使用,就是ctrl+alt+f(A ...

  4. python3类方法,实例方法和静态方法

    今天简单总结下python的类方法,实例方法,静态方法. python默认都是实例方法,也就是说,只能实例对象才能调用这个方法. 那是不是说类方法也只能被类对象本身来调用呢,当然,不是.类方法既可以被 ...

  5. Codeforces Round 251 (Div. 2)

    layout: post title: Codeforces Round 251 (Div. 2) author: "luowentaoaa" catalog: true tags ...

  6. 【PHP】mysql基本操作整合

    php版本:PHP Version 5.5.1 环境:windows10 XMAPP 数据库:mysql 代码: <?php function connetionDB($servername, ...

  7. SD 一轮集训 day3 染色(color)

    蜜汁打表题.. (首先L=1和L=N的情况过于傻逼(而且是特殊情况),可以先写出来,然后剩下的L的做法在下面) 首先你要写一个打表程序,找出{1,2,....,n} 乘若干个 循环唯一的轮换可以搞出的 ...

  8. Codeforces 919 E Congruence Equation

    题目描述 Given an integer xx . Your task is to find out how many positive integers nn ( 1<=n<=x1&l ...

  9. POJ 2348 Euclid's Game(博弈论)

    [题目链接] http://poj.org/problem?id=2348 [题目大意] 给出两个数,两个参赛者轮流用一个数减去另一个数的倍数,当一个数为0的时候游戏获胜, 求先手是否必胜 [题解] ...

  10. 【动态规划】【记忆化搜索】【搜索】CODEVS 1262 不要把球传我 2012年CCC加拿大高中生信息学奥赛

    可以暴力递归求解,应该不会TLE,但是我们考虑记忆化优化. 设f(i,j)表示第i个数为j时的方案数. f(i,j)=f(1,j-1)+f(2,j-1)+……+f(i-1,j-1) (4>=j& ...