(blender学习)blender和vscode联合编写代码

文章目录

    • 一、建立联合
    • 二、代码
      • 1.做一个小panel
      • 2. 给选定的物体更换好多好多材质

一、建立联合

按照这个文档做:

【Blender】使用 Microsoft Visual Studio Code 作为外部 IDE 来编写 Blender 脚本/附加组件

二、代码

下面几个代码的学习视频来自:https://space.bilibili.com/361360399

1.做一个小panel

import bpy

def importFspy(filepath=""):
    if filepath=="":
        print("Filepath ERROR!")
        return
    bpy.ops.fspy_blender.import_project(filepath=filepath)
#    bpy.context.space_data.recent_folders_active = 2
    fspyCamera=bpy.ops.object.camera_add(enter_editmode=False, align='VIEW', location=(0, 0, 0), rotation=(1.17015, 0.0126065, 0.913338), scale=(1, 1, 1))
    print(fspyCamera)
    
    
def main():
    filepath=r'D:\Projects\Nerf\nerfstudio&blender\road_sequence\kitti.mars_kitti-MOT.data_tracking_image_2.training.image_02.0005\fspy\000000.fspy'
    importFspy(filepath)
    
    

    
if __name__ == "<run_path>":
    main()
    print("234")

效果:
在这里插入图片描述

2. 给选定的物体更换好多好多材质

change_textures.py 获取“某一个文件夹下面所有文件夹中blender文件,也可以是某一个文件夹下面的blender文件”中的所有材质,并复制给该选定的物体的材质中。

from typing import Set
import bpy
import time
from bpy.types import Context
from pathlib import Path

if __name__ == "<run_path>":
    # 定义存放材质的文件夹
    target_dir_in_str="D:/test/Blender_test/texture_learning"
    # 获取到target_dir_in_str下每一个文件夹里面的每一个blender文件里面的材质
    pathlist=Path(target_dir_in_str).glob('**/*.blend')
    # 将每个blend文件里的材质放在本blend文件的Material文件夹下
    from pathlib import Path
    # 定义存放材质的文件夹
    target_dir_in_str="D:/test/Blender_test/texture_learning"
    # 获取到target_dir_in_str下每一个文件夹里面的每一个blender文件里面的材质
    pathlist=Path(target_dir_in_str).glob('**/*.blend')
    # 将每个blend文件里的材质放在本blend文件的Material文件夹下
    for path in pathlist:
        # 将路径对象转换到字符串
        path_in_str= str(path)
        with bpy.data.libraries.load(path_in_str) as (data_from,data_to):
            if len(data_from.materials)>0:
                path_in_str+="\\Material\\"
                for matName in data_from.materials:
                    bpy.ops.wm.append(filename=matName,directory=path_in_str)
                    mat=bpy.data.materials.get(matName)
                    bpy.context.active_object.data.materials.append(mat)

在这里插入图片描述

setting_mat_for_selected_obj.py 每隔step长度的时间给选定物体更换一次材质,并渲染出来

import bpy

if __name__ == "<run_path>":
    startFrame = 1
    endFrame = 21
    step = 1  # 每五帧切换一次材质
    scene = bpy.context.scene
    scene.render.engine = 'CYCLES'  # 设置为cycles模式
    fp = scene.render.filepath  # 得到渲染的文件目录
    scene.render.image_settings.file_format = 'PNG'  # 输出的文件格式
    scene.cycles.samples = 1  # 输出的文件最大采样为1
    scene.render.resolution_x = 1920
    scene.render.resolution_y = 1080

    bpy.ops.object.mode_set(mode='OBJECT') # 先限定到物体模式
    bpy.ops.object.select_all(action='DESELECT')  # 为了选定某个物体操作,所以先不要选择所有物体
    bpy.ops.object.select_pattern(pattern="Teapot.001", case_sensitive=False, extend=True)# 通过select_pattern命令来按照物体命名查找选定物体,支持通配符*模糊匹配

    obj = bpy.context.object
    all_materials = obj.data.materials
    no_of_materials = len(all_materials)
    print("number of all_materials:", str(no_of_materials))
    obj.active_material_index = 0  # 初始材质的序号

    for frame_nr in range(startFrame, endFrame):
        scene.frame_set(frame_nr) # 设定关键帧
        print("frame_nr:", frame_nr)
        if frame_nr % step == 0: # 每五次换一次材料
            print("changing material~~~~")
            bpy.ops.object.mode_set(mode='EDIT') # 进入编辑模式
            bpy.ops.mesh.select_all(action='SELECT') #选择所有
            obj.active_material_index = obj.active_material_index+1 #材质序号加一
            bpy.ops.object.material_slot_assign() # 将材质指定给所有
            bpy.ops.object.mode_set(mode='OBJECT') # 切换到物体模式

        obj.data.update()

        scene.render.filepath = fp + str(frame_nr)
        bpy.ops.render.render(write_still=True)

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/346994.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux中并发程序设计(进程的创建和回收、exec函数使用)

进程的创建和回收 进程概念 概念 程序 存放在磁盘上的指令和数据的有序集合&#xff08;文件&#xff09; 静态的 进程 执行一个程序所分配的资源的总称 动态的进程和程序比较 注&#xff1a;进程是存在RAM中&#xff0c;程序是存放在ROM(flash)中的进程内容 BSS段&#xff…

Rocky8 顺利安装 Airflow 并解决数据库报错问题

rocky是替代centos的服务器系统&#xff0c;稳定可靠。rocky8会比centos7新&#xff0c;可以支持更多服务软件的安装&#xff0c;免去升级各种库的麻烦&#xff0c;本文运行airflow服务就用rocky8系统。airflow是一个定时任务管理系统&#xff0c;功能强大&#xff0c;目前是ap…

【QT+QGIS跨平台编译】之七:【libjpeg+Qt跨平台编译】(一套代码、一套框架,跨平台编译)

文章目录 一、libjpeg介绍二、文件下载三、文件分析四、pro文件五、编译实践一、libjpeg介绍 libjpeg是一个广泛使用的jpeg图像压缩和解压的函数库,采用 C 语言开发。 2013年1月,Independent JPEG Group发布了版本9,对新引入的无损编码模式进行了改进。2022年1月,发布了版…

Android U 配置 WiFiCalling 场景下PLMN/SPN 显示的代码逻辑介绍

功能介绍 根据设备的网络连接情况更新状态栏显示的运营商及网络状态。 注册上WFC&#xff08;WiFi Calling&#xff09;后&#xff0c;支持客制化显示左上角状态栏中的运营商网络状态信息 。具体的代码逻辑在CarrierDisplayNameResolver.java。 ServiceStateTracker 网络状态…

C# Bitmap类学习1

Bitmap对象封装了GDI中的一个位图&#xff0c;此位图由图形图像及其属性的像素数据组成.因此Bitmap是用于处理由像素数据定义的图像的对象。 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using …

程序媛的mac修炼手册-- 如何用Python节省WPS会员费

上篇分享了如何用微博爬虫&#xff0c;咱举例爬了女明星江疏影的微博数据。今天就用这些数据&#xff0c;给大家安利一下怎么用Python实现WPS中部分Excel付费功能。 MacOS系统自带的工具&#xff0c;绝大多数都非常顶&#xff0c;除Numbers外。当然&#xff0c;page比起word来&…

图像分类】【深度学习】【轻量级网络】【Pytorch版本】EfficientNet_V2模型算法详解

【图像分类】【深度学习】【轻量级网络】【Pytorch版本】EfficientNet_V2模型算法详解 文章目录 【图像分类】【深度学习】【轻量级网络】【Pytorch版本】EfficientNet_V2模型算法详解前言EfficientNet_V2讲解自适应正则化的渐进学习(Progressive Learning with adaptive Regul…

魔众题库系统v9.3.0版本:升级与新功能亮点,让学习更高效!

大家好&#xff01;今天我们激动地向大家宣布&#xff0c;魔众题库系统已经升级到了v9.3.0版本&#xff01;这个版本带来了许多令人兴奋的改进和新功能&#xff0c;让用户的使用体验更上一层楼。 首先&#xff0c;让我们来看看这个版本的VIP界面升级。无论是PC端还是移动端&am…

C/C++ - 编程语法特性

目录 标准控制台框架 输入输出对象 命名空间 标准控制台框架 头文件 ​#include <iostream>​​ 告诉编译器我们要使用iostream库尖括号中的名字指定了某个头文件(header) 入口函数 ​int main(void)​​ 返回 ​return 0;​​ 输出语句 ​std::cout << "H…

python基础——锁

进程锁 (互斥锁) 进程锁的引入&#xff1a; 模拟抢票程序&#xff1a; from multiprocessing import Process import json import time def show_ticket(i):with open("./tickets.txt",mode"r",encoding"utf-8") as file:ticket json.load(f…

k8s图形化管理工具之rancher

前言 在前面的k8s基础学习中,我们学习了各种资源的搭配运用,以及命令行,声明式文件创建。这些都是为了k8s管理员体会k8s的框架,内容基础。在真正的生产环境中,大部分的公司还是会选用图形化管理工具来管理k8s集群,大大提高工作效率。 在二进制搭建k8集群时,我们就知道了…

Spring依赖注入之setter注入与构造器注入以及applicationContext.xml配置文件特殊值处理

依赖注入之setter注入 在管理bean对象的组件的时候同时给他赋值&#xff0c;就是setter注入&#xff0c;通过setter注入&#xff0c;可以将某些依赖项标记为可选的&#xff0c;因为它们不是在构造对象时立即需要的。这种方式可以减少构造函数的参数数量&#xff0c;使得类的构…

程序员的自我修养:链接、装载与库 6 可执行文件的装载与进程

1 进程虚拟地址空间 PAE 2 装载的方式 2.1 覆盖装入 省略 178 2.2 页映射 3 从操作系统角度看可执行文件的装载 3.1 进程的建立 182

【必剪】鬼畜rap和鬼畜剧场的区别?

在【选择素材】中&#xff0c;每个素材下会有一个标签显示支持哪种的鬼畜形式&#xff0c;在点击一个两种格式的有【鬼畜剧场】和【鬼畜rap】这两中的主要区别在于 【鬼畜剧场】&#xff1a;对素材进行人工编排&#xff0c;创作自己原创的剧情作 【鬼畜rap】&#xff1a;对于素…

IO多路复用-poll(附通信代码)

IO多路复用-poll 1. poll函数 和select函数的比较 内核对应文件描述符的检测也是以线性的方式进行轮询&#xff0c;根据描述符的状态进行处理poll和select检测的文件描述符集合会在检测过程中频繁的进行用户区和内核区的拷贝&#xff0c;它的开销随着文件描述符数量的增加而…

恒峰配网行波型故障预警定位装置特点及优势

随着电力系统的不断发展&#xff0c;电网运行的安全性和稳定性对于国家经济和人民生活至关重要。为了提高电网运行的可靠性&#xff0c;减少故障发生的可能性&#xff0c;我国电力行业不断引进新技术、新设备&#xff0c;其中配网行波型故障预警定位装置在电网安全领域发挥着越…

CentOS安装Redis教程-shell脚本一键安装配置

文章目录 前言一、Redis单机版安装教程1. 复制脚本2. 增加执行权限3. 执行脚本 二、Redis扩展集群版安装教程1. 安装Redis单机版2. 复制脚本3. 增加执行权限4. 执行脚本5. 测试6. redis_cluster.sh 命令6.1 启动Redis扩展集群6.2 停止Redis扩展集群6.3 查看Redis扩展集群节点信…

mysql 基础(三)

一、多表设计 数据库设计范式 第一范式(确保每列保持原子性) 第一范式是最基本的范式。如果数据库表中的所有字段值都是不可分解的原子值&#xff0c;就说明该数据库表满足了第一范式。第二范式就是要有主键&#xff0c;要求其他字段都依赖于主键。 没有主键就没有唯一性&…

知识产权实缴注册资金的流程

随着新《公司法》的出台&#xff0c;很多企业老板几乎睡不着&#xff0c;都在为实缴注册资本苦恼。前文有谈到目前比较靠谱的实缴方式是知识产权实缴。那么知识产权实缴的流程是怎么样的&#xff1f;需要准备哪些资料&#xff1f; 下面用一张图为各位企业老板们解读知识产权实…

ios上架缺少info.plist文件

app打包ios提示修改info.plist文件&#xff0c;在iOS原生开发中提供了配置 Info.plist 和 资源文件&#xff08;Bundle Resources&#xff09;。uni-app中对常用项进行了封装&#xff0c;提供了manifest.json。 但manifest.json不能包含所有iOS的配置。需要自定义一个Info.plis…