BLENDER_v245REND SceneGLOB  0ox."SRxh.xSR1-AnimationE$"Pp(." DATAEDATAPME DATAPM DATAPMDATA DATA (ٽDATA(ٽ DATA(ٽDATA`DATA`DATAXK`DATAXKDATA$"XKDATA$"DATAP"PMDATA"h^ PEDATAh^ ȟ" DATAȟh^ (ٽPMDATA2ȟ(ٽ DATA2pDATAp84$2(ٽDATA84$Xd pDATAXd HX"84$(ٽDATAHX"d Xd E`DATAd | HX"DATA| P d DATAP P | `DATAP (P XKDATA(%P  DATA%%(DATA%%XKDATAؓ%$"`DATAؓx$"DATAxؓXKDATAh%xXK$"DATAh% `DATAh%$"DATAp+E`O& ؍(DATA Link and MaterialsEditing>DATA  MeshEditingF>DATA  Anim settingsObject>DATA HQ DrawObjectF>DATAHQ0P ConstraintsObject>DATA0P@^!HQEffectsObjectDATA@^!(]!0PHooksObjectF> DATA(]! @^!Particle InteractionObject>HQDATA  (]!SoftbodyObject>HQDATA h  OutputRender>DATAh ( RenderRenderF>DATA(؍(h AnimRender>DATA؍((FormatRender>DATA&w333?V,@DhCDhCC(BDC?z?DATAhy&333?V,/9DATA+8&p PM(ٽ !  DATA8&n+XKG==o?X'((DATA((Transform PropertiesView3d>DATA((3D Viewport propertiesView3d>"DATAXr'333?V<????????G==o? A*A?G==o??????*A B??=C ݢM@ݢM@ݢM@? DATAh'yX333?V</9DATAn2 8&(ٽ??PףH%$((DATA(Transform PropertiesIpo!>DATA(%$v($333?V\zC̽̌?zC@ #< #<`jFzD OBzC̽̌?DATA($z%$333?V\CC|||??l|DATAx|($ 333?V\zCCHBC|||?CFC= ADATAxx|} 333?V\Xi =rttDATA|8x| 333?V\?zDzDBCl||ll|zDzD=HB DATA8X 333?V\BCBCl|llFzD #<HB DATAXr8333?V\??? ???? A???PA A!O?j?}GCHB? A B? #<C DATAhyX333?V\/9DATA2 (n$"XK Xx0x( DATAx( Link and MaterialsEditing>DATA x(MeshEditingF>DATAXx333?VLzCB{ µCB ?BFB= ADATA3 Xx 333?VLzCCHBC$?CFC= ADATA3 w0333?VL#DhC`DpJgChCC(BDC?z?DATAh0y3 333?VL/9DATA(2 ` $"} ?=o?.`d! p DATA p Transform PropertiesView3d>DATAp  3D Viewport propertiesView3d>"DATA`dzX*333?YDATAH`LampLampF>DATAHSpotLamp>DATA`Texture and InputLamp>DATA` Map ToLamp>DATA h`PreviewMaterial>DATAh0v MaterialMaterial>DATA0v0'hPreviewWorld>DATA0''0vWorldWorldF>DATA''0'Mist Stars PhysicsWorld>DATA'`''Texture and InputWorld>DATA`'@''Map ToWorld>'DATA@'( `'OutputRender>DATA(  @'RenderRenderF>DATA @( AnimRender>(DATA@ FormatRender>DATA@Link and MaterialsEditing>DATAMeshEditingF>DATAMesh ToolsEditing>DATA8Mesh Tools 1Editing^>DATA8CameraEditingF>DATA8ShadersMaterial> "DATAtTextureMaterial>4DATAteAnim settingsObject>DATAedtDrawObjectF>DATAd0=eConstraintsObject>DATA0=X7dScriptlinksScript>DATAX740=EffectsObjectdDATA4[X7Map InputMaterial>DATA[@X4Map ToMaterial>4DATA@XN[AnimAnim>DATAN(@XSoundSound>DATA( NListenerSoundF>DATA (SequencerSound>DATAx ArmatureEditingF>DATAx "RampsMaterial>hDATA "(!xMirror TranspMaterial>DATA(!8_ "Mist / Stars / PhysicsWorld>8_DATA8_8(!Amb OccWorld>DATA8( 8_Shadow and SpotLamp>DATA( 8ModifiersEditing>DATA# ( ShapesEditing>( DATA#  ;*MultiresEditing>DATA ;*(# Render LayersRender>@'DATA(x{ ;*BakeRender>DATAx{@(Links and PipelineMaterialF>DATA@x{SSSMaterial> "DATA@PreviewTexture>DATAyTextureTextureF>DATAy{ColorsTextureF>DATA{hyImageTexture>DATAh{Map ImageTexture>DATAwp 333?(DHhC}D* hCC(BDC?z?."mDATA$p ~8"333?(DATA8"rH#p 333?(??? ???? A??@PA Aj?c3>}GCHB? A B? #<C DATAH#z)$8"333?( M M M??DATAh)$yH#333?(Import a Wavefront OBJC:\muray\Meshes\.\der Foundation\..\der\..\balancebot.obj DATA((!#DATA8`|؟q?G@AHMOO lL{(FFDATATransform PropertiesView3d,>DATAView PropertiesView3dT>"DATA{r333?ݕ/?V~'?3F:?>T8175e?4>Z& 4?ߕ/?7F:?81X~>75e?'?T3>ne@>N@?%?{J''>/?6[G??T?Ud'@ l4 Up11A 4Ap9?6E?;@f2c>>1x¶BG֟'BeA(@q?G@AHMݕ/?V~'?3F:?>T8175e?4>Z& 4?H?N+Z#o@27A B??|i;=C7?X</@/@/@_s?q@F?? DATA(v({333?zC̽̌?zC@22 #< #<`jFzD OBzC̽̌?DATA(z333? 1 12 1??2DATA8( 333??zDzDBD22FzD #<HB DATA8w(333?DdC8CnD fCC(BDC?z?DATAh(y8333? SELECT IMAGE PICTURESC:\SGWeb\octree\data\pbug Folder/ender.app/Contents/Resources/PaintedMetal.jpg `WDlDDATA8x ؟`|w=c >o?OO  L&(X X DATATransform PropertiesView3d,>DATAView PropertiesView3dT>"DATAx&}  333?8 c?9;0DDATA$ ~&333?8DATArd" 333?8????????w=c >o?{IA@y?w=c >o??????{IA B??*==C7?X<ZH@ZH@ZH@? DATA(d"vP333?8zC̽̌?zC@22 #< #<`jFzD OBzC̽̌?DATAPz0"d"333?8 1 12 1??2DATA0"x P 333?8?zDzDBD22FzD #<HB DATAx w(0"333?8DdC8CnD fCC(BDC?z?DATAh(yx 333?8EOpen Text FileICTURESC:\uray\..\es\..\umpbug Folder/ender.app/Contents/Resources/processing_export.py *2DATAx "8؟Л ‹>/7?o?QQkl l\P!["&&.!/!DATA.!/!Transform PropertiesView3d,>DATA/!.!View PropertiesView3dT>"DATAP!r333?x ???S^g*??%??% *=S^3g??‹o‹>/7/7?o! }:]9?x#a@x#a&?yyz*=R^3g??‹>/7?o????S^g*??x#a@? B?=|<=C*S^g7?X<???? DATA(v`%P!333?x zC̽̌?zC@22 #< #<`jFzD OBzC̽̌?DATA`%z333?x  1 12 1??2DATA"`% 333?x ?zDzDBD22FzD #<HB DATA"w["333?x DdC8CnD fCC(BDC?z?DATAh["y"333?x LSave FileNT PICTURES/Users/ton/Desktop/umpbug Folder/ender.app/Contents/Resources/untitled.blend DATA"x Л ؟w=і>o?QQkl\& DATATransform PropertiesView3d,>DATAView PropertiesView3dT>"DATA&{X"$333?"CC?8?\>d?DATAX"$r8&333?"????????w=і>o?{IA @y?w=і>o??????{IA B??*==C7?X<ZH@ZH@ZH@? DATA(8v`&X"$333?"zC̽̌?zC@22 #< #<`jFzD OBzC̽̌?DATA`&z8333?" 1 12 1??2oDATA,oBOp=ADATA,oCS@ff."DATA`& 333?"?zDzDBD22FzD #<HB DATAw 333?"DdC8CnD fCC(BDC?z?DATAh y333?"Save AseNT PICTURESC:\SGWeb\octree\data\ngV\..\der/ender.app/Contents/Resources/balancebotntitled.blend;SRx"x xSR3-Materialodel SingQ"8 ." DATADATA DATA( DATA((|DATA(|(<DATA)(|<DATA)@DATA@8 )DATA8 @,<DATA(8 ,DATA(/DATA/(,DATA/DATADATADATAN"(DATAN" {(|DATA {vN"(DATAv` {(|DATA` v)DATA -`@DATA-( )@DATA(-@DATA((|8 DATA8 DATA@DATAp 8 DATAp H "(|(DATAH "p>"p )(DATAp>"Z"H "/DATAZ"p>"/8 DATA Z"/(DATA 0(DATA0H /DATAH"0)DATA"Q"HDATAQ""DATA8 (T(|(?@Pף;;!0 M8DATA8OutputRender>DATA8RenderRenderF>DATAAnimRender>DATAFormatRender>DATA0 @#333?V\~CA~CA!?AFA= ADATA@#0  333?V\zCCHBC ?CFC= ADATAw@#333?V\DhC?DhCC(BDC?z?mDATAr`333?V\??? ???? A??@PA Aj?c3>}GCHB? A B? #<C DATA`zM333?V\@̌AR|B1@lA A@CC #<@DATAhMy`333?V\/9DATA(T(U8 )@ !  DATA(U(V(T8 @G@? JL-=-=W-X~8Z!@DATAOutputRender>DATARenderRender>DATA AnimRender0>DATA FormatRenderH>DATA PreviewMaterial>DATAMaterialMaterial>DATA@ShadersMaterial0>DATA@XTextureMaterialD>DATAXp@Map InputMaterial\>DATAp(XMap ToMaterial`>DATA(@pRampsMaterial>DATA@(Mirror TranspMaterialH>DATA8wa"333?VChCCvgCC(BDC?z?DATAa"rX8333?VJ>H!?)xu?i6>Pbܗ=(?^L?a?滎z?J>#xu?ܗ=Hi6>(? ?Pb^L?\FAA?4[?[!?@jG>gb>Pb>4Im>k&?]M^L<0@AzA=>Kc<2֍7&> ?:x¸A1vB,jB~@G@? JLJ>H!?)xu?i6>Pbܗ=(?^L?a?滎z?@?$$OA B?=Ch?j(4?t'>d DATA(XvZ!a"333?VzC AzC A #< #<`jFzD OBDATAhZ!yX333?V;SAVE FILE/usr/home/intrr/blender/blend/untitled.blendDATA(V(U(|(/8 U.=w=o?+=+=W+X,Xy'DATAy'r333?W???h?j(4?t'>????hj(4t'?U.=w=o??OA B??=Ch?j(4?t'>dEh@Eh@Eh@? DATAwy'333?WDdC>9C,DeCC(BDC?z?DATA(v333?WzC AzC A #< #<`jFzD OBDATAhy333?W SAVE FILE/Users/ton/Desktop/der/blend/untitled.blendDATA(V/e?B$?AHM+++US QDATA r333?W |ݕ/?U~'?3F:?>T8165e?2>Z& 4?ߕ/?7F:?81W~>85e?'?T2>ne@>M@?4z?'''䷄?K??T?v|@?l211A 4Atp>?@@FC>G ?4xB֟&BĭeA(@e?B$?AHMݕ/?U~'?3F:?>T8165e?2>Z& 4?H?N,Z#OA B??=Ch?j(4?t'>dA@A@A@? DATAw( 333?W |DdC>9C,DeCC(BDC?z?DATA((vQ333?W |zC AzC A #< #<`jFzD OBDATAhQy(333?W | SAVE FILE/Users/ton/Desktop/der/blend/untitled.blendDATA()&=+=o?US`W!DATA`W!r333?W ?3?3:-vk(4??3?3;@k(40v@?&=PU1n;+=ꉖø;ZO{:?JXA54U0AC;@j(40v@?&=+=o??3?3:-vk(4?5?5IXA B??=C:j(4?.vdٚ@ٚ@ٚ@? DATAw`W!333?W DdC>9C,DeCC(BDC?z?DATA(v333?W zC AzC A #< #<`jFzD OBDATAhy333?W SAVE FILE/Users/ton/Desktop/der/blend/untitled.blendSRxx "SR4-Sequence5 x##Ȝ." DATA5 H DATAH  5  DATA X H  DATAX   DATA X DATA DATA0DATA00!DATA0!(0DATA(4 0!DATA4 (TDATA4 TDATAx#DATAx#DATA#8H  DATA8#5 X DATA85  DATAX DATA  DATA hH DATAhP 0 DATAPh0DATAP0!DATA0(DATA(0!DATA84 0!DATA8(4 DATA8DATAX0DATAX4 DATAAX DATAAB0!DATABPBA(x#DATAPBȜBx#DATAȜPBx#DATAW5  X VxZ DATAOutputRender>DATARenderRenderF>DATA AnimRender>DATA FormatRender>DATAVwxZ333?WDhCvDhCC(BDC?z?DATAhxZyV333?W/9DATAWXH  0 !  DATAXZW x#8=i>o? eDATAY333?W&~CB~CB ?BFB= ADATAYx(333?W&zCAzCA  A@FB= A DATA(reY333?W&????????8=i>o?fffAD&@??fffA B? #<C DATAhey(333?W&AVE TARGA/t1.blend9DATAZ\X4 0(8=H>o?UUU [mDATA[xHW333?W*zCAzCA1||1 A@FB= A DATAHWrm[333?W*????????8=H>o?fffA*@??fffA B? #<C DATAhmyHW333?W*AVE TARGA/t1.blend9DATA\Z0!4 8=>o?SSST] _DATA(]vb333?W.B̽̌?B̽̌? #< #<`jFzD SQB̽̌?DATAbr _]333?W.????????8=>o?fffA@??fffA B? #<C DATAh _yb333?W.OAD FILE/9DATA\0!(x#8=i>o? DATAxs333?W1zCAzCA A@FB= A DATAsr333?W1????????8=i>o?fffAD&@??fffA B? #<C DATAhys333?W1AVE TARGA/t1.blend9SRxx SR5-Scripting8h0." DATA8DATAp8 DATAp DATApDATAHDATAHDATAHDATA DATA hDATAh DATApDATA@HDATA@pDATA@HDATADATA`H DATA` DATA` DATA8HDATA88DATA88hDATAhDATAXhDATAX hDATAXDATA00Hp !  DATA000H z==o?(000DATA00Transform PropertiesView3d>DATA003D Viewport propertiesView3d>"DATA(r0333?Y.|????????z==o?&A*A?z==o??????*A B??=C ?@?@?@? DATAh0y(333?Y.|/9DATA00h ??Pף L000DATA0Transform PropertiesIpo!>DATAx0}^ 333?Y/|Xi> =DATA^{h00333?Y/|CCx??|?DATA(h0v(^333?Y/|zC̽̌?zC@;; #< #<`jFzD OBzC̽̌?DATA(zPh0333?Y/|CC|||??l|00DATA,0BOp=ADATAP ( 333?Y/|zCCHBC|||?CFC= ADATA |P 333?Y/|?zDzDBCl||ll|zDzD=HB DATA  333?Y/|BCBCl|llFzD #<HB DATAr333?Y/|??? ???? A???PA A!O?j?}GCHB? A B? #<C DATAhy333?Y/|/9DATA08hODATALink and MaterialsEditing>DATAMeshEditingF>DATAAnim settingsObject>DATADrawObjectF>DATAConstraintsObject>DATAEffectsObjectDATA0HooksObjectF>DATA0HParticle InteractionObject>DATAH {0SoftbodyObject>DATA {8|HOutputRender>DATA8|P} {RenderRenderF>DATAP}h~8|AnimRender>DATAh~P}FormatRender>DATAh~ScriptlinksScript>DATAw333?Y0|ChC#DhCC(BDC?z?DATAhy333?Y0|/9SC."pSCScenetageain0 ()'_s?q@F?h= ;t@h= ;t@h= ;t@=@ dd??< 2ddZ! ??????//backbuf/tmp\//ftype@&#@^@&^#D 'DATA c0DATAc' (DATA'c' DATA'c@('c(DATA@(c('_(DATA(c()@(pDATA()c(.JDATA(@ b,d'=A@DATALmL?B ?o: ??p# #<=DATA@h1 RenderLayerIMtPN@IMPaintedMetal.jpgG//PaintedMetal.jpgIMt>@IMUntitledIUntitledx.x.CACACameraamera.001L>DB=B B@?WO(0aWOWorldg=pb>>===??A@pA A?L=TXhXiTXprocessing_export.py`Pt5"5"DATA`C:\processing_export.pyDATAЄ8DATAЄW" FREEDATA3"Є  FREEDATA3"P3"tFREEDATAP3"3"3"(*FREEDATA3"3"P3"5$ FREEDATA3"(4"3"8,FREEDATA(4"p4"3"`-FREEDATAp4"4"(4"-FREEDATA4"5"p4".FREEDATA5"H5"4"PFREEDATAH5"5"5"tFREEDATA5"5"H5"FREEDATA5" 6"5"ЗFREEDATA 6"h6"5"DATAh6"6" 6"(u3FREEDATA6"6"h6"%e EDATA6"@7"6"P.FREEDATA@7"7"6"/FREEDATA7"7"@7"h/FREEDATA7"8"7"@:FREEDATA8"M7"uFREEDATAMHM8"@qd1DATAHMMMFREEDATAMMHMuFREEDATAM NMh;FREEDATA NhNMeFREEDATAhNN NeFREEDATANNhN DATAN@ONX%ndEDATA@OON v(nd1DATAOO@Ov(DATAOPOTFREEDATAP`PO %%FREEDATA`PPPvFREEDATAPP`PwFREEDATAP8QPxDATA8QQPTFREEDATAQQ8QPxFREEDATAQRQxFREEDATARXRQKFREEDATAXRRR%FREEDATARRXRK"EFREEDATAR0SRh=FREEDATA0SxSR=sDATAxSS0S`%s:DATASTxSP=FREEDATATPTS9 DATAPTTTx:1= DATATTPTXKFREEDATAT(UT%FREEDATA(UpUTx DATApUU(U(yFREEDATAUVpUpyFREEDATAVHVUydDATAHVVVzFREEDATAVVHVHzFREEDATAV WVzDATA W%Vz8DATA%% W { DATA%(&%h{FREEDATA(&p&%{ == DATAp&&(&{DATA&'p&r"nDATA'H'&x%#nDATAH''' %nDATA''H'8%!nDATA' ('%?DATA (h('0!hoDATAh(( (%555DATA((h(!29-NDATA(@)(%13-SDATA@))(!25-FDATA))@)0%09-ADATA)*)x)!09-ADATA*`*)0%09-ADATA`***)!10-ADATA**`*%13-ADATA*8+*G13-ADATA8++*pG13-ADATA++8+(s"06-FDATA+,+ %29-JDATA,X,++$11-SDATAX,,,%27-SDATA,,X,E03-SDATA,0-,H%18-MDATA0-x-,E23-ADATAx--0-(D24-SDATA-.x-ps"24-SDATA.P.-s"26-SDATAP...C29-JDATA..P.t"1DATA.(/.HA07-NDATA(/p/. DATAp//(/A24-SDATA/0p/7 DATA0`k/O"30-SDATA`kk0(?28-SDATAkk`k%DATAk8lkht"28-SDATA8llk%06-ADATAll8lt"18-ODATAlml>DATAmXmlt"DATAXmmm@u"DATAmmXmu"--- DATAm0nmu"int DATA0nxnmv"DATAxnn0n`v"DATAnoxn MDATAoPonp%nd1DATAPooov"DATAooPo% DATAo(pov",nDATA(pppo8'DATAppp(pPw"XRDATApqppw"(5 16DATAqHqpw"0DATAHqqq`x"*s.blDATAqqHqx"0DATAq rq(y"(PDATA rhrqy"2DATAhrr ry")DATArrhrPz"-DATAr@srz"(DATA@ssr{"/.bleDATAss@sp{")DATAsts{"-DATAt`tsp>`DATA`tttDATAtt`t8% DATAt8ut([DATA8uut0|"7(DATAuu8uH23-ADATAupuXCCȌnDATAp`pu &FEDATA`ppp|"4DATApp`pEFREEDATAp8qp}"FREEDATA8qqp8>.bleDATAqq8qP<29-ADATAqrq<_DATArXrqhDF.bleDATAXrrrFDATArrXrH}"*DATAr0sr^ ) DATA0sxsr%12-JDATAxss0s H^DATAstxs912-ADATAtPts}"F^DATAPttth9\DATAttPt8pot.DATAt(ut}"(DATA(uputDATApuu(u5DATAuvpu`< --- DATAvHvuF DATAHvvvp.! 1DATAvvHvP~"--- DATAv wvp%'--- DATA whwvL!^ DATAhww wb DATAwwhwaMDATAw@xw ^5 17DATA@xxw~"0MDATAxx@xPo1EEDATAxyxP511-SDATAy`yx4DATA`yyy(+FREEDATAyy`yx+FREEDATAy8zy+FREEDATA8zzy+DATAzX8z`+DATAXz+/13-SDATAX+_DATA0+TestDATA0x0+( uDATAx0+09-ADATAxȷ_DATAP%%ightDATAP+ uDATAP(+_arrDATA(4voDATA(p1FREEDATAp(+FREEDATAp8+7FREEDATAH1FREEDATAH+d1DATAH`0dDATA +013-SDATA h;I^DATAh (0.jpgDATAhX+ uDATA@%<DATA@+16 BDATA@+,, DATAh%$DATA`% DATA`X+.P`DATA`+DATA8 +DATA8  %$DATA  8 P+*DATA ! #MDATA!X! +REEDATAX!!! +.16-FDATA!!X!` +7@DATA!0"!#52 fDATA0"x"!8--- DATAx""0";DATA"#x" + ADATA#(@-"DATA(@-p@-#DATAp@-@-(@-DATA@-A-p@- +ons'DATAA-HA-@-ؠ uDATAHA-A-A-pDATAA-A-HA-X +DATAA- B-A-pDATA B-hB-A-p% DATAhB-B- B- +pDATAB-B-hB-  DATAB-@C-B-Ƚ DATA@C-C-B-%!Ray.DATAC-C-@C-0%"DATAC-D-C-8DATAD-`D-C- +pDATA`D-D-D-xqDATAD-D-`D-8 +0DATAD-8E-D- DATA8E-E-D-`%&FREEDATAE-E-8E- + triDATAE-F-E- + traDATAF-XF-E-%"DATAXF-F-F-X%&DATAF-F-XF-tDATAF-0G-F-0 +DATA0G-xG-F- +DATAxG-G-0G-PtpDATAG-H-xG-0yDATAH-PH-G- +DATAPH-H-H-!DATAH-H-PH-("DATAH-(I-H-hyDATA(I-pI-H-p"DATApI-I-(I-"1yhdDATAI-J-pI-(#%idDATAJ-HJ-I-x#idDATAHJ-J-J-#bmdDATAJ-J-HJ-  ^bDATAJ-J-0z_bDATAHJ-@}nf`bDATAH$abDATAHhzbbDATA `$cbDATA h$VDATAh po"EDATAh0%DATA@辽 DATA@|pDATA@0}DATA  DATA`&DATA`H&pDATA` DATA8&DATA8&1DATA8H'pDATA'DATAX0 &$DATAXXDATAX8 pDATA0 DATA0xoDATAx0'DATAx؛{DATAP0(DATAPx(WDATAP(#!FDATA()ugh DATA(pc ugh DATAp(HDATApen tDATAHx#oDATAH)DATAHH4DATA  *dex,DATA hh*WDATAh &FDATAh*lDATA/ DATA//xDATA/P//DATAP///0DATA//P/  lDATA/(//+2DATA(/p//>DATAp//(/0?ȷlDATA//p/DATA/H//8DATAH///(,DATA/ا/H/p,/DATAا/ //DATA /h/ا/,*DATAh// /?FREEDATA//h/0-?DATA/@//[DATA@///- havDATA/Щ/@/ &"DATAЩ///HDATA/`/Щ/-DATA`/// DATA//`/DATA/8//`DATA8/// DATA/ȫ/8/.DATAȫ///0 ADATA/X/ȫ/eDATAX///pPDATA//X/pDATA/0//DATA0/x//`.HDATAx//0/DATA//x/HDATA/P//DATAP///hDATA//P/0DDATA/(//x1DATA(/p//hDATAp//(/(DATA/hp/pyHeaDATAh/DATAh DATA@P DATA@ DATAЃ@ 0)]DATAЃ0!DATA`Ѓx!20)DATA`!DATA`"nDATA8z?DATA8P"], DATAȅ8DATAȅX DATAXȅ"6 #fDATAX@KFREEDATAXH&&_by_DATA0&#ix(fDATA0x# coDATAx0P#DATAx#DATAP#DATAP8$eshDATAP*namDATA(en*DATA(p == DATAp(&!portDATAp$DATAHin mDATAH$DATA؊H%DATA؊ `%xDATA h؊%(DATAh &DATAhP&,DATA@xo DATA@&V DATAЌ@7_DATAЌ @mporDATA`Ќ%M BleDATA`'QDATA`O `DATA`O O `DATAO O `O 'DATAO 8P O H(DATA8P P O h&tDATAP P 8P `"&DATAP Q P )`DATAQ XQ P (tDATAXQ Q Q (DATAQ Q XQ PDATAQ 0R Q АDATA0R xR Q 7DATAxR R 0R & DATAR S xR 8DATAS PS R @m.geDATAPS S S ?DATAS S PS @|DATAS (T S Hemi=DATA(T pT S V!ionDATApT T (T z= 1:DATAT U pT endeDATAU HU T `DATAHU U U `8"DDATAU U HU 5 .appDATAU  V U `DATA V hV U x DATAhV V  V DATAV V hV pe(ouDATAV @W V @DATA@W W V &$DATAW W @W 81!$DATAW X W DATAX `X W pDATA`X X X 'DATAX X `X ЕDATAX 8Y X 8DATA8Y Y X 300,DATAY Y 8Y   uDATAY Z Y `DATAZ XZ Y hDATAXZ Z Z (`DATAZ pXZ #DATAppZ DATAp8qp(BDATA8qqpXJ"DATAqq8qH uDATAqrq DATArXrq KDATAXrrrPEvDATArrXrDATAr0srp cDATA0sxsruDATAxss0s`%DATAstxsDATAtPts`+ DATAPtt0DATA8import BlenderEDATA W"import osEEDATA import structEEDATAtfrom Blender import *EEDATA(*from Blender import LampDATA$5$from Blender.Scene import RenderDATA8,from Blender.Draw import *DATA`-from Blender.BGL import *dDATA -from Blender import RegistryDATA.from Blender import TextlenDATAPnDATAtfrom math import *DATA DATA З#globalsDATADATA4(u#get the root directory that the current file is inDATA(#we'll write the muray files there. EEDATA P.path = Blender.Get('filename')EDATA/tokens = path.split('\\')e%DATAh/fileName = tokens.pop();DATA@:file = fileName.split('.')DATAufileName = file[0]DATA@qDATA path =''DATAufor i in tokens:ndDATAh; path = path + i + '\\' DATAeDATAeDATAdef export():EEDATAX% #open a file to export toDATA, v f = open(path + fileName + '.mra','wb')DATA,v s = open(path + fileName + '.mrb','wb')DATAT DATA( % f.write('muRay scene description\n')DATAv f.write(' ')DATAw def writeln(out):EDATAx f.write(out + '\n')EEDATAT DATAPx def fmt(input):DATAx return '%5.4f' %inputDATAKDATA% def point_by_matrix(p, m):DATAHK" return [p[0] * m[0][0] + p[1] * m[1][0] + p[2] * m[2][0] + m[3][0],EEDATA@h p[0] * m[0][1] + p[1] * m[1][1] + p[2] * m[2][1] + m[3][1],1DATA@ p[0] * m[0][2] + p[1] * m[1][2] + p[2] * m[2][2] + m[3][2]]EEDATA `% def vector_by_matrix(p, m):leDATA@P return [p[0] * m[0][0] + p[1] * m[1][0] + p[2] * m[2][0],DATA< p[0] * m[0][1] + p[1] * m[1][1] + p[2] * m[2][1],enDATA<x p[0] * m[0][2] + p[1] * m[1][2] + p[2] * m[2][2]] lDATAXK DATA % def contain(min, max, point): DATAx for v in point:ndDATA(y if v[0] < min[0]:REEDATApy min[0] = v[0]DATAy if v[1] < min[1]:REEDATAz min[1] = v[1]dDATAHz if v[2] < min[2]:REEDATAz min[2] = v[2]DATAz if v[0] > max[0]:REEDATA { max[0] = v[0]DATAh{ if v[1] > max[1]:lenDATA{ max[1] = v[1]EEDATA{ if v[2] > max[2]:DATAr" max[2] = v[2] DATA$x% def containSphere(min,max,sphere):DATA % radius = sphere.getSize()[0] DATA$8% if min[0] > sphere.LocX-radius:erDATA % min[0] = sphere.LocX-radiusDATA$0 if min[1] > sphere.LocY-radius:i(DATA % min[1] = sphere.LocY-radiusDATA$ if min[2] > sphere.LocZ-radius:k(DATA % min[2] = sphere.LocZ-radiusDATA$ if max[0] < sphere.LocX+radius: )DATA 0% max[0] = sphere.LocX+radius?DATA$x) if max[1] < sphere.LocY+radius:seDATA 0% max[1] = sphere.LocY+radiusDATA$) if max[2] < sphere.LocZ+radius:DATA % max[2] = sphere.LocZ+radiusDATAG DATApGDATA(s" #Grab the sceneer DATA % scn = Scene.GetCurrent()DATA(+ context = scn.getRenderingContext()REEDATA% obj = Blender.Object.Get()DATAE DATAH% #export general scene dataDATAEDATA(D DATAps" #background color DATAs" w=Blender.World.Get()DATAC DATA4t" scene = Blender.Scene.GetCurrent().getChildren()DATAHADATA writeln('')REEDATAA DATA$7 #create the baked textures listDATAO" baked_maps=[]EDATA(? DATA% #create a materials listDATAht" material_array =[]DATA% materials = Material.get()DATAt" for m in materials:9-JDATA> ADATAt" refFile = "NULL";DATA@u" textureFile = "NULL";DATAu" alphaFile = "NULL";- DATAu" normalFile = "NULL";DATAv" emitFile = "NULL";DATA`v" specFile = "NULL";DATA REEDATA p% for mtex in m.getTextures():DATAv" if mtex: DATA % #check if there is an imageDATA0v" if mtex.tex.type == Texture.Types.IMAGE:DATA(8 print mtex.tex.image.getFilename()DATAPw" #map to colorDATA,w" if mtex.mapto == Texture.MapTo.COL:<DATA4w" textureFile = mtex.tex.image.getFilename()DATA,`x" if mtex.mapto == Texture.MapTo.ALPHA:DATA4x" alphaFile = mtex.tex.image.getFilename() DATA,(y" if mtex.mapto == Texture.MapTo.NOR: DATA4y" normalFile = mtex.tex.image.getFilename() DATA,y" if mtex.mapto == Texture.MapTo.EMIT:DATA0Pz" emitFile = mtex.tex.image.getFilename()DATA,z" if mtex.mapto == Texture.MapTo.REF:DATA0{" refFile = mtex.tex.image.getFilename() DATA,p{" if mtex.mapto == Texture.MapTo.SPEC:DATA0{" specFile = mtex.tex.image.getFilename()DATAp> DATA  print m.getDiffuseShader() DATA(8 material_array.append(m.getName()) DATA\( writeln('shad=' + str(m.rgbCol) + '|' +str(m.getRayMirr()) + '|' + str(m.getHardness()) +DATA80|" '|' + str(m.getAlpha()) +'|'+ str(m.getIOR()) +'|'+DATAL str(m.getSpec())+'|'+ str(m.getEmit())+'|' + str(m.getRef()) + '|' + DATADXC str(m.getDiffuseShader()) +'|' + str(m.getSpecShader()) + '|' +DATA & str(m.getSpecCol()) +'|' +DATA8|" str(textureFile) + '|' + str(alphaFile) + '|' + REEDATAH str(normalFile) + '|' + str(emitFile)+'|' + str(refFile) + '|' + EEDATA}" str(specFile)r DATA8>DATAP< ) EDATA<mvDATAHhD #while looping through the scene, we will need to collect the maximumEDATAH #extents of the scene. These will be written to the head of the fileEDATA,H}" #after all mesh objects have been measureDATA^  min = [1e300,1e300,1e300];DATA % max = [-1e200,-1e300,-1e300];DATA  numObjects = 0DATA9DATA}" for obj in scene:iDATAh9DATA 8 if obj.getType() == 'Camera':DATA,}" cam_mat = obj.getMatrix('worldspace')DATA print 'Exporting camera'DATA5DATA$`< height = context.imageSizeY()oseDATA  width = context.imageSizeX()DATA p.! lens = obj.getData().lens DATAP~" fov = lens; DATA(p% writeln('cam=' + str(camType.val) + DATA`L! '['+str(cam_mat[0][0]) + ',' + str(cam_mat[0][1]) + ',' + str(cam_mat[0][2]) + ']' + '|' +EDATAd '['+str(cam_mat[1][0]) + ',' + str(cam_mat[1][1]) + ',' + str(cam_mat[1][2]) + ']' + '|' + DATAd '['+str(-cam_mat[2][0]) + ',' + str(-cam_mat[2][1]) + ',' + str(-cam_mat[2][2]) + ']' + '|' +-0DATA`  '['+str(cam_mat[3][0]) + ',' + str(cam_mat[3][1]) + ',' + str(cam_mat[3][2]) + ']' + '|' +[DATA4~" str(width) + ',' + str(height) + ']' + '|' +REEDATApP str(fov) + ',' + str(fov) + ']' + str(obj.getData().getClipStart()) + '|' + str(camRadiusSlider.val) + '|' DATAP5 )DATA4 DATA (+ elif obj.getType() == 'Lamp':DATAx+ print 'Exporting Lamp' DATA + l=Lamp.Get(obj.getName())K DATA+ m = obj.getMatrix()DATA`+ if l.getType() == 0: DATA0+ #lamp=location,color,size,energy for a lampDATA+ writeln('lamp=[' + str(obj.getLocation()) + ']|['+ str(3*l.getEnergy()*l.col[0]) +','+ str(3*l.getEnergy()*l.col[1]) + ','+str(3*l.getEnergy()*l.col[2]) )EDATA+ elif l.getType() == 1:DATA,0+ #sun=location,color,energy,directionDATA + print 'Exporting the sun' DATA u]DATA(% vec = vector_by_matrix([0,0,1],m)DATA+ print str(vec)DATA(+ writeln('sun=['+ str(vec) + ']|[' + str(3*l.getEnergy()*l.col[0]) +','+ str(3*l.getEnergy()*l.col[1]) + ','+str(3*l.getEnergy()*l.col[2]) )DATA4 _DATA1DATA + elif obj.getType() =='Surf': DATA88+ material_index = material_array.index(obj.getName())DATA1DATA + containSphere(min,max,obj)DATA`0DATA4+ writeln('sphere=[' + str(obj.getLocation()) +DATA< ']|['+ str(obj.size[0]) + ']|['+ str(material_index))DATA(0 DATA X+ elif obj.getType() == 'Mesh':DATA% DATA+ #get standard mesh dataDATA0+ m = NMesh.GetRawFromObject(obj.getName())DATA(h% mat = obj.getMatrix('worldspace'))DATA% DATA0X+ #for every mesh, we dump a list of verticesDATA+ numverts = len(m.verts)DATA+ numTris = 0 EEDATA(% print 'verts ' + str(numverts) REEDATA,P+ writeln('numverts=' + str(numverts)) 2DATA# DATA + for i in range(numverts): DATA0 + x,y,z = point_by_matrix(m.verts[i].co,mat)1DATA8` + writeln('v=' + fmt(x) + '|' + fmt(y) +'|' + fmt(z))DATA# DATA8 DATA< #iterate through faces - then split faces into trianglesDATA + faces = m.facesDATA DATA  #lastDATA DATA + lastUVTexture = 0ghtDATAؠ  lastidx = 0;DATA DATAX + for fa in faces:DATAp DATA$p% #each face may have an image))DATA + if str(fa.image) == 'None':DATA  idx = -1EEDATA Ƚ else:DATA$% #is this image the last one?)DATA$0% if lastUVTexture == fa.image:(DATA8 DATA + idx = lastidxDATAxq DATA48 + #different texture, have we seen it before?DATA  try:?DATA(`% idx = baked_maps.index(fa.image).DATA + #create new entry DATA + except ValueError:DATA$% baked_maps.append(fa.image) tDATA(X% idx = baked_maps.index(fa.image)DATAt xDATA 0 + lastUVTexture = fa.imageDATA + lastidx = idx;DATAPt DATA0y DATA + if len(fa.v) == 3: DATA! numTris += 1DATA(" numObjects+=1DATAhy DATA p" #check for uv coordinatesDATA4" #there has got to be a better way to do thisDATA(# if len(fa.uv) == 0:DATAx# zers=[0,0];dDATA # fa.uv = [zers,zers,zers];DATA  DATA0z ndDATAp@} trans = [point_by_matrix(fa.v[0].co,mat),point_by_matrix(fa.v[1].co,mat),point_by_matrix(fa.v[2].co,mat)]EDATA$ contain(min,max,trans)DATAhz DATA`$ writeln('t=' + DATAX$ str(fa.v[0].index) + '|' + str(fa.v[1].index) + '|' + str(fa.v[2].index) + '|' + EDATAHpo" str(material_array.index(m.materials[fa.mat].getName())) + '|' +EEDATA0% fmt(fa.uv[0][0]) + '|' + fmt(fa.uv[0][1]) + '|' + fmt(fa.uv[1][0]) + '|' + fmt(fa.uv[1][1]) + '|' + fmt(fa.uv[2][0]) + '|' + fmt(fa.uv[2][1]) + '|' + DATA辽 str(idx)EEDATA| )DATA0} DATA  else:oDATA& numTris += 2DATAH& numObjects+=2DATA  DATA & #check for uv coordinatesBDATA4& #there has got to be a better way to do thisDATAH' if len(fa.uv) == 0:DATA' zers=[0,0];DATA(0 & fa.uv = [zers,zers,zers,zers];)DATAX EDATA 8 DATA  try:DATAp trans = [point_by_matrix(fa.v[0].co,mat),point_by_matrix(fa.v[1].co,mat),point_by_matrix(fa.v[2].co,mat)]DATA ' contain(min,max,trans)ADATA؛ndDATA0( writeln('t=' + DATAXx( str(fa.v[0].index) + '|' + str(fa.v[1].index) + '|' + str(fa.v[2].index) + '|' + DATAH(#! str(material_array.index(m.materials[fa.mat].getName())) + '|' +EDATA) fmt(fa.uv[0][0]) + '|' + fmt(fa.uv[0][1]) + '|' + fmt(fa.uv[1][0]) + '|' + fmt(fa.uv[1][1]) + '|' + fmt(fa.uv[2][0]) + '|' + fmt(fa.uv[2][1]) + '|' + DATAc  str(idx)EDATA )DATA aDATApx# trans = [point_by_matrix(fa.v[2].co,mat),point_by_matrix(fa.v[3].co,mat),point_by_matrix(fa.v[0].co,mat)]DATA ) contain(min,max,trans) DATAH EDATA * writeln('t=' + _aDATAXh* str(fa.v[2].index) + '|' + str(fa.v[3].index) + '|' + str(fa.v[0].index) + '|' + DATAH& str(material_array.index(m.materials[fa.mat].getName())) + '|' +EDATA* fmt(fa.uv[2][0]) + '|' + fmt(fa.uv[2][1]) + '|' + fmt(fa.uv[3][0]) + '|' + fmt(fa.uv[3][1]) + '|' + fmt(fa.uv[0][0]) + '|' + fmt(fa.uv[0][1]) + '|' + DATA  str(idx)EDATAx )DATA EDATA0 EDATA  except:REEDATA4+ print 'caught quad exception on ' + str(fa) DATA>DATA0? DATA DATA< #if the background is set pass that in, else pass colorlenDATA(, if Background.val:DATA0p, writeln('bgimage=' + str(BackgroundText.val))DATA else:EDATA,, writeln('bgcolor=' + str(w[0].getHor()))>DATA? lDATA 0- #write out the baked texturesDATAs]DATA- for tex in baked_maps:DATA$ & s.write('b=' + str(tex) + '\n') DATAHhDATA- #done with the scene DATA  f.closeDATA  s.closeDATA` DATAdef render():EEDATA . spawnPath = path + fileName DATAD0  os.spawnl(os.P_NOWAIT,executable,'foo ' + path + ' ' + fileName)dDATAh #os.spawnl(os.P_NOWAIT,"/home/sheemwaza/base/optimized/src/base","monkey","/home/sheemwaza/out.mra")DATATp #retcode=Popen(["/home/sheemwaza/base/src/base","/home/sheemwaza/out.mra"]).pidDATA print 'no op'EDATADATA`.mSampleSlider = Create(0)DATAcamRadiusSlider = Create(1)DATAHimageSamples = Create(1)DATAshadowSamples = Create(4)DATAmuonSlider = Create(0)DATA0Muon = Create(0)REEDATA4xBackgroundText = Create('using background color')DATABackground = Create(0)DATA(numSample = Create(4)DATAphemiToggle = Create(0)DATAcamType = Create(1)DATA iCacheToggle = Create(0)DATAP samplerWindow = Create(1)DATA GIWindow = Create(0)DATA partOutput = Create(0)[DATA0!bounce = Create(0) DATAx!filterWidth = Create(0)DATA!jitter = Create(0),DATA"sbackground = Create(1)DATA) DATAP"materialsDrop = Create(0)DATA DATA Xdef draw():DATA8" global mSampleSlider, muonSlider, Muon,BackgroundTextEDATAL@ global Background, numSample, hemiToggle, bounce, ExitButton, iCacheToggleDATA(H& global Button2, camType, exportButtonDATA$& global imageSamples, shadowSamplesDATA# global camRadiusSliderDATA P# global samplerWindow, GIWindowDATA# global partOutputDATA# global filterWidth, jitterDATA8$ global sbackground 32]DATA fDATAipeDATAairDATA$& glClearColor(1.0, 1.0, 1.0, 0.0)DATA $ glClear(GL_COLOR_BUFFER_BIT)nDATAresDATA$ leftMargin = 10;mDATA% bottomMargin = 15;DATA`% columnWidth = 170;DATA,% buttonWidth = columnWidth - leftMargin;DATA& columnHeight = 35;DATA0P& buttonHeight = columnHeight - bottomMargin;DATAxDATA & #always display these buttonsDATA7allDATAD  Button('Exit', 3, leftMargin, 5, buttonWidth, buttonHeight, '')endDATAP% Button('Export', 1, leftMargin+columnWidth,5, buttonWidth, buttonHeight, '')EEDATAT' Button('Render', 2, leftMargin+ 2*columnWidth, 5, buttonWidth, buttonHeight, '')p\DATA esDATA camType = Menu('Camera Model%t|Perspective %x1|Spherical %x2|Architecture %x3|DOF %x4', 5, leftMargin, 5*columnHeight, buttonWidth, buttonHeight, camType.val, 'Select which type of camera to use.')2DATA' imageSamples = Slider('Image', 11, leftMargin , 6*columnHeight, buttonWidth, buttonHeight, imageSamples.val, 1, 20, imageSamples.val,'')DATAH( shadowSamples = Slider('Shadow', 12, leftMargin + columnWidth, 6*columnHeight, buttonWidth, buttonHeight, shadowSamples.val, 1, 20, 1,'') DATAh&oxeDATA`"& DATA) #these are the GI settingsDATAx( #Background = Toggle('Set Background', 7,leftMargin, 4*columnHeight, buttonWidth, buttonHeight, Background.val, '')eDATA DATAP turDATAА sbackground = Menu('Background%t|Uniform %x1|CIE Clear Sky %x2|CIE Overcast %x3|Sky Model %x4', 102, leftMargin, 3*columnHeight, buttonWidth, buttonHeight,sbackground.val, 'Set Background')DATA7 zmDATA&exeDATA numSample = Slider('Samples', 6, leftMargin + columnWidth, 2*columnHeight, buttonWidth, buttonHeight,numSample.val, 1, 64, 4, 'The number of hemisphere samples.')DATA@illDATA bounce = Slider('Bounce', 0, leftMargin + 2 * columnWidth, 2*columnHeight, buttonWidth, buttonHeight, bounce.val, 1, 5, 0,'') DATA@| oDATAH if Background.val == 1: )DATAV! BackgroundText = String('', 6, leftMargin + columnWidth, 4*columnHeight, buttonWidth, buttonHeight, BackgroundText.val, 512, '')DATAz llDATA if camType.val == 4:DATA camRadiusSlider = Slider('Radius', 0, leftMargin + columnWidth, 5*columnHeight, buttonWidth, buttonHeight, camRadiusSlider.val, 1, 20, 1,'')DATA`8"notDATA5  ar.DATAdef setBackground(fname):DATAx print fnameREEDATA BackgroundText.val=fname_DATApighDATA@def event(evt, val):DATA(& if (evt== QKEY and not val): Exit()REEDATA81!ighDATAdef bevent(evt):f',DATA[2]DATA'erkDATA Е if evt == 7: #setBackground_DATA< Blender.Window.FileSelector(setBackground,'OPEN FILE')lenDATAerkDATA  elif evt == 10:pDATA` .mDATAh print 'Materials'DATA Blender.Redraw()EDATA# DATA elif evt == 3: #ExitButtonDATA  Exit()EEDATAXJ"orcDATAH elif evt == 2: #Button2vDATA  export()DATA  render()WDATAPEtesDATA  elif evt == 1: #exportButton,DATA p export()mDATAu edRDATA`% else:DATA Blender.Redraw()DATA`+  DATA 0Register(draw, event, bevent)maTXhXiTXTextDATAP/ EERFDATAP/ OB [_(OBCameraamera.001 ne@>N@???*?91<"P???ޕ/?5F:?81V~>75e?'?T3>ne@>N@??????7573Ib ?4O2LZ?2]ڜT??OBd??)d??>)d?????OB _([(OBcube1_default_defaultl=d3F @????????l=d3F @?????ߕ/?6F:?81N~>:5e?'?T2>l@>J@?DOBd8? #=?>=??@???п!8q!DATAOB ([ _(OBcylinder4_default_def#}l=d3F @????????l=d3F @?????ߕ/?6F:?81N~>:5e?'?T2>l@>J@?DOBd8? #=?>=??@???DATA}OB  [0(OBcylinder4_Tire_Tireh#P &l=d3F @????????l=d3F @?????ߕ/?6F:?81N~>:5e?'?T2>l@>J@?DOBd8? #=?>=??@???h!DATAP &OB 0[c( OBcylinder5_copy6_defauH!01h=Ǘ( ????΂?eZ%$???$eZ$?eZ?eZ%eZ?h=Ǘ( ??????ߕ/?6F:?81N~>:5e?'?T2>l@>J@?DOBd8? #=?>=??@???B&0@&DATA01OB c([p0OBcylinder5_default_def (%h= ;t@???j???j!6:j?;?h= ;t@?????ߕ/?6F:?81N~>:5e?'?T2>l@>J@?DOBd?? #=?>=??@???!!DATA%OB p[c(OBPlane (B=B˜=@@@??@@@B=B˜=?????V:=b,=+ƺʘ52=>Z=~=v?dk???DOBd8