用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
看看效果?
