用LDRAW和POV-RAY渲染出以假乱真的效果图
只要你的电脑足够快,用LDRAW和POV-RAY可以渲染出以假乱真的LEGO效果图,快来试试吧。
前提:你必须能熟练使用电脑,有一定的钻研精神,最好有尝试过LEGO的3D虚拟搭建。还有,有一定的英文阅读能力,因为这里面涉及的所有软件都是英文版的~而且要注意,不要使用中文路径、中文文件名、中文注释等等,因为英文软件不能很好的支持中文!
(2014-03 更新,不再需要单独下载POVRAY了。文中涉及到的安装包都可以从我的备份 http://pan.baidu.com/s/1dFx9uLj 下载)
(2015-03 更新,安装包升级到LDRAW_AIOI_2014-2了,新版本通常有更大的零件库和更强大的各式工具,建议尝试。新增了LDCAD软件,也可以用于编辑ldr/mpd文件,可以试试)
首先,从 ldraw.org 下载安装 LDRAW ALL-IN-ONE 2013.2注意要安装 LDVIEW、MLCAD、LGEO 和 POVRAY 3.7。运行povway 3.7,选择菜单Tools/EDIT master POVRAY.INI,打开povray.ini,增加三行(这里假设LDraw安装在C:\Program Files\LDraw,如果是64位Windows系统的话路径可能是C:\Program Files (x86)\LDraw):
Library_Path="C:\Program Files\LDraw\LGEO" Library_Path="C:\Program Files\LDraw\LGEO\lg" Library_Path="C:\Program Files\LDraw\LGEO\ar"
然后,下载LGEO的patch( https://dl.dropbox.com/u/5986419 … les/LGEO-Update.zip ),把zip里面的lg_*文件放进LGEO\lg目录(默认是C:\Program Files\LDraw\LGEO\lg目录,注意是部分覆盖),*.xml文件放进 LDView 目录覆盖老文件
再然后,网上下载 .ldr .mpd .dat 格式的LDRAW工程文件,或者自己用MLCAD之类的LEGO虚拟搭建软件创建 .ldr 格式文件,用LDVIEW可以打开观看。这里给一个例子: http://bricksafe.com/files/ruf/fun/wtf01.ldr 。在LDVIEW里面观看模型的时候,用鼠标调整方位(按住左键旋转,右键放大缩小,中键平移),调整好方位后,执行 File/Export,点击对话框下面的option,option里面,Quality可以选择 Normal 或者 Include stud logos(这个就是每个小痘痘上的LEGO凸起都有),其他的都用默认值,导出保存成一个 .pov 文件。
再再然后,双击 .pov 文件打开,然后尝试run,如果报错(比较少见),那是LDVIEW生成的时候有BUG,多半是错别字,自己看代码改好。例如笔者就遇到一次 LDX_48_slash_5_dash_24rin10_dot_dat_in_part 错拼成 LDX_48_slash_5_dash_24ri10_dot_dat_in_part ,’ri’后漏写一个’n’字符。run如果成功就会生成一个bmp图片,效果可能不大好。如下:
现在到了关键时刻了,在 .pov 文件前部, 一大堆declare后面, Camera 定义前面,增加:
// Before Camera #include "rad_def.inc" global_settings { max_trace_level 10 radiosity { Rad_Settings(Radiosity_Fast, on, off) } } light_source { // X, Y, Z <-1000, -1500, -1000> color rgb 0.5 area_light 200, 200, 10, 10 jitter } #declare LDXSkipLight1 = 1; #declare LDXSkipLight2 = 1; #declare LDXSkipLight3 = 1; /* // Fog fog { distance LDXRadius*25 // 添加大雾,在街景里面比较有用 color rgb 1 } */ // Lights light_source { <0*LDXRadius,-1.5*LDXRadius,-1.5*LDXRadius> + LDXCenter color rgb 0.75 area_light 200, 200, 10, 10 jitter } light_source { <1.5*LDXRadius,-1*LDXRadius,0.866026*LDXRadius> + LDXCenter color rgb 0.75 area_light 200, 200, 10, 10 jitter } light_source { // Custom light 1: Above <0,-2*LDXRadius,0> + LDXCenter color rgb 0.5 area_light 200, 200, 10, 10 jitter } light_source { // Custom light 2: Side <2*LDXRadius,-0*LDXRadius,-2*LDXRadius> + LDXCenter color rgb 0.5 area_light 200, 200, 10, 10 jitter } // Floor #if (LDXFloor != 0) object { plane { LDXFloorAxis, LDXFloorLoc hollow } texture { pigment { color rgb 0.9 } finish { ambient 0 diffuse 0.9 reflection 0 } } } #end #declare LDXFloor = 0;
现在,再run一次,看看效果。把渲染分辨率调整成1280×1024 AA0.3再run一次看看效果。如果需要自定义分辨率,选择菜单Tools/EDIT resolution INI file,增加自己想要的分辨率,保存然后重启povray。我最终出图的分辨率是1920×1440 AA0.3。
如果要更好的效果,把前面添加的代码里面的 Radiosity_Fast 改成 Radiosity_Final ,再在camera { } 里面增加景深效果:
focal_point (LDXCameraLookAt*15+LDXCameraLoc)/16 // 对焦点,这里我放在了镜头和中心点之间靠近中心点的位置 aperture LDXRadius/20 // 景深大小 blur_samples 25 // 采样数, 4 ~ 100 ,越大越慢但效果越好,出草图的时候可以设置成9,出最终图的时候设置成25以上
再run一次看看效果。看看题图的效果~
静物摄影最重要的技巧是光源、对焦和景深,上面的代码里面我放了四盏灯(light_source),有经验的朋友可以自己调整灯的位置和亮度,还可以把灯面积设置大一些以得到比较柔和的阴影。另外在POVRAY里面也可以自己调整对焦点和景深大小,camera { } 里面 focal_point 后面是对焦位置,这里有一个技巧,可以用MLCAD打开.ldr文件,选择你想对焦的零件,然后在零件列表里面看到这个零件的坐标,然后修改.pov文件,例如下面这个图,我的对焦点是离镜头最近的哪个红色2×4拐角梁,它的坐标是 <100,-300,-100> 则写成:
focal_point <100,-300,-100> // 对焦点 aperture LDXRadius/50 // 这里把光圈做小,为了远景的线条清晰一些 blur_samples 25 // 采样数, 4 ~ 100
如果有多个.pov文件,可以用 queue 功能排队生成,睡觉,等结果。生成的如果是bmp文件,可以用photoshop、画板等工具,转成jpg或者png文件。
在前面EDIT master POVRAY.INI的时候如果加上一行 “ +fn16 ” 则会生成16bit位深的png文件,效果非常好,比8bit位深的bmp细节好很多,文件也小不少。
(以前做的幽灵马车,我的第一个MOC作品)
(极限攀爬车)
(上面是正在开发中的 海龟作图机器人,软件开发中~)
(2014-08-07 更新:下面的新脚本让阴影更平滑,只要粘贴到LDview生成的文件里的 ‘// Camera’ 一行的前面就行了,不用做其他改动了!)
// Before Camera #declare light_multi = 0.8; #declare light_floor = 0.7; #if (version < 3.7) //global_settings{ assumed_gamma 1.0 } #end #include "rad_def.inc" global_settings { max_trace_level 10 radiosity { Rad_Settings(Radiosity_Final, on, off) } } #declare LDXSkipLight1 = 1; #declare LDXSkipLight2 = 1; #declare LDXSkipLight3 = 1; // Lights light_source { <0*LDXRadius,-1.5*LDXRadius,-1.5*LDXRadius> + LDXCenter color rgb 0.75 * light_multi area_light 200, 200, 5, 5 jitter circular orient } light_source { <1.5*LDXRadius,-1*LDXRadius,0.866026*LDXRadius> + LDXCenter color rgb 0.75 * light_multi area_light 200, 200, 5, 5 jitter circular orient } light_source { // Custom light 1: Above <0,-2*LDXRadius,0> + LDXCenter color rgb 0.5 * light_multi area_light 200, 200, 5, 5 jitter circular orient } light_source { // Custom light 2: Side <2*LDXRadius,-0*LDXRadius,-2*LDXRadius> + LDXCenter color rgb 0.5 * light_multi area_light 200, 200, 5, 5 jitter circular orient } #declare LDXBgR = 0; // Background Red #declare LDXBgG = 0; // Background Green #declare LDXBgB = 0; // Background Blue // Floor #if (LDXFloor != 0) object { plane { LDXFloorAxis, LDXFloorLoc hollow } texture { pigment { color rgb light_floor } finish { ambient 0 diffuse 0.9 reflection 0 } } } #end #declare LDXFloor = 0; camera { #declare LDXCamAspect = image_width/image_height; location LDXCameraLoc sky LDXCameraSky right LDXCamAspect * < -1,0,0 > look_at LDXCameraLookAt angle 26.460249 focal_point (LDXCameraLookAt*15+LDXCameraLoc)/16 aperture LDXRadius/20 blur_samples 25 // 4 ~ 100 } #declare LDXSkipCamera = 1;
白色竞赛纪念版 老爷车:
(2015-03-05更新:LDView新技能——广角镜头和边界线)
在LDView的Edit/Preferences里,General页里有一个配置项叫Field of view,这个值就等同于镜头焦距,默认是30,越接近90越是广角,例如下图是值为60时的效果:
注意广角的时候需要适当缩小光圈并正确的对焦,不然很容易像上图一样,糊了。
下图是值为45时的效果:
广角是不是更有压迫感?需要注意的是后期修改.pov文件的时候,camera { … angle 26.460249 } 里面的angle值需要改成和生成文件里一致,比如上图的angle就不是26.460249而是57.822403。
另外在LDView里export出povray文件的时候,在对话框下面的option里面,可以打开Geometry的Edge Lines选项,这可以给模型增加边界线,下图是打开Edge Lines和Conditional Edge Lines选项,Edge line radius(线粗)为0.15的结果:
哪个更好看?
(2016-01-19更新:地板反射)
地板部分代码改成:
// Floor #if (LDXFloor != 0) object { plane { LDXFloorAxis, LDXFloorLoc hollow } texture { pigment { color rgb <1.0,0.8,0.6> } finish { ambient 0.0 diffuse 0.3 reflection {0.3} } } } #end
看看效果?