BLENDER_v245REND SceneGLOB  0oQ:SRx@~QQSR1-AnimationXzx( R~QQ: DATAPDATAP DATAP DATAzDATAzzDATAz0zDATA0yzDATAy0DATAxyDATAxDATAXxDATAXDATAXzXDATAXzDATAxPDATAxDATA0{PzDATA0{z0DATAzy0{0zDATAy(zyzDATA(py0DATAp(yDATA8yp0zDATA8y{xDATA{|8yzDATA|P|{DATAP|||xDATA||P|XyDATA|(}|zDATA(}p}|DATAp}}(}XDATA}~p}xXzDATA~H~}XzDATAH~~~XzDATA~~H~XXzDATA~( R~xzDATA( R~XzDATA~Q QxO Qh;QQDATAQQLink and MaterialsEditing>DATAQQQMeshEditingF>DATAQ0QQAnim settingsObject>DATA0QHQQDrawObjectF>DATAHQ`Q0QConstraintsObject>DATA`QxQHQEffectsObjectDATAxQQ`QHooksObjectF>0QDATAQQxQParticle InteractionObject>HQDATAQQQSoftbodyObject>HQDATAQ؊QQOutputRender>DATA؊QQQRenderRenderF>DATAQQ؊QAnimRender>DATAQQFormatRender>DATA Qwh;333?V,@DhCDhCC(BDC?z?DATAhh;y Q333?V,/9DATA Q Q~QzP0 !  DATA QPQ QXyG==o?p4 Q8QDATA Q8QTransform PropertiesView3d>DATA8Q Q3D Viewport propertiesView3d>"DATApr4333?V<????????G==o? A*A?G==o??????*A+ B??=C ݢM@ݢM@ݢM@? DATAh4yp333?V</9DATAPQȗQ Qy0z??PףHx)PQPQDATAPQTransform PropertiesIpo!>DATA(v &333?V\zC̽̌?zC@ #< #<`jFzD OBzC̽̌?DATA &zh3333?V\CC|||??l|DATAh3hQ & 333?V\zCCHBC|||?CFC= ADATAxhQ}Qh3 333?V\ =rttDATAQ|QhQ 333?V\?zDzDBCl||ll|zDzD=HB DATAQBQ 333?V\BCBCl|llFzD #<HB DATABrx)Q333?V\??? ???? A???PA A!O?j?}GCHB? A+ B? #<C DATAhx)yB333?V\/9DATAȗQQPQXzXz Q@ȘQQDATAȘQQLink and MaterialsEditing>DATAQȘQMeshEditingF>DATAQQ333?VLzCB{ µCB ?BFB= ADATAQQQ 333?VLzCCHBC$?CFC= ADATAQw@Q333?VL#DhC`DpJgChCC(BDC?z?DATAh@yQ333?VL/9DATAQȗQxzXz} ?=o?.p&hQQQDATAQQTransform PropertiesView3d>DATAQQ3D Viewport propertiesView3d>"DATAp&z0333?YDATAhQQPQLampLampF>DATAQQhQSpotLamp>DATAQQQTexture and InputLamp>DATAQȭQQMap ToLamp>QDATAȭQQQPreviewMaterial>nDATAQ@ ȭQMaterialMaterialF>nDATA@ X QPreviewWorld>gDATAX p @ WorldWorldF>gDATAp  X Mist Stars PhysicsWorld>DATA  p Texture and InputWorld>gDATA   Map ToWorld>g DATA У  OutputRender>DATAУ   RenderRenderF>DATA  У AnimRender>DATA   FormatRender>DATA 0  Link and MaterialsEditing>DATA0 H  MeshEditingF>DATAH ` 0 Mesh ToolsEditing>DATA` x H Mesh Tools 1Editing^>DATAx  ` CameraEditingF>DATA  x ShadersMaterial>n DATA   TextureMaterial>nDATA د  Anim settingsObject>DATAد   DrawObjectF>DATA  د ConstraintsObject>DATA   ScriptlinksScript>DATA 8  EffectsObject DATA8 P  Map InputMaterial>i DATAP h 8 Map ToMaterial>i DATAh  P AnimAnim>DATA  h SoundSound>DATA   ListenerSoundF>DATA Ⱥ  SequencerSound>DATAȺ   ArmatureEditingF>DATA  Ⱥ RampsMaterialF>nQDATA   Mirror TranspMaterial>nDATA (  Mist / Stars / PhysicsWorld>g( DATA( @  Amb OccWorld>gDATA@ X ( Shadow and SpotLamp>DATAX p @ ModifiersEditing>DATAp  X ShapesEditing>X DATA  p MultiresEditing>DATA   Links and PipelineMaterial>nDATA   Render LayersRender> DATA   BakeRender> DATA   SSSMaterial>n DATA   PreviewTexture>lDATA 0  TextureTextureF>lDATA0 H  ColorsTextureF>k DATAH ` 0 ImageTexture>kDATA` H Map ImageTexture>kDATAx wx 333?PQu*DHhC}DH~hCC(BDC?z?mDATA$x ~H&x 333?PQDATAH&r&x 333?PQ??? ???? A??@PA Aj?c3>}GCHB? A+ B? #<C DATA&z H&333?PQ M M M??DATAh y&333?PQ'Import a Wavefront OBJC:\muray\Meshes\..\der Foundation\..\der\..\bStruct.objings#*DATAh h PQ؏.=6 ^2 ^2DATAh @ h h7Y-??AHM]S] ] S H  (0(0h  DATAh  Transform PropertiesView3d,>DATA h View PropertiesView3dT>"DATA r333?h ݕ/?U~'?4F:?>T8175e?4>!s@0i?ٕ/?:F:?91q~>15e?'?T)>xeAtb]A?;k>o^''>|>?T? \? l4ۼ8K@=A0iAxL?1? `o6hd>^#?"6ζNBE¯՟ܵBlh^DB'@-??AHMݕ/?U~'?4F:?>T8175e?4>!s@0i?H?M+Z#{IA@+ B??Zˎ;=C7?X< A A A8>G? DATA(v& 333?h zC̽̌?zC@22 #< #<`jFzD OBzC̽̌?DATA&z 333?h  1 12 1??2DATA  & 333?h ?zDzDBD22FzD #<HB DATA w  333?h DdC8CnD fCC(BDC?z?DATAh y 333?h ~SELECT IMAGE PICTURESC:\muray\Textures\\..\es\ray\Textures\pp/Contents/Resources/lines.png.jpg112.JPG B MW\DATA@  h &h7w=c >o?[S[ [ S  \Hp  PP@ X DATA@ X Transform PropertiesView3d,>DATAX @ View PropertiesView3dT>"DATAxp }  333?@ : W?-/,@DATA$ ~p p 333?@ DATAp r 333?@ ????????w=c >o?{IA@y?w=c >o??????{IA+ B??*==C7?X<ZH@ZH@ZH@? DATA(v`&p 333?@ zC̽̌?zC@22 #< #<`jFzD OBzC̽̌?DATA`&z 333?@  1 12 1??2DATA  `& 333?@ ?zDzDBD22FzD #<HB DATA w  333?@ DdC8CnD fCC(BDC?z?DATAh y 333?@ EOpen Text FileICTURESC:\uray\..\es\..\umpbug Folder/ender.app/Contents/Resources/processing_export.py *2DATA  @ h7P=6Y?@ JL]U]Uo]p \H X @`$@`$ 0 DATA 0 Transform PropertiesView3d,>DATA0  View PropertiesView3dT>"DATAH r333? =5{? =*>$>Zwm$=Fn?Җ>L?>5{?*>$=$>Fn? =\wmԖ>1=@ܨ jTA?a?d!' (:> 5?m?Zwm?u=7 ?QҖBLBe?)>==ƳǎA!>"L>ϳC̊.CkZA3-ÈB@?@ JL=5{? =*>$>Zwm$=Fn?Җ>L?Q?UxkŽLBA+ B??'F1;=C7?X<!@!@!@8>G? DATA(v`wH 333? zC̽̌?zC@22 #< #<`jFzD OBzC̽̌?DATA`wzx 333?  1 12 1??2DATAx X `w 333? ?zDzDBD22FzD #<HB DATAX wX x 333? DdC8CnD fCC(BDC?z?DATAhX yX 333? LSave FileNT PICTURES/Users/ton/Desktop/umpbug Folder/ender.app/Contents/Resources/untitled.blend DATA  &؏.Ph7w=і>o?[U[Uo[p\\`>H   DATA  Transform PropertiesView3d,>DATA  View PropertiesView3dT>"DATA`>{ 333? CC.?8?\\d?DATA rP `>333? ????????w=і>o?{IA @y?w=і>o??????{IA+ B??*==C7?X<ZH@ZH@ZH@? DATA(P v@& 333? zC̽̌?zC@22 #< #<`jFzD OBzC̽̌?DATA@&zh P 333?  1 12 1??2  DATA,  BOp=A+DATA,  CS@ff:DATAh H @& 333? ?zDzDBD22FzD #<HB DATAH wH h 333? DdC8CnD fCC(BDC?z?DATAhH yH 333? Save AseNT PICTURESC:\SGWeb\pincushion\pbug Folder/ender.app/Contents/Resources/struct.blendUSRx "QSR3-Materialodel Sing 0!x!!!": DATA  DATA    DATA `   DATA`   DATA  ` <DATA 8  <DATA8   DATA  8 DATA ! ,<DATA!X! ,DATAX!!!DATA!!X!,DATA!0!!DATA0!!DATAx!!  DATA!!x! ` DATA!P!!  DATAP!!!`  DATA!!P!  DATA!(!! 8 DATA(!p!!  DATAp!!(!8  DATA!!p!  DATA!H!!  DATAH!!!  DATA!!H! !DATA! !! !DATA !h!! X!DATAh!! !8 X!DATA!!h!!!DATA!@!! !DATA@!!!X!!DATA!!@!X!!DATA!!!!!DATA!`!!8 0!DATA`!!!!0!DATA!`!!0!DATA!ph"   ` ?@Pף;;!a"f"!_"DATA! !OutputRender>DATA !^"!RenderRenderF>DATA^"_" !AnimRender>DATA_"^"FormatRender>DATAa"a"333?V\~CA~CA!?AFA= ADATAa"b"a" 333?V\zCCHBC ?CFC= ADATAb"wc"a"333?V\DhC?DhCC(BDC?z?mDATAc"rxb"333?V\??? ???? A??@PA Aj?c3>}GCHB? A+ B? #<C DATAxzf"c"333?V\@̌AR|B1@lA A@CC #<@DATAhf"yx333?V\/9DATAph"pi"!8     !  DATApi"~"ph" !  G@? JL-=-=W-X~w"}"pj"xv"DATApj"k"OutputRender>DATAk"l"pj"RenderRender>DATAl"m"k"AnimRender0>DATAm"n"l"FormatRenderH>DATAn"o"m"PreviewMaterial>DATAo"q"n"MaterialMaterial>DATAq"r"o"ShadersMaterial0>DATAr"0s"q"TextureMaterialD>DATA0s"Ht"r"Map InputMaterial\>DATAHt"`u"0s"Map ToMaterial`>DATA`u"xv"Ht"RampsMaterial>o"DATAxv"`u"Mirror TranspMaterialH>DATAw"wx"333?VChCCvgCC(BDC?z?DATAx"r{"w"333?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}"x"333?VzC AzC A #< #<`jFzD OBDATAh}"y{"333?V;SAVE FILE/usr/home/intrr/blender/blend/untitled.blendDATA~"І"pi" X!! U.=w=o?+=+=W+X,X"8"DATA"r"333?W???h?j(4?t'>????hj(4t'?U.=w=o??OA+ B??=Ch?j(4?t'>dEh@Eh@Eh@? DATA"w""333?WDdC>9C,DeCC(BDC?z?DATA("v8""333?WzC AzC A #< #<`jFzD OBDATAh8"y"333?W SAVE FILE/Users/ton/Desktop/der/blend/untitled.blendDATAІ""~"!0!!!e?B$?AHM+++USЇ"X"DATAЇ"r"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"w"Ї"333?W |DdC>9C,DeCC(BDC?z?DATA("vX""333?W |zC AzC A #< #<`jFzD OBDATAhX"y"333?W | SAVE FILE/Users/ton/Desktop/der/blend/untitled.blendDATA"І"X!8 0!!&=+=o?US"x"DATA"r "333?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 "w ""333?W DdC>9C,DeCC(BDC?z?DATA( "vx" "333?W zC AzC A #< #<`jFzD OBDATAhx"y "333?W SAVE FILE/Users/ton/Desktop/der/blend/untitled.blendSRx"h" SR4-Sequence !"`""H"": DATA !"DATA"" ! DATA"H"" DATAH"""DATA"ؘ"H"DATAؘ" ""DATA "h"ؘ"DATAh"" "DATA""h"DATA"@""DATA@"""TDATA"К"@"TDATAК"""DATA"К"DATA`""""DATA""`" !H"DATA"8"" !"DATA8"""H"ؘ"DATA"Ȝ"8""ؘ"DATAȜ"""" "DATA"X"Ȝ""h"DATAX""" "h"DATA""X" ""DATA"0""h""DATA0"x""""DATAx""0""@"DATA""x""@"DATA"P"" ""DATAP"""h""DATA""P"@""DATA"("""К"DATA("p"""К"DATAp""("""DATA""p"ؘ""DATA""К""DATAH"@" !"ؘ"H"""H""DATAH"`"OutputRender>DATA`"x"H"RenderRenderF>DATAx""`"AnimRender>DATA"x"FormatRender>DATA"w"333?WDhCvDhCC(BDC?z?DATAh"y"333?W/9DATA@"@"H" """h" !  DATA@"а"@""К""ؘ"8=i>o? @"8"DATA@"@333?W&~CB~CB ?BFB= ADATA@x"@"333?W&zCAzCA  A@FB= A DATA"r8"@333?W&????????8=i>o?fffAD&@??fffA+ B? #<C DATAh8"y"333?W&AVE TARGA/t1.blend9DATAа""@"@""h""8=H>o?UUU Z"DATAZxб"333?W*zCAzCA1||1 A@FB= A DATAб"r"Z333?W*????????8=H>o?fffA*@??fffA+ B? #<C DATAh"yб"333?W*AVE TARGA/t1.blend9DATA""а"" ""@"8=>o?SSST" "DATA("v"333?W.B̽̌?B̽̌? #< #<`jFzD SQB̽̌?DATA"r ""333?W.????????8=>o?fffA@??fffA+ B? #<C DATAh "y"333?W.OAD FILE/9DATA""К""""8=i>o? ""DATA"x"333?W1zCAzCA A@FB= A DATA"r""333?W1????????8=i>o?fffAD&@??fffA+ B? #<C DATAh"y"333?W1AVE TARGA/t1.blend9SRxh""SR5-Scripting""""":: DATA"X"DATAX""" DATA""X" DATA"0""DATA0"x""DATAx""0"DATA""x"DATA"P""DATAP"""DATA"P"DATA"("X""DATA("p""X"x"DATAp""("""DATA""p"x""DATA"H""0""DATAH"""x"P"DATA""H""P"DATA" """P"DATA "h""0"x"DATAh"" ""0"DATA""h"""DATA"@""""DATA@"""""DATA""@"P""DATA""""DATA""x"X""" !  DATA":"0"x"P""z==o?0:`:":DATA":Transform PropertiesView3d>DATA:"3D Viewport propertiesView3d>"DATA0:r`:333?Y.|????????z==o?&A*A?z==o??????*A+ B??=C ?@?@?@? DATAh`:y0:333?Y.|/9DATA::""P"""??Pף L:(:::DATA:Transform PropertiesIpo!>DATAx:}.& 333?Y/|> =DATA.&{::333?Y/|CCx??|?DATA(:v%.&333?Y/|zC̽̌?zC@;; #< #<`jFzD OBzC̽̌?DATA%zp::333?Y/|CC|||??l|::DATA,:BOp=A+DATAp:@:% 333?Y/|zCCHBC|||?CFC= ADATA@:|:p: 333?Y/|?zDzDBCl||ll|zDzD=HB DATA::@: 333?Y/|BCBCl|llFzD #<HB DATA:r(::333?Y/|??? ???? A???PA A!O?j?}GCHB? A+ B? #<C DATAh(:y:333?Y/|/9DATA::"0"""O::::DATA::Link and MaterialsEditing>DATA:::MeshEditingF>DATA:::Anim settingsObject>DATA: ::DrawObjectF>DATA :8::ConstraintsObject>DATA8:P: :EffectsObjectDATAP:h:8:HooksObjectF>:DATAh::P:Particle InteractionObject> :DATA::h:SoftbodyObject> :DATA:::OutputRender>DATA:::RenderRenderF>DATA:::AnimRender>DATA:::FormatRender>DATA::ScriptlinksScript>DATA:w:333?Y0|ChC#DhCC(BDC?z?DATAh:y:333?Y0|/9SC:pSCScenetageain+0:%%%H@A@8>G8>G8>G=0":dd??< 2ddZ! ??::????//backbuf/tmp\//ftype@&#@^@&^#D p )DATA%c%RY2DATA%c%%R*DATA%c%%R*DATA%c%%R(*DATA%cH%%R*DATAH%c%%R+DATA%c%H%R+DATA%c%%R*DATA%c%% RP+DATA%c%% Rp+DATA%c%% R*DATA%c%% R+DATA%c%% R*DATA%c%%R@+DATA%c@%%R+DATA@%c8%%R` +DATA8%c%@%RDATA%c8%.b+DATA(0"b,d'=A@DATAL:mL?B ?o: ?? #<=DATA@:h1 RenderLayerIMt0:::IMlines.pngG//..\..\muray\Textures\lines.png`+`+9^CA:CACameraamera.001L>DB=B B@?WO(0:aWOWorldD???===??A@pA A25?L=TXh:TXprocessing_export.py :h:@L::DATA :C:\processing_export.pyDATAh::PO$ghtDATA::h:0M$ FREEDATA:@:: FREEDATA@:::Lry DATA::@:x%FREEDATA:::L DATA:`::%FREEDATA`:::%ps:DATA::`:(e DATA:8::d(0)DATA8::: +FREEDATA::8:(M0)DATA:::+FREEDATA:X::N$DATAX:::0)[DATA::X:pM3FREEDATA:0::M%(1)DATA0:x::0NderDATAx::0:NFREEDATA::x:NFREEDATA:P:: OFREEDATAP:::pOFREEDATA::P:p$+FREEDATA:(::XP$FREEDATA(:p::OFREEDATAp::(:PFREEDATA::p:pFREEDATA:H::(_FREEDATAH:::M$ FREEDATA::H:PPFREEDATA: ::P(FREEDATA :h::Q(extDATAh:: :8 !DATA::h:`Q%FREEDATA:@::QFREEDATA@:::RFREEDATA::@:RFREEDATA:::FREEDATA:`::(Se dDATA`:::pSFREEDATA::`:XFREEDATA:8::SREEDATA8:::TEFREEDATA::8:T=derDATA:::T=(1)DATA:X::`UFREEDATAX:::U=(0)DATA::X: V9FREEDATA:0::V:0)DATA0:x::DATAx::0:WFREEDATA::x:PW0)DATA:P::WFREEDATAP:::Wps:DATA::P:(X DATA:(::pXFREEDATA(:p::XFREEDATAp::(:YFREEDATA:;p:HYFREEDATA;H;:YFREEDATAH;;;Y()EDATA;;H; ZFREEDATA; ;;hZDATA ;h;;Z;DATAh;; ;Z#REEDATA;;h;P[FREEDATA;@;;[!()DATA@;;;[FREEDATA;;@;H\!FREEDATA;;;\DATA;`;;\!DATA`;;;H]FREEDATA;;`;]!EEDATA;8;;]FREEDATA8;;;@^!REEDATA;;8;^FREEDATA;;;^!lenDATA;X;;@_FREEDATAX;;;)DATA;;X;FREEDATA;0;;_;DATA0;x;;_FREEDATAx;;0;(`$)EEDATA;;x;`FREEDATA;P;;FREEDATAP;;;`FREEDATA;;P;;FREEDATA;(;;_*EEDATA(;p;; aDATAp;;(;haDATA; ;p;8&not DATA ;H ;;a1FREEDATAH ; ; ;((texDATA ; ;H ;% FREEDATA ; ; ;(&zersDATA ;h ; ;b FREEDATAh ; ; ;% DATA ; ;h ;%FREEDATA ;@ ; ;pb~ DATA@ ; ; ;bFREEDATA ; ;@ ;c_by_DATA ; ; ;Xcix(fDATA ;` ; ;u&DATA` ; ; ;c.sizDATA ; ;` ;cDATA ;8 ; ;0dDATA8 ; ; ;xdz DATA ; ;8 ;dbal DATA ;; ;e lefDATA;X; ;% ,DATAX;;;PeFREEDATA;;X;e DATA;0;;e DATA0;x;;8f,end(DATAx;;0;f'imagDATA;;x;fend(DATA;P;;8g(nderDATAP;;;g0(numDATA;;P;h* EEDATA;(;;`h0* DATA(;p;;h(DATAp;;(;(i2FREEDATA;;p;i)is sDATA;H;;i-DATAH;;;Pj(+ stDATA;;H;j/DATA; ;;k) DATA ;h;;pk-3*l.DATAh;; ;m + sDATA;;h;ktr(3DATA;@;; l%romODATA@;;;xl[a liDATA;;@;m7rrayDATA;;;pmHmt(1DATA;`;;mC'|' DATA`;;;hn<DATA;;`;n4DATA;8;; oEear DATA8;;;oer('DATA;;8;&rginDATA;;;%plesDATA;X;; &DATAX;;;oFDATA;;X;XpFDATA;0;;p*DATA0;x;;0qDATAx;;0;qDATA;;x;P%= TeDATA;P;;l,DATAP;;;q DATA;;P;xX&DATA;(;;r) DATA(;p;;hr( BacDATAp;;(;ramRaDATA;;p;%fnamDATA;H;;s 'OPEDATAH;;;ps(draDATA;;H;sDATA; ;;tDATA ;h;;Xt'DATAh;; ;t^DATA;;h;@ubDATA;@;;uaDATA@;;;pv^DATA;;@;w0DATA;;;hwoDATA;`;;b(DATA`;;;%DATA;;`;xDATA;8;;Xx'DATA8;;;x'DATA;;8;x0(DATA; ;;@y)DATA ;X ;;y/P)DATAX ; ; ;yDATA ; ;X ;zDATA ;0!; ;{(DATA0!;x!; ;p{+DATAx!;!;0!; '+DATA!;";x!;{%DATA";P";!;|-DATAP";";";`|`.DATA";";P";'.DATA";(#;";DATA(#;p#;"; }DATAp#;#;(#;p}7DATA#;$;p#;h&DATA$;H$;#;}rDATAH$;$;$;*DATA$;$;H$;(~0raDATA$; %;$;~;rbDATA %;h%;$;ODATAh%;%; %;DATA%;%;h%;DATA%;@&;%;PDATA@&;&;%;,8DATA&;&;@&;$DATA&;';&;+DATA';`';&;X.DATA`';';';DATA';';`';DATA';8(;';P$DATA8(;(;';*@?DATA(;(;8(;+DATA(;);(;FREEDATA);X);(;X.DATAX);););7FREEDATA););X);( +DATA);0*;);*DATA0*;x*;); ;DATAx*;*;0*;FREEDATA*;+;x*;*FREEDATA+;P+;*;%DATAP+;+;+;8+DATA+;+;P+;؃DATA+;(,;+;%DATA(,;p,;+;H*DATAp,;,;(,; DATA,;-;p,;h*DATA-;H-;,;h DATAH-;-;-;DATA-;-;H-;% x(p,DATA-; .;-;% not DATA .;h.;-;!matrDATAh.;.; .;h"DATA.;.;h.;+DATA.;@/;.;DATA@/;/;.;%DATA/;/;@/;0DATA/; /;" DATA h/;p&DATAh ȆDATAhDATA@X"DATA@&DATA@XDATADATA`XDATA`+DATA`+DATA8DATA8DATA80DATAX*DATAXxDATAXȉ1DATAX0DATA0DATA0xȊDATAx0h" DATAx+DATAPnDATAPDATAP+DATA(DATA(p(BVDATAp(PEDATApȌDATAH" DATAH&DATAH=DATA " DATA hDATAh DATAhP^DATA@0DATA@1DATA@DATA 8DATA ` $DATA`   =DATA  ` p" DATA 8! ?( DATA8!! ؏oDATA!!8!xDATA!"!2DATA"X"!ȐDATAX"""شWDATA""X"FDATA"0#"DATA0#x#"x&DATAx##0#DATA#$x#PDATA$P$#`oDATAP$$$DATA$$P$%DATA$(%$PDATA(%p%$"WDATAp%%(%FDATA%&p%DATA&H&%tDATAH&&&(qDATA&&H&?(DATA& '&DATA 'h'& DATAh'' '2DATA''h'DATA'@('X&DATA@((' F&DATA((@(P8DATA()(DATA)`)(/DATA`)))%DATA))`)h*DATA)8*)Y%DATA8**)ȖDATA**8*%DATA*+*DATA+X+*`"DATAX+++@K&DATA++X+DATA+0,+XDATA0,x,+DATAx,,0,DATA,-x,  DATA-P-,DATAP---PADATA--P-ȘeDATA-(.-0|PDATA(.p.-DATAp..(.%DATA./p.`DATA/H/.DATAH///DATA//H/PDATA/ 0/DATA 0h0/DATAh00 001DATA00h0DATA0@10DATA@110(DATA11@1pDATA121DATA2`21DATA`222XDATA22`2DATA2832DATA83320DATA3383xDATA343DATA4X43]DATAX444DATA44X4DATA4054 DATA05x54X6DATAx5505KDATA56x5@&DATA6P65#DATAP666DATA66P68DATA6(76DATA(7p76СDATAp77(7 DATA78p7DATA8H87hDATAH888DATA88H8آ!DATA8 980DATA 9h98DATAh99 9DATA99h9DATA9@:9HDATA@::9(DATA::@:DATA:;:8,DATA;`;:DATA`;;;ХDATA;;`; DATA;8<;X@DATA8<<;ЦMDATA<<8<XQDATA<=<PDATA=X=<8DATAX===DATA==X=HDATA=0>=DATA0>x>=@DATAx>>0>xDATA>?x>ȩtDATA?P?>pDATAP???DATA??P?DATA?(@?ЫDATA(@p@?DATAp@@(@@DATA@Ap@DATAAHA@PDATAHAAADATAAAHA8DATAA BADATA BhBADATAhBB BDATABBhBDATAB@CBȯDATA@CCBDATACC@C8DATACDC0 DATAD`DCDATA`DDDذDATADD`DDATAD8EDX$DATA8EEDDATAEE8EDATAEFE0DATAFXFEhDATAXFFFDATAFFXF8DATAF0GF`DATA0GxGFDATAxGG0GDATAGHxGDATAHPHG`DATAPHHHDATAHHPHDATAH(IHDATA(IpIH0DATApII(IhDATAIJpI~ DATAJHJIXZ DATAHJJJDATAJJHJDATAJ KJXW DATA KhKJ@DATAhKK KxDATAKKhKDATAK@LKDATA@LK0DATAPO$import BlenderEDATA 0M$import os_SDATAimport structEDATALfrom Blender import *:DATAx%from Blender import LampREEDATA$Lfrom Blender.Scene import Render):DATA%from Blender.Draw import *oDATA%from Blender.BGL import *nDATA (from Blender import RegistryREEDATAd(from Blender import TextDATA +DATA(Mfrom math import *DATA+ DATA N$#globalsQDATA_DATA4pM#get the root directory that the current file is inDATA(M#we'll write the muray files there. EEDATA 0Npath = Blender.Get('filename')1DATANtokens = path.split('\\')rDATANfileName = tokens.pop();DATA Ofile = fileName.split('.')DATApOfileName = file[0]DATAp$+ DATA XP$path =''DATAOfor i in tokens:DATAP path = path + i + '\\' DATApDATA(_P"DATAM$def export():EEDATAPP #open a file to export toDATA,P f = open(path + fileName + '.mra','wb')GE:DATA,Q s = open(path + fileName + '.mrb','wb')DATA8 ! riDATA(`Q f.write('muRay scene description\n')EDATAQ f.write(' ')EDATAR def writeln(out):DATAR f.write(out + '\n')EEDATA DATA(S def fmt(input):= 4DATApS return '%5.5f' %inputDATAX DATAS def point_by_matrix(p, m):DATAHT return [p[0] * m[0][0] + p[1] * m[1][0] + p[2] * m[2][0] + m[3][0],EDATA@T p[0] * m[0][1] + p[1] * m[1][1] + p[2] * m[2][1] + m[3][1],EEDATA@T p[0] * m[0][2] + p[1] * m[1][2] + p[2] * m[2][2] + m[3][2]]EEDATA `U def vector_by_matrix(p, m):REEDATA@U return [p[0] * m[0][0] + p[1] * m[1][0] + p[2] * m[2][0],EEDATA< V p[0] * m[0][1] + p[1] * m[1][1] + p[2] * m[2][1], DATA<V p[0] * m[0][2] + p[1] * m[1][2] + p[2] * m[2][2]] DATA DATA W def contain(min, max, point):EDATAPW for v in point:(4DATAW if v[0] < min[0]:)EDATAW min[0] = v[0]:DATA(X if v[1] < min[1]:REEDATApX min[1] = v[1]+ DATAX if v[2] < min[2]:REEDATAY min[2] = v[2]rrDATAHY if v[0] > max[0]:REEDATAY max[0] = v[0]DATAY if v[1] > max[1]:REEDATA Z max[1] = v[1]DATAhZ if v[2] > max[2]:DATAZ max[2] = v[2] ";DATA$Z def containSphere(min,max,sphere):DATA P[ radius = sphere.getSize()[0]EDATA$[ if min[0] > sphere.LocX-radius:')DATA [ min[0] = sphere.LocX-radiusEDATA$H\ if min[1] > sphere.LocY-radius:(DATA \ min[1] = sphere.LocY-radiusDATA$\ if min[2] > sphere.LocZ-radius:arDATA H] min[2] = sphere.LocZ-radiusEDATA$] if max[0] < sphere.LocX+radius:ecDATA ] max[0] = sphere.LocX+radius DATA$@^ if max[1] < sphere.LocY+radius:o.DATA ^ max[1] = sphere.LocY+radiusrDATA$^ if max[2] < sphere.LocZ+radius:o.DATA @_ max[2] = sphere.LocZ+radiusEDATA DATA DATA_ #Grab the sceneDATA_ scn = Scene.GetCurrent()DATA((` context = scn.getRenderingContext()DATA` obj = Blender.Object.Get()DATA DATA` #export general scene dataDATA;DATA_ DATA a #background colorTDATAha w=Blender.World.Get()yDATA8&DATA4a scene = Blender.Scene.GetCurrent().getChildren()EDATA(GDATA% writeln('')REEDATA(& DATA$b #create the baked textures listDATA% baked_maps=[]DATA% ,mDATApb #create a materials list00DATAb material_array =[]DATAc materials = Material.get()DATAXc for m in materials:SelDATAu& iDATAc refFile = "NULL";DATAc textureFile = "NULL";DATA0d alphaFile = "NULL";DATAxd normalFile = "NULL";nDATAd emitFile = "NULL";DATAe specFile = "NULL";DATA% 0DATA Pe for mtex in m.getTextures():EDATAe if mtex: DATA e #check if there is an imageDATA08f if mtex.tex.type == Texture.Types.IMAGE:fa.DATA(f print mtex.tex.image.getFilename()DATAf #map to colorrDATA,8g if mtex.mapto == Texture.MapTo.COL:()DATA4g textureFile = mtex.tex.image.getFilename()EEDATA,h if mtex.mapto == Texture.MapTo.ALPHA:DATA4`h alphaFile = mtex.tex.image.getFilename() mt(DATA,h if mtex.mapto == Texture.MapTo.NOR:,maDATA4(i normalFile = mtex.tex.image.getFilename() eDATA,i if mtex.mapto == Texture.MapTo.EMIT:DATA0i emitFile = mtex.tex.image.getFilename()atDATA,Pj if mtex.mapto == Texture.MapTo.REF:eftDATA0j refFile = mtex.tex.image.getFilename() DATA,k if mtex.mapto == Texture.MapTo.SPEC:DATA0pk specFile = mtex.tex.image.getFilename() DATAm ,DATA k print m.getDiffuseShader()REEDATA( l material_array.append(m.getName()) etDATA\xl writeln('shad=' + str(m.rgbCol) + '|' +str(m.getRayMirr()) + '|' + str(m.getHardness()) +DATA8m '|' + str(m.getAlpha()) +'|'+ str(m.getIOR()) +'|'+DATALpm str(m.getSpec())+'|'+ str(m.getEmit())+'|' + str(m.getRef()) + '|' + ''DATADm str(m.getDiffuseShader()) +'|' + str(m.getSpecShader()) + '|' +DATA hn str(m.getSpecCol()) +'|' +EDATA8n str(textureFile) + '|' + str(alphaFile) + '|' + REEDATAH o str(normalFile) + '|' + str(emitFile)+'|' + str(refFile) + '|' + SeDATAo str(specFile), DATA&)*lDATA% ) DATA &REEDATAHo #while looping through the scene, we will need to collect the maximummDATAHXp #extents of the scene. These will be written to the head of the fileDATA,p #after all mesh objects have been measureEDATA0q min = [1e300,1e300,1e300];DATA q max = [-1e200,-1e300,-1e300];DATAP% numObjects = 0DATAlturDATAq for obj in scene:.DATAxX&6, DATA r if obj.getType() == 'Camera':DATA,hr cam_mat = obj.getMatrix('worldspace')HeiDATAr print 'Exporting camera'DATA% iDATA$s height = context.imageSizeY() evDATA ps width = context.imageSizeX()DATA s lens = obj.getData().lens DATAt fov = lens; DATA(Xt writeln('cam=' + str(camType.val) + DATA`t '['+str(cam_mat[0][0]) + ',' + str(cam_mat[0][1]) + ',' + str(cam_mat[0][2]) + ']' + '|' +EDATAd@u '['+str(cam_mat[1][0]) + ',' + str(cam_mat[1][1]) + ',' + str(cam_mat[1][2]) + ']' + '|' + "DATAdu '['+str(-cam_mat[2][0]) + ',' + str(-cam_mat[2][1]) + ',' + str(-cam_mat[2][2]) + ']' + '|' +EEDATA`pv '['+str(cam_mat[3][0]) + ',' + str(cam_mat[3][1]) + ',' + str(cam_mat[3][2]) + ']' + '|' +DATA4w str(width) + ',' + str(height) + ']' + '|' +REEDATAphw str(fov) + ',' + str(fov) + ']' + str(obj.getData().getClipStart()) + '|' + str(camRadiusSlider.val) + '|' DATAb( )DATA% DATA x elif obj.getType() == 'Lamp':DATAXx print 'Exporting Lamp' DATA x l=Lamp.Get(obj.getName())REEDATAx m = obj.getMatrix()DATA@y if l.getType() == 0: tryDATA0y #lamp=location,color,size,energy for a lampDATAy 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]) )DATAz elif l.getType() == 1:DATA,{ #sun=location,color,energy,direction+DATA p{ print 'Exporting the sun'EEDATA ' 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]) )DATA' DATAREEDATA } elif obj.getType() =='Surf':EDATA8p} material_index = material_array.index(obj.getName())DATAh&2DATA } containSphere(min,max,obj)DATA*DATA4(~ writeln('sphere=[' + str(obj.getLocation()) +REEDATA<~ ']|['+ str(obj.size[0]) + ']|['+ str(material_index))DATAO DATA  elif obj.getType() == 'Mesh':DATA DATAP #get standard mesh dataEDATA0 m = NMesh.GetRawFromObject(obj.getName())DATA( mat = obj.getMatrix('worldspace')DATA+ DATA0X #for every mesh, we dump a list of verticesDATA numverts = len(m.verts)DATA numTris = 0 EEDATA(P print 'verts ' + str(numverts) DATA, writeln('numverts=' + str(numverts)) EDATA+ DATA  for i in range(numverts): DATA0X x,y,z = point_by_matrix(m.verts[i].co,mat)DATA8 writeln('v=' + fmt(x) + '|' + fmt(y) +'|' + fmt(z))DATA( + DATA* DATA<  #iterate through faces - then split faces into trianglesDATA faces = m.facesDATA* DATA % #lastt()DATA8+ DATA؃ lastUVTexture = 0DATA% lastidx = 0;DATAH* DATA  for fa in faces:DATAh* DATA$h #each face may have an imageMDATA  if str(fa.image) == 'None':DATA% idx = -1EEDATA % else:ndDATA$ #is this image the last one?xDATA$h if lastUVTexture == fa.image:DATA+ (DATA idx = lastidxDATA% DATA4 #different texture, have we seen it before?.DATA " try:DATA(p idx = baked_maps.index(fa.image)DATAȆ #create new entry DATA except ValueError:DATA$X baked_maps.append(fa.image) DATA( idx = baked_maps.index(fa.image)DATAX DATA  lastUVTexture = fa.imageDATAX lastidx = idx;DATA+ DATA+ DATA if len(fa.v) == 3: DATA numTris += 1DATA0 numObjects+=1DATAX* DATA x #check for uv coordinatesDATA4ȉ #there has got to be a better way to do thisDATA0 if len(fa.uv) == 0:DATA zers=[0,0];DATA Ȋ fa.uv = [zers,zers,zers];DATA h" 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(B str(fa.v[0].index) + '|' + str(fa.v[1].index) + '|' + str(fa.v[2].index) + '|' + DATAHP 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:DATA numTris += 2DATA numObjects+=2DATAP^ DATA 0 #check for uv coordinatesDATA4 #there has got to be a better way to do thisDATA if len(fa.uv) == 0:DATA8 zers=[0,0];DATA( fa.uv = [zers,zers,zers,zers];DATA= DATA p" 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 x contain(min,max,trans)DATA2DATAȐ 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 )DATAP 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% DATAP writeln('t=' + DATAX" 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())) + '|' +DATA 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]) + '|' + DATAt str(idx)EDATA(q )DATA?( DATA DATA except:REEDATA4 print 'caught quad exception on ' + str(fa) DATADATAX& DATA F& DATA<P #if the background is set pass that in, else pass colorDATA if Background.val:DATA0 writeln('bgimage=' + str(BackgroundText.val))DATA% else:DATA,h writeln('bgcolor=' + str(w[0].getHor()))DATAY% DATA Ȗ #write out the baked texturesDATA%DATA for tex in baked_maps:DATA$` s.write('b=' + str(tex) + '\n') DATA@K&DATA #done with the scene DATA X f.close@DATA  s.closeDATA DATA def render():EEDATA  spawnPath = path + fileNameDATADP os.spawnl(os.P_NOWAIT,executable,'foo ' + path + ' ' + fileName)DATAhȘ #os.spawnl(os.P_NOWAIT,"/home/sheemwaza/base/optimized/src/base","monkey","/home/sheemwaza/out.mra")DATAT0| #retcode=Popen(["/home/sheemwaza/base/src/base","/home/sheemwaza/out.mra"]).pidDATA print 'no op'EDATA%DATA`mSampleSlider = Create(0)DATAcamRadiusSlider = Create(1)DATAimageSamples = Create(1)DATAPshadowSamples = Create(4)DATAmuonSlider = Create(0)DATAMuon = Create(0)DATA40BackgroundText = Create('using background color')DATABackground = Create(0)DATAnumSample = Create(4)DATA(hemiToggle = Create(0)DATApcamType = Create(1)DATAiCacheToggle = Create(0)DATAsamplerWindow = Create(1)DATAXGIWindow = Create(0)DATApartOutput = Create(0)DATAbounce = Create(0) DATA0filterWidth = Create(0)DATAxjitter = Create(0)DATAsbackground = Create(1)DATA]DATAmaterialsDrop = Create(0)DATA DATA def draw():DATA8X global mSampleSlider, muonSlider, Muon,BackgroundTextEDATAL global Background, numSample, hemiToggle, bounce, ExitButton, iCacheToggleDATA(@ global Button2, camType, exportButtonDATA$ global imageSamples, shadowSamplesDATA global camRadiusSliderDATA 8 global samplerWindow, GIWindowDATA global partOutputDATAС global filterWidth, jitterDATA  global sbackground DATA DATAhDATADATA$آ glClearColor(1.0, 1.0, 1.0, 0.0)DATA 0 glClear(GL_COLOR_BUFFER_BIT)DATADATA leftMargin = 10;DATA bottomMargin = 15;DATAH columnWidth = 170;DATA, buttonWidth = columnWidth - leftMargin;DATA columnHeight = 35;DATA08 buttonHeight = columnHeight - bottomMargin;DATADATA Х #always display these buttonsDATA DATADX Button('Exit', 3, leftMargin, 5, buttonWidth, buttonHeight, '')DATAPЦ Button('Export', 1, leftMargin+columnWidth,5, buttonWidth, buttonHeight, '')DATATX Button('Render', 2, leftMargin+ 2*columnWidth, 5, buttonWidth, buttonHeight, '')DATAP DATA8 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,'') DATADATA@ DATAx #these are the GI settingsDATAxȩ #Background = Toggle('Set Background', 7,leftMargin, 4*columnHeight, buttonWidth, buttonHeight, Background.val, '') +DATAp DATA DATA 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.')DATADATAP bounce = Slider('Bounce', 0, leftMargin + 2 * columnWidth, 2*columnHeight, buttonWidth, buttonHeight, bounce.val, 1, 5, 0,'') DATA DATA8 if Background.val == 1:DATA BackgroundText = String('', 6, leftMargin + columnWidth, 4*columnHeight, buttonWidth, buttonHeight, BackgroundText.val, 512, '')DATA DATA if camType.val == 4:DATA camRadiusSlider = Slider('Radius', 0, leftMargin + columnWidth, 5*columnHeight, buttonWidth, buttonHeight, camRadiusSlider.val, 1, 20, 1,'')DATAȯDATA DATA8def setBackground(fname):DATA0 print fnameREEDATA BackgroundText.val=fnameDATAذDATAdef event(evt, val):DATA(X if (evt== QKEY and not val): Exit()DATADATAdef bevent(evt):DATA0DATAhDATA  if evt == 7: #setBackgroundDATA< Blender.Window.FileSelector(setBackground,'OPEN FILE')DATA`DATA elif evt == 10:DATA DATA print 'Materials'DATA` Blender.Redraw()DATA DATA elif evt == 3: #ExitButtonDATA  Exit()beDATA0DATAh elif evt == 2: #Button2DATA ~ export()DATA XZ render())DATADATA  elif evt == 1: #exportButtonDATA XW export(),DATA@ DATAx else:DATA Blender.Redraw()DATA DATA 0Register(draw, event, bevent)TXh:TXTextHHHHȼDATAHEERFDATAOB +[+OBCameraamera.001 :~eAzb]A???*?91<"P???ޕ/?5F:?81V~>75e?'?T3>~eAzb]A??????50'B?1ڲx3?j]59˴7 6?OBd??)d??>)d?????OB +[p++OBcube11_Black_Blackha?ha?ha???ha?ha?ha??????/FG?gS?!Ij\>?C>?k1L\?%AȚu3A?DOBd8? #=?>=??@???(^z&DATAOB p+[*+OBcube11_copy12_Black_B0ha?ha?ha???ha?ha?ha??????/FG?gS?!Ij\>?C>?k1L\?%AȚu3A?DOBd8? #=?>=??@???[&` DATA0OB *[@+p+OBcube11_copy13_Black_BXhha?ha?ha???ha?ha?ha??????/FG?gS?!Ij\>?C>?k1L\?%AȚu3A?DOBd8? #=?>=??@???5))DATAhOB @+[+*OBcube11_copy14_Black_Bha?ha?ha???ha?ha?ha??????/FG?gS?!Ij\>?C>?k1L\?%AȚu3A?DOBd8? #=?>=??@???>( #DATAOB +[P+@+OBcube1_copy3_default_dha?ha?ha???ha?ha?ha??????/FG?gS?!Ij\>?C>?k1L\?%AȚu3A?DOBd8? #=?>=??@???(s&DATAOB P+[(*+OBcube1_copy5_default_dha?ha?ha???ha?ha?ha?????