再次北漂66天: 记第一次BP (商业路演)

   

周日得空,在附近的圆明园转转,一路上美景不错, 只是出门太早了,不到7点半就到公园了。

imageimage

      这两张照片不错,我挺喜欢的,左侧是小桥流水,画一样的景观; 右侧是“正大光明”四个字–古人的文化很深厚,这四个字都很好,合一起天衣无缝,也符合我对团队组织制度的惯性思维。

 

再次北漂66天

一转眼来北京66天了,再次北漂,不知不觉已经过去2个月了,刚来北京的时候还是春寒料峭、现在马上行将进入北京盛夏节奏了,好快。对于团队,我采用的是目标驱动、里程碑节点,希望充分调动每个队员的内驱力,携手前行,当然内核是以诚相待。

上次回西安探亲,有人问,你们加班多不?

我想说,VR、AR创业团队,不加班是不可能的,但是也不是天天加班,我们采用的劳逸结合的办法加班,大约会加班30%负荷,同时周末加班可用于调休,项目告一段落希望大家可以多抽空陪陪家人,创业路上,不仅仅是辛苦,还需要健康和家庭快乐做后盾才行。

 

第一次BP (商业路演)

      以前,在西安组织过OpenParty,最多时候有90多人。也讲过技术沙龙分享,故还有一些临场历练–能讲东西、有气场。 故虽然是第一次BP,但是却没有怎么紧张,下面不就坐了100个人嘛,别当她们是投资人和CEO们,就当是100个程序员不就行了–呵呵,我就是这么自我阿Q安慰的,故还是比较冷静的。

 

http://www.longvrtech.com/

北京龙威尔总部位于北京上地虚拟现实基地,硬件研发和生产团队位于上海和深圳,核心高管
来自加拿大、美国海归及本土精英,与海外多家VR内容制作公司达成紧密合作。
龙威尔科技,为好奇的年轻用户提供随时随地最新潮的沉浸式VR娱乐体验,让VR与
你,触手可及。

本次BP标题为“龙威尔科技–VR领域的YouTube + App Store”.

image

这张图,具有里程碑纪念意义,第一次代表创业公司对外进行公开展示,故我收藏了它。 同时也修改了微信、QQ、微博等头像,以激励自己努力前进,珍惜当下。

今天在路上,我在想,很多时候人生真的如乔布斯所说:

“you can’t connect the dots looking forward;

   you can only connect them looking backwards”

 

在过去三年,我曾经在西安业余以自愿者身份,组织和进行过多次技术对外分享,除了积累一些朋友资源外,也无形锻炼了出公共场合下的临场演讲能力,这个对做技术的人才来说,除了技术、管理积累,是很难能可贵–因为你可以和各个不同的人高效沟通,达成共识,推动工作有序进展的。没有想到,3年后,这些软实力“本领”慢慢发挥光和热。

朝中有人好办事:多谢 @helen 的鼎力协助,给安排了时间窗口进行BP。

image

 

备注:

我在西安组织活动的2篇记录博客:

 

我在西安的小儿子也已经60多天大了,时间,好快。

Unity3D for VR 学习(11): 后期屏幕渲染特效(Image Effect)

Unite ShangHai 2016 Keynote中,《Adam》的图形技术介绍,令人印象深刻:可以与电影效果相媲美、近乎次时代大作、好莱坞大片效果的3分钟实时渲染的短片,淋漓尽致的展现了Unity 5.4的奋发图强,和对VR开发者的潜台词–“相信Unity 5.4,VR没错的。”

本文就Image Effect进行实践,所用版本是Unity 5.4.0b14 beta版本。

image

 

下载Image Effect插件

Unity内置的特效,已经于2015.12.10免费开源了:CINEMATIC IMAGE EFFECTS (PRE-RELEASE)

 

  • 下载方式2:bitbucket 开源社区   cinematic-image-effects          为了持续增强Image Effect的功能和提高性能,官方还设立一个论坛版块:

          Forums>Unity Community Support>Graphics>Image Effects

 

部分渲染特效实践

使用渲染特效,非常简单,直接在Camera添加组件即可—下载完Image Effect插件后,导入Unity即可使用。

image

 

Screen Space Reflection屏幕空间光线追踪反射(SSRR)倒影效果image
Screen Space Ambient Occlusion (SSAO)  屏幕空间环境遮挡特效 —模拟全景漫反射

image

 

反|抗锯齿(Anti Aliasing | SMAA).

image

 

Bloom 泛光 场景变得梦幻

image

色调映射 ToneMapping【HDR模式有用】–  [和Bloom混合使用]

clip_image001

深入学习文档

Unity自带的英文文档,非常好,下载Unity的时候直接安装一下,遇到问题,点击问号,即可打开本地的英文文档,便于深入快速学习。

image

 

然后,输入Image Effect关键字搜索,即可打开Unity内置提供的特效帮助–有图、有文字说明,学习还是挺方便的。

image

 

后期屏幕渲染原理

屏幕后期渲染,使用的是Graphics的Blit方法,他和相机的Render方法不同之处在于Blit在屏幕上做了一个和屏幕大小一样的平面,用第三个参数(材质—Shader)进行从当前面到新面的替代。 即Blit是在渲染一个平面,而Render在渲染一个物体。

Graphics.Blit函数

public static void Blit(Texture source, RenderTexture dest, Material mat);

 

MonoBehaviour.OnRenderImage函数

void OnRenderImage(RenderTexture sourceTexture, RenderTexture destTexture)

 

Shader文件:写一个顶点片段shader

#pragma vertex vert_img
#pragma fragment frag

 

备注:

  • 参考文档 《Unity 5.X 从入门到精通》
  • 参考文档 《Unity Shaders and Effects Cookbook》
  • demo Git地址:Shader_ImageEffects

Unite ShangHai 2016 (Unity3D开发者大会)

     拜Unite ShangHai 2016 大会所赐,又一次来上海–上次来上海是2007年做TD-SCDMA扫频仪数据接入工作的; 一晃,9年过去了,上海变化挺大的。

 

上海.印象

10号起来,在附近溜达溜达,静安公园、蔡元培雕像

imageimage

路过了约3公里上海街区,周日上午都8点半了,马路上人很少且干净,还是上海人小资啊。

 

晚上和杭州赶来的某著名物联网公司CTO胡键,一起共进晚餐,顺道吹吹牛。

我们两人4年前是在西安OpenParty认识的,后来一起组织西安的IT活动,如《“西安IT人的社交圈”11月的活动总结》。   近半年,无独有偶,在“万众创业、大众创新”的时代,他从西安出走,带队来杭州专注物联网行业创业; 我则选择离开西安,在北京专注VR。

 

上海人过马路很讲规矩:通过红外线检测,然后声音警告行人站在台阶上

image

这一点,值得赞,可以极大加速路口车辆通过; 还可以保障安全

 

上海豫园–城隍庙街区

imageimage

其中:左侧图片的西洋镜(拉洋片),这个小玩意算是中国最早的VR虚拟眼镜了吧。

 

Unite 大会(KeyNote)

上海是周一KeyNote大会,明显人数较去年北京活动少了很多,还是Unite换了新的CEO,控制成本吧。

参展商也少很多,估计是北京的1/5参展商规模, 且会场外空间相对比较小,不利于排长队进行体验.

image

 

Unity 5.4 VR性能优化增强30%

imageimage

 

Cinematic Image Effects 电影CG渲染效果—Realtime

image

image

这个案例的亮点是连保守的日本marza工作室都用起来Unity做CG动画电影,间接反映出Unity在图像处理上面往AAA级画质发展的雄心和实力。

 

Unity大中华区核心工作:服务支撑

image

就我个人经验而谈,网速才是服务背后的支撑。如Asset Store下载插件,很慢。

另外,听说官方也在搞Unity中文版。这个需求,我个人倒不是特别想要–少bug、性能提升更关键。

 

Unity Labs:Unity法国的精英团队。

image

最近在聚焦VR中设计VR场景(VREditor):人带上VR头盔,用Touch手柄进行VR场景编辑。

 

VR(虚拟现实)火热依旧–2016

4.10号  VR有一天时间培训课,400+人参加

4.12号 全天有VR重点技术课程,2000+人参加

而整个Unite 大会才3天,从时间上看,2/3在谈论关于VR的技术和案例,从北京到上海,都是一个字:火。

去年大会的主发言人–Unity 大中华区boss 符国新(Allan),去年开完Unite北京大会,就立马离职创业了,选择就是VR方向,呵呵。

 

2015年参加Unite 北京大会,启蒙了我的VR认知

 

image

2015.4 我首次听到关于VR、AR的演讲—原Unity亚太技术总监郭振平先生激情演讲

 

image

2015.4 雨松MOMO粉丝们合影; 雨松左侧妹子是其女徒弟—小七不乖(现任Unity官方社区运营官)。

 

image

2015.4 非常高兴的和Unity创始人David Helgason 合影留念

 

小结:

  1. Unity开发者大会,对推动Unity技术在中国蓬勃发展功不可没,2012年Unite入华,目前已经5年了。
  2. VR技术的普及,因为Unity引擎在手游行业培养海量人才,故才得以爆发。
  3. 目前国内,VR、AR技术工作,80%的人选择的是Unity的引擎,人才基数多、迭代快。
  4. Unity 5.4 看起来不错,在画质渲染上,VR效率上,比较期待正式版发布。
  5. 相对上海精细小资,我更喜欢北京的大气浑厚:VR创业公司,北京占全国60%
  6. 拿着Android手机,出门佩戴充电宝是必须的,要不然高能量的PPT不拍照记不住。
  7. 参加开发者大会,不仅仅是听讲座,和网友见面也是必须的
  8. Unity官方今年在中国会大力推线下社区,加大走群众路线

参考:

去年大会博客链接: 《Unite Beijing 2015大型活动

小议风风火火的移动科技互联网创业大潮 (含VR)

最近遇到一些事情,和2015年初非常类似,追忆加自我总结吧。

 

移动互联网创业大潮,过去5年是O2O(含手游),未来5年是R+(VR、AR),这个是大趋势,不过能坚持到成功的企业十之一二也。你奋斗了,不学习和交点学费,不一定能成功,这个是道。

招3个人,没有事情干,每月都是大把大把银子支出,太贵、太浪费;

要不先招1个,先干着,等用的时候再招。

这句话,是任何转型做移动互联网科技创业公司老板会说的一句话。

因为之所以存在有人没有事情干,是因为提纲挈领的关键人才没有到位:

  • 懂技术
  • 懂业务
  • 懂沟通
  • 懂管理
  • 被信任
    其中最关键的是沟通、和信任;前者需要对上、对下交流,随机应变和视大局。 而信任,是短期内很难具备的事情,要经过1、2个产品的磨合和拓练—遇到困难和问题如何处理、遇到分歧如何处理。

科技研发有其特殊性,我自2005年从业到今,100%时间在IT行业,见得多了自然就懂了。

对人才招聘、训练的前瞻性,有比较深的了解。临时抱佛脚的方式,不适合IT科技研发团队工作方式。

如果是楼下的水泥工,150元*天,随用随到,干完活有可验证。

但如果是涉及技术和研发,需要提前3个月布局,关键岗位要提前6个月布局。 假如对于研发团队,从网上招几个人,临时组个团队,2个月出产品,且能够大范围配合市场商用,这个经历我没有过,且这种仗我是不敢打的:对老板负责、对团队负责、对个人负责。

 

2个历史小故事:

左宗棠西征–三年不参左

    胡雪岩,我高中时候的偶像级人物。他和左宗棠相得益彰,使得财力加军事为国争光,这个故事在晚清腐败政治下是为数不多的让我对慈禧这个政治家叫好的历史故事。

 

网络摘录:

海防与塞防之争–《复陈海防塞防及关外剿抚粮运情形折》

“别的不说,光是朝廷那帮大臣,每当左宗棠遇到实际困难,进军稍慢,就会出现各种非议,“按兵不动”“拥兵自重”的帽子纷纷飞来。

慈禧太后为了免他的后顾之忧,和朝中大臣们说三年之内不准参左宗棠的奏折说他的坏话。

一个平凡的人,坚持自己的梦想,最终成就国家的大业,这份忠诚与执着,在历史的关键处焕发出了最夺目的光芒。

 

现实的例子:“民不患寡、而患不均”

上周在北京,参加高中老同学孩子的周岁生日,遇到另外一个同学的同学。她做医疗的,在某大公司待了7~8年,对目前老板投资的O2O移动互联网的医疗子公司,颇有微词:”把我们多年积累的财富, 烧了1年了,还在烧—投入大、盈利少。”

我在想,这种话,是否老板能听进去,当一个人想做一些事情,一般喜欢听自己喜欢听的话;更何况是乾坤独断的老板! 一般而言,非移动互联网行业的老板已奋斗了N年了,早已经听惯了顺耳话。 自己认为移动互联网方向对,就一个猛子直接杀过去,用已有公司的钱来补贴新的创业公司;而已有公司的员工待遇和新公司待遇之间的不平衡,会导致一些非议和反作用力–存在一些风险。

 

王翦灭楚

 

公元前224年(秦始皇二十三年),秦王政召集群臣,商议灭楚大计,王翦认为“非六十万人不可”,李信则认为“不过二十万人”便可打败楚国,秦王政大喜,认为王翦老不堪用,便派李信和蒙恬率兵二十万,南下伐楚。王翦因此称病辞朝,回归故里。

后20万大军全军覆没。

秦王不得不道歉重新启用王翦,果60万大军灭楚国

 

例如,在组建团队中,关键技术岗位不能仅1个人担任,这个对团队而言非常危险,3个月后他走了,团队怎么办?养兵千日用兵一时:团队是需要磨合的,1~2个月磨合期还是要有的,能够及时找到靠谱的团队成员,这个有季节性。 我过去有组建4次技术团队的经验,就北京“金三银四”,过了4月中旬,招聘寥寥无几,且总不能一个Leader经常去刷新招聘、面试吧,这个也是很分心思的地方。

 

    科技公司的前期,CEO的80%精力在招人,搭班子、对人才“选、用、育、留”。 运营、市场、盈利模式、资本对接,这些都很重要但是不紧急;既然是科技公司,看准方向,先搞出1~2个产品,再说不迟。

 

2016年,VR属于移动互联网大潮中一个翘楚,对于要做技术的公司–VR内容、VR硬件、VR平台,要做好不挣1分期而要烧钱6个月的基本心理准备。

之所以叫科技性创业公司,我认为3点是立国之本:

  • 制度:规则、组织结构、考核隶属关系、岗位定义、新员工培训。
  • 研发:研发占据了公司初创80%成本,不是重要,是太重要。
  • 市场:情报、市场调研、采购、售卖、推动公司前进和对外的眼睛、耳朵。

备注:

  1. 我粗略估算,以20人北京创业科技公司烧钱预算 (理想情况):
    • 办公场地和硬件:  3万*12月 + 20人 * 2万  + 3000元 * 20人 * 12月 = 148万
    • 10人研发团队: 2.5万*10人*14月= 350万
    • 10人市场后勤: 1.5万*10人*16月= 240万

       总共约需要 738万。 (去年底和一个朋友聊,说北京年约需要600~900万,数字基本吻合)

  2. image

  3. 这里的薪资,请勿对号入座:人均1.5万、人均2.5万,不是发到员工手里的,是考虑了公司整体公摊后的成本,参考2009年北京IT外包市场数据。
  4. 对于沟通,抱怨是最好的情报,没有之一。

Unity3D for VR 学习(10): Unity LOD Group 组件

LOD (Level of Detail), 远小近大思想。

LOD,在Unity中是用到了空间换时间的优化方法:即程序加载2套模型,导致包会增大;在运行时刻,远处的用面数少的模型–模糊一些,近处用面数多的模型–清晰一些。 类似的原理,还有纹理的MipMap设置。

 

Step1: 美术制作2份模型

针对需求策划,美术需要对同内容的2份,一个命名为***_LOD0 面数多的高模; 另外一个命名为***_LOD1面数少的低模。 高清晰度网格(L0D:0,当摄像机最接近时),和一个低分辨率网格(L0D:1,当摄像机较远)

保持这2个模型,远远望去,差异不太大即可,后面会用到平滑切换。

Unity5 允许多个LOD,如可加载3套模型:高模、中模、低模,原理雷同,这里主要说2个模型的情况。

 

Step 2: 程序添加LOD Group组件

image

找一个空GameObject,添加LOD Group;

然后点中LOD0,选择Add 高模***LOD0;

然后点中LOD1,选择Add 低模***LOD1;

 

Step3:设置LOD Bias

 

依据Unity输出质量要求,设置LOD Bias,如图设置为1,是因为QualitySettings设置为Good。

image

 

然后就是在Editor中,通过拖放LOD Group的摄像机来调试,先看看视觉上是否合理;可修改LOD0、LOD1方框的范围。

最后,通过写代码控制Camera,模拟真实环境,让策划和美术一起评审,确定

  1. LOD0、LOD1模型是否合理
  2. LOD0、LOD1模型过渡是否自然,不要太突兀就行

 

参考文档:

 

VR博客目录:

  1. Unity3D for VR 学习(1): 又一个新玩具 暴风魔镜 4(Android)

  2. Unity3D for VR 学习(2): 暴风魔镜框架探索

  3. Unity3D for VR 学习(3): 暴风魔镜PC Input小改造–自己动手、丰衣足食

  4. Unity3D for VR 学习(4): 自绘摄像机的视口区域锥体

  5. Unity3D for VR 学习(5): VR Gaze Input

  6. Unity3D for VR 学习(6): 再次温故知新-3D数学

  7. Unity3D for VR 学习(7): 360°全景照片

  8. Unity3D for VR 学习(8): Unity Shader概述

  9. Unity3D for VR 学习(9): Unity Shader 光照模型 (illumination model)

  10.   Unity3D for VR 学习(10):  Unity Lod Group 组件

Unity3D for VR 学习(9): Unity Shader 光照模型 (illumination model)

关于光照模型

所谓模型,一般是由学术算法发起, 经过大量实际数据验证而成的可靠公式

现在还记得2009年做TD-SCDMA移动通信算法的时候,曾经看过自由空间传播模型(Free space propagation Model),目的为了得出移动信号的传播损耗。当时是基于普通的PC实时运算,非常非常耗时–如北京五环内的传播模型渲染GIS图用了超过20分钟。

 

光照模型来源有2类:

  • 一类是基于学术论文的算法,如Lambert模型、Phong模型.
  • 另一类基于算法的变种–在实际生产实践中修正得到的模型,如HalfLambert模型、BlinnPhong模型.

 

光照模型公式:

surfaceColor = emissive + ambient + diffuse + specular

          物体表面的颜色是自发光(emissive)、环境反射(ambient)、漫反射(diffuse)和镜面反射(specular)等光照作用的总和。   每种光照作用取决于表面材质性质(例如亮度和材质颜色)和光源的性质(例如光的位置和颜色)。

一般而言,光照模型只考虑漫反射镜面反射

 

光照模型分类

当光照射到物体表面时,一部分被物体表面吸收,另一部分被反射,对于透明物体而言,还有一部分光穿过透明体,产生透射光。被物体吸收的光能转化为热量,只有反射光和透射光能够进入眼睛,产生视觉效果(物体呈现的亮度和颜色)。   所以,物体表面光照颜色由入射光、物体材质,以及材质和光的交互规律共同决定。

另外,光与物体最基本的交互方式就是反射,遵循反射定律:反射光与入射光位于表面法向两侧,对理想反射面(如镜面),入射角等于反射角,观察者只能在表面法向的反射方向一侧才能看到反射光

 

image

 

Unity内置光照模型

在Unity表面着色器(Surface Shader) ,Unity内置了2个光照模型,对于大部分场景选择使用即可。

源码路径:C:\Program Files\Unity\Editor\Data\CGIncludes\Lighting.cginc

Lambert 漫反射

fixed4 LightingLambert (SurfaceOutput s, UnityGI gi)

     粗糙的物体表面向各个方向等强度地反射光,这种等同地向各个方向散射的现象称为光的漫反射(diffuse reflection)。   产生光的漫反射现象的物体表面称为理想漫反射体,也称为朗伯(Lambert)反射体。Lambert 模型较好地表现了粗糙表面上的光照现象,如石灰粉刷的墙壁、纸张、黑板等。

 

BlinnPhong 镜面反射 (Jim Blinn 1977)

它是以Phong模型为基础的,效果是能让高光更加柔和,更平滑;但是真实感还没Phong模型强,主要是这个模型运算速度要快,即运算效率高。

fixed4 LightingBlinnPhong (SurfaceOutput s, half3 viewDir, UnityGI gi)

一个光滑物体被光照射时, 可以在某个方向上看到很强的反射光,这是因为在接近镜面反射角的一个区域
内,反射了入射光的全部或绝大部分光强,该现象称为镜面反射。诸如金属材质的反射光泽。  镜面反射认为光强与反射光线和视线的夹角相关。

其中在OpenGL 和Direct3D 渲染管线中,Blinn-Phong 就是默认的渲染模型。

 

一些光照模型概念:

  • Fresnel菲涅尔反射:在观察水面的时候,垂直看下去,清澈见底,看远处的水面,向镜子一样,这个就是菲涅尔效应。菲涅尔效应可以说是无处不在,不同的材质效果不同而已。
  • 镜面反射的颜色通常是材料的颜色而不是光源的颜色。
  • 塑料使用白色的镜面高光,漫反射成分大而镜面反射成分小。
  • 金属的反射一般发生在表面,漫反射分量很小,有时甚至可以忽略,粗糙度的值m也很小。
  • Cook-Torrance 模型: 用模型模拟了金属和塑料材质,考虑到了入射角变化时发生的颜色偏移。
  • Bank BRDF光照模型:BRDF就是双向反射分布函数的意思,它描述了入射光线在某个反射角度的反射光的相对能量。所以给定不同的BRDF函数,就能实现不同的光照效果,如各向异性光照效果–金属表面拉丝等效果。

参考文档:

Unity3D for VR 学习(8): Unity Shader概述

   从西安到北京高铁上,一位VR老外团队的华人leader对VR技术做了画龙点睛:

“3D游戏的核心部分在Render, 国内很多团队美术、程序中间缺失严重。所以3d游戏做不好。 VR这块更是至关重要。”

 

故,欲VR,先Shader吧。

 

1 CG规范: 计算机图形学(英语:computer graphics

在Windows下图像渲染是DirectX; 在Linux下图形渲染是OpenGL;在苹果下新出的Metal渲染。而作为Unity3D程序,跨平台的特性则无须对这些平台一一掌握,仅需要从CG规范入手即可。

image

 

CGPROGRAM…ENDCG这样一个代码块中,这是一段CG程序,它会帮助程序发布Unity3D到Android、Windows、IOS时候,转换为不同渲染底层功能的。

 

2 Unity3D Shader分类

  • 表面着色器(Surface Shader) – Unity推荐的Shader,有光照需要的必须使用surface Shader。
  • 片段着色器(Fragment Shader) – 更偏向底层一些,也比较难写。
  • 固定管线着色器(Fixed Function Shader) – 目前废弃不用,仅针对老显卡。Vr时代用不着。
    从上面看到Unity实际上在主推Standard Surface Shader,在Unity5下,提供了如下4中Shader模板。

image

 

 

渲染管线:从数据到最终成像的过程。

image

 

3 Unity3D 光照模型

光照模型想说明的事情是当光照到一个物体表面后,视角不同看到不同的光特效,如常规的漫反射、高光、镜面反射光等。 实际上也是在模拟真实情况下人看物体的视角效果,同样的3D模型,添加不同的光照模型效果会截然不同。

如果物体是不透明的,则物体表面呈现的颜色仅有其反射光决定,通常把反射光考虑成环境反射光(Ambient Light)漫反射光(DIffuse Light)镜面反射光(Specular Light)三个分量的组合。

 

4 Unity3D shader Tips

C#编码是在CPU角度;而Shader编码是在GPU角度。

看了几天书后,发现Shader真的很酷,可以做很多CPU下编程做不到(很难)的事情。

例如半透明、UV动画、遮挡剔除、色彩斑斓的blend等。

  • uv动画:在shader中用uv缩放、uv偏转、uv旋转。如河流流水动画、UV精灵动画。
  • 遮挡剔除:cull back\front\off. 其中VR 360就用到了《Unity3D for VR 学习(7): 360°全景照片
  • 半透明–ZTest:用在自己GameObject上
  • 半透明—ZWriter:用在遮挡物GameObject上
  • AlphaTest(DX 11不支持)  半透明的花草树木效果
  • Blender混合:如透过有颜色的玻璃,可以实现色彩斑斓的透视效果
  • Fog:全局fog、局部fog

5 Unity3D Shader 代码片段

SurfaceOutput结构体的定义如下

struct SurfaceOutput {

half3 Albedo;     //像素的颜色

half3 Normal;     //像素的法向值

half3 Emission;   //像素的发散颜色

half Specular;    //像素的镜面高光

half Gloss;       //像素的发光强度

half Alpha;       //像素的透明度

};

 

表面Shader代码片段

Shader "Custom/Diffuse Texture" {

Properties {

_MainTex ("Base (RGB)", 2D) = "white" {}

}

SubShader {

Tags { "RenderType"="Opaque" }

LOD 200

CGPROGRAM

#pragma surface surf Lambert

sampler2D _MainTex;

struct Input {

float2 uv_MainTex;

};

void surf (Input IN, inout SurfaceOutput o) {

half4 c = tex2D (_MainTex, IN.uv_MainTex);

o.Albedo = c.rgb;

o.Alpha = c.a;

}

ENDCG

}

FallBack "Diffuse"

}

 

CG语法,可参看《GPU 编程与CG 语言之阳春白雪下里巴人.pdf

2016年VR的大事件: Vision VR/AR Summit 2016 大会

     正月初五,刚从老家回到西安,打开TWitter,就看到铺天盖地的 #vision summit 2016# 大会的消息。

image

我细细过了一遍,发现,这个对于2016年的VR而言,非常具有里程碑意义.

 

下面, 我摘录出几个亮点供大家参考:

#vision summit 2016#大会 由Unity公司主办,2016年2月10~11日,美国加州

image

 

参会的涵盖了国外的主要的VR、AR平台厂商。

如VR的Oculus、Sony、Steam VR、Google CardBoard。

如AR厂商Microsoft Hololens、Vuforia、Google Tango。

 

其中主要是以Unity为主游戏引擎的生态圈,融合了国际一流大厂们.

Vision summit 2016从2015年中就启动报名和运作的, 是有”预谋”的一次峰会.

image

这张曲线图,和目前国内的预测大概一致:  2016~2020年, VR会以直线速度增长; AR增长相对平缓,大约3年后的2018年才会大幅度增长–随着微软的HoloLens问世吧.

 

90%的Gear VR虚拟现实项目是基于Unity开发

image

 

Oculus VR的创始人Palmer Luckey: Gear VR中约90%的虚拟现实内容是基于Unity引擎开发的。

目前移动游戏市场的主要开发引擎为Unity,故这个结果也合情合理–人才有了,新技术才会比较好的普及。

image

 

Oculus跟Unity还宣布了一项让所有Rift用户, 都可以获得引擎Unity Pro版本四个月试用期限的合作

75美金/月 * 4月 = 300美金

实际上, Unity Person版本开发VR没有任何障碍, 故此举仅仅是市场噱头,而已.

 

Unity将支持VR场景内开发

 

image

Unreal Engine 4内容制作VR引擎,1周前的新闻,在VR圈掀起小高潮; 短短1周过后,Unity就以这个短短5分钟的视频做了回应: 我们也在搞呢.  相比低效的VR开发工作流程,在虚拟现实中开发VR能让程序员们实时了解程序运行结果,应该会极大提高工作效率。

不过,从演示看,主要是场景布局和搭建,对于写脚本为主的VR程序而已,貌似用处不大.

 

Unity原生支持Cardboard

而不再需要任何插件,这个有利于统一目前琳琅满目的CardBoard VR市场,尤其是国内,*** SDK, 均源自Google CardBoard SDK源码.  

有利于减少VR程序员的学习成本,减低VR内容制作的成本.

image

前不久的新闻,ID大神Carmack说,他要投入主要精力负责Mobile VR的位置跟踪研发。

 

Unity原生支持SteamVR

image

老板一高兴,就发硬件了: 美国电子游戏厂商Valve的CEO Gabe Newell宣布说所有参加了大会的开发者都将免费获赠一套HTC Vive Pre开发者套装 (HTC Vive Pre的价值约500美元+)

 

Oculus为Unity发布口型和声音协调同步插件

Oculus VR为虚拟现实内容制作工具Unity 5发布了一款叫Oculus OVRLipSync的插件,允许开发者将化身的嘴唇运动跟声音同步起来,让虚拟现实体验更真实自然。

杜绝假唱!

 

image

 

大会网址:http://visionsummit2016.com/

 

备注:

上面Unity宣布的一些功能,预计最快2016.3 Unity 5.4版本会部分开始支持。

Unity3D for VR 学习(7): 360°全景照片

    在VR应用中,有一个相对简单的虚拟现实体验,那就是360°全景照片浏览器, 他可以使得手机拍照的”全景”照片,  得以”恢复”当时拍照的场景全貌,  这个创意的确比单纯的2d图片更有震撼力一些,故本文就制作360全景照片的过程进行简单小结。

image

 

Step 1:预期需求

可以通过手机的陀螺仪,在魔镜中查看360°图片;不用依赖任何蓝牙输入,仅通过Gaze Input进行选择下一张360°图片(盯着缩放图2s,进度条旋转完成后,就切换图片;用Gear VR的磁铁触发功能也可以实现选择下一张图片)。

 

Step 2: 准备材料

硬件:暴风魔镜4  + 小米Note顶配版(2K屏幕)

SDK:魔镜手柄、反畸变SDK_Unity版,或者 Google cardboard-unity,本文使用的是Googe CardBoard

 

Step 3: 创建材质球

360°照片,展开看就是一个投影的2D照片,这个在初中学习世界地理的时候将类似投影球形地图到2维平面上,原理类似,只不过一个360°照片的投影失真会小很多. 

为了复原,需要建立一个3D Object\Sphere, 我们通过把图片贴到这个球体上,从内侧看效果。 然后拖放照片到Sphere上,球体放大10倍; 这个时候,发现一个问题在Game视图中看不到东西了,因为Camera没有在球心位置,修改Camera坐标为(0,0,0)位于球心。

我们依然看不到图片,因为Spere默认用的是Unlit/Transparent Shade,他为了渲染高效,把背面给剔除了,而在这里,我们洽洽需要渲染背面,故得从新写个shade–关闭cull off。

image

DoubleSided.Shader文件

Shader "Unlit/DoubleSided"
{
    Properties
    {
        _Color("Main Color", Color) = (1,1,1,1)
        _MainTex("Texture", 2D) = "white" {}
    }
        SubShader
    {
        //Ambient pass
        Pass
        {
            Name "BASE"
            Tags {"LightMode" = "Always" /* Upgrade NOTE: changed from PixelOrNone to Always */}
            Color[_PPLAmbient]
            SetTexture[_BumpMap]
            {
                constantColor(.5,.5,.5)
                combine constant lerp(texture) previous
            }
        SetTexture[_MainTex]
    {
        constantColor[_Color]
        Combine texture * previous DOUBLE, texture *constant
    }

        }

        //Vertex lights
        Pass{
        Name "BASE"
        Tags {"LightMode" = "Vertex"}
        Material
    {
        Diffuse[_Color]
        Emission[_PPLAmbient]
        Shininess[_Shininess]
        Specular[_SpecColor]
    }

        SeparateSpecular On
        Lighting On
        cull off
        SetTexture[_BumpMap]
        {
            constantColor(.5,.5,.5)
            combine constant lerp(texture) previous
        }
        SetTexture[_MainTex]
        {
            Combine texture *previous DOUBLE, texture *primary
        }
    }

    }

        FallBack "Diffuse", 1
}

 

替换了新的Shade后,效果好了很多了,唯一有问题的是我们看到的照片是反的,故修改Spere的.Z为-10.

image

 

通过在Unity.Editor上Play效果,已经很不错了,至此完成了大部分的工作,下面开始”移植”到VR设备上

 

Step 4: 添加VR Camera

先禁用掉默认的MainCamera、light。

然后添加VR摄像机—导入Google的CardboardSDKForUnity.unitypackage后,拖入CardboardMain.prefab到场景中。 这时候点击Play启动UnityEditor,即可看到双VR Camera的效果,点击调试快捷键:Alt + 移动鼠标,即可看到模拟的陀螺仪效果。

这个时候打包为apk,安装到手机,用真机的陀螺仪体验,效果更酷。

 

Step 5: 添加Gaze-and-Tap 用户界面

完成《Step 4: 添加VR Camera》后,实际上已经完成了360°全景照片功能,但是这个仅仅是一个demo,有一个致命的痛点:只有1张照片,如果我有4张照片,每次独立打包为一个apk,这显然不合理。 故需要做一些VR交互。

这里,我们添加4个Plane,通过上面章节的《Unity3D for VR 学习(5): VR Gaze Input》,期望可以实现通过Gaze一个Plane 3s,然后能够切换新的照片功能。

添加Plane,坐标修改如下:

image

添加一个脚本,实现响应EventSystem,可通过2种办法

方法1: 添加Event Trigger脚本,响应PointerEnter、PointerExit等方法,如图

image

方法2:脚本直接继承IPointerDownHandler、IPointerExitHandler等接口,这个看起来更符合程序员胃口

 

我们通过控制Plan的Color.a来实现高亮选择,代码如下

public void SetGazeAt(bool gazeAt)
    {
        Debug.Log("SetGazeAt: " + gazeAt);
        Renderer render = this.GetComponent<Renderer>();
        Color cor = render.material.color;
        cor.a = gazeAt ? 1f : 0.5f;
        render.material.color = cor;
    }

 

另外,当Gaze 2s后,会动态替换material的Texture来实现替换360°照片,代码如下

public void OnClick()
{
    Renderer renderSrc = this.GetComponent<Renderer>();
    Renderer renderDst = pano.GetComponent<Renderer>();
    Texture tex = renderSrc.materials[0].GetTexture("_MainTex");
    renderDst.materials[0].SetTexture("_MainTex", tex);
}

 

备注:

360°全景照片,非常大,有好几M,这个对手机app来说会造成文件太大,实际商用中,需要采用AB(AssetBundle)实现动态从网络侧更新360图片,那样会更酷一些(轻量级)。

 

本文用到的完整的 demo Git地址: Git.OSChina.net

 

昨天网上一个朋友问了一个VR问题:

可否像3D Max那样,动态替换材质,如替换房间地板材质,实现全景照片替换?

回答:不行,只能动态替换整个的全景照片;我昨晚细细思索,好像还是不行,除非建立3D模型,采用动态换装才能实现动态换360°照片中的大树、地板吧。

Unity3D for VR 学习(6): 再次温故知新-3D数学

   一年前,系统学习过3D数学,并记录了一篇博客《C#程序员整理的Unity 3D笔记(十):Unity3D的位移、旋转的3D数学模型》。 一年后,再次温习之。

坐标系:Unity3D使用左手笛卡尔坐标系(Descartes coordinate system)

  • 世界坐标系(world space):在一个游戏场景中,唯一。
  • 物体坐标系\局部坐标系(local\Object space):每个物体有各自的独立的坐标系。如桌子的物体坐标系中,扶手相对桌子腿位置。有时候,不需要对外暴漏太多细节。
  • 摄像机坐标系: 特殊的物体坐标系,用于定义物体在摄像机视野范围内,即那些物体会被摄像机绘制出来。
  • 惯性坐标系 (Intertial):一个“临时”坐标系,为了方便从世界坐标系到物体坐标系的转换,引入的新坐标系。原点和物体坐标系重合,坐标轴平行于世界坐标系。

image

 

 

Unity3D提供的有用的坐标系转换工具:

1 RectTransformUtility

Vector2 WorldToScreenPoint(Camera cam, Vector3 worldPoint)

Ray ScreenPointToRay(Camera cam, Vector2 screenPos)

 

2 《Unity3D项目实战笔记(1):prefab的插件方式

下面代码可以使得:a.prefab被加载到了A的子节点下面,要使得a显示b点位置,一个办法是把a挂接到B下; 另外一个办法是用transform提供的2个方法,转换局部坐标为世界坐标,实现动态定位。

Vector3 pos = A.transform.TransformPoint(a.localPostion);

b.localpostion = B.transform.InverseTransformPoint(pos);

 

向量(Vector):  有大小和方向,没有位置

任意一点,都可以从原点开始用向量来表达,这个也是点和向量非常容易为初学者搞混的地方。同时,因为向量和位置无关,故向量可以在坐标系中任何地方使用。

  • 向量数乘,添加通过标量和向量相乘来实现力的系数调节
  • 向量标准化,大小为1的向量。亦称”法线”
  • 负向量,和原向量大小相等,方向相反的向量
  • 向量加法,向量a和向量b收尾向量,从a的尾到b的头的向量。
  • 向量减法,雷同向量加法。
  • 向量点乘(内积),结果为标量,描述了两个向量的”相似”程度,点乘结果越大,向量越接近。

a.b >0: [0, 90), 方向相同

a.b = 0 :90°   向量正交

a.b<0: (90,180] 方向相反

  • 向量叉乘(叉积), 结果为一个垂直于原来的两个向量。

矩阵(Matrix), 这里主要是2*2, 3*3, 4*4方阵

DirectX使用的是行向量,Ope6nGL使用列向量。方阵的行可被解释为基向量

线性变换保持直线和平行线,原点未移动;包含平移的变换称作仿射变换。

变换物体和变换坐标系区别:变换物体,如旋转20°,意味着物体上所有的点都需要进行重新计算,被移动到新的位置。而旋转坐标系时,物体上的点实际未移动,只是在另外一个坐标系中描述他的位置而已;有时候使用变换坐标系,可以节约底层计算量。(例如碰撞检测,需要涉及的物体在同坐标系中)

线性变换,不会导致平移(原点位置不会发生改变);放射变换在线性基础上接着进行平移。

矩阵的行列式,结果为一个标量。

正交矩阵,如果矩阵是正交的,则与它的转置矩阵相乘,结果为单位矩阵。同时,也可知正交矩阵的转置矩阵为逆矩阵。

正交投影(降维操作),也称作平行投影。3D投影到2D屏幕上,该平面称作投影平面。

透视投影,投影线不再平行而是相交于一点–投影中心。类似“小孔成像”,投影是倒着的。

欧拉角,使用三个角度来保存方位:heading,Y轴,(-180,180);pitch, X轴, (-90, 90); bank, Z轴,(-180,180).

四元数(Quation),用4个数字表达方位,避免了欧拉角的”万向锁”、Slerp球形差值问题。

 

参考书籍:

赞一下,暴风魔镜4 + 小米Note顶配2K屏,具有里程碑意义,能连续玩VR 20分钟以上

分辨率好、陀螺仪好。

相比之下,千元机魅蓝Note 2就是个渣渣:远离千元机,如果你玩VR的话。

VR未来,或许能圆一个小小的遗憾:5年前曾多次出差哈尔滨,刚好有冰雪大世界,心里还是蛮想看的,但是因为畏惧寒冷(-35°的长时间户外活动),故未能出行。如果能通过VR远程看,则再好不过了,呵呵。