微软.NET年芳15:我在Azure上搭建Photon服务器(C#.NET)

    网上火热的“微软.NET年芳15”文章,我也得写点什么嘛,毕竟我还是现任的微软MVP

image

 

摘录网上的“.NET 15周年”信息如下:

微软的 .NET 框架本周迎来了 15 岁生日。.NET 的第一个版本在 2002 年 2 月 13 日作为的 Visual Studio.NET 的一部分首次公开亮相。过去 15 年,.NET 框架从一个流行的闭源软件开发平台,变成了一个开源的跨平台开发工具,微软是在 2014 年 11 月 12 日宣布开源 .NET,支持竞争对手 Linux 和 OS X 的平台。微软称,Visual Studio 2017 将于 2017 年 3 月 7 日发布,而 Visual Studio 也迎来了 20 岁生日,开源的 .NET Core 也将发布 2.0版本

 

      我梳理了一下目前的.NET技术栈: 业务是基于Unity3D(跨平台游戏开发引擎),开发AR、VR 应用; 绝大部分项目采用单机版,使用的编程语言是C#(Mono.NET),不过最近交流的AR几个业务,明显用户已经不太满足单机版,有更多的需求需要用到联网的服务器功能,故技术选型就势在必行了:也算是未雨绸缪吧。

 

技术栈选型

我的技术选型有2点原则

  1. 成熟,有助于提高开发效率
  2. 人多,有坑大家一起填

这2点原则是基于第一次创业失败的经验总结。约在3年前吧,刚开始创业的时候,特别排斥C#.NET技术(互联网创业,还用C#,说出去都不好意思啊),虽然用的是Unity3D游戏引擎(C#),但是服务器选择却是非.NET倾向的。 那个时候对比了多种技术栈:

  • PHP游戏服务器
  • Node.js游戏服务器
  • C++游戏服务器
  • JAVA游戏服务器

权衡再三选择是Java,采用的是SmartFoxServer商用服务器框架,JAVA和C#非常类似、学习成本低一些。

种种原因,后来呢,第一次创业失败了,我的反思是“创业成功大部分原因是CEO的引导有方,创业失败大部分原因是CTO的选择失误导致”。

当时我没有考虑到成本意识、对一个5人研发团队,C#、Java并行的沟通风险有多大:

如果当时客户端是C#技术栈、服务器端也是C#技术栈,则可以从5人技术团队裁掉1人,节约20%人力成本,而且减少沟通后可以提高30%的开发效率,进而有效的推动产品快速扑向市场的速度,可惜这个是“事后诸葛亮”。

这个“事后诸葛亮”,我一直如噎在喉.

       不过去年在一次微软技术峰会,看到网易案例的演讲,我的眼睛亮了起来:“微软技术大神徐玉涛Tory做的分享—网易《绝代双骄》将游戏后端从Java转为新一代.NET Core,研发效率提升20%,服务器成本节省50%”–在线视频为证。

 

故对选择一款C#的服务器,以打通AR、VR客户端、服务器端,提高开发效率,生产力加速,我个人非常期待

Photon

商用

成熟

C# (Mono.NET)

ASP.NET Core

开源

 2.0还未发布

.NET Core

Unity Network Unity自带 局域网

C# (Mono.NET)

有SmartFoxServer的实践经验,故雷同的商用服务器Photon我本次做了专门的实践.

Photon支持3种类型服务器

  • LoadBalancing: 负载均衡服务器
  • MMO: 大型MMO网游服务器
  • Lite: 大厅、房间类型服务器 (相对简单一些)

Photon授权策略:免费版100个CCU (对于绝大部分AR、VR项目足以了);  商用版3500美金不限制CCU (约2.5万人民币)。

image

 

云服务器选型

我的选型原则也就2点:

  1. 速度:国内访问速度快、快、快!
  2. 便宜:方便我们这种初创型公司节约不必要的成本

虽然同样是世纪互联在运营,但是早期的AZure在我心目中,网速那是非常非常的慢、价格也是高高在上(和国内的阿里、百度等云比起来,毫无优势可言),故原来使用过阿里云、七牛云,国际版高大上的AZure和AWS都未曾考虑过。

但是呢,微软MVP内部微信群、邮件组,AZure的讨论还是很多的,尤其是“自2017年2月1日起,Azure虚拟机价格大幅下调,最高降价幅度高达60%!”这则消息讨论了好几天,我也渐渐回头持续关注AZure。

通过信息搜集,我了解的AZure信息碎片如下:

Windows Azure在北京、上海部署有服务器

中国的AZure是个”国内版本”–和国际版AZure采用物理隔离方案

MySQL也是比较符合目前国内接地气的方案;

AZure新的特效,国际版和国内版部署时间约差不多是3个月至半年。

https://www.azure.cn/  是国内版本的网站

 

在Azure上搭建Photon服务器(C#.NET)

image

 

未来AR产品软件框架是这样的,服务器端需要搭建游戏逻辑Photon、以及资源更新AssetBundle–更新资源。MySQL目前是国内很多公司的标配–社区版免费。

 

image

Photon运行方式很简单,选择服务器实例,启动应用即可,符合GUI操作习惯。

 

image

AZure虚拟机,提供了C盘,直接把需要的软件和数据,通过远程桌面拷贝过去即可,windows Server 2012英文系统,还是挺方便的。

 

几个有用的小技巧:

  • TT模板:database first–自动生成模型代码

原创文章来源: 使用T4模板生成MySql数据库实体类

注意在VS2015下,需要把.ttinclude后缀修改为.tt才可以。 同时,需要修改 数据库连接为你自己的 9 var connectionString = @"server=127.0.0.1;uid=root;pwd=12345678;charset=utf8;";

AZure开5505 UDP端口

  • 前端、后端C#链接类快捷方式:节约成本的王道

image

即,直接可以实现前段和后端复用模型实体代码、传递的Code枚举代码,以减少文档重复工作量。

以关键的OperationCode为例,如果前端是C#、后端是Java,则无法做到代码级别复用,即需要写文档来约束。而相同的C#代码后,注释好.cs文件,前端和后端是同样的代码,则沟通起来畅快了很多。

public enum MyOperationCodes : byte
    {
        /// <summary>
        /// LoginOperation
        /// </summary>
        LoginOperation = 100,

        /// <summary>
        /// EchoOperation
        /// </summary>
        EchoOperation = 101,

        /// <summary>
        /// GameOperation
        /// </summary>
        GameOperation = 102,

        /// <summary>
        /// ChatOperation
        /// </summary>
        ChatOperation = 103,

        /// <summary>
        /// ChatOperation
        /// </summary>
        CCUOperation = 104,
    }

  • MySQL ORM (Dapper框架):

    我选择了轻量级、火热的Dapper(stackoverflow网站就用它来做ORM),而且开源。 image

    使用SQL部分代码如下:

Db aa = DbInit();

 
var a3 = aa.Query<device>("select * from device where uuid=@uuid", new { uuid = "aabb636238694579824398" });

 

device dv = new device
{
     UUID = "aabb" + DateTime.Now.Ticks.ToString(),
     DeviceModel = "IOS",
     DeviceName = "Iphone 5s",
     RegisterDate = DateTime.Now.AddDays(-1),
     UpdateDate = DateTime.Now,
     TokenID = DateTime.Now.Ticks.ToString()
};
long ret = aa.Devices.InsertOrUpdate(dv);

var a1 = aa.Devices.All();

    • Json序列化工具:newtonsoft

    本来Unity5.3已结自带了Json序列化API,但是有bug,Json序列化可能为空,就选择了”老朋友”newtonSoft.dll了。

    • AZure开通端口
    • 应用跑起来后,端口一直不通,需要AZure开通端口–首先在Windows Server里面开通端口(TCP\UDP),然后再AZure里面开通:网络接口–网络安全组–入站安全规则、出站安全规则。

     

     

    PhotonLab 源码:https://git.oschina.net/xifarm/PhotonLab

     

    参考

    1. 时间飞快–连微软官方都开源了208个源码库
    2. 岁月在挑灯夜战中走过:亲历的软件框架
    3. 我的微软.net演进路线图
    4. 荣获2015微软.NET MVP称号!
    5. 写在.NET 15周年之际——致那些仍然爱着.NET的中国程序员们 来自微软MVP Tony Qu微信
    6. .NET 十五岁,谈谈我眼中的.NET 来自微软MVP  张善友的博客》

    VR 2016年元年小结:Vision VR/AR Summit Asia 2016

       上周,Unity官方组织的Vision VR/AR Summit Asia 2016成功举行。本次活动,对VR 2016元年来说,如同”冬天里的一把火”, 现场有超过1500人在场,足足2天的干活分享。下面以个人视角进行解读:

    Unity3D、移动VR、VR 趋势、ARVR未来

     

    • Unity3D

    Unity3D作为VR使用最多的2个引擎之一, 继续发挥领跑角色。

    image

    不过,Unreal目前使用人数较2016年初而言,增加了不少。

    未来Unity3D在移动端VR、AR会占据绝对地位,而在主机、PC VR方面,其和Unreal的距离越来越小。

    同时,由于竞争机制,Unity也加快了在VRAR中的产品迭代,如Unity 5.6原生集成了Google Cardboard、Daydream,并在移动端支持了Linear 颜色空间,且Unity下个版本会原生支持Vofuria等。这些新特效对ARVR开发者而言,绝对是好消息中的好消息的。

     

    • 移动VR

      移动端市场在爆发:小米公司、Google公司站台表达了观点,移动VR才是王道,大家请站好队。

    无独有偶,12月15日,华为和小米选择同一天发布了自己的VR设备.

    小米VR眼镜正式版评测:199元就值得买了吗?

    华为全面布局VR,Mate 9 Pro助力VR生态发展

    Daydream View评测:史上最舒适的VR头显

    image

     

    在移动VR中,我个人对DayDream尤其看好,上个月还专门撰文 《DayDream, 移动VR 2.0里程碑: 概述》。 唯一可惜的是,都快1个月了,国内还没有卖Daydream手机的,除了Google亲儿子Pixel外。

    不知道华为、小米们,能否在2017年Q1出Daydream设备呢–直接可以在Daydream View使用的。

    image

    • VR 趋势

    在14号晚,Vision Party中,一位老友随意谈到:

     

    VR最近咋样了?  我看好像都要跪了。

     

    诚如是, 今年VR如过山车一样,年初3~4月份如火如荼,年底10月份后就”低调”很多了,相反很多看衰的新闻层次不齐:业内曝光n个企业裁员、融资不利等等。

    image

    如通过百度指数看,最近VR关键词搜索量,几乎是今年最高峰的30%。网络大数据流量上,也间接佐证了VR、AR行业的2016大起大落事件。

     

    从技术迭代周期看,VR较AR成熟度搞一些,目前VR在爬坡阶段:完美的无线VR解决方案在研发中。

    image

     

    2017年的预测–来自HTC vive的从青口述。 他认为目前的确是VR寒冬,但是2017年发展会非常好,尤其是VR范教育方向,会爆发。

    HTC不仅仅有Vive的PC端解决方案,其还代工了Pixel daydream手机,故HTC也具备移动VR的潜力。

    image

     

     

    • ARVR未来

    微软不老:HoloLens依然大放异彩。

    image

    微软在ARVR上,明显较Google、Apple公司发力要明显一些。如目前的HoloLens,和明年年初携手6个厂家(华硕、宏碁、联想、惠普、戴尔、3Glasses)推出的PC VR方案,均说明了“朕一天不死,尔等永为太子”。

    核心是Windows 10系统的holographic,目标剑指VR底层操作系统。

     

    比尔盖茨:“对一项新技术,人们往往高估2年内的变化,而低估接下来10年内的变化。”

    image

     

     

    一个好的社区,是有温度的社区。

    每次参加会议,30%是为了听、看、学习,其他70%是为了和老友聊天。

    image

     

    参考: Unite Beijing 2015大型活动

    DayDream, 移动VR 2.0里程碑: 概述

         VR设备, 断断续续使用了很多个; 尤其是最近半年,主要是PC VR方面项目. 以前对移动VR不感冒,这几天试用了一下DayDream, 眼前突然一亮, 就如同年初首次使用HTC Vive眼前一亮的感觉. 没准Daydream会是一个不错的移动VR的里程碑,故写文章记录一下。

     

    这里列出我使用VR设备的里程碑时间:

     

    1. Cardboard: 2014.8
    2. Oculus Rift DK2: 2015.4
    3. HTC Vive: 2016.2     【PC VR 主力产品】
    4. PS VR:2016.3
    5. Gear VR:2016.3
    6. Oculus CV1:2016.8
    7. DayDream:2016.10  【Mobile VR主力产品】

     

    PC VR的主力产品,在国内目前主要是HTC Vive了,因为其佩戴舒适性、Room Scale空间定位、以及VR APP对国人的友好型(不用爬墙下载软件,这点非常赞), 周围做To B开发的团队,大多使用HTC Vive设备进行调试。

    不过,依然要吐槽一下,HTC Vive大约有3个地方不令人满意:

    • 硬件设备太贵:电脑 + HTC Vive,几乎1.5万硬件成本
    • 运营成本高: 如果要使用Room Scale空间定位技术,为了安全,需要旁边有人守护。
    • 占地面积大:线下体验店,5m*5m,才能有1台Vive设备,导致人流吞吐量小,资本回收慢。

    故,这些硬伤很蛋疼,虽然国内jd能够实现211直达送货,但HTC Vive的硬件销量依然不佳,可能80%的销售是卖给开发团队的开发机器吧。

     

    现在,让我们把目光转移到移动VR,早期教育市场的Cardboard,随着Google推出Daydream,Cardboard已经慢慢要退出历史舞台了。对程序员庆幸的是,技术栈是一样的,故,还是很期待Daydream在未来半年能给VR大潮助力的。 Gear VR之所以我不看好,是因为完全被三星高端手机给绑架了,而我看好DayDream是因为中国的小米、华为、中兴手机都会在未来半年推出Daydream手机,而在Android手机时代,中国力量已经在全球占据60%了(全球Top5的Android手机厂商,其中中国就有3家)。

     

    何为Daydream?

    image

    Daydream是Google推出的Android 7.0操作系统的一部分 (Daydream-Ready), Daydream包括3个部分:智能手机、头戴设备和手柄,以及应用,即从Android操作系统底层对移动VR做了优化。自然,谷歌先宣布了自己的两款Daydream-Ready手机Pixel&Pixel XL (HTC代工),以及售价79美元的Daydream View 头显。

    Daydream,有几点很有可能会火爆市场,甚至实现 ”移动VR 2.0里程碑”:

    • Daydream集成了移动VR的“鼠标”功能,通过DayDream View控制器或者Android APP
    • DayDream从底层解决了移动VR渲染时延问题,据说可以<=20ms,体验大大提升
    • Daydream获得了手机厂商大力支持(要使用移动VR酷炫功能,迫使用户换最新骁龙821的手机)
    • Daydream会获得Unity官方大力支持,当年Unity火的一塌糊涂,就是因为手游啊.

     

    1 Gear VR将支持Xbox无线手柄,向Daydream开战

     

    2  HTC推出VivePort M移动VR商店

       本周,HTC正式推出Viveport M开发者测试版,通过完成Viveport在移动端和线下渠道的布局。目前,Viveport M已经开放开发者测试版本,Vive注册开发者可通过Viveport后台系统进行下载,而消费者版也将于年底前正式上线。

     

    3 Oculus VR新方案(Santa Cruz):

     

      Oculus 一体机 Santa Cruz:inside-out 空间追踪技术(不用连接任何线缆和电脑的一体机)

    image

    备注:微软的AR设备HoloLens也是采用inside-out 空间追踪技术。

     

    昨天和一个朋友聊,他说,现在让人现在花5000元买一个高端PC主机的动力,远远不如花5000元,去买一个高端手机有诱惑力。

    仔细想想,以5年前国内手游市场崛起为例,这句话还是很有道理的。

    Unity User Group 北京站图文报道:《Unity3D VR游戏与应用开发》

         很高兴,能有机会回报Unity技术社区:我和雨松MOMO担任UUG北京站的负责人, 组织Unity技术交流和分享活动。

    image

    本次北京UUG活动场地–微软大厦

    image

    成功的UUG离不开默默无闻的付出:提前2小时到场的志愿者

    image

    雨松走到那里, 都会有Unity3D 粉丝合影

    image

    UUG活动正式开始,  雨松首先上台致辞

    image

    什么是 Unity User Group?

    Unity在西安、南京、厦门等全国所有城市招募UUG领袖啦! 作为Unity User Group的组织者,我们希望你:

    • 热爱Unity, 热爱开发,愿意与更多Unity开发者分享这份热爱。
    • 有号召力,擅长组织线下活动,为本地的Unity开发者提供定期交流的平台。

    根据各地区UUG的活跃情况,Unity将为UUG组织者授予官方的UUG荣誉头衔,并根据UUG运营的实际情况为高质量的UUG活动提供相应的资源与宣传支持。

    如果你认为自己能胜任地区UUG领袖,请将简历以及相关的活动组织经验发送至:uugchina@unity3d.com

    王世元 分享的话题《TVR的游戏研发与设计之路》

    image

    议题简介:使用Unity开发VR游戏的优势;从《再现甲午》、《星际穿越》、《Ace Banana》、《MIXIP》、《FlndingVR》的简介、游戏风格、游戏交互方式以及VR特性的利用进行经验分享。

    image

    周日下午, 200人的场地坐的满满的

    王明杨 分享 话题《使用Unity开发一个虚拟影院》

    image

    议题简介:通过一个移动VR影院的范例介绍Unity中将视频作为Texture的原理,在VR中开发沉浸式观影体验。

    image

    制作VR虚拟影院的4个步骤

    潘博航 分享 《虚拟现实交互设计》

    image

    议题简介:从交互设计角度探讨VR内容设计。将阐述Unity开发者目前阶段可能遇到的问题和限制,以实际的案例经验总结探索 VR 内容的交互形式和未来的可能性。

    image

    大家耳熟能详的的VR消费级输入设备:HTC Vive、Oculus、PSVR

    image

    《2016,VR元年》:你们是规则的制定者!

    北京UUG合影留言

    image

    北京站大合照来一张。前排好多美女.

     

    北京UUG部分花絮

    image

    开心的抽奖环节

    image

    为你的热情点赞: 专程从天津赶到北京参加UUG活动开发者。

    image

    Unity官方小礼品–人手一份

    image

    坐在第一排的某童靴的笔记—好认真啊。

    image

    会后部分讲师和UUG组织者合影,从左到右:潘博航、宣雨松、王明杨、王文刚刘玥

    一个女学生,对Unity特别感兴趣,摘录自她分享的朋友圈:

    “我是个门外汉,Unity刚入门,听起来有点吃力,但是,我觉得今天UUG最大的亮点就是分享的内容比较多比较丰富,特别是最后那个哥们分享了很多听起来很牛的东西,虽然我啥都没听懂。

    但是感觉应该很实用。

    参加UUG,  没错,下次活动还要来。”

    备注:

    Unity 5.4大赞:HTC Vive经典The lab渲染器开源

    HTC Vive提供了一个不错的免费VR demo,最近1周仔细体验了一番。

    image

    仔细看了其安装文件,竟然是Unity 5.4beta版本(通过查log,知道Valve公司用的是最新的5.4.0b11版本开发的),的确令人信心大振:

    要知道,某些创业公司为了打差异化竞争,提高技术门槛,对外称Unreal 4的画质比Unity 5优秀很多,这让很多在Unity技术栈下的公司有些郁闷–多年来Unity画质始终不如Unreal逼格高啊。

     

    The Lab

    程序路径:Steam\steamapps\common\The Lab\TheLab\win64

    image

     

    Secret Shop

    程序路径:Steam\steamapps\common\The Lab\SecretShop\win64

    image

     

    LONGBOW

    image

    image

    射箭,新破的记录:3565分

     

    上面这3个demo,均符合VR体验沉浸感三要素:

    • 触觉:手柄震动反馈
    • 视觉:画质沉浸感强
    • 听觉

    仔细找了一些资料,发现1个月前,Valve把The Lab 渲染器开源了,竟然。

    The lab渲染器有下面几个特点:

    • Single-Pass Forward Rendering and MSAA
    • Adaptive quality
    • Custom Shaders
    • GPU Flushing
        • 使用步骤

        步骤1:场景设置

      // Scene setup:
      //    – Enable forward renderer in Player Project Settings
      //    – Set Color Space to Linear in Player Project Settings
      //    – Enable GPU Skinning in Player Project Settings
      //      – Add the ValveCamera.cs script to the main camera
      //      – Add the ValveRealtimeLight.cs script to all runtime lights
      //    – In Project Quality Settings, set Shadow Cascades to No Cascades
      //    – In Project Quality Settings, set Pixel Light Count = 99

       

      步骤2:切换Shader

      image

        方便转换已有的材质–其实是使用Valve提供的Shaders(代替Unity 5 Standard Shader)
        步骤3:查看HTC Vive运行过程中VR的FPS!

      image

        HTC 要求的Refresh Rate是90Hz。
          核心C#脚本就2个文件,ValveCamera.cs、ValveRealtimeLight.cs
          提高VR画质和刷新率的平衡,是设置这2个Unity VR参数:

        VRSettings.renderScale

        VRSettings.renderViewportScale

        其中Adaptive quality的启发思想是,通过观察过去10帧的VRStats.gpuTimeLastFrame平均值,来动态设置。  这个动态的优化思想,从软件算法看,的确很酷:

        • 依据电脑硬件,运行不卡,renderScale设置大一些,画质慢慢变好;
        • 依据电脑硬件,运行卡了,renderScale设置小一些,画质变差就行。

         

        小道消息:我通过Twitter咨询Unity QA Leader,他给我的反馈是原定于2016.6月发布的Unity 5.4,因为目前还有2个渲染的严重bug,故5.4会延期到7月底发布–好事多磨,希望5.4正式版越来越给力,尤其是在VR渲染上。

         

        创业广告:

        1 承接VR/AR内容应用定制需求: 楼盘销售展示系统、建筑建设、旅游体验、课件教学系统、交通车辆仿真,模拟驾驶系统、游戏等。   

        2 各类最新VR设备,例如GearVR、HTC vive、Oculus CV1、LONG VR 魔镜等

        3 可公对公签正规合同,开发票。

        4 我们是北京专业团队公司;

        5 提供售后服务,保证产品质量,有业务需求可以进行一对一的技术指导。

         

        联系QQ: 2137-2550

         

         

        参考博客:

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

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

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

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

        再次北漂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大型活动

        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函数,就能实现不同的光照效果,如各向异性光照效果–金属表面拉丝等效果。

        参考文档: