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概述

      C#程序员整理的Unity 3D笔记(十九):Unity 3D的Native 2D

      最早接触Unity是从4.1版本开始,故那个时候只知道Unity 3D,无Unity 2D。近一段时间,通过学习,了解到Unity 2D也是蛮火的。如在最新的Unity 5版本中,新建项目可以选择2D、3D的,且该选项较以往版本更加醒目:仿佛告诉世人Unity不仅仅是3D的,Unity Native 2D也是不错的选择。

      image

      下面就使用过程中,Unity Native 2D一些特有的features整理出来:

      1 Unity 2D新建工程不一样

      看了一下官方的说明,发现实际上新建项目选择2D、3D不是决定项目的唯一,因为2D、3D还可以工程创建完成后,在Editor下也可以重新选择的。

      新建2D项目,和3D项目大约有下面几个区别:

      区别1:摄像机投影默认为Orthographic(正交)

      image

      区别2:场景视图,默认为2D方式

      image

      区别3:Edit—Project Settings—Editor 中默认Mode为2D

      image

      区别4:导入(添加)图片资源时,2D的Texture Type为Sprite(2D and UI)

      image

      新建工程时候选择2D、3D模式,目前就找到就这4种区别。

       

      2 Unity 2D特有组件

      Unity 2D自从4.3—>4.6—>5.0,增加很多2D组件: 我们发现Unity 5集中提供了15中Physics 2D组件,说明2D、3D的一个重要的区别就是在Physics上。

      image

      其中,Polygon Collider 2D组件非常棒,它提供了集成可视化调节碰撞盒子,按住Shift键可以添加碰撞点、按住Ctrl键可以删除碰撞点–对不规则Sprite尤为有用

      image

       

      另外,有一个重要的2D组件是Sprite Render,这个是2D下非常重要的组件。

      image

      Sprite Render是用来对Sprite(精灵)进行渲染的组件,它有2个重要属性:

      • Sorting Layer:由小到大排序进行渲染和呈现,大的会遮住小的。
      • Order In Layer:同层中渲染的优先级,数字越大渲染优先级越高。

      注意,在Unity 2D中,一般不使用Z轴坐标,默认为0.

      同样的功能,也可以在3D中使用Z轴由大到小来实现Order–但是相比,没有2D下的Sorting Layer直观。 在Sorting Layer下,你可以预定Soring Layer,这样便于team 协作:

      image

       

      3 Unity 2D 其他

      2D的射线检测,3D检测是空间检测,2D则简单一些。

      image

      Physics2D.LinecastAll

      public static RaycastHit2D[] LinecastAll(Vector2 start, Vector2 end, int layerMask = DefaultRaycastLayers, float minDepth = -Mathf.Infinity, float maxDepth = Mathf.Infinity);

      Physics.Linecast

      public static bool Linecast(Vector3 start, Vector3 end, int layerMask = DefaultRaycastLayers);

      Physics2D.OverlapPointAll

      public static Collider2D[] OverlapPointAll(Vector2 point, int layerMask = DefaultRaycastLayers, float minDepth = -Mathf.Infinity, float maxDepth = Mathf.Infinity);

       

      Sprite.pixelsPerUnit = 100:1(默认100像素=1单位)

      image

       

      4 Unity 2D动画–Animator动画状态机,Animation动画编辑器

      image

      通过拖动多个Sprite即可自动生成Animation帧动画,在动态调节Sample率后,可观察到动画实时效果,非常简单。

       

      参考文献: