VR交互动画短片《拾梦老人》的开发经历

简介:

笔者去年写了一篇关于如何打造高逼格耀斑效果的文章,很荣幸得到大家的关注。本人平日乐于分享自己工作中的点滴技术心得,欢迎大家联系我进行技术相关的交流学习。

今年笔者在PintaStudio,这是我在中科院的同学创立的一家VR电影工作室,我们希望用游戏引擎实时渲染的方式来表达艺术家的思想。同时,我们制作的VR沉浸式感受也是一种全新的观影体验。接下来,我将简述整个开发的历程。

请输入图片描述
VR交互动画短片《拾梦老人》剧照

一、引擎的选择 (Unity VS UE)

立项阶段,我们遇到了引擎选择上的分歧。我们想做的是重量级大作,所以最初的想法是采用一个重量级引擎。早期做端游时,我们了解得最多的是CRY ENGINE(下称“CE”)和UNREAL ENGINE(下称“UE”)了,这两个引擎就是引擎界的“西门吹雪”和“叶孤城”,长期霸占着国外的大作市场。CE这些年在国内推广不利,所以在最初阶段,更多的小伙伴希望用UE来做我们这个电影。我的加入,给团队带来了新的选择—Unity。相比前两个引擎,Unity可以说是后起之秀,尤其近3年手游的兴起,才把Unity引入大众的视线。我们主要对UE和Unity两个引擎进行了比较:

  1. 在视觉效果上,UE的完成度更高。引擎自带了比较多的效果如Light
    Propagation、各种Volume效果;UE的实时光照用的是经典PBR光照模型,更加接近艺术家们要求的Maya效果;UE的ShaderTree,更是给人一种“屌丝图形码工可以退休”的感觉。反观Unity,自带的效果比较有限(不考虑庞大逆天的AssetStore情况下),而且引擎中增加了一些无端端的优化,造成了一些视觉上的Bug,遭到一些艺术家的诟病。
  2. 性能上,UE没有对所有模块做全部测试,但是Unity经历了90%以上手游的考验,相信可以保证影片的流畅性;同时因为有更多的移动开发案例,所以小胜UE。
  3. 操作上,UE更强大的功能必然会导致编译时间较长;对于喜欢改装引擎的老司机,修改UE代码需要对它所有的模块都熟知;加上是基于C++的开发,程序需要格外小心内存、指针等各种问题。再看Unity,Unity把一些固定代码做了封装,改装引擎最多只能是对某些模块进行重写(当然,这样改装的结果可能导致性能略低,但是对于我们项目而言,不涉及过多硬件交互),不太容易出现问题;Unity是基于C#的开发,程序也相对耐操一些,对于支持VR的PC硬件,内存不是最致命的问题,但怕GC太多。

综上所述,我建议团队采用Unity引擎。尽管后来被几个大坑坑得鼻青脸肿,但是从项目进度以及结果来看,这个引擎基本上达到了我们想要的效果。


二、技术创新

Unity引擎本身的画质相对来说是较为简朴的,但是对于电影来说,艺术家希望能有一些更丰富的画面表现。我之前在公司运营团队写的一篇文章里也简单提过,大家可以参考:
http://www.vrzy.com/vr/60852.html

在这里我们举个简单小例子:
请输入图片描述

如上图这个光影效果,上面窗户衍射效果就有很多种实现方法。先对Depthmap做边缘的blur,然后计算光照是一种办法;直接对Render Target做局部的bloom也是一种方法;OffScreenRenderTarget,渲染一张低分辨率的光照贴图,然后合成回MainTarget,也不失为一种好方法。

对于地上阴影的边缘效果,怎么实现呢?CookieTexture?错误,你没有办法用CookeTexture去解决不规则的阴影衍射,更何况阴影的边缘颜色是艺术家幻想的。那怎么办?其实不难,它是软阴影算法的变种,所以,利用概率采样ShadowMap的方法得到阴影边缘,然后在边缘地区做颜色叠加即可实现。

我们再举一个小例子:
请输入图片描述
这狗的耳朵是不是有点透明?其实这就是个SSS效果,实现方法是:对于一个表面,沿着视线方向做一个延伸,取到次表面的光照,再叠加到前表面的颜色上。仔细看Unity树叶的Shader(Unity内置Terrain里的Shader),有个变量backcontrib,是把树叶背面的颜色叠到前面来,其实也是sss的变种。


三、重重阻碍

我们项目的开发进程充满艰辛,在此列举部分,给可能要入坑的同学提个醒:

1. 普通物件Standard材质
因为进度原因,我们仍然采用了Unity自带Standard里的PBR光照模型,这个光照模型是经典模型的简化版,对于大多数渲染对象来说还是可行的。但Unity自带的StandardShader在支持半透物件时,就会出现瘫痪的情况。如下图:
请输入图片描述
左图为正确效果,右图为UnityStandard的错误效果。这是由于StandardShader里Transparent 没有 Z Buffer 导致。那么有同学又会问“我用cut out不就行了么?”但是cut out是用RenderQueue来解决问题的,我希望上面这个腿和靴子来个半透明效果,它就没办法实现了。比如下图这个淡出效果:
请输入图片描述
此外,Unity还有一个致命的“优化”,就是在OpaqueQueue之后会把ShadowMap给销毁掉。所以半透明物件无法接受阴影。另外,关于点光源,如果光源范围内没有任何物体,Unity会把Lightmap也“优化”掉。类似这样的小细节Bug比较多,但需求不会因为引擎的Bug而减少或者降低标准。一个坑一个坑地填起来,也花费了我们相当大的精力。

2. 特效
如果说普通物件的材质是被Unity坑了一下,那么特效就是被VR的SDK给坑得鼻青脸肿。当时我们用的是HTC VIVE的Steam VR的SDK。研发完成之后才发现,这个SDK对RenderCommand和OffScreenCamera支持极差(OffScreenCamera没有办法左右眼矫正),也就是说所有的特效必须写在固定管线里,比如这种Volumetric Light。我们需要离线烘焙好ShadowMap,然后再前向渲染时,用RayTrace去模拟它的attention。
请输入图片描述
上面两张图中,左图是正确的效果,右图是SteamVR里可能看到的效果(因为OffScreen Camera位置没有经过左右眼矫正,所以位置看上去是偏移的,甚至不在屏幕里)。

3. 其他
在VR的开发中,相机也是个坑。因为传感器会实时地重置相机位置,所以你没有办法去动态改变相机,只能通过反向移动场景的方式来实现相机的动态切换。这也消耗了我们很多的时间来填这个坑。


四、展望

Unity 引擎自带的渲染模块基本都有些许欠缺,但是近年来随着Compute Shader、Render Command这些接口的提出,给我们引擎开发者提供了很大的可扩展空间。正如我多次在UWA技术群(465082844)里呼吁的:引擎是用来帮助开发者减少工作量的,不是用来完全依靠的。没有一款引擎能满足所有项目都通用的需求,所有引擎都需要根据不同的项目来做修改。一个不会造发动机的人,可以开车,甚至简单地维修汽车,但是你没法成为造车场的老司机或者职业赛车手。

附《拾梦老人》1分钟唯美预告片:





原文出处:侑虎科技
本文作者:admin
转载请与作者联系,同时请务必标明文章原始出处和原文链接及本声明。

目录
相关文章
|
设计模式 测试技术 vr&ar
提升你的Android开发技能:从AR/VR沉浸到UI设计和故障排除(三)
提升你的Android开发技能:从AR/VR沉浸到UI设计和故障排除
103 0
|
人工智能 机器人 区块链
提升你的Android开发技能:从AR/VR沉浸到UI设计和故障排除(二)
提升你的Android开发技能:从AR/VR沉浸到UI设计和故障排除
144 0
|
6月前
|
人工智能 编解码 5G
虚拟现实(VR)与增强现实(AR)的融合:开启全新交互时代
【6月更文挑战第17天】虚拟现实(VR)与增强现实(AR)融合成混合现实(MR),打造全新交互体验。MR结合VR的沉浸感和AR的现实增强,应用于教育、游戏、设计和营销,带来创新教学方式、沉浸式游戏体验和高效设计工具。尽管面临技术挑战,随着5G和AI的发展,MR有望引领未来交互的革命。
|
3月前
|
vr&ar 图形学 API
Unity与VR控制器交互全解:从基础配置到力反馈应用,多角度提升虚拟现实游戏的真实感与沉浸体验大揭秘
【8月更文挑战第31天】虚拟现实(VR)技术迅猛发展,Unity作为主流游戏开发引擎,支持多种VR硬件并提供丰富的API,尤其在VR控制器交互设计上具备高度灵活性。本文详细介绍了如何在Unity中配置VR支持、设置控制器、实现按钮交互及力反馈,结合碰撞检测和物理引擎提升真实感,助力开发者创造沉浸式体验。
199 0
|
4月前
|
vr&ar 图形学 开发者
步入未来科技前沿:全方位解读Unity在VR/AR开发中的应用技巧,带你轻松打造震撼人心的沉浸式虚拟现实与增强现实体验——附详细示例代码与实战指南
【8月更文挑战第31天】虚拟现实(VR)和增强现实(AR)技术正深刻改变生活,从教育、娱乐到医疗、工业,应用广泛。Unity作为强大的游戏开发引擎,适用于构建高质量的VR/AR应用,支持Oculus Rift、HTC Vive、Microsoft HoloLens、ARKit和ARCore等平台。本文将介绍如何使用Unity创建沉浸式虚拟体验,包括设置项目、添加相机、处理用户输入等,并通过具体示例代码展示实现过程。无论是完全沉浸式的VR体验,还是将数字内容叠加到现实世界的AR应用,Unity均提供了所需的一切工具。
173 0
|
7月前
|
定位技术 vr&ar Android开发
AR与VR在安卓开发中的应用案例
【4月更文挑战第14天】AR和VR技术在安卓开发中日益普及,改变生活和工作方式。AR应用于导航、教育、零售,如AR导航、解剖学教学工具和虚拟家居预览。VR则创造虚拟环境,用于游戏、旅游和健身,如VR游戏“Beat Saber”、虚拟旅游和VR健身应用。这些技术在医疗、房地产等领域也展现潜力,未来将有更多创新应用出现,开发者应关注并探索其可能性。
169 1
|
vr&ar 开发工具 图形学
VR开发平台介绍
VR开发平台介绍
|
缓存 Java vr&ar
提升你的Android开发技能:从AR/VR沉浸到UI设计和故障排除(一)
提升你的Android开发技能:从AR/VR沉浸到UI设计和故障排除
148 0
|
API vr&ar 图形学
Uniy3d开发VR程序的流程(Unity3D)
最近做VR项目比较多,也学习了很多的东西,现在把开发的流程,已经用到的技术以及软件总结一下,分享出来供大家参考,本文内容比较基础,有什么不对的地方,希望大家能指正出来。
VR交互设备
本报告研究全球与中国市场VR交互设备的产能、产量、销量、销售额、价格及未来趋势。重点分析全球与中国市场的主要厂商产品特点、产品规格、价格、销量、销售收入及全球和中国市场主要生产商的市场份额