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

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

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

 

摘录网上的“.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  微软.NET年芳15:我在Azure上搭建Photon服务器(C#.NET) image thumb1

 

云服务器选型

我的选型原则也就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  微软.NET年芳15:我在Azure上搭建Photon服务器(C#.NET) image thumb2

 

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

 

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

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

 

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

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  微软.NET年芳15:我在Azure上搭建Photon服务器(C#.NET) image thumb5

即,直接可以实现前段和后端复用模型实体代码、传递的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  微软.NET年芳15:我在Azure上搭建Photon服务器(C#.NET) image thumb6

    使用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  VR 2016年元年小结:Vision VR/AR Summit Asia 2016 image thumb

    不过,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 2016年元年小结:Vision VR/AR Summit Asia 2016 image thumb1

     

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

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

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

    • VR 趋势

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

     

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

     

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

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

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

     

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

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

     

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

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

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

     

     

    • ARVR未来

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

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

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

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

     

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

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

     

     

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

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

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

     

    参考: 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, 移动VR 2.0里程碑: 概述 image9 thumb

    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  DayDream, 移动VR 2.0里程碑: 概述 image thumb

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

     

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

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

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

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

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

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

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

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

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

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

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

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

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

    什么是 Unity User Group?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    北京UUG合影留言

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

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

     

    北京UUG部分花絮

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

    开心的抽奖环节

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

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

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

    Unity官方小礼品–人手一份

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

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

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

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

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

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

    但是感觉应该很实用。

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

    备注:

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

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

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

    仔细看了其安装文件,竟然是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  Unity 5.4大赞:HTC Vive经典The lab渲染器开源 image thumb1

     

    Secret Shop

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

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

     

    LONGBOW

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

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

    射箭,新破的记录: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  Unity 5.4大赞:HTC Vive经典The lab渲染器开源 image thumb5

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

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

        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点半就到公园了。

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

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

         

        再次北漂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  再次北漂66天: 记第一次BP (商业路演) image thumb2

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

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

        “you can’t connect the dots looking forward;

           you can only connect them looking backwards”

         

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

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

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

         

        备注:

        我在西安组织活动的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  Unity3D for VR 学习(11): 后期屏幕渲染特效(Image Effect) image thumb11

         

        下载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  Unity3D for VR 学习(11): 后期屏幕渲染特效(Image Effect) image thumb12

         

        Screen Space Reflection屏幕空间光线追踪反射(SSRR)倒影效果image  Unity3D for VR 学习(11): 后期屏幕渲染特效(Image Effect) image thumb13
        Screen Space Ambient Occlusion (SSAO)  屏幕空间环境遮挡特效 —模拟全景漫反射

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

         

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

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

         

        Bloom 泛光 场景变得梦幻

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

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

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

        深入学习文档

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

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

         

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

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

         

        后期屏幕渲染原理

        屏幕后期渲染,使用的是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号起来,在附近溜达溜达,静安公园、蔡元培雕像

        image  Unite ShangHai 2016 (Unity3D开发者大会) image thumbimage  Unite ShangHai 2016 (Unity3D开发者大会) image3 thumb

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

         

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

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

         

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

        image  Unite ShangHai 2016 (Unity3D开发者大会) image thumb1

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

         

        上海豫园–城隍庙街区

        image  Unite ShangHai 2016 (Unity3D开发者大会) image thumb2image  Unite ShangHai 2016 (Unity3D开发者大会) image thumb3

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

         

        Unite 大会(KeyNote)

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

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

        image  Unite ShangHai 2016 (Unity3D开发者大会) image thumb4

         

        Unity 5.4 VR性能优化增强30%

        image  Unite ShangHai 2016 (Unity3D开发者大会) image thumb5image  Unite ShangHai 2016 (Unity3D开发者大会) image thumb6

         

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

        image  Unite ShangHai 2016 (Unity3D开发者大会) image thumb7

        image  Unite ShangHai 2016 (Unity3D开发者大会) image thumb8

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

         

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

        image  Unite ShangHai 2016 (Unity3D开发者大会) image thumb9

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

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

         

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

        image  Unite ShangHai 2016 (Unity3D开发者大会) image thumb10

        最近在聚焦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  Unite ShangHai 2016 (Unity3D开发者大会) image18 thumb

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

         

        image  Unite ShangHai 2016 (Unity3D开发者大会) image11 thumb

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

         

        image  Unite ShangHai 2016 (Unity3D开发者大会) image15 thumb

        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  Unity3D for VR 学习(10): Unity LOD Group 组件 image thumb1

        找一个空GameObject,添加LOD Group;

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

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

         

        Step3:设置LOD Bias

         

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

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

         

        然后就是在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  Unity3D for VR 学习(9): Unity Shader 光照模型 (illumination model) image thumb

         

        Unity内置光照模型

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

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

        Lambert 漫反射

        fixed4 LightingLambert (SurfaceOutput s, UnityGI gi)

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

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

         

        BlinnPhong 镜面反射 (Jim Blinn 1977)

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

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

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

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

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

         

        一些光照模型概念:

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

        参考文档: