BLENDER_v245REND SceneGLOB  0o@!8SRx@!SR1-Animation $#P##HZpr8 DATA $0$DATA0$$ $ DATA$$0$ DATA$#$DATA##$DATA###DATA###DATA#`##DATA`###DATA##`#DATA###DATA#@##DATA@###DATA#@#DATAP##$0$DATA#x#P#$ $DATAx####0$DATA#@#x##$DATA@#####DATA##@###DATA#h##`##DATAh# ##`##DATA ##h###DATA## ## $DATA#H####DATAH####$DATA##H###DATA#p####DATAp#(##@##DATA(#H#p#@#`#DATAH##(#@##DATA##H###DATA#p####DATAp#####DATA#H#p###DATAH#####DATA#H##@#DATAHZb $##$Oao`DATALink and MaterialsEditing>DATA(MeshEditingF>DATA(@Anim settingsObject>DATA@v(DrawObjectF>DATAv@@ConstraintsObject>DATA@(vEffectsObjectDATA(H[@HooksObjectF>@DATAH[`\(Particle InteractionObject>vDATA`\x]H[SoftbodyObject>vDATAx]^`\OutputRender>DATA^_x]RenderRenderF>DATA_`^AnimRender>DATA`_FormatRender>DATAawo333?V,@DhCDhCC(BDC?z?DATAhoya333?V,/9DATAbcHZ#0$$# !  DATAcgb#@#`##G==o?HvdeDATAdeTransform PropertiesView3d>DATAed3D Viewport propertiesView3d>"DATAHrv333?V<????????G==o? A*A?G==o??????*A B??=C ݢM@ݢM@ݢM@? DATAhvyH333?V</9DATAglc#`###??PףHxB#HdhhDATAhTransform PropertiesIpo!>DATA(xB#v i333?V\zC̽̌?zC@ #< #<`jFzD OBzC̽̌?DATA izOxB#333?V\CC|||??l|DATAOHj i 333?V\zCCHBC|||?CFC= ADATAxHj}jO 333?V\X =rttDATAj|kHj 333?V\?zDzDBCl||ll|zDzD=HB DATAkx}j 333?V\BCBCl|llFzD #<HB DATAx}rHdk333?V\??? ???? A???PA A!O?j?}GCHB? A B? #<C DATAhHdyx}333?V\/9DATAlprg#### oHmnDATAmnLink and MaterialsEditing>DATAnmMeshEditingF>DATAop333?VLzCB{ µCB ?BFB= ADATAppqo 333?VLzCCHBC$?CFC= ADATApqwHp333?VL#DhC`DpJgChCC(BDC?z?DATAhHypq333?VL/9DATAprl##@##} ?=o?.pstDATApstTransform PropertiesView3d>DATAtps3D Viewport propertiesView3d>"DATAzPl333?Y\DATAIHKLampLampF>\DATAHGISpotLamp>DATAGFHTexture and InputLamp>\DATAFEGMap ToLamp>\GDATAEDFPreviewMaterial>uDATADhCEMaterialMaterialF>uDATAhCPBDPreviewWorld>DATAPB8AhCWorldWorldF>DATA8A @PBMist Stars PhysicsWorld>DATA @?8ATexture and InputWorld>DATA?= @Map ToWorld> @DATA=<?OutputRender>vDATA<;=RenderRenderF>vDATA;:<AnimRender>vDATA:9;FormatRender>vDATA9x8:Link and MaterialsEditing>DATAx8`79MeshEditingF>DATA`7H6x8Mesh ToolsEditing>DATAH605`7Mesh Tools 1Editing^>DATA054H6CameraEditingF>DATA4305ShadersMaterial>u-DATA314TextureMaterial>uDATA103Anim settingsObject>DATA0/1DrawObjectF>DATA/.0ConstraintsObject>DATA.7/ScriptlinksScript>DATA76.EffectsObject/DATA657Map InputMaterial>3DATA5h46Map ToMaterial>3DATAh4P35AnimAnim>DATAP382h4SoundSound>DATA82 1P3ListenerSoundF>DATA 1082SequencerSound>DATA0. 1ArmatureEditingF>DATA.-0RampsMaterialF>uDDATA-,.Mirror TranspMaterial>uDATA,+-Mist / Stars / PhysicsWorld>+DATA+*,Amb OccWorld>DATA*x)+Shadow and SpotLamp>\DATAx)`(*ModifiersEditing>DATA`(H'x)ShapesEditing>x)DATAH'0&`(MultiresEditing>DATA0&%H'Links and PipelineMaterial>uDATA%$0&Render LayersRender>v=DATA$"%BakeRender>v;DATA"$SSSMaterial>u-DATA"w333?!DHhC(DhCC(BDC?z?8mDATA$~a"333?!DATAar#333?!??? ???? A??@PA Aj?c3>}GCHB? A B? #<C DATA#z %a333?! M M M??DATAh %y#333?!X!&Import a Wavefront OBJC:\muray\Meshes\..\der Foundation\..\der\..\footbot.obj ePaDATA&'!8$h{$h{$DATA'2&h !gN? "?AHM]S]]S L* 1HcHc()DATA()Transform PropertiesView3d,>DATA)(View PropertiesView3dT>"DATA*r333?'B?x7?j`&?zC>M<JI< w?>}[L?B?m`&? I<x7mC> w??M<>{)A\B@? ?G $?>M<JI< w?>}[L?Hi>?fTRW{IAA B??|p;=C7?X<@@@BO@ A?? DATA(v.*333?'zC̽̌?zC@22 #< #<`jFzD OBzC̽̌?DATA.z@/333?' 1 12 1??2DATA@/ 0. 333?'?zDzDBD22FzD #<HB DATA 0w 1@/333?'DdC8CnD fCC(BDC?z?DATAh 1y 0333?'LSave FileNT PICTURES/Users/ton/Desktop/umpbug Folder/ender.app/Contents/Resources/untitled.blend DATA2='ȸhw=c >o?[S[[S \Lw <8j  34DATA34Transform PropertiesView3d,>DATA43View PropertiesView3dT>"DATA$~(L333?2dDATAx(L}5 333?2# c?460DDATA5r(L333?2????????w=c >o?{IA@y?w=c >o??????{IA B??*==C7?X<ZH@ZH@ZH@? DATA(v95333?2zC̽̌?zC@22 #< #<`jFzD OBzC̽̌?DATA9z@:333?2 1 12 1??2DATA@: ;9 333?2?zDzDBD22FzD #<HB DATA ;w <@:333?2DdC8CnD fCC(BDC?z?DATAh <y ;333?2EOpen Text FileICTURESC:\uray\..\es\..\umpbug Folder/ender.app/Contents/Resources/processing_export.py *2DATA=H2h` a=4=o?]U]Uo]p \@ Gc c >?DATA>?Transform PropertiesView3d,>DATA?>View PropertiesView3dT>"DATA@r333?=????????a=4=o?AIWAy?a=4=o??????A? B??p_==C7?X<֗@֗@֗@BO@ A?? DATA(vD@333?=zC̽̌?zC@22 #< #<`jFzD OBzC̽̌?DATADz@E333?= 1 12 1??2DATA@E FD 333?=?zDzDBD22FzD #<HB DATA Fw G@E333?=DdC8CnD fCC(BDC?z?DATAh Gy F333?=LSave FileNT PICTURES/Users/ton/Desktop/umpbug Folder/ender.app/Contents/Resources/untitled.blend DATAH=8`hw=і>o?[U[Uo[p\\K`  IJDATAIJTransform PropertiesView3d,>DATAJIView PropertiesView3dT>"DATAK{M333?HCC.?8?\\d?DATAMrH\K333?H????????w=і>o?{IA @y?w=і>o??????{IA B??*==C7?X<ZH@ZH@ZH@? DATA(H\v]M333?HzC̽̌?zC@22 #< #<`jFzD OBzC̽̌?DATA]z^H\333?H 1 12 1??28x DATA,8x BOp=ADATA,x 8CS@ff8DATA^_] 333?H?zDzDBD22FzD #<HB DATA_w`^333?HDdC8CnD fCC(BDC?z?DATAh`y_333?H Save AseNT PICTURESC:\SGWeb\labs\raytracer\g Folder/ender.app/Contents/Resources/simpleScene.blendJSRx@P@!SR3-Materialodel Sing(?$c8dhjjh8 DATA(?$pDATAp(?$ DATAp DATADATAЋ<DATAЋ`<DATA`@bЋDATA@bb`DATAbb@b,<DATAbcb,DATAc`cbDATA`ccc,DATAcc`cDATAccDATA8ddpDATAdd8d(?$DATAded(?$DATAeXedЋDATAXeeeЋDATAeeXe`pDATAe0fe@bDATA0fxfe`@bDATAxff0f@bЋDATAfgxfbDATAgPgfbЋDATAPggg@bbDATAggPgbbDATAg(hgcDATA(hphg`cDATAphh(hb`cDATAhiphb`cDATAiHihc`cDATAHiiiccDATAiiHi`ccDATAi ji`cDATA jhjibcDATAhj jccDATAjx(?$Ћ?@Pף;;!pwknDATAklOutputRender>DATAlmkRenderRenderF>DATAmnlAnimRender>DATAnmFormatRender>DATApp333?V\~CA~CA!?AFA= ADATApqp 333?V\zCCHBC ?CFC= ADATAqwrp333?V\DhC?DhCC(BDC?z?mDATArruq333?V\??? ???? A??@PA Aj?c3>}GCHB? A B? #<C DATAuzwr333?V\@̌AR|B1@lA A@CC #<@DATAhwyu333?V\/9DATAxyj`p@b !  DATAy؎xbb@bЋG@? JL-=-=W-X~@zDATAz{OutputRender>DATA{|zRenderRender>DATA|}{AnimRender0>DATA}~|FormatRenderH>DATA~}PreviewMaterial>DATA(~MaterialMaterial>DATA(@ShadersMaterial0>DATA@X(TextureMaterialD>DATAXp@Map InputMaterial\>DATApXMap ToMaterial`>DATApRampsMaterial>DATAMirror TranspMaterialH>DATAw333?VChCCvgCC(BDC?z?DATAr333?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(v@333?VzC AzC A #< #<`jFzD OBDATAh@y333?V;SAVE FILE/usr/home/intrr/blender/blend/untitled.blendDATA؎_yc`cbU.=w=o?+=+=W+X,X؏`DATA؏r333?W???h?j(4?t'>????hj(4t'?U.=w=o??OA B??=Ch?j(4?t'>dEh@Eh@Eh@? DATAw؏333?WDdC>9C,DeCC(BDC?z?DATA(v`333?WzC AzC A #< #<`jFzD OBDATAh`y333?W SAVE FILE/Users/ton/Desktop/der/blend/untitled.blendDATA_h؎ccb`ce?B$?AHM+++US`xfDATA`r d333?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 dw e`333?W |DdC>9C,DeCC(BDC?z?DATA( evxf d333?W |zC AzC A #< #<`jFzD OBDATAhxfy e333?W | SAVE FILE/Users/ton/Desktop/der/blend/untitled.blendDATAh_c`cc&=+=o?USinDATAir@l333?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ٚ@ٚ@ٚ@? DATA@lw@mi333?W DdC>9C,DeCC(BDC?z?DATA(@mvn@l333?W zC AzC A #< #<`jFzD OBDATAhny@m333?W SAVE FILE/Users/ton/Desktop/der/blend/untitled.blendSRx@PSR4-Sequence0ps tyzx8 DATA0pxpDATAxpp0p DATApqxp DATAqPqpDATAPqqqDATAqqPqDATAq(rqDATA(rprqDATAprr(rDATArsprDATAsHsrTDATAHsssTDATAssHsDATAssDATA thtxppDATAhtt t0pqDATAttht0pPqDATAt@utqqDATA@uutPqqDATAuu@uxpqDATAuvup(rDATAv`vuq(rDATA`vvvqprDATAvv`v(rrDATAv8wvprrDATA8wwvprsDATAww8wrsDATAwxwqHsDATAxXxw(rHsDATAXxxxsHsDATAxxXxPqsDATAx0yxprsDATA0yxyxrsDATAxyy0yqsDATAyxyssDATAz0pPqqqhh{P~DATA{ |OutputRender>DATA |8}{RenderRenderF>DATA8}P~ |AnimRender>DATAP~8}FormatRender>DATAhwh333?WDhCvDhCC(BDC?z?DATAhhyh333?W/9DATAzqxpp(r !  DATAPqssq8=i>o? DATAP333?W&~CB~CB ?BFB= ADATAPxȄ333?W&zCAzCA  A@FB= A DATAȄrP333?W&????????8=i>o?fffAD&@??fffA B? #<C DATAhyȄ333?W&AVE TARGA/t1.blend9DATAXsHs(rr8=H>o?UUU hZDATAhZx333?W*zCAzCA1||1 A@FB= A DATArhZ333?W*????????8=H>o?fffA*@??fffA B? #<C DATAhy333?W*AVE TARGA/t1.blend9DATAXxprqHss8=>o?SSSTXDATA(Xv333?W.B̽̌?B̽̌? #< #<`jFzD SQB̽̌?DATArX333?W.????????8=>o?fffA@??fffA B? #<C DATAhy333?W.OAD FILE/9DATAxXsprrs8=i>o? x@DATAxx`333?W1zCAzCA A@FB= A DATA`r@x333?W1????????8=i>o?fffAD&@??fffA B? #<C DATAh@y`333?W1AVE TARGA/t1.blend9SRxSR5-Scripting@P8 DATADATA DATA DATAXDATAXDATAXDATA0DATA0xDATAx0DATAxDATAPDATAPDATAPDATA(DATA(pX0DATAp(xDATApxDATAH0xDATAHXDATAHXDATA DATA hDATAh 0DATAhxDATADATA@@ !  DATA@8@Xx0z==o?p@XDATA@XTransform PropertiesView3d>DATAX@3D Viewport propertiesView3d>"DATApr333?Y.|????????z==o?&A*A?z==o??????*A B??=C ?@?@?@? DATAhyp333?Y.|/9DATA8P@x??Pף LP88DATA8Transform PropertiesIpo!>DATAxP} 333?Y/|X> =DATA{ P333?Y/|CCx??|?DATA( vx333?Y/|zC̽̌?zC@;; #< #<`jFzD OBzC̽̌?DATAxz 333?Y/|CC|||??l|DATA,BOp=ADATAx 333?Y/|zCCHBC|||?CFC= ADATA| 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/|/9DATAP8X0OP DATAP h Link and MaterialsEditing>DATAh  P MeshEditingF>DATA  h Anim settingsObject>DATA   DrawObjectF>DATA  ConstraintsObject>DATA EffectsObjectDATAHooksObjectF> DATAParticle InteractionObject> DATA(SoftbodyObject> DATA(@OutputRender>DATA@X(RenderRenderF>DATAXp@AnimRender>DATApXFormatRender>DATApScriptlinksScript>DATAw333?Y0|ChC#DhCC(BDC?z?DATAhy333?Y0|/9SC8pSCScenetageainx"hnHg f n,;ABO@ A?BO@ A?BO@ A?=8Pdd??< 2ddZ! ??( ( ????//backbuf/tmp\//ftype@&#@^@&^#D 4$DATAhncl {DATAl c(Z hn{@ZDATA(Z c`l {KDATA`cb(Z { DATAbc`{h*DATAcsb0DATAsce DATAe csX6DATAce oDATAcPo8DATAPcoxDATAcPoH/DATAcho0DATAhcБ 0DATAБc0h L(DATA0cБ ](DATAc80 DATA8c )DATAcȝ8@DATAȝc0@'DATA0cHȝ@pe$DATAHc0@CDATAcH@xDATAcТXDATAТc(DATA(cࠚТ DATAࠚcx(DATAxc@c ࠚDATA@c cf xx1DATAf cHg @c Rș(DATAHg cf DATA(8b,d'=A@DATALPmL?B ?o: ?? #<=DATA@( h1 RenderLayerCA CACameraamera.001L>DB=B B@?LAH!$LALampO?????A4B>??? B4B?@@???WO(x"aWOWorld???===??A@pA A?L=TXh#XTXprocessing_export.pyh$$%%( DATAh$C:\processing_export.pyDATA$x 0ZghtDATAx  $ FREEDATA !x ( FREEDATA!P! 0ry DATAP!!!g FREEDATA!!P! DATA!("!Ph FREEDATA("p"!i ps:DATAp""("k e DATA"#p"l 0)DATA#H#"P#FREEDATAH###x0)DATA##H##FREEDATA# $#DATA $h$# #0)[DATAh$$ $3FREEDATA$$h$(%(1)DATA$@%$m derDATA@%%$m FREEDATA%%@%8o FREEDATA%&%q FREEDATA&`&%(FREEDATA`&&&$FREEDATA&&`&#FREEDATA&8'&pFREEDATA8''&r FREEDATA''8'( $FREEDATA'('` $FREEDATA(X('@@1 FREEDATAX(((xs FREEDATA((X((FREEDATA(0)((extDATA0)x)(P$DATAx))0)~%FREEDATA)*x)xFREEDATA*P*)XFREEDATAP***FREEDATA**P*($FREEDATA*(+*e dDATA(+p+*0FREEDATAp++(+$FREEDATA+,p+u REEDATA,H,+xEFREEDATAH,,,=derDATA,,H,`=(1)DATA, -,v FREEDATA -h-,=(0)DATAh-- -@9FREEDATA--h-:0)DATA-@.-$DATA@..-w FREEDATA..@. 0)DATA./.hFREEDATA/`/.0ps:DATA`///x DATA//`/FREEDATA/80/FREEDATA800/PFREEDATA0080FREEDATA010FREEDATA1X10(()EDATAX111pFREEDATA11X1DATA1021;DATA02x21z#REEDATAx2202z FREEDATA23x2x!()DATA3P32h~ FREEDATAP333t!FREEDATA33P3 DATA3(43@l!DATA(4p43` FREEDATAp44(4D!EEDATA45p4 FREEDATA5H54h'!REEDATAH555H FREEDATA55H5f!lenDATA5 65 FREEDATA 6h65$)DATAh66 68$FREEDATA66h6H;DATA6@76ȗ$FREEDATA@776$)EEDATA77@7FREEDATA787x$FREEDATA8`87FREEDATA`888`$FREEDATA88`8$*EEDATA8898DATA89980DATA9989not DATA9:9x1FREEDATA:X:9$(texDATAX::: FREEDATA::X:$zersDATA:0;: FREEDATA0;x;: DATAx;;0;$FREEDATA;<x;(~ DATA<P<;8FREEDATAP<<<x_by_DATA<<P<ix(fDATA<(=<$DATA(=p=<.sizDATAp==(=DATA=>p=XDATA>H>=z DATAH>>>bal DATA>>H>0 lefDATA> ?>8] ,DATA ?h?>ȗFREEDATAh?? ?x DATA??h? DATA?@@?,end(DATA@@@? 'imagDATA@@@@xend(DATA@A@(nderDATAA`A@ 0(numDATA`AAA* EEDATAAA`A0* DATAA8BAP(DATA8BBA2FREEDATABB8B)is sDATABCBx-DATACXCB(+ stDATAXCCC8/DATACCXC) DATAC0DC-3*l.DATA0DxDC# + sDATAxDD0Dtr(3DATADExDX%romODATAEPEDi[a liDATAPEEE7rrayDATAEEPE-Hmt(1DATAE(FEC'|' DATA(FpFE<DATApFF(F4DATAFGpFEear DATAGHGFp er('DATAHGGG$rginDATAGGHG$plesDATAG HG $DATA HhHG FDATAhHH H0 FDATAHHhH *DATAH@IHPDATA@IIHDATAII@IhP= TeDATAIJIX$,DATAJ`JI  DATA`JJJ($DATAJJ`J) DATAJ8KJP ( BacDATA8KKJPamRaDATAKK8K`$fnamDATAKLK  'OPEDATALXLK`(draDATAXLLLDATALLXL DATAL0MLP 'DATA0MxML8L^DATAxMM0M bDATAMNxM@ aDATANPNM8K^DATAPNNN 0DATANNPNoDATAN(ONh#DATA(OpON#DATApOO(OpDATAOPpO@'DATAPHPO'DATAHPPP0(DATAPPHP()DATAP QPx/P)DATA QhQPDATAhQQ QDATAQQhQ(DATAQ@RQX+DATA@RRQP#+DATARR@R%DATARSR-DATAS`SRH`.DATA`SSS.DATASS`SDATAS8TSDATA8TTSX7DATATT8T`DATATUTrDATAUXUT(DATAXUUU0raDATAUUXUx;rbDATAU0VUDATA0VxVUDATAxVV0Vr$DATAVWxV8DATAWPWV,8DATAPWWW$DATAWWPWDATAW(XW@.DATA(XpXWDATApXX(XDATAXYpX8$DATAYHYX*@?DATAHYYYDATAYYHYFREEDATAY ZY@.DATA ZhZY7FREEDATAhZZ Zho$DATAZZhZhDATAZ@[Z;DATA@[[ZxFREEDATA[[@[FREEDATA[\[0=#DATA\`\[k$DATA`\\\DATA\\`\pDATA\ \DATA h\DATAh DATAhP DATA@DATA@H x(p,DATA@Y not DATAÏ!matrDATAÏ`ϏP"DATA`ÏÏÏDATAÏÏ`ÏDATAÏ8ďÏDATA8ďďÏ0DATAďď8ďX DATAďŏďX&DATAŏXŏďDATAXŏŏŏDATAŏŏXŏ@"DATAŏ0Əŏ&DATA0ƏxƏŏDATAxƏƏ0ƏDATAƏǏxƏ@DATAǏPǏƏ@DATAPǏǏǏDATAǏǏPǏDATAǏ(ȏǏDATA(ȏpȏǏDATApȏȏ(ȏXDATAȏɏpȏ`DATAɏHɏȏ1DATAHɏɏɏ DATAɏɏHɏh DATAɏ ʏɏ DATA ʏhʏɏ! DATAhʏʏ ʏ#DATAʏʏhʏnDATAʏ@ˏʏ@!DATA@ˏˏʏ#DATAˏˏ@ˏ!DATAˏ̏ˏ!VDATȀ`̏ˏ`"EDATA`̏̏̏"DATȀ̏`̏# DATȀ8͏̏DATA8͏͏̏`DATA͏͏8͏# DATA͏Ώ͏0$DATAΏXΏ͏x$DATAXΏΏΏlDATAΏΏXΏ$DATAΏ0ϏΏ%1DATA0ϏxϏΏx%DATAxϏϏ0Ϗ%DATAϏЏxϏ&$DATAЏPЏϏ#DATAPЏЏЏh& DATAЏЏPЏ& DATAЏ(яЏoDATA(яpяЏ&DATApяя(я DATAяҏpя8'DATAҏHҏя'WDATAHҏҏҏ(FDATAҏҏHҏ(DATAҏ ӏҏX)DATA ӏhӏҏDATAhӏӏ ӏDATAӏӏhӏ^ oDATAӏ@ԏӏ)DATA@ԏԏӏDATAԏԏ@ԏ)DATAԏՏԏ0*WDATAՏ`Տԏ*FDATA`ՏՏՏ0+DATAՏՏ`Տ,DATAՏ8֏ՏDATA8֏֏ՏDATA֏֏8֏PDATA֏׏֏H, DATA׏X׏֏,2DATAX׏׏׏DATA׏׏X׏DATA׏0؏׏(DATA0؏x؏׏,8DATAx؏؏0؏`-DATA؏ُx؏-/DATAُPُ؏`DATAPُُُ.*DATAُُPُDATAُ(ڏُh.DATA(ڏpڏُ̽DATApڏڏ(ڏ.DATAڏۏpڏ/"DATAۏHۏڏDATAHۏۏۏX/DATAۏۏHۏ/DATAۏ ܏ۏ/DATA ܏h܏ۏDATAh܏܏ ܏ 0 DATA܏܏h܏`0DATA܏@ݏ܏0ADATA@ݏݏ܏(1eDATAݏݏ@ݏ1PDATAݏޏݏH2DATAޏ`ޏݏDATA`ޏޏޏ2DATAޏޏ`ޏ2DATAޏ8ߏޏ(3DATA8ߏߏޏx3DATAߏߏ8ߏ3DATAߏߏ4DATAXߏX41DATAX4DATAX5DATA0P5DATA0x5DATAx05DATAx06DATAP6DATAP6DATAP7DATA(X7DATA(p7DATAp(7DATAppDATAH08DATAHDATAH8 DATA 86DATA hpaKDATAh (9&DATAh9#DATA@9DATA@ :DATA@p:DATA:DATA`;DATA`( DATA`#DATA8^DATA8P;!DATA8;DATA`DATAX;DATAX@<DATAX<DATA0<(DATA0x0=DATAx0x=,DATAx_DATAP=DATAP8DATAP@DATA(XMDATA(ppQDATAp(DATAp DATAHDATAHDATAH8S(DATA DATA hxDATAh ȢtDATAhW(DATA@DATA@pDATA@DATADATA``DATA`H$DATA`8DATA8#DATA8襒DATA8DATA DATAX8DATAXDATAXDATA0J$DATA0x@DATAx0 DATAxЧDATAPDATAP DATAPh$DATA(DATA(pDATAp(DATApDATAHDATAHX8DATAHDATA ȩDATA hDATAh DATAhXDATA@DATA@DATA@DATADATA`0DATA` DATA` DATA8DATA8DATA8P DATAXDATAXDATAXDATAX(DATAجDATA0Zimport BlenderEDATA import os_SDATA(import structEDATA0from Blender import *:DATAg from Blender import LampREEDATA$from Blender.Scene import Render):DATAPh from Blender.Draw import *oDATAi from Blender.BGL import *nDATA k from Blender import RegistryREEDATAl from Blender import TextDATAP#DATAxfrom math import *DATA# DATA #globalsQDATA #_DATA4#get the root directory that the current file is inDATA((#we'll write the muray files there. EEDATA m path = Blender.Get('filename')1DATAm tokens = path.split('\\')rDATA8o fileName = tokens.pop();DATAq file = fileName.split('.')DATA(fileName = file[0]DATA$ DATA #path =''DATApfor i in tokens:DATAr  path = path + i + '\\' DATA( $DATA` $P"DATA@@1def export():EEDATAxs  #open a file to export toDATA, f = open(path + fileName + '.mra','wb')GE:DATA, s = open(path + fileName + '.mrb','wb')DATAP$ riDATA(~ f.write('muRay scene description\n')EDATAx f.write(' ')EDATAX def writeln(out):DATA f.write(out + '\n')EEDATA($ DATA def fmt(input):= 4DATA0 return '%5.5f' %inputDATA$ DATAu  def point_by_matrix(p, m):DATAHx return [p[0] * m[0][0] + p[1] * m[1][0] + p[2] * m[2][0] + m[3][0],EDATA@ p[0] * m[0][1] + p[1] * m[1][1] + p[2] * m[2][1] + m[3][1],EEDATA@` p[0] * m[0][2] + p[1] * m[1][2] + p[2] * m[2][2] + m[3][2]]EEDATA v  def vector_by_matrix(p, m):REEDATA@ return [p[0] * m[0][0] + p[1] * m[1][0] + p[2] * m[2][0],EEDATA<@ p[0] * m[0][1] + p[1] * m[1][1] + p[2] * m[2][1], DATA< p[0] * m[0][2] + p[1] * m[1][2] + p[2] * m[2][2]] DATA$ DATA w  def contain(min, max, point):EDATA  for v in point:(4DATAh if v[0] < min[0]:)EDATA0 min[0] = v[0]:DATAx if v[1] < min[1]:REEDATA min[1] = v[1]+ DATA if v[2] < min[2]:REEDATAP min[2] = v[2]rrDATA if v[0] > max[0]:REEDATA max[0] = v[0]DATA( if v[1] > max[1]:REEDATAp max[1] = v[1]DATA if v[2] > max[2]:DATA max[2] = v[2] ";DATA$z def containSphere(min,max,sphere):DATA z  radius = sphere.getSize()[0]EDATA$x if min[0] > sphere.LocX-radius:')DATA h~  min[0] = sphere.LocX-radiusEDATA$t if min[1] > sphere.LocY-radius:(DATA   min[1] = sphere.LocY-radiusDATA$@l if min[2] > sphere.LocZ-radius:arDATA `  min[2] = sphere.LocZ-radiusEDATA$D if max[0] < sphere.LocX+radius:ecDATA  max[0] = sphere.LocX+radius DATA$h' if max[1] < sphere.LocY+radius:o.DATA H  max[1] = sphere.LocY+radiusrDATA$f if max[2] < sphere.LocZ+radius:o.DATA  max[2] = sphere.LocZ+radiusEDATA$ DATA8$ DATAH #Grab the sceneDATAȗ$ scn = Scene.GetCurrent()DATA( context = scn.getRenderingContext()DATA obj = Blender.Object.Get()DATAx$ DATA #export general scene dataDATA`$DATA$ DATA #background colorTDATA0 w=Blender.World.Get()yDATADATA4x scene = Blender.Scene.GetCurrent().getChildren()EDATA$GDATA writeln('')REEDATA$ DATA$ #create the baked textures listDATA baked_maps=[]DATA$ ,mDATA( #create a materials list00DATA8 material_array =[]DATAx materials = Material.get()DATA for m in materials:SelDATA$ iDATA refFile = "NULL";DATA textureFile = "NULL";DATAX alphaFile = "NULL";DATA normalFile = "NULL";nDATA emitFile = "NULL";DATA0 specFile = "NULL";DATA8] 0DATA ȗ for mtex in m.getTextures():EDATAx if mtex: DATA  #check if there is an imageDATA0 if mtex.tex.type == Texture.Types.IMAGE:fa.DATA(  print mtex.tex.image.getFilename()DATAx #map to colorrDATA, if mtex.mapto == Texture.MapTo.COL:()DATA4  textureFile = mtex.tex.image.getFilename()EEDATA, if mtex.mapto == Texture.MapTo.ALPHA:DATA4 alphaFile = mtex.tex.image.getFilename() mt(DATA,P if mtex.mapto == Texture.MapTo.NOR:,maDATA4 normalFile = mtex.tex.image.getFilename() eDATA, if mtex.mapto == Texture.MapTo.EMIT:DATA0x emitFile = mtex.tex.image.getFilename()atDATA, if mtex.mapto == Texture.MapTo.REF:eftDATA08 refFile = mtex.tex.image.getFilename() DATA, if mtex.mapto == Texture.MapTo.SPEC:DATA0 specFile = mtex.tex.image.getFilename() DATA# ,DATA  print m.getDiffuseShader()REEDATA(X material_array.append(m.getName()) etDATA\i writeln('shad=' + str(m.rgbCol) + '|' +str(m.getRayMirr()) + '|' + str(m.getHardness()) +DATA8 '|' + str(m.getAlpha()) +'|'+ str(m.getIOR()) +'|'+DATAL- str(m.getSpec())+'|'+ str(m.getEmit())+'|' + str(m.getRef()) + '|' + ''DATAD str(m.getDiffuseShader()) +'|' + str(m.getSpecShader()) + '|' +DATA  str(m.getSpecCol()) +'|' +EDATA8 str(textureFile) + '|' + str(alphaFile) + '|' + REEDATAH str(normalFile) + '|' + str(emitFile)+'|' + str(refFile) + '|' + SeDATAp  str(specFile), DATA$)*lDATA$ ) DATA $REEDATAH  #while looping through the scene, we will need to collect the maximummDATAH0  #extents of the scene. These will be written to the head of the fileDATA,  #after all mesh objects have been measureEDATAP min = [1e300,1e300,1e300];DATA  max = [-1e200,-1e300,-1e300];DATAhP numObjects = 0DATAX$turDATA  for obj in scene:.DATA($6, DATA  if obj.getType() == 'Camera':DATA,P  cam_mat = obj.getMatrix('worldspace')HeiDATAP print 'Exporting camera'DATA`$ iDATA$  height = context.imageSizeY() evDATA ` width = context.imageSizeX()DATA  lens = obj.getData().lens DATA  fov = lens; DATA(P  writeln('cam=' + str(camType.val) + DATA`8L '['+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]) + ']' + '|' +EEDATA`8K '['+str(cam_mat[3][0]) + ',' + str(cam_mat[3][1]) + ',' + str(cam_mat[3][2]) + ']' + '|' +DATA4  str(width) + ',' + str(height) + ']' + '|' +REEDATAp str(fov) + ',' + str(fov) + ']' + str(obj.getData().getClipStart()) + '|' + str(camRadiusSlider.val) + '|' DATAh# )DATA# DATA p elif obj.getType() == 'Lamp':DATA@ print 'Exporting Lamp' DATA  l=Lamp.Get(obj.getName())REEDATA m = obj.getMatrix()DATA( if l.getType() == 0: tryDATA0x #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]) )DATA elif l.getType() == 1:DATA, #sun=location,color,energy,direction+DATA X print 'Exporting the sun'EEDATAP# DATA( vec = vector_by_matrix([0,0,1],m)DATA print str(vec)DATAH 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 DATAREEDATA  elif obj.getType() =='Surf':EDATA8X material_index = material_array.index(obj.getName())DATA`2DATA  containSphere(min,max,obj)DATA(DATA4 writeln('sphere=[' + str(obj.getLocation()) +REEDATA<x ']|['+ str(obj.size[0]) + ']|['+ str(material_index))DATA DATA  elif obj.getType() == 'Mesh':DATAr$ DATA8 #get standard mesh dataEDATA0 m = NMesh.GetRawFromObject(obj.getName())DATA( mat = obj.getMatrix('worldspace')DATA DATA0@ #for every mesh, we dump a list of verticesDATA numverts = len(m.verts)DATA numTris = 0 EEDATA(8 print 'verts ' + str(numverts) DATA, writeln('numverts=' + str(numverts)) EDATA DATA  for i in range(numverts): DATA0@ x,y,z = point_by_matrix(m.verts[i].co,mat)DATA8 writeln('v=' + fmt(x) + '|' + fmt(y) +'|' + fmt(z))DATAho$ DATAh DATA< #iterate through faces - then split faces into trianglesDATAx faces = m.facesDATA DATA 0=# #lastt()DATAk$ DATA lastUVTexture = 0DATAp lastidx = 0;DATA DATA for fa in faces:DATA DATA$P #each face may have an imageMDATA  if str(fa.image) == 'None':DATAH idx = -1EEDATA Y else:ndDATA$ #is this image the last one?xDATA$P if lastUVTexture == fa.image:DATA (DATA idx = lastidxDATA DATA4 #different texture, have we seen it before?.DATA X try:DATA(X idx = baked_maps.index(fa.image)DATA #create new entry DATA except ValueError:DATA$@ baked_maps.append(fa.image) DATA( idx = baked_maps.index(fa.image)DATA DATA  lastUVTexture = fa.imageDATA@ lastidx = idx;DATA@ DATA DATA if len(fa.v) == 3: DATA numTris += 1DATA numObjects+=1DATAX DATA ` #check for uv coordinatesDATA4 #there has got to be a better way to do thisDATA  if len(fa.uv) == 0:DATAh  zers=[0,0];DATA  fa.uv = [zers,zers,zers];DATA ! DATA# 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)DATA# DATA! writeln('t=' + DATAX! 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())) + '|' +DATA" 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)EEDATA )DATA` DATA # else:DATA0$ numTris += 2DATAx$ numObjects+=2DATAl DATA $ #check for uv coordinatesDATA4% #there has got to be a better way to do thisDATAx% if len(fa.uv) == 0:DATA% zers=[0,0];DATA(& fa.uv = [zers,zers,zers,zers];DATA# DATA h& 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)DATA DATA8' writeln('t=' + DATAX' 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())) + '|' +DATA( 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]) + '|' + DATAX) str(idx)EDATA )DATA DATAp^  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)DATA DATA) writeln('t=' + DATAX0* 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())) + '|' +DATA0+ fmt(fa.uv[2][0]) + '|' + fmt(1-fa.uv[2][1]) + '|' + fmt(fa.uv[3][0]) + '|' + fmt(1-fa.uv[3][1]) + '|' + fmt(fa.uv[0][0]) + '|' + fmt(1-fa.uv[0][1]) + '|' + DATA, str(idx)EDATA )DATA DATAP DATAH, except:REEDATA4, print 'caught quad exception on ' + str(fa) DATADATA DATA( DATA<, #if the background is set pass that in, else pass colorDATA`- if Background.val:DATA0- writeln('bgimage=' + str(BackgroundText.val))DATA` else:DATA,. writeln('bgcolor=' + str(w[0].getHor()))DATA DATA h. #write out the baked texturesDATA̽DATA. for tex in baked_maps:DATA$/ s.write('b=' + str(tex) + '\n') DATADATAX/ #done with the scene DATA / f.close@DATA / s.closeDATA DATA 0def render():EEDATA `0 spawnPath = path + fileNameDATAD0 os.spawnl(os.P_NOWAIT,executable,'foo ' + path + ' ' + fileName)DATAh(1 #os.spawnl(os.P_NOWAIT,"/home/sheemwaza/base/optimized/src/base","monkey","/home/sheemwaza/out.mra")DATAT1 #retcode=Popen(["/home/sheemwaza/base/src/base","/home/sheemwaza/out.mra"]).pidDATAH2 print 'no op'EDATADATA2mSampleSlider = Create(0)DATA2camRadiusSlider = Create(1)DATA(3imageSamples = Create(1)DATAx3shadowSamples = Create(4)DATA3muonSlider = Create(0)DATA4Muon = Create(0)DATA4X4BackgroundText = Create('using background color')DATA4Background = Create(0)DATA5numSample = Create(4)DATAP5hemiToggle = Create(0)DATA5camType = Create(1)DATA5iCacheToggle = Create(0)DATA06samplerWindow = Create(1)DATA6GIWindow = Create(0)DATA6partOutput = Create(0)DATA7bounce = Create(0) DATAX7filterWidth = Create(0)DATA7jitter = Create(0)DATA7sbackground = Create(1)DATApDATA08materialsDrop = Create(0)DATA DATA 8def draw():DATA88 global mSampleSlider, muonSlider, Muon,BackgroundTextEDATALpa global Background, numSample, hemiToggle, bounce, ExitButton, iCacheToggleDATA((9 global Button2, camType, exportButtonDATA$9 global imageSamples, shadowSamplesDATA9 global camRadiusSliderDATA : global samplerWindow, GIWindowDATAp: global partOutputDATA: global filterWidth, jitterDATA; global sbackground DATA(  DATA#DATA^DATA$P; glClearColor(1.0, 1.0, 1.0, 0.0)DATA ; glClear(GL_COLOR_BUFFER_BIT)DATA`DATA; leftMargin = 10;DATA@< bottomMargin = 15;DATA< columnWidth = 170;DATA,< buttonWidth = columnWidth - leftMargin;DATA0= columnHeight = 35;DATA0x= buttonHeight = columnHeight - bottomMargin;DATA_DATA = #always display these buttonsDATA8DATAD Button('Exit', 3, leftMargin, 5, buttonWidth, buttonHeight, '')DATAPX Button('Export', 1, leftMargin+columnWidth,5, buttonWidth, buttonHeight, '')DATATp Button('Render', 2, leftMargin+ 2*columnWidth, 5, buttonWidth, buttonHeight, '')DATA DATA  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,'')]DATA shadowSamples = Slider('Shadow', 12, leftMargin + columnWidth, 6*columnHeight, buttonWidth, buttonHeight, shadowSamples.val, 1, 20, 1,'') DATA8S(DATA DATAx #these are the GI settingsDATAxȢ #Background = Toggle('Set Background', 7,leftMargin, 4*columnHeight, buttonWidth, buttonHeight, Background.val, '') +DATAW( DATA DATAp 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')DATA DATADATA` numSample = Slider('Samples', 6, leftMargin + columnWidth, 2*columnHeight, buttonWidth, buttonHeight,numSample.val, 1, 64, 4, 'The number of hemisphere samples.')DATAH$DATA8 bounce = Slider('Bounce', 0, leftMargin + 2 * columnWidth, 2*columnHeight, buttonWidth, buttonHeight, bounce.val, 1, 5, 0,'') DATA# DATA襒 if Background.val == 1:DATA BackgroundText = String('', 6, leftMargin + columnWidth, 4*columnHeight, buttonWidth, buttonHeight, BackgroundText.val, 512, '')DATA  DATA8 if camType.val == 4:DATA camRadiusSlider = Slider('Radius', 0, leftMargin + columnWidth, 5*columnHeight, buttonWidth, buttonHeight, camRadiusSlider.val, 1, 20, 1,'')DATADATAJ$ DATA@def setBackground(fname):DATA print fnameREEDATAЧ BackgroundText.val=fnameDATADATA def event(evt, val):DATA(h if (evt== QKEY and not val): Exit()DATADATAdef bevent(evt):DATADATADATA  if evt == 7: #setBackgroundDATA<X Blender.Window.FileSelector(setBackground,'OPEN FILE')DATADATAȩ elif evt == 10:DATA DATA print 'Materials'DATAX Blender.Redraw()DATA DATA elif evt == 3: #ExitButtonDATA  Exit()beDATADATA0 elif evt == 2: #Button2DATA  export()DATA  render())DATADATA  elif evt == 1: #exportButtonDATA P export(),DATAX DATA else:DATA Blender.Redraw()DATA( DATA جRegister(draw, event, bevent)TXhX#TXText8DATAEERFDATAOB [X6OBCameraamera.001 {)A\B@???p(?I 5???B?k`&?@I<x7{C> w??M<>{)A\B@??????14t?!E3IC3aj1?@4'5?OBd??)d??>)d?????OB X6[OBCubek5g'@@g @@@@??@@@5g'@@g @?????DOBd?? #=?>=??@???ȟ8DATAkOB [X6OBCube.001X (,$.A m>p?*@q?*@???*@)3q?*X4.A m>p??????DOBd?? #=?>=??@???DATA(,$OB [OBCube.002G$( &>z@{X@M@Y????? ų{X@=4 (M@Y?3 &>z@?????DOBd?? #=?>=??@???DATA(OB ['OBcube1_Black_BlackHpy5E>@࿝@???A???>>۾>?5E>@࿝@?????DOBd?? #=?>=??@???DATApyOB '[OBcube1_Black_Black.001\ ypMd????V???1=Ј>Ј1=?ypMd??????DOBd?? #=?>=??@???`DATA OB [8'OBcube1_Black_Black.002wn0A%!?@???h.P??>!!>>?n0A%!?@?????DOBd?? #=?>=??@???VlDATAOB 8[ OBcube1_Black_Black.003Jƻ@????:>??