blender 相机参数
目录
设置相机参数:
3. 设置相机参数示例
4. 相机透视与正交
5. 额外的高级设置
设置相机参数:
设置渲染器:
外参转换函数
转换测试代码:
获取blender渲染外参:
设置相机参数:
3. 设置相机参数示例
假设你有一个相机,并希望设置它的焦距和位置,可以通过 Python 脚本来设置这些参数:
python
import bpy # 获取当前场景中的相机
camera = bpy.context.scene.camera # 设置相机的位置 (外参)
camera.location = (0, 0, 10) # 设置相机的旋转 (外参)
camera.rotation_euler = (1.5708, 0, 0) # 使用欧拉角旋转
# 设置相机的焦距 (内参)
camera.data.lens = 50 # 焦距为 50mm
# 设置传感器的尺寸 (内参)
camera.data.sensor_width = 32 # 传感器宽度为 32mm
camera.data.sensor_height = 18 # 传感器高度为 18mm
4. 相机透视与正交
- 如果需要调整相机的视图类型,可以选择 透视视图 或 正交视图。对于渲染的视图设置,可以通过
camera.data.type属性来设置:camera.data.type = 'PERSP':透视相机camera.data.type = 'ORTHO':正交相机
5. 额外的高级设置
- 深度裁剪(Clipping):控制相机的可视范围,决定从相机视点出发,哪些物体会被渲染。你可以通过
clip_start和clip_end控制这些裁剪距离。
camera.data.clip_start = 0.1
camera.data.clip_end = 1000
设置相机参数:
intrs_path = scene_dir + '/pred_intrinsics.txt'
intrs = np.loadtxt(intrs_path)
intrs = np.array(intrs, np.float32)
intrinsic = [intrs[0][0], intrs[0][0], intrs[0][2], intrs[0][5]]
print(intrinsic)
fx, fy, cx, cy = intrinsic[0], intrinsic[1], intrinsic[2], intrinsic[3]width = float(args.image_width)
width_r = width / 512.0 * cx * 2
height_r = width / 512.0 * cy * 2
fx_r = width / 512.0 * fxload_object(object_file)# Set up cameras
cam = scene.objects["Camera"]
# cam.data.lens = 35
cam.data.sensor_width = 32res_x = render.resolution_x
if render.resolution_y > render.resolution_x:res_x = render.resolution_y
cam.data.lens = cam.data.sensor_width * fx / res_x
设置渲染器:
import bpy# 设置 Cycles 渲染器为 GPU 渲染
scene = bpy.context.scene
scene.cycles.device = "GPU" # 使用 GPU 渲染# 设置 Cycles 渲染样本数量,影响渲染质量和时间
scene.cycles.samples = 128 # 渲染时使用的样本数量# 控制材质的反射和折射反弹次数
scene.cycles.diffuse_bounces = 1 # 漫反射反弹次数
scene.cycles.glossy_bounces = 1 # 镜面反射反弹次数
scene.cycles.transparent_max_bounces = 3 # 透明材质最大反弹次数
scene.cycles.transmission_bounces = 3 # 透光材质的最大反弹次数# 设置噪声过滤的宽度
scene.cycles.filter_width = 0.01 # 噪声过滤宽度# 启用去噪功能
scene.cycles.use_denoising = True # 开启去噪功能# 启用透明背景渲染(常用于合成)
scene.render.film_transparent = True # 启用透明背景# 刷新 GPU 设备设置
bpy.context.preferences.addons["cycles"].preferences.get_devices() # 获取可用的设备# 设置 GPU 渲染使用 CUDA 还是 OpenCL(取决于你的 GPU)
bpy.context.preferences.addons["cycles"].preferences.compute_device_type = "CUDA" # 或者 "OPENCL"
外参转换函数
def set_camera(c2w: np.ndarray) -> bpy.types.Object:"""设置Blender相机的位置和姿态Args:c2w: 4x4相机到世界变换矩阵,通常来自其他系统(如NeRF),可能使用不同的坐标系Returns:bpy.types.Object: 配置后的相机对象"""# 获取Blender中的相机对象camera = bpy.data.objects["Camera"]# 应用坐标系变换:# 1. 先翻转输入坐标系的Y和Z轴方向# 2. 再调整坐标轴方向以适配Blender的相机坐标系transformed_matrix = BLENDER_AXIS_TRANSFORM @ (c2w @ COORDINATE_FLIP)# 将变换后的矩阵转置后赋给Blender相机# 注:Blender的matrix_world使用行主序,而numpy默认行存储,转置确保矩阵正确应用camera.matrix_world = transformed_matrix.Treturn camera
转换测试代码:
import numpy as np
BLENDER_AXIS_TRANSFORM = np.array([[1, 0, 0, 0], [0, 0, 1, 0], [0, -1, 0, 0], [0, 0, 0, 1]], dtype=np.float32)# 该矩阵翻转Y和Z轴,用于调整坐标系的旋向性(例如从右手系到左手系)
COORDINATE_FLIP = np.array([[1, 0, 0, 0], [0, -1, 0, 0], [0, 0, -1, 0], [0, 0, 0, 1]], dtype=np.float32)data=[i+1 for i in range(16)]
c2w=np.array(data).reshape(-1,4)print(c2w)
print(COORDINATE_FLIP)
data=(c2w @ COORDINATE_FLIP)
print(BLENDER_AXIS_TRANSFORM)
print(data)
transformed_matrix = BLENDER_AXIS_TRANSFORM @ dataprint(transformed_matrix)
获取blender渲染外参:
https://github.com/XuweiyiChen/Diffusion4D/blob/f6aab73453976b9d0636cdf434be8c916bc5e60d/rendering/blender_cpu.py
def get_3x4_RT_matrix_from_blender(cam: bpy.types.Object) -> Matrix:"""Returns the 3x4 RT matrix from the given camera.Taken from Zero123, which in turn was taken fromhttps://github.com/panmari/stanford-shapenet-renderer/blob/master/render_blender.pyArgs:cam (bpy.types.Object): The camera object.Returns:Matrix: The 3x4 RT matrix from the given camera."""# Use matrix_world instead to account for all constraintslocation, rotation = cam.matrix_world.decompose()[0:2]R_world2bcam = rotation.to_matrix().transposed()# Use location from matrix_world to account for constraints:T_world2bcam = -1 * R_world2bcam @ location# put into 3x4 matrixRT = Matrix((R_world2bcam[0][:] + (T_world2bcam[0],), R_world2bcam[1][:] + (T_world2bcam[1],), R_world2bcam[2][:] + (T_world2bcam[2],),))return RT
相关文章:
blender 相机参数
目录 设置相机参数: 3. 设置相机参数示例 4. 相机透视与正交 5. 额外的高级设置 设置相机参数: 设置渲染器: 外参转换函数 转换测试代码: 获取blender渲染外参: 设置相机参数: 3. 设置相机参数示…...
在GPIO控制器中,配置通用输入,读取IO口电平时,上拉和下拉起到什么作用
上下拉电阻作用 在通用输入的时候,也就是在读某个IO的电平的时候 一定要让IO口先保持一个电平状态,这样才能检测到不同电平状态。 如何保持电平状态? 1. 可以通过芯片内部的上下拉电阻,由于是弱上下拉一般不用 2. 硬件外界一个…...
Maven工程核心概念GAVP详解:从命名规范到项目协作的基石
Maven工程核心概念GAVP详解:从命名规范到项目协作的基石 一、GAVP是什么? 在Maven工程中,GAVP是四个核心属性的缩写:GroupId、ArtifactId、Version、Packaging。这组属性为项目在Maven仓库中提供了唯一标识,类似于“项…...
如何利用DeepSeek打造医疗领域专属AI助手?从微调到部署全流程解析
如何利用DeepSeek开源模型打造医疗领域专属AI助手?从微调到部署全流程解析 医疗人工智能正迎来爆发式增长,但在实际应用中,通用大模型往往存在医学知识不精准、诊断逻辑不严谨等问题。本文将手把手带您实现医疗垂直领域大模型的定制化训练&a…...
Redis|前言
文章目录 什么是 Redis?Redis 主流功能与应用 什么是 Redis? Redis,Remote Dictionary Server(远程字典服务器)。Redis 是完全开源的,使用 ANSIC 语言编写,遵守 BSD 协议,是一个高性…...
眼见着折叠手机面临崩溃,三星计划增强抗摔能力挽救它
据悉折叠手机开创者三星披露了一份专利,通过在折叠手机屏幕上增加一个抗冲击和遮光层的方式来增强折叠手机的抗摔能力,希望通过这种方式进一步增强折叠手机的可靠性和耐用性,来促进折叠手机的发展。 据悉三星和研发可折叠玻璃的企业的做法是在…...
Leetcode面试高频题分类刷题总结
https://zhuanlan.zhihu.com/p/349940945 以下8个门类是面试中最常考的算法与数据结构知识点。 排序类(Sort): 基础知识:快速排序(Quick Sort), 归并排序(Merge Sort)的…...
Vue.js `v-memo` 性能优化技巧
Vue.js v-memo 性能优化技巧 今天我们来聊聊 Vue 3.2 引入的一个性能优化指令:v-memo。如果你在处理大型列表或复杂组件时,遇到性能瓶颈,那么 v-memo 可能会成为你的得力助手。 什么是 v-memo? v-memo 是 Vue 3.2 新增的内置指…...
Altium Designer绘制原理图时画斜线的方法
第一步:检查设置是否正确 打开preferences->PCB Editor ->Interactive Routing->Interactive Routing Options->Restrict TO 90/45去掉勾选项,点击OK即可。如下图所示: 然后在划线时,按下shift空格就能够切换划线…...
在K8S中,有哪几种控制器类型?
在Kubernetes中,控制器(Controller)是用来确保实际集群状态与所需状态保持一致的关键组件。它们监控并自动调整系统以达到预期状态,以下是Kubernetes中主要的几种控制器类型: ReplicationController(RC&am…...
什么是Rust?它有什么特点?为什么要学习Rust?
什么是Rust?它有什么特点?为什么要学习Rust? 如果你是一名编程初学者,或者已经有一些编程经验但对Rust感兴趣,那么这篇文章就是为你准备的!我们将用简单易懂的语言,带你了解Rust是什么、它有什…...
Golang 并发机制-3:通道(channels)机制详解
并发编程是一种创建性能优化且响应迅速的软件的强大方法。Golang(也称为 Go)通过通道(channels)这一特性,能够可靠且优雅地实现并发通信。本文将揭示通道的概念,解释其在并发编程中的作用,并提供…...
kamailio的kamctl的使用
kamctl 是 Kamailio SIP 服务器的管理工具,用于执行各种管理任务,如启动、停止、重启 Kamailio 进程,管理用户、ACL、路由、信任的 IP 地址等。以下是对 kamctl 命令的解释及举例说明: 1. 启动、停止、重启 Kamailio start: 启动…...
HarmonyOS:ArkWeb进程
ArkWeb是多进程模型,分为应用进程、Web渲染进程、Web GPU进程、Web孵化进程和Foundation进程。 说明 Web内核没有明确的内存大小申请约束,理论上可以无限大,直到被资源管理释放。 ArkWeb进程模型图 应用进程中Web相关线程(应用唯一) 应用进程为主进程。包含网络线程、Vi…...
UI线程用到COM只能选单线程模型
无论用不用UI库,哪怕是用Win32 API手搓UI,UI线程要用COM的话,必须初始化为单线程单元(STA),即CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED);,不能用MULTITHREADTHREADED。 实际上,很多(WPF等)UI库若…...
LLMs之DeepSeek:Math-To-Manim的简介(包括DeepSeek R1-Zero的详解)、安装和使用方法、案例应用之详细攻略
LLMs之DeepSeek:Math-To-Manim的简介(包括DeepSeek R1-Zero的详解)、安装和使用方法、案例应用之详细攻略 目录 Math-To-Manim的简介 1、特点 2、一个空间推理测试—考察不同大型语言模型如何解释和可视化空间关系 3、DeepSeek R1-Zero的简介:处理更…...
在C语言中使用条件变量实现线程同步
互斥量、原子操作都是实现线程同步的方法,今日介绍使用条件变量来实现线程同步。在多线程应用中,当某个线程的执行依赖于另一个线程对数据的处理时,这个线程可能没有被阻塞,只是不断地检查某个条件是否成立了(这个条件…...
图书管理系统 Axios 源码__新增图书
目录 功能介绍 核心代码解析 源码:新增图书功能 总结 本项目基于 HTML、Bootstrap、JavaScript 和 Axios 开发,实现了图书的增删改查功能。以下是新增图书的功能实现,适合前端开发学习和项目实践。 功能介绍 用户可以通过 模态框…...
Maven全解析:从基础到精通的实战指南
概念: Maven 是跨平台的项目管理工具。主要服务基于 Java 平台的构建,依赖管理和项目信息管理项目构建:高度自动化,跨平台,可重用的组件,标准化的流程 依赖管理: 对第三方依赖包的管理…...
数据密码解锁之DeepSeek 和其他 AI 大模型对比的神秘面纱
本篇将揭露DeepSeek 和其他 AI 大模型差异所在。 目录 编辑 一本篇背景: 二性能对比: 2.1训练效率: 2.2推理速度: 三语言理解与生成能力对比: 3.1语言理解: 3.2语言生成: 四本篇小结…...
Objective-C常用命名规范总结
【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名(Class Name)2.协议名(Protocol Name)3.方法名(Method Name)4.属性名(Property Name)5.局部变量/实例变量(Local / Instance Variables&…...
2024年赣州旅游投资集团社会招聘笔试真
2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...
Module Federation 和 Native Federation 的比较
前言 Module Federation 是 Webpack 5 引入的微前端架构方案,允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...
ardupilot 开发环境eclipse 中import 缺少C++
目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...
自然语言处理——Transformer
自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效,它能挖掘数据中的时序信息以及语义信息,但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN,但是…...
稳定币的深度剖析与展望
一、引言 在当今数字化浪潮席卷全球的时代,加密货币作为一种新兴的金融现象,正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而,加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下,稳定…...
让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比
在机器学习的回归分析中,损失函数的选择对模型性能具有决定性影响。均方误差(MSE)作为经典的损失函数,在处理干净数据时表现优异,但在面对包含异常值的噪声数据时,其对大误差的二次惩罚机制往往导致模型参数…...
快刀集(1): 一刀斩断视频片头广告
一刀流:用一个简单脚本,秒杀视频片头广告,还你清爽观影体验。 1. 引子 作为一个爱生活、爱学习、爱收藏高清资源的老码农,平时写代码之余看看电影、补补片,是再正常不过的事。 电影嘛,要沉浸,…...
Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换
目录 关键点 技术实现1 技术实现2 摘要: 本文将介绍如何利用Python和ZeroMQ消息队列构建一个智能车辆状态监控系统。系统能够根据时间策略自动切换驾驶模式(自动驾驶、人工驾驶、远程驾驶、主动安全),并通过实时消息推送更新车…...
Leetcode33( 搜索旋转排序数组)
题目表述 整数数组 nums 按升序排列,数组中的值 互不相同 。 在传递给函数之前,nums 在预先未知的某个下标 k(0 < k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k1], …, nums[n-1], nums[0], nu…...
