icrdr吧 关注:11,730贴子:289,726
  • 9回复贴,共1

【DW】原创-Fastscene快速创建场景脚本

取消只看楼主收藏回复

这几天国庆放假,写了几个小脚本,现在还是半成品
这几个脚本主要针对的是搞渲染搞得多的那些人。。对他们来说这几个脚本可能会有用
脚本的作用就是快速创建那些平时常用的场景


第一个是一键创建三点光源
第二个是调整全局的照明亮度(全局照明增强)
第三个是创建白色背景
第四个是创建HDR场景(上次那个脚本的改善版)
目前还是半成品。。。。一些地方还没搞好

2L继续


1楼2014-10-05 21:41回复
    第一个是创建三点光源的脚本
    1.先选中被照亮的物体,必须先选中
    2.应用脚本


    完成

    以后就不用手动创建三点光源了
    源码如下:
    """
    脚本作者:Dreamlandworks的仔仔
    Scripted by MRzaizai from Dreamlandworks
    """
    import c4d
    from c4d import gui
    user = doc.GetActiveObject()
    """print user"""
    def main():
    if user == None:
    gui.MessageDialog("请先选中被照亮的物体,目前不支持多选")
    else:
    gui.MessageDialog(*三点光源创建完毕_(:з」∠)_喵~~*)
    sub01()
    #错误规避
    c4d.EventAdd()
    def sub01():
    doc.StartUndo()
    mainlight = c4d.BaseObject(c4d.Olight)
    doc.InsertObject(mainlight)
    mainlight[c4d.ID_BASELIST_NAME] = "主光源"
    mainlight[c4d.LIGHT_TYPE] = 8
    mainlight[c4d.LIGHT_SHADOWTYPE] = 3
    #创建主光源
    filllight = c4d.BaseObject(c4d.Olight)
    doc.InsertObject(filllight)
    filllight[c4d.ID_BASELIST_NAME] = "填补光源"
    filllight[c4d.LIGHT_TYPE] = 8
    filllight[c4d.LIGHT_SHADOWTYPE] = 3
    filllight[c4d.LIGHT_BRIGHTNESS] = 0.5
    #创建填补光源
    backlight = c4d.BaseObject(c4d.Olight)
    doc.InsertObject(backlight)
    backlight[c4d.ID_BASELIST_NAME] = "背面光源"
    backlight[c4d.LIGHT_TYPE] = 8
    backlight[c4d.LIGHT_SHADOWTYPE] = 3
    #创建背面光源
    target1 = c4d.BaseTag(5676)
    target2 = c4d.BaseTag(5676)
    target3 = c4d.BaseTag(5676)
    mainlight.InsertTag(target1)
    filllight.InsertTag(target2)
    backlight.InsertTag(target3)
    target1[c4d.TARGETEXPRESSIONTAG_LINK] = user
    target2[c4d.TARGETEXPRESSIONTAG_LINK] = user
    target3[c4d.TARGETEXPRESSIONTAG_LINK] = user
    #使灯光以用户的物体为目标
    mainlight[c4d.ID_BASEOBJECT_REL_POSITION,c4d.VECTOR_X] = -550 + user[c4d.ID_BASEOBJECT_REL_POSITION,c4d.VECTOR_X]
    mainlight[c4d.ID_BASEOBJECT_REL_POSITION,c4d.VECTOR_Y] = 200 + user[c4d.ID_BASEOBJECT_REL_POSITION,c4d.VECTOR_Y]
    mainlight[c4d.ID_BASEOBJECT_REL_POSITION,c4d.VECTOR_Z] = -600 + user[c4d.ID_BASEOBJECT_REL_POSITION,c4d.VECTOR_Z]
    filllight[c4d.ID_BASEOBJECT_REL_POSITION,c4d.VECTOR_X] = 500 + user[c4d.ID_BASEOBJECT_REL_POSITION,c4d.VECTOR_X]
    filllight[c4d.ID_BASEOBJECT_REL_POSITION,c4d.VECTOR_Y] = 100 + user[c4d.ID_BASEOBJECT_REL_POSITION,c4d.VECTOR_Y]
    filllight[c4d.ID_BASEOBJECT_REL_POSITION,c4d.VECTOR_Z] = -350 + user[c4d.ID_BASEOBJECT_REL_POSITION,c4d.VECTOR_Z]
    backlight[c4d.ID_BASEOBJECT_REL_POSITION,c4d.VECTOR_X] = -300 + user[c4d.ID_BASEOBJECT_REL_POSITION,c4d.VECTOR_X]
    backlight[c4d.ID_BASEOBJECT_REL_POSITION,c4d.VECTOR_Y] = 450 + user[c4d.ID_BASEOBJECT_REL_POSITION,c4d.VECTOR_Y]
    backlight[c4d.ID_BASEOBJECT_REL_POSITION,c4d.VECTOR_Z] = 500 + user[c4d.ID_BASEOBJECT_REL_POSITION,c4d.VECTOR_Z]
    #设置灯光位置
    """doc.SetActiveObject(mainlight)
    doc.SetActiveObject(filllight,int = SELECTION_NEW)
    doc.SetActiveObject(backlight,int = SELECTION_NEW)
    c4d.CallCommand(100004772)
    sence = doc.GetFirstObject()
    sence.SetName(*场景*)"""
    doc.AddUndo(c4d.UNDOTYPE_NEW,mainlight)
    doc.AddUndo(c4d.UNDOTYPE_NEW,filllight)
    doc.AddUndo(c4d.UNDOTYPE_NEW,backlight)
    doc.EndUndo()
    if __name__==*__main__*:
    main()


    4楼2014-10-05 21:48
    收起回复
      第二个创建白色背景脚本。。。
      直接应用即可


      源码如下:
      """
      脚本作者:Dreamlandworks的仔仔
      Scripted by MRzaizai from Dreamlandworks
      """
      import c4d
      from c4d import gui
      background = c4d.BaseObject(c4d.Obackground)
      mat = c4d.BaseMaterial(5703)
      textag = c4d.BaseTag(5616)
      textag2 = c4d.BaseTag(5616)
      comptag = c4d.BaseTag(5637)
      shd = c4d.BaseList2D(c4d.Xgradient)
      disc = c4d.BaseObject(c4d.Odisc)
      def main():
      gui.MessageDialog(*背景创建完毕*)
      doc.StartUndo()
      doc.InsertObject(background)
      doc.InsertMaterial(mat)
      background.InsertTag(textag)
      textag[c4d.TEXTURETAG_MATERIAL] = mat
      mat[c4d.MATERIAL_USE_REFLECTION] = False
      mat[c4d.MATERIAL_USE_SPECULAR] = False
      #mat[c4d.MATERIAL_COLOR_SHADER] = shd
      #mat.InsertShader(shd)
      #mat.Message(c4d.MSG_UPDATE)
      #mat.Update(True, True)
      #shd[c4d.SLA_GRADIENT_TYPE] = 2004
      #shd.InvertKnots()
      doc.InsertObject(disc)
      disc[c4d.PRIM_DISC_ORAD] = 2000
      disc.InsertTag(textag2)
      textag2[c4d.TEXTURETAG_MATERIAL] = mat
      disc.InsertTag(comptag)
      comptag[c4d.COMPOSITINGTAG_BACKGROUND] = True
      doc.AddUndo(c4d.UNDOTYPE_NEW,mat)
      doc.AddUndo(c4d.UNDOTYPE_NEW,disc)
      doc.AddUndo(c4d.UNDOTYPE_NEW,background)
      doc.EndUndo()
      c4d.EventAdd()
      if __name__==*__main__*:
      main()


      5楼2014-10-05 21:52
      回复
        然后是调整全局亮度那个
        也是直接点就行

        调整这个值就可以让场景更亮或更暗
        源码:
        """
        脚本作者:Dreamlandworks的仔仔
        Scripted by MRzaizai from Dreamlandworks
        """
        import c4d
        from c4d import gui
        #Welcome to the world of Python
        def main():
        gui.MessageDialog(*创建完毕,请手动调整参数*)
        doc.StartUndo()
        Glight = c4d.BaseObject(c4d.Olight)
        doc.InsertObject(Glight)
        Glight.SetName(*全局照明增强*)
        Glight[c4d.LIGHT_BRIGHTNESS] = 0.2
        Glight[c4d.LIGHT_DETAILS_AMBIENT] = True
        Glight[c4d.LIGHT_DETAILS_SPECULAR] = False
        doc.SetActiveObject(Glight)
        c4d.CallCommand(100004772)
        sence = doc.GetFirstObject()
        sence.SetName(*场景*)
        doc.AddUndo(c4d.UNDOTYPE_NEW,Glight)
        doc.AddUndo(c4d.UNDOTYPE_NEW,senc)
        c4d.EventAdd()
        doc.EndUndo()
        if __name__==*__main__*:
        main()


        6楼2014-10-05 21:54
        回复
          最后一个HDR脚本
          跟上次不一样,换成了天空对象,也支持撤消了
          这个就不用说了
          源码:
          """
          脚本作者:Dreamlandworks的仔仔
          Scripted by MRzaizai from Dreamlandworks
          """
          import c4d
          from c4d import gui
          mat = c4d.BaseMaterial(5703)
          HDR = c4d.BaseObject(c4d.Osky)
          comptag = c4d.BaseTag(5637)
          textag = c4d.BaseTag(5616)
          def main():
          #gui.MessageDialog(*创建完毕_(:з」∠)_*)
          question = gui.QuestionDialog(*创建完毕,现在添加HDR贴图?*)
          if question == True:
          c4d.CallCommand(1017163)
          sub1()
          def sub1():
          doc.StartUndo()
          doc.InsertObject(HDR)
          HDR.SetName(*HDR*)
          HDR.InsertTag(comptag)
          HDR.InsertTag(textag)
          comptag[c4d.COMPOSITINGTAG_SEENBYCAMERA] = 0
          doc.InsertMaterial(mat)
          mat.SetName(*HDR*)
          mat[c4d.MATERIAL_USE_COLOR] = 0
          mat[c4d.MATERIAL_USE_SPECULAR] = 0
          mat[c4d.MATERIAL_USE_LUMINANCE] = 1
          mat[c4d.MATERIAL_USE_REFLECTION] = 0
          textag[c4d.TEXTURETAG_MATERIAL] = mat
          HDR[c4d.ID_BASEOBJECT_VISIBILITY_EDITOR] = 1
          doc.SetActiveObject(HDR)
          c4d.CallCommand(100004772)
          sence = doc.GetFirstObject()
          sence.SetName(*场景*)
          doc.AddUndo(c4d.UNDOTYPE_NEW,HDR)
          doc.AddUndo(c4d.UNDOTYPE_NEW,mat)
          doc.AddUndo(c4d.UNDOTYPE_NEW,sence)
          c4d.EventAdd()
          doc.EndUndo()
          if __name__==*__main__*:
          main()


          7楼2014-10-05 21:56
          回复
            最后放上小组LOGO

            同时我想感谢程序大神卡比,他解答了很多我的问题@∞∞Mebius∞∞
            还要感谢花花大神的那个python教程


            9楼2014-10-05 21:59
            回复
              py新手,代码写的很差,大神轻喷


              12楼2014-10-05 22:00
              回复
                差点忘了放出下载
                http://pan.baidu.com/s/1tTTQA


                13楼2014-10-05 22:03
                回复
                  诶。。。我发的源码很多空格被度娘吞了,没有打出来
                  所以还是不要直接复制源码,用网盘里面的那个吧


                  18楼2014-10-05 22:42
                  回复
                    更新至V1.0
                    更新内容
                    1.修改了background setup的icon
                    2.为三点光源添加了颜色,这才是正宗的三点光源
                    3.Enhance global lighting颜色调整(模仿GSG灯光包)
                    http://pan.baidu.com/s/1dDhC7jr


                    22楼2014-10-06 17:29
                    回复