Created
February 3, 2018 15:03
-
-
Save bigxixi/7c39e495ef17fe07ddbcaa12c8704cc0 to your computer and use it in GitHub Desktop.
C4D脚本 根据图片大小建立平面并赋予贴图
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # 根据图片大小建立平面并赋予贴图 | |
| # [email protected] | |
| import os | |
| import c4d | |
| from c4d import documents, plugins, bitmaps | |
| # 区分 win 和 mac 文件地址 | |
| osSlash = '/' | |
| if os.name == 'nt': | |
| osSlash = '\\' | |
| # 选择一个文件夹 | |
| imgDir = c4d.storage.LoadDialog(c4d.FILESELECTTYPE_ANYTHING,"选择资源文件夹",c4d.FILESELECT_DIRECTORY, "", "") + osSlash | |
| # 获取所选文件夹下的图片文件 | |
| imgs = os.listdir(imgDir) | |
| for fichier in imgs[:]: # filelist[:] 复制一份文件地址,防止误删原文件 | |
| if not(fichier.endswith((".png",".jpg",".gif",".PNG",".JPG",".GIF",".JPEG",".jpeg"))): | |
| imgs.remove(fichier) | |
| def main(): | |
| # 定义一个函数,根据传入的文件名生成以该文件长、宽生成平面并将图片赋予贴图 | |
| def texPoly(name,count): | |
| fullPath = imgDir + name # 获取图片完整路径 | |
| pName = fullPath.split(osSlash)[-1].split('.')[0] # 获取图片文件名 | |
| bm = bitmaps.BaseBitmap() # 新建贴图 | |
| bm.InitWith(fullPath) | |
| xy = bm.GetSize() # 获取长、宽 | |
| c4d.CallCommand(5168, 5168) # 新建一个平面 | |
| obj = doc.GetActiveObject() # 获取新建的平面 | |
| obj.SetName(pName) | |
| # 设置平面物体 | |
| obj[c4d.PRIM_AXIS] = 5 # 竖起来 | |
| obj[c4d.PRIM_PLANE_SUBW] = 1 # 细分设为1(无细分) | |
| obj[c4d.PRIM_PLANE_SUBH] = 1 | |
| obj[c4d.PRIM_PLANE_WIDTH] = xy[0] # 设置长宽 | |
| obj[c4d.PRIM_PLANE_HEIGHT] = xy[1] | |
| # 设置位置 | |
| obj[c4d.ID_BASEOBJECT_REL_POSITION,c4d.VECTOR_Z] = count*offset # z向间隔隔开 | |
| c4d.CallCommand(12236) # 转为可编辑面片 | |
| # 创建一个材质 | |
| mat = c4d.BaseMaterial(c4d.Mmaterial) | |
| mat.SetName(pName) # 与图片同名 | |
| doc.InsertMaterial(mat) # 将新建的材质放到材质列表 | |
| # 新建2个着色器,分别赋予到「色彩」和「Alpha」通道。如果共用一个着色器渲染会出错。 | |
| sha = c4d.BaseList2D(c4d.Xbitmap) | |
| shaA = c4d.BaseList2D(c4d.Xbitmap) | |
| sha[c4d.BITMAPSHADER_FILENAME] = fullPath | |
| shaA[c4d.BITMAPSHADER_FILENAME] = fullPath | |
| mat.InsertShader(sha) | |
| mat.InsertShader(shaA) | |
| mat[c4d.MATERIAL_COLOR_SHADER] = sha | |
| mat[c4d.MATERIAL_ALPHA_SHADER] = shaA | |
| mat[c4d.MATERIAL_USE_ALPHA] = True # 启用alpha通道 | |
| # 更新材质 | |
| mat.Message( c4d.MSG_UPDATE ) | |
| mat.Update( True, True ) | |
| # 创建一个材质标签 | |
| tag = c4d.BaseTag( c4d.Ttexture ) | |
| tag[c4d.TEXTURETAG_MATERIAL] = mat | |
| tag[c4d.TEXTURETAG_PROJECTION] = 6 | |
| # 将材质标签贴到刚才创建的平面物体 | |
| obj.InsertTag(tag) | |
| offset = 100 # 创建的每张图片距离 | |
| imgCount = 0 # 图片数量 | |
| # 对所选文件夹里的图片文件都做相同操作(不包括子文件夹) | |
| for imgName in imgs: | |
| imgCount += 1 | |
| texPoly(imgName,imgCount) | |
| if __name__=='__main__': | |
| main() | |
| c4d.EventAdd() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment