BLENDER_v240REND 5ۿStageSRtAm`uSRAnimation0DNPIIxo{~N~KDATA0nXBDATAXBnB0KDATABnBXB~KDATABnCB~DATACnXCBDATAXCnCC~DATACnCXC1DATACnDC~1DATADnXDCDATAXDnDD1DATADnDXDDATADnD~DATANoXBBDATAoENB0DATAEo`ECXCDATA`EoEEXBCDATAEoE`EBCDATAEo8FECCDATA8FoFECDDATAFoF8FXCDDATAFoGFCXDDATAGoXGFCXDDATAXGoGGDXDDATAGoGXGXCCDATAGo0HGCCDATA0HoxHGD0DATAxHoH0HCDDATAHoIxHXCDDATAIoPIHBDDATAPIoIDDDATAIq ^0DDB~~~[\JZDATAJp`KLink and MaterialsEditing>DATA`Kp0LJMeshEditingF>DATA0LpM`KAnim settingsObject>DATAMpM0LDrawObjectF>DATAMpNMConstraintsObject>DATANppOMEffectsObjectDATApOp@PNHooksObjectF>MDATA@PpQpOParticle InteractionObject>MDATAQpQ@PScriptlinksScript>DATAQpRQCameraEditingF>DATARpSQOutputRender>DATASpPTRRenderRenderF>DATAPTp USAnimRender>DATA UpUPTFormatRender>DATAUpV UAnimAnim>DATAVpWUSoundSound>DATAWp`XVListenerSoundF>DATA`Xp0YWSequencerSound>DATA0YpZ`XCurve and SurfaceEditingF>DATAZpZ0YCurve ToolsEditing>DATAZpZCurve Tools1Editing>DATA[^\333?X @DhCQDhCC(BDC?z?DATAT\`[333?X /9DATA ^q_ICXBBC~2K~2L~KKDATA_qg ^CCXDD?2?AHM00-gaxf``DATA`p`Transform PropertiesView3d[>DATA`p`3D Viewport propertiesView3d>"DATAaYd333?(X z"?ǾML*?yE?>| Mp]\?U?5n4?u"?yE?Ǿ>^\?JL*?| T?@(%o@? .2? *ML* W?D> ?| ?fS?U?j4ةAA?&4?Ĵsk>q?)Aڻ'ןAZ.A)@?2?AHMz"?ǾML*?yE?>| Mp]\?U?5n4?H?;澲XvfA B?=CY_@ DATA deda333?(X DATAxdded 333?(X ث. ǁ@#%%DATAeaxfd333?(X }lA@zA‰B}K -B- A@CC #<@-DATATxf`e333?(X Open Text File/home/jerome/soft/3D/blender/blenderman0.1beta9.0/blenderman0.1beta9.0.py DATAgqxo_DXDCXC??Pף~0~~0-imhhDATAhpTransform PropertiesIpo!>DATA(i]k333?/X yC̽̌?yC@-uu- #< #<`jFzD OByC̽̌?DATAkYmi333?/X ??? ???? A???PA A!O?j?}GCHB? A B? #<CDATATm`k333?/X /9DATAxoqgDCXCD~~~ #rspp@qDATAppp@qLink and MaterialsEditing>DATA@qpppMeshEditingF>DATArr 333?5X zCCHBC#?CFC= ADATAr^sr333?5X #DhC`DpJgChCC(BDC?z?DATATs`r333?5X /9SRt`umźASRBlenderManvxy~X~к{~N~KDATAvn@vDATA@vnvvKDATAvnv@v~KDATAvnwv~DATAwn@wv,DATA@wnww~,DATAwnw@w0DATAwnxw~0DATAxn@xw,DATA@xnxx0DATAxnx@xDATAxnxDATAyoHy@vvDATAHyoyyvvDATAyoyHyvwDATAyo zyv@wDATA zohzyw@wDATAhzoz z@vwDATAzozhzvwDATAzo@{zwwDATA@{o{z@wwDATA{o{@{wxDATA{o|{@wxDATA|o`|{w@xDATA`|o||w@xDATA|o|`|x@xDATA|o8}|wxDATA8}o}|wxDATA}o}8}@xxDATA}o~}xxDATA~o}xxDATAX~qvw@wv?@Pף~+~~+ ,0PDATAPp OutputRender>DATA pPRenderRenderF>DATAp AnimRender>DATApFormatRender>DATA` 333?,>zCCHBC,?CFC= ADATA`^`333?,>DhC?DhCC(BDC?z?mDATA`Y@`333?,>??? ???? A??@PA Aj?c3>}GCHB? A B? #<CDATA@a0`333?,>@̌AR|B1@lA A@CC #<@DATAT0`@333?,>/9DATAqX~w@vvw~1K~1K~KKDATAqhx@xw@wG@? JL~-/~-G~H/论਺DATAppOutputRender>DATApp@RenderRender>DATA@ppAnimRender0>DATAp@FormatRenderH>DATApPreviewMaterial>DATApMaterialMaterial>DATApPShadersMaterial0>DATAPp TextureMaterialH>DATA pPMap InputMaterialD>DATAp Map ToMaterial,>DATApLink and MaterialsEditing>DATAp`MeshEditing>DATA`p0Mesh ToolsEditing0>DATA0p`Mesh Tools 1EditingH>DATApЗ0RampsMaterial>DATAЗpMirror TranspMaterial0>DATAppЗPreviewLamp>DATApp@LampLamp>DATA@ppShadow and SpotLamp0>DATAp@Texture and InputLampH>DATApMap ToLampH>DATApPreviewTexture>DATApPTextureTexture>DATAPp ColorsTexture>DATA pPCloudsTexture0>DATAp Anim settingsObject>DATApDrawObject>DATAp`HooksObject>DATA`p0ConstraintsObject0>DATA0p`EffectsObject0`DATApФ0Particle InteractionObject0>`DATAФpPreviewWorld>DATAppФWorldWorld>DATApp@Mist / Stars / PhysicsWorld0>DATA@ppAmb OccWorld0>pDATAp਺@Texture and InputWorldH>DATA਺pMap ToWorldH>DATA^333?LChCCpb@\CC(BDC?z?DATAY333?LJ>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'>dDATA(]论333?LzC AzC A #< #<`jFzD OBDATAT论`333?L;SAVE FILE/usr/home/intrr/blender/blend/untitled.blendDATAhqкwxxxʫ==o?--GH`w0P``DATA`pTransform PropertiesView3di>"DATA 0e333?DATAxd(0 333?k> B@DATA(Y333????]־Z?????]>Z??ʫ==o=>n? ;?ɾ>A,A]>Z??ʫ==o????]־Z???ɾ>A  B?=C]־Z?lJ@B@?1?dDATAa(333?@ffzAbB@jA A@CC #<@DATA^333?DdC>9C,DeCC(BDC?z?DATA(]P333?zC AzC A #< #<`jFzD OBDATATP`333? Open Text FileATH/home/jerome/soft/3D/blender/blenderman0.1beta9.0//../pts/../blenderman0.1beta9.0.py DATAкqhxw@xx?4@ JL//lgĺȻȻDATAȻpTransform PropertiesView3di>"DATAYx333?9I>jvz)vK@>*ĘҿAf9?`Ivz*<>)vRpo?jK@>>(D>*@?&\"|?j?j?m@-_@K@:<()@j(WRbGF6Af9AS8fve<1=N>RBj{N@AY@?4@ JL9I>jvz)vK@>*ĘҿAf9? ?O>r"?ɾ>A  B?=C]־Z?lJ@B@?1?dDATA xeȿ333?DATAxȿdpx 333?k> B@DATApaȿ333?@ffzAbB@jA A@CC #<@``DATA,`SC@ff{DATA^ºp333?DdC>9C,DeCC(BDC?z?DATA(º]ĺ333?zC AzC A #< #<`jFzD OBDATATĺ`º333? Open Text FileATH/home/jerome/soft/3D/blender/blenderman0.1beta9.0//../pts/../blenderman0.1beta9.0.py SRtźm`uSRModel 4-split0ƺ0ɺpɺκϺ8{^`DATA0ƺnpƺDATApƺnƺ0ƺ`DATAƺnƺpƺ`DATAƺn0ǺƺDATA0ǺnpǺƺDATApǺnǺ0ǺDATAǺnǺpǺDDATAǺn0ȺǺDDATA0ȺnpȺǺLDATApȺnȺ0ȺLDDATAȺnȺpȺL DATAȺn0ɺȺ DATA0ɺnȺ DATApɺoɺpƺƺDATAɺoʺpɺ0ƺƺDATAʺoHʺɺ0ƺ0ǺDATAHʺoʺʺƺpǺDATAʺoʺHʺ0ǺpǺDATAʺo ˺ʺpƺǺDATA ˺oh˺ʺƺǺDATAh˺o˺ ˺ǺǺDATA˺o˺h˺0Ǻ0ȺDATA˺o@̺˺pǺ0ȺDATA@̺o̺˺ǺpȺDATA̺o̺@̺ǺpȺDATA̺oͺ̺0ȺȺDATAͺo`ͺ̺pȺȺDATA`ͺoͺͺǺȺDATAͺoͺ`ͺpǺȺDATAͺo8κͺȺȺDATA8κoκͺ0Ǻ0ɺDATAκoκ8κǺ0ɺDATAκoκȺ0ɺDATAϺq0ƺ0ǺpǺƺ?@PףкDATAкpкPreviewLamp>DATAкpѺкLampLamp@>DATAѺpxҺкSpotLamp>DATAxҺpHӺѺTexture and InputLamp>DATAHӺpԺxҺMap ToLamp>xҺDATAԺpԺHӺPreviewMaterial>DATAԺpպԺMaterialMaterial@>DATAպpֺԺPreviewWorld>DATAֺpX׺պWorldWorld@>DATAX׺p(غֺMist Stars PhysicsWorld>DATA(غpغX׺Texture and InputWorld>DATAغpٺ(غMap ToWorld>(غDATAٺpںغOutputRender>DATAںphۺٺRenderRenderF>DATAhۺp8ܺںAnimRender>DATA8ܺpݺhۺFormatRender>DATAݺpݺ8ܺLink and MaterialsEditing>DATAݺp޺ݺMeshEditingF>DATA޺pxߺݺMesh ToolsEditing>DATAxߺpH޺Mesh Tools 1Editing>DATAHpxߺCameraEditing@>DATApHShadersMaterial>DATApTextureMaterial>DATApAnim settingsObject>DATApXDrawObjectF>DATAXp(ConstraintsObject>DATA(pXScriptlinksScript>DATAp(EffectsObjectXDATA^333?DhC^e¸/DuOlCC(BDC?z?mDATAY333???? ???? A??@PA Aj?c3>}GCHB? A B? #<CDATAa333?@̌AR|B1@lA A@CC #<@DATAT`333?/9DATAqϺǺpƺƺǺE`E_``DATAq80ȺȺȺpǺX<*a=o?MMM4(DATAp3D Viewport propertiesView3d>"DATAY333???DD$?N?D$?%N%D??%H ?oX< xI !*a=S!?& B'!k'_Ay@?X<*a=o???DD$?N?? B  B??==C DATA^333?DdCSC/ugD4=CC(BDC?z?DATAxd` 333? x?OQ6RDATA(`]333?zC AzC A #< #<`jFzD OBDATAT``333?MSAVE FILE/home/intrr/blender/blend/jects/klo/untitled.blend7DATA8q0Ǻ0ɺȺ0ȺQB=tn=o?KKKL(800DATA0pTransform PropertiesView3dx>"DATAY333? ?3?3??3?3?QB=(^1n;sn=?QBA=4Xg)AzC?QB=tn=o??3?3?5?5QBA B??を==C DATA^333? DdC8CnD fCC(BDC?z?DATA(]8333? zC AzC A #< #<`jFzD OBDATAT8`333? "LOAD FILEPUT PICTURES/Users/ton/Desktop/render/d/../er/../B.blendDATAq88ȺpȺǺȺ?@ JLM!CM!!M!C4#CDATApTransform PropertiesView3dj>"DATAY`333?x"?ǾLL*?yE?>| ) 2\\?V?!?y"?yE?3Ǿ>]\?LL*?| V?vA]~LA?C.2?S]*LL*iW?e.? ?| ?52?VA!A?Z4?)P<]>VI>3q ܠBiȦBg}B@?@ JLx"?ǾLL*?yE?>| ) 2\\?V?!?H?;澲Xv!A  B??8zT;=C DATA`^`333?DdCaCnDCC(BDC?z?DATA(`]`333?zC AzC A #< #<`jFzD OBDATAT``333? SELECT SEQ PLUGIN PATH/home/jerome/local/blender-2.30/plugins/sequence/ DDATA8q0ɺǺpȺȺ0,"=0أ=o?K!CK!!K!CL#C0 hDATA0 Y 333?????????0,"=0أ=o?kAGAy?0,"=0أ=o??????kA B??==C DATA ^ 0 333?DdCQ"CfDAӗCC(BDC?z?DATA( ]h 333?zC AzC A #< #<`jFzD OBDATATh` 333?SELECT SCRIPT PATH/home/jerome/local/blender-2.30/scripts/ntitled.blend lSRtmXźSRModel Single@0N{^` DATAnDATAn`DATAnH`DATAHnDATAnH0DATAn0DATAnHFDATAHnFDATAnH0DATAnFDATAoPDATAPoHDATAoPDATAo(HDATA(opDATApo(DATAopHDATAoHHDATAHoHDATAoHDATAo DATA ohDATAho HDATAohDATAoDATA@q"H?@Pף// 0x!8DATA8pOutputRender>DATAp8RenderRenderF>DATApAnimRender>DATApFormatRender>DATAxH 333?@zCCHBC0?CFC= ADATAH^Hx333?@DhC?DhCC(BDC?z?mDATAHY( H333?@??? ???? A??@PA Aj?c3>}GCHB? A B? #<CDATA( a!H333?@@̌AR|B1@lA A@CC #<@DATAT!`( 333?@/9DATA"q#@HG`Ga````DATA#q0N"HG@? JL1E1KLEwwxGLP*$FDATA$pX%OutputRender>DATAX%p(&$RenderRender>DATA(&p&X%AnimRender0>DATA&p'(&FormatRenderH>DATA'p(&PreviewMaterial>DATA(ph)'MaterialMaterial>DATAh)p8*(ShadersMaterial0>DATA8*p+h)TextureMaterialH>DATA+p+8*Map InputMaterialD>DATA+p,+Map ToMaterial,>DATA,px-+Link and MaterialsEditing>DATAx-pH.,MeshEditing>DATAH.p/x-Mesh ToolsEditing0>DATA/p/H.Mesh Tools 1Editing`>DATA/p0/RampsMaterial>(DATA0p1/Mirror TranspMaterial0>h)DATA1pX20PreviewLamp>DATAX2p(31LampLamp>DATA(3p3X2Shadow and SpotLamp0>DATA3p4(3Texture and InputLampH>DATA4p53Map ToLampH>3DATA5ph64PreviewTexture>DATAh6p875TextureTexture>DATA87p8h6ColorsTexture>h6DATA8p887CloudsTexture0>DATA8p98Anim settingsObject>DATA9px:8DrawObject>DATAx:pH;9HooksObject>9DATAH;p<x:ConstraintsObject0>DATA<p<H;EffectsObject0H;DATA<p=<Particle InteractionObject0>H;DATA=p><PreviewWorld>DATA>pX?=WorldWorld>DATAX?p(@>Mist / Stars / PhysicsWorld0>DATA(@p@X?Amb OccWorld0>X?DATA@pA(@Texture and InputWorldH>DATAApB@Map ToWorldH>@DATABphCAModifiersEditing0>DATAhCp8DBShapesEditing0>BDATA8DpEhCFields and DeflectionPhysics>DATAEpE8DParticles Physics>DATAEpFESoft BodyPhysics0>FDATAFpEFluid SimulationPhysics0>DATAxG^xH333?#ChC>8C[@gCC(BDC?z?XDATAxHYXKxG333?#J>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'>dDATA(XK]LxH333?#zC AzC A #< #<`jFzD OBDATATL`XK333?#;SAVE FILE/usr/home/intrr/blender/blend/untitled.blendDATA0Nq#K>B->o?1E1KLE OW(O(ODATA(OpTransform PropertiesView3d >DATAOYR333?0N?3?3y=8v>>??3?3y>:v?K>pt2n;A-> 8v?K>B->o??3?3y=8v>>?5?5a4@  B?=o;=Cy=9v>lJ@B@?1?d????DATA Re(SO333?0NDATAx(SdSR 333?0Nk> B@DATASaT(S333?0N@ffzAbB@jA A@CC #<@DATAT^US333?0NDdC>9C,DeCC(BDC?z?DATA(U]WT333?0NzC AzC A #< #<`jFzD OBDATATW`U333?0N Save FileFileATH/home/jerome/blender/Fluid//blenderman0.1beta9.0//../pts/../sink.blendta9.0.pysSRtXmSRSequence Edit8Y[8\aHaHu{5DATA8YnxYDATAxYnY8YDATAYnYxYDATAYn8ZYDATA8ZnxZYDATAxZnZ8ZDATAZnZxZDATAZn8[ZDATA8[nx[Z\DATAx[n[8[\DATA[n[x[\DATA[n[DATA8\o\xYYDATA\o\8\8YYDATA\o]\8Y8ZDATA]oX]\YxZDATAX]o]]8ZxZDATA]o]X]xYZDATA]o0^]YZDATA0^ox^]ZZDATAx^o^0^8Z8[DATA^o_x^Z8[DATA_oP_^Zx[DATAP_o__xZx[DATA_o_P_8[x[DATA_o(`_8[[DATA(`op`_x[[DATAp`o`(`Z[DATA`oap`Z[DATAao`[[DATAHaqh8Y8ZxZYef@bdDATA@bpcOutputRender>DATAcpc@bRenderRenderF>DATAcpdcAnimRender>DATAdpcFormatRender>DATAe^f333?ƼDhC&ԓDhCC(BDC?z?DATATf`e333?Ƽ/9DATAhqhHaZxYYZDATAhq oh8Z8[x[xZ8=i>o?[  [P imDATAi_j333?\zCAzCAPP A@FB= A DATAjYmi333?\????????8=i>o?fffAD&@??fffA B? #<CDATATm`j333?\AVE TARGA/t1.blend9DATA oqHuh[[Zx[8=H>o?]]]]S psDATAp_p333?zCAzCA1||1 A@FB= A DATApYsp333?????????8=H>o?fffA*@??fffA B? #<CDATATs`p333?AVE TARGA/t1.blend9DATAHuq o8[Z[[8=>o?]]wx8@vxzDATA(@v]w333?|B̽̌?B̽̌?88 #< #<`jFzD SQB̽̌?DATAwYxz@v333?|????????8=>o?fffA@??fffA B? #<CDATATxz`w333?|OAD FILE/9SC{WSCStageain 8333333??333333??333333??333333??=؁dd??< ddd??_@@????L?fff??@ A///tmp///@&#@^@&^#D!DATAO`ZAHDATA`OPDATAO`xDATAO8XDATA8O}DATA(N,d'=A@DATA؁VZ ?o: WO  MWOWorld>>>===??A@pA A?L=TXdpثTX=====LAYERS====(DATAHppDATAHpNDATA؄HjDATA؄ XDATA h؄MDATAh preenDATAhDATA@ؖQreenDATA@X====DATAІ@DATAІQDATA`І@DATA`xDATA`QDATA8(DATA8`rDATAȈ8QDATAȈ)DATAXȈHDATAXxQDATA艻XreenDATA艻00DATA0x艻`QDATAx0vH@DATAxDATAPHQDATAPȜFREEDATAP====DATA(0QDATA(pDATAp(蝻reenDATApNDATAH NEWDATAHОDATA؍HQDATA؍ DATA h؍DATAh 蟻Q==LADATAhhvH@DATA@DATA@РQDATAЏ@PDATAЏDATA`ЏQFREEDATA`8DATA`pİbDATA8RDATA8 LRpDATAȑ8XvH@DATAȑQDATAXȑ NEWDATAX@ NEWDATA蒻XpQDATA蒻0DATA0x蒻(reenDATAx0XQreenDATAxإreenDATAP NEWDATAP@QvH@DATAPDATA(DATA((QDATApp 32DATAPp============================================================================= DATAj 1: DATAX DATAP-----------------------------------------------------------------------------x DATAp 2: DATArDATATؖ----------------------------------------------------------------------------- EEDATAX 3: DATArDATAT----------------------------------------------------------------------------- EEDATA@ 4: DATAxrDATAT----------------------------------------------------------------------------- --DATA( 5: DATA`rDATAT============================================================================= EEDATA 6: DATAHrDATATx----------------------------------------------------------------------------- 6 DATA 7: DATA0rDATAT`----------------------------------------------------------------------------- DATA 8: DATArDATATH----------------------------------------------------------------------------- DATAȜ 9: DATArDATAT0----------------------------------------------------------------------------- EEDATA10: DATA蝻DATAP============================================================================= @DATA11: DATAОbDATAT----------------------------------------------------------------------------- EEDATA12: DATAoDATAT蟻----------------------------------------------------------------------------- t DATAh13: DATAbDATATР----------------------------------------------------------------------------- EEDATAP14: DATAbDATAT----------------------------------------------------------------------------- DATA815: DATApbDATAT============================================================================= EDATA 16: DATAXjDATAT----------------------------------------------------------------------------- EEDATA17: DATA@jDATATp----------------------------------------------------------------------------- EEDATA18: DATA(jrDATATX----------------------------------------------------------------------------- EEDATAإ19: DATAjDATAT@----------------------------------------------------------------------------- qDATA20: DATA==DATAT(============================================================================= EETXdث( pTXblenderman0.1betah଻଻଻DATALh/home/jerome/soft/3D/blender/blenderman0.1beta9.0/blenderman0.1beta9.0.pyDATA଻(8htmlDATA(p଻p)DATAp(DATApFREEDATAH(  DATAHh DATAخH 6zDATAخ  RW@DATA hخ@ DATAh p > 0 SDATAh $DATA@8 FREEDATA@ 8e.icDATAа@ 2.X DATAаH DATA`аx DATA`  DATA`  DATA80  9DATA8h DATAȲ8 DATAȲ DATAXȲ@culaDATAX QDATA賻XDATA賻0DATA0x賻`DATAx0ts@DATAxof@DATAP$DATAPPDATAൻPFDATAൻ(DATA(pൻ0DATAp(`1DATApeo SDATAHr %xDATAHXDATAطH"CDATAط !FREEDATA hط(2e EdDATAh ile DATAhDATA@*ytagDATA@X&DATAй@(ageTDATAй-|DATA`йhDATA`DATA``-DATA8DATA8`DATAȻ8DATAȻ rDATAXȻ072 .DATAXx44 .DATA輻XDATA輻0artDATA0x輻PDATAx0#DATAxDATAP8DATAP ip@DATAྻP!DATAྻ(("4 21DATA(pྻx# DATAp(%-W@DATAp !--- DATAHp# jerDATAH"4 23DATAH!@DATA `!DATA h#27-MDATAh " DATAhPRelaDATA@»DATA@»»DATA»»@» DATA»û»hLDATAû`û»(DATA`ûûûDATAûû`û0DATAû8Ļûx DATA8ĻĻûDATAĻĻ8Ļ'DATAĻŻĻ@ DATAŻXŻĻ DATAXŻŻŻ DATAŻŻXŻ !DATAŻ0ƻŻh!'DATA0ƻxƻŻ!DATAxƻƻ0ƻ!DATAƻǻxƻ@"DATAǻPǻƻ"?DATAPǻǻǻ"'DATAǻǻPǻ#DATAǻ(Ȼǻ`#DATA(ȻpȻǻ#DATApȻȻ(Ȼ#?DATAȻɻpȻ@$'DATAɻHɻȻ$DATAHɻɻɻ$DATAɻɻHɻ%DATAɻ ʻɻX%DATA ʻhʻɻ%cDATAhʻʻ ʻ%DATAʻʻhʻ8&DATAʻ@˻ʻ&DATA@˻˻ʻ&DATA˻˻@˻' LDATA˻̻˻`'DATA̻`̻˻'DATA`̻̻̻'DATA̻̻`̻@(DATA̻8ͻ̻(DATA8ͻͻ̻( DATAͻͻ8ͻ0)DATAͻλͻ)DDATAλXλͻ)DATAXλλλ *t FiDATAλλXλh*DATAλ0ϻλ*DATA0ϻxϻλ+-X DATAxϻϻ0ϻH+ DATAϻлxϻ+DATAлPлϻ+'DATAPллл@,DATAллPл,/DDATAл(ѻл@DATA(ѻpѻл@PDATApѻѻ(ѻADATAѻһpѻXADATAһHһѻApADATAHһһһAʒDATAһһHһ8BFREEDATAһ ӻһB(DATA ӻhӻһBDATAhӻӻ ӻCDATAӻӻhӻ`CDATAӻ@ԻӻC?DATA@ԻԻӻCDATAԻԻ@Ի@DDATAԻջԻDDATAջ`ջԻDDATA`ջջջEDATAջջ`ջ,4 21DATAջ8ֻջ`E jerDATA8ֻֻջE27-SDATAֻֻ8ֻE21-FDATAֻ׻ֻFDATA׻X׻ֻGDATAX׻׻׻HH&DATA׻׻X׻HDATA׻0ػ׻I*DATA0ػxػ׻@Jyk&DATAxػػ0ػKDATAػٻxػPK Hz&DATAٻPٻػKqDATAPٻٻٻ`Lr-- DATAٻٻPٻL23-ODATAٻ(ڻٻL07-FDATA(ڻpڻٻM4 22DATApڻڻ(ڻN DATAڻۻpڻXN DATAۻHۻڻ(O4 21DATAHۻۻۻpO04-JDATAۻۻHۻO(DATAۻ ܻۻPDATA ܻhܻۻPPDATAhܻܻ ܻPDATAܻܻhܻP?DATAܻ@ݻܻ(QDATA@ݻݻܻpQDATAݻݻ@ݻQDATAݻ޻ݻRDATA޻`޻ݻHRDATA`޻޻޻R jerDATA޻޻`޻R08-ODATA޻8߻޻S jerDATA8߻߻޻HS=r-x DATA߻߻8߻Sa96 .DATA߻߻HT_@DATAX߻TCr-x DATAXHUA@DATAXU148 .DATA0V> jerDATA0xVy DATAx00W703-ADATAxWDATAPWDATAP X DATAPhXDATA(X4DATA(pX DATAp(0YDATAppY$DATAHY"DATAHZ,DATAHxZ08:3DATA ZDATA hZDATAh ([834DATAhh[ DATA@[ DATA@[DATA@ \DATA`\ 1DATA`\\t{ADATA`\.DATA`0]DATA8x]@DATA8],4DATA8 ^DATAX^/DATAX^#DATAX_3DATAXh_/DATA0_8DATA0x0`/DATAx0`-DATAx`28DATAPPa DATAPa!DATAPa$DATA(Hb")ADATA(pbDATAp(bDATAp(cDATAHhc3DATAHc DATAHdDATA Hd"DATA hdDATAh d%DATAh8e3 DATA@eDATA@eDATA@f (DATA`fDATA`fDATA`fDATA`@gDATA8giDATA8gDATA8hDATA`hDATAXhDATAXhDATAX i DATA0XiPDATA0xiU?DATAx0`j_DATAxjpDATAPkaDATAP lb8DATAPl_DATA(@mZDATA(pmgFREEDATAp(`n`DATApnPDATAHpo^DATAHpEUV/IDATAHxp^DATA q^DATA hqXbDATAh  r=DATAhrDATA@r2DATA@ s DATA@XsDATAsDATA`sDATA`tDATA`Xt4DATA8ttor DATA8u(DATA8huDATAu.DATAXvDATAXXv(DATAXvDATA0vDATA0x8w&ADATAx0hw)DATAxwxDATAPhxsDATAPy?DATAPyDATA(xzdDATA(p{DATAp(@{dDATAp{DATAH{DATAH|DATAH`}DATA 8~LDATA h~N@2YDATAh 8100%DATAhDATA@HDATA@yDATA@}DATAXDATA`8DATA`bDATA`nDATA8 iDATA8aDATA8HDATA}DATAX@@DATAXjeroDATAXH{*.&DATA0 2 DATA0xay-0DATAx0DATAxDATAP`@`DATAPwmeDATAPP4DATA( DATA(pP}12:4DATAp(DATApDATAH}DATAHDATAHxtzEiADATA  DATA h БjDATAh   hiDATA  h IDATA @  xLvDATA@   TDATA  @ TDATA   DATA `  PDATA`   SDATA  ` ؕDATA 8  DATA8   `DATA  8 DATA   DATA X  (-UDATAX   pDATA  X DATA 0 7DATA0x hDATAx0DATAx*DATAPHbDATAPؙDATAP  DATA(hDATA(pDATAp(DATApHDATAHDATAH؛DATAHt DATA ` tDATA htDATAh }DATAhPiDATA@t|DATA@ | DATA@ dDATA`dDATA`tDATA`WqDATA`ПYidDATA8Xo?DATA807}DATA8[*tDATAqWDATAXPu|DATAXtDATAX@p|DATA0}xDATA0xDATAx0PDATAx DATAPPDATAP(DATAPpDATA((DATA(pps DATAp(0meDATAppyDATAHmeDATAH`A{ADATAH{ DATA v19:1DATA h`DATAh 832DATAhDATA@ȭr--DATA@DATA@PDATA@DATA`PF4DATA`'7@DATA`PDATA8DATA8PbDATA8DATAȳ DATAX4DATAXH"DATAXc4DATA0 (DATA0 x h~DATAx  0 DATA !x зDATA!P!  DATAP!!!hwDATA!!P!DATA!("!PDATA("p"!aDATAp""("0DATA"#p"]DATA#H#"@DATAH###DATA##H#Ȼ@DATA# $#8@DATA $h$#KDATAh$$ $ @DATA$$h$pjF4DATA$@%$kDATA@%%$jDATA%%@%8lCADATA%&%ؿDATA&`&%(fDATA`&&&pDATA&&`&`ssuADATA&8'&d+hDATA8''&cDATA''8'(M(WDATA'('DATA(X('q}@DATAX(((bDATA((X((DATA(0)(xDATA0)x)(DATAx))0)MdDATA)*x)i DATA*P*)dDATAP*** OGHnDATA**P*|DATA*(+*i"DATA(+p+*OnDATAp++(+PS:iDATA+,p+PjDATA,H,+P=itDATAH,,,gDATA,,H,X`d*tDATA, -,Dx&DATA -h-,`[jDATAh-- -|DATA--h-d,DATA-@.-XiDATA@..-ed0|DATA..@.@|DATA./.7nBDATA/`/.jDATA`///8].}DATA//`/d DATA/80/}DATA800/$iDATA0080p}DATA010@tDATA1X10VqPDATAX111O|DATA11X1dLocDATA1021)DATA02x210DATAx2202!DATA23x2)DATA3P32(DATAP333xDATA33P3"DATA3(43 CDATA(4p43HXDATAp44(4sDATA45p4pDATA5H54IACDATAH5550ud5DATA55H5DATA5 65(DATA 6h65 DATAh66 6DATA66h6/DATA6@76(|DATA@7761?DATA77@78y?DATA787 DATA8`870DATA`888a?DATA88`8xaDATA8898fDATA8998$hDATA9989x"' DATA9:9``DATA:X:9DATAX:::@DATA::X:DATA:0;:$DATA0;x;:1DATAx;;0;pDATA;<x;(IDATA<P<;sDATAP<<<@-DATA<<P<2DATA<(=<DDATA(=p=<xDATAp==(=qDATA=>p=`BDATA>H>=eFREEDATAH>>>@$DATA>>H>DATA> ?>^'+|ADATA ?h?>x5SDATAh?? ?[DATA??h?P[4DATA?@@?^ADATA@@@?h^QDATA@@@@DDATA@A@poDATAA`A@aDATA`AAAdDATAAA`A8DATAA8BAhDATA8BBADATABB8BADATABCB024-ODATACXCBx!DATAXCCCDATACCXC.DATAC0DCpmeDATA0DxDCA{ADATAxDD0D!bDATADExDHDATAEPED.T{ADATAPEEEDATAEEPE8aDATAE(FEDATA(FpFE3rw-DATApFF(Fp@DATAFGpForwDATAGHGFXDATAHGGG8DATAGGHG1DATAG HGPWDATA HhHGDATAhHH H ;DATAHHhHbDATAH@IH2meDATA@IIH0DATAII@Ix1DATAIJIDATAJ`JI 0r--DATA`JJJDATAJJ`JSDATAJ8KJHʒDATA8KKJx/homDATAKK8K!DATAKLKDATALXLKH)DATAXLLL DATALLXLDATAL0MLDATA0MxMLHoDATAxMM0M&?DATAMNxM@ 52 .DATANPNMxDATAPNNNDATANNPNDATAN(ONH2'+|ADATA(OpONDATApOO(O DATAOPpO(DATAPHPOpDATAHPPPDATAPPHPDATAP QP@QDATA QhQP,DATAhQQ Q DATAQQhQ(*DATAQ@RQADATA@RRQ,DATARR@R"DATARSRh.DATAS`SRDATA`SSSDATASS`SHADATAS8TS$DATA8TTSDATATT8T0DATATUTpDATAUXUT1DATAXUUU A{ADATAUUXU`DATAU0VU'DATA0VxVU T{ADATAxVV0VHXQDATAVWxV,DATAWPWVDATAPWWW@DATAWWPWDATAW(XWDATA(XpXWDATApXX(XHDATAXYpX,DATAYHYXDATAHYYY@DATAYYHYDATAY ZYDATA ZhZYDATAhZZ ZHDATAZZhZ-DATAZ@[ZDATA@[[Z@ DATA[[@[ DATA[\[ DATA\`\[ DATA`\\\H DATA\\`\ -DATA\8]\ DATA8]]\@ DATA]]8] DATA]^] DATA^X^] DATAX^^^H DATA^^X^ `DATA^0_^ `DATA0_x_^ PPPDATAx__0_h PPPDATA_`x_ PPPDATA`P`_ DATAP```8DATA``P`DATA`(a`DATA(apa`DATApaa(aXDATAabpaDATAbHbaDATAHbbb(DATAbbHbxDATAb cbDATA chcbDATAhcc cHDATAcchcDATAc@dcDATA@ddcDATAdd@dhDATAdedDATAe`ed`DATA`eee8DATAee`eDATAe8feDATA8ffePPPDATAff8fXDATAfgfDATAgXgfDATAXggg(DATAggXgpDATAg0hgDATA0hxhgDATAxhh0hH'DATAhixh]˾DATAiPih0DATAPiii1DATAiiPi@DATAi(jiDATA(jpjiP DATApjj(j)µDATAjkpjDATAkHkj( DATAHkkkhDATAkkHk'ķDATAk lkDATA lhlkXDATAhll l,DATAllhl<ǺDATAl@mlh'DATA@mml:DATAmm@m(DATAmnmpɼDATAn`nmDATA`nnnDATAnn`n0DATAn8onxDATA8oon(DATAoo8oDATAopo`DATApXpoDATAXpppDATAppXp( DATAp0qpx MDATA0qxqp "DATAxqq0qH!DATAqrxq!'DATArPrq!(DATAPrrrH"9DATArrPr"DATAr(sr#&DATA(spsrX#DATApss(s#'DATAstps$:DATAtHtsh$DATAHttt$+PPPDATAttHt%DATAt utP%DATA uhut%&DATAhuu u%$FREEDATAuuhuH&DATAu@vu&DATA@vvu&DATAvv@v ',DATAvwv'@2YDATAw`wv'-DATA`www((4DATAww`w(DATAw8xw(DATA8xxw()Th DATAxx8xp)nce DATAxyx)3DATAyXyx *DATAXyyy*(kCDATAyyXy8+:H DATAy0zy+'DATA0zxzy+DATAxzz0z@,DATAz{xz,!DATA{P{z,DATAP{{{-DATA{{P{`-DATA{(|{-DATA(|p|{-5DATAp||(|X.9PoinDATA|}p|.(QDATA}H}|/8DATAH}}}`/SDATA}}H}/UDATA} ~}/FREEDATA ~h~}00DATAh~~ ~x0DATA~~h~0DATA~@~18DATA@~H1IΒDATA@1HlYDATA82&FREEDATA`2(UIDATA`2'DATA`@3)DATA83'DATA83"9DATAȁ8@4.]DATAȁ4EZDATAXȁ5UIDATAX`5BFREEDATA肼X5>8DATA肼0@6.DATA0x肼6RDATAx0 70DATAx7NDATAP8D8aDATAPx8UIDATAP8>FREEDATA(09_FREEDATA(p9`UIDATAp(P:bDATAp:lgDATAH`;ΒDATAH(<8DATA؆Hp<UIDATA؆ 0=8DATA h؆="lDATAh H>JRW@DATAh>DATA@@lDATA@PA(DATAЈ@AFREEDATAЈADATA`Ј(BqXnDATA`B+pDATA` C-8DATA8C&DATA8C(HrDATAȊ80D09DATAȊD-FREEDATAXȊD0LvDATAXPE,UIDATA苼XE0sDATA苼0F*8DATA0x苼hF9DATAx0F_DATAx`G&ΒDATAPG FREEDATAPHUIDATAPPH%DATA(H&(zDATA(pIFREEDATAp(@IpyDATApI& = DATAHIzDATAH(JDATA؏HxJDATA؏ JDATA h؏KDATAh PKDATAhKDATA@K)1DATA@(LZQk;DATAБ@hLDATAБLNo SDATA`БMDATA`@MDATA`MDATA8MDATA8N @BDATAȓ8`NDATAȓNDATAXȓNDATAX8ODATA蔼XODATA蔼0OLDATA0x蔼PDATAx0XPDATAxPDATAPPDATAP(QDATAPhQpUW@DATA(QUIDATA(pQFREEDATAp(@R= DATApR= DATAHR9DATAHS= DATAؘHXS4= DATAؘ SFREEDATA hؘS= DATAh (T= DATAhpTFREEDATA@T= DATA@U*D= DATAК@XU&ΒDATAКUFREEDATA`КUDATA`@V+t= DATA`V!= DATA8V&FREEDATA8@W"DATAȜ8W&8DATAȜW'L= DATAXȜ@XDATAXXUIDATA蝼XXDATA蝼0 Y*= DATA0x蝼xY19DATAx0YFREEDATAx(Z DATAPhZ&GDATAPZDATAP[DATA(P[DATA(p[DATAp([*DATAp@\1DATAH\7DATAH]DATAءHP]DATAء ]DATA hء]DATAh  ^DATAhh^?DATA@^DATA@_,%t|BDATAУ@p_n EdDATAУ_ er PDATA`У_FREEDATA`0`#Add DATA``DATA8`%DATA8(aDATAȥ8xa,DATAȥaTo ODATAXȥb&DATAXXbDATA覼XbDATA覼0b&xDATA0x覼Hc DATAx0cDATAxc$DATAPdADATAPPd~FREEDATA਼PeDATA਼(eQDATA(p਼0f ,DATAp(pf(DATApf,DATAH(gDATAH`g CDATAتHgFREEDATAت g DATA hت(h"DATAh xhDATAhhiDATA@XiwDATA@joDATAЬ@jgDATAЬ8k"DATA`Ьk*DATA`kDATA`(l DATA8`lDATA8lxDATAȮ8PmtDATAȮmoDATAXȮnvDATAX@ooDATA诼XorDATA诼0prDATA0x诼 qzDATAx0q2DATAx(rDATAPhrDATAPrDATA౼Pr#DATA౼(@sDATA(p౼sDATAp(sDATAptDATAHXt DATAHtDATAسHtDATAس uDATA hسHuDATAh uDATAhuDATA@v DATA@@v DATAе@xv DATAеvDATA`еw+DATA`Xw DATA`wDATA8wDATA8(xDATAȷ8px(DATAȷxDATAXȷy*DATAXpyDATA踼Xy(DATA踼0z DATA0x踼Xz DATAx0zDATAxz"DATAP({$DATAP{$DATAຼP{%DATAຼ(0|&DATA(pຼ|"DATAp(|%DATAp0}%DATAH}#DATAH}"DATAؼH(~DATAؼ x~#DATA hؼ~#DATAh !DATAhh$DATA@DATA@ DATAо@`(DATAо#DATA`оDATA`P!DATA`'DATA8DATA8H"DATA8DATA$DATAX8"DATAX&DATAX(DATA0¼8-DATA0¼x¼!DATAx¼¼0¼DATA¼üx¼8$DATAüPü¼ DATAPüüü DATAüüPü0!DATAü(ļü!DATA(ļpļüІDATApļļ(ļ !DATAļżpļpDATAżHżļ'sDATAHżżż'DATAżżHżpDATAż Ƽż#DATA ƼhƼż"DATAhƼƼ Ƽ`"DATAƼƼhƼ DATAƼ@ǼƼ#DATA@ǼǼƼPDATAǼǼ@ǼDATAǼȼǼDATAȼ`ȼǼ0!DATA`ȼȼȼDATAȼȼ`ȼЋDATAȼ8ɼȼ DATA8ɼɼȼp DATAɼɼ8ɼDATAɼʼɼDATAʼXʼɼ`DATAXʼʼʼ DATAʼʼXʼ DATAʼ0˼ʼP DATA0˼x˼ʼDATAx˼˼0˼DATA˼̼x˼@!`DATA̼P̼˼$`DATAP̼̼̼`DATA̼P̼8#DATAX̼'DATAXPPPDATAX0PPPDATA0PPPDATA0xБ!PPPDATAx0 DATAxp!DATAP#DATAPDATAP`DATA("аDATA(p!DATAp(P DATApDATAHDATAH@˾DATAHDATA #DATA h0!DATAh #DATAhЖDATA@ DATA@pDATA@!DATA$fffDATA`h#fffDATA`&µDATA`"DATA8`$DATA8%DATA8$mmmDATAh#mmmDATAX&ķDATAX"DATAX`$DATA0$uuuDATA0x"uuuDATAx0`'ǺDATAx#DATAP'DATAP`$DATAP#}}}DATA((}}}DATA(p`!DATAp(DATApDATAH DATAHXvDATAHDATA PDATA h DATAh   ؠDATA  h DATA @! XDATA@!! DATA!!@!ȡDATA!"!DATA"`"!8DATA`"""pDATA""`"DATA"8#"DATA8##"(DATA##8#hDATA#$#DATA$X$#DATAX$$$(DATA$$X$`DATA$0%$DATA0%x%$ؤDATAx%%0% DATA%&x%hDATA&P&%DATAP&&& DATA&&P&(DATA&('&` DATA('p'&DATAp''('ȦDATA'(p'PPPDATA(H('P9PPPDATAH(((6PPPDATA((H( DATA( )(pDATA )h)( FREEDATAh)) )DATA))h)(0DATA)@*)DATA@**)DATA**@*DATA*+*PDATA+`+*DATA`+++DATA++`+DATA+8,+PDATA8,,+DATA,,8,DATA,-,_DATA-X-,dDATAX---DATA--X-`DATA-0.-DATA0.x.-.DATAx..0.@ DATA./x.2DATA/P/..DATAP///P8DATA//P/.DATA/(0/,DATA(0p0/xDATAp00(0ȰDATA01p0մDATA1H10h"մDATAH111 մDATA11H1մDATA1 21@DATA 2h21DATAh22 2вPPPDATA22h2 "PPPDATA2@32pPPPDATA@332PPPDATA33@3DATA343XDATA4`43DATA`444DATA44`40DATA4854pDATA8554ɼDATA5585ص*DATA5650XDATA6X65DATAX666(DATA66X6`#DATA6076#˾DATA07x76DATAx7707P+DATA78x7DATA8P87+DATAP8888DATA88P8 DATA8(98عDATA(9p98(oDATAp99(9Ⱥ#DATA9:p9"hhhDATA:H:9h:PPPDATAH:::лnDATA::H:p?DATA: ;:GDATA ;h;:XApppDATAh;; ;ȽŸDATA;;h;9DATA;@<;h DATA@<<;DATA<<@<ؾDATA<=< xxxDATA=`=<hPDATA`===;DATA==`=P0DATA=8>=?DATA8>>= FDATA>>8>TDATA>?> MDATA?X?>KDATAX???IDATA??X?DATA?0@? ̿DATA0@x@?(-DATAx@@0@FDATA@Ax@/DATAAPA@`CDATAPAAAKDATAAAPAH,DATAA-A*DATA-X-AMDATAX---,DATA--X-DATA-0.-(NDATA0.x.-DATAx..0.?DATA./x.`DATA/P/.DATAP///%DATA//P/DATA/(0/XDATA(0p0/DATAp00(0DATA01p0(#DATA1H10xDATAH111DATA11H1)PPPDATA1 21HDATA 2h219DATAh22 2DATA22h2HDATA2@32DATA@332DATA33@3 DATA343hDATA4`43DATA`444DATA44`4@DATA4854DATA8554DATA5585DATA565`DATA6X65DATAX666DATA66X68DATA6076DATA07x76DATAx7707DATA78x7H DATA8P87'DATAP888FDATA88P8hDATA8(98DATA(9p98hDATAp99(9DATA9:p9DATA:H:9( DATAH:::h%DATA::H:DATA: ;:#DATA ;h;:XDATAh;; ;DATA;;h;DATA;@<;  DATA@<<;pDATA<<@< DATA<=<%DATA=`=<`DATA`===DATA==`=$DATA=8>=0#DATA8>>=%DATA>>8>!DATA>?>(%DATA?X?>DATAX???#DATA??X?DATA?0@?X DATA0@x@?DATAx@@0@DATA@Ax@8 DATAAPA@DATAPAAADATAAAPA *DATAA(BAx DATA(BpBADATApBB(BFDATABCpBp%DATACHCB3DATAHCCC(DATACCHC DATAC DC(NDATA DhDC%DATAhDD D&DATADDhDX3DATAD@EDxDATA@EED`DATAEE@EDATAEFEDATAF`FE8DATA`FFFxDATAFF`FDATAF8GFDATA8GGFXDATAGG8GLDATAGHG*DATAHXHGp2DATAXHHHBDATAHHXH@DATAH0IH0DATA0IxIH DATAxII0I 0DATAIJxI5DATAJPJI'DATAPJJJ@9DATAJJPJZDATAJ(KJ0DATA(KpKJx(DATApKK(K DATAKLpK(DATALHLK`%DATAHLLLDATALLHL7DATAL ML`#DATA MhML|DATAhMM M`!DATAMMhMDATAM@NM'DATA@NNM8DATANN@N#DATANON0DATAO`ON00DATA`OOO0DATAOO`O0DATAO8POP3DATA8PPO3DATAPP8P3DATAPQPp,DATAQXQPDATAXQQQDATAQQXQHDATAQ0RQDATA0RxRQDATAxRR0R DATARSxRhDATASPSR.DATAPSSS'DATASSPS`%DATAS(TSKDATA(TpTS0+DATApTT(TDATATUpTDATAUHUTDATAHUUU@-DATAUUHUDATAU VUEDATA VhVUhDATAhVV V;DATAVVhVDATAV@WVPDATA@WWV/DATAWW@WPPPDATAWXW0DATAX`XWp#DATA`XXX6DATAXX`X(DATAX8YXpDATA8YYXDATAYY8YDATAYZYHDATAZXZYGDATAXZZZDATAZZXZPDATAZ0[ZDATA0[x[ZDATAx[[0[3DATA[\x[`+DATA\P\[DATAP\\\DATA\\P\0<DATA\(]\DATA(]p]\DATAp]](]lDATA]^p]pDATA^H^]DATAH^^^qDATA^^H^HDATA^ _^pDATA _h_^DATAh__ _DATA__h_DATA_@`_`DATA@``_0PPPDATA``@`xvPPPDATA`a` PPPDATAa`a`( DATA`aaa` PPPDATAaa`a @DATAa8ba DATA8bba` BDATAbb8b DATAbcb#DATAcXcbhvDATAXcccDATAccXcJDATAc0dcxDATA0dxdchDATAxdd0dDATAdexd,DATAePedPDATAPeeeDATAeePe6DATAe(feDATA(fpfe0DDATApff(fDATAfgpfDATAgHgfDATAHgggXDATAggHgpDATAg hg#DATA hhhgDATAhhh h8PPPDATAhhhhDATAh@ihDATA@iih)DATAii@ip"DATAiji8DATAj`ji(DATA`jjjxDATAjj`jDATAj8kjDATA8kkjhDATAkk8kDATAklkDATAlXlkXDATAXlllDATAllXlDATAl0mlDATA0mxmlXDATAxmm0m DATAmnxmDATAnPnm DATAPnnnh  DATAnnPn DATAn(on DATA(opon0!DATApoo(ox!DATAoppo!"DATApHpo"DATAHpppP"DATAppHp"DATAp qp"DATA qhqp#DATAhqq qP#DATAqqhq#DATAq@rq#DATA@rrq$DATArr@rP$DATArsr$DATAs`sr$DATA`sss(%DATAss`sh%DATAs8ts%DATA8tts%DATAtt8t0&DATAtut`&DATAuXut&DATAXuuu&DATAuuXu8'DATAu0vu'DATA0vxvu'DATAxvv0v(DATAvwxvX(DATAwPwv(DATAPwww(DATAwwPw0)DATAw(xw)DATA(xpxw)DATApxx(x*DATAxypxP*DATAyHyx*DATAHyyy*DATAyyHy(+DATAy zyp+DATA zhzy+DATAhzz z,DATAzzhzH,DATAz@{z,DATA@{{z,DATA{{@{ -DATA{|{h-DATA|`|{-&DATA`|||.*DATA||`|`.DATA|8}|.DATA8}}|.DATA}}8}(/DATA}~}X/.DATA~X~}/DATAX~~~0DATA~~X~P0DATA~0~0DATA0x~0 DATAx01(DATAxh1-DATAP1DATAP2+DATAPh2DATA(2DATA(p3 DATAp(P3SDATAp3eDATAHh44DATAH4!DATA؂H 5DATA؂ p5DATA h؂5DATAh 5\DATAh6TDATA@7%DATA@`7DATAЄ@7"DATAЄ7'DATA`Є@8#DATA`8'DATA`8 DATA8 9DATA8p9 DATAȆ89`DATAȆ8:DATAXȆ:DATAX; DATA臽X; DATA臽0<ODATA0x臽<DATAx0<,DATAx(=+DATAP=DATAP=DATAP>DATA(h> DATA(p>1DATAp(?-DATApx?FDATAH?>DATAH`@DATA؋H@EDATA؋  ADATA h؋hADDATAh ADATAh(BGDATA@BDATA@BBDATAЍ@XCDATAЍCEDATA`ЍDDATA``DEDATA`DDATA8EDATA8XE!DATAȏ8E-DATAȏFDATAXȏ@F:DATAXFDATA落XFFREEDATA落0(GDATA0x落hG?zDDATAx0G DATAxH DATAPHH DATAPH\DATAPIePE DATA(I(}DATA(pIMDATAp(xJDATApJ'DATAH K7DATAHK/DATAؔHKDATAؔ L9DATA hؔ M/DATAh M7DATAhM8DATA@PN<DATA@N>DATAЖ@0OBDATAЖO<DATA`ЖPDATA`XPDATA``QDATA8QDATA8RDATAȘ8R DATAȘSDATAXȘS9DATAXPT/DATA虽XT8DATA虽0U>DATA0x虽UDATAx0U]DATAx`VDATAPVNDATAP(WDATAP`W DATA(WDATA(pxX9DATAp(X/DATAp@YpDATAHY+DATAH8Z,DATA؝HZ9DATA؝ [/DATA h؝`[pDATAh \DATAhP\DATA@\DATA@\ DATAП@(]DATAПh]"DATA`П]DATA`^DATA`P^DATA8^ DATA8^DATAȡ8_DATAȡ`_SDATAXȡ_DATAX0`RDATA袽X`DATA袽0aUDATA0x袽aDATAx0aPDATAxXbDATAPbSDATAP(cDATAऽPxcSDATAऽ(cDATA(pऽHdDATAp(dDATApdDATAHeDATAHf-DATAئHg-DATAئ hgDATA hئg DATAh gDATAhh:DATA@h#DATA@hDATAШ@i DATAШi,DATA`Ш jDATA`hj-DATA`jDATA8kDATA8Hk;DATAȪ8kQDATAȪ0lDATAXȪplDATAXl+DATA諽XmJDATA諽0mDATA0x諽m<DATAx0Hn-DATAxnDATAPn:DATAPHoDATA୽PoDATA୽(pDATA(p୽pDATAp(q DATApqwDATAHrDATAHr5DATAدH(sQDATAد sDATA hدs DATAh (t DATAhhtDATA@t%DATA@uDATAб@HuDATAбuBDATA`бu DATA`(vDATA``v%DATA8vDATA8wDATAȳ8@w DATAȳxw DATAXȳwDATAXx.DATA贽X`x DATA贽0xDATA0x贽x DATAx00yDATAxhy DATAPy4DATAPzDATAලPXz%DATAල(z!DATA(pල{DATAp(H{ DATAp{DATAH{DATAH(|'DATAظH|/DATAظ |?DATA hظP}DATAh }/DATAh}DATA@H~&DATA@~DATAк@~ DATAкDATA`к` DATA`=DATA`SDATA8aDATA8 DATAȼ8X DATAȼ DATAXȼЁDATAXDATA载XP*DATA载0$DATA0x载DATAx0P9DATAxDATAP"DATAPX$DATA࿽PDATA࿽(DATA(p࿽8(DATAp(DATAp؅?DATAHH DATAHDATA0%HDATA0%x%(!DATAx%%0%xDATA%&x%ȇ DATA&P&%DATAP&&&XDATA&&P&DATA&('&0DATA('p'&HDATAp''(' DATA'(p'DATA(H('DATAH(((P0DATA((H(DATA( )( DATA )h)(0DATAh)) )p/DATA))h)ЋQDATA)@*)P1DATA@**)NDATA**@*0DATA*+*DATA+`+*ȍGDATA`+++@DATA++`+GDATA+8,+DATA8,,+P0DATA,,8,DATA,-,DATA-X-,@DATAX---xDATA--X-DATA-0.-*DATA0.x.-`DATAx..0.FDATA./x. 6DATA/P/.DATAP///XDATA//P/DATA/(0/PDATA(0p0/+DATAp00(0DATA01p0@GDATA1H107DATAH111 DATA11H1 YDATA1 21 DATA 2h21DATAh22 2(DATA22h2pDATA2@32HDATA@33208DATA33@3DATA343ZDATA4`43  DATA`444X&DATA44`4 DATA4854DATA8554HGDATA55857DATA565(,DATA6X65DATAX666ZDATA66X6;DATA6076 DATA07x76П0DATAx77070DATA78x7xLDATA8P877DATAP888`DATA88P8h_DATA8(98$DATA(9p98P&DATAp99(9 DATA9:p9DATA:H:9@IDATAH:::%DATA::H:DATA: ;:0)DATA ;h;:DATAh;; ;%ADATA;;h;DATA;@<;X#qJDATA@<<; DATA<<@<y@DATA<=< i`DATA=`=<h` DATA`===.^DATA==`=$ԏ`DATA=8>=X,@DATA8>>=5ihDATA>>8>`V@DATA>?>0*ZDATA?X?>-DATAX???DATA??X?0 DATA?0@?p `;@DATA0@x@?DATAx@@0@ DATA@Ax@@D`DATAAPA@,DATAPAAADATAAAPA@DATAA(BA`Z@DATA(BpBA8g`DATApBB(B(:DATABCpBxDATACHCBq@DATAHCCC7tDATACCHCX X΂@DATAC DCł@DATA DhDCЮ9vDATAhDD D@DATADDhDP`DATAD@EDP#DATA@EED }^DATAEE@E؀ g`DATAEFE DATAF`FEX `DATA`FFF 첂@DATAFF`F؁ `DATAF8GFDATA8GGFXLĈDATAGG8GDATAGHG6DATAHXHGP DATAXHHHDATAHHXH+`DATAH0IH@kpJDATA0IxIHztDATAxII0I"DATAIJxIn@DATAJPJIP.;DATAPJJJ̎`DATAJJPJ8apJDATAJ(KJ8'9@DATA(KpKJ(@DATApKK(K"u DATAKLpK8sfDATALHLKxx`DATAHLLL@^@DATALLHL\`DATAL ML@DATA MhML$aDATAhMM MDATAMMhM((*ZDATAM@NMX@DATA@NNM6qJDATANN@N#DATANONPDATAO`ONDATA`OOO؊,`DATAOO`O @DATAO8POx`DATA8PPOЋ@DATAPP8PDATAPQP`^@DATAQXQPADATAXQQQ"@DATAQQXQX!DATAQ0RQ$}t^DATA0RxRQDATAxRR0RHtpJDATARSxRܒ`DATASPSR؎DATAPSSS ! @DATASSPSp/L@DATAS(TSЏ@@DATA(TpTSADATApTT(TВ`DATATUpTȐDATAUHUTDATAHUUUXȮ@DATAUUHUDATAU VUDATA VhVU0DATAhVV V"DATAVVhVВCADATAV@WV@`DATA@WWVDATAWW@W)^DATAWXWDATAX`XWX DATA`XXX$`4qJDATAXX`Xf`DATAX8YX0`!@DATA8YYXxh`DATAYY8YȕDATAYZY`DATAZXZYXDATAXZZZ@DATAZZXZDATAZ0[Z(T`DATA0[x[Zp|.DATAx[[0[|@DATA[\x[DATA\P\[ .DATAP\\\DATA\\P\ȘDATA\(]\ U@DATA(]p]\8 @_@DATAp]](]x DATA]^p] DATA^H^]DATAH^^^@xf`DATA^^H^jDATA^ _^К!DATA _h_^ Q@DATAh__ _X,CBTDATA__h_:t#qJDATA_@`_ 3~pJDATA@``_SDATA``@` %tDATA`a`8DATAa`a`p߭QjDATA`aaa @DATAaa`a@DATAa8ba8 DATA8bbaxDATAbb8b pJDATAbcbDATAcXcb0 DATAXcccp4DATAccXc؟ =V;WDATAc0dc'DATA0dxdchc^DATAxdd0dDATAdexd$`DATAePedH(DATAPeee#8@DATAeePepڂ@DATAe(fe ;`DATA(fpfe`DATApff(fDATAfgpf̻@DATAgHgf@DATAHgggx`DATAggHgyDATAg hg pJDATA hhhgH&DATAhhh h.`X@DATAhhhh7DATAh@ih@ DATA@iih DATAii@iȥi`DATAiji&X@DATAj`jih. %@DATA`jjjȦDATAjj`j @DATAj8kj@7DATA8kkj!@DATAkk8kH @DATAklk@?~DATAlXlk<`DATAXlll2DATAllXl `pJDATAl0ml` DATA0mxml DATAxmm0mЩ DATAmnxm'ZDATAnPnmPh`DATAPnnn=@DATAnnPnت`DATAn(on pJDATA(oponh2t*pDATApoo(oȫteleDATAoppo agaDATApHpoH0edsDATAHpppepyDATAppHp"jxpDATAp qp8arsDATA qhqpresDATAhqq qȭ2gainDATAqqhq(cropDATAq@rqpstsDATA@rrqareaDATArr@rltraDATArsr@ransDATAs`sr3rinDATA`sssolrDATAss`s0 e[25DATAs8tsp1t[3]DATA8ttsаv*bDATAtt8tspacDATAtutP [4]DATAuXut*etoDATAXuuuwtyDATAuuXu(rsubDATAu0vupquaDATA0vxvuondDATAxvv0v actDATAvwxv0ft*DATAwPwvxbkfDATAPwwwȳizeDATAwwPwhysiDATAw(xwP asxDATA(xpxwrleaDATApxx(xдgesDATAxypx%yscDATAyHyxhgeinDATAHyyyFexpDATAyyHy lesDATAy zy(!160]DATA zhzyxblocDATAhzz z0]peDATAzzhz askDATAz@{z`schDATA@{{zckrDATA{{@{طmenDATA{|{(ightDATA|`|{`ove_DATA`|||+i_hDATA||`|hfoDATA|8}|Hr_spDATA8}}|2ctioDATA}}8}]buDATA}~}84]vDATA~X~}xfacDATAX~~~fontDATA~~X~ggaDATA~0~P3menuDATA0x~ndyDATAx0 neltDATAx0swapDATA̼`gloDATA̼(ͼtartDATA(ͼpͼ̼pmeDATApͼͼ(ͼ@:endDATAͼμpͼ4eighDATAμHμͼxycoDATAHμμμXl2tDATAμμHμ*froDATAμ ϼμactDATA ϼhϼμ0locaDATAhϼϼ ϼxnlocDATAϼϼhϼ%filDATAϼ@мϼAsounDATA@ммϼmeenDATAмм@мDclasDATAмѼмH]caDATAѼ`ѼмutDATA`ѼѼѼ4ivDATAѼѼ`Ѽ xPlDATAѼ8ҼѼprveDATA8ҼҼѼbConDATAҼҼ8ҼGrouDATAҼӼҼP"ceImDATAӼXӼҼGcrEdDATAXӼӼӼybNDATAӼӼXӼ`!MessDATAӼ0ԼӼ$tActDATA0ԼxԼӼageADATAxԼԼ0ԼXeChaDATAԼռxԼionCDATAռPռԼonStDATAPռռռ0! DATAռռPռ/8DATAռ(ּռ DATA(ּpּռ(EDATApּּ(ּDATAּ׼pּ1DATA׼H׼ּ0GDATAH׼׼׼`]DATA׼׼H׼}DATA׼ ؼ׼DATA ؼhؼ׼@DDATAhؼؼ ؼ>DATAؼؼhؼ(DATAؼ@ټؼXDATA@ټټؼ,DATAټټ@ټ74DATAټڼټpDFDATAڼ`ڼټSaDATA`ڼڼڼh%?|DATAڼڼ`ڼ>DATAڼ8ۼڼ0^DATA8ۼۼڼVDATAۼۼ8ۼH'MDATAۼܼۼ(DATAܼXܼۼ+(DATAXܼܼܼP-6DATAܼܼXܼ-RDATAܼ0ݼܼHtDATA0ݼxݼܼ= DATAxݼݼ0ݼgDATAݼ޼xݼ3\DATA޼P޼ݼ% DATAP޼޼޼H#DATA޼޼P޼%hDATA޼(߼޼0DATA(߼p߼޼PDATAp߼߼(߼O5DATA߼p߼ W`DATAH߼qDATAHEDATAHXOwDATA 2DATA h8wDATAh &DATAhWDATA@`'DATA@,2DATA@4DATA$ DATA`DATA`DATA`PDATA8DATA82tDATA8@DATA1DATAX]DATAX045DATAXDATA0/DATA0x@DATAx02'DATAxDATAP02Ȇm DATAP\m DATAPm DATA( 4Тm DATA(pĨm DATAp(3DATAp0DATAHx6DATAHDATAH(1DATA DATA h4DATAh 8DATAh4DATA@DATA@DATA@`DATADATA`DATA`DATA``DATA8(DATA8 DATA8H%DATADATAX4DATAXPDATAX DATA0DATA0xDATAx0`DATAx"sssDATAPsssDATAP8!sssDATAP5sssDATA(!sssDATA(p@+DATAp('DATAp DATAH0DATAHx'DATAH"DATA  #DATA hp8DATAh #DATAh("DATA@xDATA@DATA@#DATAPDATA`DATA`DATA` DATA8hDATA8DATA8DATA@DATAXDATAXiDATAX`DATA0bDATA0x8DATAx0;DATAx DATAP8DATAP>DATAP.DATA(XBDATA(pDATAp(?DATAp;DATAHDATAH DATAHhhDATA DATA hHgDATAh  DATAh DATA@hDATA@DATA@DATA@DATA`DATA`'DATA`(BDATA8cDATA8(3DATA8%DATALDATAX`DATAXDATAXDATA0HDATA0xDATAx00DATAx TDATAP4DATAP"DATAP`7DATA(DATA(p0DATAp(hCDATAp0DATAH8DATAHDATAH0BDATA `DATA h0DATAh xDATAh+DATA@,DATA@xDATA@7DATA(DATA`h'DATA`FDATA`83`DATA3`DATA8#!BPY tDATAp6 dDATA""" y-0DATA Name: 'RenderMan (.rib)...' DATA( Blender: 233DATAh Group: 'Export'DATA8 Tooltip: 'Save/Render a Scene to RenderMan Renderers' DATA """DATA@ RW@DATA@p # RenderMan export script by Christoffer Green and Goran KocovDATA( # Pixie Extension by Joseph MontanezDATA8 # version 0.1 Beta9.0bDATA< # the script needs Blender 2.33 and Python 2.3 installedDATA4 # to run the script press alt+p in the text windowDATAH DATAx import BlenderDATA import string-gDATA import osDATA 0 import sysDATAh from os import P_NOWAITDATA from Blender.Draw import *DATA from Blender.BGL import *DATA@from Blender import SceneDATA$from Blender.Scene import RenderDATAfrom math import piDATAfrom math import atanDATA`from math import powDATADATAtry:DATA import totiffDATAPexcept:DATAH print "Did not find the totiff module, will use ImageMagic instead\n"DATADATA0DATA4`# MAKE SURE YOU CHANGE THIS TO YOUR PYTHON FOLDER|ADATAif (os.name != "posix"):encDATA  sys.path = ['c:\\python23']DATAXDATA$scene = Blender.Scene.GetCurrent()DATA$camobj = scene.getCurrentCamera()DATA4(camera = Blender.Camera.Get(camobj.getData().name)ODATAREEDATA# The bevent constantsDATA,exportevent = 1 # export button pressed DATA(Xexitevent = 2 # exit button pressedDATA,updateguievent = 3 # update the pressedu7 DATA0filetoggleevent = 999 # file button pressed7 DATAhDATA# GUI variablesDATAfs = Create('')DATAmenuval = Create(4)DATA`dof = Create(0)DATAsamples = Create(2)DATAstop = Create(2.0)0DATA0lenght = Create(1.0)DATAxdistance = Create(5.0)neDATAsrate = Create(3)DATAfile = Create(0)DATAPbuffer = Create(1)DATA$filename = Create("default.rib")DATA image = Create("default")DATA 8dirw = Create("default")DATA$pixierenderer = Create("rndr")-x DATA$prmanrenderer = Create("prman")12DATA$(dlrenderer = Create("renderdl").DATA$xbmrtrenderer = Create("rendrib")DATA(entropyrenderer = Create("entropy")x DATA$ aqsisrenderer = Create("aqsis")erDATA$ppixietexmaker = Create("texmake")DATA$prmantexmaker = Create("txmake")DATA$dltexmaker = Create("tdlmake")erDATA$`bmrttexmaker = Create("mkmip")-JDATA$entropytexmaker = Create("mkmip")DATA$aqsistexmaker = Create("teqser")aDATAPradiosity = Create(0)DATAradnum = Create(50)DATAgi = Create(0)DATA gisteps = Create(100)DATAh#PixieDATAindirect = Create(0)DATAocclusion = Create(0)DATA0ambiSamples = Create(6)DATA x#End PixieDATAgeom = Create(1)DATAmeshexport = Create(1)DATA@ pointwidth = Create(1.0)DATA anim = Create(0)DATA maxpixeldist = Create(20)DATA !maxerror = Create(0.25)DATAh!rshadow = Create(1)DATA!smooth = Create(0.00)DATA!areasamples = Create(20)DATA@"buff256 = Create(0)DATA"buff512 = Create(1)DATA"buff1024 = Create(0)DATA#buff2048 = Create(0)DATA`#motionblur = Create(0)DATA #motionblurframe = Create(1)DATA#rendert = Create(1)DATA@$caustics = Create(0)DATA$photon = Create(4000)DATA$uv = Create(0)DATA%recurs = Create(4)DATAX%debug = Create(0)DATA%hiddenlayer = Create(0)DATA %globalsettings = Create(1)DATA8&scenesettings = Create(0)DATA&shadereditor = Create(0)DATA&surfaceshader = Create(3)DATA$'surfaceshadername = Create("")serDATA`'about = Create(0)DATA'shadermenu = Create(1)DATA 'ambientshader = Create(1.00)ADATA @(diffuseshader = Create(0.50) DATA (specularshader = Create(0.50)DATA$(roughnessshader = Create(0.10)DATA 0)coefshader = Create(1.50)DATA )reflblurshader = Create(0.00)DATA )refrblurshader = Create(0.00)DATA *objecteditor = Create(0)DATAh*convertbm = Create(1)DATA *objectshadermenu = Create(0)DATA+arealightMESH = Create(0)DATA H+recievecaustics = Create(0)DATA +transmittcaustics = Create(0)DATA(+transmittcausticsslider = Create(1.40)DATA@,reflsamples = Create(0)DATA,refrsamples = Create(0)DATA@kr = Create(1.0)DATA@rendershadow = Create(0)DATAAautogs = Create(0)DATA XAreflectcaustics = Create(0)DATAAprogress = Create(1)DATAAgain = Create(1.0)DATA8Bgamma = Create(1.0)DATABlightx = Create(1.0)DATABbias = Create(0.25)DATA Craytraceshadow = Create(1)DATA`Cprojection = Create(0)DATA Ctextureblurm = Create(0.0)DATACnorm = Create(0.01)DATA@Dconverttex = Create(1)DATADgisphere = Create(1)DATADrvisibility = Create(0)DATAEfinalgather = Create(0)DATA,rgba = Create(1)DATA`Ecastshadow = Create(1)3-DDATAEreconvert = Create(0)DATAEtexturem = Create(' ')DATAFtexturem.val = ''DATAGtextshader = Create('Surface "plastic" ')DATA(HHtextshader.val = 'Surface "plastic"'DATAHtextshaderd = Create('Displacement "bumpy" ')DATA,Itextshaderd.val = 'Displacement "bumpy"'DATA@Jhdritex = Create(' ')DATAKhdritex.val = ''DATAPKhdri = Create(0)DATAKpreworldrafile = Create(' ')DATA`Lpreworldrafile.val = ''jerDATALpreworldra = Create(0)9-MDATALpostworldrafile = Create(' ') DATAMpostworldrafile.val = '' DATANpostworldra = Create(0) .DATAXNobjectrafile = Create(' ')2DATA(Oobjectrafile.val = ''0DATApOobjectra = Create(0)DATAOtextnor = Create(0)DATA Pilluminationmenu = Create(0)DATAPPareagi = Create(0)DATAPindirectgi = Create(1)DATAPeblur = Create(0.00)DATA(Qesamples = Create(1)DATApQgianim = Create(1)DATAQamesh = Create(0)DATARpatchsize = Create(4.0)DATAHRelemsize = Create(2.0)DATARminsize = Create(1.0)8-FDATAR DATAS# Other variablesDATA@HSrenderer = "PRMan |BMRT |Entropy |3Delight |AQSIS |Pixie "ngDATAdSshader = "Plastic (All)|Glass (BMRT, Entropy)|Shiny (BMRT, Entropy) |Custom (All) |BMS (All) "W@DATA`HTpixelsamples = "1 Preview|2 Good|3 Recomended|4|5 To High|6|7 For DoF|8|9|10 Best and Crazy"DATADTambiSamplesindex = "7 Preview|8|9|10|11 Good|12|13|14 Perfection"DATADHUshadingrate = "0.25 Best|0.5|1 Good|2|4 Preview|6|8|12|16 Bad" .DATA4Usratelist = [0.25, 0.5, 1, 2, 4, 6, 8, 12, 16]erDATA@Vmeshex = "PointsPolygons |Polygons |SubdivSurface |Points "nDATA|Villumination = "Plastic |Matte |RoughMetal |ThinPlastic |ShinyPlastic |ShinyMetal |Clay |BrushedMetal |Ceramic |Glass "-ODATA80Wprojectionm = "Plane |Cylinder |Sphere |UV-Map |Auto"DATAWsshader = "ADD NEW" DATAWsshader2 = ""DATA Xshadernametemp = ""DATAhXselectedname = "" DATAXselectedtype = "Type: "DATA Xtmp = ""DATA0Yimagelist = ""DATA(pYimagelistmenu = "No images loaded"DATA$Yrgbatext = "rgb |rgba |rgbz |z "DATA0Zcastshadowtext = "Os |opaque |shader |none"DATAxZtxdone = []DATAZw-DATAZ# Global variablesDATA([increment = 0DATAh[xbar = 111 DATA [i = 0DATA[meshobjects = 0-MDATA \maxblur = 10.0DATA`\meshnum = 0DATA\--DATA0\# Create the BlenderMan directories on startup@DATA0]if (os.name != "posix"):DATAx] rootdir = '/BlenderMan/'DATA0] partitionname = Blender.sys.progname[0:2]26DATA ^else:DATA0X^ rootdir = os.getenv("HOME") + '/BlenderMan/'DATA$^pdir = rootdir + dirw.val + '/'DATA4_globalpropertiesdir = pdir + '/GlobalProperties/'DATA0h_surfaceshadersdir = pdir + '/SurfaceShaders/'DATA<_displacementshadersdir = pdir + '/DisplacementShaders/'DATA00`objectsettingsdir = pdir + '/ObjectSettings/'DATA0`lightsettingsdir = pdir + '/LightSettings/'DATA4`meshesdir = os.path.normpath(pdir + '/Meshes/')DATA$Paimagesdir = pdir + '/images/'DATA$ashadowdir = pdir + '/shadows/'DATA(atexturesdir = pdir + '/textures/'dDATA$Hbshadersdir = pdir + '/shaders/'DATAbtry: os.mkdir(rootdir)DATAbexcept OSError: passDATA(ctry: os.mkdir(pdir)DATAhcexcept OSError: passDATA$ctry: os.mkdir(surfaceshadersdir)DATAdexcept OSError: passDATA$Hdtry: os.mkdir(globalpropertiesdir)DATAdexcept OSError: passDATA(dtry: os.mkdir(displacementshadersdir)DATA8eexcept OSError: passDATAetry: os.mkdir(meshesdir)DATAeexcept OSError: passDATA$ftry: os.mkdir(objectsettingsdir)DATA`fexcept OSError: passDATA ftry: os.mkdir(lightsettingsdir)DATAfexcept OSError: pass|DATA@gtry: os.mkdir(shadowdir)dDATAgexcept OSError: passSSDATAgtry: os.mkdir(texturesdir)DATAhexcept OSError: passDATA`htry: os.mkdir(imagesdir)DATAhexcept OSError: passDATAhDATA idef gui():DATATXi global menuval, dof, samples, stop, lenght, distance, srate, file, buffer, dirwDATAXi global filename, image, radiosity, radnum, gi, gisteps, geom, meshexport, pointwidthDATA``j global anim, maxpixeldist, maxerror, smooth, areasamples, buff256, buff512, buff1024, buff2048DATAtj global motionblur, motionblurframe, rendert, caustics, photon, uv, recurs, debug, globalsettings, scenesettingsDATAdk global shadereditor, sshader, surfaceshader, surfaceshadername, about, shadermenu, ambientshaderEEDATAd l global diffuseshader, specularshader, roughnessshader, coefshader, reflblurshader, refrblurshaderDATA`l global objecteditor, selectedname, convertbm, objectshadermenu, arealightMESH, recievecausticsDATA\@m global transmittcaustics, transmittcausticsslider, reflsamples, refrsamples, rendershadowDATAhm global xbar, autogs, kr, progress, indirectgi, areagi, eblur, esamples, gianim, amesh, reflectcausticsDATAd`n global patchsize, elemsize, minsize, textshader, raytraceshadow, bias, textshaderd, gain, gammaDATATn global lightx, textureblurm, texturem, norm, planarm, converttex, imagelistmenu.CDATA`po global textnor, illuminationmenu, projection, hiddenlayer, gisphere, rvisibility, finalgathereDATAHp global hdritex, hdri, rgba, castshadow, reconvert, maxblur, sshader2DATA`xp global prmanrenderer, dlrenderer, bmrtrenderer, entropyrenderer, aqsisrenderer, pixierendererDATA`q global prmantexmaker, dltexmaker, bmrttexmaker, entropytexmaker, aqsistexmaker, pixietexmakerDATA\q global preworldra, preworldrafile, postworldra, postworldrafile, objectra, objectrafileDATA@ r global ambiSamples, occlusion, indirect #Pixie Ambient stuffDATArREEDATA4r if (autogs.val == 1): #automaticly select objects?DATA s Redraw(1)DATAXs getSelectedObject()DATAs saveload(0,0,'object')DATAsDATAt # GUI settingsDATA8Xt glClearColor(0.4,0.48,0.57, 0.0) # blue backgroundL DATA t glClear(GL_COLOR_BUFFER_BIT)DATA,u glColor3f(0, 0, 0) # main black backDATAhu glRectf(2, 2, 630, 340)DATA0u glColor3f(0.4, 0.48, 0.57) # main blue backDATAv glRectf(4, 4, 628, 300)dDATA,Xv glColor3f(0.27, 0.3, 0.35) # blue topDATAv glRectf(4, 302, 628, 338)DATAv glColor3f(1,1,1)DATA8w?DATA,hw # Buttons for the main BlenderMan panelsDATA|w globalsettings = Toggle("Global Settings", 12, 75, 310, 100, 20, globalsettings.val, "Global project settings")DATAthx scenesettings = Toggle("Scene Settings", 557, 175, 310, 100, 20, scenesettings.val, "Global scene settings")DATAy shadereditor = Toggle("Shader Editor", 13, 275, 310, 100, 20, shadereditor.val, "Surface and diplacement shader settings")DATAy objecteditor = Toggle("Object Editor", 33, 375, 310, 100, 20, objecteditor.val, "Edit object settings that Blender doesn't support")DATAhxz about = Toggle("About", 16, 475, 310, 100, 20, about.val, "Information about this script")#CDATA{DATA@{ # Global SettingsDATA { if (globalsettings.val == 1):DATA{ debug = Slider("Debug Level ", updateguievent, 440, 270, 180, 20, debug.val, 0, 3, 0, "How much debug information the renderer should output")DATA| hiddenlayer = Number("Hidden Layer:", 0, 10, 270, 120, 20, hiddenlayer.val, 0, 20, "Objects that are present on this layer won't be exported")DATA`} progress = Toggle("Progressbar", updateguievent, 520, 30, 100, 20, progress.val, "Hint: It takes slightly less time to export a scene with the progressbar off")DATAP8~ gain = Slider("Gain ", 0, 225, 270, 180, 20, gain.val, 0.0, 5.0, 0)DATAP~ gamma = Slider("Gamma ", 0, 225, 248, 180, 20, gamma.val, 0.0, 5.0, 0)DATA8 lightx = Slider("Light* ", 0, 225, 226, 180, 20, lightx.val, 0.0, 15.0, 0, "Light intensity multiplier for lamps (pointlights) and spotlights")DATA if (menuval.val != 5):DATAH recurs = Slider("RaySteps ", 0, 440, 248, 180, 20, recurs.val, 0, 15, 0, "Maximum number of steps for the raytracing recursion")DATA| reconvert = Toggle("Reconvert Textures", updateguievent, 440, 226, 180, 20, reconvert.val, "Reconvert UV textures")DATA rgba = Menu(rgbatext, updateguievent, 370, 150, 90, 20, rgba.val, "What channels to export (A = Alpha. Z = Depth)")DATAX menuval = Menu(renderer, updateguievent, 370, 125, 90, 20, menuval.val, "Which renderer should be taken into account when exporting the scene and displaying the GUI")DATA8 samples = Menu(pixelsamples, updateguievent, 370, 75, 90, 20, samples.val, "Silhouette, motion blur and depth of field quality")DATAd srate = Menu(shadingrate, updateguievent, 370, 100, 90, 20, srate.val, "Shading quality")DATAp filename = String("Filename: ", 0, 150, 75, 140, 19, filename.val, 200, "Name of the master RIB file")DATAl  image = String("Image: ", 0, 150, 100, 140, 19, image.val, 200, "Name of the rendered image(s)")DATAd dirw = String("Project: ", 500, 150, 125, 140, 19, dirw.val, 200, "Name of the project")ADATAH if menuval.val == 1:DATA prmanrenderer = String("Renderer: ", 0, 480, 125, 140, 19, prmanrenderer.val, 200, "Name of the renderer executable")DATA@ prmantexmaker = String("Tex. Maker: ", 0, 480, 100, 140, 19, prmantexmaker.val, 200, "Name of the mipmap texture making executable")DATA elif menuval.val == 2:vDATA|H bmrtrenderer = String("Renderer: ", 0, 480, 125, 140, 19, bmrtrenderer.val, 200, "Name of the renderer executable")DATA bmrttexmaker = String("Tex. Maker: ", 0, 480, 100, 140, 19, bmrttexmaker.val, 200, "Name of the mipmap texture making executable")DATA elif menuval.val == 3:DATA entropyrenderer = String("Renderer: ", 0, 480, 125, 140, 19, entropyrenderer.val, 200, "Name of the renderer executable")DATA entropytexmaker = String("Tex. Maker: ", 0, 480, 100, 140, 19, entropytexmaker.val, 200, "Name of the mipmap texture making executable")DATA` elif menuval.val == 4:qDATAx dlrenderer = String("Renderer: ", 0, 480, 125, 140, 19, dlrenderer.val, 200, "Name of the renderer executable")DATAP dltexmaker = String("Tex. Maker: ", 0, 480, 100, 140, 19, dltexmaker.val, 200, "Name of the mipmap texture making executable")5DATA elif menuval.val == 5:)ADATAP aqsisrenderer = String("Renderer: ", 0, 480, 125, 140, 19, aqsisrenderer.val, 200, "Name of the renderer executable")-DATA aqsistexmaker = String("Tex. Maker: ", 0, 480, 100, 140, 19, aqsistexmaker.val, 200, "Name of the mipmap texture making executable")DATA elif menuval.val == 6:15 DATA pixierenderer = String("Renderer: ", 0, 480, 125, 140, 19, pixierenderer.val, 200, "Name of the renderer executable")DATA pixietexmaker = String("Tex. Maker: ", 0, 480, 100, 140, 19, pixietexmaker.val, 200, "Name of the mipmap texture making executable")DATAxx anim = Toggle("Animation", updateguievent, 150, 30, 69, 19, anim.val, "Render single or multiple frames")DATA  rendert = Toggle("Render", updateguievent, 220, 30, 69, 19, rendert.val, "Start the renderer after the export is done")ADATAlБ file = Toggle("File", filetoggleevent, 150, 50, 70, 20, file.val, "Render the image to a file")DATAlh buffer = Toggle("Buffer", 5, 220, 50, 70, 20, buffer.val, "Render the image to the framebuffer")DATAL Button("Exit", exitevent, 385, 30, 75, 20, "Exit the script")DATAPx Button("Export", exportevent, 310, 30, 74, 20, "Start the export")DATAX Button("Load Sett", 30, 310, 51, 74, 20, "Load global and scene settings")DATAX Button("Save Sett", 31, 385, 51, 75, 20, "Save global and scene settings")DATA glRasterPos2i(310, 80)DATAP Text("Samples")DATA glRasterPos2i(310, 105)DATAؕ Text("ShRate")DATA glRasterPos2i(310, 130)DATA` Text("Renderer")DATA glRasterPos2i(310, 155)|ADATA Text("Channels")DATA( if (progress.val == 1):DATAp # Progressbar textDATA glRasterPos2i(10, 25)DATA8 Text("Mesh: %s/%s"%(int(meshnum), int(meshobjects)))DATAh## if anim.val:DATA## glRasterPos2i(10, 40)DATA,## display = Blender.Scene.GetCurrent()DATAdH## Text("Frame: %s/%s"%(display.currentFrame(), display.endFrame() - display.startFrame() + 1))DATAؙ # Progressbar backplateDATA  glColor3f(0, 0, 0)DATAh glRectf(9, 10, 620, 21)DATA  glColor3f(0.78, 0.7, 0.8)DATA glRectf(10, 9, 621, 20)DATAH glColor3f(0.4, 0.4, 0.4)DATA glRectf(10, 10, 620, 20)DATA؛ # Progressbar}DATA glColor3f(0, 0, 0)DATA$` glRectf(10, 10, xbar + 1, 20)iDATA  glColor3f(0.78, 0.7, 0.8)}DATA  glRectf(10, 11, xbar, 20)}DATA P glColor3f(0.52, 0.25, 0.45)DATA  glRectf(11, 11, xbar, 19)}DATA DATA  # Scene settingsDATA ` if (scenesettings.val == 1):}DATA preworldra = Toggle("PreWorld ReadArchive", updateguievent, 10, 60, 180, 20, preworldra.val, "Add a ReadArchive to a user-defined file just before WorldBegin")DATA if (preworldra.val == 1):DATA\П preworldrafile = String("File: ", 0, 190, 60, 430, 20, preworldrafile.val, 100)DATAX postworldra = Toggle("PostWorld ReadArchive", updateguievent, 10, 40, 180, 20, postworldra.val, "Add a ReadArchive to a user-defined file just after WorldBegin")|DATA 0 if (postworldra.val == 1):qDATA\ postworldrafile = String("File: ", 0, 190, 40, 430, 20, postworldrafile.val, 100)DATA if (menuval.val != 2):iDATAxP dof = Toggle("Depth Of Field", updateguievent, 440, 270, 180, 20, dof.val, "Depth of field of the camera")|DATA if (dof.val == 1):gDATAt@ stop = Slider("Stop ", 0, 440, 250, 180, 20, stop.val, 0, 100, 0, "Focal Stop. The camera's aperture")dDATA lenght = Slider("Lenght ", 0, 440, 230, 180, 20, lenght.val, 0, 10, 0, "Focal Lenght. Lenght of the camera's lens")DATA distance = Slider("Distance ", 0, 440, 210, 180, 20, distance.val, 0, 20, 0, "Focal Distance. Distance at which the camera is focused")DATAP motionblur = Toggle("Motion Blur", updateguievent, 225, 170, 180, 20, motionblur.val, "Apply blur to objects in motion")REEDATA  if (motionblur.val == 1):DATAP motionblurframe = Slider("Frames ", 0, 225, 150, 180, 20, motionblurframe.val, 1, 10, 0, "How much blur to apply based on how many frames to take into account")DATA( if (menuval.val == 3):DATAp hdri = Toggle("HDRI", updateguievent, 225, 120, 180, 20, hdri.val, "Sets up a sphere that emits light filtered by a HDRI image")DATA( if (hdri.val == 1):DATAtp hdritex = String("HDRI Texture: ", 0, 225, 100, 280, 20, hdritex.val, 100, "Flie name of the HDRI image")DATA4 if ((menuval.val == 2) or (menuval.val == 3)):DATA|p gi = Toggle("Global Illumination", 6, 10, 270, 180, 20, gi.val, "Uses advanced algorithms for realstic lighting")^+DATA if (gi.val == 1):;< DATA` indirectgi = Toggle("Indirect", 475, 10, 250, 90, 20, indirectgi.val, "Calculate GI from light bouncing between objects")DATA| areagi = Toggle("Area", 476, 100, 250, 90, 20, areagi.val, "Sets up a big sphere that generates skydome lighting")DATAx gisteps = Slider("Steps ", 0, 10, 230, 180, 20, gisteps.val, 0, 600, 0, "Controls the detail of the solution")DATA ` if (indirectgi.val == 1):DATA  if (finalgather.val == 0):DATA maxerror = Slider("MaxError ", 0, 10, 210, 180, 20, maxerror.val, 0.01, 0.50, 0, "Smaller numbers cause recomputation to happen more often")DATAȭ maxpixeldist = Slider("MPixelDis ", 0, 10, 190, 180, 20, maxpixeldist.val, 0.00, 40.00, 0, "Smaller numbers cause recomputation to happen more often")roDATA gianim = Toggle("Animate GI", updateguievent, 10, 170, 180, 20, gianim.val, "Recompute GI for every frame in the animation")DATAP gisphere = Toggle("GI Sphere", 0, 10, 150, 180, 20, gisphere.val, "Sets up a big sphere that generates skydome lighting") DATA if (menuval.val == 3):DATAP finalgather = Toggle("Final Gather", updateguievent, 10, 130, 180, 20, finalgather.val, "More precise, but slower form of GI") DATA if (menuval.val == 2)::0DATAP radiosity = Toggle("Radiosity", 7, 225, 270, 180, 20, radiosity.val, "Calculate GI from light bouncing between objects")DATA  if (radiosity.val == 1):eDATAP radnum = Slider("Steps ", 0, 225, 250, 180, 20, radnum.val, 0, 1000, 0, "Number of stepes for the radiosity calculation")DATA patchsize = Slider("Patchsize", 0, 225, 230, 180, 20, patchsize.val, 0.0, 10.0, 0, "Smaller numbers cause recomputation to happen more often")DATAȳ elemsize = Slider("Elemsize ", 0, 225, 210, 180, 20, elemsize.val, 0.0, 6.0, 0, "Smaller numbers cause recomputation to happen more often")DATA minsize = Slider("Minsize ", 0, 225, 190, 180, 20, minsize.val, 0.0, 3, 0, "Smaller numbers cause recomputation to happen more often")ODATA$H if (menuval.val == 6): #Pixie!!!DATAd gi = Toggle("Global Illumination", 6, 10, 270, 180, 20, gi.val, "Fast Global Illumination")DATA( if (gi.val):DATAh indirect = Toggle("Indirect", 475, 10, 250, 90, 20, indirect.val, "Calculate GI from light bouncing between objects")DATA occlusion = Toggle("Occlusion", 476, 100, 250, 90, 20, occlusion.val, "Sets up a big sphere that generates skydome lighting")DATAз glRasterPos2i(30, 235)ADATA$ Text("Samples:", "normal")DATAxh ambiSamples = Menu(ambiSamplesindex, updateguievent, 90, 230, 100, 20, ambiSamples.val, "Smoothness of shading")DATA # Shader editorDATA P if (shadereditor.val == 1):DATAd surfaceshader = Menu(sshader, 14, 10, 270, 20, 20, surfaceshader.val, "Choose shader")DATA 0 if (surfaceshader.val != 0):@DATA` surfaceshadername = String("SH: ", 17, 30, 270, 140, 20, surfaceshadername.val, 200)DATAD Button("X", 15, 171, 270, 20, 20, "Delete shader")S_DATA if surfaceshadername.val:DATADȻ Button("Test Render Shader", 19, 220, 230, 150, 20)DATAD8 Button("Set default values", 340, 380, 230, 150, 20)DATAL shadermenu = Menu(shader, 32, 10, 230, 200, 20, shadermenu.val)DATA  if (shadermenu.val != 4):DATAlp ambientshader = Slider("Ambient (Ka) ", 32, 10, 200, 300, 20, ambientshader.val, 0.00, 1.00, 0)DATAl diffuseshader = Slider("Diffuse (Kd) ", 32, 10, 175, 300, 20, diffuseshader.val, 0.00, 1.00, 0)DATAl specularshader = Slider("Specular (Ks) ", 32, 10, 150, 300, 20, specularshader.val, 0.00, 1.00, 0)DATAp8 roughnessshader = Slider("Roughness ", 32, 10, 125, 300, 20, roughnessshader.val, 0.00, 1.00, 0)DATA ؿ if (shadermenu.val == 2):DATAh( coefshader = Slider("Coefficient (eta)", 32, 10, 100, 300, 20, coefshader.val, 0.00, 3.00, 0)DATAt reflblurshader = Slider("Reflect Blur (blur)", 32, 10, 75, 300, 20, reflblurshader.val, 0.00, 1.00, 0)DATAt` refrblurshader = Slider("Refract Blur (refrblur)", 32, 10, 50, 300, 20, refrblurshader.val, 0.00, 1.00, 0)DATAh reflsamples = Slider("Reflect Samples ", 32, 315, 200, 300, 20, reflsamples.val, 0, 30, 0)}@DATAd refrsamples = Slider("Refract Samples ", 32, 315, 175, 300, 20, refrsamples.val, 0, 30, 0)DATAP( kr = Slider("Kr ", 32, 315, 150, 300, 20, kr.val, 0.0, 2.0, 0)DATA  if (shadermenu.val == 3):DATAt reflblurshader = Slider("Reflect Blur (blur)", 32, 10, 100, 300, 20, reflblurshader.val, 0.00, 1.00, 0)WDATAd reflsamples = Slider("Reflect Samples ", 32, 10, 75, 300, 20, reflsamples.val, 0, 30, 0)DATA ( elif (shadermenu.val == 4):DATAx glRasterPos2i(10, 200)DATA Text('Surface Shader')DATAP textshader = String("", 32, 10, 175, 600, 20, textshader.val, 100)iDATA glRasterPos2i(10, 150)DATA  Text('Displacement Shader')DATAP  textshaderd = String("", 32, 10, 125, 600, 20, textshaderd.val, 100)DATA norm = Slider("Disp. Bound ", 32, 10, 90, 300, 20, norm.val, 0.0, 10.0, 0, "Sets the radius of a sphere bounding the object. Larger displacements need biger values")iDATA  elif (shadermenu.val == 5):DATAP projection = Menu(projectionm, 32, 315, 200, 180, 20, projection.val)DATATP texturem = String("Texture: ", 32, 315, 180, 280, 20, texturem.val, 100)DATAT converttex = Menu(imagelistmenu, 368, 595, 180, 20, 20, converttex.val)&DATA@P Button("Convert and Reload", 367, 495, 200, 120, 20)jDATAh textureblurm = Slider("Texture Blur ", 32, 315, 160, 300, 20, textureblurm.val, 0.0, 1.0, 0)DATAdX norm = Slider("Bump Height ", 32, 315, 140, 300, 20, norm.val, 0.0, 10.0, 0)dDATAH textnor = Toggle("Nor", 32, 315, 120, 60, 20, textnor.val)dDATA\` illuminationmenu = Menu(illumination, 32, 375, 120, 120, 20, illuminationmenu.val)DATAdDATA # Object editoriDATA X if (objecteditor.val == 1):}DATAh autogs = Toggle("Auto getSelected (drains cpu)", updateguievent, 10, 10, 180, 20, autogs.val)dDATA@ if (autogs.val == 0):DATA8 Button("Get Selected", 34, 10, 30, 180, 20)DATA glRasterPos2i(200, 35)}DATA 8 Text('Name: ' + selectedname)DATA glRasterPos2i(200, 15)|DATA Text(selectedtype)dDATA( if (selectedtype == 'Type: Mesh'):DATAp objectra = Toggle("Object ReadArchive", 18, 10, 60, 180, 20, objectra.val, "Add a ReadArchive to a user-defined file just after object's AttributeBegin")iDATA@ if (objectra.val == 1):DATAX objectrafile = String("File: ", 18, 190, 60, 430, 20, objectrafile.val, 100)iDATAP convertbm = Toggle("Use Shader", 18, 10, 220, 180, 20, convertbm.val)DATA if (convertbm.val == 1):DATA, namelist = string.split(sshader, "|")DATA 0 namelist.remove('ADD NEW')DATA$ namelist = map(str, namelist)DATA, sshader2 = string.join(namelist, "|")DATA ( if (len(sshader2) == 0):DATAx glRasterPos2i(10, 205)DATA$ Text("No shaders available.")DATA  else:DATA\H objectshadermenu = Menu(sshader2, 18, 10, 200, 180, 20, objectshadermenu.val)DATAt geom = Toggle("Export Geometry", 18, 230, 270, 180, 20, geom.val, "Output the mesh geometry to a RIB file")DATAp if (geom.val == 1):DATAL meshexport = Menu(meshex, 18, 230, 250, 180, 20, meshexport.val)DATAx0 amesh = Toggle("Animated Mesh", 18, 230, 230, 120, 20, amesh.val, "Turn this on if the mesh deforms in time")DATA  if (meshexport.val != 4):DATA( uv = Toggle("ExportUV", 18, 350, 230, 60, 20, uv.val, "Exports and converts the UV map attached to the object (if there is one)")DATA  else:DATA pointwidth = Slider("Width ", 18, 230, 180, 180, 20, pointwidth.val, 0.0, 10.0, 0, "Radius of the Points primitive")DATA0 if (menuval.val == 2) or (menuval.val == 3):DATA( rvisibility = Toggle("Hide Source", 18, 230, 200, 180, 20, rvisibility.val, "Hides the object from primary rays")DATA4 if ((menuval.val == 2) or (menuval.val == 3)):DATA|8 arealightMESH = Toggle("AreaLight", 18, 10, 270, 180, 20, arealightMESH.val, "Use the object as an area light")DATA$ if (arealightMESH.val == 1):DATA0 areasamples = Slider("AreaSamp ", 18, 10, 250, 180, 20, areasamples.val, 0, 400, 0, "Controls the graininess of the area light")DATAd recievecaustics = Toggle("Recieve Caustics", 18, 440, 270, 180, 20, recievecaustics.val)DATAdx reflectcaustics = Toggle("Reflect Caustics", 18, 440, 250, 180, 20, reflectcaustics.val)DATAh transmittcaustics = Toggle("Transmitt Caustics", 18, 440, 230, 180, 20, transmittcaustics.val)DATA( if (transmittcaustics.val == 1):"' DATA transmittcausticsslider = Slider("IOR ", 18, 440, 210, 180, 20, transmittcausticsslider.val, 0.00, 2.20, 0, "Index of refraction")`DATA if (menuval.val != 5):DATA glRasterPos2i(10, 165)DATA @ Text('Raytraced Shadows')DATA castshadow = Menu(castshadowtext, 18, 10, 140, 180, 20, castshadow.val, "Os uses the object's opacity value for the shadow opacity, shader uses the shader opacity calculations, opaque produces black shadows and none turns shadows off")DATA( if (selectedtype == 'Type: Lamp'):DATA4 if ((menuval.val == 2) or (menuval.val == 3)):DATAp caustics = Toggle("Caustics", 18, 230, 270, 180, 20, caustics.val, "Turn on photon emission used for caustics calculations")DATAL( if ((caustics.val == 1) & ((menuval.val == 2) or (menuval.val == 3))):DATAt photon = Slider("Photons ", 18, 230, 250, 180, 20, photon.val, 4000, 80000, 0, "Number of photons emitted")DATA0@ lampobj = Blender.Object.Get(selectedname)DATA4 lamp = Blender.Lamp.Get(lampobj.getData().name)DATAH if (lamp.getMode() & lamp.Modes['Shadows']) and (lamp.type != 3):DATAx if (menuval.val != 5):DATAt raytraceshadow = Toggle("Ray Shadow", 245, 100, 270, 90, 20, raytraceshadow.val, "Use raytraced shadows")DATA` if lamp.type == 2:DATAh rendershadow = Toggle("Ren Shadow", 244, 10, 270, 90, 20, rendershadow.val, "Use shadowmaps")xDATA(@ prmanshadowbuttonsposition = 270@DATA  if (rendershadow.val == 1):DATA` bias = Slider("Bias ", 18, 10, 210, 180, 20, bias.val, 0.0, 1.0, 0, "Shadowmap bias")DATA x if (rendershadow.val == 1):DATA\ buff256 = Toggle("256", 8, 10, 190, 42, 20, buff256.val, "Shadowmap resolution")DATA\P buff512 = Toggle("512", 9, 52, 190, 42, 20, buff512.val, "Shadowmap resolution")DATA` buff1024 = Toggle("1024", 10, 95, 190, 48, 20, buff1024.val, "Shadowmap resolution")DATA`h buff2048 = Toggle("2048", 11, 143, 190, 48, 20, buff2048.val, "Shadowmap resolution")DATAH if (lamp.getMode() & lamp.Modes['Shadows']) and (lamp.type != 3):DATApp if ((((menuval.val == 1) or (menuval.val == 3)) and (raytraceshadow.val == 1)) or (rendershadow.val == 1)):DATAd eblur = Slider("Blur ", 18, 10, 250, 180, 20, eblur.val, 0.0, maxblur, 0, "Shadow blur")DATAh esamples = Slider("Samples ", 18, 10, 230, 180, 20, esamples.val, 0, 256, 0, "Blur quality")`DATA8 DATAh # About dialogDATA if (about.val == 1):DATA glColor3f(0,0,0)DATA0 glRasterPos2i(10, 279)DATA$x Text("BlenderMan 0.1 Beta 9.0")DATA glRasterPos2i(10, 259)92DATA0 Text("by Christoffer Green and Goran Kocov")@DATAp glColor3f(1,1,1)DATA glRasterPos2i(9, 280)DATA$ Text("BlenderMan 0.1 Beta 9.0")DATAH glRasterPos2i(9, 260)DATA0 Text("by Christoffer Green and Goran Kocov")DATA glRasterPos2i(10, 230) DATAd8 Text("_______________________________________________________________________________________")0DATA glRasterPos2i(10, 200)`DATA4 Text("Thanks to sgefant for the name suggestion")DATAp glRasterPos2i(10, 180)7-JDATAp Text("Thanks to Phillipe Crassous for helping me fix the spotlight rotation bug and other code improvements")DATAX glRasterPos2i(10, 160)37DATA< Text("Thanks to desaster and #python for syntax help")DATA glRasterPos2i(10, 140)DATAXP Text("Thanks to K-Rich, Macke, Kib_Tph, sgefant and #Blender3d for pre-beta testing")DATA glRasterPos2i(10, 120)b-0DATA<  Text("Thanks to Jan Walter for the basic exporting code")DATA glRasterPos2i(10, 100)DATA4 Text("Thanks to svo for the pointspolygon code")DATA0 glRasterPos2i(10, 80)DATA4x Text("Thanks to nishin for alpha/beta-testing")-DATA glRasterPos2i(10, 60)DATA4  Text("Thanks to eeshlo for the totiff module")sDATA glRasterPos2i(10, 40)DATAT Text("Thanks to DetectiveThorn for the help with the light intensity conversion")DATAHDATAxdef event(evt, val):DATA$ if (evt == ESCKEY and not val): DATA  Exit()DATA,H if (evt == ACCENTGRAVEKEY and not val): DATA  export()DATADATAdef bevent(evt):DATApH global sshader, increment, pdir, maxblur, imagelist, imagelistmenu, imagelisttif, shadernametemp, selectednameDATA( if (evt == 500): # Change projectDATA @ newdirs()DATA x surfaceshadername.val = ""DATA sshader = "ADD NEW"DATA try: DATA4H f = open(surfaceshadersdir + 'ShaderNames','r')DATA saveShaderName(0)DATA  except:DATA( saveShaderName(1)DATAp resetObject()DATA saveload(0, 0, 'object')DATA saveload(0, 0, 'global')DATA @ Register (gui, event, bevent)DATA0 if (evt == exportevent): # Export buttonDATA  export()DATA,( if (evt == exitevent): # Exit buttonDATA  Exit()DATA0 if (evt == updateguievent): # Update GUIDATA  Register (gui, event, bevent)DATA0h if (evt == filetoggleevent): # File toggleDATA file.val = 1DATA buffer.val = 0DATA H Register (gui, event, bevent)DATA( if (evt == 5): # Buffer toggleDATA file.val = 0DATA0 buffer.val = 1DATA p Register (gui, event, bevent)DATA4 if (evt == 6): # Global Illumination toggleDATA  radiosity.val = 0DATA ` Register (gui, event, bevent)DATA( if (evt == 7): # Radiosity toggleDATA gi.val = 0DATA H Register (gui, event, bevent)DATA0 if (evt == 8): # Shadow buffer buttonsDATA if (buff256.val == 1):DATA@ buff512.val = 0DATA buff1024.val = 0DATA buff2048.val = 0DATA saveload(1,0,'object')DATA H Register (gui, event, bevent)DATA0 if (evt == 9): # Shadow buffer buttonsDATA if (buff512.val == 1):DATA@ buff256.val = 0ADATA buff1024.val = 0DATA buff2048.val = 0DATA saveload(1,0,'object')e{ADATA H Register (gui, event, bevent)DATA0 if (evt == 10): # Shadow buffer buttonsDATA if (buff1024.val == 1):DATA@  buff512.val = 0DATA  buff256.val = 0DATA  buff2048.val = 0DATA  saveload(1,0,'object')DATA H  Register (gui, event, bevent)DATA0  if (evt == 11): # Shadow buffer buttonsDATA  if (buff2048.val == 1):DATA@  buff512.val = 0DATA  buff1024.val = 0DATA  buff256.val = 0DATA  saveload(1,0,'object')DATA H  Register (gui, event, bevent)DATA  if (evt == 12):`DATA  globalsettings.val = 1`DATA  scenesettings.val = 0DATAh  shadereditor.val = 0DATA  objecteditor.val = 0DATA  about.val = 0DATA 8 Register (gui, event, bevent)DATA if (evt == 557):DATA globalsettings.val = 0DATA scenesettings.val = 1DATAX shadereditor.val = 0DATA objecteditor.val = 0DATA about.val = 0DATA ( Register (gui, event, bevent)DATAx if (evt == 13):DATA globalsettings.val = 0DATA scenesettings.val = 0DATAH shadereditor.val = 1DATA objecteditor.val = 0DATA about.val = 0DATA  Register (gui, event, bevent)DATAh if (evt == 16):DATA globalsettings.val = 0`DATA scenesettings.val = 0DATA8 shadereditor.val = 0DATA objecteditor.val = 0DATA about.val = 1DATA  Register (gui, event, bevent)DATAX if (evt == 33):DATA globalsettings.val = 0DATA scenesettings.val = 0DATA( shadereditor.val = 0DATAp objecteditor.val = 1DATA about.val = 0DATA  Register (gui, event, bevent)DATA(H if (evt == 14): # Add shader menuDATA` namelist = string.split(sshader, "|") # the names of the shaders gets hacked up into a listDATA0 surfaceshadername.val = namelist[surfaceshader.val - 1] # change the label of the shader in the shadereditor to the one selectedDATA4 listlenght = len(namelist) # length of the listDATA@ if (surfaceshader.val == listlenght): # if the length of the list of shader names is the same as the surfaceshader menu add another item to the menuDATA increment = increment +1DATA P name = 0DATA, numbername = "%03d" % (int(increment))DATA while (name == 0):DATA( name = 1DATAh for x in namelist[:]:DATA( if ('Surface.%s'%numbername == x):DATA  increment = increment +1DATAX name = 0DATA0 numbername = "%03d" % (int(increment))PPDATA@ namelist.insert(listlenght - 1 , 'Surface.%s'%numbername)DATA(h sshader = string.join(namelist, "|")DATA< surfaceshadername.val = namelist[surfaceshader.val - 1]DATA( saveShaderName(1)DATAp resetShaderVal()DATA shadermenu.val = 1DATA else:DATA0 saveload(0,0,'shader')DATAx saveShaderName(1)DATA, shadernametemp = surfaceshadername.valDATA  Register (gui, event, bevent)DATA` if (evt == 340):DATA resetShaderVal()DATA saveload(1,0,'shader')DATA (  Register (gui, event, bevent)DATAPx  if ((evt == 15) & (surfaceshadername.val != "")): # Surface shader deletePDATA$  deleteshader = surfaceshader.valDATA H! tempselected = selectednameDATA(! namelist = string.split(sshader, "|")DATA,! namelist.remove(surfaceshadername.val)DATA<H" surfaceshadername.val = namelist[surfaceshader.val - 1]DATA " namelist = map(str, namelist)DATA(# sshader = string.join(namelist, "|")DATA X# listlenght = len(namelist)DATA(# if (surfaceshader.val == listlenght):DATA<$ surfaceshadername.val = namelist[surfaceshader.val - 2]DATA h$ surfaceshadername.val = ""DATA,$ surfaceshader.val = surfaceshader.val - 1DATA% saveShaderName(1)DATAP% saveload(0,0,'shader')DATA(% for objects in Blender.Object.Get():DATA(% if (objects.getType() == "Mesh"):DATAH& resetObject()DATA & selectedname = objects.nameDATA& saveload(0,0,'object')DATA0 ' if deleteshader == objectshadermenu.val:DATA' convertbm.val = 0 DATA0' elif deleteshader < objectshadermenu.val:DATA8(( objectshadermenu.val = objectshadermenu.val - 1DATA( saveload(1,0,'object')DATA ( selectedname = tempselectedDATA() saveload(0,0,'object')matDATA p) Register (gui, event, bevent)DATA4) if (evt == 17): # Surface shader name editDATA * if (len(surfaceshadername.val) != 0): # this if thing fixes a bug that crashes the app when renaming a shader without a name. ("" = "")DATA,* namelist = string.split(sshader, "|")2YDATA<8+ namelist[surfaceshader.val - 1] = surfaceshadername.valDATA(+ sshader = string.join(namelist, "|")DATA+ saveload(1,0,'shader')DATA@, saveShaderName(1)DATA$, Register (gui, event, bevent) EEDATA, if (evt == 18):DATA- saveload(1,0,'object')DATA `- Register (gui, event, bevent)DATA- if (evt == 19):DATA8- testrender = open('%s/testrender.rib'%rootdir, 'w')DATA<X. testrender.write('Projection "perspective" "fov" 40\n')DATA,. testrender.write('Format 320 240 1\n')REEDATA/ if (rgba.val == 1):DATA`/ channels = "rgb"DATA/ elif (rgba.val == 2):DATA/ channels = "rgba"@DATA00 elif (rgba.val == 3):DATAx0 channels = "rgbz"DATA0 elif (rgba.val == 4):DATA1 channels = "z"DATALH1 testrender.write('Display "Test Render" "framebuffer" "%s"\n'%channels)DATAL1 testrender.write('Option "searchpath" "texture" ["%s"]\n'%texturesdir)E DATA(82 testrender.write('Exposure 1 1.2\n')DATA,2 testrender.write('PixelSamples 1 1\n')DATA(2 testrender.write('Translate 0 0 5\n')DATA,@3 testrender.write('Rotate -120 1 0 0\n')DATA(3 testrender.write('Rotate 25 0 0 1\n')DATA$3 testrender.write('WorldBegin\n')DATA0@4 if (menuval.val == 1) or (menuval.val == 4):DATAH4 testrender.write('\tAttribute "visibility" "integer trace" [1]\n')IDATA5 if (menuval.val == 3):DATAD`5 testrender.write('\tAttribute "visibility" "reflection" [1]\n')EDATA@5 testrender.write('\tAttribute "visibility" "shadow" [1]\n')DATA0@6 if (menuval.val == 1) or (menuval.val == 4):DATAT6 testrender.write('\tAttribute "visibility" "string transmission" ["shader"]\n')DATA4 7 elif (menuval.val == 2) or (menuval.val == 3):REEDATAP7 testrender.write('\tAttribute "render" "string casts_shadows" ["shade"]\n')DATAH8 if (menuval.val == 2) or (menuval.val == 4) or (menuval.val == 5):IDATAx8 if (menuval.val != 5):DATA@8 testrender.write('\tAttribute "light" "shadows" ["on"]\n')DATA`09 testrender.write('\tLightSource "spotlight" 1 "intensity" 20 "from" [0 3 4] "to" [0 0 0]\n')DATAd9 testrender.write('\tLightSource "spotlight" 2 "intensity" 20 "from" [0 -3 4] "to" [0 0 0]\n')DATAP: elif (menuval.val == 3):DATA: testrender.write('\tLightSource "spotlight" 1 "intensity" 10 "from" [0 3 4] "to" [0 0 0] "string shadowname" ["shadow"] "float shadowsamples" [1]\n')dDATA`; testrender.write('\tLightSource "spotlight" 2 "intensity" 10 "from" [0 -3 4] "to" [0 0 0] "string shadowname" ["shadow"] "float shadowsamples" [1]\n')EEDATA(< elif (menuval.val == 1):DATAp< testrender.write('\tLightSource "shadowspot" 1 "intensity" 10 "from" [0 3 4] "to" [0 0 0] "string shadowname" ["shadow"] "float samples" [1]\n')DATA0= testrender.write('\tLightSource "shadowspot" 2 "intensity" 10 "from" [0 -3 4] "to" [0 0 0] "string shadowname" ["shadow"] "float samples" [1]\n')REEDATA$= elif (menuval.val == 6): #Pixie!DATALH> testrender.write('\tAttribute "visibility" "transmission" "opaque"\n') DATA> testrender.write('\tLightSource "shadowspot" 1 "float shadowbias" 0.25 "float blur" 0.0 "float samples" 1 "coneangle" 0.392699081699 "conedeltaangle" 0.0589048645955 "from" [0 -3 4] "to" [0 0 0] "intensity" 20.0 "lightcolor" [1.0 1.0 1.0] "string shadowname" ["raytrace"]\n')DATA@ testrender.write('\tLightSource "shadowspot" 1 "float shadowbias" 0.25 "float blur" 0.0 "float samples" 1 "coneangle" 0.392699081699 "conedeltaangle" 0.0589048645955 "from" [0 3 4] "to" [0 0 0] "intensity" 20.0 "lightcolor" [1.0 1.0 1.0] "string shadowname" ["raytrace"]\n')DATA,PA testrender.write('\tAttributeBegin\n')DATAA name = 'foobar'DATAA meshobj = 10DATAt(B testrender.write('\t\tAttribute "displacementbound" "string coordinatesystem" ["object"] "float sphere" [1]\n')W@DATA,B writeShader(testrender, name, meshobj, 0)DATA0 C testrender.write('\t\tSphere 1 -1 1 360\n')DATA(C testrender.write('\tAttributeEnd\n')DATA,C testrender.write('\tAttributeBegin\n')REEDATA40D if ((menuval.val == 2) or (menuval.val == 3)):DATA0D testrender.write('\tSurface "oakplank"\n')EEDATA4D elif (menuval.val == 4) or (menuval.val == 1):tDATA0PE testrender.write('\tSurface "rmarble"\n')sDATA4E elif (menuval.val == 5) or (menuval.val == 6):REEDATA,F testrender.write('\tSurface "matte"\n')DATA<hF testrender.write('\tPointsPolygons [4 ] [0 3 2 1 ]\n')DATA`F testrender.write('\"P" [10.0 10.0 -1.0 10.0 -10.0 -1.0 -10.0 -10.0 -1.0 -10.0 10.0 -1.0 ]\n')DATA(`G testrender.write('\tAttributeEnd\n')DATA$G testrender.write('WorldEnd\n')xDATAH testrender.close()DATA(PH render('%s/testrender.rib'%rootdir)DATA(H if (evt == 20): # Load settingsDATAI loadSettings()DATA @I Register (gui, event, bevent)DATA(I if (evt == 21): # Save settings@DATAI saveSettings()|DATA (J Register (gui, event, bevent)DATAxJ if (evt == 30):DATAJ saveload(0, 0, 'global')DATA K Register (gui, event, bevent)DATAPK if (evt == 31):DATAK saveload(1, 0, 'global')BDATA K Register (gui, event, bevent)DATA(L if (evt == 32):DATAhL saveload(1,0,'shader')/DATA L Register (gui, event, bevent)DATAM if (evt == 34):DATA @M worked = getSelectedObject()DATAM if (worked == 1):DATAM resetObject()E DATA$N Register (gui, event, bevent)upSDATA`N saveload(0,0,'object')DATA N Register (gui, event, bevent)DATAN if (evt == 244):@ADATA8O rendershadow.val = 1DATAO raytraceshadow.val = 0RW@DATAO saveload(1,0,'object')DATAP if (eblur.val > 0.2):DATAXP eblur.val = 0.2DATAP maxblur = 0.2DATA P Register (gui, event, bevent)DATA(Q if (evt == 245):YDATAhQ rendershadow.val = 0DATAQ raytraceshadow.val = 1DATAQ saveload(1,0,'object')DATA@R maxblur = 10.0DATA R Register (gui, event, bevent)DATAR if (evt == 475):DATAS indirectgi.val = 1REEDATAXS areagi.val = 0DATA S Register (gui, event, bevent)DATAS if (evt == 476):IDATA(T indirectgi.val = 0DATApT areagi.val = 1DATA T Register (gui, event, bevent)DATA,U if (evt == 367): # Convert textures DATA(XU imagelist = os.listdir(texturesdir) DATAU if (imagelist != []):DATAU for image in imagelist:DATA,@V rawimage = '%s/%s'%(texturesdir, image)DATA$V totiff.SetOutDir(texturesdir)GDATA(V ok = totiff.ConvertShort(rawimage)DATA$@W if not ok[0]: # error occurredEDATA(W print ok[1] # print error messageEDATA(W imagelist = os.listdir(texturesdir) DATA@X imagelisttif = []IDATAX for image in imagelist:DATA X if (image[-3:] == 'tif'):= DATA, Y imagelisttif = imagelisttif + [image]EDATA4xY imagelistmenu = string.join(imagelisttif, "|")DATA Y Register (gui, event, bevent)DATA(Z if (evt == 368):DATA(hZ imagelist = os.listdir(texturesdir) DATAZ if (imagelist != []):DATA[ imagelisttif = []DATAP[ for image in imagelist:DATA [ if (image[-3:] == 'tif'):DATA,[ imagelisttif = imagelisttif + [image]DATA4@\ imagelistmenu = string.join(imagelisttif, "|")DATA8\ texturem.val = str(imagelisttif[converttex.val - 1])DATA] saveload(1,0,'shader')?DATA P] Register (gui, event, bevent)DATA ]Register (gui, event, bevent)DATA]DATA ^def getSelectedObject():DATA@h^ global selectedname, selectedtype, namelist, sshader2, sshaderDATA^ try:DATA0_ selected = Blender.Object.GetSelected()[0]REEDATA p_ except:o SDATA _ return 0|DATA _ selectedname = selected.namensDATA$0` if (selected.getType() == "Mesh"):DATA ` selectedtype = 'Type: Mesh'DATA(` elif (selected.getType() == "Lamp"):DATA (a selectedtype = 'Type: Lamp'DATAxa else:cDATA a selectedtype = 'Type: Other'DATA(b namelist = string.split(sshader, "|")DATAXb namelist.remove('ADD NEW')DATA b namelist = map(str, namelist)DATA(b sshader2 = string.join(namelist, "|")DATA Hc return 1DATAc DATA(cdef saveload(save, exportS, module):DATAd if (module == 'shader'):DATAPd Variables = [shadermenu.val, ambientshader.val, diffuseshader.val, specularshader.val, roughnessshader.val, coefshader.val, DATAe reflblurshader.val, refrblurshader.val, reflsamples.val, refrsamples.val, kr.val, textshader.val, textshaderd.val, texturem.val,DATATe textureblurm.val, norm.val, textnor.val, illuminationmenu.val, projection.val]DATA0f if exportS:DATA,pf namelist = string.split(sshader, "|")DATA0f name = namelist[objectshadermenu.val - 1]DATA (g else: DATA `g name = surfaceshadername.valDATAg if (name == ''):DATA g returnDATA$(h fname = surfaceshadersdir + nameDATAxh if (module == 'object'):DATAlh Variables = [convertbm.val, objectshadermenu.val, geom.val, meshexport.val, uv.val, arealightMESH.val, DATAxXi areasamples.val, recievecaustics.val, transmittcaustics.val, transmittcausticsslider.val, caustics.val, photon.val, DATApj rendershadow.val, buff256.val, buff512.val, buff1024.val, buff2048.val, eblur.val, esamples.val, amesh.val, DATAhj reflectcaustics.val, raytraceshadow.val, bias.val, rvisibility.val, castshadow.val, pointwidth.val, DATA$8k objectra.val, objectrafile.val]DATA,k fname = objectsettingsdir + selectednameDATAk if (selectedname == ''): DATA (l returnDATA`l if (module == 'global'):DATA|l Variables = [gi.val, gisteps.val, radiosity.val, radnum.val, dirw.val, image.val, filename.val, file.val, buffer.val, DATAxPm anim.val, rendert.val, menuval.val, samples.val, srate.val, debug.val, maxerror.val, maxpixeldist.val, geom.val, DATApm motionblur.val, motionblurframe.val, dof.val, stop.val, lenght.val, distance.val, autogs.val, progress.val, DATAxn indirectgi.val, areagi.val, gianim.val, patchsize.val, elemsize.val, minsize.val, recurs.val, gain.val, gamma.val, DATAp@o lightx.val, hiddenlayer.val, gisphere.val, finalgather.val, hdri.val, hdritex.val, rgba.val, reconvert.val, DATAto prmanrenderer.val, bmrtrenderer.val, entropyrenderer.val, dlrenderer.val, aqsisrenderer.val, pixierenderer.val,DATAtp prmantexmaker.val, bmrttexmaker.val, entropytexmaker.val, dltexmaker.val, aqsistexmaker.val, pixietexmaker.val,DATA| q preworldra.val, preworldrafile.val, postworldra.val, postworldrafile.val, ambiSamples.val, occlusion.val, indirect.val]DATA4q fname = globalpropertiesdir + 'GlobalProperties'DATA(r # Save variablesDATAhr if (save == 1):DATAr f = open(fname,'w')DATA$r writeln(f,'BlenderMan0.1Beta9.0')DATA@s for i in Variables:DATA s writeln(f,type(i).__name__)DATAs if (i == '\n'):DATAt writeln(f,'')DATAXt continueDATAt writeln(f,i)DATAtDATAu # Load variablesDATAHu if (save == 0):DATAu try:DATAu f = open(fname,'r')DATA v except: DATA @v returnDATA xv index = 0DATA v version = str(f.readline())DATA,w if (version != 'BlenderMan0.1Beta9.0\n'):DATA Xw returnDATAw for i in Variables:DATA w varType = str(f.readline())DATA(x if (varType == "str\n"):DATA,px Variables[index] = str(f.readline())DATA x elif (varType == "float\n"):DATA,y Variables[index] = float(f.readline())DATA py elif (varType == "int\n"):DATA,y Variables[index] = int(f.readline())DATAz index += 1DATA Xz f.close()DATAz if (module == 'shader'):DATA$z shadermenu.val = Variables[0]DATA(({ ambientshader.val = Variables[1]DATA({ diffuseshader.val = Variables[2]DATA({ specularshader.val = Variables[3]DATA(0| roughnessshader.val = Variables[4]DATA$| coefshader.val = Variables[5]DATA(| reflblurshader.val = Variables[6]DATA(0} refrblurshader.val = Variables[7]DATA$} reflsamples.val = Variables[8]DATA$} refrsamples.val = Variables[9]DATA (~ kr.val = Variables[10]DATA$x~ textshader.val = Variables[11]DATA$~ textshaderd.val = Variables[12]DATA$ texturem.val = Variables[13]DATA(h textureblurm.val = Variables[14]DATA  norm.val = Variables[15]DATA$ textnor.val = Variables[16]DATA,` illuminationmenu.val = Variables[17]DATA$ projection.val = Variables[18]DATA elif (module == 'object'):DATA$P convertbm.val = Variables[0]DATA( objectshadermenu.val = Variables[1]DATA  geom.val = Variables[2]DATA$H meshexport.val = Variables[3]DATA uv.val = Variables[4]DATA( arealightMESH.val = Variables[5]DATA$8 areasamples.val = Variables[6]DATA( recievecaustics.val = Variables[7]DATA, transmittcaustics.val = Variables[8]DATA08 transmittcausticsslider.val = Variables[9]DATA$ caustics.val = Variables[10]DATA  photon.val = Variables[11]DATA(8 rendershadow.val = Variables[12]DATA$ buff256.val = Variables[13]DATA$ buff512.val = Variables[14]DATA$0 buff1024.val = Variables[15]DATA$ buff2048.val = Variables[16]DATA І eblur.val = Variables[17]DATA$  esamples.val = Variables[18]DATA p amesh.val = Variables[19]DATA( reflectcaustics.val = Variables[20]DATA( raytraceshadow.val = Variables[21]DATA p bias.val = Variables[22]DATA$ rvisibility.val = Variables[23]DATA$ castshadow.val = Variables[24]DATA$` pointwidth.val = Variables[25]DATA$ objectra.val = Variables[26]DATA$ objectrafile.val = Variables[27]DATAP elif (module == 'global'):DATA gi.val = Variables[0]DATA  gisteps.val = Variables[1]DATA$0 radiosity.val = Variables[2]DATA  radnum.val = Variables[3]DATA Ћ dirw.val = Variables[4]DATA  image.val = Variables[5]DATA$p filename.val = Variables[6]DATA  file.val = Variables[7]DATA  buffer.val = Variables[8]DATA ` anim.val = Variables[9]DATA$ rendert.val = Variables[10]DATA$ menuval.val = Variables[11]DATA$P samples.val = Variables[12]DATA  srate.val = Variables[13]DATA  debug.val = Variables[14]`DATA$@ maxerror.val = Variables[15]`DATA( maxpixeldist.val = Variables[16]`DATA  geom.val = Variables[17]`DATA$8 motionblur.val = Variables[18]DATA( motionblurframe.val = Variables[19]DATA  dof.val = Variables[20]PPDATA 0 stop.val = Variables[21]PDATA  lenght.val = Variables[22]DATA$Б distance.val = Variables[23]DATA  autogs.val = Variables[24]DATA$p progress.val = Variables[25]DATA$ indirectgi.val = Variables[26]DATA  areagi.val = Variables[27]DATA ` gianim.val = Variables[28]DATA$ patchsize.val = Variables[29]DATA$ elemsize.val = Variables[30]DATA$P minsize.val = Variables[31]DATA  recurs.val = Variables[32]DATA  gain.val = Variables[33]DATA @ gamma.val = Variables[34]DATA  lightx.val = Variables[35]DATA$ hiddenlayer.val = Variables[36]DATA$0 gisphere.val = Variables[37]DATA$ finalgather.val = Variables[38]DATA Ж hdri.val = Variables[39]DATA  hdritex.val = Variables[40]DATA p rgba.val = Variables[41]DATA$ reconvert.val = Variables[42]DATA( prmanrenderer.val = Variables[43]ffDATA$h bmrtrenderer.val = Variables[44]DATA( entropyrenderer.val = Variables[45]DATA$ dlrenderer.val = Variables[46]DATA(` aqsisrenderer.val = Variables[47]DATA( pixierenderer.val = Variables[48]mDATA( prmantexmaker.val = Variables[49]mmDATA$h bmrttexmaker.val = Variables[50]DATA( entropytexmaker.val = Variables[51]DATA$ dltexmaker.val = Variables[52]DATA(` aqsistexmaker.val = Variables[53]DATA( pixietexmaker.val = Variables[54]uuDATA$ preworldra.val = Variables[55]DATA(` preworldrafile.val = Variables[56] DATA$ postworldra.val = Variables[57]DATA( postworldrafile.val = Variables[58] DATA(` ambiSamples.val = Variables[59] }}DATA$ occlusion.val = Variables[60] DATA, #ambiSamplesindex.val = Variables[61] ɼDATA$` indirect.val = Variables[61]DATA DATAdef writeln(f,x):DATA  try:DATAxX if (type(x).__name__ == 'string'): # this thing is to combat a bug that saves strings with a \n, (we dont want that)DATA  nn = string.find(x, '\n')DATAP if (nn > 0):DATA x = x[:nn] + x[nn + 1:]DATAؠ f.write(str(x))DATA f.write('\n')DATA X except:DATA passDATAȡDATAdef readint(f):DATA8 try:DATAp return int(f.readline())DATA  except:DATA passDATA(def readfloat(f):DATAh try:DATA  return float(f.readline())DATA  except:DATA( passDATA`def readstr(f):DATA try:DATAؤ s = (f.readline())DATA  nn = string.find(s, '\n')DATAh if (nn > 0):DATA s = s[:nn] + s[nn + 1:]DATA  return sDATA ( except:DATA ` print sDATADATAȦdef saveShaderName(save):PDATA global sshaderDATA<P if save: f = open(surfaceshadersdir + 'ShaderNames','w')PDATA8 else: f = open(surfaceshadersdir + 'ShaderNames','r')DATA  if save: writeln(f,sshader)DATAp else: sshader = readstr(f)DATA  f.close()DATAtry: DATA4( f = open(surfaceshadersdir + 'ShaderNames','r')DATAexcept:DATA saveShaderName(1)DATA  Register (gui, event, bevent)DATAPDATAsaveShaderName(0)DATA Register (gui, event, bevent)DATAsshader2 = sshaderDATAPDATADATAdef newdirs():DATA` global pdir, globalpropertiesdir, surfaceshadersdir, displacementshadersdir, objectsettingsdirDATAh global lightsettingsdir, lightsettingsdir, meshesdir, imagesdir, shadowdir, texturesdir, shadersdirDATA if (os.name != "posix"):DATA` rootdir = '/BlenderMan/'DATA else:DATA0 rootdir = os.getenv("HOME") + '/BlenderMan/'DATA$@ pdir = rootdir + dirw.val + '/'DATA4 globalpropertiesdir = pdir + '/GlobalProperties/'DATA0 surfaceshadersdir = pdir + '/SurfaceShaders/'DATA<P displacementshadersdir = pdir + '/DisplacementShaders/'DATA0 objectsettingsdir = pdir + '/ObjectSettings/'DATA0 lightsettingsdir = pdir + '/LightSettings/'DATA x meshesdir = pdir + '/Meshes/'DATA Ȱ imagesdir = pdir + '/images/'DATA  shadowdir = pdir + '/shadows/'DATA$h texturesdir = pdir + '/textures/'DATA$ shadersdir = pdir + '/shaders/'մDATA try:DATA@ os.mkdir(pdir)DATA  os.mkdir(globalpropertiesdir)DATA в os.mkdir(surfaceshadersdir)PDATA$  os.mkdir(displacementshadersdir)DATAp os.mkdir(meshesdir)PDATA  os.mkdir(objectsettingsdir)PDATA  os.mkdir(lightsettingsdir)DATAX os.mkdir(shadowdir)DATA os.mkdir(texturesdir)DATA os.mkdir(imagesdir)DATA0 except OSError: DATAp passDATADATA,صdef writeHeader(ribfile, frames, frames2):DATA\0 ribfile.write('Option "searchpath" "texture" ["%s"]\n'%(texturesdir + ":" + shadowdir))DATA  display = Scene.GetCurrent()DATA, context = display.getRenderingContext()DATA$` yResolution = context.imageSizeY()DATA$ xResolution = context.imageSizeX()DATA  if xResolution >= yResolution:DATA,P factor = yResolution / float(xResolution)DATA else:DATA, factor = xResolution / float(yResolution)DATA 8 if Blender.World.Get() != []:DATA$ world = Blender.World.Get()[0]DATA ع if world.hor != [0, 0, 0]:DATAp( ribfile.write('Imager "background" "color bgcolor" [%s %s %s]\n'%(world.hor[0], world.hor[1], world.hor[2]))DATA$Ⱥ scene = Blender.Scene.GetCurrent()DATA$ camobj = scene.getCurrentCamera()DATA<h camera = Blender.Camera.Get(camobj.getData().name)DATApл ribfile.write('Projection "perspective" "fov" [%s]\n'%(360.0 * atan(factor * 16.0 / camera.lens) /pi))DATA@p ribfile.write('Format %s %s 1\n' % (xResolution, yResolution))DATAH ribfile.write("Clipping %s %s\n" % (camera.clipStart, camera.clipEnd))DATADX ribfile.write('PixelSamples %s %s\n'%(samples.val, samples.val))DATAȽ try:DATA< ribfile.write('Exposure %s %s\n'%(gain.val, gamma.val))DATA h except: DATA passDATAؾ if (menuval.val != 2):DATA  if (dof.val == 1): xDATATh ribfile.write('DepthOfField %s %s %s\n'%(stop.val, lenght.val, distance.val))ǺDATA< ribfile.write('ShadingRate %s\n'%sratelist[srate.val - 1])DATA4P if ((radiosity.val == 1) & (menuval.val == 2)):DATA@ ribfile.write('Option "radiosity" "steps" [%s]\n'%radnum.val)DATAH  ribfile.write('Attribute "indirect" "maxerror" [%s]\n'%maxerror.val)DATAX ribfile.write('Attribute "indirect" "float maxpixeldist" [%s]\n'%maxpixeldist.val)PPDATAP  ribfile.write('Attribute "radiosity" "float patchsize" [%s]'%patchsize.val)DATAL ribfile.write('Attribute "radiosity" "float elemsize" [%s]'%elemsize.val)DATAL ribfile.write('Attribute "radiosity" "float minsize" [%s]'%minsize.val)DATA if (motionblur.val == 1):DATA$ ribfile.write('Shutter 0 1\n')DATA0( if (menuval.val == 1) or (menuval.val == 4):DATAH ribfile.write('Option "trace" "integer maxdepth" [%s]\n'%recurs.val)DATA0 elif (menuval.val == 2) or (menuval.val == 3):DATAD` ribfile.write('Option "render" "max_raylevel" [%s]\n'%recurs.val)DATAL ribfile.write('Option "statistics" "integer endofframe" [%s]\n'%debug.val)DATA0H if ((indirectgi.val == 1) & (gi.val == 1)):DATA, if ((gianim.val == 0) & (frames2 == 0)):DATAP ribfile.write('Option "indirect" "string savefile" ["%s/irr.dat"]\n'%pdir)DATA0 elif ((frames2 > 0) or (gianim.val == 1)):DATA if (anim.val == 1):DATAP( ribfile.write('Option "indirect" "string seedfile" ["%s/irr.dat"]\n'%pdir)DATA if (menuval.val == 3):DATA@ ribfile.write('Option "indirect" "integer maxbounce" [3]\n')DATA`DATADATA(def writeTransform(ribfile, lampobj):PDATA global cframeDATAX Blender.Get('curframe')DATA Blender.Window.RedrawAll()DATA if (lampobj == 0):DATA$( camobj = scene.getCurrentCamera()DATAx else:DATA camobj = lampobjDATA, caminvmatrix = camobj.getInverseMatrix()DATA H ribfile.write("Transform [" +DATA< "%s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s]\n" %DATA (caminvmatrix[0][0],DATAH caminvmatrix[0][1],DATA -caminvmatrix[0][2],DATA caminvmatrix[0][3],DATA  caminvmatrix[1][0],DATAh caminvmatrix[1][1],DATA -caminvmatrix[1][2],DATA caminvmatrix[1][3],IDATA@ caminvmatrix[2][0],IDATA caminvmatrix[2][1],IDATA -caminvmatrix[2][2],DATA caminvmatrix[2][3],DATA` caminvmatrix[3][0],DATA caminvmatrix[3][1],DATA -caminvmatrix[3][2],DATA8 caminvmatrix[3][3]))DATADATAdef ambientLight(ribfile):DATA  if Blender.World.Get() != []:DATA$H world = Blender.World.Get()[0]DATA( if (occlusion.val) or (indirect.val):DATAH ribfile.write('\tAttribute "visibility" "transmission" "opaque"\n')DATAh else:DATA ribfile.write('\tLightSource "ambientlight" 998 "float intensity" [1] "color lightcolor" [%s %s %s]\n\n'%(world.amb[0], world.amb[1], world.amb[2]))DATAhDATAdef checkLamps(ribfile):DATA global selectednameDATA( lampnum = 0DATA(h for objects in Blender.Object.Get():DATA name = objects.getName()DATA$ if (objects.getType() == "Lamp"):DATAX lampnum += 1DATA resetObject()DATA selectedname = nameDATA$  Register (gui, event, bevent)DATAp saveload(0,0,'object')DATA$ Register (gui, event, bevent)DATA( writeLamps(ribfile, name, lampnum)DATA` ribfile.write("\n")DATADATA(def renderShadows(ribfile, frames2):DATA$0 global selectedname, partitionnameDATA( display = Blender.Scene.GetCurrent()DATA$ cframe = Blender.Get('curframe')DATA(( for objects in Blender.Object.Get():DATA name = objects.getName()DATA$ if (objects.getType() == "Lamp"):DATA resetObject()DATA$X Register (gui, event, bevent)DATA selectedname = nameDATA saveload(0,0,'object')DATA$8 Register (gui, event, bevent)DATA  if (rendershadow.val == 1):DATA if (anim.val == 1):DATA,  shadowframe = Blender.Get('curframe')DATA x else:DATA shadowframe = ''DATAH ribfiledir = os.path.normpath(shadowdir + name + str(shadowframe))DATA(p shadowrib = open(ribfiledir, 'w')DATA4 if ((menuval.val == 4) & (os.name != "posix")):DATA( ribfile.write('ReadArchive "%s%s"\n'%(os.path.splitdrive( os.path.normcase( os.path.normpath(partitionname + shadowdir + name + str(shadowframe))))))DATA  else:DATAP( ribfile.write('ReadArchive "%s"\n'%(shadowdir + name + str(shadowframe)))DATA( shadowrib.write('FrameBegin 0\n')DATA( lampobj = Blender.Object.Get(name)DATA4X lamp = Blender.Lamp.Get(lampobj.getData().name)DATA| if ((lamp.getMode() & lamp.Modes['Shadows']) & (lamp.type == 2)): # if it is set to render shadow and is a spotlightDATA` if (buff256.val == 1):DATA buffer = 256DATA  elif (buff512.val == 1):DATA8 buffer = 512DATA x elif (buff1024.val == 1):DATA buffer = 1024DATA  elif (buff2048.val == 1):DATAX buffer = 2048DATAP shadowrib.write('Projection "perspective" "fov" %s\n' %(lamp.spotSize))DATA, shadowrib.write('PixelSamples 1 1\n')DATA4p if (menuval.val != 2) and (menuval.val != 3):DATAD shadowrib.write('Hider "hidden" "depthfilter" "midpoint"\n')DATA@ if (menuval.val == 3):DATA4 shadowrib.write('PixelFilter "min" 1 1\n')DATA  else:DATA4  shadowrib.write('PixelFilter "box" 1 1\n')DATA8 shadowrib.write('Hider "hidden" "jitter" [0]\n')DATA( writeTransform(shadowrib, lampobj)DATA<@ shadowrib.write('Format %s %s 1\n'%(buffer, buffer))DATA\ shadowrib.write('Display "%s/%s%s.pic" "zfile" "z"\n'%(shadowdir, name, shadowframe))DATA0 if menuval.val == 5:DATA,x shadowrib.write('ShadingRate 1\n')DATA  else:DATA, shadowrib.write('ShadingRate 4\n')DATA(` shadowrib.write('WorldBegin \n')DATA shadows = 1DATA8 createObjects(shadowrib, cframe, shadows, frames2)DATA$` shadowrib.write('WorldEnd \n')DATA shadowrib.write('MakeShadow "%s/%s%s.pic" "%s/%s%s.tx"\n'%(shadowdir, name, shadowframe, shadowdir, name, shadowframe))DATA$` shadowrib.write('FrameEnd\n')DATADATA(def writeLamps(ribfile, name, lampnum):DATA8 global selectednameDATA$ lampobj = Blender.Object.Get(name)DATA4 lamp = Blender.Lamp.Get(lampobj.getData().name)DATA40 x = lampobj.matrix[3][0] / lampobj.matrix[3][3]DATA4 y = lampobj.matrix[3][1] / lampobj.matrix[3][3]DATA4 z = lampobj.matrix[3][2] / lampobj.matrix[3][3]DATA4P tox = -lampobj.matrix[2][0] + lampobj.matrix[3][0]DATA4 toy = -lampobj.matrix[2][1] + lampobj.matrix[3][1]DATA4 toz = -lampobj.matrix[2][2] + lampobj.matrix[3][2]DATA0p if lamp.getMode() & lamp.Modes['Negative']:DATA negative = -1DATA else:DATAH negative = 1DATA selectedname = nameDATA  Register (gui, event, bevent)DATA  saveload(0,0,'object')DATAh if (caustics.val):DATA0 ribfile.write('\tLightSource "caustic" 2\n')DATA( ribfile.write('\tIlluminate 2 0\n\n')DATA(` ribfile.write('\tTransformBegin\n')DATAL ribfile.write('\tAttribute "light" "integer nphotons" [%s]\n'%photon.val)DATA,0 if lamp.getMode() & lamp.Modes['Shadows']:DATA shadow = 'on'DATA else:DATA shadow = 'off'DATA0@ if (menuval.val == 2) or (menuval.val == 4):DATA  if (raytraceshadow.val == 1):DATAH ribfile.write('\tAttribute "light" "shadows" ["%s"]\n' % (shadow))DATAh else:DATA< ribfile.write('\tAttribute "light" "shadows" ["off"]\n')DATA if (lamp.type == 2):DATAP if (anim.val == 1):DATA0 shadowframe = '%s'%(Blender.Get('curframe'))DATA else:DATA0 shadowframe = ''DATA$p energratio = lamp.dist * negativeDATA8 if ((shadow == 'on') and (raytraceshadow.val == 1)):DATA( if (menuval.val == 3):DATAp shadowname = 'shadow'DATA elif (menuval.val == 1):DATA shadowname = 'raytrace'DATAH elif (menuval.val == 6):DATAH ribfile.write('\t(Attribute "visibility" "transmission" "opaque")')DATA shadowname = 'raytrace'DATA P else:DATA shadowname = ''DATA else:DATA4 if (shadow == 'on') and (rendershadow.val == 1):DATA,` shadowname = name + shadowframe + '.tx'DATA  else:DATA shadowname = ''DATA@0 if (menuval.val == 6) and (shadow == 'off'): #Pixie RenderDATA ribfile.write('\tLightSource "spotlight" %d "float shadowbias" %s "float blur" %s "float samples" %s "coneangle" %s "conedeltaangle" %s "from" [%s %s %s] "to" [%s %s %s] "intensity" %s "lightcolor" [%s %s %s] "string shadowname" ["%s"]\n' \DATA %(lampnum, bias.val, eblur.val, esamples.val, (lamp.spotSize * pi / 360), (lamp.spotBlend * (lamp.spotSize * pi / 360)), x, y, z, tox, toy, toz, (energratio * lamp.energy) * lightx.val, lamp.R, lamp.G, lamp.B, shadowname))DATAp elif (menuval.val == 6) and (shadow == 'on') and (raytraceshadow.val == 0): #Pixie Render with SpotShadowsDATAp ribfile.write('\tLightSource "shadowspot" %d "float shadowbias" %s "float blur" %s "float samples" %s "coneangle" %s "conedeltaangle" %s "from" [%s %s %s] "to" [%s %s %s] "intensity" %s "lightcolor" [%s %s %s] "string shadowname" ["%s"]\n' \DATA %(lampnum, bias.val, eblur.val, esamples.val, (lamp.spotSize * pi / 360), (lamp.spotBlend * (lamp.spotSize * pi / 360)), x, y, z, tox, toy, toz, (energratio * lamp.energy) * lightx.val, lamp.R, lamp.G, lamp.B, shadowname))DATAt elif (menuval.val == 6) and (shadow == 'on') and (raytraceshadow.val == 1): #Pixie Render with Ray Spot shadowsDATAH ribfile.write('\tLightSource "shadowspot" %d "float shadowbias" %s "float blur" %s "float samples" %s "coneangle" %s "conedeltaangle" %s "from" [%s %s %s] "to" [%s %s %s] "intensity" %s "lightcolor" [%s %s %s] "string shadowname" ["%s"]\n' \DATAp %(lampnum, bias.val, eblur.val, esamples.val, (lamp.spotSize * pi / 360), (lamp.spotBlend * (lamp.spotSize * pi / 360)), x, y, z, tox, toy, toz, (energratio * lamp.energy) * lightx.val, lamp.R, lamp.G, lamp.B, shadowname))DATA else:DATA ribfile.write('\tLightSource "bml" %d "float shadowbias" %s "float blur" %s "float samples" %s "coneangle" %s "conedeltaangle" %s "from" [%s %s %s] "to" [%s %s %s] "intensity" %s "lightcolor" [%s %s %s] "string shadowname" ["%s"]\n' \DATA %(lampnum, bias.val, eblur.val, esamples.val, (lamp.spotSize * pi / 360), (lamp.spotBlend * (lamp.spotSize * pi / 360)), x, y, z, tox, toy, toz, (energratio * lamp.energy) * lightx.val, lamp.R, lamp.G, lamp.B, shadowname))DATA elif (lamp.type == 1):DATA0 energratio = negativeDATAxx if (shadow == "off") or (raytraceshadow.val != 1) or (menuval.val == 2) or (menuval.val == 4) or (menuval.val == 5):DATA  ribfile.write('\tLightSource "distantlight" %d "from" [%s %s %s] "to" [%s %s %s] "intensity" %s "lightcolor" [%s %s %s]\n' % (lampnum, x, y, z, tox, toy, toz, energratio * lamp.energy, lamp.R, lamp.G, lamp.B))DATA(  else:DATA`  if (menuval.val == 3):DATAD  ribfile.write('\tLightSource "distantlight" %d "from" [%s %s %s] "to" [%s %s %s] "intensity" %s "lightcolor" [%s %s %s] "string shadowname" ["shadow"] "float shadowsamples" [%s] "float shadowblur" [%s]\n' % (lampnum, x, y, z, tox, toy, toz, energratio * lamp.energy, lamp.R, lamp.G, lamp.B, esamples.val, eblur.val))DATA  elif (menuval.val == 1):DATAD`  ribfile.write('\tLightSource "shadowdistant" %d "from" [%s %s %s] "to" [%s %s %s] "intensity" %s "lightcolor" [%s %s %s] "string shadowname" ["raytrace"] "float samples" [%s] "float width" [%s]\n' % (lampnum, x, y, z, tox, toy, toz, energratio * lamp.energy, lamp.R, lamp.G, lamp.B, esamples.val, eblur.val * 100 + 1))DATA  elif (lamp.type == 0):DATA$ energratio = lamp.dist * negativeDATAxh if (shadow == "off") or (raytraceshadow.val != 1) or (menuval.val == 2) or (menuval.val == 4) or (menuval.val == 5):DATA ribfile.write('\tLightSource "pointlight" %d "from" [%s %s %s] "intensity" %s "lightcolor" [%s %s %s]\n'%(lampnum, x, y, z, (energratio * lamp.energy) * lightx.val, lamp.R, lamp.G, lamp.B))DATAL if (shadow == "off") or (raytraceshadow.val != 1) or (menuval.val == 6):DATAx ribfile.write('\tLightSource "pointlight" %d "from" [%s %s %s] "intensity" %s "lightcolor" [%s %s %s]\n'%(lampnum, x, y, z, (energratio * lamp.energy) * lightx.val, lamp.R, lamp.G, lamp.B))DATAh else:DATA  if (menuval.val == 3): DATA0 ribfile.write('\tLightSource "pointlight" %d "from" [%s %s %s] "intensity" %s "lightcolor" [%s %s %s] "float shadowblur" [%s] "float shadowsamples" [%s] "string shadowname" ["shadow"]\n'%(lampnum, x, y, z, (energratio * lamp.energy) * lightx.val, lamp.R, lamp.G, lamp.B, eblur.val, esamples.val))DATA P elif (menuval.val == 1): DATA ribfile.write('\tLightSource "shadowpoint" %d "from" [%s %s %s] "intensity" %s "lightcolor" [%s %s %s] "float width" [%s] "float samples" [%s] "string sfpx" ["raytrace"] "string sfnx" ["raytrace"] "string sfpy" ["raytrace"] "string sfny" ["raytrace"] "string sfpz" ["raytrace"] "string sfnz" ["raytrace"]\n'%(lampnum, x, y, z, (energratio * lamp.energy) * lightx.val, lamp.R, lamp.G, lamp.B, eblur.val * 100 + 1, esamples.val))DATA8 if (raytraceshadow.val == 1) and (menuval.val == 6):DATA print 'raytrace lamp'DATAH0 ribfile.write('Attribute "visibility" "transmission" "opaque"\n')DATA ribfile.write('\tLightSource "shadowdistant" %d "from" [%s %s %s] "to" [%s %s %s] "intensity" %s "lightcolor" [%s %s %s] "shadowname" "raytrace"\n' % (lampnum, x, y, z, tox, toy, toz, energratio * lamp.energy, lamp.R, lamp.G, lamp.B))DATA elif (lamp.type == 3):DATA energratio = negativeDATAX ribfile.write('\tLightSource "hemilight" %d "from" [%s %s %s] "to" [%s %s %s] "intensity" %s "lightcolor" [%s %s %s] "float falloff" [0]\n' % (lampnum, x, y, z, tox, toy, toz, energratio * lamp.energy, lamp.R, lamp.G, lamp.B))DATAp if (caustics.val == 1):DATA$ ribfile.write('\tTransformEnd\n')DATADATA 8def writeMatrix(ribfile, name):DATA Blender.Get('curframe')DATA Blender.Window.RedrawAll()DATA, matrix = Blender.Object.Get(name).matrixDATA$p ribfile.write("\t\tTransform [" +DATA< "%s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s]\n" %DATA ( (matrix[0][0], matrix[0][1],DATA x matrix[0][2], matrix[0][3],DATA  matrix[1][0], matrix[1][1],DATA  matrix[1][2], matrix[1][3],PDATA h matrix[2][0], matrix[2][1],DATA  matrix[2][2], matrix[2][3],DATA  matrix[3][0], matrix[3][1],DATA X matrix[3][2], matrix[3][3]))DATADATAdef resetObject():DATA convertbm.val = 0DATAX objectshadermenu.val = 0DATA geom.val = 1DATA meshexport.val = 1DATA  pointwidth.val = 1.0DATA h  uv.val = 0DATA  arealightMESH.val = 0DATA  areasamples.val = 20DATA0! recievecaustics.val = 0DATAx! transmittcaustics.val = 0DATA$! transmittcausticsslider.val = 1.4DATA" caustics.val = 0DATAP" photon.val = 4000DATA" buff256.val = 0DATA" buff512.val = 1DATA# buff1024.val = 0DATAP# buff2048.val = 0DATA# eblur.val = 0.00DATA# esamples.val = 1DATA$ amesh.val = 0DATAP$ reflectcaustics.val = 0DATA$ raytraceshadow.val = 0DATA$ rendershadow.val = 0DATA(% bias.val = 0.25DATAh% rvisibility.val = 0DATA% castshadow.val = 1DATA% objectra.val = 0DATA0&DATA`&def resetShaderVal():DATA& if (shadermenu.val == 1):DATA& ambientshader.val = 1DATA8' diffuseshader.val = 0.5DATA' specularshader.val = 0.5DATA' roughnessshader.val = 0.1DATA( if (shadermenu.val == 2):DATAX( ambientshader.val = 0.2DATA( diffuseshader.val = 0.0DATA( specularshader.val = 0.5DATA 0) roughnessshader.val = 0.05DATA) coefshader = 1.5DATA) reflblurshader = 0DATA* refrblurshader.val = 0DATAP* reflsamples.val = 0DATA* refrsamples.val = 0DATA* if (shadermenu.val == 3):DATA(+ ambientshader.val = 1.0DATAp+ diffuseshader.val = 0.1DATA+ specularshader.val = 1.0DATA, roughnessshader.val = 0.2DATAH, if (shadermenu.val == 5):DATA, ambientshader.val = 1DATA, diffuseshader.val = 0.5DATA - specularshader.val = 0.5DATAh- roughnessshader.val = 0.1DATA(- textshader.val = 'Surface "plastic"'DATA,. textshaderd.val = 'Displacement "bumpy"'DATA`. texturem.val = ''DATA. textnor.val = 0DATA. illuminationmenu.val = 0DATA(/DATA0X/def writeShader(ribfile, name, meshobj, anim):DATA/ global texturefile, txdoneDATA 0 if (arealightMESH.val == 0):DATAP0 MName = '"plastic"'DATA0 else: DATA0 MName = ''DATA,1 if ((uv.val == 1) and (meshobj != 10)):DATA0h1 mesh = Blender.NMesh.GetRawFromObject(name)DATA1 if mesh.faces[0].image:DATA,2 imagename = mesh.faces[0].image.filenameDATA h2 imagename = imagename[:-3]DATA2 imagename = imagenameDATA$3 imagename = imagename + 'tif'DATATP3 imagename = '%s/%s/textures/%s'%(rootdir, dirw.val, os.path.split(imagename)[1])DATAh3 rawimage = '%s/%s/textures/%s'%(rootdir, dirw.val, os.path.split(mesh.faces[0].image.filename)[1])DATA8h4 infile = open(mesh.faces[0].image.filename, 'rb')DATA$4 outfile = open(rawimage, 'wb')DATA 5 outfile.write(infile.read())DATAp5 outfile.close()DATA5 infile.close()DATA`5 imagenameconv = texturesdir + os.path.split(mesh.faces[0].image.filename)[1][:-3] + 'tif'DATAX6 txname = texturesdir + os.path.split(mesh.faces[0].image.filename)[1][:-3] + 'tx'DATA(7 if os.path.isfile(imagename) == 0:DATA `7 try:DATA$7 totiff.SetOutDir(texturesdir)DATA(7 ok = totiff.ConvertShort(rawimage)DATA$@8 if not ok[0]: # error occurredDATA(8 print ok[1] # print error messageDATA 8 except:DATA 9 if (os.name != "posix"):DATA p9 try:DATAd9 os.system('/ImageMagick/convert.exe -depth 8 -compress none %s %s'%(rawimage, imagename))DATA8: except OSError:DATA: print "\nYou do not have ImageMagic installed in c:\ImageMagic so texture conversion will not be possible. You will havto do it manualy.\nYou can find the textures to convert in c:\BlenderMan\PROJECTNAME\textures\\n"DATA ; else:DATA ; try:DATAP< os.system('convert -depth 8 -compress none %s %s'%(rawimage, imagename))DATA< except OSError:DATA0< print "\nCould not find ImageMagic\n"DATA,(= imagename = mesh.faces[0].image.filenameDATA = imagename = imagename[:-3]DATA= imagename = imagenameDATA > tdlname = imagename + 'tx'DATA$h> imagename = imagename + 'tif'DATA4> imagename = '%s'%(os.path.split(imagename)[1])DATA0? tdlname = '%s'%(os.path.split(tdlname)[1])DATAHx? MName = '"bms" "string texname" ["%s"] "float maptype" 3'%(tdlname)DATA@? if ((os.path.isfile(txname) == 0) or (reconvert.val == 1)):DATA`@ if menuval.val == 1:DATAH@ os.system('%s %s %s'%(prmantexmaker.val, imagenameconv, txname))DATA A elif menuval.val == 2:DATAHhA os.system('%s %s %s'%(bmrttexmaker.val, imagenameconv, txname))DATAA elif menuval.val == 3:DATAH(B os.system('%s %s %s'%(entropytexmaker.val, imagenameconv, txname))DATAB elif menuval.val == 4:DATADB os.system('%s %s %s'%(dltexmaker.val, imagenameconv, txname))DATAXC elif menuval.val == 5:DATAHC os.system('%s %s %s'%(aqsistexmaker.val, imagenameconv, txname))DATAD elif menuval.val == 6:DATAH`D os.system('%s %s %s'%(pixietexmaker.val, imagenameconv, txname))DATAD else: DATAE MName = '"plastic"'DATA$XE if (transmittcaustics.val == 1):DATA0E mesh = Blender.NMesh.GetRawFromObject(name)DATAF try:DATA<@F material = Blender.Material.Get(mesh.materials[0].name)DATAF mr = material.RDATAF mg = material.GDATA(G mb = material.BDATA@hG except: # if the mesh doesnt have a material default to whiteDATA G mr = 1DATA H mg = 1DATA HH mb = 1DATA`H ribfile.write('\t\tAttribute "caustic" "color refractioncolor" [%s %s %s]\n'%(mr, mg, mb))E DATAhI ribfile.write('\t\tAttribute "caustic" "float refractionindex" [%s]\n'%transmittcausticsslider.val)DATA I if (reflectcaustics.val == 1):DATAPI ribfile.write('\t\tAttribute "caustic" "color specularcolor" [.9 .9 .9]\n')DATA xJ if (recievecaustics.val == 1):DATA(J ribfile.write('\t\tIlluminate 2 1\n')DATA8 K if ((shadermenu.val == 1) & (arealightMESH.val != 1)):DATA0K if ((convertbm.val != 0) or (meshobj == 10)):DATAK ribfile.write('\t\tSurface "plastic" "Ka" %s "Kd" %s "Ks" %s "roughness" %s\n'%(ambientshader.val, diffuseshader.val, specularshader.val, roughnessshader.val))DATA<L elif ((shadermenu.val == 2) & (arealightMESH.val != 1)):DATA0 M if ((convertbm.val != 0) or (meshobj == 10)):DATA8M ribfile.write('\t\tDeclare "eta" "uniform float"\n')DATA<M ribfile.write('\t\tDeclare "blur" "uniform float"\n')DATA@PN ribfile.write('\t\tDeclare "refrblur" "uniform float"\n')DATA@N ribfile.write('\t\tDeclare "raysamples" "uniform float"\n')DATAD0O ribfile.write('\t\tDeclare "refrraysamples" "uniform float"\n')DATA@O ribfile.write('\t\tDeclare "envname" "uniform string"\n')DATAP if (menuval.val == 3):DATAXP evar = ('"float reflblur" [%s] "float refrblur" [%s] "string envname" ["reflection"] "string envspace" ["current"] "refrblur" %s "eta" %s'%(reflblurshader.val, refrsamples.val, refrblurshader.val, coefshader.val))DATA`Q elif (menuval.val == 2):DATAQ evar = '"blur" [%s] "raysamples" [%s] "refrraysamples" %s "refrblur" %s "eta" %s'%(reflblurshader.val, reflsamples.val, refrsamples.val, refrblurshader.val, coefshader.val)DATA R else:DATAR evar = ''DATAS ribfile.write('\t\tSurface "glass" "Ka" %s "Kd" %s "Ks" %s "roughness" %s "Kr" %s %s\n'%(ambientshader.val, diffuseshader.val, specularshader.val, roughnessshader.val, kr.val, evar))DATA<S elif ((shadermenu.val == 3) & (arealightMESH.val != 1)):DATA0PT if ((convertbm.val != 0) or (meshobj == 10)):DATA<T ribfile.write('\t\tDeclare "blur" "uniform float"\n')DATA@U ribfile.write('\t\tDeclare "raysamples" "uniform float"\n')DATAU if (menuval.val == 3):DATA`U evar = '"string envname" ["reflection"] "string envspace" ["current"] "float twosided" 1'DATA`V elif (menuval.val == 2):DATAPV evar = ('"raysamples" %s "blur" %s'%(reflsamples.val, reflblurshader.val))DATA (W else:DATA`W evar = ''DATAW ribfile.write('\t\tSurface "shiny" "Ka" %s "Kd" %s "Ks" %s "roughness" %s %s\n'%(ambientshader.val, diffuseshader.val, specularshader.val, roughnessshader.val, evar))DATA<xX elif ((shadermenu.val == 4) & (arealightMESH.val != 1)):DATA0X if ((convertbm.val != 0) or (meshobj == 10)):DATAt@Y ribfile.write('\t\tAttribute "displacementbound" "sphere" [ %s ] "coordinatesystem" [ "object" ]\n'%norm.val)DATA,Y ribfile.write('\t\t%s\n'%textshader.val)DATA08Z ribfile.write('\t\t%s\n'%textshaderd.val)DATA<Z elif ((shadermenu.val == 5) & (arealightMESH.val != 1)):DATA0[ if ((convertbm.val != 0) or (meshobj == 10)):DATAt`[ ribfile.write('\t\tAttribute "displacementbound" "sphere" [ %s ] "coordinatesystem" [ "object" ]\n'%norm.val)DATA \ txname = texturem.val[:-3]DATAP\ txname = txname + 'tx'DATA\ tdlname = txnameDATA$\ txname = texturesdir + txnameDATA(] converttex = 1DATA$h] if os.path.isfile(txname) == 0:DATA] for texture in txdone:DATA ^ if (txname == texture):DATAP^ converttex = 0DATA ^ breakDATA^ if (converttex == 1):DATA_ if (menuval.val == 1):DATAT`_ os.system('%s %s %s'%(prmantexmaker.val, texturesdir + texturem.val, txname))DATA _ elif (menuval.val == 2):DATAT0` os.system('%s %s %s'%(bmrttexmaker.val, texturesdir + texturem.val, txname))DATA ` elif (menuval.val == 3):DATAXa os.system('%s %s %s'%(entropytexmaker.val, texturesdir + texturem.val, txname))DATA a elif (menuval.val == 4):DATATa os.system('%s %s %s'%(dltexmaker.val, texturesdir + texturem.val, txname))DATA Xb elif (menuval.val == 5):DATATb os.system('%s %s %s'%(aqsistexmaker.val, texturesdir + texturem.val, txname))DATA (c elif (menuval.val == 6):DATATxc os.system('%s %s %s'%(pixietexmaker.val, texturesdir + texturem.val, txname))DATA c txdone = txdone + [txname]DATAHd txname = tdlnameDATAd if (textnor.val == 1):DATAd ribfile.write('\t\tDisplacement "bmd" "string texname" ["%s"] "float maptype" %s "float Km" %s\n'%(txname, projection.val - 1, norm.val))DATAe ribfile.write('\t\tSurface "bms" "Ka" %s "Kd" %s "Ks" %s "roughness" %s "string texname" ["%s"] "float maptype" %s\n'%(ambientshader.val, diffuseshader.val, specularshader.val, roughnessshader.val, txname, projection.val - 1))DATA0f if ((convertbm.val == 0) & (meshobj != 10)):DATA0g mesh = Blender.NMesh.GetRawFromObject(name)DATAhg if (MName == ''):DATA g returnDATAg try:DATA<h material = Blender.Material.Get(mesh.materials[0].name)DATA$h hard = 1-(material.hard*0.00392)DATAh ribfile.write('\t\tSurface %s "Ka" %s "Kd" %s "Ks" %s "roughness" %s\n'%(MName, material.amb, material.ref, material.spec, hard))DATA i except:DATA0i ribfile.write('\t\tSurface %s\n'%(MName))DATA j if (meshobj != 10):DATA0hj mesh = Blender.NMesh.GetRawFromObject(name)DATAj try:DATAk if mesh.materials:DATA<Hk material = Blender.Material.Get(mesh.materials[0].name)DATATk ribfile.write("\t\tColor [%s %s %s]\n" %(material.R, material.G, material.B))DATA0l except: passDATA pl if (arealightMESH.val == 1):DATA,l ribfile.write('\t\tSurface "constant"\n')DATALm ribfile.write('\t\tAttribute "light" "nsamples" [%s]\n'%areasamples.val)DATAm if (menuval.val == 2):DATA@m ribfile.write('\t\tAttribute "light" "shadows" ["on"]\n')DATA0Hn mesh = Blender.NMesh.GetRawFromObject(name)DATAn try:DATA<n material = Blender.Material.Get(mesh.materials[0].name)DATAHo if (menuval.val == 3):DATAo ribfile.write('\t\tAreaLightSource "arealight" 999 "intensity" [%s] "lightcolor" [%s %s %s] "string shadowname" ["shadow"] "float shadowbias" [0.15]\n'%(material.emit * 100, material.R, material.G, material.B))DATAp elif (menuval.val == 2):DATAp ribfile.write('\t\tAreaLightSource "arealight" 999 "intensity" [%s] "lightcolor" [%s %s %s]\n'%(material.emit * 100, material.R, material.G, material.B))DATA q except:DATAxq ribfile.write('\t\tAreaLightSource "arealight" 999 "intensity" [%s] "lightcolor" [%s %s %s]\n'%(0.7 * 100, 1, 1, 1))DATArDATA8rdef createObjects(ribfile, cframe, shadows, frames2):DATAT(s global sshader, selectedname, thisone, meshobjects, xbar, meshnum, partitionnameDATAs meshobjects = 0.0DATAs thisone = 0DATA(t meshnum = 0DATAht objecttime = ''DATA(t for objects in Blender.Object.Get():DATAu name = objects.getName()DATAHu try:DATADu if (objects.getType() == "Mesh"): meshobjects = meshobjects + 1DATA u except: DATA(v passDATA(`v for objects in Blender.Object.Get():DATAv name = objects.getName()DATAw resetObject()DATA @w area = 0DATA$xw obj = Blender.Object.Get(name)DATAw i = 0DATA0x while (obj.Layer>>i): # convert layer numberDATA`x i = i + 1DATA x if (i == hiddenlayer.val):DATAx layer = 1DATA0y else:DATAhy layer = 0DATA8y if ((objects.getType() == "Mesh") & (layer == 0)):DATAz meshnum = meshnum + 1DATA(Xz meshobj = Blender.Object.Get(name)DATA$z obj = Blender.Object.Get(name)DATA{ selectedname = nameDATA$H{ Register (gui, event, bevent)DATA{ saveload(0,0,'object')DATA{ if (shadows == 0):DATA((| ribfile.write('\tAttributeBegin\n')DATA0| if ((shadows == 0) and (objectra.val == 1)):DATA@| ribfile.write('\t\tReadArchive "%s"\n' %(objectrafile.val))DATAP} if (shadows != 1):DATA0} mesh = Blender.NMesh.GetRawFromObject(name)DATA } if (len(mesh.faces) == 0):DATA(H~ ribfile.write('\tAttributeEnd\n')DATA~ del(mesh)DATA ~ returnDATA if (mesh.materials):DATA ` try:DATA@ material = Blender.Material.Get(mesh.materials[0].name)DATAT ribfile.write("\t\tColor [%s %s %s]\n" %(material.R, material.G, material.B))DATAd ribfile.write("\t\tOpacity [%s %s %s]\n" %(material.alpha, material.alpha, material.alpha))DATA except:DATA X passDATA del(mesh)DATAЁDATA  if (motionblur.val == 1):DATA,P ribfile.write('\tMotionBegin [0 1]\n')DATA( Blender.Set('curframe', cframe) DATA  writeMatrix(ribfile, name)DATA<P Blender.Set('curframe', cframe + motionblurframe.val)DATA  writeMatrix(ribfile, name)DATA$ ribfile.write('\tMotionEnd\n')DATA(X Blender.Set('curframe', cframe) DATA  else:DATA  writeMatrix(ribfile, name)DATA,8 namelist = string.split(sshader, "|")DATA if len(namelist) > 1: DATA@؅ surfaceshadername.val = namelist[objectshadermenu.val - 1] DATA$H Register (gui, event, bevent)DATA if (convertbm.val == 1):DATA saveload(0,1,'shader')DATA$( Register (gui, event, bevent)DATA x if (castshadow.val == 1):DATAȇ op = "Os"DATA  elif (castshadow.val == 2):DATAX op = "opaque"DATA  elif (castshadow.val == 3):DATA4 if (menuval.val == 1) or (menuval.val == 4):DATAH op = "shader"DATA  else:DATA op = "shade"DATA  elif (castshadow.val == 4):DATA4P if (menuval.val == 1) or (menuval.val == 4):DATA op = "transparent"DATA  else:DATA0 op = "none"DATA0p if (menuval.val == 1) or (menuval.val == 4):DATATЋ ribfile.write('\t\tAttribute "visibility" "string transmission" ["%s"]\n'%op)DATA4P elif (menuval.val == 2) or (menuval.val == 3):DATAP ribfile.write('\t\tAttribute "render" "string casts_shadows" ["%s"]\n'%op)DATA 0 if (rvisibility.val == 1):DATA if (menuval.val == 3):DATAHȍ ribfile.write('\t\tAttribute "visibility" "integer camera" [0]\n')DATA @ elif (menuval.val == 2):DATAH ribfile.write('\t\tAttribute "render" "integer visibility" [2]\n')DATA if (shadows == 0):DATA4P writeShader(ribfile, name, meshobj, frames2)DATA if (amesh.val == 1):DATA objecttime = frames2DATA @ else:DATAx objecttime = ''DATA  if (motionblur.val != 1):DATA, if ((frames2 == 0) or amesh.val == 1):DATA` if (geom.val == 1):DATAH meshfile = open('%s/%s%s.rib'%(meshesdir,name, objecttime), 'w')DATA8  check(name, meshfile, meshobj, meshnum, shadows)DATA if ((menuval.val == 4) & (os.name != "posix")): ribfile.write('\t\tReadArchive "%s%s"\n'%(os.path.splitdrive( os.path.normcase( os.path.normpath(partitionname + meshesdir + name + str(objecttime) + ".rib")))))DATA\ else: ribfile.write('\t\tReadArchive "%s/%s%s.rib"\n'%(meshesdir, name, objecttime))DATA  else:DATA P if (meshexport.val == 2):DATA, if ((frames2 == 0) or amesh.val == 1):DATA if (geom.val == 1):DATAH@ meshfile = open('%s/%s%s.rib'%(meshesdir,name, objecttime), 'w')DATA8 check(name, meshfile, meshobj, meshnum, shadows)DATA  if ((menuval.val == 4) & (os.name != "posix")): ribfile.write('\t\tReadArchive "%s%s"\n'%(os.path.splitdrive( os.path.normcase( os.path.normpath(partitionname + meshesdir + name + objecttime + ".rib")))))DATA\  else: ribfile.write('\t\tReadArchive "%s/%s%s.rib"\n'%(meshesdir, name, objecttime))DATA  else:DATA if (amesh.val != 1):DATA( if (frames2 == 0):DATAp if (geom.val == 1):DATAL meshfile = open('%s/%s%s.rib'%(meshesdir,name, objecttime), 'w')DATA<0 check(name, meshfile, meshobj, meshnum, shadows)DATA if ((menuval.val == 4) & (os.name != "posix")): ribfile.write('\t\tReadArchive "%s%s"\n'%(os.path.splitdrive( os.path.normcase( os.path.normpath(partitionname + meshesdir + name + objecttime + ".rib")))))DATA\ else: ribfile.write('\t\tReadArchive "%s/%s%s.rib"\n'%(meshesdir, name, objecttime))DATA  else:DATA(X Blender.Set('curframe', cframe) DATA$ Blender.Window.RedrawAll()DATA if (geom.val == 1):DATAHH meshfile = open('%s/%s%s.rib'%(meshesdir,name, objecttime), 'w')DATA8 check(name, meshfile, meshobj, meshnum, shadows)DATA0( ribfile.write('\tMotionBegin [0 1]\n')DATA if ((menuval.val == 4) & (os.name != "posix")): ribfile.write('\t\tReadArchive "%s%s"\n'%(os.path.splitdrive( os.path.normcase( os.path.normpath(partitionname + meshesdir + name + str(objecttime) + ".rib")))))DATA\ else: ribfile.write('\t\tReadArchive "%s/%s%s.rib"\n'%(meshesdir, name, objecttime))DATA< Blender.Set('curframe', cframe + motionblurframe.val)DATA$ Blender.Window.RedrawAll()DATA4П objecttime = frames2 + motionblurframe.valDATA0 if (geom.val == 1):DATAPx meshfile = open('%s/%s%s.rib'%(meshesdir,name, str(objecttime)), 'w')DATA8 check(name, meshfile, meshobj, meshnum, shadows)DATA` if ((menuval.val == 4) & (os.name != "posix")): ribfile.write('\t\tReadArchive "%s%s"\n'%(os.path.splitdrive( os.path.normcase( os.path.normpath(partitionname + meshesdir + name + str(objecttime) + ".rib")))))DATA`h else: ribfile.write('\t\tReadArchive "%s/%s%s.rib"\n'%(meshesdir, name, str(objecttime)))DATA( ribfile.write('\tMotionEnd\n')DATA(P Blender.Set('curframe', cframe) DATA$ Blender.Window.RedrawAll()DATA objecttime = frames2DATA@ if (shadows == 0):DATA( ribfile.write('\tAttributeEnd\n')DATA  if (arealightMESH.val == 1):DATA,0 ribfile.write('\tIlluminate 999 1\n')DATADATA(def drawBar(meshnum, qwerty, pixels):DATA if (progress.val == 1):DATA$X global thisone, meshobjects, xbarDATA  xbar = 0DATA xbar = qwertyDATA  if (xbar < 10): xbar = 11DATA h Draw()&{@DATA0 elif ((progress.val == 0) & (anim.val == 1)):DATA( testtime = Blender.Get('curframe')DATAXDATA8def check(name, meshfile, meshobj, meshnum, shadows):DATA if (shadows != 1):DATA 0 print 'Exporting: %s'%nameDATA0 mesh = Blender.NMesh.GetRawFromObject(name)DATA  if (len(mesh.faces) == 0):DATA0 del(mesh)@DATA p returnDATA if (meshexport.val == 1):DATA$ pointspolygon(meshfile, mesh)@DATA @ elif (meshexport.val == 2):DATA0 polygon(mesh, meshfile, meshobj, meshnum)DATA  elif (meshexport.val == 3):yDATA @ subdivmesh(meshfile, mesh)EJDATA  elif (meshexport.val == 4):`DATA points(meshfile, mesh)@DATA ( elif (meshexport.val == 5):pJDATAx general(meshfile, mesh)@DATA  elif (meshexport.val == 6):UDATA bilinear(meshfile, mesh)DATA X del(mesh)DATA meshfile.close()`DATAЮyDATA def pointspolygon(file, mesh): DATAP global meshnumDATA$P testtime = Blender.Get('curframe')DATA  update = 5DATA؀ colorif = 0@DATA perso = 0.0z^DATAX pixels = 0.0@DATA update = 100DATA ؁ index = 0DATA facenum = len(mesh.faces)JDATAX if menuval.val != 2:DATA if mesh.hasFaceUV() == 1:DATA8 file.write('Declare "st" "facevarying float[2]"\n')DATA$P file.write("PointsPolygons [");DATA for face in mesh.faces:@DATA, if len(face.v) == 4 and menuval.val == 2:DATA@ file.write('3 3 ')DATA else:DATA$ file.write('%s '%(len(face.v)))DATA index = index + 1DATA0P if ((index == update) or (index == facenum)):DATA update = update + 100DATA pixels = 619@DATA(8 perso = float(index) / float(facenum)DATA, qwerty = float(pixels) * float(perso) @DATA$ drawBar(meshnum, qwerty, pixels)DATA8 file.write("] ")DATAx file.write("[ ")DATA for face in mesh.faces:DATA num = len(face.v)DATA@ if num == 3 or num == 4:JDATA( if num == 4 and menuval.val == 2:DATA for i in (0,1,2,0,2,3):DATA,( file.write('%s ' % face.v[i].index)DATA  else:pJDATA for vert in face.v:DATA$ file.write('%s ' % vert.index)DATAP file.write("]")`DATA file.write('\n"P" [')DATA؊ for vert in mesh.verts:DATAD  file.write("%s %s %s " % (vert.co[0], vert.co[1], vert.co[2]))DATA file.write('] ')urDATAЋ if mesh.faces[0].smooth:DATA file.write(' "N" [')@DATA` for vert in mesh.verts:@DATAD file.write("%s %s %s " % (vert.no[0], vert.no[1], vert.no[2]))Y+DATA file.write(']')`DATA$X if mesh.hasVertexColours() == 1:aDATA( vertexcol = range(len(mesh.verts))DATA file.write('\n"Cs" [')˴DATAH for face in mesh.faces:@DATA num = len(face.v)͂@DATA؎ if num == 3 or num == 4:DATA$  for vi in range(len(face.v)):DATA0p vertexcol[face.v[vi].index] = face.col[vi]DATAЏ for vc in vertexcol: DATAD file.write('%s %s %s ' % (vc.r/256.0, vc.g/256.0, vc.b/256.0))@DATA file.write(']')`DATAȐ if (menuval.val != 2):DATA if mesh.hasFaceUV() == 1:DATAX file.write('\n"st" [')@DATA for face in mesh.faces:DATA num = len(face.v)`DATA 0 if num == 3 or num == 4:DATA$ for vi in range(len(face.v)):@DATADВ file.write('%s %s ' % (face.uv[vi][0], 1.0 - face.uv[vi][1]))DATA@ file.write(']')DATA else:JDATA, if (len(mesh.faces[0].uv) != 0):DATA file.write('\n"st" [ ')DATAX vtuv = [] `DATA( for i in range(len(mesh.verts)): aDATA vtuv.append(0) DATA0 for f in mesh.faces: DATA x for i in range(len(f.uv)): DATAȕ uv = f.uv[i]DATA  uv = uv[0], 1.0 - uv[1]DATA X vtuv[f.v[i].index] = uv^@DATA for c in vtuv:DATA for d in c: DATA( file.write('%s '%d)@DATAp file.write(']')DATA file.write('\n')}DATADATA0 def polygon(mesh, meshfile, meshobj, meshnum):@DATA global meshobjects, iDATAȘ i = 0DATA  update = 5DATA8 colorif = 0@DATAx perso = 0.0DATA pixels = 0.0DATA facenum = len(mesh.faces)@DATA@ for face in mesh.faces:R@DATA if mesh.materials:DATA$К matname=mesh.materials[0].nameDATA  try:DATA0X material = Blender.Material.Get(matname)~@DATA< if (colorif != material.R + material.G + material.B):@DATA4  colorif = material.R + material.G + material.BDATAT meshfile.write("\t\tColor [%s %s %s]\n" %(material.R, material.G, material.B))DATA  except:DATA 8 passDATA p if len(mesh.faces[i].v) == 3:DATA vertar = 3DATA else:DATA8 vertar = 4DATAx if face.smooth:DATA smooth = 1DATA else:DATA0 smooth = 0DATA8p writePoly(mesh,face, meshfile, i, vertar, smooth);DATA ؟ i = i + 1DATA( if ((i == update) or (i == facenum)):DATAh update = update + 5DATA pixels = 619DATA( perso = float(i) / float(facenum)`DATA,H qwerty = float(pixels) * float(perso)DATA$ drawBar(meshnum, qwerty, pixels)DATADATA< def textureUV(i, mesh, va, vb, vc, meshfile, face, number):DATA try:DATA etest = face.uv[0][0]DATA  except:pJDATA @ returnDATAx meshfile.write('"st" [ ')DATA if (number == 1):DATA for x in [0, 1, 2]:@DATA(H meshfile.write("%s "%face.uv[x][0])@DATA0 meshfile.write("%s "%(1.0 - face.uv[x][1]))DATA if (number == 2):JDATA$@ if len(mesh.faces[i].v) == 3: ς@DATA  return@DATAȥ for x in [0, 2, 3]:DATA( meshfile.write("%s "%face.uv[x][0])JDATA0h meshfile.write("%s "%(1.0 - face.uv[x][1]))DATAȦ meshfile.write(']\n')DATA`DATA8@def writePoly(mesh, face, meshfile, i, vertar, smooth):DATA$ meshfile.write('Polygon "P" [ ')DATA for x in [0, 1, 2]:DATA@ for y in range(3):DATA try:DATA4 meshfile.write('%s '%mesh.faces[i].v[x].co[y])DATA  except Error:v@DATA ` print iDATA  print xDATA Щ print yDATA meshfile.write(']\n')JDATAP if (smooth == 1):DATA meshfile.write('"N" [')DATAت for x in [0, 1, 2]:pJDATA  for y in range(3):`DATA4h meshfile.write('%s '%mesh.faces[i].v[x].no[y])dDATAȫ meshfile.write(']\n')DATA  number = 1DATA4H textureUV(i,mesh,0,1,2, meshfile, face, number)*ibDATA if (vertar == 4):eDATA$ meshfile.write('Polygon "P" [ ')fDATA8 for x in [0, 2, 3]:poDATA for y in range(3):faDATA4ȭ meshfile.write('%s '%mesh.faces[i].v[x].co[y])pDATA( meshfile.write(']\n')DATAp if (smooth == 1):DATA meshfile.write('"N" [')rDATA for x in [0, 2, 3]:mDATA@ for y in range(3):tDATA4 meshfile.write('%s '%mesh.faces[i].v[x].no[y])DATA meshfile.write(']\n')mpfDATA0 number = 2radDATA4p textureUV(i,mesh,0,1,2, meshfile, face, number)uDATAаpatDATA def general(meshfile, mesh):codDATA P index = 0mDATA, meshfile.write('PointsGeneralPolygons [')oDATA for face in mesh.faces:ef_DATA( meshfile.write('1 ')CDATAp index = index + 1DATA meshfile.write(']\n[')DATA  index = 0aDATA0 for face in mesh.faces:actDATA x meshfile.write(str(nr) + ' ')DATAȳ index = index + 1DATA meshfile.write(']\n[')DATA P index = 0lDATA for f in mesh.faces:xrDATAд for v in f.v:DATA( meshfile.write(str(v.index) + ' ')deDATAh index = index + 1DATA meshfile.write(']\n"P" [')DATA  index = 0rDATA$( for x in range(len(mesh.verts)):eDATAx for y in range(3):4][DATA4 meshfile.write(str(mesh.verts[x].co[y]) + '')ogDATA  index = index + 1DATA` meshfile.write(']\n')iDATAr[1DATA طdef bilinear(meshfile, mesh):efDATA( f = 0eDATA` for face in mesh.faces:li_DATA, meshfile.write('Patch "bilinear" "P" [ ')DATA for x in [3, 2, 0, 1]:dirDATAH for y in range(3):alDATA4 meshfile.write('%s '%mesh.faces[f].v[x].co[y])cDATA meshfile.write(']\n')DATA8 if face.smooth:elDATAx meshfile.write('"N" [ ')DATA for x in [3, 2, 0, 1]:pyDATA for y in range(3):uDATA4P meshfile.write('%s '%mesh.faces[f].v[x].no[y])DATA meshfile.write(']\n')nelDATA  f = f + 1DATA0datDATA `def subdivmesh(meshfile, mesh):DATA if menuval.val != 2:*sDATA if mesh.hasFaceUV() == 1:DATA<@ meshfile.write('Declare "st" "facevarying float[2]"\n')[DATA8 meshfile.write('SubdivisionMesh "catmull-clark" [')lasDATA for face in mesh.faces:typDATAX num = len(face.v)DATA  meshfile.write('%s '%(num))12DATA meshfile.write(']\n[')DATA0 for face in mesh.faces:dedDATAx for vert in face.v:fDATA( meshfile.write('%s ' % vert.index)mpDATAD meshfile.write(']\n["interpolateboundary"] [0 0] [] []\n"P" [') aiDATA for vert in mesh.verts:[3]DATAH meshfile.write("%s %s %s " % (vert.co[0], vert.co[1], vert.co[2]))3]DATAH meshfile.write(']')aneDATA if (menuval.val != 2):DATA if mesh.hasFaceUV() == 1:DATA  meshfile.write('\n"st" [')mDATAp for face in mesh.faces:gDATA num = len(face.v)QuDATA  if num == 3 or num == 4:eSeDATA$P for vi in range(len(face.v)):hDATAH meshfile.write('%s %s ' % (face.uv[vi][0], 1.0 - face.uv[vi][1]))DATA meshfile.write(']')DATA$` if mesh.hasVertexColours() == 1:AcDATA( vertexcol = range(len(mesh.verts))orDATA  meshfile.write('\n"Cs" [')erDATAX for face in mesh.faces:kTDATA num = len(face.v)itCDATA if num == 3 or num == 4:DATA$0 for vi in range(len(face.v)): DATA0 vertexcol[face.v[vi].index] = face.col[vi]DATA for vc in vertexcol:DATAH( meshfile.write('%s %s %s ' % (vc.r/256.0, vc.g/256.0, vc.b/256.0))DATA meshfile.write(']')(DATA meshfile.write('\n')DATA0DATA`def points(meshfile, mesh):DATA  meshfile.write('Points "P" [')DATA for vert in mesh.verts:DATAH@ meshfile.write("%s %s %s " % (vert.co[0], vert.co[1], vert.co[2]))lDATA@ meshfile.write('] "constantwidth" [%s]\n' % (pointwidth.val))DATA(DATA Xdef createGI(ribfile, frames):DATA0 if (areagi.val == 1) and (menuval.val !=6):&DATA8 ribfile.write('\tDeclare "casts_shadows" "string"\n')DATAHp ribfile.write('\tAttribute "render" "casts_shadows" ["opaque"]\n')YDATAT ribfile.write('\tLightSource "ambientlight" 998 "lightcolor" [0.02 0.02 0.02]\n')DATA(h ribfile.write('\tAttributeBegin\n')\DATA@ ribfile.write('\t\tAttribute "identifier" "name" ["sky"]\n')DATA`0 ribfile.write('\t\tConcatTransform [1 0 0 0 0 1 0 0 0 0 1 0 -1573.14 307.099 -988.299 1]\n')DATAX ribfile.write('\t\tAttribute "render" "visibility" [3]\n') # invisible to the cameraDATA(H ribfile.write('\t\tAttributeBegin\n')DATA, ribfile.write('\t\t\tColor [1 1 1]\n') DATA, ribfile.write('\t\t\tOrientation "rh"\n')DATA0P ribfile.write('\t\t\tReverseOrientation\n')FDATA0 ribfile.write('\t\t\tSurface "constant"\n')fDATAL ribfile.write('\t\t\tAttribute "light" "nsamples" [%s]\n'%gisteps.val)uDATA@ ribfile.write('\t\t\tAttribute "light" "shadows" ["on"]\n')DATAh ribfile.write('\t\t\tAreaLightSource "arealight" 1 "lightcolor" [1 1 1] "intensity" [10000000000]\n')DATA4 ribfile.write('\t\t\tSphere 50000 0 50000 360\n')DATA( ribfile.write('\t\tAttributeEnd\n')DATA$H ribfile.write('\tAttributeEnd\n')DATA( ribfile.write('\tIlluminate 1 1\n')DATA4 if (indirectgi.val == 1) and (menuval.val !=6):DATA P if (finalgather.val == 0):&DATAP ribfile.write('\tAttribute "indirect" "float maxerror" [%s]\n'%maxerror.val)DATAX  ribfile.write('\tAttribute "indirect" "float maxpixeldist" [%s]\n'%maxpixeldist.val)DATA else:DATAH ribfile.write('\tAttribute "indirect" "float maxpixeldist" [0]\n')DATAPX ribfile.write('\tAttribute "indirect" "integer nsamples" [%s]\n'%gisteps.val)DATA4 ribfile.write('\tLightSource "indirect" 42\n\n')DATA8 if (gisphere.val == 1):DATA( ribfile.write('\tAttributeBegin\n')DATAX ribfile.write('\t\tAttribute "render" "visibility" [3]\n') # invisible to the cameraDATA(` ribfile.write('\t\tColor [1 1 1]\n')DATA0 ribfile.write('\t\tSurface "constant"\n')DATA8 ribfile.write('\t\tSphere 2000 -2000 2000 360\n')DATA( ribfile.write('\tAttributeEnd\n')%DATADATAdef render(ribfile):DATAP if (os.name != "posix"):DATA if (menuval.val == 1):DATA4 os.system('%s %s'%(prmanrenderer.val, ribfile))DATA@ elif (menuval.val == 2):DATA4 os.system('%s %s'%(bmrtrenderer.val, ribfile))DATA elif (menuval.val == 3):DATA80 os.system('%s %s'%(entropyrenderer.val, ribfile))DATA elif (menuval.val == 4):DATA0 os.system('%s %s'%(dlrenderer.val, ribfile))DATA@ elif (menuval.val == 5):DATA4 os.system('%s %s'%(aqsisrenderer.val, ribfile))DATA elif (menuval.val == 6):DATA40 os.system('%s %s'%(pixierenderer.val, ribfile)) DATA elif (os.name == "posix"):DATA if (menuval.val == 1):m DATA8  os.system('%s %s &'%(prmanrenderer.val, ribfile))m DATA elif (menuval.val == 2):@DATA4 os.system('%s %s &'%(bmrtrenderer.val, ribfile))DATA0 elif (menuval.val == 3):DATA8x os.system('%s %s &'%(entropyrenderer.val, ribfile))DATA elif (menuval.val == 4):DATA4( os.system('%s %s &'%(dlrenderer.val, ribfile))DATA elif (menuval.val == 5):DATA8 os.system('%s %s &'%(aqsisrenderer.val, ribfile))DATA8 elif (menuval.val == 6):DATA8 os.system('%s %s &'%(pixierenderer.val, ribfile))DATADATAdef closeFile(ribfile):DATA` ribfile.close()DATADATAdef writeFrame(ribfile):DATA global sshader, cframeDATA ` display = Scene.GetCurrent()DATA, context = display.getRenderingContext()DATA frames2 = 0DATA(H display = Blender.Scene.GetCurrent()DATA if (anim.val == 1):DATA8 frames = context.endFrame() - context.startFrame()DATAP else:DATA frames = 0DATA if (anim.val == 1):DATA  cframe = context.startFrame()DATA` else:DATA$ cframe = Blender.Get('curframe')DATA  for x in range(frames + 1):ssDATA$8 Blender.Set('curframe', cframe)sDATA8 print 'Exporting Frame: %s'%Blender.Get('curframe')sDATA$ renderShadows(ribfile, frames2)DATA,@ ribfile.write('\nFrameBegin %s\n'%cframe)DATA( writeHeader(ribfile, frames, frames2)DATA lampobj = 0DATA0 if (motionblur.val == 1):DATA(x ribfile.write('MotionBegin [0 1]\n')DATA$ Blender.Set('curframe', cframe)DATA$  writeTransform(ribfile, lampobj)DATA<p Blender.Set('curframe', cframe + motionblurframe.val)DATA$ writeTransform(ribfile, lampobj)DATA$( Blender.Set('curframe', cframe)DATA x ribfile.write('MotionEnd\n')DATA else:DATA$ writeTransform(ribfile, lampobj)DATAP if (rgba.val == 1):DATA channels = "rgb"DATA elif (rgba.val == 2):DATA  channels = "rgba"DATAh elif (rgba.val == 3):DATA channels = "rgbz"DATA elif (rgba.val == 4):DATA@ channels = "z"DATA if (buffer.val == 1):DATAl ribfile.write('Display "%s/%s%05d.tif" "framebuffer" "%s"\n'%(imagesdir, image.val, cframe, channels))DATA` if (file.val == 1):DATAd ribfile.write('Display "%s/%s%05d.tif" "file" "%s"\n'%(imagesdir, image.val, cframe, channels))DATA8 if (preworldra.val == 1):DATA< ribfile.write('ReadArchive "%s"\n'%(preworldrafile.val))DATA$ ribfile.write('WorldBegin \n')DATA 8 if (postworldra.val == 1):DATA@ ribfile.write('\tReadArchive "%s"\n'%(postworldrafile.val))DATA0 if (menuval.val == 1) or (menuval.val == 4):DATADX ribfile.write('\tAttribute "visibility" "integer trace" [1]\n')DATA if (menuval.val == 3):DATA@ ribfile.write('\tAttribute "visibility" "reflection" [1]\n')DATA< ribfile.write('\tAttribute "visibility" "shadow" [1]\n')DATA  #PixieDATA  if (occlusion.val == 1):DATAlh ribfile.write('\tLightSource "ambientocclusion" 1 "numSamples" %s\n'%(int(pow(2,ambiSamples.val+6))))DATA if (indirect.val == 1):DATAhH ribfile.write('\tLightSource "ambientindirect" 1 "numSamples" %s\n'%(int(pow(2,ambiSamples.val+6))))DATA #End PixieDATA  ambientLight(ribfile)DATAh checkLamps(ribfile)DATA if (gi.val == 1):DATA  createGI(ribfile, frames)DATA@ if (hdri.val == 1):DATA if (menuval.val == 3):DATA( ribfile.write('\tAttributeBegin\n')DATAD( ribfile.write('\t\tAttribute "visibility" "reflection" [1]\n')DATAd ribfile.write('\t\tSurface "envsurf" "string envname" ["%s"] "float blur" [0]\n'%(hdritex.val))DATA4( ribfile.write('\t\tSphere 50000 0 50000 360\n')DATA( ribfile.write('\tAttributeEnd\n')DATAP createObjects(ribfile, cframe, 0, frames2) # 0 is for the shadows variableDATA ` ribfile.write('WorldEnd \n')DATA  ribfile.write('FrameEnd\n')DATA cframe = cframe + 1DATAH frames2 = frames2 + 1DATADATA4def export(): # start the export stuff from hereDATAX  global selectedtype, selectedname, xbar, texturefile, shadernametemp, partitionnameDATA8 newdirs() # make sure all the directories are thereDATA$ xbar = 10 # reset the progressbarDATA8` selectedtype = 'Type:' # reset the object editor stuffDATA selectedname = ''DATA4 filedir = os.path.normpath(pdir + filename.val)DATADh ribfile = open(filedir, 'w') # open the main ribfile (default.rib)DATA4 if ((menuval.val == 4) & (os.name != "posix")):DATA8 ribfile.write('ReadArchive "%s%s"\n'% os.path.splitdrive( os.path.normcase( os.path.normpath(partitionname + pdir + "/texturefile.rib") ) ) )DATA else:DATAD0 ribfile.write('ReadArchive "%s"\n'% (pdir + "/texturefile.rib"))DATAd texturefile = open(os.path.normpath(pdir + 'texturefile.rib'), 'w') # open the texture rib fileDATA0 if (menuval.val == 5):DATAx texturefile.write('#\n')DATA, writeFrame(ribfile) # write all the framesDATA0 closeFile(ribfile) # close the main ribfileDATAx texturefile.close()DATA8 selectedtype = 'Type:' # reset the object editor stuffDATA( selectedname = ''DATA(h surfaceshadername.val = shadernametempDATAH Register (gui, event, bevent) # make sure all gui values are in place`DATA48 if (rendert.val == 1): # if the renderbutton is onDATA4 render(pdir + filename.val) # render the rib fileTXd( kثTXKEYLIST.intrr  >  gDATA, /home/intrr/tuhopuu/blender/KEYLIST.intrrDATA X 8?DATAX   h?DATA  X ?DATA 0  ?ODATA0 x  /DATAx  0 0%DATA  x `0CDATA P  0DATAP   0"DATA  P 01%DATA (  1%DATA( p  1DATAp  ( 2DATA p X2,FREEDATAH 2,DATAH3$oDATAHp3DDATA 3%DATA h@4D0BDATAh 4DATAh5+DATA@X5!DATA@5DATA@5DATA86DATA`6t: DATA`648 tDATA`7me/iDATA8X7.xDATA87FREEDATA884pDATAH8win DATAX8DDATAX8DATAX 9W#?DATA0P9 win DATA0x90?DATAx0:$DATAxX:4headDATAP:DATAP:win DATAP8;DDATA(;DATA(p;?DATAp(<FREEDATAp@<DATAH<!FREEDATAH<DATAH(=@BDATA X=FREEDATA h=tDATAh =4pDATAh`>tpDATA@> FREEDATA@?1DATA@`?DATA?DATA`?DATA`@DATA`X@ DATA8@(DATA8@DATA8 A,ADATAAYDATAXABDATAX8B2DATAXBDATA0BcDDATA0xC%DATAx0hC/ DATAxC$DATAP DDATAPPD DATAPDDATA(DDATA(pEsDATAp(`EsDATA pEsDATA H E"sDATAH   @F'DATA  H F(' DATA  ! FDATA !h!  GDATAh!! !`G!DATA!!h!G/CDATA!@"!H&DATA@""!`HDATA""@"HADATA"#"H!PBDATA#`#"(IDATA`###xIDATA##`#I-DATA#8$# J"DATA8$$#pJ!DATA$$8$JDATA$%$JDATA%X%$0KDATAX%%%`K/DATA%%X%K&DATA%0&%LDATA0&x&%hLDATAx&&0&L!DATA&'x&M TimDATA'P'&0M'pDATAP'''M!DATA''P'MnterDATA'((' N$VDATA((p('xN2ibDATAp((((N)DATA()p(0ODATA)H)(`ODATAH)))O;DATA))H)P'DATA) *)hPDATA *h*)PDATAh** *PDATA**h*(Q#DATA*@+*xQ<DATA@++*QDATA++@+R&DATA+,+pR.DATA,`,+R/DATA`,,,0S'DATA,,`,S)DATA,8-,SDATA8--,T2DATA--8-pTDATA-.-T*DATA.X.-UDDATAX...UDATA..X.UDATA.0/.V/DATA0/x/.`V!DATAx//0/V5DATA/0x/WIDATA0P0/W@DATAP000X/homDATA00P00X DATA0(10hX,?DATA(1p10XT FIDATAp11(1Y*DATA12p1hY?DATA2H21Y*DATAH222ZDATA22H2PZ*DATA2 32ZDATA 3h32ZDATAh33 3@[DATA33h3p[ DATA3@43[DATA@443[DATA44@48\=DATA454\DATA5`54\DATA`5558]DATA55`5]DATA5865]0DATA8665^W#?DATA6686`^DATA676^DATA7X76^ ?DATAX777H_1ecDATA77X7_#DATA7087_DATA08x87@`DATAx8808p`DATA89x8`ADATA9P98(a3DATAP999a#DATA99P9a+DATA9(:90bhcDATA(:p:9`b DATAp::(:bDATA:;p:b:endDATA;H;:`c4DATAH;;;cxxH@DATA;;H;cdummDATA; <;HdwH@DATA <h<;d DATAh<< <d )DATA<<h<0e3DATA<@=<eDATA@==<e0xH@DATA==@=f*wH@DATA=>=XfthroDATA>`>=f65DATA`>>>f29-ADATA>>`> g%DATA>>xgDATA8?DATAh?DATA?Key FunctionDATAP?-------------------------------------------------------------------------------DATA/~ Display all layersDATA(0Shift-~ Display all/previous layersDATA`0REEDATA 01..2..0-= Show layer 1..2..12DATA$0ALT-1..2..0 Show layer 11..12..20DATA(01SHIFT-1..2..0-= Toggle layer 1..2..12DATA(1SHIFT-ALT-... Toggle layer 11..12..20DATA1DATA2Numpad DEL Zoom on objectDATA0X2Numpad / Local view on object (hide others)DATA02Numpad * Rotate view to object's local axesDATA(3Numpad + Zoom in (works everywhere)DATAHp3Numpad + Proportional vertex edit mode: Increase range of influenceDATA(3Numpad - Zoom out (works everywhere)DATAH@4Numpad - Proportional vertex edit mode: Decrease range of influenceoDATA4Numpad INS Set Camera viewDATA,5CTRL-Numpad INS Set active object as cameraDATA$X5ALT-Numbad INS Restore old cameraDATA5Numpad 1 Front viewDATA5CTRL-Numpad 1 Back viewDATA86Numpad 3 Right-Side viewDATA 6CTRL-Numpad 3 Left-Side view aDATA6Numpad 7 Top viewDATA7CTRL-Numpad 7 Bottom view EDATA0X7Numpad 5 Toggle orthogonal / perspective viewNDATA7Numpad 9 Redraw viewEEDATA8Numpad 2 Rotate view leftDATAH8Numpad 6 Rotate view rightDATA8Numpad 8 Rotate view upDATA8Numpad 2 Rotate view downDATA 9REEDATA$P9PgUp IPO: Select next keyframeDATA49CTRL-PgUp IPO: Select and jump to next keyframeDATA(:PgDn IPO: Select previous keyframe_DATA8X:CTRL-PgDn IPO: Select and jump to previous keyframeDATA:REEDATA:LEFT One frame backwardsDATA8;RIGHT One frame forwardsDATA;DOWN 10 frames backwardsDATA;UP 10 frames forwardsDATA<DATA@<TAB Enter/exit edit modeDATA$<TAB Sequencer: Edit meta stripDATA <CTRL-TAB Enter/exit pose modeDATA(=DATA X=A Select all / Deselect allDATA =ALT-A Animate current windowDATA8=CTRL-A Apply object's size/rotation to object dataDATA `>SHIFT-A Sequencer: ADD menuDATA$>SHIFT-ALT-A Animate all windowsDATA4?SHIFT-CTRL-A Apply lattice / Make dupliverts realDATA`?DATA?B Border selectDATA?BB Circle selectDATA@SHIFT-B Set render borderDATAX@DATA@C Center view on cursorDATA @C Sequencer: Change imagesDATA0 AC IPO: Snap current frame to selected keyDATAAALT-C Convert menu@fDATADACTRL-C Copy menu (Copy properties of active to selected objects)DATA48BSHIFT-C Center and zoom view on selected objectsDATABDATABD Set 3d draw modeDATA(CALT-D Create new instance of objectCDATA0hCCTRL-D Display alpha of image texture as wireDATA(CSHIFT-D Create full copy of objectDATA DDATAPDE ExtrudeDATADsDATA DF Edit mode: Make edge/faceDATA EF Sequencer: Set Filter YsDATA`EF Faceselect modeDATAEALT-F Beautify fillsDATA$ECTRL-F Sort faces in Z directionDATA(@FCTRL-F Edit mode: Flip triangle edgesDATA,FSHIFT-F Edit mode: Fill with trianglesDATAFDATA GG Grab (move)DATA`GALT-G Clear locationDATA0GSHIFT-ALT-G Remove selected objects from groupDATA(HCTRL-G Add selected objects to groupDATA`HSHIFT-G Group menuDATAHDATA$HH Hide selected vertices/facesDATA (IH Curves: Set handle typeDATAxIALT-H Reveal verticesDATA0ICTRL-H Curves: Automatic handle calculationEEDATA$ JSHIFT-H Hide deselected verticesDATA$pJSHIFT-H Curves: Set handle typeDATAJDATAJI Keyframe menuDATA0KDATA0`KJ Mesh: Join all adjacent triangles to quadsDATA(KJ Swap render page of render windowDATA LCTRL-J Join selected objectsDATAhLCTRL-J Nurbs: Add segmentDATA$LCTRL-J IPO: Join keyframes menu DATAMwH@DATA(0MK 3d window: Show keyframe positionsDATA$MK IPO: Show keyframe positionsDATAMK Nurbs: Print knotsDATA( NCTRL-K Make skeleton from armatureDATA4xNSHIFT-K Show and select all keyframes for objectDATA,NSHIFT-K Faceselect: Clear vertexcoloursDATA0ODATA`OL Make local menuDATA<OL Edit mode: Select linked vertices (near mouse pointer)DATA(PL OOPS window: Select linked objectsDATAhPCTRL-L Make links menuDATAPSHIFT-L Select links menuDATAPDATA$(QM Move object to different layerDATA@xQM Sequencer: Make meta strip (group) from selected stripsDATAQDATA(RN Numeric input menu (Size/Rot/Loc)DATA0pRN OOPS window: Rename object/linked objectsDATA0RCTRL-N Armature: Recalculate bone roll anglesDATA(0SCTRL-N Recalculate normals to outsideDATA,SCTRL-ALT-N Recalculate normals to insideDATASDATA4TO Edit mode: Toggle proportional vertex editingDATApTALT-O Clear object originDATA,TCTRL-O Revert current file to last savedDATAHUSHIFT-O Proportional vertex edit mode: Toggle smooth/steep falloffDATAUDATAUP Start realtime engineDATA0VP Edit mode: Seperate vertices to new objectDATA$`VALT-P Clear parent relationshipDATA8VCTRL-P Make active object parent of selected objectDATALWCTRL-SHIFT-P Make active object parent of selected object without inverseDATADWCTRL-P Edit mode: Make active vertex parent of selected objectDATAXDATA 0XR RotateDATA0hXR IPO: Record mouse movement as IPO curveXcDATAXRX Rotate around X axisDATA,YRXX Rotate around object's local X axisDATAhYRY Rotate around Y axisEDATA,YRYY Rotate around object's local Y axisDATAZRZ Rotate around Z axisDATA,PZRZZ Rotate around object's local Z axisEDATA ZALT-R Clear object rotationDATAZSHIFT-R Nurbs: Select rowDATA@[DATA p[S ScaleDATA[SX Flip around X axisDATA[SY Flip around Y axisDATA@8\ALT-S Edit mode: Shrink/fatten (Scale along vertex normals)cDATA\ALT-S Clear object sizeDATA\CTRL-S Edit mode: ShearDATA 8]SHIFT-S Cursor/Grid snap menuDATA]DATA4]T Sequencer: Touch and print selected moviesDATA^T Adjust texture spaceEEDATA `^T Edit mode: Flip 3d curveDATA^T IPO: Change IPO typeDATA$^ALT-T Clear tracking of objectDATA4H_CTRL-T Make selected object track active objectDATA$_CTRL-T Mesh: Convert to trianglesDATA_CTRL-ALT-T BlenchmarkDATA@`DATAp`U Make single user menuDATAD`U Edit mode: Reload object data from before entering edit modeBDATA4(aU Faceselect mode: Automatic UV calculation menuDATA$aU Vertex-/Weightpaint mode: UndoDATA,aCTRL-U Save current state as user defaultDATA0bDATA$`bV Curves/Nurbs: Vector handleDATAbV Vertexpaint modeonDATA<bALT-V Scale object to match image texture's aspect ratioDATA8`cSHIFT-V Edit mode: Align view to selected verticesDATAcausDATA cW Boolean operations menuwH@DATA HdW Edit mode: Specials menuDATAdCTRL-W Save current fileDATA$dCTRL-W Nurbs: Switch directionDATA40eSHIFT-W Warp/bend selected vertices around cursorDATAetonDATAeX Delete menuDATA,fCTRL-X Restore default state (Erase all)DATAXfrtrDATA8fY Mesh: Split selected vertices/faces from the restDATAfsDATA( gZ Switch 3d draw type (see also D)-ADATAxgQ>TXdk( TXblenderman0.1beta9.0.hlllltDATALhl/home/jerome/soft/3D/blender/blenderman0.1beta9.0/blenderman0.1beta9.0.pyDATAl(m8DATA(mpmlpDATApmm(mDATAmnpmw xDATAnHnm( DATAHnnnhDATAnnHn6DATAn onDATA ohon@DATAhoo op>DATAooho$DATAo@po8DATA@ppo8RDATApp@p2DATApqpHDATAq`qpxDATA`qqq DATAqq`q DATAq8rq0 DATA8rrqhDATArr8rDATArsrDATAsXsr@DATAXsss DATAssXsDATAs0tsBDATA0txts`DDATAxtt0tCDATAtuxtDATAuPut'DATAPuuuPDATAuuPuFDATAu(vuDATA(vpvu0DATApvv(v`1DATAvwpvDATAwHwvDATAHwwwXDATAwwHw"DATAw xw!DATA xhxw(2DATAhxx xDATAxxhxDATAx@yx*DATA@yyxX&FREEDATAyy@y(14.zDATAyzy-~DATAz`zyhromeDATA`zzzDATAzz`zDATAz8{zDATA8{{z`DATA{{8{DATA{|{DATA|X|{0DATAX|||xDATA||X|DATA|0}|DATA0}x}|PDATAx}}0}#DATA}~x}DATA~P~}8DATAP~~~ `-W@DATA~~P~!DATA~(~("DATA(p~x#RW@DATAp(%FileDATAp !DATAHp#DATAH"DATA؀H!DATA؀ `!DATA h؀#DATAh "DATAhPDATA@DATA@DATAЂ@ DATAЂhDATA`Ђ?DATA`ܦDATA`0DATA8x DATA8DATAȄ8DATAȄ@DATAXȄDATAXDATAX DATA0hDATA0xDATAx0DATAx@DATAPDATAPDATAPDATA(`DATA(pDATAp(DATAp@DATAHDATAHDATA؉HDATA؉ XDATA h؉DATAh DATAh8DATA@DATA@DATAЋ@ h@DATAЋ`/kDATA`ЋDATA`DATA`@DATA8DATA8 DATAȍ80 DATAȍ DATAXȍ DATAX DATAXh  DATA0 DATA0x DATAx0H DATAx DATAP 'DATAP@ DATAP DATA( DATA(p DATAp(` DATAp DATAH DATAH@DATAؒHDATAؒ DATA hؒDATAh `DATAhDATA@DATA@H DATAД@DATAДDATA`Д  DATA`hDATA`DATA8DATA88DATAȖ8DATAȖPDATAXȖDATAX&DATAX0176DATA0x*208DATA0xՀ/&DATAx0DATAxY%DATAP ADATAP"DATAP8DATA(19-SDATA(pXDATAp(DATAp 1 DATAHDATAHrwxDATA؛HHDATA؛ DATA h؛rwxDATAh (DATAhpDATA@rwxDATA@DATAН@HDATAН859 DATA`НDATA` DATA`hr--DATA8DATA8=DATAȟ8H aDATAȟ _18-MDATAXȟh!Ceb-0DATAX!ADATAXH"1rwxDATA0">@DATA0x#y]DATAx0#7DATAx($DATAPp$DATAP$077DATAP$DATA(@%DATA(p% DATAp(%DATAp&$DATAHX&"DATAH&,DATAؤH'DATAؤ H'DATA hؤx'DATAh 'DATAh' DATA@8( DATA@p(DATAЦ@(DATAЦ( DATA`Ц0)DATA``).DATA`)DATA8*DATA8P*,DATAȨ8*DATAȨ*/DATAXȨH+#pDATAX+3DATAX+/DATA0X,8DATA0x,/DATAx0 --DATAx-2DATAP- DATAP0.!DATAP.$DATA(."pp`DATA(p(/DATAp(p/DATAp/DATAH/pDATAH@0 DATAحH0DATAح 0"DATA hح(1DATAh p1%DATAh1DATA@2DATA@X2DATAЯ@2 DATAЯ2DATA`Я83DATA`3DATA`3DATA84DATA8`4DATAȱ84DATAȱ4DATAXȱ85DATAX5DATAX5 DATA05PDATA0xh6UDATAx06_DATAx7pDATAP 8aDATAP8bDATAP@9_DATA(9ZDATA(pX:gDATAp(:`DATAp;PDATAH<^DATAH<EDATAضH=^DATAض =^DATA hض(>X24 .DATAh >=@DATAh ? DATA@P?204-ODATA@? 39 .DATAи@?4 21DATAи0@RW@DATA`иx@@DATA`@81 .DATA`@4 DATA8PAr-- DATA8A(r-- DATAȺ8A24-ODATAȺ@B.23-ODATAXȺB59 .DATAXB(.docDATAX@C jerDATA0C23-ADATA0xC jerDATAx0C)@DATAxPDx23-ADATAPDssavDATAPEDATAPHFDATA(GdDATA(pGDATAp(GDATApHDATAH`HH2YDATAH(IFDATAؿHIpDATAؿ JLDATA hؿHKNDATAh K~KDATAhLWDATA@LDATA@My0DATA@8N}XDATANDATA`O8DATA`PbZDATA`QnTPDATA8QiDATA8HRaDATA8R`DATA S}TSDATAXSYDATAXTPDATAXT{DATA0UDATA0x8VDATAx0VDATAx0WDATAPWDATAP8XwDATAPXDATA(YDATA(pY}FREEDATAp(ZFREEDATApP[DATAH[}DATAHH\DATAH]tDATA ]DATA h`^jDATAh ^iDATAh_IDATA@`LDATA@`TfDATA@aTFREEDATAaDATA`aDATA` bDATA`hbDATA8bDATA8bDATA80cqDATAxcDATAXcDATAXdDATAXHdDATA0d7DATA0xdDATAx08ectsDATAxe*DATAPebDATAPhfDATAPfDATA(fDATA(p@gDATAp(gDATApg1@DATAH hFREEDATAHhh/DATAHhDATA h DATA h@iDATAh iDATAhiDATA@0jDATA@jDATA@j4zDATAjD$DATA`@k'DATA`lDATA``lYDATA8lDATA8m DATA8n[DATAnder/DATAXnuDATAXoDATAXoptDATA0pp}DATA0x qDATAx0qDATAxr333?DATAPrDATAPs DATAPtDATADATA(tB.blDATA(pusDATAp(u0DATApvy3dDATAHv>DATAHvrDATAHw{DATA HxvDATA hx333?DATAh @y DATAhyDATADATA@XzDATA@({DATA@{DATA|DATA`|DATA`}DATA`}DATA8~DATA8~DATA8DATAX0DATAXXDATAX؁"~(DATAX(cDATADATA01DATA0x~8DATAx0TDATAx``DATAP DATADATAPwFREEDATAPDATA(DATA(p0a`DATAp(DATAp]FREEDATAH@DATAHerDATAHX@DATADATA Ȉ@DATA h8KDATAh DATAhjDATA@kDATA@0jDATA@ȋlDATAhDATA`fDATA`PpDATA`sDATA8dDATA8(c۷zADATA8MDATA8jzADATAXqDATAX(bDATAX(DATA0DATA0xPDATAx0Mg.DATAxDATAP`DATAPODATAP0DATA(DATA(p`ODATAp(SDATAp`PDATAH=DATAHPgDATAH`DATA xDDATA h[DATAh xDATAhDATA@DATA@8eDATA@КDATA7DATA`p~DATA`țDATA`@DATA8`eDATA8$DATA8DATAНDATAXVDATAXODATAX DATA0h)DATA0xDATAx0!DATAx`)DATAPDATAPDATAPP"DATA( DATA(pءXDATAp(`sDATApDATAHHIDATAHuDATAHhDATA DATA hp DATAh DATAhX/DATA@|DATA@h1DATA@ȧyDATAp DATA`DATA`xaDATA`aDATA8fDATA80$DATA8DATA@DATAXDATAXЬDATAX DATA0H$DATA0x1DATAx0DATAxIDATAP0sDATAPа-DATAP02DATA(DDATA(pDATAp(PqDATApDATAH8eDATAHг$DATAH(DATA x^DATA hDATAh X[DATAh[DATA@h^DATA@^DATA@DDATAoDATA`aDATA`0dDATA`ȹDATA8DATA88DATA8DATADATAX!DATAXXDATAX.DATA0DATA0x@DATAx0!DATAxؼDATAP .DATAPDATAPȽaDATA(XDATA(p3DATAp(DATApHoDATAHDATAH08DATAHDATA WDATA hhDATAh ;DATAhDATA@ `2DATA@  DATA  @ 1DATA   hDATA `  0DATA`   DATA  ` XSDATA 8  DATA8   DATA  8 P!DATA   DATA X  )DATAX   0 DATA  X hDATA 0  DATA0 x  oDATAx  0 x&DATA x  DATAP DATAPXDATAPDATA(2DATA(p8DATAp( DATApDATAHDATAH@DATAHDATA DATA h ,DATAh  DATAh*DATA@DATA@H,DATA@DATA.DATA`XDATA`DATA`DATA8($DATA8DATA8DATADATAXP1DATAXDATAXDATA0@'DATA0x DATAx0DATAx(,DATAPDATAPDATAPDATA(PDATA(pDATAp(DATAp(,DATAHDATAHDATAHDATA PDATA hDATAh DATAh(-DATA@DATA@DATA@DATAPDATA`DATA`DATA`(-DATA8DATA8DATA8DATAPDATAXDATAXDATAX(DATA0hDATA0xDATAx0DATA x@DATA P DATAP   DATA  P DATA (! XDATA(!p! DATAp!!(!DATA!"p!0DATA"H"!xDATAH"""DATA""H"DATA" #"HDATA #h#"DATAh## #DATA##h# DATA#@$#hDATA@$$#DATA$$@$DATA$%$8DATA%`%$DATA`%%%DATA%%`%DATA%8&%XDATA8&&%DATA&&8&DATA&'&(DATA'X'&pDATAX'''DATA''X'DATA'0('HDATA0(x('DATAx((0('DATA()x(0]DATA)P)(DATAP)))p1DATA))P)DATA)(*)DATA(*p*) DATAp**(*)DATA*+p*pDATA+H+* DATAH+++DATA++H+@'DATA+ ,+DATA ,h,+DATAh,, ,(,DATA,,h,<DATA,@-,'DATA@--,P:DATA--@-DATA-.-DATA.`.-@DATA`...DATA..`.DATA.8/.DATA8//.H(DATA//8/DATA/0/DATA0X0/0DATAX000pDATA00X0DATA0010MDATA01x10"DATAx1101DATA12x1('DATA2P21(DATAP2229DATA22P2@DATA2(32&DATA(3p32DATAp33(38'DATA34p3:DATA4H43DATAH444H+DATA44H4DATA4 54DATA 5h54(&DATAh55 5$DATA55h5DATA5@65DATA@665hDATA66@6,DATA676DATA7`76X-DATA`7774DATA77`7 DATA7887hDATA8887DATA8888DATA898P3DATA9X98DATAX999p(DATA99X9:DATA90:90'DATA0:x:9DATAx::0:DATA:;x:!DATA;P;:hDATAP;;;DATA;;P;DATA;(<;@DATA(<p<;5DATAp<<(<9DATA<=p<P(DATA=H=<DATAH===DATA==H=0DATA= >=xDATA >h>=DATAh>> >DATA>>h>PDATA>@?>DATA@??>IDATA??@?PHDATA?@?&DATA@`@? (DATA`@@@x'DATA@@`@)DATA@8A@('DATA8AA@"DATAAA8A.DATAABA0EDATABXBADATAXBBBBDATABBXB`>DATAB0CB.DATA0CxCB0RDATAxCC0C0DATACDxCNDATADPDCDDATAPDDDDATADDPDP>DATAD(ED_DATA(EpEDP`DATApEE(EDATAEFpE(DATAFHFEDATAHFFFDATAFFHF DATAF GF DATA GhGF "DATAhGG G JDATAGGhGP DATAG@HG DATA@HHG (DATAHH@H8DATAHIHxDATAI`IHqDATA`IIIX+DATAII`I-DATAI8JI&DATA8JJIh(DATAJJ8J0DATAJKJ -DATAKXKJ0DATAXKKK,DATAKKXK@0DATAK0LK*DATA0LxLK9DATAxLL0L`_DATALMxL&DATAMPMLH DATAPMMMDATAMMPM%DATAM(NM8&DATA(NpNMDATApNN(NDATANOpN &DATAOHONxDATAHOOODATAOOHODATAO POHDATA PhPODATAhPP PDATAPPhP DATAP@QPhDATA@QQPDATAQQ@QDATAQRQ@DATAR`RQDATA`RRRDATARR`R DATAR8SR`DATA8SSR DATASS8SDATASTS8DATATXTSDATAXTTTDATATTXTDATAT0UTXDATA0UxUTDATAxUU0UDATAUVxU(DATAVPVUhDATAPVVVDATAVVPVDATAV(WV@DATA(WpWVDATApWW(WDATAWXpWDATAXHXW`DATAHXXXDATAXXHXDATAX YX( DATA YhYXx DATAhYY Y DATAYYhY!DATAY@ZY@!DATA@ZZY!*DATAZZ@Z!&DATAZ[Z@"DATA[`[Z"DATA`[[["+DATA[[`[(#!DATA[8\[x#&DATA8\\[#"DATA\\8\ $&DATA\]\x$'DATA]X]\$DATAX]]]%DATA]]X]`%DATA]0^]%*DATA0^x^]&1DATAx^^0^h&DATA^_x^&DATA_P_^&&DATAP___P'DATA__P_'DATA_(`_'DATA(`p`_((DATAp``(`x(*DATA`ap`(1DATAaHa`0)7DATAHaaa)DATAaaHa)DATAa ba0*DATA bhba*DATAhbb b*DATAbbhb*?DATAb@cbh+DATA@ccb+,DATAcc@c,DATAcdc8, DATAd`dcp,DATA`ddd,#DATAdd`d-DATAd8ed`-%DATA8eed-DATAee8e.DATAefe@.DATAfXfe.&DATAXfff.DATAffXf0/DATAf0gf/&DATA0gxgf/ DATAxgg0g0DATAghxg@0$DATAhPhg0DATAPhhh0~DATAhhPh1DATAh(ih@2QDATA(ipih2 DATApii(i3(DATAijpiX3,DATAjHji3DATAHjjj3DATAjjHj@4DATAj kj4 DATA khkj4"DATAhkk k5DATAkkhkP5iDATAk@lk5wDATA@llk6oDATAll@l07gDATAlml7"DATAm`ml8*DATA`mmmp8DATAmm`m8 DATAm8nm8DATA8nnm89xDATAnn8n9tDATAnon:oDATAoXon(;vDATAXooo;oDATAooXop<rDATAo0po=rDATA0pxpo=zDATAxpp0pX>2DATApqxp>DATAqPqp>DATAPqqq8?DATAqqPq?#DATAq(rq?DATA(rprq@DATAprr(rh@DATArspr@DATAsHsr@ DATAHsss(ADATAssHshADATAs tsADATA thtsADATAhtt tBDATAtthtPBDATAt@utB DATA@uutB DATAuu@uC DATAuvu@CDATAv`vuC+DATA`vvvC DATAvv`v DDATAv8wvhDDATA8wwvDDATAww8wE(DATAwxwXEDATAxXxwE*DATAXxxxFDATAxxXxPF(DATAx0yxF DATA0yxyxF DATAxyy0y GDATAyzxyhG"DATAzPzyG$DATAPzzzH$DATAzzPzhH%DATAz({zH&DATA({p{zI"DATAp{{({hI%DATA{|p{I%DATA|H|{J#DATAH|||hJ"DATA||H|JDATA| }|K#DATA }h}|XK#DATAh}} }K!DATA}}h}K$DATA}@~}PLDATA@~~}L DATA~~@~L(DATA~~HM#DATA`~MDATA`M!DATA`0N'DATA8NDATA8N"DATAȀ8(ODATAȀpO$DATAXȀO"DATAXP&DATAXpP(DATA0P-DATA0x(Q!DATAx0xQDATAxQ$DATAP R DATAPpR DATAPR!DATA(S!DATA(p`SDATAp(S!DATApTDATAHPT'DATAHT'DATA؅HUDATA؅ PU#DATA h؅U"DATAh U"DATAh@V DATA@V#DATA@VDATAЇ@(WDATAЇpWDATA`ЇW!DATA`XDATA``XDATA8XDATA8Y DATAȉ8PYDATAȉYDATAXȉYDATAX@Z DATAXZ DATA0Z DATA0x0[DATAx0[DATAx[!DATAP \$DATAPx\DATAP\#DATA(]'DATA(pp]DATAp(]DATAp^DATAH`^!DATAH^DATA؎H_!DATA؎ P_#DATA h؎_DATAh _DATAh@`"DATA@`!DATA@` DATAА@0aDATAАaDATA`АaDATA` bDATA`pb#DATA8b!DATA8c#DATAȒ8`cDATAȒcDATAXȒdDATAXPd!DATAXd$DATA0d#DATA0xHe&DATAx0e"DATAxe$DATAPHf%DATAPf$DATAPf#DATA(Hg&DATA(pg"DATAp(g$DATApHh$DATAHh"DATAHh'DATAؗHHi#DATAؗ i'DATA hؗi$DATAh Hj#DATAhj(DATA@j!DATA@@kDATAЙ@pkDATAЙkDATA`ЙkvDATA`lDATA`lDATA8 mDATA8hmDATAț8mDATAțmDATAXț nDATAXXnDATAXnDATA0nDATA0xoDATAx0HoDATAxoDATAPoDATAPoDATAP0pDATA(pDATA(ppDATAp(pDATAp0qDATAHhqDATAHqDATAؠHqDATAؠ 8rDATA hؠr DATAh rDATAhr DATA@(sDATA@XsDATAТ@sDATAТs9DATA`ТHt6DATA`tDATA`uDATA8Hu DATA8uDATAȤ8u0DATAȤvDATAXȤPvDATAXvDATAXvDATA0wDATA0xPwDATAx0wDATAxwDATAPxDATAP@xDATAPx_DATA(ydDATA(pyDATAp(yDATAp8zDATAHpz.DATAHz DATAةH {2DATAة {.DATA hة{8DATAh H|.DATAh|,DATA@}DATA@X}DATAЫ@}DATAЫ}"DATA`ЫH~ DATA`~DATA`~DATA8DATA8`DATAȭ8"DATAȭDATAXȭHDATAXDATAXDATA00DATA0xxDATAx0DATAxDATAP8DATAPh*DATAPXDATA(HDATA(p(DATAp(#DATAp@#DATAHDATAH+DATAزH8DATAز p+DATA hزȅDATAh  DATAhhDATA@oDATA@X#DATAд@"DATAд:DATA`д`nDATA`?DATA`pGDATA8ADATA8XDATAȶ89DATAȶ DATAXȶ0DATAXhDATAXDATA0PDATA0xx;DATAx00DATAx@?DATAPFDATAP(TDATAPMDATA(0KDATA(pIDATAp( DATAph DATAH-DATAHFDATAػH/DATAػ CDATA hػ`KDATAh ؒ,DATAh8*DATA@MDATA@,DATAн@pDATAнNDATA`н8DATA`?DATA`DATA8 DATA8P%DATAȿ8DATAȿDATAXȿ0DATAXxDATAX#DATA0DATA0x@DATAx0)DATAxؘDATAP(9DATAPDATAPؙDATA( DATA(phDATAp(DATApDATAH@DATAHDATAHЛDATA DATA h`DATAh DATAhDATA@8DATA@DATA@ȝDATADATA`@DATA`DATA`؞ DATA8('DATA8FDATA8DATA0DATAXDATAX(DATAXpDATA0 DATA0x%DATAx0PDATAx#DATAPDATAP(DATAPhDATA( DATA(pDATAp(H DATAp%DATAHDATAH8DATAHh$DATA #DATA h%DATAh h!DATAh%DATA@DATA@X#DATA@DATA DATA`8DATA`DATA`Ȩ DATA8DATA8hDATA8*DATA DATAX@DATAXFDATAX%DATA0X3DATA0xDATAx0 DATAx NDATAP8!%DATAP!&DATAP!3DATA(H"xDATA(p"DATAp(8#DATApx#DATAH#DATAH$DATAHX$DATA $DATA h$DATAh (%LDATAh%*DATA@&2DATA@`&BDATA@&DATA'0DATA`x' DATA`'0DATA`(5DATA8x('DATA8(9DATA88)ZDATA)DATAX*(DATAX`* DATAX*(DATA0*%DATA0xH+DATAx0+7DATAx+#DATAP@,|DATAP,!DATAP@-DATA(p-'DATA(p-DATAp(.#DATAp`.0DATAH.0DATAH /0DATAH/0DATA /3DATA h@03DATAh 03DATAh1,DATA@`1DATA@1DATA@1DATA2DATA``2DATA`2DATA`2DATA883.DATA83'DATA83%DATAH4KDATAX4+DATAX5DATAXX5DATA05DATA0x5-DATAx006DATAx6EDATAP6DATAP07;DATAP7DATA(7DATA(p(8/DATAp(8DATAp8DATAH9#DATAHP96DATAH9DATA :DATA hH:DATAh :DATAh:DATA@ ;GDATA@;DATA@;DATA<DATA`X<DATA`<3DATA`<+DATA8H=DATA8=DATA8=<DATA0>DATAXP?DATAX`@lDATAXADATA0(BDATA0x8CqDATAx0CDATAxEDATAPFDATAPHFDATAPhGDATA(xHDATA(pHDATAp(IvDATApIDATAHJDATAHJDATAH8K@DATA LDATA hLBDATAh `NDATAhN#DATA@NvDATA@ODATA@PJDATAQDATA`QDATA`0RDATA`R,DATA8SDATA80TDATA8V6DATAxVDATAXVDDATAX8WDATAXXXDATA0XDATA0xXDATAx0ZDATAxHZ#DATAPZDATAPZDATAP[DATA(`[DATA(p[)DATAp(\"DATApP\8DATAH\DATAH]DATAHX]DATA ]DATA h]DATAh H^DATAh^DATA@^DATA@8_DATA@h_DATA_DATA`_DATA`0` DATA`p`DATA8`DATA8` DATA80aDATAxaDATAXaDATAXbDATAXPb"DATA0bDATA0xbDATAx0 cDATAx`cDATAPcDATAPcDATAP dDATA(`dDATA(pdDATAp(dDATAp(eDATAHpeDATAHeDATAHeDATA @fDATA hfDATAh fDATAhfDATA@8gDATA@gDATA@gDATAhDATA`XhDATA`hDATA`hDATA80iDATA8xiDATA8iDATAjDATAXPjDATAXjDATAXjDATA0 (kDATA0 x pkDATAx  0 kDATA  x lDATA P  HlDATAP   lDATA  P lDATA (   mDATA( p  hmDATAp  ( mDATA  p mDATA H  @n&DATAH   n*DATA  H nDATA   0oDATA h  poDATAh   oDATA  h o.DATA @ HpDATA@ pDATA@pDATA(qDATA``q DATA`q(DATA`q-DATA8XrDATA8r+DATA8rDATAHsDATAXs DATAXsSDATAX`teDATA0t4DATA0x`u!DATAx0uDATAxvDATAP@vDATAPv\DATAPwTDATA(w%DATA(pwDATAp((x"DATApxx'DATAHx#DATAH y'DATAHxy DATA yDATA hz DATAh 8z`DATAhzDATA@{DATA@ | DATA@X| DATA|ODATA`}DATA`X},DATA`}+DATA8~DATA8`~DATA8~DATA~ DATAXH1DATAX-DATAXFDATA0>DATA0xDATAx08EDATAxDATAPDDATAPpDATAPGDATA(0DATA(pxBDATAp(DATAp0EDATAHDATAHEDATAHhDATA DATA h!DATAh 8-DATAhDATA@ І:DATA@  8DATA  @ xDATA ! DATA!`! ?DATA`!!!h DATA!!`! DATA!8"!؈ DATA8""!\DATA""8"eDATA"#"8DATA#X#"MDATAX###DATA##X#X'DATA#0$#7DATA0$x$#/DATAx$$0$xDATA$%x$H9DATA%P%$/DATAP%%%7DATA%%P%x8DATA%(&%<DATA(&p&%P>DATAp&&(&BDATA&'p&0<DATA'H'&DATAH'''DATA''H'DATA' ('8DATA (h('DATAh(( (P DATA((h(DATA(@)(x9DATA@))(/DATA))@)@8DATA)*)>DATA*`*)DATA`***`]DATA**`*DATA*8+*8NDATA8++*DATA++8+ DATA+,+0DATA,X,+9DATAX,,,p/DATA,,X,ЙpDATA,0-,p+DATA0-x-,Ț,DATAx--0-(9DATA-.x-/DATA.P.-pDATAP...DATA..P.DATA.(/.(DATA(/p/.h DATAp//(/DATA/0p/"DATA0H0/HDATAH000DATA00H0DATA0 10( DATA 1h10`DATAh11 1DATA11h1SDATA1@21pDATA@221RDATA22@2@DATA232UDATA3`32DATA`333hPDATA33`3DATA38438SDATA8443DATA4484SDATA454DATA5X54ؤDATAX555DATA55X5`DATA5065 DATA06x658-DATAx6606-DATA67x6DATA7P768 DATAP777pDATA77P7:DATA7(87#DATA(8p87`DATAp88(8 DATA89p8P,DATA9H98DATAH999-DATA99H9XDATA9 :9DATA :h:9ث;DATAh:: :@QDATA::h:DATA:@;:DATA@;;:P+DATA;;@;JDATA;<; DATA<`<;h<DATA`<<<خ-DATA<<`<8DATA<8=<p:DATA8==<دDATA==8= DATA=>=(DATA>X>=pDATAX>>>@ DATA>>X>xwDATA>0?> DATA0?x?>P5DATAx??0?QDATA?@x?8DATA@P@?x DATAP@@@ DATA@@P@DATA@(A@8%DATA(ApA@DATApAA(AصDATAABpABDATABHBA DATAHBBBDATABBHB%DATAB CBHDATA ChCBDATAhCC Cз DATACChC DATAC@DCXDATA@DDC.DATADD@D DATADED0DATAE`ED DATA`EEEDATAEE`E DATAE8FE84DATA8FFEDATAFF8F%DATAFGF@!DATAGXGFDATAXGGGػ DATAGGXG(DATAG0HGpDATA0HxHG'DATAxHH0H/DATAHIxHp?DATAIPIHDATAPIII(/DATAIIPIDATAI(JIؾ&DATA(JpJI0DATApJJ(Jp DATAJKpJDATAKHKJ DATAHKKK(=DATAKKHKSDATAK LKaDATA LhLK DATAhLL L DATALLhL  DATAL@ML`DATA@MMLDATAMM@M*DATAMNM8$DATAN`NMDATA`NNN9DATANN`NHDATAN8ON"DATA8OON$DATAOO8O@DATAOPOxDATAPXPO(DATAXPPP DATAPPXPh?DATAP0QP DATA0QxQP(DATAxQQ0QpDATAQRxQ!DATARPRQDATAPRRRX DATARRPRDATAR(SRDATA(SpSR(DATApSS(Sx0DATASTpSDATATHTS DATAHTTTPDATATTHTDATAT UT0DATA UhUT@DATAhUU U DATAUUhUDATAU@VU/DATA@VVU`QDATAVV@V1DATAVWV@NDATAW`WVDATA`WWWDATAWW`WXGDATAW8XWDATA8XXW GDATAXX8XDATAXYX0DATAYXYX@DATAXYYYDATAYYXYDATAY0ZYDATA0ZxZYHDATAxZZ0Z*DATAZ[xZDATA[P[Z8FDATAP[[[6DATA[[P[DATA[(\[ XDATA(\p\[DATAp\\(\DATA\]p\0+DATA]H]\DATAH]]]GDATA]]H]H7DATA] ^]DATA ^h^]YDATAh^^ ^8 DATA^^h^pDATA^@_^DATA@__^DATA__@_HHDATA_`_8DATA```_(DATA````(ZDATA```` DATA`8a`&DATA8aa`@ DATAaa8aDATAabaGDATAbXbaP7DATAXbbb,DATAbbXbDATAb0cb ZDATA0cxcb;DATAxcc0c DATAcdxc`0DATAdPdcDATAPdddLDATAddPd7DATAd(edDATA(eped_DATApee(e$DATAefpe&DATAfHfe8 DATAHfffDATAffHfDATAf gf%DATA ghgfpDATAhgg g)DATAgghgDATAg@hgH%DATA@hhgDATAhh@h#DATAhih8 DATAi`ihpDATA`iiiDATAii`iDATAi8ji0.DATA8jji$DATAjj8jDATAjkj5DATAkXkjDATAXkkkDATAkkXk-DATAk0lkpDATA0lxlk DATAxll0l DATAlmxl8DATAmPml DATAPmmmDATAmmPm ,DATAm(nmDATA(npnmDATApnn(n DATAnopnpDATAoHonDATAHoooDATAooHoPDATAo poDATA phpo DATAhpp p DATApphp`DATAp@qpDATA@qqpDATAqq@q #DATAqrqp DATAr`rq DATA`rrr DATArr`r( DATAr8srh DATA8ssr DATAss8sDATAsts(DATAtXtspDATAXttt6DATAttXt  DATAt0utpDATA0uxut+DATAxuu0uDATAuvxuXDATAvPvu"DATAPvvvDATAvvPv .DATAv(wvDATA(wpwvDATApww(w'DATAwxpw`(DATAxHxw"DATAHxxxDATAxxHxHDATAx yxDATA yhyxDATAhyy yDATAyyhyX$DATAy@zyDATA@zzy(DATAzz@zPDATAz{zDATA{`{z#DATA`{{{ DATA{{`{`DATA{8|{DATA8||{@DATA||8|`DATA|}|DATA}X}|DATAX}}}0DATA}}X}xADATA}0~}DATA0~x~}(!DATAx~~0~x$DATA~x~DATAP~DATAP`DATAPDATA(!DATA(p@/DATAp(DATApADATAHXDATAHDATA؁HDATA؁ (DATA h؁pDATAh DATAhDATA@P"DATA@CDATAЃ@DATAЃPDATA`Ѓ)DATA`DATA`( DATA8h$DATA8DATAȅ8DATAȅHDATAXȅDATAXDATAX(DATA0xDATA0xDATAx0DATAx@DATAPDATAPDATAP.DATA(PDATA(pDATAp( DATAp  DATAHH  DATAH  DATA؊H DATA؊  DATA h؊X DATAh  !DATAh DATA@( ,DATA@ :DATAЌ@ 3DATAЌP SDATA`Ќ  DATA` DATA`@ DATA8  DATA8 DATAȎ8 DATAȎHDATAXȎ DATAXDATAX DATA0@4DATA0x DATAx0'DATAx8DATAPDATAP$DATAP(DATA(p#DATA(pDATAp(;DATApXDATAHDATAHDATAؓHDATAؓ HDATA hؓDATAh DATAh&DATA@p.DATA@DATAЕ@ DATAЕ` DATA`ЕDATA`&DATA`8.DATA8DATA8DATAȗ87DATAȗx!DATAXȗDATAXDATAXXDATA02DATA0xDATAx00 DATAxh DATAP DATAPDATAP DATA(`DATA(pDATAp(DATAp82DATAHDATAH DATA؜H0DATA؜ xDATA h؜"DATAh DATAhPDATA@2DATA@DATAО@@DATAОDATA`ОDATA`DATA`X3DATA8DATA8  DATAȠ8@ 1DATAȠ DATAXȠ DATAX ! DATAXX!*DATA0!DATA0x!DATAx0@"DATAx"DATAP" DATAP#DATAPH#DATA(#DATA(p#DATAp( $ DATApX$DATAH$DATAH$%DATAإH8%DATAإ x%DATA hإ% DATAh %!DATAhH&DATA@&0DATA@&DATAЧ@0'DATAЧx'DATA`Ч'DATA`'DATA`0(DATA8x(+DATA8(DATAȩ8)DATAȩ`)2DATAXȩ)DATAX*DATAXH*DATA0*DATA0x*DATAx0 +3DATAx+DATAP+ DATAP,DATAP0,DATA(,DATA(p,DATAp(-:DATApx-4DATAH-DATAH(.DATAخHh.DATAخ .DATA hخ/DATAh H/DATAh/%DATA@/ADATA@X0DATAа@0DDATAа1DATA`а`1DATA`1DATA`1DATA8@2DATA82DATAȲ82DATAȲ 3"DATAXȲp3GDATAX3DATAX04!DATA04$DATA0x4DATAx0(5DATAxp5DATAP5DATAP6!DATAPP6/DATA(6DATA(p6EDATAp(p7DATAp7DATAH8DATAH08DATAطHx8DATAط 8DATA hط9DDATAh 9>DATAh9DATA@(:DATA@x:,DATAй@:7DATAй@;DDATA`й;SDATA`8<%DATA`<>DATA8=^DATA8=VDATAȻ8>'DATAȻp>(DATAXȻ>+DATAX ?-DATAX?-DATA0?HDATA0xX@=DATAx0@gDATAx`A3DATAPA%DATAPB#DATAPhB%DATA(B0DATA(p CDATAp(pCODATApCWDATAHxDDATAHDEDATAH(EODATA E2DATA hFDATAh PF&DATAhFWDATA@0G'DATA@G,DATA@G4DATAPH$DATA`HDATA`HDATA` IDATA8hIDATA8I2DATA8JDATAXJ1DATAXJDATAXK4DATAXhKDATA0K/DATA0xLDATAx0XL2DATAxLDATAPM2DATAP`MDATAPMDATA(M4DATA(pXNDATAp(N3DATApODATAHHO6DATAHODATAHO1DATA XPDATA hP4DATAh QDATAhPQ4DATA@QDATA@QDATA@0RDATApRDATA`RDATA`RDATA`0SDATA8S(DATA8S DATA8T%DATApTDATAXT4DATAX UDATAXXU DATA0UDATA0xUDATAx00VDATAxhV"DATAPVDATAPW!DATAPXW5DATA(W!DATA(pX+DATAp(hX'DATApX DATAHYDATAHHY'DATAHY"DATA Y#DATA h@Z8DATAh Z#DATAhZ"DATA@H[DATA@[DATA@[#DATA \DATA`h\DATA`\DATA`\DATA88]DATA8]DATA8]DATA^DATAXP^DATAX^iDATAX0_DATA0x_bDATA0x`DATAx0P`;DATAx` DATAPaDATAPXa>DATAPa.DATA((bBDATA(pbDATAp(b?DATApPc;DATAHcDATAHcDATAH8dhDATA dDATA hegDATAh e DATAheDATA@8fDATA@fDATA@fDATAgDATA`XgDATA`g'DATA`gBDATA8hhcDATA8h3DATA8Xi%DATAiLDATAX0jDATAXjDATAXjDATA0kDATA0x`kDATAx0k0DATAxkTDATAPxl4DATAPl"DATAP0m7DATA(mDATA(pm0DATAp(8nCDATApn0DATAHoDATAHoDATAHpBDATA pp`DATA hqDATAh HqDATAhq+DATA@q,DATA@HrDATA@r7DATArDATA`8s'DATA`sFDATA`t3DATAht3DATA8#!BPY DATApo SDATA""" x4DATA Name: 'RenderMan (.rib)...' DATA(Blender: 233DATAhGroup: 'Export'DATA8Tooltip: 'Save/Render a Scene to RenderMan Renderers' DATA"""DATA@DATA@p# RenderMan export script by Christoffer Green and Goran KocovDATA(# Pixie Extension by Joseph MontanezDATA8# version 0.1 Beta9.0bDATA<# the script needs Blender 2.33 and Python 2.3 installedDATA4# to run the script press alt+p in the text windowDATAHDATAximport BlenderDATAimport stringDATA import osDATA 0import sysDATAhfrom os import P_NOWAITDATAfrom Blender.Draw import *DATAfrom Blender.BGL import *DATA@from Blender import SceneDATA$from Blender.Scene import RenderDATAfrom math import piDATAfrom math import atanDATA`from math import powDATA֑DATAtry:DATA import totiffDATAPexcept:DATAH print "Did not find the totiff module, will use ImageMagic instead\n"DATADATA0DATA4`# MAKE SURE YOU CHANGE THIS TO YOUR PYTHON FOLDERDATAif (os.name != "posix"):DATA  sys.path = ['c:\\python23']DATAXDATA$scene = Blender.Scene.GetCurrent()?DATA$camobj = scene.getCurrentCamera()ODATA4(camera = Blender.Camera.Get(camobj.getData().name)DATADATA# The bevent constantsDATA,exportevent = 1 # export button pressedDATA(Xexitevent = 2 # exit button pressedDATA,updateguievent = 3 # update the pressedjerDATA0filetoggleevent = 999 # file button pressedDATAhDATA# GUI variablesDATAfs = Create('')DATAmenuval = Create(4)DATA`dof = Create(0)DATAsamples = Create(2)DATAstop = Create(2.0)DATA0lenght = Create(1.0)DATAxdistance = Create(5.0)DDATAsrate = Create(3)DATAfile = Create(0)DATAPbuffer = Create(1)DATA$filename = Create("default.rib")DATA image = Create("default")@2DDATA 8dirw = Create("default")DATA$pixierenderer = Create("rndr")JDATA$prmanrenderer = Create("prman")DATA$(dlrenderer = Create("renderdl")1DATA$xbmrtrenderer = Create("rendrib")DATA(entropyrenderer = Create("entropy")DATA$ aqsisrenderer = Create("aqsis")DATA$ppixietexmaker = Create("texmake")DATA$prmantexmaker = Create("txmake")DATA$dltexmaker = Create("tdlmake")DATA$`bmrttexmaker = Create("mkmip")DATA$entropytexmaker = Create("mkmip")DATA$aqsistexmaker = Create("teqser")DATAPradiosity = Create(0)DATAradnum = Create(50)DATAgi = Create(0)DATA gisteps = Create(100)DATAh#PixieDATAindirect = Create(0)DATAocclusion = Create(0)DATA0ambiSamples = Create(6)DATA x#End PixieDATAgeom = Create(1)DATAmeshexport = Create(1)YDATA@pointwidth = Create(1.0)DATAanim = Create(0)DATA maxpixeldist = Create(20)DATA maxerror = Create(0.25)DATAhrshadow = Create(1)DATAsmooth = Create(0.00)DATAareasamples = Create(20)DATA@buff256 = Create(0)@DATAbuff512 = Create(1)DATAbuff1024 = Create(0)DATAbuff2048 = Create(0)DATA`motionblur = Create(0)DATA motionblurframe = Create(1)DATArendert = Create(1)m?DATA@caustics = Create(0)DATAphoton = Create(4000)DATAuv = Create(0)DATArecurs = Create(4)DATAXdebug = Create(0)DATAhiddenlayer = Create(0)DATA globalsettings = Create(1)DATA8scenesettings = Create(0)DATAshadereditor = Create(0)DATAsurfaceshader = Create(3)DATA$surfaceshadername = Create("")DATA`about = Create(0)DATAshadermenu = Create(1)DATA ambientshader = Create(1.00)DATA @diffuseshader = Create(0.50)DATA specularshader = Create(0.50)DATA$roughnessshader = Create(0.10)DATA 0 coefshader = Create(1.50)DATA reflblurshader = Create(0.00)DATA refrblurshader = Create(0.00)DATA objecteditor = Create(0)DATAh convertbm = Create(1)DiADATA objectshadermenu = Create(0)DATA arealightMESH = Create(0)DATA H recievecaustics = Create(0)DATA transmittcaustics = Create(0)DATA( transmittcausticsslider = Create(1.40)DATA@ reflsamples = Create(0)DATA refrsamples = Create(0)DATA kr = Create(1.0)DATA rendershadow = Create(0)DATA` autogs = Create(0)DATA reflectcaustics = Create(0)DATA progress = Create(1)DATA@gain = Create(1.0)DATAgamma = Create(1.0)DATAlightx = Create(1.0)DATAbias = Create(0.25)DATA `raytraceshadow = Create(1)DATAprojection = Create(0)DATA textureblurm = Create(0.0)DATAHnorm = Create(0.01)DATAconverttex = Create(1)DATAgisphere = Create(1)DATA rvisibility = Create(0)uADATAhfinalgather = Create(0)CDATArgba = Create(1)DATAcastshadow = Create(1)DATA8reconvert = Create(0)DATAtexturem = Create(' ')DATAPtexturem.val = '' DATAtextshader = Create('Surface "plastic" ')DATA(textshader.val = 'Surface "plastic"'DATA0textshaderd = Create('Displacement "bumpy" ')DATA,xtextshaderd.val = 'Displacement "bumpy"'DATAhdritex = Create(' ')DATAhdritex.val = ''DATAhdri = Create(0)DATA preworldrafile = Create(' ')DATApreworldrafile.val = ''DATA8preworldra = Create(0)DATApostworldrafile = Create(' ')DATAXpostworldrafile.val = '' DATApostworldra = Create(0)DATAobjectrafile = Create(' ')DATAobjectrafile.val = ''DATAobjectra = Create(0)DATAHtextnor = Create(0)DATA illuminationmenu = Create(0)DATAareagi = Create(0)DATA(indirectgi = Create(1)-DATApeblur = Create(0.00)DATAesamples = Create(1)DATAgianim = Create(1)-DATAHamesh = Create(0)DATApatchsize = Create(4.0)DATAelemsize = Create(2.0)-DATA minsize = Create(1.0)DATAhDATA# Other variables DATA@renderer = "PRMan |BMRT |Entropy |3Delight |AQSIS |Pixie "@DATAdH shader = "Plastic (All)|Glass (BMRT, Entropy)|Shiny (BMRT, Entropy) |Custom (All) |BMS (All) "DATA` pixelsamples = "1 Preview|2 Good|3 Recomended|4|5 To High|6|7 For DoF|8|9|10 Best and Crazy"DATADh!ambiSamplesindex = "7 Preview|8|9|10|11 Good|12|13|14 Perfection"DATAD!shadingrate = "0.25 Best|0.5|1 Good|2|4 Preview|6|8|12|16 Bad"DATA4H"sratelist = [0.25, 0.5, 1, 2, 4, 6, 8, 12, 16]DATA@"meshex = "PointsPolygons |Polygons |SubdivSurface |Points "DATA|#illumination = "Plastic |Matte |RoughMetal |ThinPlastic |ShinyPlastic |ShinyMetal |Clay |BrushedMetal |Ceramic |Glass "DATA8#projectionm = "Plane |Cylinder |Sphere |UV-Map |Auto"DATA($sshader = "ADD NEW"DATAp$sshader2 = ""DATA$shadernametemp = ""DATA$selectedname = ""DATA@%selectedtype = "Type: "DATA %tmp = ""DATA%imagelist = ""DATA(&imagelistmenu = "No images loaded"DATA$X&rgbatext = "rgb |rgba |rgbz |z "DATA0&castshadowtext = "Os |opaque |shader |none"DATA'txdone = []DATAH'DATAx'# Global variablesDATA'increment = 0DATA'xbar = 11DATA 8(i = 0DATAp(meshobjects = 0DATA(maxblur = 10.0DATA(meshnum = 0DATA0)DATA0`)# Create the BlenderMan directories on startupDATA)if (os.name != "posix"):DATA* rootdir = '/BlenderMan/'DATA0P* partitionname = Blender.sys.progname[0:2]DATA*else:DATA0* rootdir = os.getenv("HOME") + '/BlenderMan/'DATA$H+pdir = rootdir + dirw.val + '/'DATA4+globalpropertiesdir = pdir + '/GlobalProperties/'DATA0+surfaceshadersdir = pdir + '/SurfaceShaders/'DATA<X,displacementshadersdir = pdir + '/DisplacementShaders/'DATA0,objectsettingsdir = pdir + '/ObjectSettings/'DATA0 -lightsettingsdir = pdir + '/LightSettings/'DATA4-meshesdir = os.path.normpath(pdir + '/Meshes/')DATA$-imagesdir = pdir + '/images/'DATA$0.shadowdir = pdir + '/shadows/'DATA(.texturesdir = pdir + '/textures/'DATA$.shadersdir = pdir + '/shaders/'DATA(/try: os.mkdir(rootdir)DATAp/except OSError: passDATA/try: os.mkdir(pdir)DATA/except OSError: passDATA$@0try: os.mkdir(surfaceshadersdir)DATA0except OSError: passDATA$0try: os.mkdir(globalpropertiesdir)DATA(1except OSError: passDATA(p1try: os.mkdir(displacementshadersdir)DATA1except OSError: passDATA2try: os.mkdir(meshesdir)DATAX2except OSError: passDATA$2try: os.mkdir(objectsettingsdir)DATA2except OSError: passp`DATA 83try: os.mkdir(lightsettingsdir)DATA3except OSError: passDATA3try: os.mkdir(shadowdir)DATA4except OSError: passpDATA`4try: os.mkdir(texturesdir)DATA4except OSError: passDATA4try: os.mkdir(imagesdir)DATA85except OSError: passDATA5DATA 5def gui():DATAT5 global menuval, dof, samples, stop, lenght, distance, srate, file, buffer, dirwDATAXh6 global filename, image, radiosity, radnum, gi, gisteps, geom, meshexport, pointwidthDATA`6 global anim, maxpixeldist, maxerror, smooth, areasamples, buff256, buff512, buff1024, buff2048DATAt7 global motionblur, motionblurframe, rendert, caustics, photon, uv, recurs, debug, globalsettings, scenesettingsDATAd 8 global shadereditor, sshader, surfaceshader, surfaceshadername, about, shadermenu, ambientshaderDATAd8 global diffuseshader, specularshader, roughnessshader, coefshader, reflblurshader, refrblurshaderDATA`@9 global objecteditor, selectedname, convertbm, objectshadermenu, arealightMESH, recievecausticsDATA\9 global transmittcaustics, transmittcausticsslider, reflsamples, refrsamples, rendershadowDATAhX: global xbar, autogs, kr, progress, indirectgi, areagi, eblur, esamples, gianim, amesh, reflectcausticsDATAd: global patchsize, elemsize, minsize, textshader, raytraceshadow, bias, textshaderd, gain, gammaDATAT; global lightx, textureblurm, texturem, norm, planarm, converttex, imagelistmenuDATA`< global textnor, illuminationmenu, projection, hiddenlayer, gisphere, rvisibility, finalgatherDATAH< global hdritex, hdri, rgba, castshadow, reconvert, maxblur, sshader2DATA`= global prmanrenderer, dlrenderer, bmrtrenderer, entropyrenderer, aqsisrenderer, pixierendererDATA`= global prmantexmaker, dltexmaker, bmrttexmaker, entropytexmaker, aqsistexmaker, pixietexmakeraDATA\(> global preworldra, preworldrafile, postworldra, postworldrafile, objectra, objectrafileDATA@> global ambiSamples, occlusion, indirect #Pixie Ambient stuff DATA ?3-JDATA4P? if (autogs.val == 1): #automaticly select objectshDATA ? Redraw(1)DATA? getSelectedObject()-0DATA0@ saveload(0,0,'object')DATAx@8 .DATA@ # GUI settingsDATA8@ glClearColor(0.4,0.48,0.57, 0.0) # blue background-x DATA PA glClear(GL_COLOR_BUFFER_BIT)- DATA,A glColor3f(0, 0, 0) # main black back 18DATAA glRectf(2, 2, 630, 340)1-JDATA0@B glColor3f(0.4, 0.48, 0.57) # main blue backgDATAB glRectf(4, 4, 628, 300)~@DATA,B glColor3f(0.27, 0.3, 0.35) # blue topjerDATA@C glRectf(4, 302, 628, 338)ADATAC glColor3f(1,1,1)erDATACDATA,C # Buttons for the main BlenderMan panels-JDATA|PD globalsettings = Toggle("Global Settings", 12, 75, 310, 100, 20, globalsettings.val, "Global project settings")DATAtD scenesettings = Toggle("Scene Settings", 557, 175, 310, 100, 20, scenesettings.val, "Global scene settings")DATAE shadereditor = Toggle("Shader Editor", 13, 275, 310, 100, 20, shadereditor.val, "Surface and diplacement shader settings")DATAHF objecteditor = Toggle("Object Editor", 33, 375, 310, 100, 20, objecteditor.val, "Edit object settings that Blender doesn't support")DATAhG about = Toggle("About", 16, 475, 310, 100, 20, about.val, "Information about this script")DATAGDATAG # Global SettingsDATA H if (globalsettings.val == 1):DATA`H debug = Slider("Debug Level ", updateguievent, 440, 270, 180, 20, debug.val, 0, 3, 0, "How much debug information the renderer should output")DATA(I hiddenlayer = Number("Hidden Layer:", 0, 10, 270, 120, 20, hiddenlayer.val, 0, 20, "Objects that are present on this layer won't be exported")DATAI progress = Toggle("Progressbar", updateguievent, 520, 30, 100, 20, progress.val, "Hint: It takes slightly less time to export a scene with the progressbar off")DATAPJ gain = Slider("Gain ", 0, 225, 270, 180, 20, gain.val, 0.0, 5.0, 0)REEDATAPHK gamma = Slider("Gamma ", 0, 225, 248, 180, 20, gamma.val, 0.0, 5.0, 0)DATAK lightx = Slider("Light* ", 0, 225, 226, 180, 20, lightx.val, 0.0, 15.0, 0, "Light intensity multiplier for lamps (pointlights) and spotlights")DATAL if (menuval.val != 5):WDATAL recurs = Slider("RaySteps ", 0, 440, 248, 180, 20, recurs.val, 0, 15, 0, "Maximum number of steps for the raytracing recursion")KDATA|M reconvert = Toggle("Reconvert Textures", updateguievent, 440, 226, 180, 20, reconvert.val, "Reconvert UV textures")DATA8N rgba = Menu(rgbatext, updateguievent, 370, 150, 90, 20, rgba.val, "What channels to export (A = Alpha. Z = Depth)")DATAN menuval = Menu(renderer, updateguievent, 370, 125, 90, 20, menuval.val, "Which renderer should be taken into account when exporting the scene and displaying the GUI")DATAO samples = Menu(pixelsamples, updateguievent, 370, 75, 90, 20, samples.val, "Silhouette, motion blur and depth of field quality")DATAdP srate = Menu(shadingrate, updateguievent, 370, 100, 90, 20, srate.val, "Shading quality")@DATApQ filename = String("Filename: ", 0, 150, 75, 140, 19, filename.val, 200, "Name of the master RIB file")DATAlQ image = String("Image: ", 0, 150, 100, 140, 19, image.val, 200, "Name of the rendered image(s)")DATAdHR dirw = String("Project: ", 500, 150, 125, 140, 19, dirw.val, 200, "Name of the project")DATAR if menuval.val == 1:DATA S prmanrenderer = String("Renderer: ", 0, 480, 125, 140, 19, prmanrenderer.val, 200, "Name of the renderer executable")DATAS prmantexmaker = String("Tex. Maker: ", 0, 480, 100, 140, 19, prmantexmaker.val, 200, "Name of the mipmap texture making executable")VDATAT elif menuval.val == 2:DATA|T bmrtrenderer = String("Renderer: ", 0, 480, 125, 140, 19, bmrtrenderer.val, 200, "Name of the renderer executable")DATAU bmrttexmaker = String("Tex. Maker: ", 0, 480, 100, 140, 19, bmrttexmaker.val, 200, "Name of the mipmap texture making executable")DATA8V elif menuval.val == 3:DATAV entropyrenderer = String("Renderer: ", 0, 480, 125, 140, 19, entropyrenderer.val, 200, "Name of the renderer executable")DATA0W entropytexmaker = String("Tex. Maker: ", 0, 480, 100, 140, 19, entropytexmaker.val, 200, "Name of the mipmap texture making executable")DATAW elif menuval.val == 4:DATAx8X dlrenderer = String("Renderer: ", 0, 480, 125, 140, 19, dlrenderer.val, 200, "Name of the renderer executable")DATAX dltexmaker = String("Tex. Maker: ", 0, 480, 100, 140, 19, dltexmaker.val, 200, "Name of the mipmap texture making executable")EDATAY elif menuval.val == 5:DATAY aqsisrenderer = String("Renderer: ", 0, 480, 125, 140, 19, aqsisrenderer.val, 200, "Name of the renderer executable")DATAZ aqsistexmaker = String("Tex. Maker: ", 0, 480, 100, 140, 19, aqsistexmaker.val, 200, "Name of the mipmap texture making executable")DATAP[ elif menuval.val == 6:npuDATA[ pixierenderer = String("Renderer: ", 0, 480, 125, 140, 19, pixierenderer.val, 200, "Name of the renderer executable")DATAH\ pixietexmaker = String("Tex. Maker: ", 0, 480, 100, 140, 19, pixietexmaker.val, 200, "Name of the mipmap texture making executable")DATAx] anim = Toggle("Animation", updateguievent, 150, 30, 69, 19, anim.val, "Render single or multiple frames")DATA] rendert = Toggle("Render", updateguievent, 220, 30, 69, 19, rendert.val, "Start the renderer after the export is done")DATAl`^ file = Toggle("File", filetoggleevent, 150, 50, 70, 20, file.val, "Render the image to a file")DATAl^ buffer = Toggle("Buffer", 5, 220, 50, 70, 20, buffer.val, "Render the image to the framebuffer")DATAL_ Button("Exit", exitevent, 385, 30, 75, 20, "Exit the script")DATAP` Button("Export", exportevent, 310, 30, 74, 20, "Start the export")DATAX` Button("Load Sett", 30, 310, 51, 74, 20, "Load global and scene settings")DATAXa Button("Save Sett", 31, 385, 51, 75, 20, "Save global and scene settings")DATAa glRasterPos2i(310, 80)DATAa Text("Samples")DATA b glRasterPos2i(310, 105)DATAhb Text("ShRate")DATAb glRasterPos2i(310, 130)DATAb Text("Renderer")DATA0c glRasterPos2i(310, 155)DATAxc Text("Channels")DATAc if (progress.val == 1):DATAd # Progressbar textDATAHd glRasterPos2i(10, 25)DATA8d Text("Mesh: %s/%s"%(int(meshnum), int(meshobjects)))DATAd## if anim.val:DATA8e## glRasterPos2i(10, 40)DATA,e## display = Blender.Scene.GetCurrent()DATAde## Text("Frame: %s/%s"%(display.currentFrame(), display.endFrame() - display.startFrame() + 1))EDATAhf # Progressbar backplateDATAf glColor3f(0, 0, 0)DATAf glRectf(9, 10, 620, 21)DATA @g glColor3f(0.78, 0.7, 0.8)DATAg glRectf(10, 9, 621, 20)DATAg glColor3f(0.4, 0.4, 0.4)DATA h glRectf(10, 10, 620, 20)DATAhh # ProgressbarDATAh glColor3f(0, 0, 0)DATA$h glRectf(10, 10, xbar + 1, 20)DATA @i glColor3f(0.78, 0.7, 0.8)DATA i glRectf(10, 11, xbar, 20)XDATA i glColor3f(0.52, 0.25, 0.45)DATA 0j glRectf(11, 11, xbar, 19)DATAj DATAj # Scene settingsDATA j if (scenesettings.val == 1):DATA@k preworldra = Toggle("PreWorld ReadArchive", updateguievent, 10, 60, 180, 20, preworldra.val, "Add a ReadArchive to a user-defined file just before WorldBegin")DATAl if (preworldra.val == 1):DATA\`l preworldrafile = String("File: ", 0, 190, 60, 430, 20, preworldrafile.val, 100)DATAl postworldra = Toggle("PostWorld ReadArchive", updateguievent, 10, 40, 180, 20, postworldra.val, "Add a ReadArchive to a user-defined file just after WorldBegin")DATA m if (postworldra.val == 1):# 0.2):DATA eblur.val = 0.2DATA( maxblur = 0.2DATA h Register (gui, event, bevent)DATA if (evt == 245):DATA rendershadow.val = 0DATA@ raytraceshadow.val = 1DATA saveload(1,0,'object')DATA maxblur = 10.0DATA  Register (gui, event, bevent)DATA` if (evt == 475):DATA indirectgi.val = 1DATA areagi.val = 0DATA (  Register (gui, event, bevent)DATAx  if (evt == 476):DATA  indirectgi.val = 0DATA! areagi.val = 1DATA @! Register (gui, event, bevent)DATA,! if (evt == 367): # Convert texturesDATA(! imagelist = os.listdir(texturesdir) DATA@" if (imagelist != []):DATA" for image in imagelist:DATA," rawimage = '%s/%s'%(texturesdir, image)DATA$(# totiff.SetOutDir(texturesdir)DATA(x# ok = totiff.ConvertShort(rawimage)DATA$# if not ok[0]: # error occurredDATA( $ print ok[1] # print error messageDATA(x$ imagelist = os.listdir(texturesdir) DATA$ imagelisttif = []DATA% for image in imagelist:DATA `% if (image[-3:] == 'tif'):DATA,% imagelisttif = imagelisttif + [image]DATA4& imagelistmenu = string.join(imagelisttif, "|")DATA h& Register (gui, event, bevent)DATA& if (evt == 368):DATA(& imagelist = os.listdir(texturesdir) DATAP' if (imagelist != []):DATA' imagelisttif = []DATA' for image in imagelist:DATA (( if (image[-3:] == 'tif'):DATA,x( imagelisttif = imagelisttif + [image]DATA4( imagelistmenu = string.join(imagelisttif, "|")DATA80) texturem.val = str(imagelisttif[converttex.val - 1])DATA) saveload(1,0,'shader')DATA ) Register (gui, event, bevent)DATA 0*Register (gui, event, bevent)DATA*DATA*def getSelectedObject():DATA@* global selectedname, selectedtype, namelist, sshader2, sshaderDATAh+ try:DATA0+ selected = Blender.Object.GetSelected()[0]DATA , except:DATA 8, return 0DATA p, selectedname = selected.nameDATA$, if (selected.getType() == "Mesh"):DATA - selectedtype = 'Type: Mesh'DATA(`- elif (selected.getType() == "Lamp"):DATA - selectedtype = 'Type: Lamp'DATA. else:DATA @. selectedtype = 'Type: Other'DATA(. namelist = string.split(sshader, "|")DATA. namelist.remove('ADD NEW')DATA 0/ namelist = map(str, namelist)DATA(/ sshader2 = string.join(namelist, "|")DATA / return 1DATA0 DATA(@0def saveload(save, exportS, module):DATA0 if (module == 'shader'):DATA0 Variables = [shadermenu.val, ambientshader.val, diffuseshader.val, specularshader.val, roughnessshader.val, coefshader.val, DATA1 reflblurshader.val, refrblurshader.val, reflsamples.val, refrsamples.val, kr.val, textshader.val, textshaderd.val, texturem.val,DATAT@2 textureblurm.val, norm.val, textnor.val, illuminationmenu.val, projection.val]DATA2 if exportS:DATA,3 namelist = string.split(sshader, "|")DATA0X3 name = namelist[objectshadermenu.val - 1]DATA 3 else: DATA 3 name = surfaceshadername.valDATA@4 if (name == ''):DATA 4 returnDATA$4 fname = surfaceshadersdir + nameDATA5 if (module == 'object'):DATAlP5 Variables = [convertbm.val, objectshadermenu.val, geom.val, meshexport.val, uv.val, arealightMESH.val, DATAx5 areasamples.val, recievecaustics.val, transmittcaustics.val, transmittcausticsslider.val, caustics.val, photon.val, DATAp6 rendershadow.val, buff256.val, buff512.val, buff1024.val, buff2048.val, eblur.val, esamples.val, amesh.val, DATAh07 reflectcaustics.val, raytraceshadow.val, bias.val, rvisibility.val, castshadow.val, pointwidth.val, DATA$7 objectra.val, objectrafile.val]DATA,8 fname = objectsettingsdir + selectednameDATAp8 if (selectedname == ''): DATA 8 returnDATA8 if (module == 'global'):DATA|89 Variables = [gi.val, gisteps.val, radiosity.val, radnum.val, dirw.val, image.val, filename.val, file.val, buffer.val, DATAx9 anim.val, rendert.val, menuval.val, samples.val, srate.val, debug.val, maxerror.val, maxpixeldist.val, geom.val, DATAp: motionblur.val, motionblurframe.val, dof.val, stop.val, lenght.val, distance.val, autogs.val, progress.val, DATAx(; indirectgi.val, areagi.val, gianim.val, patchsize.val, elemsize.val, minsize.val, recurs.val, gain.val, gamma.val, DATAp; lightx.val, hiddenlayer.val, gisphere.val, finalgather.val, hdri.val, hdritex.val, rgba.val, reconvert.val, DATAtp< prmanrenderer.val, bmrtrenderer.val, entropyrenderer.val, dlrenderer.val, aqsisrenderer.val, pixierenderer.val,DATAt= prmantexmaker.val, bmrttexmaker.val, entropytexmaker.val, dltexmaker.val, aqsistexmaker.val, pixietexmaker.val,DATA|= preworldra.val, preworldrafile.val, postworldra.val, postworldrafile.val, ambiSamples.val, occlusion.val, indirect.val]DATA4X> fname = globalpropertiesdir + 'GlobalProperties'DATA> # Save variablesDATA> if (save == 1):DATA8? f = open(fname,'w')DATA$? writeln(f,'BlenderMan0.1Beta9.0')DATA? for i in Variables:DATA @ writeln(f,type(i).__name__)DATAh@ if (i == '\n'):DATA@ writeln(f,'')DATA@ continueDATA(A writeln(f,i)DATAhADATAA # Load variablesDATAA if (save == 0):DATAB try:DATAPB f = open(fname,'r')DATA B except: DATA B returnDATA C index = 0DATA @C version = str(f.readline())DATA,C if (version != 'BlenderMan0.1Beta9.0\n'):DATA C returnDATA D for i in Variables:DATA hD varType = str(f.readline())DATAD if (varType == "str\n"):DATA,E Variables[index] = str(f.readline())DATA XE elif (varType == "float\n"):DATA,E Variables[index] = float(f.readline())DATA F elif (varType == "int\n"):DATA,PF Variables[index] = int(f.readline())DATAF index += 1DATA F f.close()DATA G if (module == 'shader'):DATA$hG shadermenu.val = Variables[0]DATA(G ambientshader.val = Variables[1]DATA(H diffuseshader.val = Variables[2]DATA(hH specularshader.val = Variables[3]DATA(H roughnessshader.val = Variables[4]DATA$I coefshader.val = Variables[5]DATA(hI reflblurshader.val = Variables[6]DATA(I refrblurshader.val = Variables[7]DATA$J reflsamples.val = Variables[8]DATA$hJ refrsamples.val = Variables[9]DATA J kr.val = Variables[10]DATA$K textshader.val = Variables[11]DATA$XK textshaderd.val = Variables[12]DATA$K texturem.val = Variables[13]DATA(K textureblurm.val = Variables[14]DATA PL norm.val = Variables[15]DATA$L textnor.val = Variables[16]DATA,L illuminationmenu.val = Variables[17]DATA$HM projection.val = Variables[18]DATAM elif (module == 'object'):DATA$M convertbm.val = Variables[0]DATA(0N objectshadermenu.val = Variables[1]DATA N geom.val = Variables[2]DATA$N meshexport.val = Variables[3]DATA(O uv.val = Variables[4]DATA(pO arealightMESH.val = Variables[5]DATA$O areasamples.val = Variables[6]DATA(P recievecaustics.val = Variables[7]DATA,pP transmittcaustics.val = Variables[8]DATA0P transmittcausticsslider.val = Variables[9]DATA$(Q caustics.val = Variables[10]DATA xQ photon.val = Variables[11]DATA(Q rendershadow.val = Variables[12]DATA$ R buff256.val = Variables[13]DATA$pR buff512.val = Variables[14]DATA$R buff1024.val = Variables[15]DATA$S buff2048.val = Variables[16]DATA `S eblur.val = Variables[17]DATA$S esamples.val = Variables[18]DATA T amesh.val = Variables[19]DATA(PT reflectcaustics.val = Variables[20]DATA(T raytraceshadow.val = Variables[21]DATA U bias.val = Variables[22]DATA$PU rvisibility.val = Variables[23]DATA$U castshadow.val = Variables[24]DATA$U pointwidth.val = Variables[25]DATA$@V objectra.val = Variables[26]DATA$V objectrafile.val = Variables[27]DATAV elif (module == 'global'):DATA(W gi.val = Variables[0]DATA pW gisteps.val = Variables[1]DATA$W radiosity.val = Variables[2]DATA X radnum.val = Variables[3]DATA `X dirw.val = Variables[4]DATA X image.val = Variables[5]DATA$Y filename.val = Variables[6]DATA PY file.val = Variables[7]DATA Y buffer.val = Variables[8]DATA Y anim.val = Variables[9]DATA$@Z rendert.val = Variables[10]DATA$Z menuval.val = Variables[11]DATA$Z samples.val = Variables[12]DATA 0[ srate.val = Variables[13]DATA [ debug.val = Variables[14]DATA$[ maxerror.val = Variables[15]DATA( \ maxpixeldist.val = Variables[16]DATA x\ geom.val = Variables[17]DATA$\ motionblur.val = Variables[18]DATA(] motionblurframe.val = Variables[19]DATA p] dof.val = Variables[20]DATA ] stop.val = Variables[21]DATA ^ lenght.val = Variables[22]DATA$`^ distance.val = Variables[23]DATA ^ autogs.val = Variables[24]DATA$_ progress.val = Variables[25]DATA$P_ indirectgi.val = Variables[26]DATA _ areagi.val = Variables[27]DATA _ gianim.val = Variables[28]DATA$@` patchsize.val = Variables[29]DATA$` elemsize.val = Variables[30]DATA$` minsize.val = Variables[31]DATA 0a recurs.val = Variables[32]DATA a gain.val = Variables[33]DATA a gamma.val = Variables[34]DATA b lightx.val = Variables[35]DATA$pb hiddenlayer.val = Variables[36]DATA$b gisphere.val = Variables[37]DATA$c finalgather.val = Variables[38]DATA `c hdri.val = Variables[39]DATA c hdritex.val = Variables[40]DATA d rgba.val = Variables[41]DATA$Pd reconvert.val = Variables[42]DATA(d prmanrenderer.val = Variables[43]DATA$d bmrtrenderer.val = Variables[44]DATA(He entropyrenderer.val = Variables[45]DATA$e dlrenderer.val = Variables[46]DATA(e aqsisrenderer.val = Variables[47]DATA(Hf pixierenderer.val = Variables[48]DATA(f prmantexmaker.val = Variables[49]DATA$f bmrttexmaker.val = Variables[50]DATA(Hg entropytexmaker.val = Variables[51]DATA$g dltexmaker.val = Variables[52]DATA(g aqsistexmaker.val = Variables[53]DATA(Hh pixietexmaker.val = Variables[54]DATA$h preworldra.val = Variables[55]DATA(h preworldrafile.val = Variables[56] DATA$Hi postworldra.val = Variables[57]DATA(i postworldrafile.val = Variables[58] DATA(i ambiSamples.val = Variables[59] DATA$Hj occlusion.val = Variables[60] DATA,j #ambiSamplesindex.val = Variables[61] DATA$j indirect.val = Variables[61]DATA@k DATApkdef writeln(f,x):DATAk try:DATAxk if (type(x).__name__ == 'string'): # this thing is to combat a bug that saves strings with a \n, (we dont want that)DATA l nn = string.find(x, '\n')DATAl if (nn > 0):DATA m x = x[:nn] + x[nn + 1:]DATAhm f.write(str(x))DATAm f.write('\n')DATA m except:DATA n passDATAXnDATAndef readint(f):DATAn try:DATAo return int(f.readline())DATA Ho except:DATAo passDATAodef readfloat(f):DATAo try:DATA 0p return float(f.readline())DATA p except:DATAp passDATApdef readstr(f):DATA0q try:DATAhq s = (f.readline())DATAq nn = string.find(s, '\n')DATAq if (nn > 0):DATA8r s = s[:nn] + s[nn + 1:]DATA r return sDATA r except:DATA r print sDATA(sDATAXsdef saveShaderName(save):DATAs global sshaderDATA<s if save: f = open(surfaceshadersdir + 'ShaderNames','w')DATA8Ht else: f = open(surfaceshadersdir + 'ShaderNames','r')DATA t if save: writeln(f,sshader)DATAu else: sshader = readstr(f)DATA Hu f.close()DATAutry: DATA4u f = open(surfaceshadersdir + 'ShaderNames','r')DATAvexcept:DATAPv saveShaderName(1)DATA v Register (gui, event, bevent)DATAvDATAwsaveShaderName(0)DATA PwRegister (gui, event, bevent)DATAwsshader2 = sshaderDATAwDATAxDATA@xdef newdirs():DATA`x global pdir, globalpropertiesdir, surfaceshadersdir, displacementshadersdir, objectsettingsdirDATAhy global lightsettingsdir, lightsettingsdir, meshesdir, imagesdir, shadowdir, texturesdir, shadersdirDATAy if (os.name != "posix"):DATAy rootdir = '/BlenderMan/'DATA8z else:DATA0pz rootdir = os.getenv("HOME") + '/BlenderMan/'DATA$z pdir = rootdir + dirw.val + '/'DATA4 { globalpropertiesdir = pdir + '/GlobalProperties/'DATA0{ surfaceshadersdir = pdir + '/SurfaceShaders/'DATA<{ displacementshadersdir = pdir + '/DisplacementShaders/'DATA0H| objectsettingsdir = pdir + '/ObjectSettings/'DATA0| lightsettingsdir = pdir + '/LightSettings/'DATA } meshesdir = pdir + '/Meshes/'DATA X} imagesdir = pdir + '/images/'DATA } shadowdir = pdir + '/shadows/'DATA$} texturesdir = pdir + '/textures/'DATA$H~ shadersdir = pdir + '/shaders/'DATA~ try:DATA~ os.mkdir(pdir)DATA  os.mkdir(globalpropertiesdir)DATA ` os.mkdir(surfaceshadersdir)DATA$ os.mkdir(displacementshadersdir)DATA os.mkdir(meshesdir)DATA H os.mkdir(objectsettingsdir)DATA  os.mkdir(lightsettingsdir)DATA os.mkdir(shadowdir)DATA0 os.mkdir(texturesdir)DATAx os.mkdir(imagesdir)DATA except OSError: DATA passDATA8DATA,hdef writeHeader(ribfile, frames, frames2):DATA\ ribfile.write('Option "searchpath" "texture" ["%s"]\n'%(texturesdir + ":" + shadowdir))DATA H display = Scene.GetCurrent()DATA, context = display.getRenderingContext()DATA$ yResolution = context.imageSizeY()DATA$@ xResolution = context.imageSizeX()DATA  if xResolution >= yResolution:DATA, factor = yResolution / float(xResolution)DATA8 else:DATA,p factor = xResolution / float(yResolution)DATA ȅ if Blender.World.Get() != []:DATA$ world = Blender.World.Get()[0]DATA h if world.hor != [0, 0, 0]:DATAp ribfile.write('Imager "background" "color bgcolor" [%s %s %s]\n'%(world.hor[0], world.hor[1], world.hor[2]))DATA$X scene = Blender.Scene.GetCurrent()DATA$ camobj = scene.getCurrentCamera()DATA< camera = Blender.Camera.Get(camobj.getData().name)DATAp` ribfile.write('Projection "perspective" "fov" [%s]\n'%(360.0 * atan(factor * 16.0 / camera.lens) /pi))DATA@ ribfile.write('Format %s %s 1\n' % (xResolution, yResolution))DATAHp ribfile.write("Clipping %s %s\n" % (camera.clipStart, camera.clipEnd))DATAD ribfile.write('PixelSamples %s %s\n'%(samples.val, samples.val))DATAX try:DATA< ribfile.write('Exposure %s %s\n'%(gain.val, gamma.val))DATA  except: DATA0 passDATAh if (menuval.val != 2):DATA if (dof.val == 1): DATAT ribfile.write('DepthOfField %s %s %s\n'%(stop.val, lenght.val, distance.val))DATA<x ribfile.write('ShadingRate %s\n'%sratelist[srate.val - 1])DATA4 if ((radiosity.val == 1) & (menuval.val == 2)):DATA@@ ribfile.write('Option "radiosity" "steps" [%s]\n'%radnum.val)DATAH ribfile.write('Attribute "indirect" "maxerror" [%s]\n'%maxerror.val)DATAX( ribfile.write('Attribute "indirect" "float maxpixeldist" [%s]\n'%maxpixeldist.val)DATAP ribfile.write('Attribute "radiosity" "float patchsize" [%s]'%patchsize.val)DATAL0 ribfile.write('Attribute "radiosity" "float elemsize" [%s]'%elemsize.val)DATAL ribfile.write('Attribute "radiosity" "float minsize" [%s]'%minsize.val)DATA  if (motionblur.val == 1):DATA$h ribfile.write('Shutter 0 1\n')DATA0 if (menuval.val == 1) or (menuval.val == 4):DATAH ribfile.write('Option "trace" "integer maxdepth" [%s]\n'%recurs.val)DATA0 elif (menuval.val == 2) or (menuval.val == 3):DATAD ribfile.write('Option "render" "max_raylevel" [%s]\n'%recurs.val)DATAL` ribfile.write('Option "statistics" "integer endofframe" [%s]\n'%debug.val)DATA0ؒ if ((indirectgi.val == 1) & (gi.val == 1)):DATA,8 if ((gianim.val == 0) & (frames2 == 0)):DATAP ribfile.write('Option "indirect" "string savefile" ["%s/irr.dat"]\n'%pdir)DATA0 elif ((frames2 > 0) or (gianim.val == 1)):DATAp if (anim.val == 1):DATAP ribfile.write('Option "indirect" "string seedfile" ["%s/irr.dat"]\n'%pdir)DATA8 if (menuval.val == 3):DATA@ ribfile.write('Option "indirect" "integer maxbounce" [3]\n')DATADATA DATA(Pdef writeTransform(ribfile, lampobj):DATA global cframeDATA Blender.Get('curframe')DATA0 Blender.Window.RedrawAll()DATAx if (lampobj == 0):DATA$ camobj = scene.getCurrentCamera()DATA else:DATA@ camobj = lampobjDATA, caminvmatrix = camobj.getInverseMatrix()DATA ؘ ribfile.write("Transform [" +DATA<( "%s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s]\n" %DATA (caminvmatrix[0][0],DATAؙ caminvmatrix[0][1],DATA  -caminvmatrix[0][2],DATAh caminvmatrix[0][3],DATA caminvmatrix[1][0],DATA caminvmatrix[1][1],DATA@ -caminvmatrix[1][2],DATA caminvmatrix[1][3],DATAЛ caminvmatrix[2][0],DATA caminvmatrix[2][1],DATA` -caminvmatrix[2][2],DATA caminvmatrix[2][3],DATA caminvmatrix[3][0],DATA8 caminvmatrix[3][1],DATA -caminvmatrix[3][2],DATAȝ caminvmatrix[3][3]))DATADATA@def ambientLight(ribfile):DATA  if Blender.World.Get() != []:DATA$؞ world = Blender.World.Get()[0]DATA(( if (occlusion.val) or (indirect.val):DATAH ribfile.write('\tAttribute "visibility" "transmission" "opaque"\n')DATA else:DATA0 ribfile.write('\tLightSource "ambientlight" 998 "float intensity" [1] "color lightcolor" [%s %s %s]\n\n'%(world.amb[0], world.amb[1], world.amb[2]))DATADATA(def checkLamps(ribfile):DATAp global selectednameDATA lampnum = 0DATA( for objects in Blender.Object.Get():DATAP name = objects.getName()DATA$ if (objects.getType() == "Lamp"):DATA lampnum += 1DATA( resetObject()DATAh selectedname = nameDATA$ Register (gui, event, bevent)DATA saveload(0,0,'object')DATA$H Register (gui, event, bevent)DATA( writeLamps(ribfile, name, lampnum)DATA ribfile.write("\n")DATA8DATA(hdef renderShadows(ribfile, frames2):DATA$ global selectedname, partitionnameDATA( display = Blender.Scene.GetCurrent()DATA$h cframe = Blender.Get('curframe')DATA( for objects in Blender.Object.Get():DATA name = objects.getName()DATA$X if (objects.getType() == "Lamp"):DATA resetObject()DATA$ Register (gui, event, bevent)DATA8 selectedname = nameDATA saveload(0,0,'object')DATA$Ȩ Register (gui, event, bevent)DATA  if (rendershadow.val == 1):DATAh if (anim.val == 1):DATA, shadowframe = Blender.Get('curframe')DATA  else:DATA@ shadowframe = ''DATAH ribfiledir = os.path.normpath(shadowdir + name + str(shadowframe))DATA( shadowrib = open(ribfiledir, 'w')DATA4X if ((menuval.val == 4) & (os.name != "posix")):DATA ribfile.write('ReadArchive "%s%s"\n'%(os.path.splitdrive( os.path.normcase( os.path.normpath(partitionname + shadowdir + name + str(shadowframe))))))DATA  else:DATAP  ribfile.write('ReadArchive "%s"\n'%(shadowdir + name + str(shadowframe)))DATA(8! shadowrib.write('FrameBegin 0\n')DATA(! lampobj = Blender.Object.Get(name)DATA4! lamp = Blender.Lamp.Get(lampobj.getData().name)DATA|H" if ((lamp.getMode() & lamp.Modes['Shadows']) & (lamp.type == 2)): # if it is set to render shadow and is a spotlightDATA" if (buff256.val == 1):DATA8# buffer = 256DATA x# elif (buff512.val == 1):DATA# buffer = 512DATA $ elif (buff1024.val == 1):DATAX$ buffer = 1024DATA $ elif (buff2048.val == 1):DATA$ buffer = 2048DATAP(% shadowrib.write('Projection "perspective" "fov" %s\n' %(lamp.spotSize))DATA,% shadowrib.write('PixelSamples 1 1\n')DATA4& if (menuval.val != 2) and (menuval.val != 3):DATAD`& shadowrib.write('Hider "hidden" "depthfilter" "midpoint"\n')DATA& if (menuval.val == 3):DATA4' shadowrib.write('PixelFilter "min" 1 1\n')DATA x' else:DATA4' shadowrib.write('PixelFilter "box" 1 1\n')DATA8( shadowrib.write('Hider "hidden" "jitter" [0]\n')DATA(x( writeTransform(shadowrib, lampobj)DATA<( shadowrib.write('Format %s %s 1\n'%(buffer, buffer))DATA\8) shadowrib.write('Display "%s/%s%s.pic" "zfile" "z"\n'%(shadowdir, name, shadowframe))DATA) if menuval.val == 5:DATA,* shadowrib.write('ShadingRate 1\n')DATA `* else:DATA,* shadowrib.write('ShadingRate 4\n')DATA(* shadowrib.write('WorldBegin \n')DATAH+ shadows = 1DATA8+ createObjects(shadowrib, cframe, shadows, frames2)DATA$+ shadowrib.write('WorldEnd \n')DATA@, shadowrib.write('MakeShadow "%s/%s%s.pic" "%s/%s%s.tx"\n'%(shadowdir, name, shadowframe, shadowdir, name, shadowframe))DATA$, shadowrib.write('FrameEnd\n')DATA@-DATA(p-def writeLamps(ribfile, name, lampnum):DATA- global selectednameDATA$. lampobj = Blender.Object.Get(name)DATA4`. lamp = Blender.Lamp.Get(lampobj.getData().name)DATA4. x = lampobj.matrix[3][0] / lampobj.matrix[3][3]DATA4 / y = lampobj.matrix[3][1] / lampobj.matrix[3][3]DATA4/ z = lampobj.matrix[3][2] / lampobj.matrix[3][3]DATA4/ tox = -lampobj.matrix[2][0] + lampobj.matrix[3][0]DATA4@0 toy = -lampobj.matrix[2][1] + lampobj.matrix[3][1]DATA40 toz = -lampobj.matrix[2][2] + lampobj.matrix[3][2]DATA01 if lamp.getMode() & lamp.Modes['Negative']:DATA`1 negative = -1DATA1 else:DATA1 negative = 1DATA2 selectedname = nameDATA `2 Register (gui, event, bevent)DATA2 saveload(0,0,'object')DATA2 if (caustics.val):DATA083 ribfile.write('\tLightSource "caustic" 2\n')DATA(3 ribfile.write('\tIlluminate 2 0\n\n')DATA(3 ribfile.write('\tTransformBegin\n')DATALH4 ribfile.write('\tAttribute "light" "integer nphotons" [%s]\n'%photon.val)DATA,4 if lamp.getMode() & lamp.Modes['Shadows']:DATA5 shadow = 'on'DATAX5 else:DATA5 shadow = 'off'DATA05 if (menuval.val == 2) or (menuval.val == 4):DATA 06 if (raytraceshadow.val == 1):DATAH6 ribfile.write('\tAttribute "light" "shadows" ["%s"]\n' % (shadow))DATA6 else:DATA<07 ribfile.write('\tAttribute "light" "shadows" ["off"]\n')DATA7 if (lamp.type == 2):DATA7 if (anim.val == 1):DATA0(8 shadowframe = '%s'%(Blender.Get('curframe'))DATA8 else:DATA8 shadowframe = ''DATA$9 energratio = lamp.dist * negativeDATA8P9 if ((shadow == 'on') and (raytraceshadow.val == 1)):DATA9 if (menuval.val == 3):DATA: shadowname = 'shadow'DATAH: elif (menuval.val == 1):DATA: shadowname = 'raytrace'DATA: elif (menuval.val == 6):DATAH ; ribfile.write('\t(Attribute "visibility" "transmission" "opaque")')DATA; shadowname = 'raytrace'DATA ; else:DATA< shadowname = ''DATAX< else:DATA4< if (shadow == 'on') and (rendershadow.val == 1):DATA,< shadowname = name + shadowframe + '.tx'DATA H= else:DATA= shadowname = ''DATA@= if (menuval.val == 6) and (shadow == 'off'): #Pixie RenderDATA0> ribfile.write('\tLightSource "spotlight" %d "float shadowbias" %s "float blur" %s "float samples" %s "coneangle" %s "conedeltaangle" %s "from" [%s %s %s] "to" [%s %s %s] "intensity" %s "lightcolor" [%s %s %s] "string shadowname" ["%s"]\n' \DATAP? %(lampnum, bias.val, eblur.val, esamples.val, (lamp.spotSize * pi / 360), (lamp.spotBlend * (lamp.spotSize * pi / 360)), x, y, z, tox, toy, toz, (energratio * lamp.energy) * lightx.val, lamp.R, lamp.G, lamp.B, shadowname))DATAp`@ elif (menuval.val == 6) and (shadow == 'on') and (raytraceshadow.val == 0): #Pixie Render with SpotShadowsDATAA ribfile.write('\tLightSource "shadowspot" %d "float shadowbias" %s "float blur" %s "float samples" %s "coneangle" %s "conedeltaangle" %s "from" [%s %s %s] "to" [%s %s %s] "intensity" %s "lightcolor" [%s %s %s] "string shadowname" ["%s"]\n' \DATA(B %(lampnum, bias.val, eblur.val, esamples.val, (lamp.spotSize * pi / 360), (lamp.spotBlend * (lamp.spotSize * pi / 360)), x, y, z, tox, toy, toz, (energratio * lamp.energy) * lightx.val, lamp.R, lamp.G, lamp.B, shadowname))DATAt8C elif (menuval.val == 6) and (shadow == 'on') and (raytraceshadow.val == 1): #Pixie Render with Ray Spot shadowsDATAC ribfile.write('\tLightSource "shadowspot" %d "float shadowbias" %s "float blur" %s "float samples" %s "coneangle" %s "conedeltaangle" %s "from" [%s %s %s] "to" [%s %s %s] "intensity" %s "lightcolor" [%s %s %s] "string shadowname" ["%s"]\n' \DATAE %(lampnum, bias.val, eblur.val, esamples.val, (lamp.spotSize * pi / 360), (lamp.spotBlend * (lamp.spotSize * pi / 360)), x, y, z, tox, toy, toz, (energratio * lamp.energy) * lightx.val, lamp.R, lamp.G, lamp.B, shadowname))DATAF else:DATAHF ribfile.write('\tLightSource "bml" %d "float shadowbias" %s "float blur" %s "float samples" %s "coneangle" %s "conedeltaangle" %s "from" [%s %s %s] "to" [%s %s %s] "intensity" %s "lightcolor" [%s %s %s] "string shadowname" ["%s"]\n' \DATAhG %(lampnum, bias.val, eblur.val, esamples.val, (lamp.spotSize * pi / 360), (lamp.spotBlend * (lamp.spotSize * pi / 360)), x, y, z, tox, toy, toz, (energratio * lamp.energy) * lightx.val, lamp.R, lamp.G, lamp.B, shadowname))DATAxH elif (lamp.type == 1):DATAH energratio = negativeDATAxI if (shadow == "off") or (raytraceshadow.val != 1) or (menuval.val == 2) or (menuval.val == 4) or (menuval.val == 5):DATAI ribfile.write('\tLightSource "distantlight" %d "from" [%s %s %s] "to" [%s %s %s] "intensity" %s "lightcolor" [%s %s %s]\n' % (lampnum, x, y, z, tox, toy, toz, energratio * lamp.energy, lamp.R, lamp.G, lamp.B))DATAJ else:DATAJ if (menuval.val == 3):DATAD8K ribfile.write('\tLightSource "distantlight" %d "from" [%s %s %s] "to" [%s %s %s] "intensity" %s "lightcolor" [%s %s %s] "string shadowname" ["shadow"] "float shadowsamples" [%s] "float shadowblur" [%s]\n' % (lampnum, x, y, z, tox, toy, toz, energratio * lamp.energy, lamp.R, lamp.G, lamp.B, esamples.val, eblur.val))DATAL elif (menuval.val == 1):DATADL ribfile.write('\tLightSource "shadowdistant" %d "from" [%s %s %s] "to" [%s %s %s] "intensity" %s "lightcolor" [%s %s %s] "string shadowname" ["raytrace"] "float samples" [%s] "float width" [%s]\n' % (lampnum, x, y, z, tox, toy, toz, energratio * lamp.energy, lamp.R, lamp.G, lamp.B, esamples.val, eblur.val * 100 + 1))DATA`N elif (lamp.type == 0):DATA$N energratio = lamp.dist * negativeDATAxN if (shadow == "off") or (raytraceshadow.val != 1) or (menuval.val == 2) or (menuval.val == 4) or (menuval.val == 5):DATAO ribfile.write('\tLightSource "pointlight" %d "from" [%s %s %s] "intensity" %s "lightcolor" [%s %s %s]\n'%(lampnum, x, y, z, (energratio * lamp.energy) * lightx.val, lamp.R, lamp.G, lamp.B))DATALP if (shadow == "off") or (raytraceshadow.val != 1) or (menuval.val == 6):DATAQ ribfile.write('\tLightSource "pointlight" %d "from" [%s %s %s] "intensity" %s "lightcolor" [%s %s %s]\n'%(lampnum, x, y, z, (energratio * lamp.energy) * lightx.val, lamp.R, lamp.G, lamp.B))DATAQ else:DATA 0R if (menuval.val == 3): DATA0R ribfile.write('\tLightSource "pointlight" %d "from" [%s %s %s] "intensity" %s "lightcolor" [%s %s %s] "float shadowblur" [%s] "float shadowsamples" [%s] "string shadowname" ["shadow"]\n'%(lampnum, x, y, z, (energratio * lamp.energy) * lightx.val, lamp.R, lamp.G, lamp.B, eblur.val, esamples.val))DATA S elif (menuval.val == 1): DATA0T ribfile.write('\tLightSource "shadowpoint" %d "from" [%s %s %s] "intensity" %s "lightcolor" [%s %s %s] "float width" [%s] "float samples" [%s] "string sfpx" ["raytrace"] "string sfnx" ["raytrace"] "string sfpy" ["raytrace"] "string sfny" ["raytrace"] "string sfpz" ["raytrace"] "string sfnz" ["raytrace"]\n'%(lampnum, x, y, z, (energratio * lamp.energy) * lightx.val, lamp.R, lamp.G, lamp.B, eblur.val * 100 + 1, esamples.val))DATA8V if (raytraceshadow.val == 1) and (menuval.val == 6):DATAxV print 'raytrace lamp'DATAHV ribfile.write('Attribute "visibility" "transmission" "opaque"\n')DATA8W ribfile.write('\tLightSource "shadowdistant" %d "from" [%s %s %s] "to" [%s %s %s] "intensity" %s "lightcolor" [%s %s %s] "shadowname" "raytrace"\n' % (lampnum, x, y, z, tox, toy, toz, energratio * lamp.energy, lamp.R, lamp.G, lamp.B))DATAXX elif (lamp.type == 3):DATAX energratio = negativeDATAX ribfile.write('\tLightSource "hemilight" %d "from" [%s %s %s] "to" [%s %s %s] "intensity" %s "lightcolor" [%s %s %s] "float falloff" [0]\n' % (lampnum, x, y, z, tox, toy, toz, energratio * lamp.energy, lamp.R, lamp.G, lamp.B))DATAZ if (caustics.val == 1):DATA$HZ ribfile.write('\tTransformEnd\n')DATAZDATA Zdef writeMatrix(ribfile, name):DATA[ Blender.Get('curframe')DATA`[ Blender.Window.RedrawAll()DATA,[ matrix = Blender.Object.Get(name).matrixDATA$\ ribfile.write("\t\tTransform [" +DATA<P\ "%s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s]\n" %DATA \ (matrix[0][0], matrix[0][1],DATA ] matrix[0][2], matrix[0][3],DATA X] matrix[1][0], matrix[1][1],DATA ] matrix[1][2], matrix[1][3],DATA ] matrix[2][0], matrix[2][1],DATA H^ matrix[2][2], matrix[2][3],DATA ^ matrix[3][0], matrix[3][1],DATA ^ matrix[3][2], matrix[3][3]))DATA8_DATAh_def resetObject():DATA_ convertbm.val = 0DATA_ objectshadermenu.val = 0DATA0` geom.val = 1DATAp` meshexport.val = 1DATA` pointwidth.val = 1.0DATA ` uv.val = 0DATA0a arealightMESH.val = 0DATAxa areasamples.val = 20DATAa recievecaustics.val = 0DATAb transmittcaustics.val = 0DATA$Pb transmittcausticsslider.val = 1.4DATAb caustics.val = 0DATAb photon.val = 4000DATA c buff256.val = 0DATA`c buff512.val = 1DATAc buff1024.val = 0DATAc buff2048.val = 0DATA d eblur.val = 0.00DATA`d esamples.val = 1DATAd amesh.val = 0DATAd reflectcaustics.val = 0DATA(e raytraceshadow.val = 0DATApe rendershadow.val = 0DATAe bias.val = 0.25DATAe rvisibility.val = 0DATA@f castshadow.val = 1DATAf objectra.val = 0DATAfDATAfdef resetShaderVal():DATA8g if (shadermenu.val == 1):DATAg ambientshader.val = 1DATAg diffuseshader.val = 0.5DATAh specularshader.val = 0.5DATAXh roughnessshader.val = 0.1DATAh if (shadermenu.val == 2):DATAh ambientshader.val = 0.2DATA0i diffuseshader.val = 0.0DATAxi specularshader.val = 0.5DATA i roughnessshader.val = 0.05DATAj coefshader = 1.5DATAPj reflblurshader = 0DATAj refrblurshader.val = 0DATAj reflsamples.val = 0DATA(k refrsamples.val = 0DATApk if (shadermenu.val == 3):DATAk ambientshader.val = 1.0DATAl diffuseshader.val = 0.1DATAHl specularshader.val = 1.0DATAl roughnessshader.val = 0.2DATAl if (shadermenu.val == 5):DATA m ambientshader.val = 1DATAhm diffuseshader.val = 0.5DATAm specularshader.val = 0.5DATAm roughnessshader.val = 0.1DATA(@n textshader.val = 'Surface "plastic"'DATA,n textshaderd.val = 'Displacement "bumpy"'DATAn texturem.val = ''DATA0o textnor.val = 0DATApo illuminationmenu.val = 0DATAoDATA0odef writeShader(ribfile, name, meshobj, anim):DATAHp global texturefile, txdoneDATA p if (arealightMESH.val == 0):DATAp MName = '"plastic"'DATA(q else: DATA`q MName = ''DATA,q if ((uv.val == 1) and (meshobj != 10)):DATA0q mesh = Blender.NMesh.GetRawFromObject(name)DATAXr if mesh.faces[0].image:DATA,r imagename = mesh.faces[0].image.filenameDATA r imagename = imagename[:-3]DATAHs imagename = imagenameDATA$s imagename = imagename + 'tif'DATATs imagename = '%s/%s/textures/%s'%(rootdir, dirw.val, os.path.split(imagename)[1])DATAh`t rawimage = '%s/%s/textures/%s'%(rootdir, dirw.val, os.path.split(mesh.faces[0].image.filename)[1])DATA8t infile = open(mesh.faces[0].image.filename, 'rb')DATA$`u outfile = open(rawimage, 'wb')DATA u outfile.write(infile.read())DATAv outfile.close()DATA@v infile.close()DATA`v imagenameconv = texturesdir + os.path.split(mesh.faces[0].image.filename)[1][:-3] + 'tif'DATAXw txname = texturesdir + os.path.split(mesh.faces[0].image.filename)[1][:-3] + 'tx'DATA(w if os.path.isfile(imagename) == 0:DATA w try:DATA$(x totiff.SetOutDir(texturesdir)DATA(xx ok = totiff.ConvertShort(rawimage)DATA$x if not ok[0]: # error occurredDATA( y print ok[1] # print error messageDATA xy except:DATA y if (os.name != "posix"):DATA z try:DATAd8z os.system('/ImageMagick/convert.exe -depth 8 -compress none %s %s'%(rawimage, imagename))DATAz except OSError:DATA{ print "\nYou do not have ImageMagic installed in c:\ImageMagic so texture conversion will not be possible. You will havto do it manualy.\nYou can find the textures to convert in c:\BlenderMan\PROJECTNAME\textures\\n"DATA | else:DATA X| try:DATAP| os.system('convert -depth 8 -compress none %s %s'%(rawimage, imagename))DATA} except OSError:DATA0X} print "\nCould not find ImageMagic\n"DATA,} imagename = mesh.faces[0].image.filenameDATA ~ imagename = imagename[:-3]DATA`~ imagename = imagenameDATA ~ tdlname = imagename + 'tx'DATA$~ imagename = imagename + 'tif'DATA4H imagename = '%s'%(os.path.split(imagename)[1])DATA0 tdlname = '%s'%(os.path.split(tdlname)[1])DATAH MName = '"bms" "string texname" ["%s"] "float maptype" 3'%(tdlname)DATA@ if ((os.path.isfile(txname) == 0) or (reconvert.val == 1)):DATA if menuval.val == 1:DATAH8 os.system('%s %s %s'%(prmantexmaker.val, imagenameconv, txname))DATA elif menuval.val == 2:DATAH os.system('%s %s %s'%(bmrttexmaker.val, imagenameconv, txname))DATAp elif menuval.val == 3:DATAH os.system('%s %s %s'%(entropytexmaker.val, imagenameconv, txname))DATA0 elif menuval.val == 4:DATADx os.system('%s %s %s'%(dltexmaker.val, imagenameconv, txname))DATA elif menuval.val == 5:DATAH0 os.system('%s %s %s'%(aqsistexmaker.val, imagenameconv, txname))DATA elif menuval.val == 6:DATAH os.system('%s %s %s'%(pixietexmaker.val, imagenameconv, txname))DATAh else: DATA MName = '"plastic"'DATA$ if (transmittcaustics.val == 1):DATA08 mesh = Blender.NMesh.GetRawFromObject(name)DATA try:DATA<І material = Blender.Material.Get(mesh.materials[0].name)DATA8 mr = material.RDATAx mg = material.GDATA mb = material.BDATA@ except: # if the mesh doesnt have a material default to whiteDATA h mr = 1DATA  mg = 1DATA ؈ mb = 1DATA` ribfile.write('\t\tAttribute "caustic" "color refractioncolor" [%s %s %s]\n'%(mr, mg, mb))DATAh ribfile.write('\t\tAttribute "caustic" "float refractionindex" [%s]\n'%transmittcausticsslider.val)DATA 8 if (reflectcaustics.val == 1):DATAP ribfile.write('\t\tAttribute "caustic" "color specularcolor" [.9 .9 .9]\n')DATA  if (recievecaustics.val == 1):DATA(X ribfile.write('\t\tIlluminate 2 1\n')DATA8 if ((shadermenu.val == 1) & (arealightMESH.val != 1)):DATA0 if ((convertbm.val != 0) or (meshobj == 10)):DATAx ribfile.write('\t\tSurface "plastic" "Ka" %s "Kd" %s "Ks" %s "roughness" %s\n'%(ambientshader.val, diffuseshader.val, specularshader.val, roughnessshader.val))DATA<H elif ((shadermenu.val == 2) & (arealightMESH.val != 1)):DATA0 if ((convertbm.val != 0) or (meshobj == 10)):DATA8 ribfile.write('\t\tDeclare "eta" "uniform float"\n')DATA<x ribfile.write('\t\tDeclare "blur" "uniform float"\n')DATA@ ribfile.write('\t\tDeclare "refrblur" "uniform float"\n')DATA@P ribfile.write('\t\tDeclare "raysamples" "uniform float"\n')DATAD ribfile.write('\t\tDeclare "refrraysamples" "uniform float"\n')DATA@0 ribfile.write('\t\tDeclare "envname" "uniform string"\n')DATA if (menuval.val == 3):DATA evar = ('"float reflblur" [%s] "float refrblur" [%s] "string envname" ["reflection"] "string envspace" ["current"] "refrblur" %s "eta" %s'%(reflblurshader.val, refrsamples.val, refrblurshader.val, coefshader.val))DATA elif (menuval.val == 2):DATA8 evar = '"blur" [%s] "raysamples" [%s] "refrraysamples" %s "refrblur" %s "eta" %s'%(reflblurshader.val, reflsamples.val, refrsamples.val, refrblurshader.val, coefshader.val)DATA  else:DATAP evar = ''DATA ribfile.write('\t\tSurface "glass" "Ka" %s "Kd" %s "Ks" %s "roughness" %s "Kr" %s %s\n'%(ambientshader.val, diffuseshader.val, specularshader.val, roughnessshader.val, kr.val, evar))DATA<x elif ((shadermenu.val == 3) & (arealightMESH.val != 1)):DATA0 if ((convertbm.val != 0) or (meshobj == 10)):DATA<@ ribfile.write('\t\tDeclare "blur" "uniform float"\n')DATA@ ribfile.write('\t\tDeclare "raysamples" "uniform float"\n')DATA if (menuval.val == 3):DATA`` evar = '"string envname" ["reflection"] "string envspace" ["current"] "float twosided" 1'DATA elif (menuval.val == 2):DATAP8 evar = ('"raysamples" %s "blur" %s'%(reflsamples.val, reflblurshader.val))DATA  else:DATA evar = ''DATA0 ribfile.write('\t\tSurface "shiny" "Ka" %s "Kd" %s "Ks" %s "roughness" %s %s\n'%(ambientshader.val, diffuseshader.val, specularshader.val, roughnessshader.val, evar))DATA< elif ((shadermenu.val == 4) & (arealightMESH.val != 1)):DATA0p if ((convertbm.val != 0) or (meshobj == 10)):DATAtЙ ribfile.write('\t\tAttribute "displacementbound" "sphere" [ %s ] "coordinatesystem" [ "object" ]\n'%norm.val)DATA,p ribfile.write('\t\t%s\n'%textshader.val)DATA0Ț ribfile.write('\t\t%s\n'%textshaderd.val)DATA<( elif ((shadermenu.val == 5) & (arealightMESH.val != 1)):DATA0 if ((convertbm.val != 0) or (meshobj == 10)):DATAt ribfile.write('\t\tAttribute "displacementbound" "sphere" [ %s ] "coordinatesystem" [ "object" ]\n'%norm.val)DATA  txname = texturem.val[:-3]DATA txname = txname + 'tx'DATA( tdlname = txnameDATA$h txname = texturesdir + txnameDATA converttex = 1DATA$ if os.path.isfile(txname) == 0:DATAH for texture in txdone:DATA  if (txname == texture):DATA converttex = 0DATA ( breakDATA` if (converttex == 1):DATA if (menuval.val == 1):DATAT os.system('%s %s %s'%(prmantexmaker.val, texturesdir + texturem.val, txname))DATA p elif (menuval.val == 2):DATAT os.system('%s %s %s'%(bmrttexmaker.val, texturesdir + texturem.val, txname))DATA @ elif (menuval.val == 3):DATAX os.system('%s %s %s'%(entropytexmaker.val, texturesdir + texturem.val, txname))DATA  elif (menuval.val == 4):DATATh os.system('%s %s %s'%(dltexmaker.val, texturesdir + texturem.val, txname))DATA  elif (menuval.val == 5):DATAT8 os.system('%s %s %s'%(aqsistexmaker.val, texturesdir + texturem.val, txname))DATA  elif (menuval.val == 6):DATAT os.system('%s %s %s'%(pixietexmaker.val, texturesdir + texturem.val, txname))DATA  txdone = txdone + [txname]DATAؤ txname = tdlnameDATA if (textnor.val == 1):DATA` ribfile.write('\t\tDisplacement "bmd" "string texname" ["%s"] "float maptype" %s "float Km" %s\n'%(txname, projection.val - 1, norm.val))DATA  ribfile.write('\t\tSurface "bms" "Ka" %s "Kd" %s "Ks" %s "roughness" %s "string texname" ["%s"] "float maptype" %s\n'%(ambientshader.val, diffuseshader.val, specularshader.val, roughnessshader.val, txname, projection.val - 1))DATA08 if ((convertbm.val == 0) & (meshobj != 10)):DATA0 mesh = Blender.NMesh.GetRawFromObject(name)DATA if (MName == ''):DATA 8 returnDATAp try:DATA< material = Blender.Material.Get(mesh.materials[0].name)DATA$ hard = 1-(material.hard*0.00392)DATA` ribfile.write('\t\tSurface %s "Ka" %s "Kd" %s "Ks" %s "roughness" %s\n'%(MName, material.amb, material.ref, material.spec, hard))DATA  except:DATA0P ribfile.write('\t\tSurface %s\n'%(MName))DATA if (meshobj != 10):DATA0 mesh = Blender.NMesh.GetRawFromObject(name)DATAX try:DATA if mesh.materials:DATA<ث material = Blender.Material.Get(mesh.materials[0].name)DATAT@ ribfile.write("\t\tColor [%s %s %s]\n" %(material.R, material.G, material.B))DATA except: passDATA  if (arealightMESH.val == 1):DATA,P ribfile.write('\t\tSurface "constant"\n')DATAL ribfile.write('\t\tAttribute "light" "nsamples" [%s]\n'%areasamples.val)DATA  if (menuval.val == 2):DATA@h ribfile.write('\t\tAttribute "light" "shadows" ["on"]\n')DATA0خ mesh = Blender.NMesh.GetRawFromObject(name)DATA8 try:DATA<p material = Blender.Material.Get(mesh.materials[0].name)DATAد if (menuval.val == 3):DATA  ribfile.write('\t\tAreaLightSource "arealight" 999 "intensity" [%s] "lightcolor" [%s %s %s] "string shadowname" ["shadow"] "float shadowbias" [0.15]\n'%(material.emit * 100, material.R, material.G, material.B))DATA( elif (menuval.val == 2):DATAp ribfile.write('\t\tAreaLightSource "arealight" 999 "intensity" [%s] "lightcolor" [%s %s %s]\n'%(material.emit * 100, material.R, material.G, material.B))DATA @ except:DATAxx ribfile.write('\t\tAreaLightSource "arealight" 999 "intensity" [%s] "lightcolor" [%s %s %s]\n'%(0.7 * 100, 1, 1, 1))DATA DATA8Pdef createObjects(ribfile, cframe, shadows, frames2):DATAT global sshader, selectedname, thisone, meshobjects, xbar, meshnum, partitionnameDATA8 meshobjects = 0.0DATAx thisone = 0DATA meshnum = 0DATA objecttime = ''DATA(8 for objects in Blender.Object.Get():DATA name = objects.getName()DATAص try:DATAD if (objects.getType() == "Mesh"): meshobjects = meshobjects + 1DATA  except: DATA passDATA( for objects in Blender.Object.Get():DATAH name = objects.getName()DATA resetObject()DATA з area = 0DATA$ obj = Blender.Object.Get(name)DATAX i = 0DATA0 while (obj.Layer>>i): # convert layer numberDATA i = i + 1DATA 0 if (i == hiddenlayer.val):DATA layer = 1DATA else:DATA layer = 0DATA88 if ((objects.getType() == "Mesh") & (layer == 0)):DATA meshnum = meshnum + 1DATA( meshobj = Blender.Object.Get(name)DATA$@ obj = Blender.Object.Get(name)DATA selectedname = nameDATA$ػ Register (gui, event, bevent)DATA( saveload(0,0,'object')DATAp if (shadows == 0):DATA( ribfile.write('\tAttributeBegin\n')DATA0 if ((shadows == 0) and (objectra.val == 1)):DATA@p ribfile.write('\t\tReadArchive "%s"\n' %(objectrafile.val))DATA if (shadows != 1):DATA0( mesh = Blender.NMesh.GetRawFromObject(name)DATA  if (len(mesh.faces) == 0):DATA(ؾ ribfile.write('\tAttributeEnd\n')DATA0 del(mesh)DATA p returnDATA if (mesh.materials):DATA  try:DATA@( material = Blender.Material.Get(mesh.materials[0].name)DATAT ribfile.write("\t\tColor [%s %s %s]\n" %(material.R, material.G, material.B))DATAd ribfile.write("\t\tOpacity [%s %s %s]\n" %(material.alpha, material.alpha, material.alpha))DATA except:DATA  passDATA  del(mesh)DATA`DATA  if (motionblur.val == 1):DATA, ribfile.write('\tMotionBegin [0 1]\n')DATA(8 Blender.Set('curframe', cframe) DATA  writeMatrix(ribfile, name)DATA< Blender.Set('curframe', cframe + motionblurframe.val)DATA H writeMatrix(ribfile, name)DATA$ ribfile.write('\tMotionEnd\n')DATA( Blender.Set('curframe', cframe) DATA @ else:DATA x writeMatrix(ribfile, name)DATA, namelist = string.split(sshader, "|")DATA  if len(namelist) > 1: DATA@h surfaceshadername.val = namelist[objectshadermenu.val - 1] DATA$ Register (gui, event, bevent)DATA( if (convertbm.val == 1):DATAp saveload(0,1,'shader')DATA$ Register (gui, event, bevent)DATA  if (castshadow.val == 1):DATAX op = "Os"DATA  elif (castshadow.val == 2):DATA op = "opaque"DATA ( elif (castshadow.val == 3):DATA4x if (menuval.val == 1) or (menuval.val == 4):DATA op = "shader"DATA  else:DATAP op = "shade"DATA  elif (castshadow.val == 4):DATA4 if (menuval.val == 1) or (menuval.val == 4):DATA@ op = "transparent"DATA  else:DATA op = "none"DATA0 if (menuval.val == 1) or (menuval.val == 4):DATAT` ribfile.write('\t\tAttribute "visibility" "string transmission" ["%s"]\n'%op)DATA4 elif (menuval.val == 2) or (menuval.val == 3):DATAP@ ribfile.write('\t\tAttribute "render" "string casts_shadows" ["%s"]\n'%op)DATA  if (rvisibility.val == 1):DATA if (menuval.val == 3):DATAHX ribfile.write('\t\tAttribute "visibility" "integer camera" [0]\n')DATA  elif (menuval.val == 2):DATAH  ribfile.write('\t\tAttribute "render" "integer visibility" [2]\n')DATA if (shadows == 0):DATA4 writeShader(ribfile, name, meshobj, frames2)DATA@ if (amesh.val == 1):DATA objecttime = frames2DATA  else:DATA objecttime = ''DATA H if (motionblur.val != 1):DATA, if ((frames2 == 0) or amesh.val == 1):DATA if (geom.val == 1):DATAH8 meshfile = open('%s/%s%s.rib'%(meshesdir,name, objecttime), 'w')DATA8 check(name, meshfile, meshobj, meshnum, shadows)DATA if ((menuval.val == 4) & (os.name != "posix")): ribfile.write('\t\tReadArchive "%s%s"\n'%(os.path.splitdrive( os.path.normcase( os.path.normpath(partitionname + meshesdir + name + str(objecttime) + ".rib")))))DATA\  else: ribfile.write('\t\tReadArchive "%s/%s%s.rib"\n'%(meshesdir, name, objecttime))DATA  else:DATA  if (meshexport.val == 2):DATA,0 if ((frames2 == 0) or amesh.val == 1):DATA if (geom.val == 1):DATAH meshfile = open('%s/%s%s.rib'%(meshesdir,name, objecttime), 'w')DATA8H check(name, meshfile, meshobj, meshnum, shadows)DATA if ((menuval.val == 4) & (os.name != "posix")): ribfile.write('\t\tReadArchive "%s%s"\n'%(os.path.splitdrive( os.path.normcase( os.path.normpath(partitionname + meshesdir + name + objecttime + ".rib")))))DATA\ else: ribfile.write('\t\tReadArchive "%s/%s%s.rib"\n'%(meshesdir, name, objecttime))DATA 8 else:DATAp if (amesh.val != 1):DATA if (frames2 == 0):DATA if (geom.val == 1):DATALH meshfile = open('%s/%s%s.rib'%(meshesdir,name, objecttime), 'w')DATA< check(name, meshfile, meshobj, meshnum, shadows)DATA( if ((menuval.val == 4) & (os.name != "posix")): ribfile.write('\t\tReadArchive "%s%s"\n'%(os.path.splitdrive( os.path.normcase( os.path.normpath(partitionname + meshesdir + name + objecttime + ".rib")))))DATA\( else: ribfile.write('\t\tReadArchive "%s/%s%s.rib"\n'%(meshesdir, name, objecttime))DATA  else:DATA( Blender.Set('curframe', cframe) DATA$@ Blender.Window.RedrawAll()DATA if (geom.val == 1):DATAH meshfile = open('%s/%s%s.rib'%(meshesdir,name, objecttime), 'w')DATA8P check(name, meshfile, meshobj, meshnum, shadows)DATA0 ribfile.write('\tMotionBegin [0 1]\n')DATA if ((menuval.val == 4) & (os.name != "posix")): ribfile.write('\t\tReadArchive "%s%s"\n'%(os.path.splitdrive( os.path.normcase( os.path.normpath(partitionname + meshesdir + name + str(objecttime) + ".rib")))))DATA\  else: ribfile.write('\t\tReadArchive "%s/%s%s.rib"\n'%(meshesdir, name, objecttime))DATA< Blender.Set('curframe', cframe + motionblurframe.val)DATA$ Blender.Window.RedrawAll()DATA4` objecttime = frames2 + motionblurframe.valDATA if (geom.val == 1):DATAP meshfile = open('%s/%s%s.rib'%(meshesdir,name, str(objecttime)), 'w')DATA8 check(name, meshfile, meshobj, meshnum, shadows)DATA if ((menuval.val == 4) & (os.name != "posix")): ribfile.write('\t\tReadArchive "%s%s"\n'%(os.path.splitdrive( os.path.normcase( os.path.normpath(partitionname + meshesdir + name + str(objecttime) + ".rib")))))DATA` else: ribfile.write('\t\tReadArchive "%s/%s%s.rib"\n'%(meshesdir, name, str(objecttime)))DATA( ribfile.write('\tMotionEnd\n')DATA( Blender.Set('curframe', cframe) DATA$8 Blender.Window.RedrawAll()DATA objecttime = frames2DATA if (shadows == 0):DATA( ribfile.write('\tAttributeEnd\n')DATA p if (arealightMESH.val == 1):DATA, ribfile.write('\tIlluminate 999 1\n')DATADATA(Hdef drawBar(meshnum, qwerty, pixels):DATA if (progress.val == 1):DATA$ global thisone, meshobjects, xbarDATA 8 xbar = 0DATAp xbar = qwertyDATA if (xbar < 10): xbar = 11DATA  Draw()DATA00 elif ((progress.val == 0) & (anim.val == 1)):DATA( testtime = Blender.Get('curframe')DATADATA8def check(name, meshfile, meshobj, meshnum, shadows):DATA if (shadows != 1):DATA  print 'Exporting: %s'%nameDATA0 mesh = Blender.NMesh.GetRawFromObject(name)DATA p if (len(mesh.faces) == 0):DATA del(mesh)DATA  returnDATA8 if (meshexport.val == 1):DATA$ pointspolygon(meshfile, mesh)DATA  elif (meshexport.val == 2):DATA0  polygon(mesh, meshfile, meshobj, meshnum)DATA  elif (meshexport.val == 3):DATA  subdivmesh(meshfile, mesh)DATA  elif (meshexport.val == 4):DATAp points(meshfile, mesh)DATA  elif (meshexport.val == 5):DATA general(meshfile, mesh)DATA P elif (meshexport.val == 6):DATA bilinear(meshfile, mesh)DATA  del(mesh)DATA  meshfile.close()DATA`DATA def pointspolygon(file, mesh): DATA global meshnumDATA$  testtime = Blender.Get('curframe')DATA p update = 5DATA colorif = 0DATA perso = 0.0DATA( pixels = 0.0DATAh update = 100DATA  index = 0DATA facenum = len(mesh.faces)DATA( if menuval.val != 2:DATAp if mesh.hasFaceUV() == 1:DATA8 file.write('Declare "st" "facevarying float[2]"\n')DATA$  file.write("PointsPolygons [");DATAp for face in mesh.faces:DATA, if len(face.v) == 4 and menuval.val == 2:DATA file.write('3 3 ')DATAX else:DATA$ file.write('%s '%(len(face.v)))DATA index = index + 1DATA0  if ((index == update) or (index == facenum)):DATA update = update + 100DATA pixels = 619DATA( perso = float(index) / float(facenum)DATA,` qwerty = float(pixels) * float(perso) DATA$ drawBar(meshnum, qwerty, pixels)DATA file.write("] ")DATAH file.write("[ ")DATA for face in mesh.faces:DATA num = len(face.v)DATA if num == 3 or num == 4:DATA(X if num == 4 and menuval.val == 2:DATA for i in (0,1,2,0,2,3):DATA, file.write('%s ' % face.v[i].index)DATA P else:DATA for vert in face.v:DATA$ file.write('%s ' % vert.index)DATA  file.write("]")DATA` file.write('\n"P" [')DATA for vert in mesh.verts:DATAD file.write("%s %s %s " % (vert.co[0], vert.co[1], vert.co[2]))DATA` file.write('] ')DATA if mesh.faces[0].smooth:DATA file.write(' "N" [')DATA0 for vert in mesh.verts:DATADx file.write("%s %s %s " % (vert.no[0], vert.no[1], vert.no[2]))DATA file.write(']')DATA$( if mesh.hasVertexColours() == 1:DATA(x vertexcol = range(len(mesh.verts))DATA file.write('\n"Cs" [')DATA for face in mesh.faces:DATA` num = len(face.v)DATA if num == 3 or num == 4:DATA$ for vi in range(len(face.v)):DATA0@ vertexcol[face.v[vi].index] = face.col[vi]DATA for vc in vertexcol:DATAD file.write('%s %s %s ' % (vc.r/256.0, vc.g/256.0, vc.b/256.0))DATAX file.write(']')DATA if (menuval.val != 2):DATA if mesh.hasFaceUV() == 1:DATA( file.write('\n"st" [')DATAp for face in mesh.faces:DATA num = len(face.v)DATA  if num == 3 or num == 4:DATA$P for vi in range(len(face.v)):DATAD file.write('%s %s ' % (face.uv[vi][0], 1.0 - face.uv[vi][1]))DATA file.write(']')DATAP else:DATA, if (len(mesh.faces[0].uv) != 0):DATA file.write('\n"st" [ ')DATA( vtuv = [] DATA(h for i in range(len(mesh.verts)): DATA vtuv.append(0) DATA for f in mesh.faces: DATA H for i in range(len(f.uv)): DATA uv = f.uv[i]DATA  uv = uv[0], 1.0 - uv[1]DATA ( vtuv[f.v[i].index] = uvDATAx for c in vtuv:DATA for d in c: DATA file.write('%s '%d)DATA@ file.write(']')DATA file.write('\n')DATADATA0def polygon(mesh, meshfile, meshobj, meshnum):DATAP global meshobjects, iDATA i = 0DATA  update = 5DATA  colorif = 0DATAH  perso = 0.0DATA  pixels = 0.0DATA  facenum = len(mesh.faces)DATA  for face in mesh.faces:DATAX  if mesh.materials:DATA$  matname=mesh.materials[0].nameDATA  try:DATA0(  material = Blender.Material.Get(matname)DATA<  if (colorif != material.R + material.G + material.B):DATA4  colorif = material.R + material.G + material.BDATATP  meshfile.write("\t\tColor [%s %s %s]\n" %(material.R, material.G, material.B))DATA  except:DATA   passDATA @  if len(mesh.faces[i].v) == 3:DATA  vertar = 3DATA  else:DATA vertar = 4DATAH if face.smooth:DATA smooth = 1DATA else:DATA smooth = 0DATA8@ writePoly(mesh,face, meshfile, i, vertar, smooth);DATA  i = i + 1DATA( if ((i == update) or (i == facenum)):DATA8 update = update + 5DATA pixels = 619DATA( perso = float(i) / float(facenum)DATA, qwerty = float(pixels) * float(perso)DATA$p drawBar(meshnum, qwerty, pixels)DATADATA<def textureUV(i, mesh, va, vb, vc, meshfile, face, number):DATAX try:DATA etest = face.uv[0][0]DATA  except:DATA  returnDATAH meshfile.write('"st" [ ')DATA if (number == 1):DATA for x in [0, 1, 2]:DATA( meshfile.write("%s "%face.uv[x][0])DATA0p meshfile.write("%s "%(1.0 - face.uv[x][1]))DATA if (number == 2):DATA$ if len(mesh.faces[i].v) == 3: DATA ` returnDATA for x in [0, 2, 3]:DATA( meshfile.write("%s "%face.uv[x][0])DATA08 meshfile.write("%s "%(1.0 - face.uv[x][1]))DATA meshfile.write(']\n')DATADATA8def writePoly(mesh, face, meshfile, i, vertar, smooth):DATA$x meshfile.write('Polygon "P" [ ')DATA for x in [0, 1, 2]:DATA for y in range(3):DATAX try:DATA4 meshfile.write('%s '%mesh.faces[i].v[x].co[y])DATA except Error:DATA 0 print iDATA h print xDATA  print yDATA meshfile.write(']\n')DATA  if (smooth == 1):DATA` meshfile.write('"N" [')DATA for x in [0, 1, 2]:DATA for y in range(3):DATA48 meshfile.write('%s '%mesh.faces[i].v[x].no[y])DATA meshfile.write(']\n')DATA  number = 1DATA4 textureUV(i,mesh,0,1,2, meshfile, face, number)DATAx if (vertar == 4):DATA$ meshfile.write('Polygon "P" [ ')DATA for x in [0, 2, 3]:DATAP for y in range(3):DATA4 meshfile.write('%s '%mesh.faces[i].v[x].co[y])DATA meshfile.write(']\n')DATA@ if (smooth == 1):DATA meshfile.write('"N" [')DATA for x in [0, 2, 3]:DATA for y in range(3):DATA4X meshfile.write('%s '%mesh.faces[i].v[x].no[y])DATA meshfile.write(']\n')DATA  number = 2DATA4@  textureUV(i,mesh,0,1,2, meshfile, face, number)DATA DATA def general(meshfile, mesh):DATA ! index = 0DATA,X! meshfile.write('PointsGeneralPolygons [')DATA! for face in mesh.faces:DATA! meshfile.write('1 ')DATA@" index = index + 1DATA" meshfile.write(']\n[')DATA " index = 0DATA# for face in mesh.faces:DATA H# meshfile.write(str(nr) + ' ')DATA# index = index + 1DATA# meshfile.write(']\n[')DATA $ index = 0DATAX$ for f in mesh.faces:DATA$ for v in f.v:DATA($ meshfile.write(str(v.index) + ' ')DATA8% index = index + 1DATAx% meshfile.write(']\n"P" [')DATA % index = 0DATA$% for x in range(len(mesh.verts)):DATAH& for y in range(3):DATA4& meshfile.write(str(mesh.verts[x].co[y]) + '')DATA& index = index + 1DATA0' meshfile.write(']\n')DATAx'DATA 'def bilinear(meshfile, mesh):DATA' f = 0DATA0( for face in mesh.faces:DATA,x( meshfile.write('Patch "bilinear" "P" [ ')DATA( for x in [3, 2, 0, 1]:DATA) for y in range(3):DATA4`) meshfile.write('%s '%mesh.faces[f].v[x].co[y])DATA) meshfile.write(']\n')DATA* if face.smooth:DATAH* meshfile.write('"N" [ ')DATA* for x in [3, 2, 0, 1]:DATA* for y in range(3):DATA4 + meshfile.write('%s '%mesh.faces[f].v[x].no[y])DATA+ meshfile.write(']\n')DATA + f = f + 1DATA,DATA 0,def subdivmesh(meshfile, mesh):DATA, if menuval.val != 2:DATA, if mesh.hasFaceUV() == 1:DATA<- meshfile.write('Declare "st" "facevarying float[2]"\n')DATA8x- meshfile.write('SubdivisionMesh "catmull-clark" [')DATA- for face in mesh.faces:DATA(. num = len(face.v)DATA h. meshfile.write('%s '%(num))DATA. meshfile.write(']\n[')DATA/ for face in mesh.faces:DATAH/ for vert in face.v:DATA(/ meshfile.write('%s ' % vert.index)DATAD/ meshfile.write(']\n["interpolateboundary"] [0 0] [] []\n"P" [') DATAX0 for vert in mesh.verts:DATAH0 meshfile.write("%s %s %s " % (vert.co[0], vert.co[1], vert.co[2]))DATA1 meshfile.write(']')DATA`1 if (menuval.val != 2):DATA1 if mesh.hasFaceUV() == 1:DATA 1 meshfile.write('\n"st" [')DATA@2 for face in mesh.faces:DATA2 num = len(face.v)DATA 2 if num == 3 or num == 4:DATA$ 3 for vi in range(len(face.v)):DATAHp3 meshfile.write('%s %s ' % (face.uv[vi][0], 1.0 - face.uv[vi][1]))DATA3 meshfile.write(']')DATA$04 if mesh.hasVertexColours() == 1:DATA(4 vertexcol = range(len(mesh.verts))DATA 4 meshfile.write('\n"Cs" [')DATA(5 for face in mesh.faces:DATAp5 num = len(face.v)DATA5 if num == 3 or num == 4:DATA$6 for vi in range(len(face.v)):DATA0P6 vertexcol[face.v[vi].index] = face.col[vi]DATA6 for vc in vertexcol:DATAH6 meshfile.write('%s %s %s ' % (vc.r/256.0, vc.g/256.0, vc.b/256.0))DATAp7 meshfile.write(']')DATA7 meshfile.write('\n')DATA8DATA08def points(meshfile, mesh):DATA x8 meshfile.write('Points "P" [')DATA8 for vert in mesh.verts:DATAH9 meshfile.write("%s %s %s " % (vert.co[0], vert.co[1], vert.co[2]))DATA@9 meshfile.write('] "constantwidth" [%s]\n' % (pointwidth.val))DATA9DATA (:def createGI(ribfile, frames):DATA0x: if (areagi.val == 1) and (menuval.val !=6):DATA8: ribfile.write('\tDeclare "casts_shadows" "string"\n')DATAH@; ribfile.write('\tAttribute "render" "casts_shadows" ["opaque"]\n')DATAT; ribfile.write('\tLightSource "ambientlight" 998 "lightcolor" [0.02 0.02 0.02]\n')DATA(8< ribfile.write('\tAttributeBegin\n')DATA@< ribfile.write('\t\tAttribute "identifier" "name" ["sky"]\n')DATA`= ribfile.write('\t\tConcatTransform [1 0 0 0 0 1 0 0 0 0 1 0 -1573.14 307.099 -988.299 1]\n')DATAX= ribfile.write('\t\tAttribute "render" "visibility" [3]\n') # invisible to the cameraDATA(> ribfile.write('\t\tAttributeBegin\n')DATA,p> ribfile.write('\t\t\tColor [1 1 1]\n')DATA,> ribfile.write('\t\t\tOrientation "rh"\n')DATA0 ? ribfile.write('\t\t\tReverseOrientation\n')DATA0? ribfile.write('\t\t\tSurface "constant"\n')DATAL? ribfile.write('\t\t\tAttribute "light" "nsamples" [%s]\n'%gisteps.val)DATA@X@ ribfile.write('\t\t\tAttribute "light" "shadows" ["on"]\n')DATAh@ ribfile.write('\t\t\tAreaLightSource "arealight" 1 "lightcolor" [1 1 1] "intensity" [10000000000]\n')DATA4`A ribfile.write('\t\t\tSphere 50000 0 50000 360\n')DATA(A ribfile.write('\t\tAttributeEnd\n')DATA$B ribfile.write('\tAttributeEnd\n')DATA(hB ribfile.write('\tIlluminate 1 1\n')DATA4B if (indirectgi.val == 1) and (menuval.val !=6):DATA C if (finalgather.val == 0):DATAPpC ribfile.write('\tAttribute "indirect" "float maxerror" [%s]\n'%maxerror.val)DATAXC ribfile.write('\tAttribute "indirect" "float maxpixeldist" [%s]\n'%maxpixeldist.val)DATAxD else:DATAHD ribfile.write('\tAttribute "indirect" "float maxpixeldist" [0]\n')DATAP(E ribfile.write('\tAttribute "indirect" "integer nsamples" [%s]\n'%gisteps.val)DATA4E ribfile.write('\tLightSource "indirect" 42\n\n')DATAF if (gisphere.val == 1):DATA(PF ribfile.write('\tAttributeBegin\n')DATAXF ribfile.write('\t\tAttribute "render" "visibility" [3]\n') # invisible to the cameraDATA(0G ribfile.write('\t\tColor [1 1 1]\n')DATA0G ribfile.write('\t\tSurface "constant"\n')DATA8G ribfile.write('\t\tSphere 2000 -2000 2000 360\n')DATA(PH ribfile.write('\tAttributeEnd\n')DATAHDATAHdef render(ribfile):DATA I if (os.name != "posix"):DATAhI if (menuval.val == 1):DATA4I os.system('%s %s'%(prmanrenderer.val, ribfile))DATAJ elif (menuval.val == 2):DATA4XJ os.system('%s %s'%(bmrtrenderer.val, ribfile))DATAJ elif (menuval.val == 3):DATA8K os.system('%s %s'%(entropyrenderer.val, ribfile))DATAhK elif (menuval.val == 4):DATA0K os.system('%s %s'%(dlrenderer.val, ribfile))DATAL elif (menuval.val == 5):DATA4XL os.system('%s %s'%(aqsisrenderer.val, ribfile))DATAL elif (menuval.val == 6):DATA4M os.system('%s %s'%(pixierenderer.val, ribfile))DATA`M elif (os.name == "posix"):DATAM if (menuval.val == 1):DATA8M os.system('%s %s &'%(prmanrenderer.val, ribfile))DATAXN elif (menuval.val == 2):DATA4N os.system('%s %s &'%(bmrtrenderer.val, ribfile))DATAO elif (menuval.val == 3):DATA8HO os.system('%s %s &'%(entropyrenderer.val, ribfile))DATAO elif (menuval.val == 4):DATA4O os.system('%s %s &'%(dlrenderer.val, ribfile))DATAXP elif (menuval.val == 5):DATA8P os.system('%s %s &'%(aqsisrenderer.val, ribfile))DATAQ elif (menuval.val == 6):DATA8PQ os.system('%s %s &'%(pixierenderer.val, ribfile))DATAQDATAQdef closeFile(ribfile):DATA0R ribfile.close()DATApRDATARdef writeFrame(ribfile):DATAR global sshader, cframeDATA 0S display = Scene.GetCurrent()DATA,S context = display.getRenderingContext()DATAS frames2 = 0DATA(T display = Blender.Scene.GetCurrent()DATApT if (anim.val == 1):DATA8T frames = context.endFrame() - context.startFrame()DATA U else:DATAXU frames = 0DATAU if (anim.val == 1):DATA U cframe = context.startFrame()DATA0V else:DATA$hV cframe = Blender.Get('curframe')DATA V for x in range(frames + 1):DATA$W Blender.Set('curframe', cframe)DATA8XW print 'Exporting Frame: %s'%Blender.Get('curframe')DATA$W renderShadows(ribfile, frames2)DATA,X ribfile.write('\nFrameBegin %s\n'%cframe)DATA(hX writeHeader(ribfile, frames, frames2)DATAX lampobj = 0DATAY if (motionblur.val == 1):DATA(HY ribfile.write('MotionBegin [0 1]\n')DATA$Y Blender.Set('curframe', cframe)DATA$Y writeTransform(ribfile, lampobj)DATA<@Z Blender.Set('curframe', cframe + motionblurframe.val)DATA$Z writeTransform(ribfile, lampobj)DATA$Z Blender.Set('curframe', cframe)DATA H[ ribfile.write('MotionEnd\n')DATA[ else:DATA$[ writeTransform(ribfile, lampobj)DATA \ if (rgba.val == 1):DATAh\ channels = "rgb"DATA\ elif (rgba.val == 2):DATA\ channels = "rgba"DATA8] elif (rgba.val == 3):DATA] channels = "rgbz"DATA] elif (rgba.val == 4):DATA^ channels = "z"DATAP^ if (buffer.val == 1):DATAl^ ribfile.write('Display "%s/%s%05d.tif" "framebuffer" "%s"\n'%(imagesdir, image.val, cframe, channels))DATA0_ if (file.val == 1):DATAdx_ ribfile.write('Display "%s/%s%05d.tif" "file" "%s"\n'%(imagesdir, image.val, cframe, channels))DATA` if (preworldra.val == 1):DATA<P` ribfile.write('ReadArchive "%s"\n'%(preworldrafile.val))DATA$` ribfile.write('WorldBegin \n')DATA a if (postworldra.val == 1):DATA@Xa ribfile.write('\tReadArchive "%s"\n'%(postworldrafile.val))DATA0a if (menuval.val == 1) or (menuval.val == 4):DATAD(b ribfile.write('\tAttribute "visibility" "integer trace" [1]\n')DATAb if (menuval.val == 3):DATA@b ribfile.write('\tAttribute "visibility" "reflection" [1]\n')DATA<Pc ribfile.write('\tAttribute "visibility" "shadow" [1]\n')DATA c #PixieDATAc if (occlusion.val == 1):DATAl8d ribfile.write('\tLightSource "ambientocclusion" 1 "numSamples" %s\n'%(int(pow(2,ambiSamples.val+6))))DATAd if (indirect.val == 1):DATAhe ribfile.write('\tLightSource "ambientindirect" 1 "numSamples" %s\n'%(int(pow(2,ambiSamples.val+6))))DATAe #End PixieDATAe ambientLight(ribfile)DATA8f checkLamps(ribfile)DATAf if (gi.val == 1):DATA f createGI(ribfile, frames)DATAg if (hdri.val == 1):DATAXg if (menuval.val == 3):DATA(g ribfile.write('\tAttributeBegin\n')DATADg ribfile.write('\t\tAttribute "visibility" "reflection" [1]\n')DATAdhh ribfile.write('\t\tSurface "envsurf" "string envname" ["%s"] "float blur" [0]\n'%(hdritex.val))DATA4h ribfile.write('\t\tSphere 50000 0 50000 360\n')DATA(Xi ribfile.write('\tAttributeEnd\n')DATAPi createObjects(ribfile, cframe, 0, frames2) # 0 is for the shadows variableDATA 0j ribfile.write('WorldEnd \n')DATA j ribfile.write('FrameEnd\n')DATAj cframe = cframe + 1DATAk frames2 = frames2 + 1DATA`kDATA4kdef export(): # start the export stuff from hereDATAXk global selectedtype, selectedname, xbar, texturefile, shadernametemp, partitionnameDATA8xl newdirs() # make sure all the directories are thereDATA$l xbar = 10 # reset the progressbarDATA80m selectedtype = 'Type:' # reset the object editor stuffDATAm selectedname = ''DATA4m filedir = os.path.normpath(pdir + filename.val)DATAD8n ribfile = open(filedir, 'w') # open the main ribfile (default.rib)DATA4n if ((menuval.val == 4) & (os.name != "posix")):DATAo ribfile.write('ReadArchive "%s%s"\n'% os.path.splitdrive( os.path.normcase( os.path.normpath(partitionname + pdir + "/texturefile.rib") ) ) )DATAo else:DATADp ribfile.write('ReadArchive "%s"\n'% (pdir + "/texturefile.rib"))DATAdpp texturefile = open(os.path.normpath(pdir + 'texturefile.rib'), 'w') # open the texture rib fileDATAq if (menuval.val == 5):DATAHq texturefile.write('#\n')DATA,q writeFrame(ribfile) # write all the framesDATA0q closeFile(ribfile) # close the main ribfileDATAHr texturefile.close()DATA8r selectedtype = 'Type:' # reset the object editor stuffDATAr selectedname = ''DATA(8s surfaceshadername.val = shadernametempDATAHs Register (gui, event, bevent) # make sure all gui values are in placeDATA4t if (rendert.val == 1): # if the renderbutton is onDATA4ht render(pdir + filename.val) # render the rib fileOBxG}OBCube.001@gf???????i!3?i!3gf?????DOBd?? #=?>=?@???|p|8)DATA,|I=L> ף ף;??>OB}GXxOBSphere`?????????????DOBd?? #=?>=?@???hY0ZDATA,I=L> ף ף;9S8S뿯8Sk@9Sk@?DATAD7SubsurfOBXGP}OBCube???????i!3?i!3?????DOBd?? #=?>=?@???xІ(q(^DATA,xI=L> ף=?@???pȋKDATA,pI=L> ף ף;ꢿꢿꢿ"@"@?OBHGPOBCylinder333333??????????333333???????DOBd?? #=?>=?@???hhDATA,hI=L> ף ף;L=4[)2 ?Eƶ?(>(>@4>ME@.`MECube.0018 ( 3?L>?DATA(3?L>II?LILL>I?L>?III>L?IIL?IL>?IIDATA0 ############DATAx/ME`.@MESphereHx@4f8S?9S?f?DATAH3?BxE>'jI6>\="jI>T>u=zw9?>Roj^l?>f_݆Z?d>J#IH!Gz??Ћ ’0?S?Bt=?ԋ ?4[mߕ_??4Õ_{?{?B<<_l?^l?Ћ dd00T?1T?J#I´´!G5?5?Z9?9?ͻoj>>u=88w2 >2 >ݵݵjI\=6>"jIT>>u=zw>9?Roj>]l?_fZd>?J#IHװ!G?y?Ћ ’0S??Bҋ ?s=?4m[_S+?4ક_y?Bx&2t=?Ћ 0ׄ?J#I!Gԋ ?ZL#I?ojQ0ы ?u=wM࿱E>'jI\6>("jIT>u=3zw9?4Rojþ\l?"fZd?J#I(!Gy?Ћ @-’0S?B 0Ӌ r=?4 [_?41<Õ_{{?BX<]l]l?Ћ Sd00T.T?J#I>K´!G55??Z99?E2ojþ>u=8w2 1 >#JݵjI6\=`jIT>u=)w9>Aoj[l>S_݆Zd>J#IPbH!Gx>Ћ >m0S?Bsr=Ћ ?4Nmߕ_X4 U_yB}s=(C2Ћ ?v0BԳJ#Iij!Gys}ZZK#IV4*GojЋ lyIu=,wEOhjI6\`(jITu=)3w9A4ojZlþS"ZdJ#IPb(!GxЋ >m@-0SBs 0q=Ӌ 4N _41<1<_{{BXX\l[lЋ SS0+T.TJ#I>K>K!G55??Z99E2E2ojþþu=w0 1 #J#JjI\6(`jITu=3)w񙾿94AojþYl"SZdJ#I(Pb!GwЋ @->m0SB 0sϋ q=4 N_"34 U_y2B}`r=Ћ ?v03J#Iij!Gf[3}ZZB I#IGoj&2ϋ u=,wt'2EhjI\=6`jIT>u=)w>9Aoj>Wl_ݚSZd>J#IHPb!G>wЋ >m0S?Bsҋ ?p=4mߥN_?41<_{?{BK!G5?5?Z9?9E2oj> þu=8w0 >/ ݵ#JjI6>\#(jI>Tu=z3w9?R4ojWl? þf"Z?dJ#I(!Gv?Ћ ’@-0?SB 0p=?΋ 4[ _?v44_p=? 2Ћ 0?PJ3J#I!G?W$3ZH#I?2]3oj΋ ?JO2u=w&4?$3iٿ,(V?3nÿGaf??/3hf}Zzd?I4Wij߸yi?(2)4?v6S?3,4gf&4]Vyi?&4gf&4VVm}Ŵ?WPbH߸ƻ?ŶhfS_zEq? ȾnÿA䑕`f&?ىiٿ)(m>aĽ]ו5>5q͏2וƶ>Ŷiٿ8(8?8nÿE2͑6Sk?5Skhf?zC[?A[W>K´߸Ȼ?Ȼ)4Sd3?3uX<cf?bfgf&4iBV+4?yiٿgf&4#;V90?<տu 0df&?ȿ)4@-’?}ŴW(߸ʶ>ƻhf"fz >Eqnÿ4Rى>`f&iٿ3z(h=m濣Bו}2Gו92'4iٿ( 6Vnÿ鸑Ύ3bfhfzwX$4fÿW߸ \${iٿ)4Ю2ux48Sgf&4V'4ziٿgf&4;V90<տuef&ȿ)4’ŴWHװ߸ȶǻhf_fz ȾFqnÿRىaf&iٿz(bĽm]Bו55濏22וƶȶiٿ88(88nÿͻ͑8Sk9SkhfzC[E[W´´߸ɻɻ)4dd33u<<bfdfgf&4Vziٿ-4gf&4;V<տ90uȿef&)4’ŴWH߸Ȼ̶hff_zGq ȾnÿR䑕bf&ىiٿz(mhĽB]וL濁Gו)4Siٿ(X D]nÿdfPBhfziÿ W߸}iٿ}2)4濃Юux9Srgf&4V{iٿ)4?gf&4;#V<տ90?u 0ȿff&?)4’@-Ŵ?W(߸ɻ̶>hff"zIq >nÿR4bf&ى>iٿz3(me=Bו55>濏2qוɶɶ>iٿ8(88?nÿE2:Sk:Sk?hf?zF[E[?W´>K߸ʻʻ?)4dS33?umŴ?WHPb߸ζɻ?hf_ݚSz ȾIq?nÿAىcf&?iٿ)(iĽm>]וep>ו 1*4?iٿ,(X?nÿG.4ff?hf}Zzⱬk?Wij߸C2~i?)4?vЮ?u}m_:S?gf&4]V+4?}i?gf&4#VV90?m?Ŵ?W(Pb߸Ͷ>ʻ?hf"Sz >Jq?nÿ4Aى>df&?iٿ3)(h=m>濣ו5>5>qqו̶>̶>iٿ(8?8?nÿE2E2;Sk?=Sk?hf??zF[?G[?W>K>K߸˻?ʻ?)4SS3?3?uXXff?ff?gf&4iBiBV~i?.4?gf&4V#Vm@-Ŵ??WPb(߸ʻ?϶>hfS"zKq? >nÿA4df&?ى>iٿ)3(m>i=ו>ו?v}DATAx0######## # # # # # # # # ############### ## ## ## ############# # # !#!#!"# ##"##$##$#%#$%#&#%&#'#&'#(#'(#)#()#)*#*+#(+#+,#',#,-#&-#-.#%.#./#$/#/0##0#01#"1#12#03#23#/4#34#.5#45#-6#56#,7#67#+8#78#*9#89#9:#:;#8;#;<#7<#<=#6=#=>#5>#>?#4?#?@#3@#@A#2A#AB#@C#BC#?D#CD#>E#DE#=F#EF#<G#FG#;H#GH#:I#HI#IJ#JK#HK#KL#GL#LM#FM#MN#EN#NO#DO#OP#CP#PQ#BQ#QR#PS#RS#OT#ST#NU#TU#MV#UV#LW#VW#KX#WX#JY#XY#YZ#Z[#X[#[\#W\#\]#V]#]^#U^#^_#T_#_`#S`#`a#Ra#ab#`c#bc#_d#cd#^e#de#]f#ef#\g#fg#[h#gh#Zi#hi#ij#jk#hk#kl#gl#lm#fm#mn#en#no#do#op#cp#pq#bq#qr#ps#rs#ot#st#nu#tu#mv#uv#lw#vw#kx#wx#jy#xy#yz#w{#{|#v|#|}#u}#}~#t~#~#s#r##{#x#z# z#{#|#}#~## !#z!r####y!#j!q##b###i!#Z!a##R###Y!#J!Q##B###I!#:!A##2###9!#*!1##"###)!#!!#####!# !######################################################################################################################################################################################################################DATA/~~}}||{{z           !! #" $#%$&%'&(')(()*+'(+,&',-%&-.$%./#$/0"#0110320/43/.54.-65-,76,+87+*9889:;78;<67<=56=>45>?34?@23@AA@CB@?DC?>ED>=FE=<GF<;HG;:IHHIJKGHKLFGLMEFMNDENOCDOPBCPQQPSRPOTSONUTNMVUMLWVLKXWKJYXXYZ[WX[\VW\]UV]^TU^_ST_`RS`aa`cb`_dc_^ed^]fe]\gf\[hg[Zihhijkghklfglmefmndenocdopbcpqqpsrpotsonutnmvumlwvlkxwkjyxzxy{wxvw{|uv|}tu}~st~rsz ryzjyrqqbijZibaaRYZJYRQQBIJ:IBAA29:*9211")*)"!!  ME.`MECubeجP 4mf?pf?if?DATA3gf?if?ifIIgf?ififIifefifbfnf?ifInf?`f?if?III]f?rfif?IIlfdfif?Iffif?if?IIDATA0 ############DATAxP/ME.MESphere.001p0BT*?*?>DATA3*?HljM?M;Z9H?*0h >j >*r"r"&*r"(<%f ̾*r"ݤ*( >C40>DATAhh3L=L=C40j=j=( >C40VL=LC40j=j( C40%LLC40–( 01C40%LL=C40j=J( >C40VL=L=C40>j=j=^( >p3C40>V^L=LC40>j=^0( C40>%^LLC40>–^( 83C40>%^LL=C40>j=^ȰZ4( >C40>V^C40C40>DATA0(!#!! # !#! # !#! # !#! # !#! # !#! #!#!#!## ## # # # ###DATA/            GLOB6ۿr{ DNA18d(SDNANAME*next*prev*first*lastxyzwxminxmaxyminymax*newid*libname[24]usflagpadid*idblock*filedataname[160]totcurvecurblocktypeshowkeyposcurvaltypeadrcodetotelem*data*weightsname[32]vgroup[32]sliderminslidermax*refkeyelemstr[32]elemsizeblock*ipo*fromtotkeyslurph**scripts*flagactscripttotscript*line*formatlenblen*nameflagsnlineslines*curl*sellcurcselc*undo_bufundo_posundo_len*compiledsizeseekpassepartalphapad1clipstaclipendlensortho_scaledrawsizeYF_dofdistYF_apertureYF_bkhtypeYF_bkhbiasYF_bkhrotscriptlink*anim*ibuf*mipmap[10]oklastframelastqualitytpageflagtotbindxrepyreptwstatwendbindcode*repbind*packedfilelastupdatelastusedanimspeedreserved1reserved2texcomaptomaptonegblendtype*object*texprojxprojyprojzmappingofs[3]size[3]texflagcolormodelrgbkdef_varcolfacnorfacvarfacdispfacwarpfac*handle*pname*stnamesstypesvars*varstr*result*cfradata[32](*doit)()(*callback)()versionaipotypedata[16]*ima*cube[6]imat[4][4]stypenotlaycuberesdepthrecalclastsizenoisesizeturbulbrightcontrastrfacgfacbfacfiltersizemg_Hmg_lacunaritymg_octavesmg_offsetmg_gaindist_amountns_outscalevn_w1vn_w2vn_w3vn_w4vn_mexpvn_distmvn_coltypenoisedepthnoisetypenoisebasisnoisebasis2imaflagcropxmincropymincropxmaxcropymaxxrepeatyrepeatextendcheckerdistnablaframesoffsetsfrafie_ima*plugin*coba*envfradur[4][2]modetotexenergydistspotsizespotblendhaintatt1att2bufsizesampshadspotsizebiassoftray_sampray_sampyray_sampzray_samp_typearea_shapearea_sizearea_sizeyarea_sizeztexactshadhalostepYF_numphotonsYF_numsearchYF_phdepthYF_useqmcYF_bufsizeYF_padYF_causticblurYF_ltradiusYF_glowintYF_glowofsYF_pad3YF_glowtypeYF_pad2*mtex[10]layspecrspecgspecbmirrmirgmirbambrambbambgambemitangspectraray_mirroralpharefspeczoffsaddtranslucencyfresnel_mirfresnel_mir_ifresnel_trafresnel_tra_ifilterray_depthray_depth_traharseed1seed2mode2flarecstarclinecringchasizeflaresizesubsizeflarebooststrand_stastrand_endstrand_easergbselpr_typepr_backpr_lampseptexpad4pad5diff_shaderspec_shaderroughnessrefracparam[4]rmsdarkness*ramp_col*ramp_specrampin_colrampin_specrampblend_colrampblend_specramp_showpad3rampfac_colrampfac_specfrictionfhreflectfhdistxyfrictdynamodepad2YF_arYF_agYF_abYF_dscaleYF_dpwrYF_dsmpYF_presetYF_djitname[256]scale*bbi1j1k1i2j2k2selcol1selcol2quat[4]expxexpyexpzradrad2s*mat*imatelemsdisp**mattotcolloc[3]rot[3]wiresizerendersizethreshvec[3][3]alfaweighth1h2f1f2f3hidevec[4]mat_nrpntsupntsvresoluresolvorderuordervflaguflagv*knotsu*knotsv*bp*beztcharidxkernhnurb*bevobj*taperobj*textoncurve*path*keybevpathlenbevresolwidthext1ext2spacemodespacinglinedistshearfsizewordspaceulposulheightxofyoflinewidth*strfamily[24]*vfont*vfontb*vfonti*vfontbisepchartotboxactbox*tbselstartselend*strinfocurinfo*obname[128]maxrcttotrctvartypetotvertipoextraprtbitmask*driver*tpageuv[4][2]col[4]transptileunwrapeffect*mface*tface*dface*mvert*medge*dvert*mcol*msticky*texcomesh*oc*sumohandletotedgetotfacecubemapsizesmoothreshsubdivsubdivrsubsurftypev1v2v3v4edcodecreasedef_nr*dwtotweightco[3]no[3]co[2]*errormodifiersubdivTypelevelsrenderLevels*emCache*mCachestartlengthrandomizeseedaxistolerancepercentfaceCountstartxstartyheightnarrowspeeddamptimeoffslifetimedeformflagparentinv[4][4]cent[3]falloff*indexartotindexforceoperationpntswopntsuopntsvopntswtypeutypevtypewfufvfwdudvdw*defvec[8][3]dvec[3]max**obpartypepar1par2par3parsubstr[32]*pardata*parent*track*action*poseconstraintChannelsnetworkdefbasemodifiersdloc[3]orig[3]dsize[3]drot[3]dquat[4]obmat[4][4]colbitstransflagipoflagtrackflagupflagnlaflagprotectflagipowinscaflagscavisflagboundtypedupondupoffdupstadupendsfctimemassdampinginertiaformfactorsofttimerdampingsizefacdtdtxactcolpropsensorscontrollersactuatorsbbsize[3]dfrasactdefgameflaggameflag2softflaganisotropicFriction[3]constraintsnlastripshooks*pd*soft*lifelbufportfluidsimFlagshapenrshapeflag*fluidsimSettings*derivedDeform*derivedFinalmat[4][4]curindexactivedeflectforcefieldpdef_damppdef_rdamppdef_permf_strengthf_powermaxdistpdef_sbdamppdef_sbiftpdef_sbofttotpointtotspring*bpoint*bspringnodemassgravmediafrictrklimitphysics_speedgoalspringgoalfrictmingoalmaxgoaldefgoalvertgroupinspringinfrictefrainterval**keystotpointkeyshow_advancedoptionsresolutionxyzpreviewresxyzrealsizeguiDisplayModerenderDisplayModeviscosityValueviscosityModeviscosityExponentgravxgravygravzanimStartanimEndgstarmaxRefineiniVelxiniVelyiniVelz*orgMesh*meshSurface*meshBBsurfdataPath[240]bbStart[3]bbSize[3]mistypehorrhorghorbhorkzenrzengzenbzenkambkfastcolexposureexprangelinfaclogfacgravityactivityBoxRadiusskytypephysicsEnginemisimiststamistdistmisthistarrstargstarbstarkstarsizestarmindiststardiststarcolnoisedofstadofenddofmindofmaxaodistaodistfacaoenergyaobiasaomodeaosampaomixaocolor*aospherehemiresmaxiterdrawtypesubshootpsubshootenodelimmaxsublamppamapamielmaelmimaxnodeconvergenceradfacgammaselcolsxsy*lpFormat*lpParmscbFormatcbParmsfccTypefccHandlerdwKeyFrameEverydwQualitydwBytesPerSeconddwFlagsdwInterleaveEveryavicodecname[128]*cdParms*padcdSizeqtcodecname[128]mixratemainpad[3]*avicodecdata*qtcodecdatacfraimagesframaptoframelenblurfacedgeRedgeGedgeBfullscreenxplayyplayfreqplayattribrt1rt2stereomodedimensionspresetfiltertypemaximsizexschyschxaspyaspxpartsypartssafetyborderwinposplanesimtypebufflagqualityscemoderendererocresrpad[2]alphamodedogammaosafrs_secedgeintsame_mat_reduxgausspostmulpostgammapostaddpostigammaposthuepostsatdither_intensityzminfocuszgammazsigmazblurGIqualityGIcacheGImethodGIphotonsGIdirectYF_AAYFexportxmlYF_nobumpYF_clamprgbyfpad1GIdepthGIcausdepthGIpixelspersampleGIphotoncountGImixphotonsGIphotonradiusYF_numprocsYF_raydepthYF_AApassesYF_AAsamplesGIshadowqualityGIrefinementGIpowerGIindirpowerYF_gammaYF_exposureYF_raybiasYF_AApixelsizeYF_AAthresholdbackbuf[160]pic[160]ftype[160]col[3]framename[64]cornertypeeditbutflagdegrstepturnextr_offsdoublimitsegmentsringsvertices*camera*world*setbase*basact*groupcursor[3]twcent[3]twmin[3]twmax[3]selectmodeproportionalprop_modeeditbutsize*ed*radioframing*toolsettingsaudiomarkers*theDagdagisvaliddagflagszoomblendximyim*rectspacetypeblockscale*areablockhandler[8]viewmat[4][4]viewinv[4][4]persmat[4][4]persinv[4][4]winmat1[4][4]viewmat1[4][4]viewquat[4]perspview*bgpic*localvdlocalviewlayactscenelockaroundcamzoomgridgridviewpixsizenearfargridlinesviewbutgridflagmodeselectmenunrtexnrtwtypetwmodetwflagtwdrawflagtwmat[4][4]clip[4][4]*clipbbafterdrawzbufxrayverthormaskmin[2]max[2]minzoommaxzoomscrollkeeptotkeepaspectkeepzoomoldwinxoldwinyrowbutv2d*editipoipokeyactname[32]constname[32]totipopinbutofschannellockmedian[3]cursenscuractaligntabomainbmainbo*lockpointexfromshowgrouprectxrectycurymodeltypescriptblockre_alignoldkeypresstab[7]*filelisttotfiletitle[24]dir[160]file[80]ofssortmaxnamelencollums*libfiledataretvalmenuact(*returnfunc)()*menupoopsvisiflagtree*treestoreoutlinevisstoreflagdeps_flags*imageimanrcurtile*texttopviewlinesfont_idlheightleftshowlinenrstabnumbercurrtab_setshowsyntaxunused_paddpix_per_linetxtscrolltxtbar*scriptredrawstitle[28]fasesubfasemouse_move_redrawimafasemxmydirslidirsli_linesdirsli_sxdirsli_eydirsli_exdirsli_himaslifileselmenuitemimasli_sximasli_eyimasli_eximasli_hdssxdssydsexdseydesxdesydeexdeeyfssxfssyfsexfseydsdhfsdhfesxfesyfeexfeeyinfsxinfsyinfexinfeydnsxdnsydnwdnhfnsxfnsyfnwfnhfole[128]dor[128]file[128]dir[128]*firstdir*firstfiletopdirtotaldirshilitetopfiletotalfilesimage_sliderslider_heightslider_spacetopimatotalimacurimaxcurimay*first_sel_ima*hilite_imatotal_selectedima_redraw*cmap*arg1outline[4]neutral[4]action[4]setting[4]setting1[4]setting2[4]num[4]textfield[4]textfield_hi[4]popup[4]text[4]text_hi[4]menu_back[4]menu_item[4]menu_hilite[4]menu_text[4]menu_text_hi[4]but_drawtypepad1[3]back[4]header[4]panel[4]shade1[4]shade2[4]hilite[4]grid[4]wire[4]select[4]lamp[4]active[4]transform[4]vertex[4]vertex_select[4]edge[4]edge_select[4]edge_seam[4]edge_facesel[4]face[4]face_select[4]face_dot[4]normal[4]bone_solid[4]bone_pose[4]strip[4]strip_select[4]vertex_sizefacedot_sizebpad[2]syntaxl[4]syntaxn[4]syntaxb[4]syntaxv[4]syntaxc[4]tuitbutstv3dtfiletipotinfotsndtacttnlatseqtimatimaseltexttoopsttimespec[4]dupflagsavetimetempdir[160]fontdir[160]renderdir[160]textudir[160]plugtexdir[160]plugseqdir[160]pythondir[160]sounddir[160]yfexportdir[160]versionsvrmlflaggameflagswheellinescrolluiflaglanguageuserprefviewzoomconsole_bufferconsole_outmixbufsizefontsizeencodingtransoptsmenuthreshold1menuthreshold2fontname[256]themesundostepscurssizetb_leftmousetb_rightmouselight[3]tw_hotspottw_flagtw_handlesizetw_sizetextimeouttexcollectrateobcenter_diavertbaseedgebaseareabase*sceneendxendysizexsizeyscenenrscreennrfullmainwinwinakthandler[8]*newvvec*v1*v2panelname[64]tabname[64]ofsxofsycontrolold_ofsxold_ofsysortcounter*paneltab*v3*v4*fullwinmat[4][4]headrctwinrctheadwinwinheadertypebutspacetypewinxwinyhead_swaphead_equalwin_swapwin_equalheadbutlenheadbutofscursorspacedatauiblockspanels*curscreen*curscenedisplaymodefileflagsglobalfname[80]*se1*se2*se3nrdone*stripdataorxory*newseqstartofsendofsstartstillendstillmachinestartdispenddispmulhandsize*strip*curelemfacf0facf1*seq1*seq2*seq3seqbase*soundlevelpancurposstrobe*effectdata*oldbasep*parseq*seqbasepmetastackedgeWidthangleforwardwipetypefMinifClampfBoostdDistdQualitybNoCompbuttypeuserjitstaendtotpartnormfacobfacrandfactexfacrandlifeforce[3]vectsizedefvec[3]mult[4]life[4]child[4]mat[4]texmapcurmultstaticstepomattimetexspeedtexflag2flag2negvertgroup_vvgroupname[32]vgroupname_v[32]*keysminfacused*idusedelemdxdylinkotypedataold*poin*oldpoinresetdistlastval*makeyqualqual2targetName[32]toggleName[32]value[32]maxvalue[32]materialName[32]damptimerdelaypropname[32]matname[32]axisflag*fromObjectsubject[32]body[32]pulsefreqtotlinks**linksinvertfreq2axisfbuttonbuttonfhathatfprecisionstr[128]*mynewinputstotslinks**slinksvalvalotime*actblendinprioritystridelengthstrideaxisreserved3sndnrmakecopycopymadepad[1]trackvolume*melinVelocity[3]localflagforceloc[3]forcerot[3]linearvelocity[3]angularvelocity[3]addedlinearvelocity[3]anotherpad[4]butstabutendminfacvisifacslowminloc[3]maxloc[3]minrot[3]maxrot[3]distributionint_arg_1int_arg_2float_arg_1float_arg_2toPropName[32]*toObjectbodyTypefilename[64]loadaniname[64]goaccellerationmaxspeedmaxrotspeedmaxtiltspeedrotdamptiltdampspeeddamp*sample*stream*newpackedfile*snd_soundpanningattenuationpitchmin_gainmax_gaindistancestreamlenloopstartloopendchannelshighpriopad[10]gaindopplerfactordopplervelocitynumsoundsblendernumsoundsgameengine*gkeypadfokeygobjectgkey*activechildbaserollhead[3]tail[3]bone_mat[3][3]arm_head[3]arm_tail[3]arm_mat[4][4]xwidthzwidthease1ease2rad_headrad_tailboneclassbonebasechainbaseghostepghostsizeconstflagikflag*bone*childiktree*b_bone_matschan_mat[4][4]pose_mat[4][4]pose_head[3]pose_tail[3]limitmin[3]limitmax[3]stiffness[3]ikstretchchanbasestride_offset[3]actnrtimeslidename[30]enforce*tariterationsrootbonesubtarget[32]orientweightgrabtarget[3]minmaxflagstickystuckcache[3]locallockflagfollowflagoffset[3]zmaxvolmodeplaneorglengthbulgestride_axisactstartactendstridelenrepeatblendoutstridechannel[32]TYPEcharucharshortushortintlongulongfloatdoublevoidLinkListBasevec2svec2ivec2fvec2dvec3ivec3fvec3dvec4ivec4fvec4drctirctfIDLibraryFileDataIpoKeyBlockKeyScriptLinkTextLineTextPackedFileCameraImageanimImBufMTexObjectTexPluginTexCBDataColorBandEnvMapLampWaveMaterialVFontVFontDataMetaElemBoundBoxMetaBallBezTripleBPointNurbCharInfoTextBoxCurvePathIpoDriverIpoCurveTFaceMeshMFaceMVertMEdgeMDeformVertMColMStickyOcInfoMDeformWeightModifierDataSubsurfModifierDataLatticeModifierDataCurveModifierDataBuildModifierDataMirrorModifierDataDecimateModifierDataWaveModifierDataArmatureModifierDataHookModifierDataSoftbodyModifierDataBooleanModifierDataLatticebDeformGroupLBufbActionbPosePartDeflectSoftBodyLifeFluidsimSettingsDerivedMeshObHookSBVertexBodyPointBodySpringWorldRadioBaseAviCodecDataQuicktimeCodecDataAudioDataRenderDataGameFramingTimeMarkerToolSettingsSceneGroupDagForestBGpicView3DSpaceLinkScrAreaView2DSpaceInfoSpaceIpoSpaceButsSpaceSeqSpaceFiledirentryBlendHandleSpaceOopsTreeStoreSpaceImageSpaceNlaSpaceTextSpaceScriptScriptSpaceTimeSpaceImaSelImaDirOneSelectableImaThemeUIThemeSpacebThemeSolidLightUserDefbScreenScrVertScrEdgePanelFileGlobalStripElemStripPluginSeqSequencebSoundMetaStackEditingWipeVarsGlowVarsEffectBuildEffPartEffParticleWaveEffTreeStoreElemOopsbPropertybNearSensorbMouseSensorbTouchSensorbKeyboardSensorbPropertySensorbCollisionSensorbRadarSensorbRandomSensorbRaySensorbMessageSensorbSensorbControllerbJoystickSensorbExpressionContbPythonContbActuatorbAddObjectActuatorbActionActuatorbSoundActuatorbCDActuatorbEditObjectActuatorbSceneActuatorbPropertyActuatorbObjectActuatorbIpoActuatorbCameraActuatorbConstraintActuatorbGroupActuatorbRandomActuatorbMessageActuatorbGameActuatorbVisibilityActuatorFreeCamerabSamplebSoundListenerSpaceSoundGroupKeyObjectKeyGroupObjectBonebArmaturebPoseChannelbActionChannelSpaceActionbConstraintChannelbConstraintbKinematicConstraintbTrackToConstraintbRotateLikeConstraintbLocateLikeConstraintbMinMaxConstraintbActionConstraintbLockTrackConstraintbFollowPathConstraintbDistanceLimitConstraintbRotationConstraintbStretchToConstraintbActionStripTLEN  0Phtdt0XP4@l`88,T< 4DXXD<<\@4@l( 8,\T (PD$$x$(T x H8th  8 ,@0,HhH,(lDLP@< <@Lx0848l(@0pPD<,4L,,,<8,<4XSTRC                   !"#$% &'( )*+,-./012345 678 9:;<=>?@ A!BC7 "DEFGHIJKLMNO*P#$Q%R%STUVWXYZ[\]^!_`abcd&efgh'i(jklmnopqrstuvwxyz{|) }~  *stu+*,'i##FGTUE(44y*#)+,-2rstuvFG&*P.*/_rstu     ef+ +!"#$%&'()&**+,-./012345678P09:1 !_2223;<=>?@ABCDEFGHIJ4KL43; M N*/OPqQpRSTU5 VWXYZ[\]^6_WX[^777`^abcdefghij6k5lm8n`09o:63; p N'q'r's*;tu/O vQpRqwPxyz{cd49|}~0000988<'===6k5l  <> ? 3; *u/O@> ABCDE?F qQpRP@`BGXCGA`DstuEHHH"IH7  JH'i"KH'i"LHMHNHO HyPHE0'iQ H'i"RHSH'iTab06*uUUU"3FpV''_ ''*;t3;WX    N  /OQpRD      !"#P$P % & ' ( )*+,-./ 0 1 2Y3Z4[5V6V789:\;]<]=^^^'>"?@Y ABCDEFGHIJK__ZLM`NaOPQRSTUVWXYZE[\]^0__`,\abcdefghijklmnopqrs?t?u?vwxyb8rz{|}~*&Pcddd'ie  f  0ghbef]B      !"#$i%E0'jjj&'k ()*+,E-./010'l'2b3l4# 5d6m789:;<=>? @cA iBkChsgDP EnFGHEo #(jBIJKLMp5qqNOrPQRSTUVWXYZ'2o[p\]^_`aHbcdefo8ghijklmnopqr3s tuv0swxyz{|}~qqqNOrPQtqqNOrPQuqqNOrPQ0s  *+kvqqNOrPQsk lMEw qqNOrPQsI0xqqNOrPQyz {qqNOrPQs   |}qqNOrPQs#Ik~ qqNOrPQksqqNOrPQ 7k qqNOrP07kqqNOrPsQqqNOrP     0%   !"#$%$&'()*+,-./0123456789:;<=>?@ABCDEFG"HIJKLMNOPQRSTUVW_-XYZ[\]^_`abcdefghijklmnopqrs tuvwxyz{|}~E0'   l @rrrNP     %RT 4 9 }~  & 4*l$Q      4)Z,Ny| "^  "     "E0"/""0"""E' ! "#$E0" %'&' "()*+,-. /0$ 10'" %2345' W6"789:cd; <=>?<@A 5'?B"CDl'2"' EFQRGHIJ "EKL'MNOPQRST "EKLm7UVWXYZ'[ \E0!]^ / _" ' `abcdefg h!_!i j*Aklmnop7qrstuvwxyz{qqNOrPs<0]"|''*QpRD    }' ~m   "Xp/   0"wE0  QpDtX * "cW qqNOrPQsW* c 'X0'cd'c'c' 'MW6' ' 'E0p   '*W67ENDB