BLENDER_v245REND SceneGLOB  0o0'SRx0SR1-Animation 0yp(*\' DATA DATAxG  DATAxGl DATAlxGDATA"lDATA"@DATA@pL"DATApL`Q@DATA`QpLDATA``QDATA`,DATA,`DATA0y,DATA0yDATApX# xGDATAX# Ppl DATAP(ٽX# "DATA(ٽPxG@DATA(ٽ@"DATApBpLDATApB "@`QDATA "xpBpL`QDATAxX" "@DATAX"H x DATAH X"`DATAXH l`DATAX`DATA8XpL,DATA8"DATA8`QDATA,DATAX0yDATAX0y`DATApX,DATAp0y,DATAp"DATA0yDATA(*G `lO*"DATAسLink and MaterialsEditing>DATAسMeshEditingF>DATAسAnim settingsObject>DATA DrawObjectF>DATA 8ConstraintsObject>DATA8P EffectsObjectDATAPh8HooksObjectF>DATAhPParticle InteractionObject> DATAhSoftbodyObject> DATAOutputRender>DATAȾRenderRenderF>DATAȾAnimRender>DATAȾFormatRender>DATA*w"333?V,@DhCDhCC(BDC?z?DATAh"y*333?V,/9DATAG(G(*"xG@ !  DATA(GG,`QpLG==o?@DATATransform PropertiesView3d>DATA3D Viewport propertiesView3d>"DATA@r333?V<????????G==o? A*A?G==o??????*A(% B??=C ݢM@ݢM@ݢM@? DATAhy@333?V</9DATAx(GpL`Q@??PףHDATATransform PropertiesIpo!>DATA(v@"333?V\zC̽̌?zC@ #< #<`jFzD OBzC̽̌?DATA@"z'333?V\CC|||??l|DATA'J"@" 333?V\zCCHBC|||?CFC= ADATAxJ"}H' 333?V\Xi =rttDATAH|8J" 333?V\?zDzDBCl||ll|zDzD=HB DATA8m H 333?V\BCBCl|llFzD #<HB DATAm r8333?V\??? ???? A???PA A!O?j?}GCHB? A(% B? #<C DATAhym 333?V\/9DATAx\0y,`  g!h!DATAg!h!Link and MaterialsEditing>DATAh!g!MeshEditingF>DATA#333?VLzCB{ µCB ?BFB= ADATA#x 333?VLzCCHBC$?CFC= ADATAxw #333?VL#DhC`DpJgChCC(BDC?z?DATAh yx333?VL/9DATA\x"0y} ?=o?.nX} o! p!DATAo! p!Transform PropertiesView3d>DATA p!o!3D Viewport propertiesView3d>"DATAnza!333?YhDATA "(!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# @BakeRender>}DATA# x{Links and PipelineMaterialF>DATAx{w# SSSMaterial>DATAwxx{PreviewTexture>DATAx wTextureTextureF>DATA 8xColorsTextureF>xDATA8P ImageTexture>DATAP8Map ImageTexture>DATA(Gwy333?GDHhC}D* hCC(BDC?z?'mDATA$y~s!(G333?GDATAs!r(f"y333?G??? ???? A??@PA Aj?c3>}GCHB? A(% B? #<C DATA(f"z(s!333?G M M M??DATAh(y(f"333?GImport a Wavefront OBJC:\muray\Meshes\.\der Foundation\..\der\..\balancebot.obj DATAxGȳ`88DATAx`wX0-??AHMOO <L!e!""DATATransform PropertiesView3d,>DATAView PropertiesView3dT>"DATA!r(333?x$?`3?&VD?a>MM=ul?>Ϸ-@ Vؿ N?$?%VD?P=`a>tl? 3?M>uCvA0A?q>33BL?>?M? <[?¾¾?'73A NAXq?z?0G=8?<.> ?4™ؗBg\T֟B¨S[BA(@-??AHM$?`3?&VD?a>MM=ul?>Ϸ-@ Vؿ N?J??$)d8ccB?(% B??)i;=C;h=$&)7?X<)`U)`U)`UtCvA0A? DATA((v!333?xzC̽̌?zC@22 #< #<`jFzD OBzC̽̌?DATAz(333?x 1 12 1??2DATAP. 333?x?zDzDBD22FzD #<HB DATAP.we!333?xDdC8CnD fCC(BDC?z?DATAhe!yP.333?xSELECT IMAGE PICTURESC:\SGWeb\octree\data\pbug Folder/ender.app/Contents/Resources/concrete.jpgjpg W;:DATA`w*x8xXw=c >o?OO Lwhpl!#;&0DATA;&0Transform PropertiesView3d,>DATA0;&View PropertiesView3dT>"DATA$h~ȵ333?`wDATAxȵ}!h 333?`wp c?DATA!rxȵ333?`w????????w=c >o?{IA@y?w=c >o??????{IA(% B??*==C7?X<ZH@ZH@ZH@? DATA(xv!333?`wzC̽̌?zC@22 #< #<`jFzD OBzC̽̌?DATAz0"x333?`w 1 12 1??2DATA0" 333?`w?zDzDBD22FzD #<HB DATAwpl!0"333?`wDdC8CnD fCC(BDC?z?DATAhpl!y333?`wEOpen Text FileICTURESC:\uray\..\es\..\umpbug Folder/ender.app/Contents/Resources/processing_export.py *2DATA*N`w0 <x<o?QQkl <`h!8v!88<&>&DATA<&>&Transform PropertiesView3d,>DATA>&<&View PropertiesView3dT>"DATAh!r(333?*???S^g*??%??% *=S^3g?? o =C*S^g7?X<???? DATA((vп!h!333?*zC̽̌?zC@22 #< #<`jFzD OBzC̽̌?DATAп!z(333?* 1 12 1??2DATAп! 333?*?zDzDBD22FzD #<HB DATAw8v!333?*DdC8CnD fCC(BDC?z?DATAh8v!y333?* Save AseNT PICTURESC:\SGWeb\octree\data\pbug Folder/ender.app/Contents/Resources/balancebotTextured.blendgDATAN*xȳw=і>o?QQkl`8q!!(@DATA(@Transform PropertiesView3d,>DATA@(View PropertiesView3dT>"DATA8q!{333?NCCľ?@?`'*d?DATArX8q!333?N????????w=і>o?{IA @y?w=і>o??????{IA(% B??*==C7?X<ZH@ZH@ZH@? DATA(Xv333?NzC̽̌?zC@22 #< #<`jFzD OBzC̽̌?DATAzX333?N 1 12 1??2DATA,BOp=A(%DATA,CS@ff'DATA 333?N?zDzDBD22FzD #<HB DATAw!333?NDdC8CnD fCC(BDC?z?DATAh!y333?NOpenImageT PICTURESC:\SGWeb\octree\data\er Foundation\..\der\..\tents/Resources/balancebotTextured.blendtitled.blendSRx="X0SR3-Materialodel Sing* *0[:'' DATAHDATAH DATAؕH DATAؕ ?&DATA ?&h?&ؕ<DATAh?&?& ?&<DATA?&(*h?&DATA(*p*?&DATAp**(*,<DATA**p*,DATA*H**DATAH***,DATA**H*DATA**DATA *h*HDATAh** *ؕDATA**h* ?&DATA*@**ؕh?&DATA@*** ?&h?&DATA**@*H?&DATA***(*DATA*@*?&(*DATA@*h?&(*DATAм@ ?&p*DATAмh?&p*DATA`м(**DATA`p**DATA` ?&*DATA8?&*DATA8*H*DATAȾ8p*H*DATAȾ*H*DATAXȾ**DATAXH**DATAX?&*DATA0**DATA0**DATA[' ?&h?&ؕ?@Pף;;!(&!00DATA00OutputRender>DATA0ȇ00RenderRenderF>DATAȇ000AnimRender>DATA0ȇ0FormatRender>DATA(&h333?V\~CA~CA!?AFA= ADATAhL(& 333?V\zCCHBC ?CFC= ADATALwh333?V\DhC?DhCC(BDC?z?mDATArB&L333?V\??? ???? A??@PA Aj?c3>}GCHB? A(% B? #<C DATAB&z!333?V\@̌AR|B1@lA A@CC #<@DATAh!yB&333?V\/9DATA'`[?&H(* !  DATA`Pm'p**(*h?&G@? JL-=-=W-X~M!&8 DATA&&OutputRender>DATA& &&RenderRender>DATA &"&AnimRender0>DATA"(" &FormatRenderH>DATA("@""PreviewMaterial>DATA@"X"("MaterialMaterial>DATAX"$@"ShadersMaterial0>DATA$%X"TextureMaterialD>DATA%'$Map InputMaterial\>DATA'(%Map ToMaterial`>DATA(8 'RampsMaterial>@"DATA8 (Mirror TranspMaterialH>DATAMwX333?VChCCvgCC(BDC?z?DATAXrP M333?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(P v!X333?VzC AzC A #< #<`jFzD OBDATAh!yP 333?V;SAVE FILE/usr/home/intrr/blender/blend/untitled.blendDATAPmh?'` ?&*H*p*U.=w=o?+=+=W+X,Xh  DATAh rh@'333?W???h?j(4?t'>????hj(4t'?U.=w=o??OA(% B??=Ch?j(4?t'>dEh@Eh@Eh@? DATAh@'w h 333?WDdC>9C,DeCC(BDC?z?DATA( v h@'333?WzC AzC A #< #<`jFzD OBDATAh y 333?W SAVE FILE/Users/ton/Desktop/der/blend/untitled.blendDATAh?':'Pm***H*e?B$?AHM+++USDATAr;'333?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@? DATA;'wp333?W |DdC>9C,DeCC(BDC?z?DATA(pv;'333?W |zC AzC A #< #<`jFzD OBDATAhyp333?W | SAVE FILE/Users/ton/Desktop/der/blend/untitled.blendDATA:'h?'*?&**&=+=o?USDATArX333?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ٚ@ٚ@ٚ@? DATAXwȬ333?W DdC>9C,DeCC(BDC?z?DATA(ȬvX333?W zC AzC A #< #<`jFzD OBDATAhyȬ333?W SAVE FILE/Users/ton/Desktop/der/blend/untitled.blendSRxX'="SR4-Sequence0)nnPPlH' DATA0)8&DATA8& 0) DATA H 8& DATAH   DATA  H DATA h DATAh DATAhDATA@DATA@DATAЯ@TDATAЯHnTDATAHnnЯDATAnHnDATAn o 8&DATA ohon0)H DATAhoo o0) DATAooho H DATAo@po  DATA@ppoh8&DATApp@p DATApqphDATAq`qphDATA`qqq@DATAqq`q@DATAq8rqDATA8rrq@DATArr8rhЯDATArrЯDATA0rЯDATA0xHn DATAx0HnDATAxn@DATAPn DATAPHnnDATAPl$0)  H h,&hDATA OutputRender>DATA PRenderRenderF>DATAPh AnimRender>DATAhPFormatRender>DATAh,&w333?WDhCvDhCC(BDC?z?DATAhyh,&333?W/9DATA$+Plh8&  !  DATA+z$ Hnn 8=i>o? !DATA! &333?W&~CB~CB ?BFB= ADATA &x#!333?W&zCAzCA  A@FB= A DATA#r &333?W&????????8=i>o?fffAD&@??fffA(% B? #<C DATAhy#333?W&AVE TARGA/t1.blend9DATAz+Я@8=H>o?UUU 0!DATAxA333?W*zCAzCA1||1 A@FB= A DATAAr0!333?W*????????8=H>o?fffA*@??fffA(% B? #<C DATAh0!yA333?W*AVE TARGA/t1.blend9DATAHzhЯ8=>o?SSSTJDATA(vG333?W.B̽̌?B̽̌? #< #<`jFzD SQB̽̌?DATAGrJ333?W.????????8=>o?fffA@??fffA(% B? #<C DATAhJyG333?W.OAD FILE/9DATAHHn@n8=i>o? G@DDATAGx"&333?W1zCAzCA A@FB= A DATA"&r@DG333?W1????????8=i>o?fffAD&@??fffA(% B? #<C DATAh@Dy"&333?W1AVE TARGA/t1.blend9SRx'XSR5-ScriptingЇ''+' DATA DATA h DATAh  DATAh'hDATAh''DATA''h'DATA'@''DATA@'''DATA'Ї'@'DATAЇ''DATA'`' hDATA`'''' DATA''`''hDATA'8''''DATA8'''h'@'DATA'ȉ'8'''DATAȉ'''''DATA'X'ȉ'@''DATAX'''h''DATA''X'h'DATA''Ї'DATA@'Ї'DATA@@'Ї'DATA@'Ї'DATA'DATA+' h' !  DATA+h'''@'z==o?H(&;0DATA0Transform PropertiesView3d>DATA03D Viewport propertiesView3d>"DATAH(&r;333?Y.|????????z==o?&A*A?z==o??????*A(% B??=C ?@?@?@? DATAh;yH(&333?Y.|/9DATAЇ'''??Pף L(P)HHDATAHTransform PropertiesIpo!>DATAx(}! 333?Y/|Xi> =DATA!{((333?Y/|CCx??|?DATA((v!!333?Y/|zC̽̌?zC@;; #< #<`jFzD OBzC̽̌?DATA!z(333?Y/|CC|||??l|``DATA,`BOp=A(%DATA(! 333?Y/|zCCHBC|||?CFC= ADATA(|! 333?Y/|?zDzDBCl||ll|zDzD=HB DATA!8&( 333?Y/|BCBCl|llFzD #<HB DATA8&rP)!333?Y/|??? ???? A???PA A!O?j?}GCHB? A(% B? #<C DATAhP)y8&333?Y/|/9DATAh'@'Ї'O@(0*(pDATA((Link and MaterialsEditing>DATA((MeshEditingF>DATAШ(Anim settingsObject>DATAШDrawObjectF>DATAШConstraintsObject>DATA`i(EffectsObjectDATA`i(xj(HooksObjectF>ШDATAxj(k(`i(Particle InteractionObject>DATAk(l(xj(SoftbodyObject>DATAl((k(OutputRender>DATA(@l(RenderRenderF>DATA@X(AnimRender>DATAXp@FormatRender>DATApXScriptlinksScript>DATA@w(0*333?Y0|ChC#DhCC(BDC?z?DATAh(0*y@333?Y0|/9SC'pSCScenetageain(%h( 'ęA߿tCvA0AtCvA0AtCvA0A=((dd??< dddZ! ??dd????//backbuf/tmp\//ftype@&#@^@&^#D )DATA 'c(4(DATA(c@( 'GpDATA@(c(p+DATAch@(h+DATAhcDATAch DATAc_(%DATA((b,d'=A@DATAL(mL?B ?o: ?? #<=DATA@dh1 RenderLayerIMt0pIMconcrete.jpgk//concrete.jpg,DATA  DATA#E=*B=*SMAD@4NH:G@.SN:\XOD>0.*EB1IE:$!`ZD30)YUL'&"83=9.B?8-*#?8.0."<8-)&B>388,(%II?""[TNF?-de`^TH`YQNKBQOC;8/}{o%#~}xzwr ~{zxkkcc`[mnhWVQcb]\[VGG?]\Wba\pojrqmccaTOK[ZUNMH\XUWRLYYYundVWRIHC[Z_a`^vvvTUOmlhkkcxwsNOJ|umsss~}yrrpXYSopkba\PQKXYSJKETOIhhfhgcomp\[Yeeckjh]\ZefaVVTVWR_`[XXX\[VVUPde`mjcttvrrrqqssrwzzxcb]fgb[\W=<7KLG??=LMHvvt\]Xcebkkkihf~ffdiiiPPNhdca`\[[[RRRlljKLGZ[VsssOPKzvuyxt}|xrqlffdMLGmjcIHC^[TXYTLMGOOOttreee{zx||~hhhgggddbyur``^wpf`a\cccyy{FC>pnokkkrrtrsuffdY[Zrrrw{|xy}noqhikbd_YZTac^PPPghc`a\VVTjjlWWWnmi_`[pojrsnXYTdc_hgcEECKLGvvtbdc{{}zzx_`bYYY__]ghchgehhf_a`[ZVrsueecghbjlgMMK;<7JKFNMH^^\QQQbbbSSQ`_[WVT[\WUVQUVQVWRVWR`a\]^YxxvZZXfffWXSacb^^^cebacbZ[Ucb`||~WWW[]Z/2+&+'GD;UVQRSNGID``^LLLOLEggg^^^__]rqm[]ZJD6YYYHH@eeewwuopkkkiWXR[ZUWYXy{xegf@BAlnk|||}nmrY[X7830/-LIDffh`a[NNNJJJba\HFGggede`YZUddbde`WWUiigwww__]_a`jjh|}bdcgid^`_hji[]\ac`xxvaaUBA<@@8>;2qmade_/0+LHGea^<;6vuscb`LNI^]XUVPZ[VSTOvvtnnlyxtrsmBA?klgnojprmjnmegb++#Y[VQRM{zttt^^VTYUIKFFFDXXXIIGCDAB<34.>><>?:AB=]][GHCFGALMG__]hhfaa_LLJXXV??7DE@ikjuuskmlaedUVQSURXWSkkk`b]FE@RQL?A>6./*$%34.8:5VWYAB=MNINOJgifSTOVWRLMHCD?EHA;<4XZW^^\kmlRSMjjhMMK_`[XZWaa_ik`;:59;0XTH-)84)57*''76<:;6UTO0-&PMFRTQ:;3KLFHICXZYKMH<<4Z[UMNH`a\TTL ac^HIC880<=7@C:STNTTJHH@?>9LKFB>3OK?780!!()!560+(:70MNIEM&>>6FGAGHB=>9VVLROFAB<-ZWP//%63,<:+ KG<,, @>2 56085.2/(991=:3HE>@>244*??720$B>2QQEUUSGHCOPJ@A;671CD>VWRHIDOOGNOA5/!NK<82&EB1ok`B<,5/!C=/72VSD,,$40$32-><0II=?;/30)64(<=51/#;8)52)9:4;9-0.!JH<&$74%DD8KG<@>1=;,<9(4.MJ9EB1LI:53&$"73'OI9@:,D>.JF:A=11-!@=4>;2A=2LH< -*3/$31%3/&75(<8,C?4;7,85,EC6@9)& GC71-!@:,<9*>:.;8'+',*PL@CA462& 5/!4.41(!"D>.C@1>DB=B B@?LAh3*$LALamp ????? A4B>??? B4B?@@@??WO(h(aWOWorld???===??A@pA A?L= TXhXiTXprocessing_export.py4*4*p)`DATA4*C:\processing_export.pyDATA4*(5*DATA(5*m(4*  FREEDATAm(n((5* FREEDATAn(Pn(m(FREEDATAPn()n(FREEDATA)*Pn(P FREEDATA*P*)FREEDATAP***FREEDATA**P*HFREEDATA*(+*FREEDATA(+p+* FREEDATAp++(+FREEDATA+,p+YFREEDATA,H,+&!FREEDATAH,),XDATA))H,03FREEDATA)8*)n%e EDATA8**)nFREEDATA**8*@oFREEDATA*+*oFREEDATA+X+*oFREEDATAX+++0pFREEDATA++X+(.d1DATA+0,+8FREEDATA0,x,+xpFREEDATAx,,0,pFREEDATA,-x,FREEDATA-P-,FREEDATAP--- DATA--P-qndEDATA- -`q(nd1DATA ( -q(DATA( p  ?&FREEDATAp  (  r%FREEDATA  p !FREEDATA H  xrFREEDATAH   rDATA  H FREEDATA   sFREEDATA h  PsFREEDATAh   FREEDATA  h sFREEDATA @  h?EFREEDATA@   =FREEDATA  @ =sDATA  ss:DATA` (=FREEDATA`@e9 DATA`/:1= DATA.FREEDATAP8tFREEDATAPt DATAPtFREEDATA(uFREEDATA(p(dDATAp(pFREEDATApFREEDATAHDATAHH8DATAH DATA ؑFREEDATA h  == DATAh hDATAhnDATA@#nDATA@PnDATA@!nDATA?DATA&H!hoDATA&8&555DATA8&&&!29-NDATA&&8&H13-SDATA&&&!25-FDATA&X&&09-ADATAX&&&@!09-ADATA&&X&09-ADATA&0&&!10-ADATA0&x&&13-ADATAx&&0&.13-ADATA&&x&13-ADATA&P&&(06-FDATAP&&&p29-JDATA&&P&$11-SDATA&(&&27-SDATA(&p&&h03-SDATAp&&(&h18-MDATA&&p&z 23-ADATA&H&&24-SDATAH&Ȗ&24-SDATAȖH&26-SDATAXȖȺ29-JDATAXH1DATAX07-NDATA0  DATA0x`24-SDATAx0 DATAxW"30-SDATAP028-SDATAPDATAPX28-SDATA(06-ADATA(p18-ODATAp(%DATAp8 DATAH DATAH --- DATA؛H int DATA؛ X DATA (؛ DATA(p @ MDATAp( nd1DATAp8 DATAHp' DATAH',nDATAH ''DATA x'XRDATA h'(5 16DATAh  '0DATAh'*s.blDATA@'0DATA@P'(PDATA@'2DATA')DATA`x'-DATA`'(DATA`8'/.bleDATA8')DATA8'-DATA8 `DATAX'DATA0'% DATA0x'[DATAx0( /7(DATAxxH23-ADATAPcCȌnDATAP'FEDATAP /4DATA(@l EFREEDATA(p /FREEDATAp(p.bleDATAph29-ADATAH(&_DATAH8F.bleDATAH &FDATA @!/*DATA h!/) DATAh !/12-JDATAhH&H^DATA!H 12-ADATA!("@"/F^DATA("p"!`%\DATAp""(""/pot.DATA"#p""/(DATA#H#"8#/DATAH###<"DATA##H##/ --- DATA# $##/F DATA $h$#0$/ 1DATAh$$ $$/--- DATA$$h$$/'--- DATA$@%$ %/^ DATA@%%$b DATA%%@%aMDATA%&%%/^5 17DATA&`&%@&/0MDATA`&&&X*!o1EEDATA&&`&PE 11-SDATA&8'&#DATA8''&&/FREEDATA'P8'&/FREEDATAP'H'/FREEDATAPPDATA(DATA(p/13-SDATAp(j!_DATApHTestDATAH( uDATAH09-ADATAHȷ_DATA H%ightDATA h uDATAh _arrDATAhvoDATA@FREEDATA@FREEDATA@7FREEDATAFREEDATA``d1DATA`dDATA`013-SDATA)%;I^DATA)*.jpgDATA*P*) uDATAP*** <DATA**P*h16 BDATA*(+*,, DATA(+p+* $DATAp++(+! DATA+,p+p .P`DATA,H,+ DATAH,,, DATA,,H,h $DATA, -,(*DATA -h-,؏MDATAh-- -REEDATA--h-؀.16-FDATA-@.-87@DATA@..-H52 fDATA..@.`'--- DATA./. ;DATA/`/. ADATA`/// DATA/(!`/XDATA(!p!/DATAp!!(!ons'DATA!!p!&uDATA!H!!0VpDATAH!!!0DATA!ط!H!8DATAط! !!x DATA !h!ط!ЂpDATAh!! !+" DATA!!h!H+ DATA!@!! !Ray.DATA@!!!x"DATA!й!@!]DATAй!!!ЃpDATA!`!й!fDATA`!!!0DATA!!`!@ DATA!8!!&FREEDATA8!!!؄ triDATA!Ȼ!8!  traDATAȻ!!!h"DATA!x'Ȼ!&DATAx''!O"DATA''x'DATA'P''hDATAP'''pDATA''P'&DATA'(''DATA('p''DATAp''('@DATA''p'@DATA'H''DATAH'''h1yhdDATA''H'%idDATA' '' idDATA 'h''hbmdDATAh'' '+! ^bDATA''h'_bDATA'@''Enf`bDATA@'''abDATA''@'7*bbDATA'''cbDATA'`''PVDATA`'X'&EDATAX`'DATAX@ DATA0jpDATA0xDATAx0 DATAxDATAPpDATAPDATAP@DATA(1DATA(ppDATAp(HDATAp$DATAHJDATAH pDATAH, DATA GoDATA hDATAh {DATAh8DATA@WDATA@(X&FDATA(p@Xugh DATAp((ugh DATApHDATAH en tDATAH0oDATAءHDATAء h4DATA hءXdex,DATAh WDATAh'FDATA@XlDATA@%DATAУ@XDATAУ w DATA`У0DATA`x lDATA`h2DATA8DATA8ȷlDATAȥ8@DATAȥ88DATA(ȥxDATA(p/DATAp( DATApX*DATAHFREEDATAH?DATAرH@[DATAر x havDATA hر"DATAh DATAhPDATA@7DATA@"DATAг@DATAг DATA`гODATA`&ADATA`eDATA8OPDATA8pDATAȵ8xPDATAȵPHDATAxȵQDATAxPQDATAxQDATAPQhDATAP8RDDATAPR1DATA(RhDATA(p0SDATAp(xSyHeaDATApSDATAHTDATAHXTDATAؼHTDATAؼ T0)]DATA hؼ8UDATAh U20)DATAhUDATA@VnDATA@XVz?DATAо@V], DATAоVDATA`о DATA`)x'6 #fDATA))`%KFREEDATA)(*)'&_by_DATA(*p*)8(#ix(fDATAp**(*( coDATA*+p*(DATA+H+*()DATAH+++p)DATA++H+)eshDATA+ ,+**namDATA ,h,+@*en*DATAh,, ,x* == DATA,,h,*!portDATA,@-,+DATA@--,X+in mDATA--@-+DATA-.-+DATA.`.- ,xDATA`...h,(DATA..`.,DATA.8/.-,DATA8//.p-o DATA//8/-V DATA/pS/-_DATApSS/'@mporDATASTpS''M BleDATATHTS0.QDATAHTTT.DATATTHT`DATAT UTx~DATA UhUT8DATAhUU UtDATAUUhU0DATAU@VUh`DATA@VVUtDATAVV@V(DATAVWVDATAW`WV9DATA`WWW(DATAWW`W` DATAW8XW8DATA8XXWpm.geDATAXX8X?DATAXYXDATAYXYXemi=DATAXYYY0ionDATAYpXY= 1:DATApY endeDATAph`DATAH(DDATAH`.appDATAH`DATA  DATA h'DATAh e(ouDATAh 'DATA@h'$DATA@'$DATA@'DATA@'pDATA`x'DATA`'DATA` 8DATA8'300,DATA88' uDATA8'DATA'DATAX'(`DATAXH'DATAX'DATAX(BDATAX'DATAX' uDATA0 DATA0x& KDATAx0X'vDATAx'DATAP cDATAP'DATAP'DATA(P'DATA(p'DATAp('DATAimport BlenderEDATA import osEEDATAimport structEEDATAfrom Blender import *EEDATAfrom Blender import LampDATA$Pfrom Blender.Scene import RenderDATAfrom Blender.Draw import *DATAfrom Blender.BGL import *dDATA Hfrom Blender import RegistryDATAfrom Blender import TextlenDATA nDATAfrom math import *DATAY DATA &!#globalsDATAXDATA40#get the root directory that the current file is inDATA(n#we'll write the muray files there. EEDATA npath = Blender.Get('filename')EDATA@otokens = path.split('\\')e%DATAofileName = tokens.pop();DATAofile = fileName.split('.')DATA0pfileName = file[0]DATA(.DATA 8path =''DATAxpfor i in tokens:ndDATAp path = path + i + '\\' DATADATADATAdef export():EEDATAq #open a file to export toDATA,`q f = open(path + fileName + '.mra','wb')DATA,q s = open(path + fileName + '.mrb','wb')DATA?& DATA( r f.write('muRay scene description\n')DATA! f.write(' ')DATAxr def writeln(out):EDATAr f.write(out + '\n')EEDATA DATAs def fmt(input):DATAPs return '%5.4f' %inputDATADATAs def point_by_matrix(p, m):DATAHh? return [p[0] * m[0][0] + p[1] * m[1][0] + p[2] * m[2][0] + m[3][0],EEDATA@ 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 s def vector_by_matrix(p, m):leDATA@( return [p[0] * m[0][0] + p[1] * m[1][0] + p[2] * m[2][0],DATA<@e p[0] * m[0][1] + p[1] * m[1][1] + p[2] * m[2][1],enDATA</ p[0] * m[0][2] + p[1] * m[1][2] + p[2] * m[2][2]] lDATA. DATA 8t def contain(min, max, point): DATAt for v in point:ndDATAt if v[0] < min[0]:REEDATAu min[0] = v[0]DATA( if v[1] < min[1]:REEDATAp min[1] = v[1]dDATA if v[2] < min[2]:REEDATA min[2] = v[2]DATAH if v[0] > max[0]:REEDATA max[0] = v[0]DATAؑ if v[1] > max[1]:lenDATA  max[1] = v[1]EEDATAh if v[2] > max[2]:DATA max[2] = v[2] DATA$ def containSphere(min,max,sphere):DATA P radius = sphere.getSize()[0] DATA$ if min[0] > sphere.LocX-radius:erDATA  min[0] = sphere.LocX-radiusDATA$H if min[1] > sphere.LocY-radius:i(DATA  min[1] = sphere.LocY-radiusDATA$ if min[2] > sphere.LocZ-radius:k(DATA H min[2] = sphere.LocZ-radiusDATA$ if max[0] < sphere.LocX+radius: )DATA  max[0] = sphere.LocX+radius?DATA$@ if max[1] < sphere.LocY+radius:seDATA  max[1] = sphere.LocY+radiusDATA$ if max[2] < sphere.LocZ+radius:DATA  max[2] = sphere.LocZ+radiusDATA. DATADATA( #Grab the sceneer DATAp scn = Scene.GetCurrent()DATA( context = scn.getRenderingContext()REEDATA obj = Blender.Object.Get()DATAh DATAh #export general scene dataDATAz DATA DATA #background color DATA w=Blender.World.Get()DATAȺ DATA4H scene = Blender.Scene.GetCurrent().getChildren()DATADATA  writeln('')REEDATA` DATA$ #create the baked textures listDATAW" baked_maps=[]EDATA0 DATA #create a materials listDATAX material_array =[]DATA materials = Material.get()DATA for m in materials:9-JDATA% ADATA8  refFile = "NULL";DATA  textureFile = "NULL";DATA  alphaFile = "NULL";- DATA  normalFile = "NULL";DATAX  emitFile = "NULL";DATA  specFile = "NULL";DATA@ REEDATA  for mtex in m.getTextures():DATA8  if mtex: DATA p' #check if there is an imageDATA0' if mtex.tex.type == Texture.Types.IMAGE:DATA( ' print mtex.tex.image.getFilename()DATAx' #map to colorDATA,' if mtex.mapto == Texture.MapTo.COL:<DATA4 ' textureFile = mtex.tex.image.getFilename()DATA,' if mtex.mapto == Texture.MapTo.ALPHA:DATA4' alphaFile = mtex.tex.image.getFilename() DATA,P' if mtex.mapto == Texture.MapTo.NOR: DATA4' normalFile = mtex.tex.image.getFilename() DATA,' if mtex.mapto == Texture.MapTo.EMIT:DATA0x' emitFile = mtex.tex.image.getFilename()DATA,' if mtex.mapto == Texture.MapTo.REF:DATA08' refFile = mtex.tex.image.getFilename() DATA,' if mtex.mapto == Texture.MapTo.SPEC:DATA0' specFile = mtex.tex.image.getFilename()DATA  DATA X' print m.getDiffuseShader() DATA(' material_array.append(m.getName()) DATA\' writeln('shad=' + str(m.rgbCol) + '|' +str(m.getRayMirr()) + '|' + str(m.getHardness()) +DATA8( / '|' + str(m.getAlpha()) +'|'+ str(m.getIOR()) +'|'+DATALx str(m.getSpec())+'|'+ str(m.getEmit())+'|' + str(m.getRef()) + '|' + DATADc str(m.getDiffuseShader()) +'|' + str(m.getSpecShader()) + '|' +DATA ' str(m.getSpecCol()) +'|' +DATA8 / str(textureFile) + '|' + str(alphaFile) + '|' + REEDATAH@l  str(normalFile) + '|' + str(emitFile)+'|' + str(refFile) + '|' + EEDATA / str(specFile)r DATApDATAh ) EDATA(&mvDATAH8 #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,@!/ #after all mesh objects have been measureDATA!/ min = [1e300,1e300,1e300];DATA !/ max = [-1e200,-1e300,-1e300];DATAH& numObjects = 0DATAH DATA@"/ for obj in scene:iDATA`%DATA "/ if obj.getType() == 'Camera':DATA,"/ cam_mat = obj.getMatrix('worldspace')DATA8#/ print 'Exporting camera'DATA<"DATA$#/ height = context.imageSizeY()oseDATA #/ width = context.imageSizeX()DATA 0$/ lens = obj.getData().lens DATA$/ fov = lens; DATA($/ writeln('cam=' + str(camType.val) + DATA` %/ '['+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) + ']' + '|' +REEDATApX*! str(fov) + ',' + str(fov) + ']' + str(obj.getData().getClipStart()) + '|' + str(camRadiusSlider.val) + '|' DATAPE  )DATA# DATA &/ elif obj.getType() == 'Lamp':DATA&/ print 'Exporting Lamp' DATA H'/ l=Lamp.Get(obj.getName())K DATAP m = obj.getMatrix()DATA if l.getType() == 0: DATA0 #lamp=location,color,size,energy for a lampDATAj! 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]) )EDATAH elif l.getType() == 1:DATA, #sun=location,color,energy,directionDATA  print 'Exporting the sun' DATA u]DATA(H 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]) )DATA _DATADATA  elif obj.getType() =='Surf': DATA8 material_index = material_array.index(obj.getName())DATADATA ` containSphere(min,max,obj)DATADATA4 writeln('sphere=[' + str(obj.getLocation()) +DATA<% ']|['+ str(obj.size[0]) + ']|['+ str(material_index))DATA DATA  elif obj.getType() == 'Mesh':DATA  DATAh #get standard mesh dataDATA0 m = NMesh.GetRawFromObject(obj.getName())DATA(  mat = obj.getMatrix('worldspace'))DATA! DATA0p  #for every mesh, we dump a list of verticesDATA  numverts = len(m.verts)DATA  numTris = 0 EEDATA(h  print 'verts ' + str(numverts) REEDATA,( writeln('numverts=' + str(numverts)) 2DATA؏ DATA  for i in range(numverts): DATA0؀ x,y,z = point_by_matrix(m.verts[i].co,mat)1DATA88 writeln('v=' + fmt(x) + '|' + fmt(y) +'|' + fmt(z))DATAH DATA`' DATA<  #iterate through faces - then split faces into trianglesDATA faces = m.facesDATA  DATA X #lastDATA DATA lastUVTexture = 0ghtDATA& lastidx = 0;DATA0V DATA0 for fa in faces:DATA8 DATA$x #each face may have an image))DATA Ђ if str(fa.image) == 'None':DATA+" idx = -1EEDATA H+ else:DATA$  #is this image the last one?)DATA$x if lastUVTexture == fa.image:(DATA] DATAЃ idx = lastidxDATAf DATA4 #different texture, have we seen it before?DATA @ try:?DATA( idx = baked_maps.index(fa.image).DATA؄ #create new entry DATA  except ValueError:DATA$h baked_maps.append(fa.image) tDATA( idx = baked_maps.index(fa.image)DATAO" xDATA  lastUVTexture = fa.imageDATAh lastidx = idx;DATA DATA& DATA if len(fa.v) == 3: DATA numTris += 1DATA@ numObjects+=1DATA@ DATA  #check for uv coordinatesDATA4h #there has got to be a better way to do thisDATA if len(fa.uv) == 0:DATA  zers=[0,0];dDATA h fa.uv = [zers,zers,zers];DATA +! DATA ndDATApE 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)DATA7* DATA writeln('t=' + DATAXP str(fa.v[0].index) + '|' + str(fa.v[1].index) + '|' + str(fa.v[2].index) + '|' + EDATAH& str(material_array.index(m.materials[fa.mat].getName())) + '|' +EEDATA fmt(fa.uv[0][0]) + '|' + fmt(1-fa.uv[0][1]) + '|' + fmt(fa.uv[1][0]) + '|' + fmt(1-fa.uv[1][1]) + '|' + fmt(fa.uv[2][0]) + '|' + fmt(1-fa.uv[2][1]) + '|' + DATA@ str(idx)EEDATAj )DATA DATA  else:oDATA numTris += 2DATA numObjects+=2DATA DATA @ #check for uv coordinatesBDATA4 #there