Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Select an option

  • Save bigxixi/7c39e495ef17fe07ddbcaa12c8704cc0 to your computer and use it in GitHub Desktop.

Select an option

Save bigxixi/7c39e495ef17fe07ddbcaa12c8704cc0 to your computer and use it in GitHub Desktop.
C4D脚本 根据图片大小建立平面并赋予贴图
# 根据图片大小建立平面并赋予贴图
# [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