Sofdec2功能以及在Unreal4有趣的使用
一、引言
CRIWARE除了拥有音频中间件ADX2外还拥有视频中间件Sofdec2,为视频的编解码,播放提供了便利。
Unreal4强大的功能已经无需笔者赘述,各位应用者定当比我熟知,当Sofdec2在Unreal4中应用时,借助于两者各自功能,能创造出一些比较有趣,且提高工作效率和开发时间的事情。
Sofdec2可以在官网进行申请试用(https://www.criware.com/cn/get/index.html)。
Unreal在官网下载(https://www.unrealengine.com/zh-CN/download)。
二、正文
Sofdec2是CRIWARE针对视频而开发的解决工具,主要用于视频的压缩和解码上。
但实际上CRIWARE在Sofdec2的开发上不仅仅有视频压缩和解码,还有其他很多有用的功能。
1、Sofdec2简介
Sofdec2的主要工作流程图如下:
视频,音频,字幕等在Sofdec2中合成,在经过Sofdec2压缩后,进入游戏,通过游戏内的系统进行解压和播放。
整个流程非常的简单化,而且Sofdec2的使用操作异常的简单,无需任何技术都可以很容易的根据自己的喜好进行压缩。
Sofdec2的功能主要分为以下5项:视频的压缩和解码,多语种语音,多语种字母,Alpha通道视频播放以及Cue Point事件触发。
(1)、视频的压缩和解码
在游戏中有很多的地方会用到相关的视频,例如过场动画。一般精致的过场动画由于无损,会导致文件的体积异常的大,因此需要进行压缩以减少视频的体积。
一般的压缩会导致视频效果的极大损坏,而Sofdec2的压缩则可以尽可能的减少效果的丢失,下面是一组对比图:
明显的看到Sofdec2压缩过后的视频效果要远远优于。
在Sofdec2中拥有3个压缩格式可供选择:Sofdec.Prime,H.264以及VP9。
每种格式的压缩量以及应用平台会有所不同。
相关细节如下:
For Smartphones
For game consoles
上面是针对不同平台的各个压缩效果的各项指标。
上面则是各个压缩所支持的平台。
压缩的选择对于频台和开发者自己所想要达到的目的相互呼应,因为按照常理,压缩越大,视频效果损失越大,任何一个压缩软件都无法避免,因此合理的平衡压缩和效果,合理的平衡CPU和内存占比是较为重要的也是开发者需要自行斟酌的地方。
(2)、多语种语音
多语种语音用于视频中需要多种语音播放。传统压缩视频并不具备此种功能,当我们需要针对不同语言出不同的视频时,由于并不支持多种语音播放,因此同样在游戏中我们需要放置多个视频,每个视频包含相同的视频,不同的音频。当需要播放某种语音时调取对应的整个压缩视频。
这种方式导致的结果就是包的大小线性增长,每多支持一种语言,就需要将所有的视频全部按照语言重新输出一遍,如此一来整个包的大小会急速膨胀。
为了解决这一问题,Sofdec2引进了多语种语音功能,Sofdec2支持导入多个音频轨道(实际可支持0-31总共32个音频轨道),同时只使用1个视频源,音频的大小相比较视频将会小很多。
导入的音频轨道可通过两种方式播放:
Audio Track:该轨道建议应用于除了需要根据语种变化外的其他所有音频集合例如BGM,环境音效,以及其他表现音效。
Voice Track:该轨道建议用于语种音频。
当完成上述内容后,在实际播放视频时,经由程序代码控制播放对应的音频轨道就能够完成语音的切换。
这种方式仅仅需要变化音频视频使用同一视频源,如此一来整个的大小从音频和视频的集合编程仅仅音频的占用,大小会降低非常多。
Sofdec2在处理音频轨道时,沿用了ADX2中对音频的压缩格式ADX以及HCA,这两个压缩格式是CRIWARE独有的两个压缩方式,在cpu和内存的占比上以及多个音频轨道播放时有着非常显著的优势,因此除了节省了视频的量外,在音频的压缩上也具有一定的优势。
Sofdec2还支持5.1声道的音频轨道,如果希望视频的声场不仅仅是双声道,那么采用Sofdec2并添加5.1声道的音轨,可以做到5.1声道效果播放,是的视频和音频的沉浸感大大加深。
注:当视频的播放方式是Loop时,需要注意音频和视频的framerate一定要相同,并且具有相同的时间,否则在循环播放上会让声音和视频逐渐错开。
(3)、多语种字幕
多语种字母类似于多语种语音,是针对不同语种不同字幕制作。类似于多语种语音,Sofdec2中将字母和视频分开有效的让程序控制字幕的选择,可以使得多字幕对应一个视频。极大的降低了包的大小。
如上图所示,可以进行字幕的导入。
在Sofdec2中导入的字母可以使用“Subtitle Workshop”等字母软件制作,同样也可以使用TXT直接导入。
如图所示,第一行“;”开头的表示注释。
第二行1000表示1秒的长度。
第三行0,16560表示从0秒开始到16.56秒显示字幕“First Message”。
使用这种格式可以直接在txt中抒写,非常方便的导入到Sofdec2中。
注:这里要提前说明一下Sofdec2在字幕的显示上,并不会和专业的字幕软件一样,显示在视频的中下部,在Sofdec2中当我们压缩完毕进行预览的时候,字幕会专门显示在如图的位置:
这是因为Sofdec2的主要功能并非字幕的制作,而是字幕多语种的调用,对于字幕的定制都需要自己进行定制,如字幕的颜色,字体大小,字体格式等等。
(4)、Alpha通道视频
Alpha表示透明通道,Alpha通道视频则是指具有透明通道的视频,Sofdec2可知支持压缩具有透明通道的视频。
要注意的是只有视频格式中的Color bit是32时,才能正常的进行Alpha视频的压缩。
这里笔者为各位看官简单的制作一个具有Alpha的视频,并将其压缩,对比。
首先需要准备一个视频,AE软件。
第一步:打开AE软件,并且点击从素材新建合成,选择需要增加Alpha的视频。
此时正常导入视频。
然后再在最下方视频编辑栏中点击三角下拉,找到不透明度,在合适的位置勾选,然后再根据各位自己的需要,移动右侧游标并更改不透明度,这样整个视频的透明度就会根据我们的设定而发生变化。
上述完成后,点击文件-导出-添加到渲染队列
再在最下方的输出模块中点击“无损”打开设置界面
在打开的设置中改变视频输出到RGB+Alpha点击确定。
然后回到主界面,确保下方的视频渲染部分拥有正常的导出位置,并勾选需要渲染的视频,点击渲染,渲染完成后一个具有alpha的视频即可完成。
这里插入一个对比,当我们使用AE渲染视频后,该视频的大小将会非常大,因此我们采用Sofdec2进行压缩,压缩前后的体积大小如图所示:
进行压缩前大小为1.2G压缩后仅仅16M,主要因为我们导出的格式时RGB+Alpha并且无任何损耗,所以体积太大。
将压缩完的视频使用Sofdec2进行压缩,在步骤2中就能看到Alpha的通道已经可以进行勾选了,然后也可以看到相关的color bit为32。
当勾选了了Alpha Movie时,将会正常的压缩Alpha视频并附带有Alpha通道。
(5)、Cue Point
Cue Point为Sofdec2在压缩视频时,给予视频的一些特殊的事件触发点,也成为Event Point。
我们可以在视频压缩前定义一系列按照时间进行触发的Cue Point并且在视频压缩时将其附带在其中,当视频在播放时,每到达一个Cue Point都会发送一个事件,使用调用事件名称相符时就能触发你所定义的行为。
那么这个功能使用在什么地方呢?
我们假设一个游戏中拥有一个液晶显示电视,该电视在3D场景中,对于沉浸式游戏体验和生活常识,该电视无论视觉方位还是声音方位都应该式3D世界中的具体位置。
假设该电视播放的视频我们仅仅使用视频功能进行播放,那么结果会是什么样呢?
结果自然是视觉式3D的正常位置播放,但是声音永远是2D效果,那么他会与我们的BGM,环境音效等一系列音效产生不好的影响。因为视频的播放永远是一个面,无法采用3D的形式。
此时我们引入Cue Point,让Cue Point触发事件,事件用于播放3D位置的音效,如此一来,完全可以使得声音也正式成为3D效果,与我们希望的表现符合。
Cue Point的应用也极其的简单,无需任何的技术基础。
如图所示,第一行为注释
第二行为1秒的长度
第三行表示在0秒触发一个名为Music且值为1的事件
同理,第四行表示10秒触发一个名为Foosteps且值为1的事件。
Cue Point的导入也极其简单,如图所示,只需要在step2中选择需要导入的Cue Point即可。
Cue Point的主要作用用于触发事件,并不仅仅是利用于音频触发,只要需要在视频播放到某个事件触发任何事件Cue Point都可以应用,其用法宽度很宽,主要看用户该怎么使用。
Cue Point音频触发可以进一步降低视频本身的大小,因为完全可以不包含音频,当视频中的音频可以使用游戏内音频进行复用时,完全可以使用Cue Point进行触发。
以上便是Sofdec2的简介,它不仅仅是一个进行压缩的工具软件,还可以使用多语种字幕,多语种音频,Alpha以及Cue Point等功能,大大的方便游戏开发。
2、Sofdec2的使用步骤
Sofdec2的使用极其简单,在其压缩软件中仅仅使用8个步骤就可以完成压缩。
(1)第一步:平台选择
选择需要的平台,平台的选择主要涉及到部分压缩格式的适用性。
(2)、第二步:文件设定
文件设定中需要选择需要压缩的文件,压缩的格式(Prime,H.264,VP9),需要的Cue Point以及是否是Alpha视频。
(3)、第三步:选择语音
选择语音中可以使用制作的视频本身附带的语音,只需要选择一个track,并且勾选上“use audio included in the video file"。
或者点击右上角的增加符号选择新的语音。
音频的压缩格式可以进行选择,有ADX和HCA两种,ADX相对压缩较小,但是Cpu负载比较小,HCA压缩较大,Cpu的负责也较大。
(4)、第四步:选择字幕
选择字幕可以使用已经完成的字幕TXT,进行导入,只需要点击右上角的增加符号选择字幕即可。
(5)、第五步:设定压缩质量
在第二步中选择了压缩格式,此步骤可以根据压缩格式选择相应的压缩比等,系统给定了5个不同级别的压缩质量可以使用。或者也可以自行设定。
(6)、第六步:选择输出位置
完成了上述设定后基本设置已经完成,可以在本步骤中选择输出的位置。
(7)、第七步:确定相关设定
可以在本步骤中根据系统提供的信息确定是否符合你的压缩标准。
(8)、第八步:完成压缩并预览
确认好各项信息后可以在本步骤中进行压缩,点击Start即可进行。当成功压缩后,系统会提示Complete。
并且支持直接预览功能,点击“PREVIEW”即可预览。
注:预览中的相关说明
预览中有Audio Track,其表示正常的音频轨道,如果播放任何音频,该轨道需要开启。若该轨道关闭则不会有任何声音。
“Voice Trace”,其表示语音音频轨道,适用于不同语种的语音播放,在预览时可以进行切换以便于测试各个track的语音是否正常播放。
“Subtitle Ch”其为字幕的通道,字幕由于多语种,因此我们可以进行字幕的切换,切换字幕后,显示会显示在view的下方“Subtitle”中。
以上便是Sofdect2的基本使用步骤和相关说明,下面我们将Sofdec2集成在Unreal4做一些比较有趣的事情。
2、Sofdec2在Unreal4中的集成和有趣实例
第一部分:集成
Sofdec2在Unreal4的集成极为简便,在Sofdec2官方下载Sofdec2和Unreal4相关SDK后找到如下的路径:
在Unreal4中新建一个工程,并找到该工程的路径如下:
找到上述两个路径后,将Sofdec2中的UE4/Engine下所有文件夹复制到工程文件目录下,如下图:
注意:一定要复制到工程目录下,不要复制到Unreal4的安装目录下。
复制完成后从新启动Unreal4工程就会进行自动编译,编译完成后集成部分就完成,可以进行下一步的设定。
注意:如果Unreal4的工程创建为蓝图版本,且中间没有添加过自定义的C++Class,那么此时编译会出现问题,导致工程无法打开。
解决方法是:集成前在Unreal4的工程文件下创建C++Class,创建完毕后重新开始集成步骤,重新打开工程后就会顺利的自动进行编译。
完成上述操作后,需要在Unreal4中设定mana的初始化,在Unreal4中找到项目设定:
找到“插件”下的“CriWare”,点击后进入初始化设定。
找到mana相关,勾选“initialize mana”选线即可,如果需要更改相关限制数量等可以在如下的图中进行设置。
设置完成后重启编辑器即可完成正常的集成。
第二部分:应用和实例
我们完成了Sofdec2在Unreal4的集成,下面就可以进行实际的应用了,笔者主要以3D场景视频播放,Alpha通道动态应用,Cue Point动态触发以及UI界面视频应用4个方面进行说明和展示实例。
(1)、3D场景视频播放
本场景和上篇ADX2的说明使用统一场景,笔者在本场景中放置了一个餐馆,为了让餐馆看不起来比较诱人,笔者从网上下载了相关的美食节目,并使用Sofdec2进行相关压缩和设定。
如图所示,在餐馆正门的正上方有一个电视,电视中可以进行播放美食节目用以吸引顾客。
为了二达到这一目的,电视我们分成了2个部分,一个为外框,一个是正式的屏幕。
对于外框部分,是常规的3D场景盒体,切去了中间的部分。
屏幕的制作方式如下:
我们首先在shape中选择一个,并且将其转化为蓝图如图:
将蓝图拖动到场景中,调整其大小至适配与外边框。
我们再将使用Sofdec2压缩完成usm文件拖动到unreal4的内容浏览器中。
右键导入的usm文件选择转化为texture
再右键点击转化的texture选择Create Material,将其转化为材质如图:
转化完成后,我们的视频基本转变就完成了,让我们回到蓝图界面。
在蓝图界面我们点击创建的staticmesh,在细节中选择其material为刚才我们创建的material如图:
完成后,在蓝图的组建部分我们增加一个mana commponent,用以播放相关视频,如图所示:
条件完成mana commponent后,我们选择mana组建,在细节中设置其texture如图:
完成上述步骤后,基本创建已经完成,下面我们需要对其进行播放触发,回到蓝图,我们打开其事件部分,作如下的蓝图逻辑:
此时播放逻辑已经完成,让我们进行编译,编译完成后运行,就可以看到们的视频正常播放了。
此时视频就会依照我们之前录制或者制作的方式进行播放了,我们还可以创建Loop播放,顺序播放等,这就要各位看官自行制作了。
(2)、Cue Point触发
上文中我们讲解过Cue Point的触发,也知道如果视频中包含音频的结果会使得整个音频处于2D,我们无法在游戏中由于听者和发声体的位置和朝向感受到音频变化。
其次看过上篇文章的读者应该会记得,在餐馆中我们使用了ADX2的快照功能(Snapshot),用于在餐馆中听到空间回响效果。
而如果我们在视频中使用加入音频则会使的音频不会在进入整个空间产生混响效果,因此我们也会采用Cue Point进行触发,触发后播放3D音效效果。
因此我们在Sofdec2的压缩过程中去掉“use audio included in the video file",将其音频取出导入到ADX2中。
我们完成的Cue Point如下,因为是整个音频完全替换,因此我这里只需要在开始的播放一个音频即可
回到我们的Unreal4中,之前我们设定的蓝图已经完成了基本的视频播放,此时我们需要根据Cue Point的事件来触发音频播放,我们在Unreal4的蓝图中做了如下的逻辑:
如上图所示,我们添加了自定义事件,并且将其绑定到mana的event Point上,将事件的信息进行拆分,当事件的名称和Audio完全一致时,将会在staticmesh的世界坐标上播放一个名称为Alpha_Food的3D音频。
如上逻辑完成后,再运行我们的游戏,发现声音能够正常成为3D效果了的,并且进入到参观内,音频也会产生混响效果了。
注:想产生混响效果需要再ADX2中启用相关总线效果,实际做法参考上一文章
http://gad.qq.com/article/detail/288415
再例如有一个视频是一个球从左向右弹过,我们希望球落地的效果需要根据实际游戏方位和听者产生声场变化,因此也使用Cue Point触发方式播放3D音频。
如图所示为笔者自己制作的一个简单动画,一个小球会从左向右弹跳过去。整个视频的3D大小相对玩家角色来说较大,因此为了突出表现球的弹跳效果和玩家之间的位置关系,特地使用了3DSound。
而我们的Cue Point写法则如下图:
分别再8帧,16帧和24帧给定一个触发的Cue Point,之后一旦到达触发点,我们就将3D声音放置再小球落地点以表现小球落地效果。
由于声音为ADX2做成的3D Position效果,因此无论我们怎么改变玩家角色位置,每个小球的落地点声音和玩家之间都会有正确的声相摆位效果。一个由2D视频产生3D声音效果的实例即可完成。
具体蓝图如下:
相交于前一个,蓝图变得稍微复杂了,这是因为我们需要对不同的Cue Point进行验证,只有符合名称的才能在正常地点播放,其次我们还需要将正确的声音播放地点明确给各个声音,因此再staticMesh的基础地点上,进行了部分增减坐标。
Cue Point的作用是再视频播放的时候进行事件触发,因此拥有非常大量的用法并非一定局限于3D音效播放,例如场景变化等都可以跟随视频播放而发生变化。所有的用法都可以和事件触发相结合,具体能达到的效果要看各自的发挥了。
(3)、UI界面应用
经过Sofdec2压缩的视频可以用于界面中。
例如界面上我们希望其背景是一个动态效果,那么此时我们可以利用视频做出一个动态效果,让其作为界面的底图循环播放,这样只用单纯的播放视频,不用额外添加任何动作,特效等使得逻辑复杂而且难于表现。
界面上添加视频的方式能大大降低开发难度,很多不易实现的界面特效,界面动画等完全都能够使用视频的方式播放。
如图所示,笔者使用Sofdec2压缩了一个具有alpha的视频并将视频相关于界面之上,当按下按键后界面将会出现,由于视频的左右,界面的底图为动态游动的鱼,效果可以做到alpha的透明效果。整个只需要一个视频加一些脚本蓝图逻辑即可实现。
如上图,整个界面有3个对话,再对话的底层是一张动态视频的UI图,鱼会在底层不断的游动。底图由于是视频附带有alpha通道,因此产生了透明效果,可以看到部分真实3D场景。
注:视频用在界面上拥有众多的用法,例如一般游戏的技能展示,完全可以使用Sofdect2压缩后的视频进行直接展示,不需要动态的调取。
再例如一些图片的四周需要有动态效果边框,此时也可以利用Sofdec2使用视频和alpha通道再图片周围添加视频特效,以此来达到最终的目的。
说明完毕实例后我们来说明如何再Unreal4中制作上图的动态视频UI。
首先按照之前讲述的方式将Sofdec2压缩完成的usm文件导入到Unreal4中,并将usm文件转变为texture文件,以备用。
之后让我们再Unreal中创建一个界面的控件蓝图,如下图:
创建完成控件蓝图后将其打开,在控件蓝图中创建一个image用于视频texture。如下图所示,需要在创建的image上选择我们刚才导入并转换完成的视频texture。
如此一来我们的界面制作已经完成,下面需要设定其UI界面的打开以及视频的播放。
让我们打开关卡蓝图如图:
在关卡蓝图中作如下的蓝图逻辑:
这里我们添加的manan Component需要对其进行设置为循环,以保证我们界面打开的时候正常循环播放。
需要注意的是我们使用usm文件转化而来的texture的“Render to texture”需要被勾选,否则可能会无法正常播放视频。如图:
上述蓝图表示的是,当我们按下回车键时将会创建一个UI,并在其上播放mana视频,当松开回车键后,UI界面将会不再显示并且视频将会被清除。
如此一来我们完成了一个以视频为底图的动态界面的制作。
(4)、Alpha动态应用
Alpha动态应用是利用Sofdec2可以压缩播放alpha视频而衍生的在游戏内通过控制alpha的大小来动态的更改视频的透明度,以此来和游戏玩法相结合,动态的变化视频表现。
笔者在Demo场景中设计了一个隐藏的球,玩家需要寻找到该球的位置并进行触发,才能将其获得。为了给玩家一定提示,笔者设置了一个视频展示放在3D场景中,而该视频的显示会有着随着时间变化透明度的效果,玩家必须要等到规定的时间方能看到清晰的视频,以此来获得提示。
为了能让视频的透明度得到动态的控制,我们需要做一系列的蓝图准备。
首先需要打开我们以usm构建成的Texture,打开会我们会看到其贴图的基本构成逻辑,在贴图中我们做如下的逻辑,添加Multiply,以及Vectorparameter,让基础的Alpha和我们新增的参数相乘,以此动态的改变我们的Vectorparameter来改变最终的Alpha值,控制透明度变化。
完成上述蓝图构建后,基本材质已经准备完毕,下面需要对视频蓝图做动态材质调取。
首先需要在蓝图的脚本上创建动态材质的调取,主要时脚本上创建,而非事件上创建。此外需要将动态材质输出函数用于事件调取,如图:
完成脚本设置后,回到蓝图的事件图标,开始制作随时间变化Alpha的动态透明度效果,蓝图如下:
如图所示,Dynamic Meterial为动态材质的随意命名,与前一个图中的设置对应,即前一个脚本中设置动态材质参数,后一个图中在事件中调取并加以改变。
对于时间轴的应用是笔者将动态改变Alpha用于随时间变化上,因此做了如下的变换函数曲线,并加以循环:
如此一来视频的Alpha值就会随着时间变化,不断的更改视频的透明度,达到动态变化的目的。
除了时间变化外,看官可以根据自己项目所需要自定义任何变化方式以及变化曲线来变更Alpha的值,以此和玩法相结合,使得流程更加简单,效果更加出众。
三、结语
Sofdec2不仅仅是一个压缩视频软件,它所提供的多语种字幕,语音,5.1声场支持,Alpha视频支持以及Cue Point能够为我们的游戏开发提高效率并达到更好的效果。
在视频的应用上,我们也不仅仅可以将其运用于过场动画,包含特效,界面底图,各种高清效果展示等都完全可以利用Sofdec2应用在各个平台上。
视频效果的额展示必定会有更优异的效果,以此来提升整个游戏的表现。
在与Unreal4的集成和应用中,也有着完备的蓝图可以高效的完成效果更优的游戏产品。