blender渲染教程完成后怎么退回原场景

Blender 2.61使用Nvidia显卡GPU的CUDA应用Cycles问题解决及渲染测试比较(附件:链接库) - 查看主题 & Ubuntu中文论坛
&[ 26 篇帖子 ]&
&文章标题 : Blender 2.61使用Nvidia显卡GPU的CUDA应用Cycles问题解决及渲染测试比较(附件:链接库)发表于 :
12:44帖子: 3332地址: 广西(桂)南宁(邕)
送出感谢: 0 次
【更新】现在有“包括Cuda全内核”版的Blender 2.65下载了,windows版本。Blender 2.65.10 - Fastest build: All CUDA kernels + OSLBlender 2.61使用Nvidia显卡GPU的CUDA应用Cycles问题解决及渲染测试比较(附件:链接库)我的电脑安装有 XP和Ubuntu双系统,两个系统中都有“绿色免安装解压缩即可用”的Blender 2.61,近日尝试使用Cycles来渲染3D画面,用CPU则没事,一切正常;调用GPU来渲染,在3D viewi视图中按F12黑屏,以Rendered预览也为黑屏。在Windows XP(32位)运行的 Blender ,选择启用GPU时出现如下提示:Error: CUDA device supported only with shader model 1.3 or up, found 1.1在Ubuntu Linux 11.10(64位)运行的 Blender ,选择启用GPU时出现如下提示:Error | CUDA nvcc compiler not found. Install CUDA toolkit in default location.网上google搜索了一阵,发现外国友人已经找到解决方法,一试果然简便有效,总结如下:(1)首先确认自己的Nvidia显卡不是太老太旧的,我的显卡是两三年前买的Geforce 210,还行;(2)其次确认自己的Nvidia显卡驱动不是太老太旧的,因为旧版的驱动没有CUDA,新版才有。自己到Nvidia官方网站下载相应芯片组最新的显卡驱动吧:
(3)关键:下载本教程提供的附件——cuda的lib库,x86(32位)或x64(64位),附件:
文件注释: cuba lib x86
[225.91 KiB]
被下载 702 次
文件注释: cuba lib x64
[169.3 KiB]
被下载 181 次
解压缩后得到一个lib目录,里面有6个文件,分别是:kernel_sm_10.cubinkernel_sm_11.cubinkernel_sm_12.cubinkernel_sm_13.cubinkernel_sm_20.cubinkernel_sm_21.cubin其中13、20、21这三个文件在Blender默认的2.61版已经有了,而且版本更新不用替换,只需把2.61版里缺少的10、11、12这三个文件复制过去即可,复制到的相应目录是:在Windows XP(32位): blender-2.61-release-windows32\2.61\scripts\addons\cycles\libUbuntu Linux 11.10(64位):
blender-2.61-linux-glibc27-x86_64/2.61/scripts/addons/cycles/lib提示:这几个文件对2.62版的blender没有用(详见第10楼的跟帖)。(4)OK啦!没事了!这样不需要再按提示“安装 CUDA toolkit ”,也可以使用Nvidia显卡GPU的CUDA应用Cycles渲染了。渲染步骤如下:删除多余的物体:(1)启动Blender => 默认已经有 Cube 立方体 => X 删除  => 点击确认;(2)鼠标右键点击 Lamp 灯 => X 删除  => 点击确认;添加猴脸和地板:(3)游标在原点 => Shift A 添加 => Mesh 网格物体 => Plane 平面 => S 5 缩放5倍大;(4)游标在原点 => Shift A 添加 => Mesh 网格物体 => Monkey 猴脸 => G Z 1 向上移动1个单位 => 点击左边工具栏Shading明暗法下的Smooth平滑(可以看到,猴脸变得光滑了);修改渲染引擎和预览方式:(5)点击上方默认是Blender Render的下拉菜单按钮,改选为Cycles Render(可以看到,整个场景变得白了一些);(6)点击下方默认是Solid实体的下拉菜单按钮,改选为Rendered已渲染(可以看到,整个场景变得很暗);添加一个平面光源:(7)Shift A 添加 => Mesh 网格物体 => Plane 平面 => G Z 4 向上移动4个单位 => G X 3 水平向右移动3个单位 => R Y 45 沿着Y轴旋转45度;(8)点击右边特性编辑器的Material材质(原子能)标签页 => 点击“+ New”按钮 => 注意:如果没有执行第(6)步,显示的情况会不一样;(9)点击默认是Diffuse BSDF的下拉菜单按钮,改选为Emission(可以看到,平面光源亮了起来,照在猴脸上,单仍很暗);(10)点击默认是白色的色彩条,选择一个你喜欢的颜色,我这里选择的是暗红色:R 0.800 G 0.500 B 0.500 A 1.00(11)点击默认是1.000的灯光强度,修改为20(可以看到,猴脸被照亮了很多,3D视图的预览画面呈磨砂状逐渐清晰);修改渲染设置:(12)点击右边特性编辑器的Render渲染(照相机)标签页 => Render渲染栏目 => 点击Feature Set: 功能设置默认是Supported支持的下拉菜单,改选为Experimental实验性(可以看到,3D视图的预览画面又一次刷新,呈磨砂状逐渐清晰);(13)点击下方Device设备默认是CPU中央处理器的下拉菜单,改选为GPU图形处理器(这时,下方多出了一行GPU Type类型,默认已经是CUDA)(3D视图的预览画面又一次刷新,速度比使用CPU快了一些);提示:2.62版的blender默认没有GPU或CPU的选项,需要按快捷键Ctrl Alt U,弹出用户自定义界面,然后在system标签页里左下角的“Compute Device”,默认是none,即用的是cpu,改选为CUDA(或OpenCL),这样就有CPU和GPU Compute选项了。修改精细度设置:(14)点击下方的Dimensions尺寸栏目 => Resolution分辨率的默认设置为 X :1920
Y :1080 50%(缩放),暂时不改变;(15)点击展开下方的Integrator集成栏目 => 其中的Samples采样率的默认设置为 Render渲染 : 10
Preview预览 : 10,暂时不改变。测试渲染:(16)把鼠标放回3D viewi视图里 => F12 渲染静态图片(可以看到,渲染的过程中,左上角有进度提示,渲染结束后,左上角有所耗费的时间显示。)(17)渲染完成后 => F3 保存图片 => F11 或者 Esc 可以退出目前所处的UV图像编辑器,回到3D View视图编辑器附件:
文件注释: 渲染测试
how-to-cycles.png [ 382 KiB | 被浏览 6441 次 ]
下面是我的电脑的硬件配置、渲染条件设置、操作系统、渲染耗时统计:家用电脑的硬件配置CPU—— AMD Athlon(tm) 64 X2 Dual Core Processor 3800+主板——捷波悍马H1内存——黑金刚 DDR II 667 2G显卡——华硕 Geforce 210 显存 128 DDR III 硬盘——西数250G SATA II渲染条件设置、操作系统
及 耗时统计Resolution分辨率的默认设置为 X :1920
Y :1080 50%Samples采样率的默认设置为 Render渲染 : 10
Preview预览 : 10Ubuntu Linux 64位: —— CPU 耗时 08.89 秒 —— GPU 耗时 07.20 秒 —— 速度提升 19%Windows XP 32位:—— CPU 耗时 14.36 秒 —— GPU 耗时 07.04 秒 —— 速度提升 51%Resolution分辨率的默认设置为 X :1920
Y :1080 100%Samples采样率的默认设置为 Render渲染 : 100
Preview预览 : 10Ubuntu Linux 64位: —— CPU 耗时 6 分 46.67 秒 —— GPU 耗时 5 分 38.63 秒 —— 速度提升 16.7%Windows XP 32位:—— CPU 耗时 9 分 04.36 秒 —— GPU 耗时 4 分 58.82 秒 —— 速度提升 45%
_________________一善鱼     
&文章标题 : Re: Blender 2.61使用Nvidia显卡GPU的CUDA应用Cycles问题解决及渲染测试比较(附件:链接库发表于 :
23:40帖子: 590地址: 天朝
唉,我的N卡都快四年前的货了,不支持CUDA 怎么XP下面速度提升那么明显
_________________我是一只菜鸟。。。 |
&文章标题 : Re: Blender 2.61使用Nvidia显卡GPU的CUDA应用Cycles问题解决及渲染测试比较(附件:链接库发表于 :
12:44帖子: 3332地址: 广西(桂)南宁(邕)
送出感谢: 0 次
myewmyew 写道:唉,我的N卡都快四年前的货了,不支持CUDA 怎么XP下面速度提升那么明显我的N卡也是3年前的货呀,有GPU,升级驱动程序就支持CUDA了。XP速度提升明显,说明了3个问题:(1)64位的CPU在64位的系统上运行64位的软件,确实效率提高很多;(2)如果撇开64位的因素,我没有在32位Linux上测试,但也可看到XP系统占用CPU资源太多太厉害了,CPU能用在软件上的资源很少,所以XP仅用CPU渲染时,特别的慢;(3)安装了支持GPU的CUDA算法的显卡驱动后,XP 32位反而比Linux 64位快了,这也许是因为我在Ubuntu Linux下使用的是默认的驱动,没有手工下载安装Nvidia官方最新版的Linux显卡驱动,也许是这个问题,默认的Linux显卡驱动不够好。
_________________一善鱼     
&文章标题 : Re: Blender 2.61使用Nvidia显卡GPU的CUDA应用Cycles问题解决及渲染测试比较(附件:链接库发表于 :
2:28帖子: 60
接收感谢: 0 次
无论是ubuntu 64位还是win7 64位,用gpu渲染都会出现“Error: CUDA device supported only with shader model 1.3 or up, found 1.1”
都放了你提供的64位的lib
cpu渲染就正常
&文章标题 : Re: Blender 2.61使用Nvidia显卡GPU的CUDA应用Cycles问题解决及渲染测试比较(附件:链接库发表于 :
12:44帖子: 3332地址: 广西(桂)南宁(邕)
送出感谢: 0 次
cenjianneng 写道:无论是ubuntu 64位还是win7 64位,用gpu渲染都会出现“Error: CUDA device supported only with shader model 1.3 or up, found 1.1” 都放了你提供的64位的libcpu渲染就正常下载使用最新版的blender 2.62吧,不需要复制那些lib文件也可以正常使用Cycles渲染了。而且,也没有了GPU或CPU的选项了,而且选择Supported支持来渲染,或者选择Experimental实验性渲染,所需的时间都一样。也许是新版2.62的Blender选择使用Cycles渲染时默认就使用GPU了。
_________________一善鱼     
&文章标题 : Re: Blender 2.61使用Nvidia显卡GPU的CUDA应用Cycles问题解决及渲染测试比较(附件:链接库发表于 :
12:44帖子: 3332地址: 广西(桂)南宁(邕)
送出感谢: 0 次
cenjianneng 写道:无论是ubuntu 64位还是win7 64位,用gpu渲染都会出现“Error: CUDA device supported only with shader model 1.3 or up, found 1.1”都放了你提供的64位的lib
cpu渲染就正常有可能是三个问题引起:一是显卡驱动没安装好;二是显卡本身不支持;三也许是64位的系统却下载错用了32位的Blender ?
_________________一善鱼     
&文章标题 : Re: Blender 2.61使用Nvidia显卡GPU的CUDA应用Cycles问题解决及渲染测试比较(附件:链接库发表于 :
15:50帖子: 38
送出感谢: 0 次
接收感谢: 0 次
A心配N卡?
难怪要出问题了
Blender 2.6支持A卡硬渲染
&文章标题 : Re: Blender 2.61使用Nvidia显卡GPU的CUDA应用Cycles问题解决及渲染测试比较(附件:链接库发表于 :
2:28帖子: 60
接收感谢: 0 次
yq-ysy 写道:下载使用最新版的blender 2.62吧,不需要复制那些lib文件也可以正常使用Cycles渲染了。而且,也没有了GPU或CPU的选项了,而且选择Supported支持来渲染,或者选择Experimental实验性渲染,所需的时间都一样。也许是新版2.62的Blender选择使用Cycles渲染时默认就使用GPU了。yq-ysy 写道:有可能是三个问题引起:一是显卡驱动没安装好;二是显卡本身不支持;三也许是64位的系统却下载错用了32位的Blender ?用2.61 64位版,加lib库后,选gpu或者cpu都是可以的。用2.62 64位版,加lib库(不加都试过),2.62不是没有gpu/cpu选项,是按ctrl+alt+u,弹出用户界面,然后在system选项页那里的左下角有个“Compute Device”,默认是none,即用的是cpu,后面有CUDA和OpenCL选项的!!选了了之后就有gpu/cpu选项了,反正我是gpu/cpu和Supported/Experimental都互相搭配过,用gpu是黑屏的。显卡9800GT,驱动是285.62 for win7 x64,玩战地3的时候特意去更新驱动的
23:42,总共编辑了 1 次
&文章标题 : Re: Blender 2.61使用Nvidia显卡GPU的CUDA应用Cycles问题解决及渲染测试比较(附件:链接库发表于 :
2:28帖子: 60
接收感谢: 0 次
ubuntu里就没试过2.61,用的是2.62 64版我还特别去nvidia官网下载CUDA toolkit 4.1 for ubuntu11.04,加lib后,2.62还是不能用gpu
&文章标题 : Re: Blender 2.61使用Nvidia显卡GPU的CUDA应用Cycles问题解决及渲染测试比较(附件:链接库发表于 :
12:44帖子: 3332地址: 广西(桂)南宁(邕)
送出感谢: 0 次
cenjianneng 写道:用2.61 64位版,加lib库后,选gpu或者cpu都是可以的。用2.62 64位版,加lib库(不加都试过),2.62不是没有gpu/cpu选项,是按ctrl+alt+u,弹出用户界面,然后在system选项页那里的左下角有个“Compute Device”,默认是none,即用的是cpu,后面有CUDA和OpenCL选项的!!选了了之后就有gpu/cpu选项了,反正我是gpu/cpu和Supported/Experimental都互相搭配过,用gpu是黑屏的。显卡9800GT,驱动是285.62 for win7 x64,玩战地3的时候特意去更新驱动的原来如此,需要在那个地方改为CUDA或OpenCL才能选取GPU,谢谢提醒。另外,我也发现,我的2.62版Blender也没法使用GPU渲染了,没有复制lib文件之前,出现的错误提示是:Error: CUDA device supported only with shader model 1.3 or up, found 1.1在复制lib文件之后,出现的错误提示是:CUDA error: Invalid value in cuMemcpyHtoD(mem, host, size)上网google搜了一下,找到一篇国外的帖子,也问到为什么2.61版能用Cycles到了2.62版就不行: 这问题得到专家解答:结果太不幸了,你我都得换新显卡才行!Blender官方的wiki说了: We support graphics cards starting from GTX 2xx (shader model 1.3), however it is recommended to use a GTX 4xx or GTX 5xx card (shader model 2.x), 至少要GTX 2xx 以上的Nvidia显卡,才能支持CUDA 1.3版的显影模式;推荐要GTX 4xx 或者 GTX 5xx以上的Nvidia显卡,才能支持CUDA 2.x版的显影模式;比这些更早期的旧显卡,即使支持,也会比CPU渲染还慢。很不幸,我的GeForce 210已经算太老了,在2.61版能用也许是因为2.61版的Blender刚刚加入Cycles,还在实验使用着CUDA 1.1版的显影模式,所以加入了kernel_sm_11.cubin这个文件后就能用了;到了2.62版就只用CUDA 1.3版及以上的CUDA 2.x版显影模式了,所以到了现在2.62版连我的显卡也没用了。——你的显卡9800GT比我更早,更不用说了……节哀……顺便去买新显卡吧!另附:《Nvidia官网各型号显卡支持的CUDA 显影模式版本对照表》 只能先看这表,再看价格,掂量着口袋里的银子,再决定买什么型号的显卡。
_________________一善鱼     
&文章标题 : Re: Blender 2.61使用Nvidia显卡GPU的CUDA应用Cycles问题解决及渲染测试比较(附件:链接库发表于 :
2:28帖子: 60
接收感谢: 0 次
yq-ysy 写道:cenjianneng 写道:用2.61 64位版,加lib库后,选gpu或者cpu都是可以的。用2.62 64位版,加lib库(不加都试过),2.62不是没有gpu/cpu选项,是按ctrl+alt+u,弹出用户界面,然后在system选项页那里的左下角有个“Compute Device”,默认是none,即用的是cpu,后面有CUDA和OpenCL选项的!!选了了之后就有gpu/cpu选项了,反正我是gpu/cpu和Supported/Experimental都互相搭配过,用gpu是黑屏的。显卡9800GT,驱动是285.62 for win7 x64,玩战地3的时候特意去更新驱动的原来如此,需要在那个地方改为CUDA或OpenCL才能选取GPU,谢谢提醒。另外,我也发现,我的2.62版Blender也没法使用GPU渲染了,没有复制lib文件之前,出现的错误提示是:Error: CUDA device supported only with shader model 1.3 or up, found 1.1在复制lib文件之后,出现的错误提示是:CUDA error: Invalid value in cuMemcpyHtoD(mem, host, size)上网google搜了一下,找到一篇国外的帖子,也问到为什么2.61版能用Cycles到了2.62版就不行: 这问题得到专家解答:结果太不幸了,你我都得换新显卡才行!Blender官方的wiki说了: We support graphics cards starting from GTX 2xx (shader model 1.3), however it is recommended to use a GTX 4xx or GTX 5xx card (shader model 2.x), 至少要GTX 2xx 以上的Nvidia显卡,才能支持CUDA 1.3版的显影模式;推荐要GTX 4xx 或者 GTX 5xx以上的Nvidia显卡,才能支持CUDA 2.x版的显影模式;比这些更早期的旧显卡,即使支持,也会比CPU渲染还慢。很不幸,我的GeForce 210已经算太老了,在2.61版能用也许是因为2.61版的Blender刚刚加入Cycles,还在实验使用着CUDA 1.1版的显影模式,所以加入了kernel_sm_11.cubin这个文件后就能用了;到了2.62版就只用CUDA 1.3版及以上的CUDA 2.x版显影模式了,所以到了现在2.62版连我的显卡也没用了。——你的显卡9800GT比我更早,更不用说了……节哀……顺便去买新显卡吧!另附:《Nvidia官网各型号显卡支持的CUDA 显影模式版本对照表》 只能先看这表,再看价格,掂量着口袋里的银子,再决定买什么型号的显卡。不再对旧版cuda支持有点可惜了,再来就是2.62和2.61的Cycles效能相差大吗?如果不大,没理由不再支持旧版cuda的
&文章标题 : Re: Blender 2.61使用Nvidia显卡GPU的CUDA应用Cycles问题解决及渲染测试比较(附件:链接库发表于 :
12:44帖子: 3332地址: 广西(桂)南宁(邕)
送出感谢: 0 次
cenjianneng 写道:不再对旧版cuda支持有点可惜了,再来就是2.62和2.61的Cycles效能相差大吗?如果不大,没理由不再支持旧版cuda的从“学习Cycles”的角度上来说,不支持1.1版的CUDA确实有点可惜,因为很多学生还买不起近千元的新显卡。但是从“实际应用”的角度上来说,真的是留着1.1版一点用处都没有,因为现在要渲染动画,都是高清的,版本越先进速度就越快,如果每渲染一帧能加速10秒,渲染一部完整的90分钟动画电影13万5千帧,就是节省了135万秒!(375个小时,即15天!)虽然我也没钱买新网卡测试,但觉得,渲染一帧高清,2.0版的CUDA应该比1.1版快不止10秒。
_________________一善鱼     
&文章标题 : Re: Blender 2.61使用Nvidia显卡GPU的CUDA应用Cycles问题解决及渲染测试比较(附件:链接库发表于 :
13:56帖子: 1
送出感谢: 0 次
接收感谢: 0 次
不知道是不是因为自己网速慢 ,楼主的附件始终没速度, 请楼主把x86的库文件发我邮箱好吗
&文章标题 : Re: Blender 2.61使用Nvidia显卡GPU的CUDA应用Cycles问题解决及渲染测试比较(附件:链接库发表于 :
12:44帖子: 3332地址: 广西(桂)南宁(邕)
送出感谢: 0 次
quyitquyit 写道:不知道是不是因为自己网速慢 ,楼主的附件始终没速度, 请楼主把x86的库文件发我邮箱好吗
谢谢已经发送到你的信箱。不过这些lib库在2.63a版上还是用不了,只能在2.61版渲染了。
_________________一善鱼     
&文章标题 : Re: Blender 2.61使用Nvidia显卡GPU的CUDA应用Cycles问题解决及渲染测试比较(附件:链接库发表于 :
13:38帖子: 1298
你好。我是blender 2.6.3,nvidia gt240M,安装了 cuda toolkit 4.0跑的时候发现CUDA device supported only with compute capability 1.3 or up, found 1.2.和解?
_________________QQ群 .开群1年了,希望大家能来。一起讨论ubuntu
显示帖子 : 全部帖子1天7天2周1个月3个月6个月1年&排序 作者发表时间文章标题 升序降序&
&[ 26 篇帖子 ]&
正在浏览此版面的用户:没有注册用户 和 1 位游客
您 不能 在这个版面发表主题您 不能 在这个版面回复主题您 不能 在这个版面编辑帖子您 不能 在这个版面删除帖子您 不能 在这个版面提交附件
选择一个版面
------------------
公告/注意事项
& &新闻和通知
& &校园社团支持
& && &华东校区
& && &华南校区
& && &华北校区
& && &华中校区
& && &东北校区
& && &西北校区
& && &港澳台校区
& && &国外校区
& &软件推荐
& &非常任务
系统安装区
& &教学和常见问答
& && &课堂教学和培训
& &初学者园地 - 15.10
& &系统安装和升级
& && &新立得和软件源
& && &Wubi安装讨论
& &启动和引导
& &网卡问题以及网络和拨号
& && &校园网拨号
& &笔记本、UMPC支持
& &手机和平板
& && &Ubuntu移动应用开发
& &常用硬件支持
& &系统架构支持
配置美化区
& &字体美化和中文支持
& && &个人配置文件存放点
& &桌面特效
& &窗口管理器
& &屏幕抓图
& &办公、图像、机械电子设计等
& && &Vim和Emacs
& &因特网相关软件
& &影音多媒体
& &Wine及其分支
& &游戏和游戏模拟器
& &虚拟机和虚拟化
& &其它类软件
服务器管理
& &服务器基础应用
& &数据库管理
& &服务器维护和硬件相关
& &Ubuntu VPS
参与Ubuntu开发
& &软件和文档翻译
& &编译或打包
& &Ubuntu错误报告
程序设计区
& &Shell脚本
& &GTK+和QT
& &软件/网站开发
& && &Python/Php/Perl
& && &C/C++/Java
& &内核及嵌入式开发
& &开源小工具
& &Ubuntu 16.04
& &Ubuntu 14.10
& &Ubuntu 14.04 LTS
& &Ubuntu 12.04 LTS
& &Ubuntu 10.04 LTS
& &老旧版本支持
& && &Ubuntu 15.04
衍生发行版
& &Ubuntu GNOME
& &Kubuntu
& &Xubuntu & Lubuntu
& &Ubuntu中文衍生版
& && &Deepin
& && &UbuntuKylin
& &Ubuntu国外衍生版
& && &Mint
& &Ubuntu衍生版制作
& &其它类Unix OS发行版
& && &Arch发行版
& && &Debian发行版
& && &OpenSUSE发行版
& &深度PK版
& &Ubuntu故事和感慨
& &Full Circle开源杂志
分享交流区
& &同城交流
& &线下活动专版
& &Ubuntu宣传推广
& &论坛管理
& && && &Ubuntu中文网上商店BLENDER架构
此文并非严格的学术翻译,有错误的地方请指出,一些非技术性的东西可能被删节了。交流学习联系方式:
Kuafu:augustus4400(at)gmail(dot)com
Blog:/flyindark/
在过去的8年Blender的代码库一直在发生变化,并且扩大了很多。(删除了本段后续部分)
在这份文档中我将目标集中在回顾当初原始的设计理念上,例如这一部分是如何实现的,或这部分实现对应代码树里哪一处。既然下面即将介绍的原始设计理念可以很好的工作到现在,那么这个信息对当前所有的开发工作都会有益处。
本文档的第二个目的是提供Hooks,以方便我们可以更深入的使用'模块化的BLENDER。
BLENDER的设计的好坏是另外一个话题!特别是(角色)动画系统的知识没有出现在最初的设计阶段,这也是为什么Armatures、约束和NLA在现在仍然有问题的原因。另一个方面是当初为赶时间,游戏引擎和逻辑编辑在后来才加入,这些地方与BLEDER也没有很完美的协调工作。
虽然这两个方面都可以在当前的设计中进行改进,但我们最好还是承认BLENDER存在一些短处。在现在这个框架上改进功能和优化结构仍然是可能的,其中最有可能的是最终的代码可以集中在完全重构的Blender3的框架和模块化中完成改进。同样这也是另外一个话题。让我们先试图将这个疯狂的野兽控制住.:)
所见即所想;所做即所得
Blender最初是在动画工作室中开发的,符合它自己的用户所需求,作为一个商业软件按照工作进度和截止日期完成开发。(意译)
它有一个严格的面向数据的设计方式,几乎像一个数据库,但也有一些面向对象的思想。它完全由纯C编写。为了设计Blender,有一种尝试是建立一个尽可能统一的数据结构,来实现3D展现的所有可能性和所有通用的工具。
这个结构是为了让用户和程序员能够迅速和灵活,这是一个非常适合开发室内3D和动画包的工作方式。
虽然有些戏称Blender为'结构可视化',但是这个名字其实是相当准确的。在第一个月的Blender的开发中,我们除了设计框架和编写包含文件确实做的不多。在随后的几年里,主要的工具和可视化的方法逐步完成。
此图描述了Blender最基本的结构。“数据---可视化---编辑”这个循环周期是它的核心,并被GUI(图中蓝色处)分隔开来,GUI在3个不同的层次工作。
Data Select
一个用户选择'数据'。这意味着用户指定他希望工作的那部分三维数据库。这是一树状结构的组织。Blender的基本数据系统存在于文件上,这个数据系统直接和它加载到内存中的映射是一致的。Blender数据可以包含多个'scenes',每个场景轮流的由3D
Objects,materials,动画和渲染设置组成。
Visua Select(visua or visual?)
指定的数据可以在Windows作为三维线框通过Zbuffer渲染来显示,如按钮或一个示意图。Blender有一个柔性的windows系统实现这个目标,这个窗口系统允许任何非重叠和非阻塞型的窗口布局体系。
Edit Select
根据可视化的选择,用户可以使用很多工具。编辑操作总是直接作用于数据,而不是数据的可视化。这似乎是合乎逻辑的,但这是很多软件的交互性和视觉方面的失败。一方面它是一个速度问题,在三维可视化时,它需要一定的时间后用户才看能到一个编辑命令的作用。这也是一个'反矫正的问题:用户只是了解可视化,而不是实际描述的数据结构。这可能非常痛苦,如果你试图做一些事情,结果最终被证明所做的与你想要的正好相反。
UI design decisions
(本节未翻译,觉得原文更好理解)
With a 3D creation suite requiring many different but
conceivable methods to make the complexity available for artists,
most programs ended up with providing multiple modules, separating
the workflow for artists based on tasks like 'animating' or
'material editing' or 'modeling'.
Based on our experience, as an animation studio, we didn't
think this was natural nor followed the actual workflow of an art
Following the flow diagram as mentioned above, decided was
1. Base the UI on a non-overlapping non-blocking
subdivision window system
2. Allow each subdivided 'window' in Blender to be hooked
up with any 'editor' (= vizualization method), displaying any
choosen type of data.
3. Implement a uniform usage of hotkey and mouse commands,
that don't change meaning within different contexts.
4. Since it's an in-house tool, speed of usage had
preference over ease of learning
The implementation of the UI was first tried with existing
tools (libraries), but that failed completely because of lack of
speed. The choice to create an entire new window manager, and base
it all on IrisGL (predecessor of OpenGL), was one of the happy
coincidences that made Blender as portable and slim as still is
Blender设计的大部分时间用于决定哪些类型的数据类型要定义在一起,以及如何定义数据之间的关系。在时刻记住“'实现遵循设计”的理念的前提下,任何设计决策既有效又尽可能功能约束是很好理解的。
根据我们如何需要3D来实现我们的项目,做出了数据设计的决策,实现了一个高度抽象的数据层:
- 允许多人协同工作
- 让复杂的动画项目建立在1个项目(或文件)的基础上
- 允许高效的重复使用的数据
- 允许模板(或背景)
这导致设计一个非标'数据库',不像传统的'场景图'(这在当时基于的概念/显示),而是基于创建通用的3D的数据世界,在那里你可以创建你想要的足够多的场景图(显示,图像,动画等)。
顺便说一句:认识这个数据结构的概念一直是新用户进入Blender的瓶颈:)
在Blender数据块是用户的积木:它们可以随心所欲的被复制,修改和与另一块建立链接。
创建一个链接实际上和指明关系是一样的。这会导致一个块'被使用'。这可能会产生一个块的实例,或者得到一个特定的特征(类似C++中特化的概率?)。
For example, the block type 'Object' makes a 'Mesh' block
appear in the 3d scene. The Object here determines the exact
location, rotation and size of the Mesh. The Mesh then only stores
information on vertex locations and faces. Also, more than one
Object can have a link to the same Mesh (use, create an instance).
Other block types, e.g. Materials, can be linked to Meshes to
obtain the block type's features.
在Blender中每一个这样的块都带有一个ID结构,其中包含块的唯一名称,并在某些情况下,包含一个指明该块来自何处的库。ID结构允许Blender的数据被一个统一的方式操纵,而不需要了解实际的数据类型。
这些ID也让Blender来内部组织文件作为一个文件结构,仿佛它是一个包含文件的目录的集合。
这样的组织方式对当需要组合blender文件或将他们作为一个库使用的情形也很重要。
Data tree as in memory and
file&&&&&&&&&&&&
Scene graph
Blender中所有的数据都存储在一个主树上,这实际上只是一个块的列表。这里的数据始终驻留,独立于无论用户如何将他们连接在一起。在图片上面你可以看到一个'场景图'是如何从主树中可用的数据来构造出来的。
真实的数据仍然在主树上,这是在场景块(Scene
block)中的进一步可视化。它内部有一个基本结构的清单,允许一个场景去连接许多对象而不从主结构中删除他们。
(一个基础还允许一些本地属性,例如层和选择集(selection),使一个对象可以被多个场景使用而且附带这些不同的属性。)
当使用Blender,Library
blocks通常不解放自己(not freed
themselves),而只是没有被连接。他们留在主块列表中。只有当用户计数是零的时候,这样的块才不写入文件中。
注意上图中黄色处,这里有两个主要的全局变量:当前屏幕(也表示活动场景)和活动对象。
数据块类型(Data block types)
所有存储在主树中的块都被称为Library
blocks(有时也称为Libdata)。Library
blocks启始的ID结构:
&1&&&/SPAN&ccode&
&3&typedef&struct&ID&{
&5&void&*next,&*&
&7&struct&ID&*&
&9&struct&Library&*&
10&11&char&name[24];&12&13&short&&
14&15&short&&
16&17&}&ID;18&19&&/&/SPAN&ccode&20&21&
让我们来仔细看看Library
blocks的其中之一,那个Mesh。当然,这样一个块其实是许多块的集合,不论是在数组中还是在列表中。在这里我们存储顶点,面,UV纹理坐标,等等(蓝色图片部分)。这些块被称为直接数据(Direct
Data)。这些数据意味着是该网格的直接组成部分,并且总是和一个网格写在一起或从文件中读取回来。
除了这些永久数据,另外还有一些临时数据可能会被连接到这个网格,例如显示列表,可以链接到网格。这些数据总是在匆忙中产生,不写入文件,并且在从文件中读回的时候被设置为清空。由于所有的库和Direct
Data都保留在文件中,所以将他们设计紧凑并将临时数据分隔开来很重要。
我们现在得到了Blender设计的一个非常重要的规则:在Blender使用块的指针的时候限于指向指向LibraryData的指针的使用。这意味在任何地方都允许使用指向对象或网格的指针(例如在一个顶点),但是指向特定定点的指针不能随意存储。
译者注:不是很明确这里的“指针”的含义,暂且认为是之前ID
STRUCT中的C++指针结构相关的东西。
这个规则确保了一个一致的和可预见的结构体,它可以被任何部分的Blender代码(尤其是对于数据库管理和文件)使用。它还明确了对一些东西是否应该成为Library
Data该如何进行决定,当你想将它在Blender中到处进行交叉引用(crosslinked
, re-used)时会碰到。
当文件被保存后,Direct Data总是紧随Library
Data。由于储存的数据可以包含当他们需要读回时的指针。这里的指针规则有助于迅速恢复所有指向Direct
Data的指针,因为这些指针只在一个单一的和相对较小的情况下存在。只有指向Library
Data的指针才会存储在一个全局表中,并且所有恢复操作都会在一个调用中立即完成(lib_link_***).
(注:当给Blender加入游戏逻辑---传感器,控制器,执行器---最初的决策是将它作为Direct
Data驻留在对象的上下文中。后来出现了对象传感器需要在其他对象上触发控制器,这个特性事实上因该在Library
Data中完成,但是没有这样做。一个很丑陋的补丁就在急匆匆的就被添加到了文件读取的代码中。直到目前它仍然是一个有争议的设计问题。潜在的可能是应该用消息执行器和消息传感器来代替。)
外部库数据
以前的一个设计要求是能够从其他文件中导入数据,或将作为一种动态链接的模板。评估当时其他3D程序(Alias,Softimage公司)时我注意到他们都使用的真实的操作系统文件系统;创建一个项目目录包含一个目录树并在每一个目录中包含一个数据块对应的文件。除了它非常笨拙和复杂难于维护,我怀疑这种方式相当慢.:)
无论如何,Blender应该至少有这种做的好处。这些名为Blender数据的使用方式非常类似于文件系统的使用方式,Blender文件是一个包含所有单个文件的目录组合。
当使用其他文件(动态链接的)中的数据,很明显,只有LibraryData中的块可以被链接到。Blender然后自动读取其相关联的Direct
Data。不过,为了使从外部文件读更有用,还需要展开其所有被连接的树。例如,一个被链接的对象也将调用附加的读取网格、材质和纹理。这种展开的数据被称为“间接”。在接口处可以识别到一个红色的库图标。当保存到一个文件,这些扩展的(间接)数据根本不会被写入。这使得外部文件编辑器可以改变对象的链接,如添加一IPO或添加其他材质。
这个特性的一个典型的用法是从其他文件动态链接一个场景。无论如何这个场景永远会被读取。
当保存被连接的Library
Data,仅仅它的ID组成部分被写入文件。然后这个ID包含一个指向被使用的“库”的指针,并且那些真正的IDs有一个统一的名字用于保证那些链接总是被正确的保存。
文件保存和载入
文件保存大概是通过整个主树进行,并将所有用户块保存为原始二进制数据转储到磁盘上。每个保存的块有一个头(struct
BHead)用于存储附加信息,如在内存中这个块的原始地址。
读文件时先读整个文件到内存中。
Blender的读文件代码接着遍历所有BHeads,处理Library
Data和Indirect
Data,创建完整的副本。因此,在最后最初读入的整个文件可以从内存中被释放。(注:读和写大量的数据块是为了防止磁盘和网络开销)。
写入被动态链接的Library Data(Writing dynamic linked
library data)
由于Blender的主树仅仅是另外一个可以列表化的结构,它使用多个Main以能够高效的保存和写入被动态链接的数据。这是由函数split_main()完成的,它使用所有的数据创建主树。
为了节省,当前的主树可以正常处理。至于其他主树则只保存所有IDs(例如类型ID_ID),以分隔来表示它源自哪个文件(通过保存结构库来完成)。
然后,它调用join_main()来再一次合并所有到一个单一的主树。
读取被动态链接的库数据(Reading dynamic linked library
这又有点复杂,也允许递归;
1.当从文件中读取数据,Blender遇到库结构,它创建一个新的主结构并记得储存的所有后续ID_IDs到那里。这些ID得到标记LIB_READ。
2.它接着遍历所有主树(Main
trees),检查LIB_READ块标记
3.如果一个LIB_READ块发现:
3.1它检查包含该数据的文件是否已经被读取,如果没有则加载这整个文件到内存中和并保存到Main。
3.2然后使用正常的读取规则读取块,连接所有Direct
Data到它上面。新的块被链接到当前的Main tree,老的块被清除。
3.3根据快的类型不同,它调用expand_doit()函数,它的像步骤3.2一样读取更多的块,或者检测这个块数据是否已经被正确读取。注:当这样的扩展的数据再一次从另一个文件出现,它只是读取ID部分,将它链接到正确的Main并且标记为LIB_READ。
4.只要LIB_READ标记的块被发现,则返回到步骤2。
5.只有在最后,它才加入到Main,并恢复所有正确的Library
Data的指针。
你可以想像得到,这个系统需要相当多的指针技巧,其中指针必须映射到新的指针,然后再一次映射到新的指针,只有用正确的结束方式将真实的数据分配完成才算数。
Struct-DNA (SDNA结构)
随着选择了将文件保存为二进制格式,并了解到Blender的结构总是在变化和扩展,我当初想设计一个系统,可以兼顾到所有的低版本变更。这就是Blender
DNA在图片得到的。
简单来说,SDNA是一打包并用二进制预处理过的Blender包含文件的一个版本,其中包含可以保存到文件的数据。De
SDNA系统然后可以得到结构的内容本身,包括它的大小,元素类型和名称。
每个编译的Blender都有类似的SDNA被编译在其中,并在每个保存的.blennd文件中这个SDNA块都被加进来。另外,对于每一个文件的BHead它保存了一个索引数字表示了结构类型。
当检测和解析到变化时所有这一切都被允许。例如像一个short到int的转换,一个char到float的转换,或一个数组的元素变得越来越少或越来越多。新的变量总是很好的被清零,并且被删除的变量只是简单的被跳过。在移植到little
endian系统(Blender诞生的时候使用big
endian)的时候可以很好的进行自动转换。即使移植到到64位系统(DEC
Alpha)也成功的使用SDNA完成了。
此外,它允许向后和向上兼容性。从Blender
1997任何可以很好的读取2004版的文件,反之亦然。
主要的限制是碰到要求对一个真实的版本进行改动。例如添加一个新的变量,它需要初始化一个特定的指。或者更糟的是,当一些变量的意义发生了变化(例如像物理属性)。
源代码的布局(Source code
layout)当前源代码的布局仍然是一个正在进行的工作的一瞥。一些依赖库已经明确的定了下来,其他仍然只是简短的决定。
在下图中你会发现文档中提及的目录
Blender UI framework
source/blender/src/”目录中你可以找到所Blender中所有用户界面和工具相关的代码,这个结构非常清晰,也可以反映到一个更好的目录结构上。
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

我要回帖

更多关于 blender 实时渲染 的文章

 

随机推荐