【效果演示】
渲染版(整整从下午四点半渲到早上五点半,500帧共渲染了13个小时,渲染了500张图片,然后再导回Blender剪辑,添加配乐文字啥的,整合成视频导出非常迅速,总共一分钟不到)
录制版(录制只需40多秒)
----------------------------------------------------------------------------
【前言】
紧接着Blender With Python 上篇
X Tesla:【Blender】【0_基础篇】如何用Python脚本编写自己的插件zhuanlan.zhihu.com
前几天弄那个Niagara文字骨骼模型的时候,真是能急死人,方案简洁下来就是:
- 能够按照文字外轮廓(或者自己手写的字迹)产生骨骼
- 骨骼的名字能够从头到尾依次排好序(总分结构Hierarchy)
思路就这么简单,但是操作起来可真的是有些小无聊(纯属苦力活,跟蒙皮一样),如果能够写一个插件该多好啊,可是奈何插件这块还没咋学精。
对于独立游戏开发者,或者是大型游戏的开发工作室,插件肯定是必不可少的,它能够大大简化工作流程,减少返工次数,提升工作效率,缩短开发周期。
所以,呵,Blender,看我不把你欺负得哭不出来,你给老子等着!我这辈子就瞄准你了,剩下的就只有
READY AIM FIRE!!!
【导图】
一、用Python脚本代替ArrayModifier创建成百个Cube
【1.1】预备知识点:模型Size
首先,我们知道在初建模型的时候,这个Cube的Size即是它的长宽高,都分别为2m(下方代码处得2就是这个2)
【1.2】填写代码
相关常用的语法可以看上一篇Python With Blender基础篇。
import bpy
number=10
counter_x=0
for x in range(0,number):
counter_x+=2
counter_y=0
for y in range(0,number):
counter_y+=2
counter_z=0
for z in range(0,number):
counter_z+=2
bpy.ops.mesh.primitive_cube_add(size=2, location=(counter_x-1, counter_y-1, counter_z-1))
- for n in range(0,10),不包括10,索引共10个(也可以理解为右边开区间的数即为索引个数,跟UE4的不一样,UE要这样For Loop的话,就是11个,包含0)
- number为xyz 各轴复制方块的数量
- counter_x/y/z为 各小方块的位置
- cube_add语句(不要打字)——新创建一个Cube,然后复制控制台的日志信息,我们不需要进入editmode,所以果断地删掉它(即 enter_editmode=False)。
为什么Add Cube的位置变量要减1?(可以忽略,因为对接下来跟地板碰撞没有影响)
- 下面的counter_x/y/z 都 -1的目的是让Cube的枢轴点偏移,此时枢轴点处在正方体体心的位置,for loop之后第一个点就是(2,2,2),都减1的话,就是让正方体最左下角的点处在世界原点位置。
Shift+A Cube
-1偏移枢轴点
代码写好后,可以直接封装成一个插件,以后再需要这个功能的时候,直接用鼠标点一下button,跟创建表格一样键入Row Column,就是一秒钟的事儿,而不至于说再要手动添加Array Modifier了。
【1.3】对比其他成群Cube的创建方法
【1.3.1】传统的Array Modifier创建成群Cube方法
您瞅瞅,要用Array Modifier是如下图,而且是必须应用Modifier之后,才可以进入Edit Mode编辑单个的面。
注意哦:这样ArrayModifier生成的是一个整体(类似前些天我们做的魔方一样,所有的面都是连在一起的,不是像上方我们用脚本生成的10*10个Cube,它则是 1个大Cube。
如果需要转化成单个区块的话,就跟我们的这个方块动画差不多了呢。
- Tab 进入Edit Mode 键入 P Seperate By Loose Parts(这样就会分割成10*10的小方块了)
- 然后Tab 回到 Object Mode ,上方 Object Set Origin->Origin To Geometry即可,所有小方块的枢轴点就都在它自身的体心了呢
X Tesla:【Blender】方块波浪动画音乐效果zhuanlan.zhihu.com
【1.3.2】UE4创建成群Cube方法
可以很准确地告诉大家,想直接在UE4当中用Construction Script建模,绝对能让你的项目卡爆!!!(不推荐使用,还是在外面DCC软件当中做好之后再导入进来吧,别图省事,图个新鲜还行,省事就算了,软件各有所长。如果你图新鲜的话,记得更改的时候把Construction Script的线给断掉,然后更改完再重新连接上)
为了制造区别,我把宽度改成了110。要不然就是一坨Cube。
然后将创建好的Cube Merge Actors,混合起来以建立一个Static Mesh
然后右键导出即可。
或者是右键直接Convert To Static Mesh,两种方法都可以(主要是处理之后看你枢轴点是不是在模型中心)
二、给这几百个Cube方块添加物理属性
【2.1】增加生成Cube方块的高度
可以增高高度如下:(z轴number增加一些)
import
【2.2】设置单个方块RigidBody刚体属性
- Info栏 A ,X删除全部日志(后面Copy Paste)
- 创建一个新的小方块
- 进入物理模拟,选择刚体Rigid Body。
- Type为主动碰撞
- 设置重力为20kg
- 设置碰撞检测形状为Box(对应Cube)
- Friction阻力,设置为最大1
- 不需要Collision Margin,碰撞盒体检测就够了,设置为0
- 线性阻尼为0.35(阻碍物体的线性速度变化)
- 角度阻尼为0.6(阻碍物体的角速度变化)
相关物理设置
【2.3】复制刚才设置刚体属性的行为记录(输出日志处)
找到我们的输出日志(记录了我们刚才的相关操作),然后鼠标框选复制粘贴到代码处
【2.4】缩进并设置位置变量
复制进来是这样子,我们在上篇中说过,Python语言的语句执行命令是根据缩进来判断执行的,所以这些个语句必须放在for loop当中。
在Text Editor当中鼠标框选下面的部分
- Tab Indent 向右缩进 三次(Shift+Tab 向左缩进)
然后将location vector的三个float设置为跟之前的一样,并保存(另:【2.3】中不需要框选复制 add Cube的语句,省的这里又再搞一下)
三、给地板添加盒体碰撞
创建一个Plane以检测盒体的碰撞
- 创建Plane,放大Scale
- 创建刚体
- 碰撞检测为被动
- 碰撞盒体根据Mesh形状来创建
- 边界为0
- 可以将Plane向下挪动一点(这里是-35)
四、跑脚本并设置刚体动画烘焙相关参数
跑完脚本后,记得M将脚本生成的Cube放在同一个类别下。
- 设置Steps Per Second(值越大,效果越好,设置为500即可)
- 设置烘焙范围(start=1,End=500)
- 然后将Timeline的End Frame 也设置为500(跟烘焙范围对应起来)
五、给所有的Cube设置一个随机颜色值
- 选中单个Cube新建材质
- 进入Shading 工作空间创建Color Ramp 随机颜色值(跟Blender那个方块音乐动画差不多,左右红,HSV/HLSL,Far模式即可)
相关解释如下图(已经在方块音乐动画中写过一遍了)
这里的Python方块案例相关设置如下图:
- Add 偏移位置产生颜色渐变
- Multipy设置各颜色区间间距(设置成0.02效果不错)
3.选中全部方块,Ctrl+L link materials 链接材质
4.然后进入Material Preview Mode点击Play播放预览
六、渲染输出相关设置
- 添加太阳光,设置光照强度为7,旋转角度以让Cube产生阴影(看起来更加真实一点)
- 切换渲染引擎为Cycles
- 设置Render Sampling渲染质量(针对每个像素)为 300
- 如用GPU渲染的话,可以将Tiles X/Y提升一点
5.Z 切换为Rendered渲染模式
6.进入世界设置(设置背景颜色(Surface Color)为白色,默认为Blender页面的灰色)
7.添加相机(0切换相机镜头,Shift+~ FPS 自由控制)
8.设置输出路径为一个单独的文件夹,类型为PNG或者是MP4格式,反正可以将图片序列和视频进行相关转化的。(PS、Python脚本、甚至直接再导入到Blender剪辑加配乐都可以,我这块用的是Blender,操作非常简单,导出速度也非常快)
9.点击渲染输出Render Animation
第一次尝试在Blender当中渲染输出一个正经视频,感觉计算机图形学好神奇啊,以后还是往原理的方向走。
【Blender】Python脚本刚体物理https://www.zhihu.com/video/1248558507206836224
七、将物理模拟动画导出并导入进UE4当中去
Alembic File Importerdocs.unrealengine.com
ABC格式文件:Alembic并不储存复杂的依赖图,而是把依赖图的计算结果“烘培”成最终的模型,通常是顶点位置信息。也就是我们一般在DCC软件当中用物理模拟出来的顶点几何动画。
关于将ABC格式动画导入到UE4当中,我试过了n遍,也查了大家的解决办法,无外乎其下:
- 导出时勾选Selected Objects
- 导出Alembic
- 拖拽/点击Import
- 清空Saved文件缓存
但是结果还是不成功,大家有导入成功的可以在文末留言。