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

北京/设计爱好者/2年前/1348浏览
我写了一个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
相关收藏夹
学习用
学习用
学习用
学习用
作品收藏夹
学习
学习
学习
学习
作品收藏夹
学习
学习
学习
学习
作品收藏夹
ip形象设计+表情包
ip形象设计+表情包
ip形象设计+表情包
ip形象设计+表情包
精选收藏夹
作品收藏夹
企业展厅/文化墙 参考
企业展厅/文化墙 参考
企业展厅/文化墙 参考
企业展厅/文化墙 参考
精选收藏夹
作品收藏夹
小家电
小家电
小家电
小家电
精选收藏夹
作品收藏夹
大家都在看
Log in