diff options
-rw-r--r-- | source/blender/blenkernel/intern/ipo.c | 20 | ||||
-rw-r--r-- | source/blender/makesdna/DNA_camera_types.h | 2 | ||||
-rw-r--r-- | source/blender/makesdna/DNA_ipo_types.h | 9 | ||||
-rw-r--r-- | source/blender/src/buttons_editing.c | 18 | ||||
-rw-r--r-- | source/blender/src/editipo.c | 21 | ||||
-rwxr-xr-x | source/blender/yafray/intern/export_File.cpp | 102 | ||||
-rw-r--r-- | source/blender/yafray/intern/export_Plugin.cpp | 77 | ||||
-rw-r--r-- | source/blender/yafray/intern/export_Plugin.h | 3 | ||||
-rw-r--r-- | source/blender/yafray/intern/yafray_Render.cpp | 12 | ||||
-rw-r--r-- | source/blender/yafray/intern/yafray_Render.h | 3 |
10 files changed, 175 insertions, 92 deletions
diff --git a/source/blender/blenkernel/intern/ipo.c b/source/blender/blenkernel/intern/ipo.c index d7d373bbd3f..9476cd1aab7 100644 --- a/source/blender/blenkernel/intern/ipo.c +++ b/source/blender/blenkernel/intern/ipo.c @@ -168,8 +168,9 @@ int la_ar[LA_TOTIPO]= { MA_MAP1+MAP_DVAR, MA_MAP1+MAP_COLF, MA_MAP1+MAP_NORF, MA_MAP1+MAP_VARF }; +/* yafray: aperture & focal distance curves added */ int cam_ar[CAM_TOTIPO]= { - CAM_LENS, CAM_STA, CAM_END + CAM_LENS, CAM_STA, CAM_END, CAM_YF_APERT, CAM_YF_FDIST }; int snd_ar[SND_TOTIPO]= { @@ -1305,6 +1306,7 @@ void *get_ipo_poin(ID *id, IpoCurve *icu, int *type) else if(GS(id->name)==ID_CA) { Camera *ca= (Camera *)id; + /* yafray: aperture & focal distance params */ switch(icu->adrcode) { case CAM_LENS: poin= &(ca->lens); break; @@ -1312,6 +1314,10 @@ void *get_ipo_poin(ID *id, IpoCurve *icu, int *type) poin= &(ca->clipsta); break; case CAM_END: poin= &(ca->clipend); break; + case CAM_YF_APERT: + poin= &(ca->YF_aperture); break; + case CAM_YF_FDIST: + poin= &(ca->YF_dofdist); break; } } else if(GS(id->name)==ID_SO) { @@ -1563,15 +1569,25 @@ void set_icu_vars(IpoCurve *icu) } else if(icu->blocktype==ID_CA) { + /* yafray: aperture & focal distance params */ switch(icu->adrcode) { case CAM_LENS: icu->ymin= 5.0; - icu->ymax= 1000.0; break; + icu->ymax= 1000.0; + break; case CAM_STA: icu->ymin= 0.001f; break; case CAM_END: icu->ymin= 0.1f; + break; + case CAM_YF_APERT: + icu->ymin = 0.0; + icu->ymax = 2.0; + break; + case CAM_YF_FDIST: + icu->ymin = 0.0; + icu->ymax = 5000.0; } } else if(icu->blocktype==ID_SO) { diff --git a/source/blender/makesdna/DNA_camera_types.h b/source/blender/makesdna/DNA_camera_types.h index 2df957561dc..1f25f371f97 100644 --- a/source/blender/makesdna/DNA_camera_types.h +++ b/source/blender/makesdna/DNA_camera_types.h @@ -52,6 +52,8 @@ typedef struct Camera { /* yafray: dof params */ float YF_dofdist, YF_aperture; + short YF_bkhtype, YF_bkhbias; + float YF_bkhrot; struct Ipo *ipo; diff --git a/source/blender/makesdna/DNA_ipo_types.h b/source/blender/makesdna/DNA_ipo_types.h index a81c21ad19f..8363fa0481a 100644 --- a/source/blender/makesdna/DNA_ipo_types.h +++ b/source/blender/makesdna/DNA_ipo_types.h @@ -268,13 +268,16 @@ typedef short IPO_Channel; /* ******************** */ -#define CAM_TOTIPO 3 -#define CAM_TOTNAM 3 +/* yafray: totipo & totnam +2 because of added curves */ +#define CAM_TOTIPO 5 +#define CAM_TOTNAM 5 #define CAM_LENS 1 #define CAM_STA 2 #define CAM_END 3 - +/* yafray aperture & focal distance curves */ +#define CAM_YF_APERT 4 +#define CAM_YF_FDIST 5 /* ******************** */ diff --git a/source/blender/src/buttons_editing.c b/source/blender/src/buttons_editing.c index 2fd8a190196..b422ffbdc82 100644 --- a/source/blender/src/buttons_editing.c +++ b/source/blender/src/buttons_editing.c @@ -1331,15 +1331,27 @@ static void editing_panel_camera_type(Object *ob, Camera *cam) static void editing_panel_camera_yafraydof(Object *ob, Camera *cam) { uiBlock *block; + char *mst1, *mst2; block= uiNewBlock(&curarea->uiblocks, "editing_panel_camera_yafraydof", UI_EMBOSS, UI_HELV, curarea->win); uiNewPanelTabbed("Camera", "Editing"); if(uiNewPanel(curarea, block, "Yafray DoF", "Editing", 320, 0, 318, 204)==0) return; - uiDefButF(block, NUM, REDRAWVIEW3D, "DoFDist:", 470, 147, 160, 20, &cam->YF_dofdist, 0.0, 5000.0, 100, 0, "Sets distance to point of focus (use camera 'ShowLimits' to make visible in 3Dview)"); - uiDefButF(block, NUM, REDRAWVIEW3D, "Aperture:", 470, 125, 160, 20, &cam->YF_aperture, 0.0, 2.0, 0, 0, "Sets lens aperture, the larger, the more blur (use small values, 0 is no DoF)"); + uiDefButF(block, NUM, REDRAWVIEW3D, "DoFDist:", 10, 147, 180, 20, &cam->YF_dofdist, 0.0, 5000.0, 50, 0, "Sets distance to point of focus (use camera 'ShowLimits' to make visible in 3Dview)"); + uiDefButF(block, NUM, B_DIFF, "Aperture:", 10, 125, 180, 20, &cam->YF_aperture, 0.0, 2.0, 1, 0, "Sets lens aperture, the larger, the more blur (use small values, 0 is no DoF)"); - uiDefButS(block, TOG|BIT|2, 0, "Random sampling", 470, 90, 160, 20, &cam->flag, 0, 0, 0, 0, "Use noisy random Lens sampling instead of QMC"); + uiDefButS(block, TOG|BIT|2, B_DIFF, "Random sampling", 10, 90, 180, 20, &cam->flag, 0, 0, 0, 0, "Use noisy random Lens sampling instead of QMC"); + + uiDefBut(block, LABEL, 0, "Bokeh", 10, 60, 180, 19, 0, 0.0, 0.0, 0, 0, ""); + mst1 = "Bokeh Type%t|Disk1%x0|Disk2%x1|Triangle%x2|Square%x3|Pentagon%x4|Hexagon%x5|Ring%x6"; + uiDefButS(block, MENU, B_REDR, mst1, 10, 40, 89, 20, &cam->YF_bkhtype, 0.0, 0.0, 0, 0, "Sets Bokeh type"); + + if ((cam->YF_bkhtype!=0) && (cam->YF_bkhtype!=6)) { + mst2 = "Bokeh Bias%t|Uniform%x0|Center%x1|Edge%x2"; + uiDefButS(block, MENU, B_REDR, mst2, 100, 40, 90, 20, &cam->YF_bkhbias, 0.0, 0.0, 0, 0, "Sets Bokeh bias"); + if (cam->YF_bkhtype>1) + uiDefButF(block, NUM, B_DIFF, "Rotation:", 10, 15, 180, 20, &cam->YF_bkhrot, 0.0, 360.0, 100, 0, "Shape rotation amount in degrees"); + } } diff --git a/source/blender/src/editipo.c b/source/blender/src/editipo.c index 02505a7986d..9d7d02f80db 100644 --- a/source/blender/src/editipo.c +++ b/source/blender/src/editipo.c @@ -180,7 +180,8 @@ char *wo_ic_names[WO_TOTNAM] = { "HorR", "HorG", "HorB", "ZenR", "ZenG", "ZenB", "StarG", "StarDi", "StarSi" }; char *la_ic_names[LA_TOTNAM] = { "Energ", "R", "G", "B", "Dist", "SpoSi", "SpoBl", "Quad1", "Quad2", "HaInt" }; -char *cam_ic_names[CAM_TOTNAM] = { "Lens", "ClSta", "ClEnd" }; +/* yafray: two curve names added, 'Apert' for aperture, and 'FDist' for focal distance */ +char *cam_ic_names[CAM_TOTNAM] = { "Lens", "ClSta", "ClEnd", "Apert", "FDist" }; char *snd_ic_names[SND_TOTNAM] = { "Vol", "Pitch", "Pan", "Atten" }; char *ac_ic_names[AC_TOTNAM] = {"LocX", "LocY", "LocZ", "SizeX", "SizeY", "SizeZ", "QuatW", "QuatX", "QuatY", "QuatZ"}; @@ -286,7 +287,9 @@ char *getname_la_ei(int nr) char *getname_cam_ei(int nr) { - if(nr>=CAM_LENS && nr<=CAM_END) return cam_ic_names[nr-1]; + /* yafray: curves extended to CAM_YF_FDIST */ + //if(nr>=CAM_LENS && nr<=CAM_END) return cam_ic_names[nr-1]; + if(nr>=CAM_LENS && nr<=CAM_YF_FDIST) return cam_ic_names[nr-1]; return ic_name_empty[0]; } @@ -3781,16 +3784,26 @@ void common_insertkey() if(ob && ob->type==OB_CAMERA) { id= G.buts->lockpoin; if(id) { - event= pupmenu("Insert Key %t|Lens%x0|Clipping%x1"); + /* yafray: insert key extended with aperture and focal distance */ + if (G.scene->r.renderer==R_INTERN) + event= pupmenu("Insert Key %t|Lens%x0|Clipping%x1"); + else + event= pupmenu("Insert Key %t|Lens%x0|Clipping%x1|Aperture%x2|FocalDistance%x3"); if(event== -1) return; if(event==0) { insertkey(id, CAM_LENS); } - if(event==1) { + else if(event==1) { insertkey(id, CAM_STA); insertkey(id, CAM_END); } + else if(event==2) { + insertkey(id, CAM_YF_APERT); + } + else if(event==3) { + insertkey(id, CAM_YF_FDIST); + } } } } diff --git a/source/blender/yafray/intern/export_File.cpp b/source/blender/yafray/intern/export_File.cpp index eca34a65504..4bae9520a90 100755 --- a/source/blender/yafray/intern/export_File.cpp +++ b/source/blender/yafray/intern/export_File.cpp @@ -1107,15 +1107,16 @@ void yafrayFileRender_t::writeObject(Object* obj, const vector<VlakRen*> &VLR_li ostr.str(""); ostr << "\t\t\t<f a=\"" << idx1 << "\" b=\"" << idx2 << "\" c=\"" << idx3 << "\""; + // triangle uv and vcol indices + int ui1=0, ui2=1, ui3=2; + if (vlr->flag & R_DIVIDE_24) { + ui3++; + if (vlr->flag & R_FACE_SPLIT) { ui1++; ui2++; } + } + else if (vlr->flag & R_FACE_SPLIT) { ui2++; ui3++; } + TFace* uvc = vlr->tface; // possible uvcoords (v upside down) if (uvc) { - // use correct uv coords for this triangle - int ui1=0, ui2=1, ui3=2; - if (vlr->flag & R_DIVIDE_24) { - ui3++; - if (vlr->flag & R_FACE_SPLIT) { ui1++; ui2++; } - } - else if (vlr->flag & R_FACE_SPLIT) { ui2++; ui3++; } ostr << " u_a=\"" << uvc->uv[ui1][0] << "\" v_a=\"" << 1-uvc->uv[ui1][1] << "\"" << " u_b=\"" << uvc->uv[ui2][0] << "\" v_b=\"" << 1-uvc->uv[ui2][1] << "\"" << " u_c=\"" << uvc->uv[ui3][0] << "\" v_c=\"" << 1-uvc->uv[ui3][1] << "\""; @@ -1125,17 +1126,17 @@ void yafrayFileRender_t::writeObject(Object* obj, const vector<VlakRen*> &VLR_li if ((EXPORT_VCOL) && (vlr->vcol)) { // vertex colors float vr, vg, vb; - vr = ((vlr->vcol[0] >> 24) & 255)/255.0; - vg = ((vlr->vcol[0] >> 16) & 255)/255.0; - vb = ((vlr->vcol[0] >> 8) & 255)/255.0; + vr = ((vlr->vcol[ui1] >> 24) & 255)/255.0; + vg = ((vlr->vcol[ui1] >> 16) & 255)/255.0; + vb = ((vlr->vcol[ui1] >> 8) & 255)/255.0; ostr << " vcol_a_r=\"" << vr << "\" vcol_a_g=\"" << vg << "\" vcol_a_b=\"" << vb << "\""; - vr = ((vlr->vcol[1] >> 24) & 255)/255.0; - vg = ((vlr->vcol[1] >> 16) & 255)/255.0; - vb = ((vlr->vcol[1] >> 8) & 255)/255.0; + vr = ((vlr->vcol[ui2] >> 24) & 255)/255.0; + vg = ((vlr->vcol[ui2] >> 16) & 255)/255.0; + vb = ((vlr->vcol[ui2] >> 8) & 255)/255.0; ostr << " vcol_b_r=\"" << vr << "\" vcol_b_g=\"" << vg << "\" vcol_b_b=\"" << vb << "\""; - vr = ((vlr->vcol[2] >> 24) & 255)/255.0; - vg = ((vlr->vcol[2] >> 16) & 255)/255.0; - vb = ((vlr->vcol[2] >> 8) & 255)/255.0; + vr = ((vlr->vcol[ui3] >> 24) & 255)/255.0; + vg = ((vlr->vcol[ui3] >> 16) & 255)/255.0; + vb = ((vlr->vcol[ui3] >> 8) & 255)/255.0; ostr << " vcol_c_r=\"" << vr << "\" vcol_c_g=\"" << vg << "\" vcol_c_b=\"" << vb << "\""; } ostr << " shader_name=\"" << fmatname << "\" />\n"; @@ -1151,25 +1152,30 @@ void yafrayFileRender_t::writeObject(Object* obj, const vector<VlakRen*> &VLR_li ostr << "\t\t\t<f a=\"" << idx1 << "\" b=\"" << idx2 << "\" c=\"" << idx3 << "\""; + // increment uv & vcol indices + ui1 = (ui1+2) & 3; + ui2 = (ui2+2) & 3; + ui3 = (ui3+2) & 3; + if (uvc) { - ostr << " u_a=\"" << uvc->uv[2][0] << "\" v_a=\"" << 1-uvc->uv[2][1] << "\"" - << " u_b=\"" << uvc->uv[3][0] << "\" v_b=\"" << 1-uvc->uv[3][1] << "\"" - << " u_c=\"" << uvc->uv[0][0] << "\" v_c=\"" << 1-uvc->uv[0][1] << "\""; + ostr << " u_a=\"" << uvc->uv[ui1][0] << "\" v_a=\"" << 1-uvc->uv[ui1][1] << "\"" + << " u_b=\"" << uvc->uv[ui2][0] << "\" v_b=\"" << 1-uvc->uv[ui2][1] << "\"" + << " u_c=\"" << uvc->uv[ui3][0] << "\" v_c=\"" << 1-uvc->uv[ui3][1] << "\""; } if ((EXPORT_VCOL) && (vlr->vcol)) { // vertex colors float vr, vg, vb; - vr = ((vlr->vcol[2] >> 24) & 255)/255.0; - vg = ((vlr->vcol[2] >> 16) & 255)/255.0; - vb = ((vlr->vcol[2] >> 8) & 255)/255.0; + vr = ((vlr->vcol[ui1] >> 24) & 255)/255.0; + vg = ((vlr->vcol[ui1] >> 16) & 255)/255.0; + vb = ((vlr->vcol[ui1] >> 8) & 255)/255.0; ostr << " vcol_a_r=\"" << vr << "\" vcol_a_g=\"" << vg << "\" vcol_a_b=\"" << vb << "\""; - vr = ((vlr->vcol[3] >> 24) & 255)/255.0; - vg = ((vlr->vcol[3] >> 16) & 255)/255.0; - vb = ((vlr->vcol[3] >> 8) & 255)/255.0; + vr = ((vlr->vcol[ui2] >> 24) & 255)/255.0; + vg = ((vlr->vcol[ui2] >> 16) & 255)/255.0; + vb = ((vlr->vcol[ui2] >> 8) & 255)/255.0; ostr << " vcol_b_r=\"" << vr << "\" vcol_b_g=\"" << vg << "\" vcol_b_b=\"" << vb << "\""; - vr = ((vlr->vcol[0] >> 24) & 255)/255.0; - vg = ((vlr->vcol[0] >> 16) & 255)/255.0; - vb = ((vlr->vcol[0] >> 8) & 255)/255.0; + vr = ((vlr->vcol[ui3] >> 24) & 255)/255.0; + vg = ((vlr->vcol[ui3] >> 16) & 255)/255.0; + vb = ((vlr->vcol[ui3] >> 8) & 255)/255.0; ostr << " vcol_c_r=\"" << vr << "\" vcol_c_g=\"" << vg << "\" vcol_c_b=\"" << vb << "\""; } ostr << " shader_name=\"" << fmatname << "\" />\n"; @@ -1443,7 +1449,6 @@ void yafrayFileRender_t::writeLamps() } } - // write main camera void yafrayFileRender_t::writeCamera() { @@ -1456,15 +1461,12 @@ void yafrayFileRender_t::writeCamera() ostr << "type=\"perspective\""; // render resolution including the percentage buttons (aleady calculated in initrender for R renderdata) - int xres = R.r.xsch; - int yres = R.r.ysch; - ostr << " resx=\"" << xres << "\" resy=\"" << yres; - - // aspectratio can be set in Blender as well using aspX & aspY, need an extra param. for yafray cam. - float aspect = 1; - if (R.r.xsch < R.r.ysch) aspect = float(R.r.xsch)/float(R.r.ysch); + ostr << " resx=\"" << R.r.xsch << "\" resy=\"" << R.r.ysch << "\""; - ostr << "\" focal=\"" << mainCamLens/(aspect*32.0) << "\""; + float f_aspect = 1; + if ((R.r.xsch*R.r.xasp)<=(R.r.ysch*R.r.yasp)) f_aspect = float(R.r.xsch*R.r.xasp)/float(R.r.ysch*R.r.yasp); + ostr << "\n\tfocal=\"" << mainCamLens/(f_aspect*32.f); + ostr << "\" aspect_ratio=\"" << R.ycor << "\""; // dof params, only valid for real camera if (maincam_obj->type==OB_CAMERA) { @@ -1474,6 +1476,28 @@ void yafrayFileRender_t::writeCamera() string st = "on"; if (cam->flag & CAM_YF_NO_QMC) st = "off"; ostr << " use_qmc=\"" << st << "\""; + // bokeh params + st = "disk1"; + if (cam->YF_bkhtype==1) + st = "disk2"; + else if (cam->YF_bkhtype==2) + st = "triangle"; + else if (cam->YF_bkhtype==3) + st = "square"; + else if (cam->YF_bkhtype==4) + st = "pentagon"; + else if (cam->YF_bkhtype==5) + st = "hexagon"; + else if (cam->YF_bkhtype==6) + st = "ring"; + ostr << "\n\tbokeh_type=\"" << st << "\""; + st = "uniform"; + if (cam->YF_bkhbias==1) + st = "center"; + else if (cam->YF_bkhbias==2) + st = "edge"; + ostr << " bokeh_bias=\"" << st << "\""; + ostr << " bokeh_rotation=\"" << cam->YF_bkhrot << "\""; } ostr << " >\n"; @@ -1537,10 +1561,8 @@ void yafrayFileRender_t::writePathlight() case 5 : ostr << " samples=\"2048\" \n"; break; default: ostr << " samples=\"512\" \n"; } - float aspect = 1; - if (R.r.xsch < R.r.ysch) aspect = float(R.r.xsch)/float(R.r.ysch); float sbase = 2.0/float(R.r.xsch); - ostr << " cache=\"on\" use_QMC=\"on\" threshold=\"" <<R.r.GIrefinement<<"\""<<endl; + ostr << " cache=\"on\" use_QMC=\"on\" threshold=\"" << R.r.GIrefinement << "\"" << endl; ostr << " cache_size=\"" << sbase*R.r.GIpixelspersample << "\" shadow_threshold=\"" << 1.0 - R.r.GIshadowquality << "\" grid=\"82\" search=\"35\" >\n"; } diff --git a/source/blender/yafray/intern/export_Plugin.cpp b/source/blender/yafray/intern/export_Plugin.cpp index 94afe696a3b..0db51bb0120 100644 --- a/source/blender/yafray/intern/export_Plugin.cpp +++ b/source/blender/yafray/intern/export_Plugin.cpp @@ -756,6 +756,8 @@ void yafrayPluginRender_t::writeMaterialsAndModulators() map<string, MTex*>::const_iterator mtexL = used_textures.find(string(tex->id.name)); if (mtexL!=used_textures.end()) { + params.clear(); //!!! + lparams.clear(); char temp[32]; sprintf(temp, "_map%d", m); params["type"] = yafray::parameter_t("blendermapper"); @@ -909,7 +911,7 @@ void yafrayPluginRender_t::genUVcoords(vector<yafray::GFLOAT> &uvcoords, VlakRen { if (uvc) { - // use correct uv coords for this triangle + // tri uv split indices int ui1=0, ui2=1, ui3=2; if (vlr->flag & R_DIVIDE_24) { ui3++; @@ -933,24 +935,33 @@ void yafrayPluginRender_t::genUVcoords(vector<yafray::GFLOAT> &uvcoords, VlakRen } } -void yafrayPluginRender_t::genVcol(vector<yafray::CFLOAT> &vcol,VlakRen *vlr, - int p1,int p2,int p3) +void yafrayPluginRender_t::genVcol(vector<yafray::CFLOAT> &vcol, VlakRen *vlr, bool comple) { if (vlr->vcol) { - // vertex colors - float vr, vg, vb; - vr = ((vlr->vcol[p1] >> 24) & 255)/255.0; - vg = ((vlr->vcol[p1] >> 16) & 255)/255.0; - vb = ((vlr->vcol[p1] >> 8) & 255)/255.0; + // tri vcol split indices + int ui1=0, ui2=1, ui3=2; + if (vlr->flag & R_DIVIDE_24) { + ui3++; + if (vlr->flag & R_FACE_SPLIT) { ui1++; ui2++; } + } + else if (vlr->flag & R_FACE_SPLIT) { ui2++; ui3++; } + if (comple) { + ui1 = (ui1+2) & 3; + ui2 = (ui2+2) & 3; + ui3 = (ui3+2) & 3; + } + float vr = ((vlr->vcol[ui1] >> 24) & 255)/255.0; + float vg = ((vlr->vcol[ui1] >> 16) & 255)/255.0; + float vb = ((vlr->vcol[ui1] >> 8) & 255)/255.0; vcol.push_back(vr); vcol.push_back(vg); vcol.push_back(vb); - vr = ((vlr->vcol[p2] >> 24) & 255)/255.0; - vg = ((vlr->vcol[p2] >> 16) & 255)/255.0; - vb = ((vlr->vcol[p2] >> 8) & 255)/255.0; + vr = ((vlr->vcol[ui2] >> 24) & 255)/255.0; + vg = ((vlr->vcol[ui2] >> 16) & 255)/255.0; + vb = ((vlr->vcol[ui2] >> 8) & 255)/255.0; vcol.push_back(vr); vcol.push_back(vg); vcol.push_back(vb); - vr = ((vlr->vcol[p3] >> 24) & 255)/255.0; - vg = ((vlr->vcol[p3] >> 16) & 255)/255.0; - vb = ((vlr->vcol[p3] >> 8) & 255)/255.0; + vr = ((vlr->vcol[ui3] >> 24) & 255)/255.0; + vg = ((vlr->vcol[ui3] >> 16) & 255)/255.0; + vb = ((vlr->vcol[ui3] >> 8) & 255)/255.0; vcol.push_back(vr); vcol.push_back(vg); vcol.push_back(vb); } else @@ -1003,10 +1014,8 @@ void yafrayPluginRender_t::genFace(vector<int> &faces,vector<string> &shaders,ve faces.push_back(idx1); faces.push_back(idx2); faces.push_back(idx3); - if(has_uv) genUVcoords(uvcoords,vlr,uvc); - - // since Blender seems to need vcols when uvs are used, for yafray only export when the material actually uses vcols - if (EXPORT_VCOL) genVcol(vcol, vlr, 0, 1, 2); + if(has_uv) genUVcoords(uvcoords, vlr, uvc); + if (EXPORT_VCOL) genVcol(vcol, vlr); } void yafrayPluginRender_t::genCompleFace(vector<int> &faces,/*vector<string> &shaders,*/vector<int> &faceshader, @@ -1030,7 +1039,7 @@ void yafrayPluginRender_t::genCompleFace(vector<int> &faces,/*vector<string> &sh faces.push_back(idx1); faces.push_back(idx2); faces.push_back(idx3); if (has_uv) genUVcoords(uvcoords, vlr, uvc, true); - if (EXPORT_VCOL) genVcol(vcol, vlr, 2, 3, 0); + if (EXPORT_VCOL) genVcol(vcol, vlr, true); } void yafrayPluginRender_t::genVertices(vector<yafray::point3d_t> &verts, int &vidx, @@ -1420,7 +1429,6 @@ void yafrayPluginRender_t::writeLamps() } } - // write main camera void yafrayPluginRender_t::writeCamera() { @@ -1432,10 +1440,11 @@ void yafrayPluginRender_t::writeCamera() params["type"] = yafray::parameter_t("perspective"); params["resx"]=yafray::parameter_t(R.r.xsch); params["resy"]=yafray::parameter_t(R.r.ysch); - float aspect = 1; - if (R.r.xsch < R.r.ysch) aspect = float(R.r.xsch)/float(R.r.ysch); - params["focal"]=yafray::parameter_t(mainCamLens/(aspect*32.0)); + float f_aspect = 1; + if ((R.r.xsch*R.r.xasp)<=(R.r.ysch*R.r.yasp)) f_aspect = float(R.r.xsch*R.r.xasp)/float(R.r.ysch*R.r.yasp); + params["focal"] = yafray::parameter_t(mainCamLens/(f_aspect*32.f)); + params["aspect_ratio"] = yafray::parameter_t(R.ycor); // dof params, only valid for real camera if (maincam_obj->type==OB_CAMERA) { @@ -1446,6 +1455,28 @@ void yafrayPluginRender_t::writeCamera() params["use_qmc"] = yafray::parameter_t("off"); else params["use_qmc"] = yafray::parameter_t("on"); + // bokeh params + string st = "disk1"; + if (cam->YF_bkhtype==1) + st = "disk2"; + else if (cam->YF_bkhtype==2) + st = "triangle"; + else if (cam->YF_bkhtype==3) + st = "square"; + else if (cam->YF_bkhtype==4) + st = "pentagon"; + else if (cam->YF_bkhtype==5) + st = "hexagon"; + else if (cam->YF_bkhtype==6) + st = "ring"; + params["bokeh_type"] = yafray::parameter_t(st); + st = "uniform"; + if (cam->YF_bkhbias==1) + st = "center"; + else if (cam->YF_bkhbias==2) + st = "edge"; + params["bokeh_bias"] = yafray::parameter_t(st); + params["bokeh_rotation"] = yafray::parameter_t(cam->YF_bkhrot); } params["from"]=yafray::parameter_t( diff --git a/source/blender/yafray/intern/export_Plugin.h b/source/blender/yafray/intern/export_Plugin.h index d2d9128d824..7dbcdfbe7fc 100644 --- a/source/blender/yafray/intern/export_Plugin.h +++ b/source/blender/yafray/intern/export_Plugin.h @@ -47,8 +47,7 @@ class yafrayPluginRender_t : public yafrayRender_t virtual bool finishExport(); void genUVcoords(std::vector<yafray::GFLOAT> &uvcoords,VlakRen *vlr,TFace* uvc, bool comple=false); - void genVcol(std::vector<yafray::CFLOAT> &vcol,VlakRen *vlr, - int p1,int p2,int p3); + void genVcol(std::vector<yafray::CFLOAT> &vcol, VlakRen *vlr, bool comple=false); void genFace(std::vector<int> &faces,std::vector<std::string> &shaders,std::vector<int> &faceshader, std::vector<yafray::GFLOAT> &uvcoords,std::vector<yafray::CFLOAT> &vcol, std::map<VertRen*, int> &vert_idx,VlakRen *vlr, diff --git a/source/blender/yafray/intern/yafray_Render.cpp b/source/blender/yafray/intern/yafray_Render.cpp index bbb5855b964..c0bf86b1840 100644 --- a/source/blender/yafray/intern/yafray_Render.cpp +++ b/source/blender/yafray/intern/yafray_Render.cpp @@ -70,18 +70,6 @@ bool yafrayRender_t::exportScene() } -// find object by name in global scene (+'OB'!) -Object* yafrayRender_t::findObject(const char* name) -{ - Base* bs = (Base*)G.scene->base.first; - while (bs) { - Object* obj = bs->object; - if (!strcmp(name, obj->id.name)) return obj; - bs = bs->next; - } - return NULL; -} - // gets all unique face materials & textures, // and sorts the facelist rejecting anything that is not a quad or tri, // as well as associating them again with the original Object. diff --git a/source/blender/yafray/intern/yafray_Render.h b/source/blender/yafray/intern/yafray_Render.h index e5c710c465d..b14b19a568f 100644 --- a/source/blender/yafray/intern/yafray_Render.h +++ b/source/blender/yafray/intern/yafray_Render.h @@ -74,9 +74,7 @@ class yafrayRender_t // mtds bool exportScene(); - void addDupliMtx(Object* obj); - bool objectKnownData(Object* obj); protected: @@ -95,7 +93,6 @@ class yafrayRender_t std::map<Image*, Material*> imagetex; std::map<Image*, std::string> imgtex_shader; - Object* findObject(const char* name); bool getAllMatTexObs(); virtual void writeTextures()=0; |