我写了一个C4D自动搭建室内场景脚本

北京/设计爱好者/3年前/1350浏览
我写了一个C4D自动搭建室内场景脚本

写它的背景是有很多个办公场所不定期的需要出效果图,由于标准是统一的可以套用一个脚本来实现重复性的工作。

这个脚本可以实现的效果:

(BGM是自己编曲,属于标准的套路行进,呵呵)

所以我想通过一个方法来实现:导入CAD户型图,然后使用脚本自动搭建墙体、门窗、家具、灯光和摄像机并添加批量渲染清单,点击渲染即可。

它的逻辑是可以通用到很多方面,比如楼盘,室内场景,电商场景,游戏地编等等。

当然,目前它还是一个“个人使用”的脚本,还有一些交互设计上不那么完备的功能。

但是我在这个项目中有一些可以拿出来分享的思考过程总结。涉及到四个类的实现,打算分几期来分享。

所面对的核心问题是:

CAD的信息读取和使用。做了几次测试,CAD中的图层和图块机制可以被C4D读取到,以此作为后续操作的基础。

我通过四个类来解决四个功能:

(1)获得导入的CAD信息并能够可视化的debug,InfoMage类;

(2)根据得到的数据生成墙体框架和灵活多变模型的,buildings类;

(3)为场景添加环境光、摄像机和室内照明的,Lights类;

(4)能够自动根据数据布置家具和操作数据的,autoplanned类;

主体的实现逻辑,可以看下主函数:

#主程序
def main():
#选择dwg对象,执行初始化运行
if doc.SearchObject('infomage') is None and 'dwg' in op[c4d.ID_BASELIST_NAME]:
#实例autoplan和infoMage
a=autoplan(doc,op)        
a.cleanTag()
b=InfoMage('infomage',doc)
data=b.createMeshData()
infomage=b.insertInfoMage()
linklst=b.CreateGUI(a.getlayers(),infomage,mode=None)
c4d.EventAdd()
#根据meshdata匹配家具摆放
meshdata=doc.SearchObject('meshData')
a.setAllConfig(meshdata)
#实例化buildings,构建墙体
bu=buildings(doc,a.getlayers())
harddata=bu.createHardData()
#生成门洞和窗洞
subtract_all=bu.subtractAll()

floors=bu.createBoard(mode='floor')
ceilings=bu.createBoard(mode='ceiling')
harddata=doc.SearchObject('hardData')
bu.setDoors(harddata)
bu.setOtherWalls(harddata)
bu.setWindows(harddata)
bu.setDeformFurn(harddata)
#构建环境和太阳光,相机
lights=Lights(doc,a.getlayers())
lights.setEnv()
lights.setSun()
cams=lights.setMulCam()
lights.setLights()

c4d.CallCommand(202539)#增量保存文件
setRander(doc,cams)#设置批量渲染

当然,脚本并不是凭空产生家具模型,也不是所有的CAD图纸都能够被正确的地识别。

这需要做一些准备工作。将需要使用的模型导入或者创建好后赋予材质备用。

另外,CAD文件内需要准备好相应的家具图块用于读取位置和旋转信息。

场景中也会有一些无特定尺寸的模型,比如门、窗的尺寸,可能宽度和高度都有所不同,且同一个场景中出现多个不同尺寸的情况。

在下一篇中将会做详细地介绍这部分内容。

更多内容请关注下方的公众号,获得更多冷门信息和个人开发的脚本工具。

9
Report
|
5
Share
相关推荐
评论
in to comment
Add emoji
喜欢TA的作品吗?喜欢就快来夸夸TA吧!
推荐素材
You may like
花茶包装全案设计
Homepage recommendation
相关收藏夹
学习用
学习用
学习用
学习用
作品收藏夹
学习
学习
学习
学习
作品收藏夹
学习
学习
学习
学习
作品收藏夹
《阿凡达3》来了
《阿凡达3》来了
《阿凡达3》来了
《阿凡达3》来了
精选收藏夹
作品收藏夹
茶包装
茶包装
茶包装
茶包装
精选收藏夹
作品收藏夹
白酒包装 酒产品
白酒包装 酒产品
白酒包装 酒产品
白酒包装 酒产品
精选收藏夹
作品收藏夹
大家都在看
Log in