【Unity开发】Unity引擎生成2K视频的方法
2017-04-02 12:43
351 查看
最近在制作一个2560*1440 30fps的游戏序幕,以前制作我都是直接导出可执行文件后再直接录屏,不过这次分辨率要求较高帧率要求较稳,找了好多插件也没有找到直接生产视频的插件,于是稍微研究了一下给大家分享一下!
1、制作好场景的动画,建议直接代码完成游戏元件的运动
2、将Unity引擎升级至Unity5.4及以上的版本
3、在Unity游戏试图新建一个模拟分辨率,并选用!从Unity5.4开始这里的模拟分辨率已经可以十分完善的直接模拟该分辨率环境进行渲染了!
4、根据渲染的场景的复杂度降低时间流逝,由于我本次需要渲染的场景项目比较复杂,高达2000*2000且树木较多,水面覆盖较广,因此SetPassCall已上千,因此我这里将时间流逝将为了0.08!如果您要渲染的场景复杂度较高,不降低时间流逝后面渲染的可能会漏帧,至于到底降低至多少请根据渲染设备的实际配置及项目的复杂度、渲染的帧率自行选择!
5、新建一个C#脚本文件,粘贴我的以下代码:
6、将改脚本挂载至场景中的任意元件上,设置好输出路径、渲染的时长等,例如I:\tmpdir\,由于我的游戏序幕尚未完成,目前暂时设置渲染时长为5秒进行
7、进入Unity播放模式,等待控制台输出渲染完毕后退出Unity
8、到https://ffmpeg.zeranoe.com/builds/下载ffmpeg工具
9、下载任意一款图片批量转换工具将Unity渲染的图片转为jpg,否则ffmpeg无法使用
10、打开命令与提示符,进入ffmpeg的bin目录
11、输入ffmpeg -threads 2 -y -r 30 -i I:/tmpdir/%05d.jpg -s 2560x1440 -vcodec copy I:/OutPut.avi
其中 -r 30中的30替换为第六步设置的帧率
其中 -i I:/tmpdir/%05d.jpg中的 I:/tmpdir/替换为第六步设置的路径
其中-s 2560x1440中的2560x1440替换为第三步模拟的分辨率
其中I:/OutPut.avi 替换为你的输出路径
12、视频生成完成,应该可以播放了
13、重新打开您的Unity项目,将时间流逝改回1并使场景中尽量只保留音频组件,生成可执行文件,使用录屏软件内录音频
14、使用视频合成工具将音频赋给ffmpeg生成的视频
15、就这样,一个较高分辨率的视频就渲染完成了
1、制作好场景的动画,建议直接代码完成游戏元件的运动
transform.position = Vector3.MoveTowards(transform.position, target.position,MoveSpeed * Time.deltaTime); transform.rotation = Quaternion.RotateTowards(transform.rotation, target.rotation, RotateSpeed * Time.deltaTime);
2、将Unity引擎升级至Unity5.4及以上的版本
3、在Unity游戏试图新建一个模拟分辨率,并选用!从Unity5.4开始这里的模拟分辨率已经可以十分完善的直接模拟该分辨率环境进行渲染了!
4、根据渲染的场景的复杂度降低时间流逝,由于我本次需要渲染的场景项目比较复杂,高达2000*2000且树木较多,水面覆盖较广,因此SetPassCall已上千,因此我这里将时间流逝将为了0.08!如果您要渲染的场景复杂度较高,不降低时间流逝后面渲染的可能会漏帧,至于到底降低至多少请根据渲染设备的实际配置及项目的复杂度、渲染的帧率自行选择!
5、新建一个C#脚本文件,粘贴我的以下代码:
using UnityEngine; using System.Collections; public class 逐帧渲染 : MonoBehaviour { public int 渲染时长 = 30; public float 时间流逝 = 0.08f; public string 输出路径; public int 帧率 = 30; private int 帧=1; private bool 停止 = false; private string 文件名称; void Start () { Invoke ("停止渲染", 渲染时长); Time.timeScale = 0; if (帧 < 10) {文件名称 = "0000" + 帧.ToString () + ".jpg";} else if (帧 < 100) {文件名称 = "000" + 帧.ToString () + ".jpg";} else if (帧 < 1000) {文件名称 = "00" + 帧.ToString () + ".jpg";} else if (帧 < 10000) {文件名称 = "0" + 帧.ToString () + ".jpg";} else {文件名称 = 帧.ToString () + ".jpg";} Application.CaptureScreenshot (输出路径 + 文件名称); 帧++; Time.timeScale = 时间流逝; InvokeRepeating ("渲染截图", 1f / (float)帧率, 1f / (float)帧率); } void Awake() { Application.targetFrameRate=帧率; } void 渲染截图 () { if (!停止) { Time.timeScale = 0; if (帧 < 10) {文件名称 = "0000" + 帧.ToString () + ".png";} else if (帧 < 100) {文件名称 = "000" + 帧.ToString () + ".png";} else if (帧 < 1000) {文件名称 = "00" + 帧.ToString () + ".png";} else if (帧 < 10000) {文件名称 = "0" + 帧.ToString () + ".png";} else {文件名称 = 帧.ToString () + ".png";} Application.CaptureScreenshot (输出路径 + 文件名称); 帧++; Time.timeScale = 时间流逝; } } void 停止渲染 () { 停止 = true; Time.timeScale = 0; CancelInvoke ("渲染截图"); Debug.Log ("渲染完毕"); } }
6、将改脚本挂载至场景中的任意元件上,设置好输出路径、渲染的时长等,例如I:\tmpdir\,由于我的游戏序幕尚未完成,目前暂时设置渲染时长为5秒进行
7、进入Unity播放模式,等待控制台输出渲染完毕后退出Unity
8、到https://ffmpeg.zeranoe.com/builds/下载ffmpeg工具
9、下载任意一款图片批量转换工具将Unity渲染的图片转为jpg,否则ffmpeg无法使用
10、打开命令与提示符,进入ffmpeg的bin目录
11、输入ffmpeg -threads 2 -y -r 30 -i I:/tmpdir/%05d.jpg -s 2560x1440 -vcodec copy I:/OutPut.avi
其中 -r 30中的30替换为第六步设置的帧率
其中 -i I:/tmpdir/%05d.jpg中的 I:/tmpdir/替换为第六步设置的路径
其中-s 2560x1440中的2560x1440替换为第三步模拟的分辨率
其中I:/OutPut.avi 替换为你的输出路径
12、视频生成完成,应该可以播放了
13、重新打开您的Unity项目,将时间流逝改回1并使场景中尽量只保留音频组件,生成可执行文件,使用录屏软件内录音频
14、使用视频合成工具将音频赋给ffmpeg生成的视频
15、就这样,一个较高分辨率的视频就渲染完成了
相关文章推荐
- 我的模板分析引擎类PHP的.net开发方法--功能介绍篇
- 我的模板分析引擎类PHP的.net开发方法--标签设计篇
- Android开发视频教程之十六(SQLite的使用方法)
- unityios开发--加载视频以及加载完成之后自动跳转
- iOS开发视频教程—6.3详解dealloc方法
- 微软软件项目开发方法--如何编写优秀的程序( 主讲:林斌 )视频笔记
- unityios开发--加载视频以及加载完成之后自动跳转 .
- Extjs4.0 开发笔记-desktop开始菜单动态生成方法
- Unity3D视频开发教程之Unity入门
- Unity、Cocos2d-2x、UDK 等手机游戏开发引擎分别有什么特性,适合开放哪些类型的游戏?
- [C#]一步一步开发自己的自动代码生成工具之三:代码生成引擎
- PHP开发程序:生成随机字符串的方法
- Android中SQLite增删改查的方法(Android开发视频讲座)
- 通过Unity引擎可实现小规模的人员开发游戏
- mars老师[Android开发视频教学].01_16_SQLite使用方法 视频源码
- 我的模板分析引擎类PHP的.net开发方法--功能实现篇
- 【转】 asp.net从视频文件中抓取一桢并生成图像文件的方法 实现多语言本地化应用程序 自动返回上次请求页面
- 使用RTW代码生成工具是将MATLAB用于C开发流程的最好的方法(转自恒润科技)
- iOS开发中生成随机数方法的选择
- anrdroid+unity游戏开发之c#一些常用“方法”