BLENDER_v240REND tStageSRtLm}SRAnimation#MBQQwP~N~KDATA#nBDATABn)#KDATA)n`O"B~KDATA`O"n@)~DATA@nhY"`O"DATAhY"n)@~DATA)np)hY"1DATAp)n ")~1DATA "nGp)DATAGnM "1DATAMnMGDATAMnM~DATABo=$)BDATA=$oZ$B`O"#DATAZ$o M=$hY"@DATA MoNZ$)BDATANoHN Mp))DATAHNoNNp))DATANoNHN "@DATANo ON "hY"DATA OohON)GDATAhOoO Op)GDATAOoOhO "GDATAOo@POhY"p)DATA@PoPO)@DATAPoP@P#MDATAPoQP@MDATAQo`QPhY"MDATA`QoQQ`O"MDATAQo`QMMDATAQqxf#MM`O"~~~cdR(cDATARpSLink and MaterialsEditing>DATASpTRMeshEditingF>DATATpXUSAnim settingsObject>DATAXUp(VTDrawObjectF>DATA(VpVXUConstraintsObject>DATAVpW(VEffectsObjectDATAWpXVHooksObjectF>XUDATAXphYWParticle InteractionObject>(VDATAhYp8ZXScriptlinksScript>DATA8Zp[hYCameraEditingF>DATA[p[8ZOutputRender>DATA[p\[RenderRenderF>DATA\px][AnimRender>DATAx]pH^\FormatRender>DATAH^p_x]AnimAnim>DATA_p_H^SoundSound>DATA_p`_ListenerSoundF>DATA`pa_SequencerSound>DATAapXb`Curve and SurfaceEditingF>DATAXbp(caCurve ToolsEditing>DATA(cpXbCurve Tools1Editing>DATAc^d333?X @DhCQDhCC(BDC?z?DATATd`c333?X /9DATAxfqpgQ)B)p)~2K~2L~KKDATApgqPpxf@)G "?2?AHM00-gjnhh8iDATAhhp8iTransform PropertiesView3d[>DATA8iphh3D Viewport propertiesView3d>"DATAjYl333?(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 le8mj333?(X DATAx8mdml 333?(X 8. ǁ@#%%DATAman8m333?(X }lA@zA‰B}K -B- A@CC #<@-DATATn`m333?(X Open Text File/home/jerome/soft/3D/blender/blenderman0.1beta9.0/blenderman0.1beta9.0.py DATAPpqwpg "Gp)hY"??Pף~0~~0-rPvHqHqDATAHqpTransform PropertiesIpo!>DATA(r]ps333?/X yC̽̌?yC@-uu- #< #<`jFzD OByC̽̌?DATApsYPvr333?/X ??? ???? A???PA A!O?j?}GCHB? A B? #<CDATATPv`ps333?/X /9DATAwqPpM@hY"M~~~ #hz8|xyDATAxpyLink and MaterialsEditing>DATAypxMeshEditingF>DATAhz8{ 333?5X zCCHBC#?CFC= ADATA8{^8|hz333?5X #DhC`DpJgChCC(BDC?z?DATAT8|`8{333?5X /9SRt}m͂LSRBlenderManX~Xh(ÂP~N~KDATAX~n~DATA~n~X~KDATA~n~~KDATAnX~~DATAXn,DATAnX~,DATAn0DATAnX~0DATAXn,DATAn؀X0DATA؀nDATAn؀DATAXo~~DATAo聂XX~DATA聂o0X~XDATA0ox聂DATAxo0XDATAox~DATAoP~DATAPoDATAoPDATAo(XXDATA(opXDATApo(DATAopDATAoHXDATAHoX؀DATAo؅H؀DATA؅o DATA oh؅XDATAho ؀DATAqX~X?@Pף~+~~+ ,节DATApxOutputRender>DATAxpHRenderRenderF>DATAHpxAnimRender>DATApHFormatRender>DATA节 333?,>zCCHBC,?CFC= ADATA^节333?,>DhC?DhCC(BDC?z?mDATAY333?,>??? ???? A??@PA Aj?c3>}GCHB? A B? #<CDATAa333?,>@̌AR|B1@lA A@CC #<@DATAT`333?,>/9DATAq~~~1K~1K~KKDATAqXG@? JL~-/~-G~H/@8DATApȔOutputRender>DATAȔpRenderRender>DATAphȔAnimRender0>DATAhp8FormatRenderH>DATA8phPreviewMaterial>DATApؘ8MaterialMaterial>DATAؘpShadersMaterial0>DATApxؘTextureMaterialH>DATAxpHMap InputMaterialD>DATAHpxMap ToMaterial,>DATAp蜂HLink and MaterialsEditing>DATA蜂pMeshEditing>DATAp蜂Mesh ToolsEditing0>DATApXMesh Tools 1EditingH>DATAXp(RampsMaterial>DATA(pXMirror TranspMaterial0>ؘDATApȡ(PreviewLamp>DATAȡpLampLamp>DATAphȡShadow and SpotLamp0>DATAhp8Texture and InputLampH>DATA8phMap ToLampH>hDATApإ8PreviewTexture>DATAإpTextureTexture>DATApxإColorsTexture>إDATAxpHCloudsTexture0>DATAHpxAnim settingsObject>DATAp詂HDrawObject>DATA詂pHooksObject>DATAp詂ConstraintsObject0>DATApXEffectsObject0DATAXp(Particle InteractionObject0>DATA(pXPreviewWorld>DATApȮ(WorldWorld>DATAȮpMist / Stars / PhysicsWorld0>DATAphȮAmb OccWorld0>ȮDATAhp8Texture and InputWorldH>DATA8phMap ToWorldH>hDATA^333?LChCCpb@\CC(BDC?z?DATAY赂333?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.blendDATAq(ÂX؀Xʫ==o?--GH`wDATApTransform PropertiesView3di>"DATA eغ333?DATAxغd 333? > B@DATAY`غ333????]־Z?????]>Z??ʫ==o=>n? ;?ɾ>A,A]>Z??ʫ==o????]־Z???ɾ>A  B?=C]־Z?lJ@B@?1?dDATA`aP333?@ffzAbB@jA A@CC #<@DATAP^P`333?DdC>9C,DeCC(BDC?z?DATA(P]P333?zC AzC A #< #<`jFzD OBDATAT`P333? Open Text FileATH/home/jerome/soft/3D/blender/blenderman0.1beta9.0//../pts/../blenderman0.1beta9.0.py DATA(Âq؀?4@ JL//lgĂĥ Ă ĂDATA ĂpTransform PropertiesView3di>"DATAĂYǂ333?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 ǂe ȂĂ333?DATAx ȂdȂǂ 333? > B@DATAȂaʂ Ȃ333?@ffzAbB@jA A@CC #<@ɂɂDATA,ɂSC@ffPDATAʂ^˂Ȃ333?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@}SRModel 4-split΂тт ׂhׂP^`DATA΂n΂DATA΂nς΂`DATAςnHς΂`DATAHςnςςDATAςnςHςDATAςnЂςDATAЂnHЂςDDATAHЂnЂЂDDATAЂnЂHЂLDATAЂnтЂLDDATAтnHтЂL DATAHтnтт DATAтnHт DATAтo҂΂ςDATA҂oX҂т΂HςDATAX҂o҂҂΂ςDATA҂o҂X҂HςςDATA҂o0ӂ҂ςςDATA0ӂoxӂ҂΂ЂDATAxӂoӂ0ӂςHЂDATAӂoԂxӂЂHЂDATAԂoPԂӂςЂDATAPԂoԂԂςЂDATAԂoԂPԂЂЂDATAԂo(ՂԂHЂЂDATA(ՂopՂԂЂтDATApՂoՂ(ՂЂтDATAՂoւpՂHЂHтDATAւoHւՂςHтDATAHւoււтHтDATAւoւHւςтDATAւo ׂւЂтDATA ׂoւттDATAhׂqp΂ςςHς?@Pף `؂PDATA`؂p0قPreviewLamp>DATA0قpڂ`؂LampLamp@>DATAڂpڂ0قSpotLamp>DATAڂpۂڂTexture and InputLamp>DATAۂpp܂ڂMap ToLamp>ڂDATAp܂p@݂ۂPreviewMaterial>DATA@݂pނp܂MaterialMaterial@>DATAނpނ@݂PreviewWorld>DATAނp߂ނWorldWorld@>DATA߂pނMist Stars PhysicsWorld>DATApPႬ߂Texture and InputWorld>DATAPႬp €Map ToWorld>DATA €p€PႬOutputRender>DATA€pガ €RenderRenderF>DATAガp䂬€AnimRender>DATA䂬p`催ガFormatRender>DATA`催p0悬䂬Link and MaterialsEditing>DATA0悬p炬`催MeshEditingF>DATA炬p炬0悬Mesh ToolsEditing>DATA炬p肬炬Mesh Tools 1Editing>DATA肬pp邬炬CameraEditing@>DATAp邬p@ꂬ肬ShadersMaterial>DATA@ꂬp났p邬TextureMaterial>DATA났p났@ꂬAnim settingsObject>DATA났p사났DrawObjectF>DATA사p킬났ConstraintsObject>DATA킬pP사ScriptlinksScript>DATAPp킬EffectsObject사DATA ^ 333?бDhC^e¸/DuOlCC(BDC?z?mDATA Y 333?б??? ???? A??@PA Aj?c3>}GCHB? A B? #<CDATAa 333?б@̌AR|B1@lA A@CC #<@DATAT`333?б/9DATApqhhׂЂ΂ςHЂE`E_``DATAhqpЂтHтςX<*a=o?MMM4(0``DATA`p3D Viewport propertiesView3d>"DATA0Y333?о??DD$?N?D$?%N%D??%H ?oX< xI !*a=S!?& B'!k'_Ay@?X<*a=o???DD$?N?? B  B??==C DATA^0333?о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.blend7DATAqhςттЂQB=tn=o?KKKL(XDATApTransform PropertiesView3dx>"DATAXY8333?پ?3?3??3?3?QB=(^1n;sn=?QBA=4Xg)AzC?QB=tn=o??3?3?5?5QBA B??を==C DATA8^8X333?پDdC8CnD fCC(BDC?z?DATA(8]8333?پzC AzC A #< #<`jFzD OBDATAT`8333?پ"LOAD FILEPUT PICTURES/Users/ton/Desktop/render/d/../er/../B.blendDATAqтЂHЂHт?@ JLM!CM!!M!C4#C   DATA pTransform PropertiesView3dj>"DATA Y 333?xx"?Ǿ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?xDdCaCnDCC(BDC?z?DATA( ] 333?xzC AzC A #< #<`jFzD OBDATAT` 333?x SELECT SEQ PLUGIN PATH/home/jerome/local/blender-2.30/plugins/sequence/ DDATAqтЂЂт0,"=0أ=o?K!CK!!K!CL#CDATAYh333?????????0,"=0أ=o?kAGAy?0,"=0أ=o??????kA B??==C DATAh^h333?DdCQ"CfDAӗCC(BDC?z?DATA(h]h333?zC AzC A #< #<`jFzD OBDATAT`h333?SELECT SCRIPT PATH/home/jerome/local/blender-2.30/scripts/ntitled.blend lSRt@m`͂SRModel Single `PVP^` DATAn DATA n``DATA`n `DATAn`DATAn 0DATA n`0DATA`n FDATAn`FDATAn 0DATA nFDATA`o `DATAo`DATAo8DATA8o DATAo8 DATAo `DATAoX`DATAXo`DATAoX DATAo0DATA0ox DATAxo0` DATAox DATAoP DATAPo`DATAq* ?@Pף// 0#p) #DATA p`!OutputRender>DATA`!p0" RenderRenderF>DATA0"p#`!AnimRender>DATA#p0"FormatRender>DATA#$ 333?zCCHBC0?CFC= ADATA$^%#333?DhC?DhCC(BDC?z?mDATA%Y($333???? ???? A??@PA Aj?c3>}GCHB? A B? #<CDATA(ap)%333?@̌AR|B1@lA A@CC #<@DATATp)`(333?/9DATA*q+` `G`Ga``@@DATA+qV*  G@? JL1E1KLEwOU"P0,,ODATA,p-OutputRender>DATA-p.,RenderRender>DATA.pP/-AnimRender0>DATAP/p 0.FormatRenderH>DATA 0p0P/PreviewMaterial>DATA0p1 0MaterialMaterial>DATA1p20ShadersMaterial0>DATA2p`31TextureMaterialH>DATA`3p042Map InputMaterialD>DATA04p5`3Map ToMaterial,>DATA5p504Link and MaterialsEditing>DATA5p65MeshEditing>DATA6pp75Mesh ToolsEditing0>DATAp7p@86Mesh Tools 1Editing`>DATA@8p9p7RampsMaterial>0DATA9p9@8Mirror TranspMaterial0>1DATA9p:9PreviewLamp>DATA:p;9LampLamp>DATA;pP<:Shadow and SpotLamp0>DATAPDATA =p=PP =PreviewTexture>DATA>p?=TextureTexture>DATA?p`@>ColorsTexture>>DATA`@p0A?CloudsTexture0>DATA0ApB`@Anim settingsObject>DATABpB0ADrawObject>DATABpCBHooksObject>BDATACppDBConstraintsObject0>DATApDp@ECEffectsObject0CDATA@EpFpDParticle InteractionObject0>CDATAFpF@EPreviewWorld>DATAFpGFWorldWorld>DATAGpHFMist / Stars / PhysicsWorld0>DATAHpPIGAmb OccWorld0>GDATAPIp JHTexture and InputWorldH>DATA JpJPIMap ToWorldH>PIDATAJpK JFields and DeflectionPhysics>wDATAKpLJParticles Physics>wDATALp`MKSoft BodyPhysics0>w`MDATA`Mp0NLFluid SimulationPhysics0>wDATA0NpO`MModifiersEditing0>DATAOp0NShapesEditing0>0NDATAO^P333?+ChCC'wgCC(BDC?z?,DATAPYSO333?+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(S]UP333?+zC AzC A #< #<`jFzD OBDATATU`S333?+;SAVE FILE/usr/home/intrr/blender/blend/untitled.blendDATAVq+` ʫ==o?1E1KLE PXp_BBWWDATAWpTransform PropertiesView3di>"DATAPXY0[333?V??DD$?N+>=ˆ>?D$?%N%D??%H ˆ+ƾ?Soʫ= xI "=S!0=!_G<? &ɾ>Aq&&G`Ay@ˆ+ƾ?ʫ==o???DD$?N+>=ˆ>??ɾ>A  B??<=Cˆ>+>=lJ@B@?1?d????DATA 0[e[PX333?VDATAx[d(\0[ 333?V > B@DATA(\a][333?V@ffzAbB@jA A@CC #<@DATA]^^(\333?VDdC>9C,DeCC(BDC?z?DATA(^]p_]333?VzC AzC A #< #<`jFzD OBDATATp_`^333?VSave FileFileATH/home/jerome/blender/Fluid//blenderman0.1beta9.0//../pts/../flow.blendta9.0.py<SRt`m@SRSequence EditaPddXii}P5DATAanaDATAanbaDATAbnPbaDATAPbnbbDATAbnbPbDATAbncbDATAcnPcbDATAPcnccDATAcncPc\DATAcndc\DATAdnPdc\DATAPdndDATAdodabDATAdo edaPbDATA eohedabDATAheoe ePbbDATAeoehebbDATAeo@feacDATA@fofebPcDATAfof@fcPcDATAfogfbcDATAgo`gfccDATA`goggPccDATAgog`gbcDATAgo8hgccDATA8hohgcdDATAhoh8hcdDATAhoihcPdDATAioXihPcPdDATAXioidPdDATAiqXpabbPbmnjmDATAjphkOutputRender>DATAhkp8ljRenderRenderF>DATA8lpmhkAnimRender>DATAmp8lFormatRender>DATAm^n333?ƼDhC&ԓDhCC(BDC?z?DATATn`m333?Ƽ/9DATAXpqPqicabPcDATAPqqxwXpbccb8=i>o?[  [P HruDATAHr_s333?\zCAzCAPP A@FB= A DATAsYuHr333?\????????8=i>o?fffAD&@??fffA B? #<CDATATu`s333?\AVE TARGA/t1.blend9DATAxwq}PqdPdPcc8=H>o?]]]]S px |DATApx_@y333?zCAzCA1||1 A@FB= A DATA@yY |px333?????????8=H>o?fffA*@??fffA B? #<CDATAT |`@y333?AVE TARGA/t1.blend9DATA}qxwccPdd8=>o?]]wx8~ЂDATA(~]333?|B̽̌?B̽̌?88 #< #<`jFzD SQB̽̌?DATAYЂ~333?|????????8=>o?fffA@??fffA B? #<CDATATЂ`333?|OAD FILE/9SCPWSCStageain艃pD`Y@gD`Y@μ|5W@м|?S-- A=Hdd??< ddd??_@@????L?fff??@ A///tmp///@&#@^@&^#D@DATApOx,DATAOp,DATAO,DATA(HN,d'=A@DATAVZ ?o: WO 艃MWOWorld>>>===??A@pA A?L=TXd88TX=====LAYERS====ȋ𜃬XXDATAȋX "DATAXȋ8NDATAX`\"DATA范X`#,DATA范0MDATA0x范h$reenDATAx0PADATAx8QreenDATAP$B====DATAPp"DATAPQDATA(1,DATA(pȅ"DATAp(8QDATApp DATAH)rDATAHQDATAؐH}$)DATAؐ )DATA hؐ8QDATAh reenDATAh0$DATA@𠃬QDATA@pvH@DATAВ@(fDATAВQDATA`В(FREEDATA``====DATA𓃬`QDATA𓃬8DATA8𓃬HreenDATAȔ8xNDATAȔ NEWDATAXȔ0DATAX`QDATA蕃XःDATA蕃0DATA0x蕃HQ==LADATAx0ȥvH@DATAxDATAP0QDATAPDATAP覃DATA(QFREEDATA(pDATAp(ЧİbDATApRDATAHLRpDATAHvH@DATAؙH訃QDATAؙ h NEWDATA hؙ NEWDATAh ЩQDATAhPDATA@reenDATA@QreenDATAЛ@8reenDATAЛp NEWDATA`ЛQvH@DATA` DATA𜃬`XDATA𜃬QDATAX " 32DATAP8============================================================================= DATA`\" 1: DATA`#, DATAP-----------------------------------------------------------------------------x DATAh$ 2: DATAPArDATAT8----------------------------------------------------------------------------- EEDATA$B 3: DATAp"rDATAT----------------------------------------------------------------------------- EEDATA1, 4: DATAȅ"rDATAT8----------------------------------------------------------------------------- --DATAp  5: DATA)rDATAT============================================================================= EEDATA}$ 6: DATA)rDATAT8----------------------------------------------------------------------------- 6 DATA 7: DATA0$rDATAT𠃬----------------------------------------------------------------------------- DATAp 8: DATA(frDATAT----------------------------------------------------------------------------- DATA( 9: DATA`rDATAT----------------------------------------------------------------------------- EEDATA10: DATAHDATAPx============================================================================= @DATA11: DATA0bDATAT`----------------------------------------------------------------------------- EEDATAः12: DATAoDATATH----------------------------------------------------------------------------- t DATAȥ13: DATAbDATAT0----------------------------------------------------------------------------- EEDATA14: DATA覃bDATAT----------------------------------------------------------------------------- DATA15: DATAЧbDATAT============================================================================= EDATA16: DATAjDATAT訃----------------------------------------------------------------------------- EEDATAh17: DATAjDATATЩ----------------------------------------------------------------------------- EEDATAP18: DATAjrDATAT----------------------------------------------------------------------------- EEDATA819: DATApjDATAT----------------------------------------------------------------------------- qDATA 20: DATAX==DATAT============================================================================= EETXd808TXblenderman0.1betaȱ@P @@DATALȱ/home/jerome/soft/3D/blender/blenderman0.1beta9.0/blenderman0.1beta9.0.pyDATA@ htmlDATAв@ )DATAвDATA`в8FREEDATA` DATA𳃬`DATA𳃬86zDATA8𳃬pRW@DATAȴ8DATAȴ> 0 SDATAXȴ@$DATAXFREEDATA赃X8e.icDATA赃0H2.X DATA0x赃DATAx0DATAx DATAPX DATAP 9DATAසPDATAස(DATA(pසXDATAp(culaDATAp QDATAH8DATAHxDATAعHDATAع ts@DATA hع8of@DATAh p$DATAhDATA@FDATA@`DATAл@DATAл1DATA`л eo SDATA`hr %xDATA𼃬`DATA𼃬8"CDATA8𼃬8!FREEDATAȽ82e EdDATAȽile DATAXȽDATAX`*ytagDATA较X&DATA较0(ageTDATA0x较h-|DATAx0DATAxDATAP8`-DATAPxDATAPDATA(DATA(pH rDATAp(72 .DATAƒp44 .DATAƒHƒ DATAHƒƒƒhartDATAƒƒHƒDATAƒ Ã#DATA ÃhÃHDATAhÃà ÃDATAÃÃhà ip@DATAÃ@ăÃ8!DATA@ăăÃ"4 21DATAăă@ă# DATAăŃă( %-W@DATAŃ`Ńă !--- DATA`ŃŃŃ # jerDATAŃŃ`Ń !"4 23DATAŃ8ƃŃp!!@DATA8ƃƃŃ!!DATAƃƃ8ƃ"#27-MDATAƃǃƃ`"" DATAǃXǃƃ"RelaDATAXǃǃǃ"DATAǃǃXǃ@#DATAǃ0ȃǃ#DATA0ȃxȃǃ#LDATAxȃȃ0ȃ$(DATAȃɃxȃH$DATAɃPɃȃ$DATAPɃɃɃ$ DATAɃɃPɃ%DATAɃ(ʃɃX%'DATA(ʃpʃɃ%DATApʃʃ(ʃ%DATAʃ˃pʃ0&DATA˃H˃ʃ&DATAH˃˃˃&'DATA˃˃H˃'DATA˃ ̃˃X'DATA ̃h̃˃'DATAh̃̃ ̃'?DATÃ̃h̃0('DATÃ@̓̃x(DATA@̓̓̃(DATA̓̓@̓)DATA̓΃̓X)?DATA΃`΃̓)'DATA`΃΃΃)DATA΃΃`΃0*DATA΃8σ΃p*DATA8σσ΃*DATAσσ8σ+cDATAσЃσH+DATAЃXЃσ+DATAXЃЃЃ+DATAЃЃXЃ(,DATAЃ0уЃp, LDATA0уxуЃ,DATAxуу0у-DATAу҃xуP-DATA҃P҃у-DATAP҃҃҃-DATA҃҃P҃@. DATA҃(Ӄ҃.DATA(ӃpӃ҃.DDATApӃӃ(Ӄ0/DATAӃԃpӃ/t FiDATAԃHԃӃ/DATAHԃԃԃ0DATAԃԃHԃ`0-X DATAԃ Ճԃ0 DATA ՃhՃԃ0DATAhՃՃ ՃH1'DATAՃՃhՃ1DATAՃ@փՃ1/DDATA@փփՃ↬DATAփփ@փ↬PDATAփ׃փㆬDATA׃`׃փ`ㆬDATA`׃׃׃ㆬpADATA׃׃`׃ㆬʒDATA׃8؃׃@䆬FREEDATA8؃؃׃䆬(DATA؃؃8؃䆬DATA؃ك؃冬DATAكXك؃h冬DATAXككك冬?DATAككXك憬DATAك0ڃكH憬DATA0ڃxڃك憬DATAxڃڃ0ڃ憬DATAڃۃxڃ 熬DATAۃPۃڃ024 21DATAPۃۃۃh熬 jerDATAۃۃPۃ熬27-SDATAۃ(܃ۃ熬21-FDATA(܃p܃ۃ膬DATAp܃܃(܃醬DATA܃݃p܃Pꆬ&DATA݃H݃܃ꆬDATAH݃݃݃놬*DATA݃݃H݃H솬yk&DATA݃ ރ݃톬DATA ރhރ݃X톬 Hz&DATAhރރ ރ톬qDATAރރhރhr-- DATAރ@߃ރ23-ODATA@߃߃ރ07-FDATA߃߃@߃4 22DATA߃߃ DATA`߃` DATA`04 21DATA`x04-JDATA8წ(DATA8წწDATAწწ8წXDATAწ⃬წDATA⃬X⃬წ?DATAX⃬⃬⃬0DATA⃬⃬X⃬xDATA⃬0レ⃬DATA0レxレ⃬DATAxレレ0レPDATAレ䃬xレ jerDATA䃬P䃬レ08-ODATAP䃬䃬䃬 jerDATA䃬䃬P䃬P=r-x DATA䃬(僬䃬a96 .DATA(僬p僬䃬P_@DATAp僬僬(僬Cr-x DATA僬惬p僬PA@DATA惬H惬僬148 .DATAH惬惬惬 > jerDATA惬惬H惬y DATA惬 烬惬8703-ADATA 烬h烬惬DATAh烬烬 烬DATA烬烬h烬( DATA烬@胬烬pDATA@胬胬烬4DATA胬胬@胬 DATA胬郬胬8DATA郬`郬胬x$DATA`郬郬郬"DATA郬郬`郬 ,DATA郬8ꃬ郬08:3DATA8ꃬꃬ郬DATAꃬꃬ8ꃬDATAꃬ냬ꃬ0834DATA냬X냬ꃬp DATAX냬냬냬 DATA냬냬X냬DATA냬0샬냬(DATA0샬x샬냬h 1DATAx샬샬0샬\t{ADATA샬탬x샬.DATA탬P탬샬8DATAP탬탬탬@DATA탬탬P탬,4DATA탬(탬(DATA(p탬`/DATAp(#DATAp3DATAHp/DATAH8DATAH8/DATA -DATA h28DATAh X DATAh!DATA@񃬰$DATA@P")ADATA@񃬠DATA򃬈DATA`0DATA`p3DATA`򃬸 DATA8󃬨DATA8P"DATA8󃬠DATA􃬀%DATAX@3 DATAX􃬈DATAXDATA0 (DATA0xhDATAx0DATAx DATAPH DATAP iDATAP DATA( DATA(ph DATAp( DATAp DATAH( DATAH` PDATAH U?DATA h _DATA h pDATAh aDATAh(b8DATA@_DATA@HZDATA@gFREEDATAh`DATA`PDATA`x^DATA`EUV/IDATA8^DATA8^DATA8XbDATA(=DATAXDATAX2DATAX( DATA0`DATA0xDATAx0DATAx DATAP`4DATAPtor DATAP(DATA(pDATA(p.DATAp(DATAp`(DATAHDATAHDATAH@&ADATA p)DATA hxDATAh psDATAh?DATA@DATA@dDATA@DATAHdDATA`DATA`DATA`DATA8hDATA8@ LDATA8 N@2YDATA@!100%DATAX"DATAXP"DATAX#yDATA0#}DATA0x`$DATAx0@%DATAx%bDATAP&nDATAP('iDATAP'aDATA( P(DATA( p (}DATAp  ( H)@DATA  p *jeroDATA H P*{*.&DATAH  * 2 DATA  H +ay-0DATA  +DATA h ,DATAh  h-@`DATA  h -wmeDATA @ X.4DATA@  / DATA  @ X/}12:4DATA  0DATA ` 0DATA`   1}DATA  ` 1DATA 8 2tzEiADATA8 (3DATA83jDATAp4iDATAX5IDATAX5LvDATAX6TDATA06TDATA0x7DATAx0X7DATAx7SDATAP7DATAP 8DATAPh8DATA(8DATA(p8DATAp(09-UDATApx9DATAH9DATAH:7DATAHp:DATA :DATA h:*DATAh P;bDATAh;DATA@(< DATA@p<DATA@<DATA=DATA`P=DATA`=DATA`=DATA8 >t DATA8h> tDATA8>tDATA?}DATAXX?iDATAX?t|DATAX? | DATA0(@dDATA0xh@dDATAx0@tDATAxAWqDATAPAYidDATAP`Bo?DATAP8C7}DATA(C[*tDATA(pDqWDATAp(XDu|DATApEtDATAHHEp|DATAHE}xDATAHFDATA XGDATA hH DATAh XHDATAh0IDATA@xIDATA@0JDATA@xJs DATAK0meDATA`xKyDATA` LmeDATA`hLA{ADATA8 M{ DATA8  Mv19:1DATA  8 hNDATA ! N832DATA!X! ODATAX!!!Or--DATA!!X!PDATA!0"!XQDATA0"x"!R@DATAx""0"XRF4DATA"#x"S'7@DATA#P#"XSDATAP###TDATA##P#XTbDATA#($#UDATA($p$#U DATAp$$($V4DATA$%p$PW"DATA%H%$Wc4DATAH%%%0XDATA%%H%pX~DATA% &% YDATA &h&%YDATAh&& & Z DATA&&h&pZwDATA&@'&[DATA@''&X[DATA''@'[aDATA'('8\DATA(`('\]DATA`(((]@DATA((`(]DATA(8)(]@DATA8))(@^@DATA))8)^KDATA)*)(_@DATA*X*)x_jF4DATAX***`kDATA**X*`jDATA*0+*@alCADATA0+x+*aDATAx++0+0bfDATA+,x+bpDATA,P,+hcssuADATAP,,,dd+hDATA,,P,dcDATA,(-,0eM(WDATA(-p-,eDATAp--(-fq}@DATA-.p-fbDATA.H.-0gDATAH...gDATA..H.gDATA. /.hMdDATA /h/.hi DATAh// /hdDATA//h/(iOGHnDATA/@0/i|DATA@00/ji"DATA00@0jOnDATA010XkS:iDATA1`10kPjDATA`111Xl=itDATA11`1lgDATA1821`m`d*tDATA8221mDx&DATA2282hn[jDATA232n|DATA3X32 od,DATAX333`oiDATA33X3oed0|DATA3043Hp|DATA04x43p7nBDATAx4404pjDATA45x4@q].}DATA5P54qd DATAP555q}DATA55P5 r$iDATA5(65xr}DATA(6p65HstDATAp66(6sVqPDATA67p6tO|DATA7H76tdLocDATAH777t)DATA77H78uDATA7 87u!DATA 8h87u)DATAh88 80vDATA88h8vDATA8@98v"DATA@998w CDATA99@9PwXDATA9:9wsDATA:`:9xxDATA`:::xIACDATA::`:8yud5DATA:8;:yDATA8;;:0zDATA;;8;z DATA;<; {DATA<X<;{/DATAX<<<0||DATA<x=~a?DATA>P>=aDATAP>>>fDATA>>P>$hDATA>(?>x"' DATA(?p?>``DATAp??(?DATA?@p?HDATA@H@?DATAH@@@$DATA@@H@1DATA@ A@xDATA AhA@0IDATAhAA AsDATAAAhAH-DATAA@BA2DATA@BBADDATABB@BDATABCBȇqDATAC`CBhBDATA`CCCeFREEDATACC`CH$DATAC8DCDATA8DDC^'+|ADATADD8D5SDATADEDЊ[DATAEXEDX[4DATAXEEE^ADATAEEXEp^QDATAE0FEDDATA0FxFExoDATAxFF0FaDATAFGxFdDATAGPGF@DATAPGGGpDATAGGPGDATAG(HGADATA(HpHG824-ODATApHH(H!DATAHIpHАDATAIHIH.DATAHIIIxmeDATAIIHIA{ADATAI JI!bDATA JhJIPDATAhJJ J.T{ADATAJJhJDATAJ@KJ@aDATA@KKJГDATAKK@K3rw-DATAKLKx@DATAL`LKorwDATA`LLL`DATALL`L8DATAL8ML1DATA8MMLXWDATAMM8MDATAMNM(;DATANXNMbDATAXNNNؗ2meDATANNXN8DATAN0ON1DATA0OxONDATAxOO0O(0r--DATAOPxODATAPPPOЙSDATAPPPPPʒDATAPPPP/homDATAP(QPȚ!DATA(QpQPDATApQQ(QP)DATAQRpQ DATARHRQDATAHRRRDATARRHRPoDATAR SR𜇬&?DATA ShSRH 52 .DATAhSS SDATASShSНDATAS@TSDATA@TTSP2'+|ADATATT@TDATATUT DATAU`UT0DATA`UUUxDATAUU`UDATAU8VUDATA8VVUHQDATAVV8V,DATAVWV DATAWXWV0*DATAXWWWADATAWWXW,DATAW0XW "DATA0XxXWp.DATAxXX0XТDATAXYxXDATAYPYXPADATAPYYY$DATAYYPYDATAY(ZY8DATA(ZpZYxDATApZZ(ZȤ1DATAZ[pZ(A{ADATA[H[ZhDATAH[[['DATA[[H[ T{ADATA[ \[PXQDATA \h\[,DATAh\\ \DATA\\h\HDATA\@]\DATA@]]\ȧDATA]]@]DATA]^]PDATA^`^],DATA`^^^DATA^^`^HDATA^8_^DATA8__^ȩDATA__8_DATA_`_PDATA`X`_-DATAX```DATA``X`HDATA`0a`DATA0axa`ȫDATAxaa0aDATAabxaPDATAbPba-DATAPbbbDATAbbPbHDATAb(cbDATA(cpcbȭDATApcc(cDATAcdpcPDATAdHdc`DATAHdddஇ`DATAddHd(PPPDATAd edpPPPDATA ehedPPPDATAhee eDATAeehe@DATAe@feDATA@ffeаDATAff@fDATAfgf`DATAg`gfDATA`ggg𱇬DATAgg`g0DATAg8hgDATA8hhgDATAhh8hDATAhihPDATAiXihDATAXiiiೇDATAiiXi DATAi0jipDATA0jxjiDATAxjj0j`DATAjkxj@DATAkPkjDATAPkkkеDATAkkPkPPPDATAk(lk`DATA(lplkDATApll(l趇DATAlmpl0DATAmHmlxDATAHmmmDATAmmHmDATAm nmP'DATA nhnm]˾DATAhnn n8DATAnnhn蹇1DATAn@onHDATA@oonDATAoo@oX DATAopo)µDATAp`po軇DATA`ppp0 DATApp`ppDATAp8qp'ķDATA8qqpDATAqq8q`DATAqrq,DATArXrq<ǺDATAXrrrp'DATArrXrȾ:DATAr0sr0DATA0sxsrxɼDATAxss0sDATAstxsDATAtPts8DATAPtttDATAttPt(DATAt(utDATA(uputhDATApuu(uDATAuvpuDATAvHvu0‡DATAHvvv‡MDATAvvHvÇ"DATAv wvPÇDATA whwvÇ'DATAhww wÇ(DATAwwhwPć9DATAw@xwćDATA@xxwŇ&DATAxx@x`ŇDATAxyxŇ'DATAy`yxƇ:DATA`yyypƇDATAyy`yƇ+PPPDATAy8zyLJDATA8zzyXLJDATAzz8zLJ&DATAz{zLJ$FREEDATA{X{zPȇDATAX{{{ȇDATA{{X{ȇDATA{0|{(ɇ,DATA0|x|{ɇ@2YDATAx||0|ɇ-DATA|}x|0ʇ4DATA}P}|ʇDATAP}}}ʇDATA}}P}0ˇTh DATA}(~}xˇnce DATA(~p~}ˇ3DATAp~~(~(̇DATA~p~̇(kCDATAH~@͇:H DATAH͇'DATAH·DATA H·DATA h·!DATAh ·DATAh χDATA@hχDATA@χDATAЁ@χ5DATAЁ`Ї9PoinDATA`ЁЇ(QDATA` ч8DATA`hчSDATA8чUDATA8чFREEDATAȃ88҇DATAȃ҇DATAXȃ҇DATAXӇ8DATA脄XPӇIΒDATA脄0ӇHlYDATA0x脄@ԇ&FREEDATAx0ԇ(UIDATAxԇ'DATAPHՇ)DATAPՇ'DATAPՇ"9DATA(Hև.]DATA(pևEZDATAp( ׇUIDATAphׇBFREEDATAHׇ>8DATAHH؇.DATA؈H؇RDATA؈ (ه0DATA h؈هNDATAh ڇD8aDATAhڇUIDATA@ڇ>FREEDATA@8ۇ_FREEDATAЊ@ۇ`UIDATAЊX܇bDATA`Њ܇lgDATA`h݇ΒDATA`0އ8DATA8xއUIDATA88߇8DATAȌ8"lDATAȌPJRW@DATAXȌDATAX⇬lDATA荄XX㇬(DATA荄0㇬FREEDATA0x荄㇬DATAx00䇬qXnDATAx䇬+pDATAP(凬-8DATAP凬&DATAP凬(HrDATA(8懬09DATA(p懬-FREEDATAp(懬0LvDATApX燬,UIDATAH燬0sDATAH臬*8DATAؑHp臬9DATAؑ 臬_DATA hؑh釬&ΒDATAh 釬 FREEDATAhꇬUIDATA@Xꇬ%DATA@ꇬ&(zDATAГ@뇬FREEDATAГH뇬pyDATA`Г뇬& = DATA`뇬zDATA𔄬`0쇬DATA𔄬8쇬DATA8𔄬쇬DATAȕ8퇬DATAȕX퇬DATAXȕ퇬DATAX퇬)1DATA薄X0ZQk;DATA薄0pDATA0x薄No SDATAx0DATAxHDATAPDATAPDATAP @BDATA(hDATA(pDATAp(DATAp@DATAHDATAHLDATAؚHDATAؚ `DATA hؚDATAh DATAh0DATA@ppUW@DATA@UIDATAМ@FREEDATAМH= DATA`М= DATA`9DATA𝄬`= DATA𝄬8`4= DATA8𝄬FREEDATAȞ8= DATAȞ0= DATAXȞxFREEDATAX= DATA蟄X*D= DATA蟄0`&ΒDATA0x蟄FREEDATAx0DATAxH+t= DATAP!= DATAP&FREEDATAࡄPH"DATAࡄ(&8DATA(pࡄ'L= DATAp(HDATApUIDATAHDATAH(*= DATAأH19DATAأ FREEDATA hأ0 DATAh p&GDATAhDATA@DATA@XDATAХ@DATAХ*DATA`ХH1DATA`7DATA𦄬`DATA𦄬8XDATA8𦄬DATAȧ8DATAȧ(DATAXȧp?DATAXDATA訄X,%t|BDATA訄0xn EdDATA0x訄 er PDATAx0FREEDATAx8#Add DATAPDATAP%DATA઄P0DATA઄(,DATA(p઄To ODATAp(&DATAp`DATAHDATAH&xDATAجHP DATAج DATA hج$DATAh ADATAhX~FREEDATA@DATA@QDATAЮ@8 ,DATAЮx(DATA`Ю,DATA`0 DATA𯄬`h  CDATA𯄬8 FREEDATA8𯄬 DATAȰ80 "DATAȰ DATAXȰ iDATAX` wDATA豄X oDATA豄0 gDATA0x豄@ "DATAx0 *DATAx DATAP0 DATAPhDATAೄPxDATAೄ(XtDATA(pೄoDATAp(vDATApHoDATAHrDATAHrDATAصH(zDATAص 2DATA hص0DATAh pDATAhDATA@#DATA@HDATAз@DATAзDATA`з DATA`` DATA𸄬`DATA𸄬8DATA8𸄬DATAȹ8PDATAȹDATAXȹDATAX DATA躄XH DATA躄0 DATA0x躄DATAx0+DATAx` DATAPDATAPDATA༄P0DATA༄(x(DATA(p༄DATAp( *DATApxDATAH(DATAH  DATAؾH` DATAؾ DATA hؾ"DATAh 0$DATAh$DATA@%DATA@8&DATA@"DATA%DATA`8%DATA`#DATA`"DATA8„0 DATA8„„ #DATA„„8„ #DATA„Ą !!DATAÄXĄp!$DATAXÄÄÄ!DATAÄÄXÄ" DATAÄ0ĄÄh"(DATA0ĄxĄÄ"#DATAxĄĄ0Ą#DATAĄńxĄX#!DATAńPńĄ#'DATAPńńń$DATAńńPńP$"DATAń(Ƅń$DATA(ƄpƄń$$DATApƄƄ(Ƅ@%"DATAƄDŽpƄ%&DATADŽHDŽƄ%(DATAHDŽDŽDŽ@&-DATADŽDŽHDŽ&!DATADŽ ȄDŽ&DATA ȄhȄDŽ@'$DATAhȄȄ Ȅ' DATAȄȄhȄ' DATAȄ@ɄȄ8(!DATA@ɄɄȄ(!DATAɄɄ@Ʉ(DATAɄʄɄ()!DATAʄ`ʄɄx)DATA`ʄʄʄ)'sDATAʄʄ`ʄ *'DATAʄ8˄ʄx*DATA8˄˄ʄ*#DATA˄˄8˄+"DATA˄̄˄h+"DATĀX̄˄+ DATAX̄̄̄,#DATĀ̄X̄X,DATĀ0̈́̄,DATA0̈́ẍ́̄,DATAẍ́̈́0̈́8-!DATÄ́΄ẍ́-DATA΄P΄̈́-DATAP΄΄΄(.DATA΄΄P΄x. DATA΄(τ΄.DATA(τpτ΄/DATApττ(τh/DATAτЄpτ/ DATAЄHЄτ0 DATAHЄЄЄX0 DATAЄЄHЄ0DATAЄ фЄ0DATA фhфЄH1!`DATAhфф ф1$`DATAффhф1`DATAфAф@2#DATAAHAф2'DATAHAAA2PPPDATAAAHA83PPPDATAA AA3PPPDATA AhAA3!PPPDATAhAA A(4DATAAAhAx4!DATAA@AA4#DATA@AAA5DATAAA@Ah5DATAAAA5"аDATAA`AA6!DATA`AAAX6 DATAAA`A6DATAA8AA6DATA8AAAH7˾DATAAA8A7DATAAAA7#DATAAXAA88!DATAXAAA8#DATAAAXA8DATAA0AA(9DATA0AxAAx9DATAxAA0A9!DATAAAxA:$fffDATAAPAAp:#fffDATAPAAA:&µDATAAAPA;"DATAA(AAh;$DATA(ApAA;%DATApAA(A<$mmmDATAAApAp<#mmmDATAAHAA<&ķDATAHAAA="DATAAAHAh=$DATAA AA=$uuuDATA AhAA>"uuuDATAhAA Ah>'ǺDATAAAhA>#DATAA@AA?'DATA@AAAh?$DATAAA@A?#}}}DATAAAA@(}}}DATAA`AAh@!DATA`AAA@DATAAA`A@DATAA8AA(ADATA8AAA`AvDATAAA8ABDATAAAAXBDATAAXAABDATAXAAABDATAAAXA CDATAA0AA`CDATA0AxAACDATAxAA0ACDATAAAxADDATAAPAA@DDATAPAAAxDDATAAAPADDATAA(AADDATA(ApAA0EDATApAA(ApEDATAAApAEDATAAHAAEDATAHAAA0FDATAAAHAhFDATAA AAFDATA AhAAFDATAhAA A(GDATAAAhApGDATAA@AAGDATA@AAAG DATAAA@A0HDATAAAAhH DATAA`AAHDATA`AAAHDATAAA`AIPPPDATAA8AAXI9PPPDATA8AAAI6PPPDATAAA8A(JDATAAAAxJDATAAXAAJ FREEDATAXAAAJDATAAAXA0K0DATAA0AAKDATA0AxAAKDATAxAA0ALDATAAAxAXLDATAAPAALDATAPAAALDATAAAPAMDATAA(AAXMDATA(ApAAMDATApAA(AMDATAAApAM_DATAAHAANdDATAHAAA ODATAAAHAhODATAA AAODATA AhAAO.DATAhAA AHP DATAAAhAP2DATAA@AAP.DATA@AAAXQ8DATAAA@AQ.DATAAAA R,DATAA`AARDATA`AAARDATAAA`A SմDATAA8AApS"մDATA8AAAS մDATAAA8ATմDATAAAAHTDATAAXAATDATAXAAATPPPDATAAAXA(U"PPPDATAA0BAxUPPPDATA0BxBAUPPPDATAxBB0BVDATABBxB`VDATABPBBVDATAPBBBVDATABBPB8WDATAB(BBxWDATA(BpBBWɼDATApBB(BW*DATABBpB8XXDATABHBBXDATAHBBBY(DATABBHBhY#DATAB BBY#˾DATA BhBBZDATAhBB BXZ+DATABBhBZDATAB@BBZ+DATA@BBB@[DATABB@B[ DATABBB[DATAB`BB0\oDATA`BBB\#DATABB`B ]"hhhDATAB8BBp]:PPPDATA8BBB]nDATABB8Bx^?DATABBB^GDATABXBB`_ApppDATAXBBB_ŸDATABBXB`9DATAB0 BBp` DATA0 Bx BB`DATAx B B0 B`DATA B Bx B(axxxDATA BP B BpaPDATAP B B Ba;DATA B BP BXb0DATA B( B Bb?DATA( Bp B B(cFDATAp B B( BcTDATA B Bp B(dMDATA BH B BdKDATAH B B B eIDATA B BH BeDATA B B Be ̿DATA Bh B B0f-DATAh B B BfFDATA B Bh Bg/DATA B@B BhgCDATA@BB BgKDATABB@BPh,DATABp2Bh*DATAp22BiMDATA23p2i,DATA3H32iDATAH3330jNDATA33H3jDATA3 43j?DATA 4h43hkDATAh44 4kDATA44h4k%DATA4@54 lDATA@554`lDATA55@5lDATA565lDATA6`650m#DATA`666mDATA66`6mDATA6876m)PPPDATA8776PnDATA7787n9DATA787oDATA8X87PoDATAX888oDATA88X8oDATA8098(pDATA09x98ppDATAx9909pDATA9:x9qDATA:P:9HqDATAP:::qDATA::P:qDATA:(;: rDATA(;p;:hrDATAp;;(;rDATA;=puDATA@>>=uDATA>>@>pvDATA>?>vDATA?`?>vDATA`???0w DATA??`?pw%DATA?8@?wDATA8@@?x#DATA@@8@`xDATA@A@xDATAAXA@xDATAXAAA(y DATAAAXAxyDATAA0BAy DATA0BxBAz%DATAxBB0BhzDATABCxBzDATACPCBz$DATAPCCC8{#DATACCPC{%DATAC(DC{!DATA(DpDC0|%DATApDD(D|DATADEpD|#DATAEHED }DATAHEEE`} DATAEEHE}DATAE FE}DATA FhFE@~ DATAhFF F~DATAFFhF~DATAF@GF(*DATA@GGF DATAGG@GDATAGHGFDATAH`HGx%DATA`HHHЀ3DATAHH`H0DATAH8IH DATA8IIH0NDATAII8I%DATAIJI&DATAJXJI`3DATAXJJJxDATAJJXJhDATAJ0KJDATA0KxKJDATAxKK0K@DATAKLxKDATALPLKЅDATAPLLLDATALLPL`DATAL(MLLDATA(MpML *DATApMM(Mx2DATAMNpM؇BDATANHNMHDATAHNNN0DATANNHN DATAN ON(0DATA OhON5DATAhOO O'DATAOOhOH9DATAO@POZDATA@PPO8DATAPP@P(DATAPQP؋ DATAQ`QP(DATA`QQQh%DATAQQ`QDATAQ8RQ7DATA8RRQh#DATARR8R|DATARSRh!DATASXSRDATAXSSS莈'DATASSXS@DATAS0TS#DATA0TxTS؏0DATAxTT0T80DATATUxT0DATAUPUT0DATAPUUUX3DATAUUPU3DATAU(VU3DATA(VpVUx,DATApVV(VؒDATAVWpVDATAWHWVPDATAHWWWDATAWWHWؓDATAW XW(DATA XhXWpDATAhXX X.DATAXXhX'DATAX@YXh%DATA@YYXKDATAYY@Y8+DATAYZYDATAZ`ZYЖDATA`ZZZDATAZZ`ZH-DATAZ8[ZDATA8[[ZEDATA[[8[pDATA[\[;DATA\X\[DATAX\\\XDATA\\X\/DATA\0]\PPPDATA0]x]\8DATAx]]0]x#DATA]^x]Ț6DATA^P^]0DATAP^^^xDATA^^P^DATA^(_^DATA(_p_^PDATAp__(_GDATA_`p_DATA`H`_XDATAH```DATA``H`НDATA` a`3DATA aha`h+DATAhaa aDATAaahaDATAa@ba8<DATA@bbaDATAbb@bȠDATAbcbءlDATAc`cbxDATA`cccDATAcc`cqDATAc8dcPDATA8ddcxDATAdd8dDATAdedDATAeXedਈDATAXeee𩈬`DATAeeXe8PPPDATAe0fevPPPDATA0fxfe(PPPDATAxff0f0DATAfgxfhPPPDATAgPgf@DATAPggg DATAggPghBDATAg(hgدDATA(hphg #DATAphh(hpvDATAhiphDATAiHihJDATAHiiiDATAiiHipDATAi jiDATA jhji,DATAhjj jXDATAjjhjDATAj@kj6DATA@kkj𷈬DATAkk@k8DDATAklkDATAl`lkйDATA`lllDATAll`l`DATAl8mlxDATA8mml#DATAmm8mDATAmnm@PPPDATAnXnmDATAXnnnؼDATAnnXn )DATAn0onx"DATA0oxonȽ8DATAxoo0o0DATAopxoDATApPpoоDATAPppp DATAppPppDATAp(qpDATA(qpqpDATApqq(q`DATAqrpqDATArHrqDATAHrrr DATArrHr`DATAr sr DATA shsrDATAhss s(ˆDATAsshspˆ DATAs@tsˆDATA@ttsˆDATAtt@t8ÈDATAtutÈDATAu`utÈ"DATA`uuuĈDATAuu`uXĈDATAu8vuĈDATA8vvuĈDATAvv8vňDATAvwvXňDATAwXwvňDATAXwwwňDATAwwXwƈDATAw0xwXƈDATA0xxxwƈDATAxxx0xƈDATAxyxx0LjDATAyPyxpLjDATAPyyyLjDATAyyPyLjDATAy(zy8ȈDATA(zpzyhȈDATApzz(zȈDATAz{pzȈDATA{H{z@ɈDATAH{{{ɈDATA{{H{ɈDATA{ |{ʈDATA |h|{`ʈDATAh|| |ʈDATA||h|ʈDATA|@}|8ˈDATA@}}|ˈDATA}}@}ˈDATA}~}̈DATA~`~}ẌDATA`~~~̈DATA~~`~̈DATA~8~0͈DATA8~x͈DATA8͈DATAΈDATAXPΈDATAXΈDATA者XΈDATA者0(ψDATA0x者pψDATAx0ψ&DATAxЈ*DATAPhЈDATAPЈDATAPЈDATA(0шDATA(p`ш.DATAp(шDATAp҈DATAHX҈DATAH҈DATA؄H҈ DATA؄ ӈ(DATA h؄pӈ-DATAh ӈDATAhԈ+DATA@pԈDATA@ԈDATAІ@Ո DATAІXՈSDATA`ІՈeDATA`pֈ4DATA`ֈ!DATA8(׈DATA8x׈DATAȈ8׈DATAȈ׈\DATAXȈ؈TDATAXو%DATA艅XhوDATA艅0و"DATA0x艅و'DATAx0Hڈ#DATAxڈ'DATAPڈ DATAP(ۈDATAPxۈ DATA(ۈ`DATA(p@܈DATAp(܈DATAp݈ DATAH݈ DATAHވODATA؍HވDATA؍ ވ,DATA h؍0߈+DATAh ߈DATAh߈DATA@ DATA@p DATAЏ@1DATAЏ ሬ-DATA`ЏሬFDATA`ሬ>DATA𐅬`h∬DATA𐅬8∬EDATA8𐅬(㈬DATAȑ8p㈬DDATAȑ㈬DATAXȑ0䈬GDATAX䈬DATA蒅X䈬BDATA蒅0`刬DATA0x蒅刬EDATAx0 戬DATAxh戬EDATAP戬DATAP爬DATAP`爬!DATA(爬-DATA(p般DATAp(H般:DATAp般DATAH般FREEDATAH0鈬DATAؖHp鈬?zDDATAؖ 鈬 DATA hؖꈬ DATAh Pꈬ DATAhꈬ\DATA@눬ePE DATA@눬(}DATAИ@숬MDATAИ숬DATA`И숬'DATA`(투7DATA𙅬`투/DATA𙅬8투DATA8𙅬9DATAȚ8(/DATAȚ7DATAXȚ8DATAXX<DATA蛅X>DATA蛅08BDATA0x蛅<DATAx0DATAx`DATAPhDATAPDATAPDATA( DATA(pDATAp(9DATApX/DATAH8DATAH >DATA؟HDATA؟ ]DATA h؟hDATAh NDATAh0DATA@h DATA@DATAС@9DATAС/DATA`СHpDATA`+DATA𢅬`@,DATA𢅬89DATA8𢅬/DATAȣ8hpDATAȣDATAXȣXDATAXDATA褅X DATA褅00DATA0x褅p"DATAx0DATAxDATAPXDATAP DATAঅPDATAঅ( DATA(pঅhSDATAp(DATAp8RDATAHDATAHUDATAبHDATAب PDATA hب`DATAh SDATAh0DATA@SDATA@DATAЪ@PDATAЪDATA`ЪDATA`DATA𫅬`-DATA𫅬8 -DATA8𫅬p DATAȬ8 DATAȬ DATAXȬ :DATAX #DATA譅X DATA譅0 DATA0x譅 ,DATAx0( DATAxp -DATAP DATAP DATA௅PP ;DATA௅( QDATA(p௅8DATAp(xDATAp+DATAH JDATAHDATAرH<DATAر P-DATA hرDATAh :DATAhPDATA@DATA@DATAг@DATAг DATA`гwDATA`DATA𴅬`5DATA𴅬80QDATA8𴅬DATAȵ8 DATAȵ0 DATAXȵpDATAX%DATA超XDATA超0PDATA0x超BDATAx0 DATAx0DATAPh%DATAPDATAฅPDATAฅ(H DATA(pฅ DATAp(DATAp.DATAHh DATAHDATAغH DATAغ 8DATA hغp DATAh 4DATAhDATA@`%DATA@!DATAм@DATAмP DATA`мDATA`DATA𽅬`0'DATA𽅬8/DATA8𽅬?DATAȾ8XDATAȾ/DATAXȾ DATAXP &DATA迅X DATA迅0 DATA0x迅 !DATAx0h! DATAx!=DATAP"SDATAP"aDATAP # DATA(…`# DATA(…p…# DATAp……(…#DATA…Åp…$DATAÅHŅX$*DATAHÅÅÅ$$DATAÅÅHÅ%DATAÅ ąÅX%9DATA ąhąÅ%DATAhąą ą&"DATAąąhą`&$DATAą@Ņą&DATA@ŅŅą&DATAŅŅ@Ņ@'(DATAŅƅŅ'DATAƅ`ƅŅ'?DATA`ƅƅƅP( DATAƅƅ`ƅ(DATAƅ8Džƅ(DATA8DžDžƅ0)!DATADžDž8Dž)DATADžȅDž) DATAȅXȅDž*DATAXȅȅȅ`*DATAȅȅXȅ*DATAȅ0Ʌȅ*0DATA0ɅxɅȅP+DATAxɅɅ0Ʌ+ DATAɅʅxɅ+DATAʅPʅɅ,DATAPʅʅʅX,0DATAʅʅPʅ,DATAʅ(˅ʅ- DATA(˅p˅ʅ8-DATAp˅˅(˅x-/DATA˅̅p˅-QDATA̅H̅˅X.1DATAH̅̅̅.NDATA̅̅H̅8/DATA̅ ̅ͅ/DATA ͅh̅ͅ/GDATAhͅͅ ͅH0DATAͅͅhͅ0GDATAͅ@΅ͅ1DATA@΅΅ͅX10DATA΅΅@΅1DATA΅υ΅2DATAυ`υ΅H2DATA`υυυ2DATAυυ`υ2DATAυ8Ѕυ3*DATA8ЅЅυh3DATAЅЅ8Ѕ3FDATAЅхЅ(46DATAхXхЅ4DATAXххх5XDATAххXх 6DATAх0҅хX6DATA0҅x҅х6+DATAx҅҅0҅7DATA҅Ӆx҅H7GDATAӅPӅ҅77DATAPӅӅӅ(8DATAӅӅPӅ(9YDATAӅ(ԅӅ9 DATA(ԅpԅӅ9DATApԅԅ(ԅ0:DATAԅՅpԅx:DATAՅHՅԅ:HDATAHՅՅՅ8;8DATAՅՅHՅ;DATAՅ օՅ<ZDATA օhօՅ(= DATAhօօ օ`=&DATAօօhօ= DATAօ@ׅօ>DATA@ׅׅօP>GDATAׅׅ@ׅ>7DATAׅ؅ׅ0?,DATA؅`؅ׅ?DATA`؅؅؅@ZDATA؅؅`؅ A;DATA؅8م؅A DATA8مم؅A0DATAمم8م8BDATAمڅمBLDATAڅXڅمC7DATAXڅڅڅhCDATAڅڅXڅpD_DATAڅ0ۅڅE$DATA0ۅxۅڅXE&DATAxۅۅ0ۅE DATAۅ܅xۅFDATA܅P܅ۅHFIDATAP܅܅܅F%DATA܅܅P܅FDATA܅(݅܅8G)DATA(݅p݅܅GDATAp݅݅(݅G%ADATA݅ޅp݅HDATAޅHޅ݅`H#qJDATAHޅޅޅH DATAޅޅHޅHy@DATAޅ ߅ޅ(Ii`DATA ߅h߅ޅpI` DATAh߅߅ ߅I.^DATA߅߅h߅J$ԏ`DATA߅@߅`J,@DATA@߅J5ihDATA@J`V@DATAᅬ8K*ZDATAᅬ`ᅬK-DATA`ᅬᅬᅬKDATAᅬᅬ`ᅬ8L DATAᅬ8ⅬᅬxL `;@DATA8ⅬⅬᅬLDATAⅬⅬ8ⅬL DATAⅬㅬⅬHMD`DATAㅬXㅬⅬM,DATAXㅬㅬㅬMDATAㅬㅬXㅬHNDATAㅬ0䅬ㅬN`Z@DATA0䅬x䅬ㅬN8g`DATAx䅬䅬0䅬0O:DATA䅬公x䅬ODATA公P公䅬Oq@DATAP公公公P7tDATA公公P公`P X΂@DATA公(慬公Pł@DATA(慬p慬公P9vDATAp慬慬(慬Q@DATA慬煬p慬XQ`DATA煬H煬慬X"#DATAH煬煬煬" }^DATA煬煬H煬" g`DATA煬 腬煬 # DATA 腬h腬煬`# `DATAh腬腬 腬# 첂@DATA腬腬h腬# `DATA腬@酬腬$DATA@酬酬腬`$LĈDATA酬酬@酬$DATA酬ꅬ酬$6DATAꅬ`ꅬ酬X% DATA`ꅬꅬꅬ%DATAꅬꅬ`ꅬ%+`DATAꅬ8녬ꅬH&kpJDATA8녬녬ꅬ&ztDATA녬녬8녬&"DATA녬셬녬'n@DATA셬X셬녬X'.;DATAX셬셬셬'̎`DATA셬셬X셬(8apJDATA셬0텬셬@('9@DATA0텬x텬셬((@DATAx텬텬0텬("u DATA텬x텬@)sfDATAP텬)x`DATAP)@^@DATAP*\`DATA(H*DATA(p*$aDATAp(*DATAp0+(*ZDATAH+X@DATAH+6qJDATAH,#DATA 񅬐X,DATA h,DATAh ,,`DATAh(-@DATA@򅬰񅬘-x`DATA@-@DATA@ .DATA󅬈h.^@DATA`򅬰.ADATA` /"@DATA``/!DATA8􅬨󅬰/$}t^DATA80DATA8P0tpJDATA􅬘0ܒ`DATAX0DATAX(1! @DATAXx1/L@DATA01@@DATA0x 2ADATAx02В`DATAx2DATAP3DATAP`3Ȯ@DATAP3DATA(3DATA(p84DATAp(4"DATAp4CADATAHH5`DATAH5DATAH5)^DATA 6DATA h`6 DATAh 6$`4qJDATAh6f`DATA@87`!@DATA@7h`DATA@7DATA8`DATA``8DATA`8@DATA`8DATA809T`DATA8x9|.DATA89|@DATA9DATAX(:.DATAX:DATAX:DATA0; U@DATA0x@; @_@DATAx0; DATAx; DATAP<DATAPH<xf`DATAP<jDATA(<!DATA(p(=Q@DATAp(`=,CBTDATAp=:t#qJDATAH(>3~pJDATAH>SDATAH? %tDATA @?DATA hx?߭QjDATAh ? @DATAh@@DATA@@@ DATA@@DATA@@ pJDATAADATA`8A DATA`xA4DATA`A =V;WDATA8B'DATA8pBc^DATA8BDATAB$`DATAXPC(DATAXC#8@DATAXCpڂ@DATA0(D;`DATA0xD`DATAx0DDATA xE̻@DATA P HEDATAP   E`DATA  P EyDATA ( F pJDATA( p PF&DATAp  ( F.`X@DATA  p G7DATA H HG DATAH  G DATA  H Gi`DATA  H&X@DATA h pH. %@DATAh  HDATA  h I @DATA @ HI7DATA@  I!@DATA  @ JH @DATA  HJ?~DATA` J<`DATA`J2DATA`(K`pJDATA8hK DATA8K DATA8K DATAL'ZDATAXXLh`DATAXL=@DATAXL`DATA0(MpJDATA0xpM2t*pDATAx0MteleDATAxN agaDATAPPN0edsDATAPNepyDATAPN"jxpDATA(@OarsDATA(pOresDATAp(O2gainDATAp0PcropDATAHxPstsDATAHPareaDATAHQltraDATA HQransDATA hQ3rinDATAh QolrDATAh8R e[25DATA@xR1t[3]DATA@Rv*bDATA@SspacDATAXS [4]DATA`S*etoDATA`SwtyDATA`0TrsubDATA8xTquaDATA8TondDATA8U actDATA8Uft*DATAXUbkfDATAXUizeDATAXVhysiDATA0XV asxDATA0xVrleaDATAx0VgesDATAxW%yscDATAPpWgeinDATAPWFexpDATAPW lesDATA(0X!160]DATA(pXblocDATAp(X0]peDATAp(YaskDATAHhYschDATAHYckrDATAHYmenDATA 0ZightDATA hhZove_DATAh Z+i_hDATAh[hfoDATA@P[r_spDATA@[2ctioDATA@[]buDATA @\4]vDATA ` \facDATA`   \fontDATA  ` ]ggaDATA 8! X]3menuDATA8!! ]ndyDATA!!8!^ neltDATA!"!8^swapDATA"@҄!h^gloDATA@҄҄"^tartDATA҄҄@҄_pmeDATA҄ӄ҄H_:endDATAӄ`ӄ҄_4eighDATA`ӄӄӄ`xycoDATAӄӄ`ӄ``l2tDATAӄ8Ԅӄ`*froDATA8ԄԄӄ`actDATAԄԄ8Ԅ8alocaDATAԄՄԄanlocDATAՄXՄԄa%filDATAXՄՄՄ bAsounDATAՄՄXՄbmeenDATAՄ0քՄbDclasDATA0քxքՄPc]caDATAxքք0քcutDATAքׄxքc4ivDATAׄPׄք(dxPlDATAPׄׄׄxdrveDATAׄׄPׄdbConDATAׄ(؄ׄeGrouDATA(؄p؄ׄXe"ceImDATAp؄؄(؄eGcrEdDATA؄لp؄ fybNDATAلHل؄hf!MessDATAHلللf$tActDATAللHلgageADATAل ڄل`geChaDATA ڄhڄلgionCDATAhڄڄ ڄgonStDATAڄڄhڄ8h! DATAڄ@ۄڄh/8DATA@ۄۄڄh DATAۄۄ@ۄ0iEDATAۄ܄ۄiDATA܄`܄ۄi1DATA`܄܄܄8jGDATA܄܄`܄hj]DATA܄8݄܄j}DATA8݄݄܄kDATA݄݄8݄HkDDATA݄ބ݄k>DATAބXބ݄0lDATAXބބބ`lDATAބބXބl,DATAބ0߄ބm74DATA0߄x߄ބxmDFDATAx߄߄0߄mSaDATA߄x߄pn%?|DATAP߄n>DATAP8o^DATAPoVDATA(ᄬPp'MDATA(ᄬpᄬp(DATApᄬᄬ(ᄬq+(DATAᄬℬpᄬXq-6DATAℬHℬᄬq-RDATAHℬℬℬrHtDATAℬℬHℬr= DATAℬ ㄬℬsgDATA ㄬhㄬℬs3\DATAhㄬㄬ ㄬs% DATAㄬㄬhㄬPt#DATAㄬ@䄬ㄬt%hDATA@䄬䄬ㄬt0DATA䄬䄬@䄬XuDATA䄬儬䄬uO5DATA儬`儬䄬(vW`DATA`儬儬儬vqDATA儬儬`儬vEDATA儬8愬儬`wOwDATA8愬愬儬w2DATA愬愬8愬@xwDATA愬焬愬x&DATA焬X焬愬xWDATAX焬焬焬hy'DATA焬焬X焬y,2DATA焬0脬焬 z4DATA0脬x脬焬z$ DATAx脬脬0脬zDATA脬鄬x脬{DATA鄬P鄬脬X{DATAP鄬鄬鄬{DATA鄬鄬P鄬{2tDATA鄬(ꄬ鄬H|DATA(ꄬpꄬ鄬|1DATApꄬꄬ(ꄬ|]DATAꄬ넬pꄬ8}45DATA넬H넬ꄬ}DATAH넬넬넬}/DATA넬넬H넬H~DATA넬 섬넬~2'DATA 섬h섬넬~DATAh섬섬 섬82Ȇm DATA섬섬h섬\m DATA섬@턬섬m DATA@턬턬섬(4Тm DATA턬턬@턬Ĩm DATA턬턬؀3DATA`턬8DATA`6DATA`聆DATA801DATA8DATA8؂4DATA@DATAX4DATAXDATAX DATA0񄬠hDATA0xDATAx0؄DATAx DATAPhDATAP򄬸(DATAP DATA(󄬘P%DATA(p򄬨DATAp(4DATApXDATAH􄬸󄬐 DATAHЇDATAHDATA hDATA h􄬠"sssDATAh sssDATAh@!sssDATA@5sssDATA@!sssDATA@H+DATA'DATA` DATA`8DATA`'DATA8؋"DATA8(#DATA8x8DATA#DATAX0"DATAXDATAXЍDATA0#DATA0xXDATAx0DATAxDATAP(DATAPpDATAPDATA(DATA(pHDATAp(DATApАiDATAHhDATAHbDATAH@DATA ;DATA h𒆬 DATAh @DATAh>DATA@.DATA@`BDATA@ДDATA?DATA`;DATA`𕆬DATA`(DATA8phDATA8DATA8PgDATA藆 DATAX(DATAXpDATAXDATA0DATA0xHDATAx0DATAxؙ'DATAP0BDATAPcDATAP03DATA(%DATA(p蛆LDATAp(hDATApDATAHDATAHPDATAHDATA ȝ0DATA h(TDATAh 4DATAh"DATA@h7DATA@ПDATA@0DATA pCDATA ` ࠆ0DATA`   @DATA  ` DATA 8 8BDATA8  `DATA  8 8DATA  DATA X ȣ+DATAX   ,DATA  X DATA 0 Ȥ7DATA0 x 0DATAx  0 p'DATA  x ȥFDATA P @3`DATAP  3`DATA #!BPY tDATA 6 dDATA""" y-0DATA 8Name: 'RenderMan (.rib)...' DATABlender: 233DATAGroup: 'Export'DATA8Tooltip: 'Save/Render a Scene to RenderMan Renderers' DATAp"""DATARW@DATA@# RenderMan export script by Christoffer Green and Goran KocovDATA(@# Pixie Extension by Joseph MontanezDATA# version 0.1 Beta9.0bDATA<# the script needs Blender 2.33 and Python 2.3 installedDATA4H# to run the script press alt+p in the text windowDATADATAimport BlenderDATAimport string-gDATA Ximport osDATA import sysDATAfrom os import P_NOWAITDATAfrom Blender.Draw import *DATAXfrom Blender.BGL import *DATAfrom Blender import SceneDATA$from Blender.Scene import RenderDATA8from math import piDATAxfrom math import atanDATAfrom math import powDATADATA8try:DATAp import totiffDATAexcept:DATAH print "Did not find the totiff module, will use ImageMagic instead\n"DATA`DATADATA4# MAKE SURE YOU CHANGE THIS TO YOUR PYTHON FOLDER|ADATA if (os.name != "posix"):encDATA h sys.path = ['c:\\python23']DATADATA$scene = Blender.Scene.GetCurrent()DATA$8camobj = scene.getCurrentCamera()DATA4camera = Blender.Camera.Get(camobj.getData().name)ODATAREEDATA# The bevent constantsDATA,`exportevent = 1 # export button pressed DATA(exitevent = 2 # exit button pressedDATA,updateguievent = 3 # update the pressedu7 DATA0hfiletoggleevent = 999 # file button pressed7 DATADATA# GUI variablesDATA8fs = Create('')DATAxmenuval = Create(4)DATAdof = Create(0)DATAsamples = Create(2)DATAHstop = Create(2.0)0DATAlenght = Create(1.0)DATAdistance = Create(5.0)neDATA srate = Create(3)DATAhfile = Create(0)DATAbuffer = Create(1)DATA$filename = Create("default.rib")DATA Himage = Create("default")DATA dirw = Create("default")DATA$pixierenderer = Create("rndr")-x DATA$8prmanrenderer = Create("prman")12DATA$dlrenderer = Create("renderdl").DATA$bmrtrenderer = Create("rendrib")DATA(( entropyrenderer = Create("entropy")x DATA$ aqsisrenderer = Create("aqsis")erDATA$ pixietexmaker = Create("texmake")DATA$ !prmantexmaker = Create("txmake")DATA$p!dltexmaker = Create("tdlmake")erDATA$!bmrttexmaker = Create("mkmip")-JDATA$"entropytexmaker = Create("mkmip")DATA$`"aqsistexmaker = Create("teqser")aDATA"radiosity = Create(0)DATA"radnum = Create(50)DATA@#gi = Create(0)DATA#gisteps = Create(100)DATA##PixieDATA$indirect = Create(0)DATAH$occlusion = Create(0)DATA$ambiSamples = Create(6)DATA $#End PixieDATA%geom = Create(1)DATAX%meshexport = Create(1)DATA%pointwidth = Create(1.0)DATA%anim = Create(0)DATA 0&maxpixeldist = Create(20)DATA&maxerror = Create(0.25)DATA&rshadow = Create(1)DATA'smooth = Create(0.00)DATAX'areasamples = Create(20)DATA'buff256 = Create(0)DATA'buff512 = Create(1)DATA0(buff1024 = Create(0)DATAx(buff2048 = Create(0)DATA(motionblur = Create(0)DATA )motionblurframe = Create(1)DATAX)rendert = Create(1)DATA)caustics = Create(0)DATA)photon = Create(4000)DATA0*uv = Create(0)DATAp*recurs = Create(4)DATA*debug = Create(0)DATA+hiddenlayer = Create(0)DATA H+globalsettings = Create(1)DATA+scenesettings = Create(0)DATA+shadereditor = Create(0)DATA(,surfaceshader = Create(3)DATA$p,surfaceshadername = Create("")serDATA,about = Create(0)DATA-shadermenu = Create(1)DATA P-ambientshader = Create(1.00)ADATA -diffuseshader = Create(0.50) DATA -specularshader = Create(0.50)DATA$@.roughnessshader = Create(0.10)DATA .coefshader = Create(1.50)DATA .reflblurshader = Create(0.00)DATA 0/refrblurshader = Create(0.00)DATA/objecteditor = Create(0)DATA/convertbm = Create(1)DATA 0objectshadermenu = Create(0)DATA`0arealightMESH = Create(0)DATA 0recievecaustics = Create(0)DATA 0transmittcaustics = Create(0)DATA(H1transmittcausticsslider = Create(1.40)DATA1reflsamples = Create(0)DATA1refrsamples = 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)DATA@䆬gamma = Create(1.0)DATA䆬lightx = Create(1.0)DATA䆬bias = Create(0.25)DATA 冬raytraceshadow = Create(1)DATAh冬projection = Create(0)DATA 冬textureblurm = Create(0.0)DATA憬norm = Create(0.01)DATAH憬converttex = Create(1)DATA憬gisphere = Create(1)DATA憬rvisibility = Create(0)DATA 熬finalgather = Create(0)DATA02rgba = Create(1)DATAh熬castshadow = Create(1)3-DDATA熬reconvert = Create(0)DATA熬texturem = Create(' ')DATA膬texturem.val = ''DATA醬textshader = Create('Surface "plastic" ')DATA(Pꆬtextshader.val = 'Surface "plastic"'DATAꆬtextshaderd = Create('Displacement "bumpy" ')DATA,놬textshaderd.val = 'Displacement "bumpy"'DATAH솬hdritex = Create(' ')DATA톬hdritex.val = ''DATAX톬hdri = Create(0)DATA톬preworldrafile = Create(' ')DATAhpreworldrafile.val = ''jerDATApreworldra = Create(0)9-MDATApostworldrafile = Create(' ') DATApostworldrafile.val = '' DATApostworldra = Create(0) .DATA`objectrafile = Create(' ')2DATA0objectrafile.val = ''0DATAxobjectra = Create(0)DATAtextnor = Create(0)DATA illuminationmenu = Create(0)DATAXareagi = Create(0)DATAindirectgi = Create(1)DATAeblur = Create(0.00)DATA0esamples = Create(1)DATAxgianim = Create(1)DATAamesh = Create(0)DATApatchsize = Create(4.0)DATAPelemsize = Create(2.0)DATAminsize = Create(1.0)8-FDATA DATA# Other variablesDATA@Prenderer = "PRMan |BMRT |Entropy |3Delight |AQSIS |Pixie "ngDATAdshader = "Plastic (All)|Glass (BMRT, Entropy)|Shiny (BMRT, Entropy) |Custom (All) |BMS (All) "W@DATA`Ppixelsamples = "1 Preview|2 Good|3 Recomended|4|5 To High|6|7 For DoF|8|9|10 Best and Crazy"DATADambiSamplesindex = "7 Preview|8|9|10|11 Good|12|13|14 Perfection"DATADPshadingrate = "0.25 Best|0.5|1 Good|2|4 Preview|6|8|12|16 Bad" .DATA4sratelist = [0.25, 0.5, 1, 2, 4, 6, 8, 12, 16]erDATA@ meshex = "PointsPolygons |Polygons |SubdivSurface |Points "nDATA|illumination = "Plastic |Matte |RoughMetal |ThinPlastic |ShinyPlastic |ShinyMetal |Clay |BrushedMetal |Ceramic |Glass "-ODATA88projectionm = "Plane |Cylinder |Sphere |UV-Map |Auto"DATAsshader = "ADD NEW" DATAsshader2 = ""DATA(shadernametemp = ""DATApselectedname = "" DATAselectedtype = "Type: "DATA tmp = ""DATA8imagelist = ""DATA(ximagelistmenu = "No images loaded"DATA$rgbatext = "rgb |rgba |rgbz |z "DATA0 castshadowtext = "Os |opaque |shader |none"DATAtxdone = []DATAw-DATA# Global variablesDATA0increment = 0DATApxbar = 111 DATA i = 0DATAmeshobjects = 0-MDATA(maxblur = 10.0DATAhmeshnum = 0DATA--DATA0# Create the BlenderMan directories on startup@DATA8if (os.name != "posix"):DATA rootdir = '/BlenderMan/'DATA0 partitionname = Blender.sys.progname[0:2]26DATA(else:DATA0` rootdir = os.getenv("HOME") + '/BlenderMan/'DATA$pdir = rootdir + dirw.val + '/'DATA4globalpropertiesdir = pdir + '/GlobalProperties/'DATA0psurfaceshadersdir = pdir + '/SurfaceShaders/'DATA<displacementshadersdir = pdir + '/DisplacementShaders/'DATA08objectsettingsdir = pdir + '/ObjectSettings/'DATA0lightsettingsdir = pdir + '/LightSettings/'DATA4meshesdir = os.path.normpath(pdir + '/Meshes/')DATA$Ximagesdir = pdir + '/images/'DATA$shadowdir = pdir + '/shadows/'DATA(texturesdir = pdir + '/textures/'dDATA$Pshadersdir = pdir + '/shaders/'DATAtry: os.mkdir(rootdir)DATAexcept OSError: passDATA0try: os.mkdir(pdir)DATApexcept OSError: passDATA$try: os.mkdir(surfaceshadersdir)DATAexcept OSError: passDATA$Ptry: os.mkdir(globalpropertiesdir)DATAexcept OSError: passDATA(try: os.mkdir(displacementshadersdir)DATA@except OSError: passDATAtry: os.mkdir(meshesdir)DATAexcept OSError: passDATA$try: os.mkdir(objectsettingsdir)DATAhexcept OSError: passDATA try: os.mkdir(lightsettingsdir)DATA except OSError: pass|DATAH try: os.mkdir(shadowdir)dDATA except OSError: passSSDATA try: os.mkdir(texturesdir)DATA except OSError: passDATAh try: os.mkdir(imagesdir)DATA except OSError: passDATA DATA ( def gui():DATAT`  global menuval, dof, samples, stop, lenght, distance, srate, file, buffer, dirwDATAX  global filename, image, radiosity, radnum, gi, gisteps, geom, meshexport, pointwidthDATA`h  global anim, maxpixeldist, maxerror, smooth, areasamples, buff256, buff512, buff1024, buff2048DATAt  global motionblur, motionblurframe, rendert, caustics, photon, uv, recurs, debug, globalsettings, scenesettingsDATAd  global shadereditor, sshader, surfaceshader, surfaceshadername, about, shadermenu, ambientshaderEEDATAd( global diffuseshader, specularshader, roughnessshader, coefshader, reflblurshader, refrblurshaderDATA` global objecteditor, selectedname, convertbm, objectshadermenu, arealightMESH, recievecausticsDATA\H global transmittcaustics, transmittcausticsslider, reflsamples, refrsamples, rendershadowDATAh global xbar, autogs, kr, progress, indirectgi, areagi, eblur, esamples, gianim, amesh, reflectcausticsDATAdh global patchsize, elemsize, minsize, textshader, raytraceshadow, bias, textshaderd, gain, gammaDATAT global lightx, textureblurm, texturem, norm, planarm, converttex, imagelistmenu.CDATA`x global textnor, illuminationmenu, projection, hiddenlayer, gisphere, rvisibility, finalgathereDATAH global hdritex, hdri, rgba, castshadow, reconvert, maxblur, sshader2DATA` global prmanrenderer, dlrenderer, bmrtrenderer, entropyrenderer, aqsisrenderer, pixierendererDATA` global prmantexmaker, dltexmaker, bmrttexmaker, entropytexmaker, aqsistexmaker, pixietexmakerDATA\ global preworldra, preworldrafile, postworldra, postworldrafile, objectra, objectrafileDATA@( global ambiSamples, occlusion, indirect #Pixie Ambient stuffDATAREEDATA4 if (autogs.val == 1): #automaticly select objects?DATA ( Redraw(1)DATA` getSelectedObject()DATA saveload(0,0,'object')DATADATA  # GUI settingsDATA8` glClearColor(0.4,0.48,0.57, 0.0) # blue backgroundL DATA  glClear(GL_COLOR_BUFFER_BIT)DATA, glColor3f(0, 0, 0) # main black backDATAp glRectf(2, 2, 630, 340)DATA0 glColor3f(0.4, 0.48, 0.57) # main blue backDATA glRectf(4, 4, 628, 300)dDATA,` glColor3f(0.27, 0.3, 0.35) # blue topDATA glRectf(4, 302, 628, 338)DATA glColor3f(1,1,1)DATA@?DATA,p # Buttons for the main BlenderMan panelsDATA| globalsettings = Toggle("Global Settings", 12, 75, 310, 100, 20, globalsettings.val, "Global project settings")DATAtp scenesettings = Toggle("Scene Settings", 557, 175, 310, 100, 20, scenesettings.val, "Global scene settings")DATA shadereditor = Toggle("Shader Editor", 13, 275, 310, 100, 20, shadereditor.val, "Surface and diplacement shader settings")DATA objecteditor = Toggle("Object Editor", 33, 375, 310, 100, 20, objecteditor.val, "Edit object settings that Blender doesn't support")DATAh about = Toggle("About", 16, 475, 310, 100, 20, about.val, "Information about this script")#CDATADATAH # 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")DATAh progress = Toggle("Progressbar", updateguievent, 520, 30, 100, 20, progress.val, "Hint: It takes slightly less time to export a scene with the progressbar off")DATAP@  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)DATA@! 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):DATAP" 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)")DATA`$ 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")DATA@% 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")ADATAP( if menuval.val == 1:DATA( prmanrenderer = String("Renderer: ", 0, 480, 125, 140, 19, prmanrenderer.val, 200, "Name of the renderer executable")DATAH) 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|P* 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")DATAh- elif menuval.val == 4:qDATAx- 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")5DATA/ elif menuval.val == 5:)ADATAX/ aqsisrenderer = String("Renderer: ", 0, 480, 125, 140, 19, aqsisrenderer.val, 200, "Name of the renderer executable")-DATA0 aqsistexmaker = String("Tex. Maker: ", 0, 480, 100, 140, 19, aqsistexmaker.val, 200, "Name of the mipmap texture making executable")DATA0 elif menuval.val == 6:15 DATA1 pixierenderer = String("Renderer: ", 0, 480, 125, 140, 19, pixierenderer.val, 200, "Name of the renderer executable")DATA1 pixietexmaker = String("Tex. Maker: ", 0, 480, 100, 140, 19, pixietexmaker.val, 200, "Name of the mipmap texture making executable")DATAx2 anim = Toggle("Animation", updateguievent, 150, 30, 69, 19, anim.val, "Render single or multiple frames")DATA(3 rendert = Toggle("Render", updateguievent, 220, 30, 69, 19, rendert.val, "Start the renderer after the export is done")ADATAl3 file = Toggle("File", filetoggleevent, 150, 50, 70, 20, file.val, "Render the image to a file")DATAlp4 buffer = Toggle("Buffer", 5, 220, 50, 70, 20, buffer.val, "Render the image to the framebuffer")DATAL5 Button("Exit", exitevent, 385, 30, 75, 20, "Exit the script")DATAP5 Button("Export", exportevent, 310, 30, 74, 20, "Start the export")DATAX6 Button("Load Sett", 30, 310, 51, 74, 20, "Load global and scene settings")DATAX6 Button("Save Sett", 31, 385, 51, 75, 20, "Save global and scene settings")DATA7 glRasterPos2i(310, 80)DATAX7 Text("Samples")DATA7 glRasterPos2i(310, 105)DATA7 Text("ShRate")DATA 8 glRasterPos2i(310, 130)DATAh8 Text("Renderer")DATA8 glRasterPos2i(310, 155)|ADATA8 Text("Channels")DATA09 if (progress.val == 1):DATAx9 # Progressbar textDATA9 glRasterPos2i(10, 25)DATA8: Text("Mesh: %s/%s"%(int(meshnum), int(meshobjects)))DATAp:## if anim.val:DATA:## glRasterPos2i(10, 40)DATA,:## display = Blender.Scene.GetCurrent()DATAdP;## Text("Frame: %s/%s"%(display.currentFrame(), display.endFrame() - display.startFrame() + 1))DATA; # Progressbar backplateDATA(< glColor3f(0, 0, 0)DATAp< glRectf(9, 10, 620, 21)DATA < glColor3f(0.78, 0.7, 0.8)DATA= glRectf(10, 9, 621, 20)DATAP= glColor3f(0.4, 0.4, 0.4)DATA= glRectf(10, 10, 620, 20)DATA= # Progressbar}DATA > glColor3f(0, 0, 0)DATA$h> glRectf(10, 10, xbar + 1, 20)iDATA > glColor3f(0.78, 0.7, 0.8)}DATA ? glRectf(10, 11, xbar, 20)}DATA X? glColor3f(0.52, 0.25, 0.45)DATA ? glRectf(11, 11, xbar, 19)}DATA? DATA(@ # Scene settingsDATA h@ 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")DATAA if (preworldra.val == 1):DATA\A preworldrafile = String("File: ", 0, 190, 60, 430, 20, preworldrafile.val, 100)DATA`B postworldra = Toggle("PostWorld ReadArchive", updateguievent, 10, 40, 180, 20, postworldra.val, "Add a ReadArchive to a user-defined file just after WorldBegin")|DATA 8C if (postworldra.val == 1):qDATA\C postworldrafile = String("File: ", 0, 190, 40, 430, 20, postworldrafile.val, 100)DATAD if (menuval.val != 2):iDATAxXD dof = Toggle("Depth Of Field", updateguievent, 440, 270, 180, 20, dof.val, "Depth of field of the camera")|DATAE if (dof.val == 1):gDATAtHE stop = Slider("Stop ", 0, 440, 250, 180, 20, stop.val, 0, 100, 0, "Focal Stop. The camera's aperture")dDATAE lenght = Slider("Lenght ", 0, 440, 230, 180, 20, lenght.val, 0, 10, 0, "Focal Lenght. Lenght of the camera's lens")DATAF distance = Slider("Distance ", 0, 440, 210, 180, 20, distance.val, 0, 20, 0, "Focal Distance. Distance at which the camera is focused")DATAXG motionblur = Toggle("Motion Blur", updateguievent, 225, 170, 180, 20, motionblur.val, "Apply blur to objects in motion")REEDATA H if (motionblur.val == 1):DATAXH 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")DATA0I if (menuval.val == 3):DATAxI hdri = Toggle("HDRI", updateguievent, 225, 120, 180, 20, hdri.val, "Sets up a sphere that emits light filtered by a HDRI image")DATA0J if (hdri.val == 1):DATAtxJ hdritex = String("HDRI Texture: ", 0, 225, 100, 280, 20, hdritex.val, 100, "Flie name of the HDRI image")DATA4K if ((menuval.val == 2) or (menuval.val == 3)):DATA|xK gi = Toggle("Global Illumination", 6, 10, 270, 180, 20, gi.val, "Uses advanced algorithms for realstic lighting")^+DATA L if (gi.val == 1):;< DATAhL indirectgi = Toggle("Indirect", 475, 10, 250, 90, 20, indirectgi.val, "Calculate GI from light bouncing between objects")DATA|M areagi = Toggle("Area", 476, 100, 250, 90, 20, areagi.val, "Sets up a big sphere that generates skydome lighting")DATAxM gisteps = Slider("Steps ", 0, 10, 230, 180, 20, gisteps.val, 0, 600, 0, "Controls the detail of the solution")DATA hN if (indirectgi.val == 1):DATA N if (finalgather.val == 0):DATAO maxerror = Slider("MaxError ", 0, 10, 210, 180, 20, maxerror.val, 0.01, 0.50, 0, "Smaller numbers cause recomputation to happen more often")DATAO maxpixeldist = Slider("MPixelDis ", 0, 10, 190, 180, 20, maxpixeldist.val, 0.00, 40.00, 0, "Smaller numbers cause recomputation to happen more often")roDATAP gianim = Toggle("Animate GI", updateguievent, 10, 170, 180, 20, gianim.val, "Recompute GI for every frame in the animation")DATAXQ gisphere = Toggle("GI Sphere", 0, 10, 150, 180, 20, gisphere.val, "Sets up a big sphere that generates skydome lighting") DATAR if (menuval.val == 3):DATAXR finalgather = Toggle("Final Gather", updateguievent, 10, 130, 180, 20, finalgather.val, "More precise, but slower form of GI") DATAS if (menuval.val == 2)::0DATAXS radiosity = Toggle("Radiosity", 7, 225, 270, 180, 20, radiosity.val, "Calculate GI from light bouncing between objects")DATA T if (radiosity.val == 1):eDATAXT radnum = Slider("Steps ", 0, 225, 250, 180, 20, radnum.val, 0, 1000, 0, "Number of stepes for the radiosity calculation")DATAU patchsize = Slider("Patchsize", 0, 225, 230, 180, 20, patchsize.val, 0.0, 10.0, 0, "Smaller numbers cause recomputation to happen more often")DATAU elemsize = Slider("Elemsize ", 0, 225, 210, 180, 20, elemsize.val, 0.0, 6.0, 0, "Smaller numbers cause recomputation to happen more often")DATAV minsize = Slider("Minsize ", 0, 225, 190, 180, 20, minsize.val, 0.0, 3, 0, "Smaller numbers cause recomputation to happen more often")ODATA$PW if (menuval.val == 6): #Pixie!!!DATAdW gi = Toggle("Global Illumination", 6, 10, 270, 180, 20, gi.val, "Fast Global Illumination")DATA0X if (gi.val):DATApX indirect = Toggle("Indirect", 475, 10, 250, 90, 20, indirect.val, "Calculate GI from light bouncing between objects")DATA Y occlusion = Toggle("Occlusion", 476, 100, 250, 90, 20, occlusion.val, "Sets up a big sphere that generates skydome lighting")DATAY glRasterPos2i(30, 235)ADATA$ Z Text("Samples:", "normal")DATAxpZ ambiSamples = Menu(ambiSamplesindex, updateguievent, 90, 230, 100, 20, ambiSamples.val, "Smoothness of shading")DATA[ # Shader editorDATA X[ if (shadereditor.val == 1):DATAd[ surfaceshader = Menu(sshader, 14, 10, 270, 20, 20, surfaceshader.val, "Choose shader")DATA 8\ 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)DATAD@^ 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):DATAlx_ 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)DATAp@a roughnessshader = Slider("Roughness ", 32, 10, 125, 300, 20, roughnessshader.val, 0.00, 1.00, 0)DATA a if (shadermenu.val == 2):DATAh0b coefshader = Slider("Coefficient (eta)", 32, 10, 100, 300, 20, coefshader.val, 0.00, 3.00, 0)DATAtb reflblurshader = Slider("Reflect Blur (blur)", 32, 10, 75, 300, 20, reflblurshader.val, 0.00, 1.00, 0)DATAthc refrblurshader = Slider("Refract Blur (refrblur)", 32, 10, 50, 300, 20, refrblurshader.val, 0.00, 1.00, 0)DATAhd reflsamples = Slider("Reflect Samples ", 32, 315, 200, 300, 20, reflsamples.val, 0, 30, 0)}@DATAdd refrsamples = Slider("Refract Samples ", 32, 315, 175, 300, 20, refrsamples.val, 0, 30, 0)DATAP0e kr = Slider("Kr ", 32, 315, 150, 300, 20, kr.val, 0.0, 2.0, 0)DATA e if (shadermenu.val == 3):DATAtf reflblurshader = Slider("Reflect Blur (blur)", 32, 10, 100, 300, 20, reflblurshader.val, 0.00, 1.00, 0)WDATAdf reflsamples = Slider("Reflect Samples ", 32, 10, 75, 300, 20, reflsamples.val, 0, 30, 0)DATA 0g elif (shadermenu.val == 4):DATAg glRasterPos2i(10, 200)DATAg Text('Surface Shader')DATAPh textshader = String("", 32, 10, 175, 600, 20, textshader.val, 100)iDATAh glRasterPos2i(10, 150)DATA h Text('Displacement Shader')DATAP(i textshaderd = String("", 32, 10, 125, 600, 20, textshaderd.val, 100)DATAi 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 j elif (shadermenu.val == 5):DATAPj projection = Menu(projectionm, 32, 315, 200, 180, 20, projection.val)DATATXk texturem = String("Texture: ", 32, 315, 180, 280, 20, texturem.val, 100)DATATk converttex = Menu(imagelistmenu, 368, 595, 180, 20, 20, converttex.val)&DATA@Xl Button("Convert and Reload", 367, 495, 200, 120, 20)jDATAhl textureblurm = Slider("Texture Blur ", 32, 315, 160, 300, 20, textureblurm.val, 0.0, 1.0, 0)DATAd`m norm = Slider("Bump Height ", 32, 315, 140, 300, 20, norm.val, 0.0, 10.0, 0)dDATAHm textnor = Toggle("Nor", 32, 315, 120, 60, 20, textnor.val)dDATA\hn illuminationmenu = Menu(illumination, 32, 375, 120, 120, 20, illuminationmenu.val)DATAndDATA o # Object editoriDATA `o if (objecteditor.val == 1):}DATAho autogs = Toggle("Auto getSelected (drains cpu)", updateguievent, 10, 10, 180, 20, autogs.val)dDATAHp if (autogs.val == 0):DATA8p Button("Get Selected", 34, 10, 30, 180, 20)DATAp glRasterPos2i(200, 35)}DATA @q Text('Name: ' + selectedname)DATAq glRasterPos2i(200, 15)|DATAq Text(selectedtype)dDATA( r if (selectedtype == 'Type: Mesh'):DATAxr objectra = Toggle("Object ReadArchive", 18, 10, 60, 180, 20, objectra.val, "Add a ReadArchive to a user-defined file just after object's AttributeBegin")iDATAHs if (objectra.val == 1):DATAXs objectrafile = String("File: ", 18, 190, 60, 430, 20, objectrafile.val, 100)iDATAPt convertbm = Toggle("Use Shader", 18, 10, 220, 180, 20, convertbm.val)DATAt if (convertbm.val == 1):DATA,t namelist = string.split(sshader, "|")DATA 8u namelist.remove('ADD NEW')DATA$u namelist = map(str, namelist)DATA,u sshader2 = string.join(namelist, "|")DATA 0v if (len(sshader2) == 0):DATAv glRasterPos2i(10, 205)DATA$v Text("No shaders available.")DATA w else:DATA\Pw objectshadermenu = Menu(sshader2, 18, 10, 200, 180, 20, objectshadermenu.val)DATAtw geom = Toggle("Export Geometry", 18, 230, 270, 180, 20, geom.val, "Output the mesh geometry to a RIB file")DATAxx if (geom.val == 1):DATALx meshexport = Menu(meshex, 18, 230, 250, 180, 20, meshexport.val)DATAx8y amesh = Toggle("Animated Mesh", 18, 230, 230, 120, 20, amesh.val, "Turn this on if the mesh deforms in time")DATA y if (meshexport.val != 4):DATA0z 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 z 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):DATA0| 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|@} arealightMESH = Toggle("AreaLight", 18, 10, 270, 180, 20, arealightMESH.val, "Use the object as an area light")DATA$} if (arealightMESH.val == 1):DATA8~ 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)DATAd 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 H 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)):DATAx caustics = Toggle("Caustics", 18, 230, 270, 180, 20, caustics.val, "Turn on photon emission used for caustics calculations")DATAL0 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")DATA0H lampobj = Blender.Object.Get(selectedname)DATA4 lamp = Blender.Lamp.Get(lampobj.getData().name)DATAH if (lamp.getMode() & lamp.Modes['Shadows']) and (lamp.type != 3):DATA if (menuval.val != 5):DATAtȇ raytraceshadow = Toggle("Ray Shadow", 245, 100, 270, 90, 20, raytraceshadow.val, "Use raytraced shadows")DATAh if lamp.type == 2:DATAh rendershadow = Toggle("Ren Shadow", 244, 10, 270, 90, 20, rendershadow.val, "Use shadowmaps")xDATA(H 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  if (rendershadow.val == 1):DATA\Њ buff256 = Toggle("256", 8, 10, 190, 42, 20, buff256.val, "Shadowmap resolution")DATA\X 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`p buff2048 = Toggle("2048", 11, 143, 190, 48, 20, buff2048.val, "Shadowmap resolution")DATAH if (lamp.getMode() & lamp.Modes['Shadows']) and (lamp.type != 3):DATApx 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")`DATA@ DATAp # About dialogDATA if (about.val == 1):DATA glColor3f(0,0,0)DATA8 glRasterPos2i(10, 279)DATA$ Text("BlenderMan 0.1 Beta 9.0")DATAА glRasterPos2i(10, 259)92DATA0 Text("by Christoffer Green and Goran Kocov")@DATAx glColor3f(1,1,1)DATA glRasterPos2i(9, 280)DATA$ Text("BlenderMan 0.1 Beta 9.0")DATAP glRasterPos2i(9, 260)DATA0 Text("by Christoffer Green and Goran Kocov")DATA glRasterPos2i(10, 230) DATAd@ Text("_______________________________________________________________________________________")0DATAГ glRasterPos2i(10, 200)`DATA4 Text("Thanks to sgefant for the name suggestion")DATAx glRasterPos2i(10, 180)7-JDATAp Text("Thanks to Phillipe Crassous for helping me fix the spotlight rotation bug and other code improvements")DATA` glRasterPos2i(10, 160)37DATA< Text("Thanks to desaster and #python for syntax help")DATA glRasterPos2i(10, 140)DATAXX 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")DATA8 glRasterPos2i(10, 80)DATA4 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")DATAPDATAdef event(evt, val):DATA$Ț if (evt == ESCKEY and not val): DATA  Exit()DATA,P if (evt == ACCENTGRAVEKEY and not val): DATA  export()DATADATAdef bevent(evt):DATApP global sshader, increment, pdir, maxblur, imagelist, imagelistmenu, imagelisttif, shadernametemp, selectednameDATA(𜇬 if (evt == 500): # Change projectDATA H newdirs()DATA  surfaceshadername.val = ""DATAН sshader = "ADD NEW"DATA try: DATA4P f = open(surfaceshadersdir + 'ShaderNames','r')DATA saveShaderName(0)DATA  except:DATA0 saveShaderName(1)DATAx resetObject()DATA saveload(0, 0, 'object')DATA saveload(0, 0, 'global')DATA H Register (gui, event, bevent)DATA0 if (evt == exportevent): # Export buttonDATA  export()DATA,0 if (evt == exitevent): # Exit buttonDATA  Exit()DATA0 if (evt == updateguievent): # Update GUIDATA  Register (gui, event, bevent)DATA0p if (evt == filetoggleevent): # File toggleDATAТ file.val = 1DATA buffer.val = 0DATA P Register (gui, event, bevent)DATA( if (evt == 5): # Buffer toggleDATA file.val = 0DATA8 buffer.val = 1DATA x Register (gui, event, bevent)DATA4Ȥ if (evt == 6): # Global Illumination toggleDATA( radiosity.val = 0DATA h Register (gui, event, bevent)DATA( if (evt == 7): # Radiosity toggleDATA gi.val = 0DATA P Register (gui, event, bevent)DATA0 if (evt == 8): # Shadow buffer buttonsDATA if (buff256.val == 1):DATAH buff512.val = 0DATA buff1024.val = 0DATAȧ buff2048.val = 0DATA saveload(1,0,'object')DATA P Register (gui, event, bevent)DATA0 if (evt == 9): # Shadow buffer buttonsDATA if (buff512.val == 1):DATAH buff256.val = 0ADATA buff1024.val = 0DATAȩ buff2048.val = 0DATA saveload(1,0,'object')e{ADATA P Register (gui, event, bevent)DATA0 if (evt == 10): # Shadow buffer buttonsDATA if (buff1024.val == 1):DATAH buff512.val = 0DATA buff256.val = 0DATAȫ buff2048.val = 0DATA saveload(1,0,'object')DATA P Register (gui, event, bevent)DATA0 if (evt == 11): # Shadow buffer buttonsDATA if (buff2048.val == 1):DATAH buff512.val = 0DATA buff1024.val = 0DATAȭ buff256.val = 0DATA saveload(1,0,'object')DATA P Register (gui, event, bevent)DATA if (evt == 12):`DATAஇ globalsettings.val = 1`DATA( scenesettings.val = 0DATAp shadereditor.val = 0DATA objecteditor.val = 0DATA about.val = 0DATA @ Register (gui, event, bevent)DATA if (evt == 557):DATAа globalsettings.val = 0DATA scenesettings.val = 1DATA` shadereditor.val = 0DATA objecteditor.val = 0DATA𱇬 about.val = 0DATA 0 Register (gui, event, bevent)DATA if (evt == 13):DATA globalsettings.val = 0DATA scenesettings.val = 0DATAP shadereditor.val = 1DATA objecteditor.val = 0DATAೇ about.val = 0DATA  Register (gui, event, bevent)DATAp if (evt == 16):DATA globalsettings.val = 0`DATA scenesettings.val = 0DATA@ shadereditor.val = 0DATA objecteditor.val = 0DATAе about.val = 1DATA  Register (gui, event, bevent)DATA` if (evt == 33):DATA globalsettings.val = 0DATA趇 scenesettings.val = 0DATA0 shadereditor.val = 0DATAx objecteditor.val = 1DATA about.val = 0DATA  Register (gui, event, bevent)DATA(P if (evt == 14): # Add shader menuDATA` namelist = string.split(sshader, "|") # the names of the shaders gets hacked up into a listDATA8 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 listDATAH 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 X name = 0DATA, numbername = "%03d" % (int(increment))DATA軇 while (name == 0):DATA0 name = 1DATAp for x in namelist[:]:DATA( if ('Surface.%s'%numbername == x):DATA  increment = increment +1DATA` name = 0DATA0 numbername = "%03d" % (int(increment))PPDATA@ namelist.insert(listlenght - 1 , 'Surface.%s'%numbername)DATA(p sshader = string.join(namelist, "|")DATA<Ⱦ surfaceshadername.val = namelist[surfaceshader.val - 1]DATA0 saveShaderName(1)DATAx resetShaderVal()DATA shadermenu.val = 1DATA else:DATA8 saveload(0,0,'shader')DATA saveShaderName(1)DATA, shadernametemp = surfaceshadername.valDATA  Register (gui, event, bevent)DATAh if (evt == 340):DATA resetShaderVal()DATA saveload(1,0,'shader')DATA 0‡ Register (gui, event, bevent)DATAP‡ if ((evt == 15) & (surfaceshadername.val != "")): # Surface shader deletePDATA$Ç deleteshader = surfaceshader.valDATA PÇ tempselected = selectednameDATA(Ç namelist = string.split(sshader, "|")DATA,Ç namelist.remove(surfaceshadername.val)DATA<Pć surfaceshadername.val = namelist[surfaceshader.val - 1]DATA ć namelist = map(str, namelist)DATA(Ň sshader = string.join(namelist, "|")DATA `Ň listlenght = len(namelist)DATA(Ň if (surfaceshader.val == listlenght):DATA<Ƈ surfaceshadername.val = namelist[surfaceshader.val - 2]DATA pƇ surfaceshadername.val = ""DATA,Ƈ surfaceshader.val = surfaceshader.val - 1DATALJ saveShaderName(1)DATAXLJ saveload(0,0,'shader')DATA(LJ for objects in Blender.Object.Get():DATA(LJ if (objects.getType() == "Mesh"):DATAPȇ resetObject()DATA ȇ selectedname = objects.nameDATAȇ saveload(0,0,'object')DATA0(ɇ if deleteshader == objectshadermenu.val:DATAɇ convertbm.val = 0 DATA0ɇ elif deleteshader < objectshadermenu.val:DATA80ʇ objectshadermenu.val = objectshadermenu.val - 1DATAʇ saveload(1,0,'object')DATA ʇ selectedname = tempselectedDATA0ˇ saveload(0,0,'object')matDATA xˇ 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<@͇ namelist[surfaceshader.val - 1] = surfaceshadername.valDATA(͇ sshader = string.join(namelist, "|")DATA· saveload(1,0,'shader')DATAH· saveShaderName(1)DATA$· Register (gui, event, bevent) EEDATA· if (evt == 18):DATA χ saveload(1,0,'object')DATA hχ Register (gui, event, bevent)DATAχ if (evt == 19):DATA8χ testrender = open('%s/testrender.rib'%rootdir, 'w')DATA<`Ї testrender.write('Projection "perspective" "fov" 40\n')DATA,Ї testrender.write('Format 320 240 1\n')REEDATA ч 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"DATALPӇ testrender.write('Display "Test Render" "framebuffer" "%s"\n'%channels)DATALӇ testrender.write('Option "searchpath" "texture" ["%s"]\n'%texturesdir)E DATA(@ԇ testrender.write('Exposure 1 1.2\n')DATA,ԇ testrender.write('PixelSamples 1 1\n')DATA(ԇ testrender.write('Translate 0 0 5\n')DATA,HՇ testrender.write('Rotate -120 1 0 0\n')DATA(Շ testrender.write('Rotate 25 0 0 1\n')DATA$Շ testrender.write('WorldBegin\n')DATA0Hև if (menuval.val == 1) or (menuval.val == 4):DATAHև testrender.write('\tAttribute "visibility" "integer trace" [1]\n')IDATA ׇ if (menuval.val == 3):DATADhׇ testrender.write('\tAttribute "visibility" "reflection" [1]\n')EDATA@ׇ testrender.write('\tAttribute "visibility" "shadow" [1]\n')DATA0H؇ if (menuval.val == 1) or (menuval.val == 4):DATAT؇ testrender.write('\tAttribute "visibility" "string transmission" ["shader"]\n')DATA4(ه elif (menuval.val == 2) or (menuval.val == 3):REEDATAPه testrender.write('\tAttribute "render" "string casts_shadows" ["shade"]\n')DATAHڇ if (menuval.val == 2) or (menuval.val == 4) or (menuval.val == 5):IDATAڇ if (menuval.val != 5):DATA@ڇ testrender.write('\tAttribute "light" "shadows" ["on"]\n')DATA`8ۇ testrender.write('\tLightSource "spotlight" 1 "intensity" 20 "from" [0 3 4] "to" [0 0 0]\n')DATAdۇ testrender.write('\tLightSource "spotlight" 2 "intensity" 20 "from" [0 -3 4] "to" [0 0 0]\n')DATAX܇ 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')dDATAh݇ testrender.write('\tLightSource "spotlight" 2 "intensity" 10 "from" [0 -3 4] "to" [0 0 0] "string shadowname" ["shadow"] "float shadowsamples" [1]\n')EEDATA0އ elif (menuval.val == 1):DATAxއ testrender.write('\tLightSource "shadowspot" 1 "intensity" 10 "from" [0 3 4] "to" [0 0 0] "string shadowname" ["shadow"] "float samples" [1]\n')DATA8߇ 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!DATALP 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,X㇬ testrender.write('\tAttributeBegin\n')DATA㇬ name = 'foobar'DATA㇬ meshobj = 10DATAt0䇬 testrender.write('\t\tAttribute "displacementbound" "string coordinatesystem" ["object"] "float sphere" [1]\n')W@DATA,䇬 writeShader(testrender, name, meshobj, 0)DATA0(凬 testrender.write('\t\tSphere 1 -1 1 360\n')DATA(凬 testrender.write('\tAttributeEnd\n')DATA,凬 testrender.write('\tAttributeBegin\n')REEDATA48懬 if ((menuval.val == 2) or (menuval.val == 3)):DATA0懬 testrender.write('\tSurface "oakplank"\n')EEDATA4懬 elif (menuval.val == 4) or (menuval.val == 1):tDATA0X燬 testrender.write('\tSurface "rmarble"\n')sDATA4燬 elif (menuval.val == 5) or (menuval.val == 6):REEDATA,臬 testrender.write('\tSurface "matte"\n')DATA<p臬 testrender.write('\tPointsPolygons [4 ] [0 3 2 1 ]\n')DATA`臬 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(h釬 testrender.write('\tAttributeEnd\n')DATA$釬 testrender.write('WorldEnd\n')xDATAꇬ testrender.close()DATA(Xꇬ render('%s/testrender.rib'%rootdir)DATA(ꇬ if (evt == 20): # Load settingsDATA뇬 loadSettings()DATA H뇬 Register (gui, event, bevent)DATA(뇬 if (evt == 21): # Save settings@DATA뇬 saveSettings()|DATA 0쇬 Register (gui, event, bevent)DATA쇬 if (evt == 30):DATA쇬 saveload(0, 0, 'global')DATA 퇬 Register (gui, event, bevent)DATAX퇬 if (evt == 31):DATA퇬 saveload(1, 0, 'global')BDATA 퇬 Register (gui, event, bevent)DATA0 if (evt == 32):DATAp saveload(1,0,'shader')/DATA  Register (gui, event, bevent)DATA if (evt == 34):DATA H worked = getSelectedObject()DATA if (worked == 1):DATA resetObject()E DATA$ Register (gui, event, bevent)upSDATAh saveload(0,0,'object')DATA  Register (gui, event, bevent)DATA if (evt == 244):@ADATA@ rendershadow.val = 1DATA raytraceshadow.val = 0RW@DATA saveload(1,0,'object')DATA if (eblur.val > 0.2):DATA` eblur.val = 0.2DATA maxblur = 0.2DATA  Register (gui, event, bevent)DATA0 if (evt == 245):YDATAp rendershadow.val = 0DATA raytraceshadow.val = 1DATA saveload(1,0,'object')DATAH maxblur = 10.0DATA  Register (gui, event, bevent)DATA if (evt == 475):DATA indirectgi.val = 1REEDATA` areagi.val = 0DATA  Register (gui, event, bevent)DATA if (evt == 476):IDATA0 indirectgi.val = 0DATAx areagi.val = 1DATA  Register (gui, event, bevent)DATA, if (evt == 367): # Convert textures DATA(` imagelist = os.listdir(texturesdir) DATA if (imagelist != []):DATA for image in imagelist:DATA,H rawimage = '%s/%s'%(texturesdir, image)DATA$ totiff.SetOutDir(texturesdir)GDATA( ok = totiff.ConvertShort(rawimage)DATA$H if not ok[0]: # error occurredEDATA( print ok[1] # print error messageEDATA( imagelist = os.listdir(texturesdir) DATAH imagelisttif = []IDATA for image in imagelist:DATA  if (image[-3:] == 'tif'):= DATA,( imagelisttif = imagelisttif + [image]EDATA4 imagelistmenu = string.join(imagelisttif, "|")DATA  Register (gui, event, bevent)DATA0 if (evt == 368):DATA(p imagelist = os.listdir(texturesdir) DATA if (imagelist != []):DATA imagelisttif = []DATAX for image in imagelist:DATA  if (image[-3:] == 'tif'):DATA, imagelisttif = imagelisttif + [image]DATA4H imagelistmenu = string.join(imagelisttif, "|")DATA8 texturem.val = str(imagelisttif[converttex.val - 1])DATA saveload(1,0,'shader')?DATA X Register (gui, event, bevent)DATA Register (gui, event, bevent)DATADATA(def getSelectedObject():DATA@p global selectedname, selectedtype, namelist, sshader2, sshaderDATA try:DATA0 selected = Blender.Object.GetSelected()[0]REEDATA x except:o SDATA  return 0|DATA  selectedname = selected.namensDATA$8 if (selected.getType() == "Mesh"):DATA  selectedtype = 'Type: Mesh'DATA( elif (selected.getType() == "Lamp"):DATA 0 selectedtype = 'Type: Lamp'DATA else:cDATA  selectedtype = 'Type: Other'DATA( namelist = string.split(sshader, "|")DATA` namelist.remove('ADD NEW')DATA  namelist = map(str, namelist)DATA( sshader2 = string.join(namelist, "|")DATA P return 1DATA DATA(def saveload(save, exportS, module):DATA if (module == 'shader'):DATAX Variables = [shadermenu.val, ambientshader.val, diffuseshader.val, specularshader.val, roughnessshader.val, coefshader.val, DATA reflblurshader.val, refrblurshader.val, reflsamples.val, refrsamples.val, kr.val, textshader.val, textshaderd.val, texturem.val,DATAT textureblurm.val, norm.val, textnor.val, illuminationmenu.val, projection.val]DATA8 if exportS:DATA,x namelist = string.split(sshader, "|")DATA0 name = namelist[objectshadermenu.val - 1]DATA 0  else: DATA h  name = surfaceshadername.valDATA  if (name == ''):DATA  returnDATA$0  fname = surfaceshadersdir + nameDATA  if (module == 'object'):DATAl  Variables = [convertbm.val, objectshadermenu.val, geom.val, meshexport.val, uv.val, arealightMESH.val, DATAx`  areasamples.val, recievecaustics.val, transmittcaustics.val, transmittcausticsslider.val, caustics.val, photon.val, DATAp  rendershadow.val, buff256.val, buff512.val, buff1024.val, buff2048.val, eblur.val, esamples.val, amesh.val, DATAh  reflectcaustics.val, raytraceshadow.val, bias.val, rvisibility.val, castshadow.val, pointwidth.val, DATA$@  objectra.val, objectrafile.val]DATA,  fname = objectsettingsdir + selectednameDATA  if (selectedname == ''): DATA 0 returnDATAh if (module == 'global'):DATA| Variables = [gi.val, gisteps.val, radiosity.val, radnum.val, dirw.val, image.val, filename.val, file.val, buffer.val, DATAxX 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, DATApH lightx.val, hiddenlayer.val, gisphere.val, finalgather.val, hdri.val, hdritex.val, rgba.val, reconvert.val, DATAt 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]DATA4 fname = globalpropertiesdir + 'GlobalProperties'DATA0 # Save variablesDATAp if (save == 1):DATA f = open(fname,'w')DATA$ writeln(f,'BlenderMan0.1Beta9.0')DATAH for i in Variables:DATA  writeln(f,type(i).__name__)DATA if (i == '\n'):DATA  writeln(f,'')DATA` continueDATA writeln(f,i)DATADATA # Load variablesDATAP if (save == 0):DATA try:DATA f = open(fname,'r')DATA  except: DATA H returnDATA  index = 0DATA  version = str(f.readline())DATA, if (version != 'BlenderMan0.1Beta9.0\n'):DATA ` returnDATA for i in Variables:DATA  varType = str(f.readline())DATA0 if (varType == "str\n"):DATA,x Variables[index] = str(f.readline())DATA  elif (varType == "float\n"):DATA,  Variables[index] = float(f.readline())DATA x elif (varType == "int\n"):DATA, Variables[index] = int(f.readline())DATA  index += 1DATA ` f.close()DATA if (module == 'shader'):DATA$ shadermenu.val = Variables[0]DATA(0 ambientshader.val = Variables[1]DATA( diffuseshader.val = Variables[2]DATA( specularshader.val = Variables[3]DATA(8 roughnessshader.val = Variables[4]DATA$ coefshader.val = Variables[5]DATA( reflblurshader.val = Variables[6]DATA(8 refrblurshader.val = Variables[7]DATA$ reflsamples.val = Variables[8]DATA$ refrsamples.val = Variables[9]DATA 0  kr.val = Variables[10]DATA$  textshader.val = Variables[11]DATA$  textshaderd.val = Variables[12]DATA$ ! texturem.val = Variables[13]DATA(p! textureblurm.val = Variables[14]DATA ! norm.val = Variables[15]DATA$" textnor.val = Variables[16]DATA,h" illuminationmenu.val = Variables[17]DATA$" projection.val = Variables[18]DATA# elif (module == 'object'):DATA$X# convertbm.val = Variables[0]DATA(# objectshadermenu.val = Variables[1]DATA $ geom.val = Variables[2]DATA$P$ meshexport.val = Variables[3]DATA$ uv.val = Variables[4]DATA($ arealightMESH.val = Variables[5]DATA$@% areasamples.val = Variables[6]DATA(% recievecaustics.val = Variables[7]DATA,% transmittcaustics.val = Variables[8]DATA0@& transmittcausticsslider.val = Variables[9]DATA$& caustics.val = Variables[10]DATA & photon.val = Variables[11]DATA(@' rendershadow.val = Variables[12]DATA$' buff256.val = Variables[13]DATA$' buff512.val = Variables[14]DATA$8( buff1024.val = Variables[15]DATA$( buff2048.val = Variables[16]DATA ( eblur.val = Variables[17]DATA$() esamples.val = Variables[18]DATA x) amesh.val = Variables[19]DATA() reflectcaustics.val = Variables[20]DATA( * raytraceshadow.val = Variables[21]DATA x* bias.val = Variables[22]DATA$* rvisibility.val = Variables[23]DATA$+ castshadow.val = Variables[24]DATA$h+ pointwidth.val = Variables[25]DATA$+ objectra.val = Variables[26]DATA$, objectrafile.val = Variables[27]DATAX, elif (module == 'global'):DATA, gi.val = Variables[0]DATA , gisteps.val = Variables[1]DATA$8- radiosity.val = Variables[2]DATA - radnum.val = Variables[3]DATA - dirw.val = Variables[4]DATA (. image.val = Variables[5]DATA$x. filename.val = Variables[6]DATA . file.val = Variables[7]DATA / buffer.val = Variables[8]DATA h/ anim.val = Variables[9]DATA$/ rendert.val = Variables[10]DATA$0 menuval.val = Variables[11]DATA$X0 samples.val = Variables[12]DATA 0 srate.val = Variables[13]DATA 0 debug.val = Variables[14]`DATA$H1 maxerror.val = Variables[15]`DATA(1 maxpixeldist.val = Variables[16]`DATA 1 geom.val = Variables[17]`DATA$@2 motionblur.val = Variables[18]DATA(2 motionblurframe.val = Variables[19]DATA 2 dof.val = Variables[20]PPDATA 83 stop.val = Variables[21]PDATA 3 lenght.val = Variables[22]DATA$3 distance.val = Variables[23]DATA (4 autogs.val = Variables[24]DATA$x4 progress.val = Variables[25]DATA$4 indirectgi.val = Variables[26]DATA 5 areagi.val = Variables[27]DATA h5 gianim.val = Variables[28]DATA$5 patchsize.val = Variables[29]DATA$6 elemsize.val = Variables[30]DATA$X6 minsize.val = Variables[31]DATA 6 recurs.val = Variables[32]DATA 6 gain.val = Variables[33]DATA H7 gamma.val = Variables[34]DATA 7 lightx.val = Variables[35]DATA$7 hiddenlayer.val = Variables[36]DATA$88 gisphere.val = Variables[37]DATA$8 finalgather.val = Variables[38]DATA 8 hdri.val = Variables[39]DATA (9 hdritex.val = Variables[40]DATA x9 rgba.val = Variables[41]DATA$9 reconvert.val = Variables[42]DATA(: prmanrenderer.val = Variables[43]ffDATA$p: bmrtrenderer.val = Variables[44]DATA(: entropyrenderer.val = Variables[45]DATA$; dlrenderer.val = Variables[46]DATA(h; aqsisrenderer.val = Variables[47]DATA(; pixierenderer.val = Variables[48]mDATA(< prmantexmaker.val = Variables[49]mmDATA$p< bmrttexmaker.val = Variables[50]DATA(< entropytexmaker.val = Variables[51]DATA$= dltexmaker.val = Variables[52]DATA(h= aqsistexmaker.val = Variables[53]DATA(= pixietexmaker.val = Variables[54]uuDATA$> preworldra.val = Variables[55]DATA(h> preworldrafile.val = Variables[56] DATA$> postworldra.val = Variables[57]DATA(? postworldrafile.val = Variables[58] DATA(h? ambiSamples.val = Variables[59] }}DATA$? occlusion.val = Variables[60] DATA,@ #ambiSamplesindex.val = Variables[61] ɼDATA$h@ indirect.val = Variables[61]DATA@ DATA@def writeln(f,x):DATA(A try:DATAx`A if (type(x).__name__ == 'string'): # this thing is to combat a bug that saves strings with a \n, (we dont want that)DATA B nn = string.find(x, '\n')DATAXB if (nn > 0):DATAB x = x[:nn] + x[nn + 1:]DATAB f.write(str(x))DATA C f.write('\n')DATA `C except:DATAC passDATACDATADdef readint(f):DATA@D try:DATAxD return int(f.readline())DATA D except:DATAD passDATA0Edef readfloat(f):DATApE try:DATA E return float(f.readline())DATA E except:DATA0F passDATAhFdef readstr(f):DATAF try:DATAF s = (f.readline())DATA(G nn = string.find(s, '\n')DATApG if (nn > 0):DATAG s = s[:nn] + s[nn + 1:]DATA G return sDATA 0H except:DATA hH print sDATAHDATAHdef saveShaderName(save):PDATAI global sshaderDATA<XI if save: f = open(surfaceshadersdir + 'ShaderNames','w')PDATA8I else: f = open(surfaceshadersdir + 'ShaderNames','r')DATA (J if save: writeln(f,sshader)DATAxJ else: sshader = readstr(f)DATA J f.close()DATAJtry: DATA40K f = open(surfaceshadersdir + 'ShaderNames','r')DATAKexcept:DATAK saveShaderName(1)DATA L Register (gui, event, bevent)DATAXLDATALsaveShaderName(0)DATA LRegister (gui, event, bevent)DATAMsshader2 = sshaderDATAXMDATAMDATAMdef newdirs():DATA`M global pdir, globalpropertiesdir, surfaceshadersdir, displacementshadersdir, objectsettingsdirDATAhN global lightsettingsdir, lightsettingsdir, meshesdir, imagesdir, shadowdir, texturesdir, shadersdirDATA O if (os.name != "posix"):DATAhO rootdir = '/BlenderMan/'DATAO else:DATA0O rootdir = os.getenv("HOME") + '/BlenderMan/'DATA$HP pdir = rootdir + dirw.val + '/'DATA4P globalpropertiesdir = pdir + '/GlobalProperties/'DATA0P surfaceshadersdir = pdir + '/SurfaceShaders/'DATA<XQ displacementshadersdir = pdir + '/DisplacementShaders/'DATA0Q objectsettingsdir = pdir + '/ObjectSettings/'DATA0 R lightsettingsdir = pdir + '/LightSettings/'DATA R meshesdir = pdir + '/Meshes/'DATA R imagesdir = pdir + '/images/'DATA S shadowdir = pdir + '/shadows/'DATA$pS texturesdir = pdir + '/textures/'DATA$S shadersdir = pdir + '/shaders/'մDATAT try:DATAHT os.mkdir(pdir)DATA T os.mkdir(globalpropertiesdir)DATA T os.mkdir(surfaceshadersdir)PDATA$(U os.mkdir(displacementshadersdir)DATAxU os.mkdir(meshesdir)PDATA U os.mkdir(objectsettingsdir)PDATA V os.mkdir(lightsettingsdir)DATA`V os.mkdir(shadowdir)DATAV os.mkdir(texturesdir)DATAV os.mkdir(imagesdir)DATA8W except OSError: DATAxW passDATAWDATA,Wdef writeHeader(ribfile, frames, frames2):DATA\8X ribfile.write('Option "searchpath" "texture" ["%s"]\n'%(texturesdir + ":" + shadowdir))DATA X display = Scene.GetCurrent()DATA,Y context = display.getRenderingContext()DATA$hY yResolution = context.imageSizeY()DATA$Y xResolution = context.imageSizeX()DATA Z if xResolution >= yResolution:DATA,XZ factor = yResolution / float(xResolution)DATAZ else:DATA,Z factor = xResolution / float(yResolution)DATA @[ if Blender.World.Get() != []:DATA$[ world = Blender.World.Get()[0]DATA [ if world.hor != [0, 0, 0]:DATAp0\ 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<p] 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@x^ ribfile.write('Format %s %s 1\n' % (xResolution, yResolution))DATAH^ ribfile.write("Clipping %s %s\n" % (camera.clipStart, camera.clipEnd))DATAD`_ ribfile.write('PixelSamples %s %s\n'%(samples.val, samples.val))DATA_ try:DATA<` ribfile.write('Exposure %s %s\n'%(gain.val, gamma.val))DATA p` except: DATA` passDATA` if (menuval.val != 2):DATA(a if (dof.val == 1): xDATATpa ribfile.write('DepthOfField %s %s %s\n'%(stop.val, lenght.val, distance.val))ǺDATA<a ribfile.write('ShadingRate %s\n'%sratelist[srate.val - 1])DATA4Xb if ((radiosity.val == 1) & (menuval.val == 2)):DATA@b ribfile.write('Option "radiosity" "steps" [%s]\n'%radnum.val)DATAH(c ribfile.write('Attribute "indirect" "maxerror" [%s]\n'%maxerror.val)DATAXc ribfile.write('Attribute "indirect" "float maxpixeldist" [%s]\n'%maxpixeldist.val)PPDATAP(d ribfile.write('Attribute "radiosity" "float patchsize" [%s]'%patchsize.val)DATALd ribfile.write('Attribute "radiosity" "float elemsize" [%s]'%elemsize.val)DATAL e ribfile.write('Attribute "radiosity" "float minsize" [%s]'%minsize.val)DATAe if (motionblur.val == 1):DATA$e ribfile.write('Shutter 0 1\n')DATA00f if (menuval.val == 1) or (menuval.val == 4):DATAHf ribfile.write('Option "trace" "integer maxdepth" [%s]\n'%recurs.val)DATA0g elif (menuval.val == 2) or (menuval.val == 3):DATADhg ribfile.write('Option "render" "max_raylevel" [%s]\n'%recurs.val)DATALg ribfile.write('Option "statistics" "integer endofframe" [%s]\n'%debug.val)DATA0Ph if ((indirectgi.val == 1) & (gi.val == 1)):DATA,h if ((gianim.val == 0) & (frames2 == 0)):DATAPi ribfile.write('Option "indirect" "string savefile" ["%s/irr.dat"]\n'%pdir)DATA0i elif ((frames2 > 0) or (gianim.val == 1)):DATAi if (anim.val == 1):DATAP0j ribfile.write('Option "indirect" "string seedfile" ["%s/irr.dat"]\n'%pdir)DATAj if (menuval.val == 3):DATA@j ribfile.write('Option "indirect" "integer maxbounce" [3]\n')DATAhkDATAkDATA(kdef writeTransform(ribfile, lampobj):PDATA l global cframeDATA`l Blender.Get('curframe')DATAl Blender.Window.RedrawAll()DATAl if (lampobj == 0):DATA$0m camobj = scene.getCurrentCamera()DATAm else:DATAm camobj = lampobjDATA,m caminvmatrix = camobj.getInverseMatrix()DATA Pn ribfile.write("Transform [" +DATA<n "%s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s]\n" %DATAo (caminvmatrix[0][0],DATAPo caminvmatrix[0][1],DATAo -caminvmatrix[0][2],DATAo caminvmatrix[0][3],DATA(p caminvmatrix[1][0],DATApp caminvmatrix[1][1],DATAp -caminvmatrix[1][2],DATAq caminvmatrix[1][3],IDATAHq caminvmatrix[2][0],IDATAq caminvmatrix[2][1],IDATAq -caminvmatrix[2][2],DATA r caminvmatrix[2][3],DATAhr caminvmatrix[3][0],DATAr caminvmatrix[3][1],DATAr -caminvmatrix[3][2],DATA@s caminvmatrix[3][3]))DATAsDATAsdef ambientLight(ribfile):DATA t if Blender.World.Get() != []:DATA$Pt world = Blender.World.Get()[0]DATA(t if (occlusion.val) or (indirect.val):DATAHt ribfile.write('\tAttribute "visibility" "transmission" "opaque"\n')DATApu else:DATAu ribfile.write('\tLightSource "ambientlight" 998 "float intensity" [1] "color lightcolor" [%s %s %s]\n\n'%(world.amb[0], world.amb[1], world.amb[2]))DATApvDATAvdef checkLamps(ribfile):DATAv global selectednameDATA0w lampnum = 0DATA(pw for objects in Blender.Object.Get():DATAw name = objects.getName()DATA$x if (objects.getType() == "Lamp"):DATA`x lampnum += 1DATAx resetObject()DATAx selectedname = nameDATA$(y Register (gui, event, bevent)DATAxy saveload(0,0,'object')DATA$y Register (gui, event, bevent)DATA(z writeLamps(ribfile, name, lampnum)DATAhz ribfile.write("\n")DATAzDATA(zdef renderShadows(ribfile, frames2):DATA$8{ global selectedname, partitionnameDATA({ display = Blender.Scene.GetCurrent()DATA${ cframe = Blender.Get('curframe')DATA(0| for objects in Blender.Object.Get():DATA| name = objects.getName()DATA$| if (objects.getType() == "Lamp"):DATA } resetObject()DATA$`} Register (gui, event, bevent)DATA} selectedname = nameDATA} saveload(0,0,'object')DATA$@~ Register (gui, event, bevent)DATA ~ if (rendershadow.val == 1):DATA~ if (anim.val == 1):DATA,( shadowframe = Blender.Get('curframe')DATA  else:DATA shadowframe = ''DATAH ribfiledir = os.path.normpath(shadowdir + name + str(shadowframe))DATA(x shadowrib = open(ribfiledir, 'w')DATA4Ѐ if ((menuval.val == 4) & (os.name != "posix")):DATA0 ribfile.write('ReadArchive "%s%s"\n'%(os.path.splitdrive( os.path.normcase( os.path.normpath(partitionname + shadowdir + name + str(shadowframe))))))DATA  else:DATAP0 ribfile.write('ReadArchive "%s"\n'%(shadowdir + name + str(shadowframe)))DATA( shadowrib.write('FrameBegin 0\n')DATA( lampobj = Blender.Object.Get(name)DATA4` 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 spotlightDATAh if (buff256.val == 1):DATA buffer = 256DATA  elif (buff512.val == 1):DATA@ buffer = 512DATA  elif (buff1024.val == 1):DATAЅ 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')DATA4x if (menuval.val != 2) and (menuval.val != 3):DATAD؇ shadowrib.write('Hider "hidden" "depthfilter" "midpoint"\n')DATAH 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<H shadowrib.write('Format %s %s 1\n'%(buffer, buffer))DATA\ shadowrib.write('Display "%s/%s%s.pic" "zfile" "z"\n'%(shadowdir, name, shadowframe))DATA8 if menuval.val == 5:DATA, shadowrib.write('ShadingRate 1\n')DATA ؋ else:DATA, shadowrib.write('ShadingRate 4\n')DATA(h shadowrib.write('WorldBegin \n')DATA shadows = 1DATA8 createObjects(shadowrib, cframe, shadows, frames2)DATA$h shadowrib.write('WorldEnd \n')DATA shadowrib.write('MakeShadow "%s/%s%s.pic" "%s/%s%s.tx"\n'%(shadowdir, name, shadowframe, shadowdir, name, shadowframe))DATA$h shadowrib.write('FrameEnd\n')DATADATA(莈def writeLamps(ribfile, name, lampnum):DATA@ global selectednameDATA$ lampobj = Blender.Object.Get(name)DATA4؏ lamp = Blender.Lamp.Get(lampobj.getData().name)DATA48 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]DATA4X 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]DATA0x if lamp.getMode() & lamp.Modes['Negative']:DATAؒ negative = -1DATA else:DATAP negative = 1DATA selectedname = nameDATA ؓ Register (gui, event, bevent)DATA( saveload(0,0,'object')DATAp if (caustics.val):DATA0 ribfile.write('\tLightSource "caustic" 2\n')DATA( ribfile.write('\tIlluminate 2 0\n\n')DATA(h ribfile.write('\tTransformBegin\n')DATAL ribfile.write('\tAttribute "light" "integer nphotons" [%s]\n'%photon.val)DATA,8 if lamp.getMode() & lamp.Modes['Shadows']:DATA shadow = 'on'DATAЖ else:DATA shadow = 'off'DATA0H if (menuval.val == 2) or (menuval.val == 4):DATA  if (raytraceshadow.val == 1):DATAH ribfile.write('\tAttribute "light" "shadows" ["%s"]\n' % (shadow))DATAp else:DATA< ribfile.write('\tAttribute "light" "shadows" ["off"]\n')DATA if (lamp.type == 2):DATAX if (anim.val == 1):DATA0 shadowframe = '%s'%(Blender.Get('curframe'))DATA else:DATA8 shadowframe = ''DATA$x energratio = lamp.dist * negativeDATA8Ț if ((shadow == 'on') and (raytraceshadow.val == 1)):DATA0 if (menuval.val == 3):DATAx shadowname = 'shadow'DATA elif (menuval.val == 1):DATA shadowname = 'raytrace'DATAP elif (menuval.val == 6):DATAH ribfile.write('\t(Attribute "visibility" "transmission" "opaque")')DATA shadowname = 'raytrace'DATA X else:DATA shadowname = ''DATAН else:DATA4 if (shadow == 'on') and (rendershadow.val == 1):DATA,h shadowname = name + shadowframe + '.tx'DATA  else:DATA shadowname = ''DATA@8 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 SpotShadowsDATAx 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 shadowsDATAP 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' \DATAx %(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):DATA8 energratio = negativeDATAx 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))DATA0 else:DATAh 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):DATADh 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 * negativeDATAxp 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):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))DATAp 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 X 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'DATAH8 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 = negativeDATA` 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))DATAx if (caustics.val == 1):DATA$ ribfile.write('\tTransformEnd\n')DATADATA @def writeMatrix(ribfile, name):DATA Blender.Get('curframe')DATAؼ Blender.Window.RedrawAll()DATA,  matrix = Blender.Object.Get(name).matrixDATA$x ribfile.write("\t\tTransform [" +DATA<Ƚ "%s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s]\n" %DATA 0 (matrix[0][0], matrix[0][1],DATA  matrix[0][2], matrix[0][3],DATA о matrix[1][0], matrix[1][1],DATA  matrix[1][2], matrix[1][3],PDATA p matrix[2][0], matrix[2][1],DATA  matrix[2][2], matrix[2][3],DATA  matrix[3][0], matrix[3][1],DATA ` matrix[3][2], matrix[3][3]))DATADATAdef resetObject():DATA  convertbm.val = 0DATA` objectshadermenu.val = 0DATA geom.val = 1DATA meshexport.val = 1DATA(ˆ pointwidth.val = 1.0DATA pˆ uv.val = 0DATAˆ arealightMESH.val = 0DATAˆ areasamples.val = 20DATA8È recievecaustics.val = 0DATAÈ transmittcaustics.val = 0DATA$È transmittcausticsslider.val = 1.4DATAĈ caustics.val = 0DATAXĈ photon.val = 4000DATAĈ buff256.val = 0DATAĈ buff512.val = 1DATAň buff1024.val = 0DATAXň buff2048.val = 0DATAň eblur.val = 0.00DATAň esamples.val = 1DATAƈ amesh.val = 0DATAXƈ reflectcaustics.val = 0DATAƈ raytraceshadow.val = 0DATAƈ rendershadow.val = 0DATA0Lj bias.val = 0.25DATApLj rvisibility.val = 0DATALj castshadow.val = 1DATALj objectra.val = 0DATA8ȈDATAhȈdef resetShaderVal():DATAȈ if (shadermenu.val == 1):DATAȈ ambientshader.val = 1DATA@Ɉ diffuseshader.val = 0.5DATAɈ specularshader.val = 0.5DATAɈ roughnessshader.val = 0.1DATAʈ if (shadermenu.val == 2):DATA`ʈ ambientshader.val = 0.2DATAʈ diffuseshader.val = 0.0DATAʈ specularshader.val = 0.5DATA 8ˈ roughnessshader.val = 0.05DATAˈ coefshader = 1.5DATAˈ reflblurshader = 0DATÄ refrblurshader.val = 0DATAẌ reflsamples.val = 0DATÄ refrsamples.val = 0DATÄ if (shadermenu.val == 3):DATA0͈ ambientshader.val = 1.0DATAx͈ diffuseshader.val = 0.1DATA͈ specularshader.val = 1.0DATAΈ roughnessshader.val = 0.2DATAPΈ if (shadermenu.val == 5):DATAΈ ambientshader.val = 1DATAΈ diffuseshader.val = 0.5DATA(ψ specularshader.val = 0.5DATApψ roughnessshader.val = 0.1DATA(ψ textshader.val = 'Surface "plastic"'DATA,Ј textshaderd.val = 'Displacement "bumpy"'DATAhЈ texturem.val = ''DATAЈ textnor.val = 0DATAЈ illuminationmenu.val = 0DATA0шDATA0`шdef writeShader(ribfile, name, meshobj, anim):DATAш global texturefile, txdoneDATA ҈ if (arealightMESH.val == 0):DATAX҈ MName = '"plastic"'DATA҈ else: DATA҈ MName = ''DATA,ӈ if ((uv.val == 1) and (meshobj != 10)):DATA0pӈ mesh = Blender.NMesh.GetRawFromObject(name)DATAӈ if mesh.faces[0].image:DATA,Ԉ imagename = mesh.faces[0].image.filenameDATA pԈ imagename = imagename[:-3]DATAԈ imagename = imagenameDATA$Ո imagename = imagename + 'tif'DATATXՈ imagename = '%s/%s/textures/%s'%(rootdir, dirw.val, os.path.split(imagename)[1])DATAhՈ rawimage = '%s/%s/textures/%s'%(rootdir, dirw.val, os.path.split(mesh.faces[0].image.filename)[1])DATA8pֈ infile = open(mesh.faces[0].image.filename, 'rb')DATA$ֈ outfile = open(rawimage, 'wb')DATA (׈ outfile.write(infile.read())DATAx׈ outfile.close()DATA׈ infile.close()DATA`׈ imagenameconv = texturesdir + os.path.split(mesh.faces[0].image.filename)[1][:-3] + 'tif'DATAX؈ txname = texturesdir + os.path.split(mesh.faces[0].image.filename)[1][:-3] + 'tx'DATA(و if os.path.isfile(imagename) == 0:DATA hو try:DATA$و totiff.SetOutDir(texturesdir)DATA(و ok = totiff.ConvertShort(rawimage)DATA$Hڈ if not ok[0]: # error occurredDATA(ڈ print ok[1] # print error messageDATA ڈ except:DATA (ۈ if (os.name != "posix"):DATA xۈ try:DATAdۈ os.system('/ImageMagick/convert.exe -depth 8 -compress none %s %s'%(rawimage, imagename))DATA@܈ 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,0߈ imagename = mesh.faces[0].image.filenameDATA ߈ imagename = imagename[:-3]DATA߈ imagename = imagenameDATA  tdlname = imagename + 'tx'DATA$p imagename = imagename + 'tif'DATA4 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)):DATAh∬ if menuval.val == 1:DATAH∬ os.system('%s %s %s'%(prmantexmaker.val, imagenameconv, txname))DATA(㈬ elif menuval.val == 2:DATAHp㈬ os.system('%s %s %s'%(bmrttexmaker.val, imagenameconv, txname))DATA㈬ elif menuval.val == 3:DATAH0䈬 os.system('%s %s %s'%(entropytexmaker.val, imagenameconv, txname))DATA䈬 elif menuval.val == 4:DATAD䈬 os.system('%s %s %s'%(dltexmaker.val, imagenameconv, txname))DATA`刬 elif menuval.val == 5:DATAH刬 os.system('%s %s %s'%(aqsistexmaker.val, imagenameconv, txname))DATA 戬 elif menuval.val == 6:DATAHh戬 os.system('%s %s %s'%(pixietexmaker.val, imagenameconv, txname))DATA戬 else: DATA爬 MName = '"plastic"'DATA$`爬 if (transmittcaustics.val == 1):DATA0爬 mesh = Blender.NMesh.GetRawFromObject(name)DATA般 try:DATA<H般 material = Blender.Material.Get(mesh.materials[0].name)DATA般 mr = material.RDATA般 mg = material.GDATA0鈬 mb = material.BDATA@p鈬 except: # if the mesh doesnt have a material default to whiteDATA 鈬 mr = 1DATA ꈬ mg = 1DATA Pꈬ mb = 1DATA`ꈬ ribfile.write('\t\tAttribute "caustic" "color refractioncolor" [%s %s %s]\n'%(mr, mg, mb))E DATAh눬 ribfile.write('\t\tAttribute "caustic" "float refractionindex" [%s]\n'%transmittcausticsslider.val)DATA 눬 if (reflectcaustics.val == 1):DATAP숬 ribfile.write('\t\tAttribute "caustic" "color specularcolor" [.9 .9 .9]\n')DATA 숬 if (recievecaustics.val == 1):DATA(숬 ribfile.write('\t\tIlluminate 2 1\n')DATA8(투 if ((shadermenu.val == 1) & (arealightMESH.val != 1)):DATA0투 if ((convertbm.val != 0) or (meshobj == 10)):DATA투 ribfile.write('\t\tSurface "plastic" "Ka" %s "Kd" %s "Ks" %s "roughness" %s\n'%(ambientshader.val, diffuseshader.val, specularshader.val, roughnessshader.val))DATA< 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< ribfile.write('\t\tDeclare "blur" "uniform float"\n')DATA@X ribfile.write('\t\tDeclare "refrblur" "uniform float"\n')DATA@ ribfile.write('\t\tDeclare "raysamples" "uniform float"\n')DATAD8 ribfile.write('\t\tDeclare "refrraysamples" "uniform float"\n')DATA@ 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))DATAh elif (menuval.val == 2):DATA evar = '"blur" [%s] "raysamples" [%s] "refrraysamples" %s "refrblur" %s "eta" %s'%(reflblurshader.val, reflsamples.val, refrsamples.val, refrblurshader.val, coefshader.val)DATA  else:DATA 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< elif ((shadermenu.val == 3) & (arealightMESH.val != 1)):DATA0X 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'DATAh elif (menuval.val == 2):DATAP evar = ('"raysamples" %s "blur" %s'%(reflsamples.val, reflblurshader.val))DATA 0 else:DATAh evar = ''DATA 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)):DATA0 if ((convertbm.val != 0) or (meshobj == 10)):DATAtH ribfile.write('\t\tAttribute "displacementbound" "sphere" [ %s ] "coordinatesystem" [ "object" ]\n'%norm.val)DATA, 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)):DATAth ribfile.write('\t\tAttribute "displacementbound" "sphere" [ %s ] "coordinatesystem" [ "object" ]\n'%norm.val)DATA  txname = texturem.val[:-3]DATAX txname = txname + 'tx'DATA tdlname = txnameDATA$ txname = texturesdir + txnameDATA0 converttex = 1DATA$p if os.path.isfile(txname) == 0:DATA for texture in txdone:DATA  if (txname == texture):DATAX converttex = 0DATA  breakDATA if (converttex == 1):DATA  if (menuval.val == 1):DATATh os.system('%s %s %s'%(prmantexmaker.val, texturesdir + texturem.val, txname))DATA  elif (menuval.val == 2):DATAT8 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):DATAT os.system('%s %s %s'%(dltexmaker.val, texturesdir + texturem.val, txname))DATA ` elif (menuval.val == 5):DATAT os.system('%s %s %s'%(aqsistexmaker.val, texturesdir + texturem.val, txname))DATA 0 elif (menuval.val == 6):DATAT os.system('%s %s %s'%(pixietexmaker.val, texturesdir + texturem.val, txname))DATA  txdone = txdone + [txname]DATAP 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))DATA0 if ((convertbm.val == 0) & (meshobj != 10)):DATA0  mesh = Blender.NMesh.GetRawFromObject(name)DATAp  if (MName == ''):DATA  returnDATA  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:DATA0  ribfile.write('\t\tSurface %s\n'%(MName))DATA(  if (meshobj != 10):DATA0p  mesh = Blender.NMesh.GetRawFromObject(name)DATA  try:DATA  if mesh.materials:DATA<P  material = Blender.Material.Get(mesh.materials[0].name)DATAT  ribfile.write("\t\tColor [%s %s %s]\n" %(material.R, material.G, material.B))DATA8 except: passDATA x if (arealightMESH.val == 1):DATA, ribfile.write('\t\tSurface "constant"\n')DATAL  ribfile.write('\t\tAttribute "light" "nsamples" [%s]\n'%areasamples.val)DATA if (menuval.val == 2):DATA@ ribfile.write('\t\tAttribute "light" "shadows" ["on"]\n')DATA0P mesh = Blender.NMesh.GetRawFromObject(name)DATA try:DATA< material = Blender.Material.Get(mesh.materials[0].name)DATAP 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):DATA ribfile.write('\t\tAreaLightSource "arealight" 999 "intensity" [%s] "lightcolor" [%s %s %s]\n'%(material.emit * 100, material.R, material.G, material.B))DATA  except:DATAx ribfile.write('\t\tAreaLightSource "arealight" 999 "intensity" [%s] "lightcolor" [%s %s %s]\n'%(0.7 * 100, 1, 1, 1))DATADATA8def createObjects(ribfile, cframe, shadows, frames2):DATAT0 global sshader, selectedname, thisone, meshobjects, xbar, meshnum, partitionnameDATA meshobjects = 0.0DATA thisone = 0DATA0 meshnum = 0DATAp objecttime = ''DATA( for objects in Blender.Object.Get():DATA name = objects.getName()DATAP try:DATAD if (objects.getType() == "Mesh"): meshobjects = meshobjects + 1DATA  except: DATA0 passDATA(h for objects in Blender.Object.Get():DATA name = objects.getName()DATA resetObject()DATA H area = 0DATA$ obj = Blender.Object.Get(name)DATA i = 0DATA0 while (obj.Layer>>i): # convert layer numberDATAh i = i + 1DATA  if (i == hiddenlayer.val):DATA layer = 1DATA8 else:DATAp layer = 0DATA8 if ((objects.getType() == "Mesh") & (layer == 0)):DATA meshnum = meshnum + 1DATA(` meshobj = Blender.Object.Get(name)DATA$ obj = Blender.Object.Get(name)DATA selectedname = nameDATA$P Register (gui, event, bevent)DATA saveload(0,0,'object')DATA if (shadows == 0):DATA(0 ribfile.write('\tAttributeBegin\n')DATA0 if ((shadows == 0) and (objectra.val == 1)):DATA@ ribfile.write('\t\tReadArchive "%s"\n' %(objectrafile.val))DATAX if (shadows != 1):DATA0 mesh = Blender.NMesh.GetRawFromObject(name)DATA  if (len(mesh.faces) == 0):DATA(P  ribfile.write('\tAttributeEnd\n')DATA  del(mesh)DATA  returnDATA ! if (mesh.materials):DATA h! 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,X$ ribfile.write('\tMotionBegin [0 1]\n')DATA($ Blender.Set('curframe', cframe) DATA % writeMatrix(ribfile, name)DATA<X% Blender.Set('curframe', cframe + motionblurframe.val)DATA % writeMatrix(ribfile, name)DATA$& ribfile.write('\tMotionEnd\n')DATA(`& Blender.Set('curframe', cframe) DATA & else:DATA & writeMatrix(ribfile, name)DATA,@' namelist = string.split(sshader, "|")DATA' if len(namelist) > 1: DATA@' surfaceshadername.val = namelist[objectshadermenu.val - 1] DATA$P( Register (gui, event, bevent)DATA( if (convertbm.val == 1):DATA( saveload(0,1,'shader')DATA$0) Register (gui, event, bevent)DATA ) if (castshadow.val == 1):DATA) op = "Os"DATA * elif (castshadow.val == 2):DATA`* op = "opaque"DATA * elif (castshadow.val == 3):DATA4* if (menuval.val == 1) or (menuval.val == 4):DATAP+ op = "shader"DATA + else:DATA+ op = "shade"DATA , elif (castshadow.val == 4):DATA4X, if (menuval.val == 1) or (menuval.val == 4):DATA, op = "transparent"DATA - else:DATA8- op = "none"DATA0x- if (menuval.val == 1) or (menuval.val == 4):DATAT- ribfile.write('\t\tAttribute "visibility" "string transmission" ["%s"]\n'%op)DATA4X. elif (menuval.val == 2) or (menuval.val == 3):DATAP. ribfile.write('\t\tAttribute "render" "string casts_shadows" ["%s"]\n'%op)DATA 8/ if (rvisibility.val == 1):DATA/ if (menuval.val == 3):DATAH/ ribfile.write('\t\tAttribute "visibility" "integer camera" [0]\n')DATA H0 elif (menuval.val == 2):DATAH0 ribfile.write('\t\tAttribute "render" "integer visibility" [2]\n')DATA1 if (shadows == 0):DATA4X1 writeShader(ribfile, name, meshobj, frames2)DATA1 if (amesh.val == 1):DATA2 objecttime = frames2DATA H2 else:DATA2 objecttime = ''DATA 2 if (motionblur.val != 1):DATA,3 if ((frames2 == 0) or amesh.val == 1):DATAh3 if (geom.val == 1):DATAH3 meshfile = open('%s/%s%s.rib'%(meshesdir,name, objecttime), 'w')DATA8(4 check(name, meshfile, meshobj, meshnum, shadows)DATA4 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\5 else: ribfile.write('\t\tReadArchive "%s/%s%s.rib"\n'%(meshesdir, name, objecttime))DATA 6 else:DATA X6 if (meshexport.val == 2):DATA,6 if ((frames2 == 0) or amesh.val == 1):DATA7 if (geom.val == 1):DATAHH7 meshfile = open('%s/%s%s.rib'%(meshesdir,name, objecttime), 'w')DATA87 check(name, meshfile, meshobj, meshnum, shadows)DATA(8 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\(9 else: ribfile.write('\t\tReadArchive "%s/%s%s.rib"\n'%(meshesdir, name, objecttime))DATA 9 else:DATA9 if (amesh.val != 1):DATA0: if (frames2 == 0):DATAx: if (geom.val == 1):DATAL: meshfile = open('%s/%s%s.rib'%(meshesdir,name, objecttime), 'w')DATA<8; 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):DATAHP> meshfile = open('%s/%s%s.rib'%(meshesdir,name, objecttime), 'w')DATA8> check(name, meshfile, meshobj, meshnum, shadows)DATA00? 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< A Blender.Set('curframe', cframe + motionblurframe.val)DATA$A Blender.Window.RedrawAll()DATA4A objecttime = frames2 + motionblurframe.valDATA8B if (geom.val == 1):DATAPB meshfile = open('%s/%s%s.rib'%(meshesdir,name, str(objecttime)), 'w')DATA8C check(name, meshfile, meshobj, meshnum, shadows)DATAhC 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`pD else: ribfile.write('\t\tReadArchive "%s/%s%s.rib"\n'%(meshesdir, name, str(objecttime)))DATA(E ribfile.write('\tMotionEnd\n')DATA(XE Blender.Set('curframe', cframe) DATA$E Blender.Window.RedrawAll()DATAF objecttime = frames2DATAHF if (shadows == 0):DATA(F ribfile.write('\tAttributeEnd\n')DATA F if (arealightMESH.val == 1):DATA,8G ribfile.write('\tIlluminate 999 1\n')DATAGDATA(Gdef drawBar(meshnum, qwerty, pixels):DATAH if (progress.val == 1):DATA$`H global thisone, meshobjects, xbarDATA H xbar = 0DATAH xbar = qwertyDATA(I if (xbar < 10): xbar = 11DATA pI Draw()&{@DATA0I elif ((progress.val == 0) & (anim.val == 1)):DATA(J testtime = Blender.Get('curframe')DATA`JDATA8Jdef check(name, meshfile, meshobj, meshnum, shadows):DATAJ if (shadows != 1):DATA 8K print 'Exporting: %s'%nameDATA0K mesh = Blender.NMesh.GetRawFromObject(name)DATA K if (len(mesh.faces) == 0):DATA8L del(mesh)@DATA xL returnDATAL if (meshexport.val == 1):DATA$L pointspolygon(meshfile, mesh)@DATA HM elif (meshexport.val == 2):DATA0M polygon(mesh, meshfile, meshobj, meshnum)DATA M elif (meshexport.val == 3):yDATA HN subdivmesh(meshfile, mesh)EJDATA N elif (meshexport.val == 4):`DATAN points(meshfile, mesh)@DATA 0O elif (meshexport.val == 5):pJDATAO general(meshfile, mesh)@DATA O elif (meshexport.val == 6):UDATAP bilinear(meshfile, mesh)DATA `P del(mesh)DATAP meshfile.close()`DATAPyDATA Qdef pointspolygon(file, mesh): DATAXQ global meshnumDATA$X" testtime = Blender.Get('curframe')DATA " update = 5DATA" colorif = 0@DATA # perso = 0.0z^DATA`# pixels = 0.0@DATA# update = 100DATA # index = 0DATA$ facenum = len(mesh.faces)JDATA`$ if menuval.val != 2:DATA$ if mesh.hasFaceUV() == 1:DATA8$ file.write('Declare "st" "facevarying float[2]"\n')DATA$X% file.write("PointsPolygons [");DATA% for face in mesh.faces:@DATA,% if len(face.v) == 4 and menuval.val == 2:DATAH& file.write('3 3 ')DATA& else:DATA$& file.write('%s '%(len(face.v)))DATA' index = index + 1DATA0X' if ((index == update) or (index == facenum)):DATA' update = update + 100DATA( pixels = 619@DATA(@( perso = float(index) / float(facenum)DATA,( qwerty = float(pixels) * float(perso) @DATA$( drawBar(meshnum, qwerty, pixels)DATA@) file.write("] ")DATA) file.write("[ ")DATA) for face in mesh.faces:DATA* num = len(face.v)DATAH* 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,0+ file.write('%s ' % face.v[i].index)DATA + else:pJDATA+ for vert in face.v:DATA$, file.write('%s ' % vert.index)DATAX, 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" [')@DATAh. 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$`/ if mesh.hasVertexColours() == 1:aDATA(/ vertexcol = range(len(mesh.verts))DATA0 file.write('\n"Cs" [')˴DATAP0 for face in mesh.faces:@DATA0 num = len(face.v)͂@DATA0 if num == 3 or num == 4:DATA$(1 for vi in range(len(face.v)):DATA0x1 vertexcol[face.v[vi].index] = face.col[vi]DATA1 for vc in vertexcol: DATAD 2 file.write('%s %s %s ' % (vc.r/256.0, vc.g/256.0, vc.b/256.0))@DATA2 file.write(']')`DATA2 if (menuval.val != 2):DATA3 if mesh.hasFaceUV() == 1:DATA`3 file.write('\n"st" [')@DATA3 for face in mesh.faces:DATA3 num = len(face.v)`DATA 84 if num == 3 or num == 4:DATA$4 for vi in range(len(face.v)):@DATAD4 file.write('%s %s ' % (face.uv[vi][0], 1.0 - face.uv[vi][1]))DATAH5 file.write(']')DATA5 else:JDATA,5 if (len(mesh.faces[0].uv) != 0):DATA6 file.write('\n"st" [ ')DATA`6 vtuv = [] `DATA(6 for i in range(len(mesh.verts)): aDATA6 vtuv.append(0) DATA87 for f in mesh.faces: DATA 7 for i in range(len(f.uv)): DATA7 uv = f.uv[i]DATA 8 uv = uv[0], 1.0 - uv[1]DATA `8 vtuv[f.v[i].index] = uv^@DATA8 for c in vtuv:DATA8 for d in c: DATA09 file.write('%s '%d)@DATAx9 file.write(']')DATA9 file.write('\n')}DATA9DATA0(:def polygon(mesh, meshfile, meshobj, meshnum):@DATA: global meshobjects, iDATA: i = 0DATA ; update = 5DATA@; colorif = 0@DATA; perso = 0.0DATA; pixels = 0.0DATA< facenum = len(mesh.faces)@DATAH< for face in mesh.faces:R@DATA< 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.BDATAT> meshfile.write("\t\tColor [%s %s %s]\n" %(material.R, material.G, material.B))DATA ? except:DATA @? passDATA x? if len(mesh.faces[i].v) == 3:DATA? vertar = 3DATA@ else:DATA@@ vertar = 4DATA@ if face.smooth:DATA@ smooth = 1DATAA else:DATA8A smooth = 0DATA8xA writePoly(mesh,face, meshfile, i, vertar, smooth);DATA A i = i + 1DATA(B if ((i == update) or (i == facenum)):DATApB update = update + 5DATAB pixels = 619DATA(B perso = float(i) / float(facenum)`DATA,PC qwerty = float(pixels) * float(perso)DATA$C drawBar(meshnum, qwerty, pixels)DATACDATA<(Ddef textureUV(i, mesh, va, vb, vc, meshfile, face, number):DATAD try:DATAD etest = face.uv[0][0]DATA E except:pJDATA HE returnDATAE meshfile.write('"st" [ ')DATAE if (number == 1):DATAF for x in [0, 1, 2]:@DATA(PF meshfile.write("%s "%face.uv[x][0])@DATA0F meshfile.write("%s "%(1.0 - face.uv[x][1]))DATAG if (number == 2):JDATA$HG if len(mesh.faces[i].v) == 3: ς@DATA G return@DATAG for x in [0, 2, 3]:DATA(H meshfile.write("%s "%face.uv[x][0])JDATA0pH meshfile.write("%s "%(1.0 - face.uv[x][1]))DATAH meshfile.write(']\n')DATAI`DATA8HIdef writePoly(mesh, face, meshfile, i, vertar, smooth):DATA$I meshfile.write('Polygon "P" [ ')DATAJ for x in [0, 1, 2]:DATAHJ for y in range(3):DATAJ try:DATA4J meshfile.write('%s '%mesh.faces[i].v[x].co[y])DATA(K except Error:v@DATA hK print iDATA K print xDATA K print yDATAL meshfile.write(']\n')JDATAXL if (smooth == 1):DATAL meshfile.write('"N" [')DATAL for x in [0, 1, 2]:pJDATA(M for y in range(3):`DATA4pM meshfile.write('%s '%mesh.faces[i].v[x].no[y])dDATAM meshfile.write(']\n')DATA N number = 1DATA4PN textureUV(i,mesh,0,1,2, meshfile, face, number)*ibDATAN if (vertar == 4):eDATA$N meshfile.write('Polygon "P" [ ')fDATA@O for x in [0, 2, 3]:poDATAO for y in range(3):faDATA4O meshfile.write('%s '%mesh.faces[i].v[x].co[y])pDATA0P meshfile.write(']\n')DATAxP if (smooth == 1):DATAP meshfile.write('"N" [')rDATAQ for x in [0, 2, 3]:mDATAHQ for y in range(3):tDATA4Q meshfile.write('%s '%mesh.faces[i].v[x].no[y])DATAQ meshfile.write(']\n')mpfDATA8R number = 2radDATA4xR textureUV(i,mesh,0,1,2, meshfile, face, number)uDATARpatDATA Sdef general(meshfile, mesh):codDATA XS index = 0mDATA,S meshfile.write('PointsGeneralPolygons [')oDATAS for face in mesh.faces:ef_DATA0T meshfile.write('1 ')CDATAxT index = index + 1DATAT meshfile.write(']\n[')DATA U index = 0aDATA8U for face in mesh.faces:actDATA U meshfile.write(str(nr) + ' ')DATAU index = index + 1DATAV meshfile.write(']\n[')DATA XV index = 0lDATAV for f in mesh.faces:xrDATAV for v in f.v:DATA(W meshfile.write(str(v.index) + ' ')deDATApW index = index + 1DATAW meshfile.write(']\n"P" [')DATA W index = 0rDATA$0X for x in range(len(mesh.verts)):eDATAX for y in range(3):4][DATA4X meshfile.write(str(mesh.verts[x].co[y]) + '')ogDATA(Y index = index + 1DATAhY meshfile.write(']\n')iDATAYr[1DATA Ydef bilinear(meshfile, mesh):efDATA0Z f = 0eDATAhZ for face in mesh.faces:li_DATA,Z meshfile.write('Patch "bilinear" "P" [ ')DATA[ for x in [3, 2, 0, 1]:dirDATAP[ for y in range(3):alDATA4[ meshfile.write('%s '%mesh.faces[f].v[x].co[y])cDATA[ meshfile.write(']\n')DATA@\ if face.smooth:elDATA\ meshfile.write('"N" [ ')DATA\ for x in [3, 2, 0, 1]:pyDATA] for y in range(3):uDATA4X] meshfile.write('%s '%mesh.faces[f].v[x].no[y])DATA] meshfile.write(']\n')nelDATA ^ f = f + 1DATA8^datDATA h^def subdivmesh(meshfile, mesh):DATA^ if menuval.val != 2:*sDATA_ if mesh.hasFaceUV() == 1:DATA<H_ meshfile.write('Declare "st" "facevarying float[2]"\n')[DATA8_ meshfile.write('SubdivisionMesh "catmull-clark" [')lasDATA` for face in mesh.faces:typDATA`` num = len(face.v)DATA ` meshfile.write('%s '%(num))12DATA` meshfile.write(']\n[')DATA8a for face in mesh.faces:dedDATAa for vert in face.v:fDATA(a meshfile.write('%s ' % vert.index)mpDATAD b meshfile.write(']\n["interpolateboundary"] [0 0] [] []\n"P" [') aiDATAb for vert in mesh.verts:[3]DATAHb meshfile.write("%s %s %s " % (vert.co[0], vert.co[1], vert.co[2]))3]DATAPc meshfile.write(']')aneDATAc if (menuval.val != 2):DATAc if mesh.hasFaceUV() == 1:DATA (d meshfile.write('\n"st" [')mDATAxd for face in mesh.faces:gDATAd num = len(face.v)QuDATA e if num == 3 or num == 4:eSeDATA$Xe for vi in range(len(face.v)):hDATAHe meshfile.write('%s %s ' % (face.uv[vi][0], 1.0 - face.uv[vi][1]))DATA f meshfile.write(']')DATA$hf if mesh.hasVertexColours() == 1:AcDATA(f vertexcol = range(len(mesh.verts))orDATA g meshfile.write('\n"Cs" [')erDATA`g for face in mesh.faces:kTDATAg num = len(face.v)itCDATAg if num == 3 or num == 4:DATA$8h for vi in range(len(face.v)): DATA0h vertexcol[face.v[vi].index] = face.col[vi]DATAh for vc in vertexcol:DATAH0i meshfile.write('%s %s %s ' % (vc.r/256.0, vc.g/256.0, vc.b/256.0))DATAi meshfile.write(']')(DATAi meshfile.write('\n')DATA8jDATAhjdef points(meshfile, mesh):DATA j meshfile.write('Points "P" [')DATAk for vert in mesh.verts:DATAHHk meshfile.write("%s %s %s " % (vert.co[0], vert.co[1], vert.co[2]))lDATA@k meshfile.write('] "constantwidth" [%s]\n' % (pointwidth.val))DATA0lDATA `ldef createGI(ribfile, frames):DATA0l if (areagi.val == 1) and (menuval.val !=6):&DATA8m ribfile.write('\tDeclare "casts_shadows" "string"\n')DATAHxm ribfile.write('\tAttribute "render" "casts_shadows" ["opaque"]\n')YDATATm ribfile.write('\tLightSource "ambientlight" 998 "lightcolor" [0.02 0.02 0.02]\n')DATA(pn ribfile.write('\tAttributeBegin\n')\DATA@n ribfile.write('\t\tAttribute "identifier" "name" ["sky"]\n')DATA`8o ribfile.write('\t\tConcatTransform [1 0 0 0 0 1 0 0 0 0 1 0 -1573.14 307.099 -988.299 1]\n')DATAXo ribfile.write('\t\tAttribute "render" "visibility" [3]\n') # invisible to the cameraDATA(Pp ribfile.write('\t\tAttributeBegin\n')DATA,p ribfile.write('\t\t\tColor [1 1 1]\n') DATA,q ribfile.write('\t\t\tOrientation "rh"\n')DATA0Xq ribfile.write('\t\t\tReverseOrientation\n')FDATA0q ribfile.write('\t\t\tSurface "constant"\n')fDATALr ribfile.write('\t\t\tAttribute "light" "nsamples" [%s]\n'%gisteps.val)uDATA@r ribfile.write('\t\t\tAttribute "light" "shadows" ["on"]\n')DATAhs ribfile.write('\t\t\tAreaLightSource "arealight" 1 "lightcolor" [1 1 1] "intensity" [10000000000]\n')DATA4s ribfile.write('\t\t\tSphere 50000 0 50000 360\n')DATA(s ribfile.write('\t\tAttributeEnd\n')DATA$Pt ribfile.write('\tAttributeEnd\n')DATA(t ribfile.write('\tIlluminate 1 1\n')DATA4t if (indirectgi.val == 1) and (menuval.val !=6):DATA Xu if (finalgather.val == 0):&DATAPu ribfile.write('\tAttribute "indirect" "float maxerror" [%s]\n'%maxerror.val)DATAX(v ribfile.write('\tAttribute "indirect" "float maxpixeldist" [%s]\n'%maxpixeldist.val)DATAv else:DATAHv ribfile.write('\tAttribute "indirect" "float maxpixeldist" [0]\n')DATAP`w ribfile.write('\tAttribute "indirect" "integer nsamples" [%s]\n'%gisteps.val)DATA4w ribfile.write('\tLightSource "indirect" 42\n\n')DATA@x if (gisphere.val == 1):DATA(x ribfile.write('\tAttributeBegin\n')DATAXx ribfile.write('\t\tAttribute "render" "visibility" [3]\n') # invisible to the cameraDATA(hy ribfile.write('\t\tColor [1 1 1]\n')DATA0y ribfile.write('\t\tSurface "constant"\n')DATA8 z ribfile.write('\t\tSphere 2000 -2000 2000 360\n')DATA(z ribfile.write('\tAttributeEnd\n')%DATAzDATA{def render(ribfile):DATAX{ if (os.name != "posix"):DATA{ if (menuval.val == 1):DATA4{ os.system('%s %s'%(prmanrenderer.val, ribfile))DATAH| elif (menuval.val == 2):DATA4| os.system('%s %s'%(bmrtrenderer.val, ribfile))DATA| elif (menuval.val == 3):DATA88} os.system('%s %s'%(entropyrenderer.val, ribfile))DATA} elif (menuval.val == 4):DATA0} os.system('%s %s'%(dlrenderer.val, ribfile))DATAH~ elif (menuval.val == 5):DATA4~ os.system('%s %s'%(aqsisrenderer.val, ribfile))DATA~ elif (menuval.val == 6):DATA48 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))DATA8 elif (menuval.val == 3):DATA8 os.system('%s %s &'%(entropyrenderer.val, ribfile))DATA聆 elif (menuval.val == 4):DATA40 os.system('%s %s &'%(dlrenderer.val, ribfile))DATA elif (menuval.val == 5):DATA8؂ os.system('%s %s &'%(aqsisrenderer.val, ribfile))DATA@ elif (menuval.val == 6):DATA8 os.system('%s %s &'%(pixierenderer.val, ribfile))DATADATA def closeFile(ribfile):DATAh ribfile.close()DATADATA؄def writeFrame(ribfile):DATA  global sshader, cframeDATA h display = Scene.GetCurrent()DATA, context = display.getRenderingContext()DATA frames2 = 0DATA(P display = Blender.Scene.GetCurrent()DATA if (anim.val == 1):DATA8 frames = context.endFrame() - context.startFrame()DATAX else:DATA frames = 0DATAЇ if (anim.val == 1):DATA  cframe = context.startFrame()DATAh else:DATA$ cframe = Blender.Get('curframe')DATA  for x in range(frames + 1):ssDATA$@ Blender.Set('curframe', cframe)sDATA8 print 'Exporting Frame: %s'%Blender.Get('curframe')sDATA$ renderShadows(ribfile, frames2)DATA,H ribfile.write('\nFrameBegin %s\n'%cframe)DATA( writeHeader(ribfile, frames, frames2)DATA lampobj = 0DATA8 if (motionblur.val == 1):DATA( ribfile.write('MotionBegin [0 1]\n')DATA$؋ Blender.Set('curframe', cframe)DATA$( writeTransform(ribfile, lampobj)DATA<x Blender.Set('curframe', cframe + motionblurframe.val)DATA$ writeTransform(ribfile, lampobj)DATA$0 Blender.Set('curframe', cframe)DATA  ribfile.write('MotionEnd\n')DATAЍ else:DATA$ writeTransform(ribfile, lampobj)DATAX if (rgba.val == 1):DATA channels = "rgb"DATA elif (rgba.val == 2):DATA( channels = "rgba"DATAp elif (rgba.val == 3):DATA channels = "rgbz"DATA elif (rgba.val == 4):DATAH channels = "z"DATA if (buffer.val == 1):DATAlА ribfile.write('Display "%s/%s%05d.tif" "framebuffer" "%s"\n'%(imagesdir, image.val, cframe, channels))DATAh if (file.val == 1):DATAd ribfile.write('Display "%s/%s%05d.tif" "file" "%s"\n'%(imagesdir, image.val, cframe, channels))DATA@ if (preworldra.val == 1):DATA< ribfile.write('ReadArchive "%s"\n'%(preworldrafile.val))DATA$𒆬 ribfile.write('WorldBegin \n')DATA @ if (postworldra.val == 1):DATA@ ribfile.write('\tReadArchive "%s"\n'%(postworldrafile.val))DATA0 if (menuval.val == 1) or (menuval.val == 4):DATAD` 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):DATAlp ribfile.write('\tLightSource "ambientocclusion" 1 "numSamples" %s\n'%(int(pow(2,ambiSamples.val+6))))DATA if (indirect.val == 1):DATAhP ribfile.write('\tLightSource "ambientindirect" 1 "numSamples" %s\n'%(int(pow(2,ambiSamples.val+6))))DATA藆 #End PixieDATA( ambientLight(ribfile)DATAp checkLamps(ribfile)DATA if (gi.val == 1):DATA  createGI(ribfile, frames)DATAH if (hdri.val == 1):DATA if (menuval.val == 3):DATA(ؙ ribfile.write('\tAttributeBegin\n')DATAD0 ribfile.write('\t\tAttribute "visibility" "reflection" [1]\n')DATAd ribfile.write('\t\tSurface "envsurf" "string envname" ["%s"] "float blur" [0]\n'%(hdritex.val))DATA40 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 h ribfile.write('WorldEnd \n')DATA  ribfile.write('FrameEnd\n')DATA cframe = cframe + 1DATAP frames2 = frames2 + 1DATADATA4ȝdef 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 progressbarDATA8h selectedtype = 'Type:' # reset the object editor stuffDATAП selectedname = ''DATA4 filedir = os.path.normpath(pdir + filename.val)DATADp ribfile = open(filedir, 'w') # open the main ribfile (default.rib)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 + pdir + "/texturefile.rib") ) ) )DATA else:DATAD8 ribfile.write('ReadArchive "%s"\n'% (pdir + "/texturefile.rib"))DATAd texturefile = open(os.path.normpath(pdir + 'texturefile.rib'), 'w') # open the texture rib fileDATA8 if (menuval.val == 5):DATA texturefile.write('#\n')DATA,ȣ writeFrame(ribfile) # write all the framesDATA0  closeFile(ribfile) # close the main ribfileDATA texturefile.close()DATA8Ȥ selectedtype = 'Type:' # reset the object editor stuffDATA0 selectedname = ''DATA(p surfaceshadername.val = shadernametempDATAHȥ Register (gui, event, bevent) # make sure all gui values are in place`DATA4@ if (rendert.val == 1): # if the renderbutton is onDATA4 render(pdir + filename.val) # render the rib fileTXd0 8TXKEYLIST.intrr DATA,/home/intrr/tuhopuu/blender/KEYLIST.intrrDATA`@ᆬDATA`pᆬDATA𬆬`ᆬDATA𬆬8ᆬODATA8𬆬ъDATAȭ8Ҋ%DATAȭhҊCDATAXȭҊDATAXҊ"DATA讆X8ӊ%DATA讆0ӊ%DATA0x讆ӊDATAx0ԊDATAx`Ԋ,FREEDATAPԊ,DATAP Պ$oDATAఆPxՊDDATAఆ(Պ%DATA(pఆH֊D0BDATAp(֊DATAp׊+DATAH`׊!DATAH׊DATAزH׊DATAز @؊DATA hز؊t: DATAh ؊48 tDATAhيme/iDATA@`ي.xDATA@يFREEDATAд@ڊ4pDATAдPڊwin DATA`дڊDDATA`ڊDATA𵆬`(ۊW#?DATA𵆬8Xۊ win DATA8𵆬ۊ0?DATAȶ8܊$DATAȶ`܊4headDATAXȶ܊DATAX܊win DATA跆X@݊DDATA跆0݊DATA0x跆݊?DATAx0ފFREEDATAxHފDATAPފ!FREEDATAPފDATAๆP0ߊ@BDATAๆ(`ߊFREEDATA(pๆߊtDATAp(4pDATAphtpDATAH FREEDATAHኬ1DATAػHhኬDATAػ ኬDATA hػኬDATAh ⊬DATAh`⊬ DATA@⊬(DATA@⊬DATAн@(㊬,ADATAн㊬YDATA`н㊬BDATA`@䊬2DATA𾆬`䊬DATA𾆬8䊬cDDATA8𾆬劬%DATAȿ8p劬/ DATAȿ劬$DATAXȿ(抬DATAXX抬 DATAX抬DATA0抬DATA0x犬sDATAx0h犬sDATA†x犬sDATA†P†犬"sDATAP†††H芬'DATA††P†芬(' DATA†(Ɔ芬DATA(ÆpƆ(銬DATApÆÆ(Æh銬!DATAÆĆpÆ銬/CDATAĆHĆÆꊬ&DATAHĆĆĆhꊬDATAĆĆHĆꊬADATAĆ ņĆꊬ!PBDATA ņhņĆ0늬DATAhņņ ņ늬DATAņņhņ늬-DATAņ@Ɔņ(슬"DATA@ƆƆņx슬!DATAƆƆ@Ɔ슬DATAƆdžƆ슬DATAdž`džƆ8튬DATA`dždždžh튬/DATAdždž`dž튬&DATAdž8Ȇdž DATA8ȆȆdžpDATAȆȆ8Ȇ!DATAȆɆȆ TimDATAɆXɆȆ8'pDATAXɆɆɆ!DATAɆɆXɆnterDATAɆ0ʆɆ($VDATA0ʆxʆɆ2ibDATAxʆʆ0ʆ)DATAʆˆxʆ8DATAˆPˆʆhDATAPˆˆˆ;DATAˆˆPˆ'DATAˆ(̆ˆpDATA(̆p̆ˆDATAp̆̆(̆DATĂ͆p̆0#DATA͆H͆̆<DATAH͆͆͆DATA͆͆H͆ &DATA͆ Ά͆x.DATA ΆhΆ͆/DATAhΆΆ Ά8'DATAΆΆhΆ)DATAΆ@φΆDATA@φφΆ2DATAφφ@φxDATAφІφ*DATAІ`ІφDDATA`ІІІDATAІІ`ІDATAІ8цІ/DATA8ццІh!DATAцц8ц5DATAц҆ц IDATA҆X҆ц@DATAX҆҆҆/homDATA҆҆X҆8 DATA҆0ӆ҆p,?DATA0ӆxӆ҆T FIDATAxӆӆ0ӆ*DATAӆԆxӆp?DATAԆPԆӆ*DATAPԆԆԆDATAԆԆPԆX*DATAԆ(ՆԆDATA(ՆpՆԆDATApՆՆ(ՆHDATAՆֆpՆx DATAֆHֆՆDATAHֆֆֆDATAֆֆHֆ@=DATAֆ ׆ֆDATA ׆h׆ֆDATAh׆׆ ׆@DATA׆׆h׆DATA׆@؆׆0DATA@؆؆׆ W#?DATA؆؆@؆hDATA؆ن؆DATAن`ن؆ ?DATA`نننP1ecDATAنن`ن#DATAن8چنDATA8چچنHDATAچچ8چxDATAچۆچADATAۆXۆچ03DATAXۆۆۆ#DATAۆۆXۆ+DATAۆ0܆ۆ8hcDATA0܆x܆ۆh DATAx܆܆0܆DATA܆݆x܆:endDATA݆P݆܆h4DATAP݆݆݆xxH@DATA݆݆P݆dummDATA݆(ކ݆PwH@DATA(ކpކ݆ DATApކކ(ކ )DATAކ߆pކ83DATA߆H߆ކDATAH߆߆߆0xH@DATA߆߆H߆*wH@DATA߆ ߆`throDATA h߆65DATAh 29-ADATAh( %DATA DATA@ᆬDATApᆬDATAᆬKey FunctionDATAPᆬ-------------------------------------------------------------------------------DATAъ~ Display all layersDATA(ҊShift-~ Display all/previous layersDATAhҊREEDATA Ҋ1..2..0-= Show layer 1..2..12DATA$ҊALT-1..2..0 Show layer 11..12..20DATA(8ӊSHIFT-1..2..0-= Toggle layer 1..2..12DATA(ӊSHIFT-ALT-... Toggle layer 11..12..20DATAӊDATAԊNumpad DEL Zoom on objectDATA0`ԊNumpad / Local view on object (hide others)DATA0ԊNumpad * Rotate view to object's local axesDATA( ՊNumpad + Zoom in (works everywhere)DATAHxՊNumpad + Proportional vertex edit mode: Increase range of influenceDATA(ՊNumpad - Zoom out (works everywhere)DATAHH֊Numpad - Proportional vertex edit mode: Decrease range of influenceoDATA֊Numpad INS Set Camera viewDATA,׊CTRL-Numpad INS Set active object as cameraDATA$`׊ALT-Numbad INS Restore old cameraDATA׊Numpad 1 Front viewDATA׊CTRL-Numpad 1 Back viewDATA@؊Numpad 3 Right-Side viewDATA ؊CTRL-Numpad 3 Left-Side view aDATA؊Numpad 7 Top viewDATAيCTRL-Numpad 7 Bottom view EDATA0`يNumpad 5 Toggle orthogonal / perspective viewNDATAيNumpad 9 Redraw viewEEDATAڊNumpad 2 Rotate view leftDATAPڊNumpad 6 Rotate view rightDATAڊNumpad 8 Rotate view upDATAڊNumpad 2 Rotate view downDATA(ۊREEDATA$XۊPgUp IPO: Select next keyframeDATA4ۊCTRL-PgUp IPO: Select and jump to next keyframeDATA(܊PgDn IPO: Select previous keyframe_DATA8`܊CTRL-PgDn IPO: Select and jump to previous keyframeDATA܊REEDATA܊LEFT One frame backwardsDATA@݊RIGHT One frame forwardsDATA݊DOWN 10 frames backwardsDATA݊UP 10 frames forwardsDATAފDATAHފTAB Enter/exit edit modeDATA$ފTAB Sequencer: Edit meta stripDATA ފCTRL-TAB Enter/exit pose modeDATA0ߊDATA `ߊA Select all / Deselect allDATA ߊALT-A Animate current windowDATA8CTRL-A Apply object's size/rotation to object dataDATA hSHIFT-A Sequencer: ADD menuDATA$SHIFT-ALT-A Animate all windowsDATA4ኬSHIFT-CTRL-A Apply lattice / Make dupliverts realDATAhኬDATAኬB Border selectDATAኬBB Circle selectDATA⊬SHIFT-B Set render borderDATA`⊬DATA⊬C Center view on cursorDATA ⊬C Sequencer: Change imagesDATA0(㊬C IPO: Snap current frame to selected keyDATA㊬ALT-C Convert menu@fDATAD㊬CTRL-C Copy menu (Copy properties of active to selected objects)DATA4@䊬SHIFT-C Center and zoom view on selected objectsDATA䊬DATA䊬D Set 3d draw modeDATA(劬ALT-D Create new instance of objectCDATA0p劬CTRL-D Display alpha of image texture as wireDATA(劬SHIFT-D Create full copy of objectDATA(抬DATAX抬E ExtrudeDATA抬sDATA 抬F Edit mode: Make edge/faceDATA 犬F Sequencer: Set Filter YsDATAh犬F Faceselect modeDATA犬ALT-F Beautify fillsDATA$犬CTRL-F Sort faces in Z directionDATA(H芬CTRL-F Edit mode: Flip triangle edgesDATA,芬SHIFT-F Edit mode: Fill with trianglesDATA芬DATA(銬G Grab (move)DATAh銬ALT-G Clear locationDATA0銬SHIFT-ALT-G Remove selected objects from groupDATA(ꊬCTRL-G Add selected objects to groupDATAhꊬSHIFT-G Group menuDATAꊬDATA$ꊬH Hide selected vertices/facesDATA 0늬H Curves: Set handle typeDATA늬ALT-H Reveal verticesDATA0늬CTRL-H Curves: Automatic handle calculationEEDATA$(슬SHIFT-H Hide deselected verticesDATA$x슬SHIFT-H Curves: Set handle typeDATA슬DATA슬I Keyframe menuDATA8튬DATA0h튬J Mesh: Join all adjacent triangles to quadsDATA(튬J Swap render page of render windowDATA CTRL-J Join selected objectsDATApCTRL-J Nurbs: Add segmentDATA$CTRL-J IPO: Join keyframes menu DATAwH@DATA(8K 3d window: Show keyframe positionsDATA$K IPO: Show keyframe positionsDATAK Nurbs: Print knotsDATA((CTRL-K Make skeleton from armatureDATA4SHIFT-K Show and select all keyframes for objectDATA,SHIFT-K Faceselect: Clear vertexcoloursDATA8DATAhL Make local menuDATA<L Edit mode: Select linked vertices (near mouse pointer)DATA(L OOPS window: Select linked objectsDATApCTRL-L Make links menuDATASHIFT-L Select links menuDATADATA$0M Move object to different layerDATA@M Sequencer: Make meta strip (group) from selected stripsDATADATA( N Numeric input menu (Size/Rot/Loc)DATA0xN OOPS window: Rename object/linked objectsDATA0CTRL-N Armature: Recalculate bone roll anglesDATA(8CTRL-N Recalculate normals to outsideDATA,CTRL-ALT-N Recalculate normals to insideDATADATA4O Edit mode: Toggle proportional vertex editingDATAxALT-O Clear object originDATA,CTRL-O Revert current file to last savedDATAHSHIFT-O Proportional vertex edit mode: Toggle smooth/steep falloffDATADATAP Start realtime engineDATA0P Edit mode: Seperate vertices to new objectDATA$hALT-P Clear parent relationshipDATA8CTRL-P Make active object parent of selected objectDATAL CTRL-SHIFT-P Make active object parent of selected object without inverseDATADCTRL-P Edit mode: Make active vertex parent of selected objectDATADATA 8R RotateDATA0pR IPO: Record mouse movement as IPO curveXcDATARX Rotate around X axisDATA,RXX Rotate around object's local X axisDATApRY Rotate around Y axisEDATA,RYY Rotate around object's local Y axisDATARZ Rotate around Z axisDATA,XRZZ Rotate around object's local Z axisEDATA ALT-R Clear object rotationDATASHIFT-R Nurbs: Select rowDATAHDATA xS ScaleDATASX Flip around X axisDATASY Flip around Y axisDATA@@ALT-S Edit mode: Shrink/fatten (Scale along vertex normals)cDATAALT-S Clear object sizeDATACTRL-S Edit mode: ShearDATA @SHIFT-S Cursor/Grid snap menuDATADATA4T Sequencer: Touch and print selected moviesDATA T Adjust texture spaceEEDATA hT Edit mode: Flip 3d curveDATAT IPO: Change IPO typeDATA$ALT-T Clear tracking of objectDATA4PCTRL-T Make selected object track active objectDATA$CTRL-T Mesh: Convert to trianglesDATACTRL-ALT-T BlenchmarkDATAHDATAxU Make single user menuDATADU Edit mode: Reload object data from before entering edit modeBDATA40U Faceselect mode: Automatic UV calculation menuDATA$U Vertex-/Weightpaint mode: UndoDATA,CTRL-U Save current state as user defaultDATA8DATA$hV Curves/Nurbs: Vector handleDATAV Vertexpaint modeonDATA<ALT-V Scale object to match image texture's aspect ratioDATA8hSHIFT-V Edit mode: Align view to selected verticesDATAausDATA W Boolean operations menuwH@DATA PW Edit mode: Specials menuDATACTRL-W Save current fileDATA$CTRL-W Nurbs: Switch directionDATA48SHIFT-W Warp/bend selected vertices around cursorDATAtonDATAX Delete menuDATA,CTRL-X Restore default state (Erase all)DATA`rtrDATA8Y Mesh: Split selected vertices/faces from the restDATAsDATA(( Z Switch 3d draw type (see also D)-ADATA Q>TXd 0TXblenderman0.1beta9.0.pX,DATALp/home/jerome/soft/3D/blender/blenderman0.1beta9.0/blenderman0.1beta9.0.pyDATA0@DATA0xxDATAx0DATAxw xDATAP0 DATAPpDATAP6DATA(DATA(pHDATAp(x>DATAp茍$DATAH@DATAH8RDATAH2DATA PDATA hDATAh  DATAh DATA@8 DATA@pDATA@DATADATA`HDATA` DATA`DATA8 BDATA8hDDATA8CDATADATAX'DATAXXDATAXFDATA0DATA0x8DATAx0h1DATAxȓDATAPDATAP`DATAP"DATA(!DATA(p02DATAp(DATApDATAH*DATAH`&FREEDATAH(14.zDATA -~DATA hpromeDATAh DATAhDATA@ DATA@hDATA@DATA𘍬DATA`8DATA`DATA`șDATA8DATA8XDATA8#DATA 𚍬DATA X @DATAX   `-W@DATA  X !DATA 0! 0"DATA0!x! #RW@DATAx!!0!М%FileDATA!"x!(!DATA"P"!x#DATAP"""ȝ"DATA""P"!DATA"(#"h!DATA(#p#"#DATAp##(#"DATA#$p#XDATA$H$#DATAH$$$蟍DATA$$H$(DATA$ %$pDATA %h%$?DATAh%% %𠍬ܦDATA%%h%8DATA%@&% DATA@&&%DATA&&@&DATA&'&HDATA'`'&DATA`'''آDATA''`'(DATA'8('pDATA8(('DATA((8(DATA()(HDATA)X)(DATAX)))ؤDATA))X) DATA)0*)hDATA0*x*)DATAx**0*DATA*+x*HDATA+P+*DATAP+++ئDATA++P+DATA+(,+`DATA(,p,+DATAp,,(,𧍬DATA,-p,@DATA-H-,DATAH---ШDATA--H- h@DATA- .-h/kDATA .h.-DATAh.. .DATA..h.HDATA.@/.DATA@//.認 DATA//@/8DATA/0/DATA0`0/ثDATA`000(DATA00`0p DATA0810DATA8110DATA1181PDATA121DATA2X21𭍬'DATAX222HDATA22X2DATA2032خDATA03x32 DATAx3303hDATA34x3DATA4P43DATAP444HDATA44P4DATA4(54ذDATA(5p54 DATAp55(5hDATA56p5DATA6H65DATAH666P DATA66H6DATA6 76಍DATA 7h76( DATAh77 7pDATA77h7DATA7@87DATA@887@DATA88@8DATA898XDATA9`98DATA`999ඍ&DATA99`98176DATA98:9*208DATA8::9ظՀ/&DATA::8:DATA:;:蹍Y%DATA;X;:(ADATAX;;;"DATA;;X;@DATA;0<;19-SDATA0<x<;`DATAx<<0<DATA<=x<𼍬 1 DATA=P=<DATAP===rwxDATA==P=PDATA=(>=DATA(>p>=辍rwxDATAp>>(>0DATA>?p>xDATA?H?>rwxDATAH???DATA??H?PDATA? @?859 DATA @h@?DATAh@@ @(DATA@@h@pr--DATA@@A@DATA@AA@=DATAAA@APaDATAABA_18-MDATAB`BApÍCeb-0DATA`BBBÍADATABB`BPč1rwxDATAB8CBč>@DATA8CCB ōy]DATACC8Cō7DATACDC0ƍDATADXDCxƍDATAXDDDƍ077DATADDXDǍDATAD0EDHǍDATA0ExEDǍ DATAxEE0EǍDATAEFxEȍ$DATAFPFE`ȍ"DATAPFFFȍ,DATAFFPFɍDATAF(GFPɍDATA(GpGFɍDATApGG(GɍDATAGHpGʍ DATAHHHG@ʍ DATAHHHHxʍDATAHHHHʍDATAH IHʍ DATA IhIH8ˍDATAhII Ihˍ.DATAIIhIˍDATAI@JI̍DATA@JJIX̍,DATAJJ@J̍DATAJKJ̍/DATAK`KJP͍#pDATA`KKK͍3DATAKK`K΍/DATAK8LK`΍8DATA8LLK΍/DATALL8L(ύ-DATALMLύ2DATAMXMLύ DATAXMMM8Ѝ!DATAMMXMЍ$DATAM0NMЍ"pp`DATA0NxNM0эDATAxNN0NxэDATANOxNэDATAOPONҍpDATAPOOOHҍ DATAOOPOҍDATAO(POҍ"DATA(PpPO0ӍDATApPP(PxӍ%DATAPQpPӍDATAQHQPԍDATAHQQQ`ԍDATAQQHQԍ DATAQ RQԍDATA RhRQ@ՍDATAhRR RՍDATARRhRՍDATAR@SR ֍DATA@SSRh֍DATASS@S֍DATASTS֍DATAT`TS@׍DATA`TTT׍DATATT`T׍ DATAT8UT׍PDATA8UUTp؍UDATAUU8U؍_DATAUVUٍpDATAVXVU(ڍaDATAXVVVڍbDATAVVXVHۍ_DATAV0WVۍZDATA0WxWV`܍gDATAxWW0W܍`DATAWXxWݍPDATAXPXWލ^DATAPXXXލEDATAXXPXߍ^DATAX(YXߍ^DATA(YpYX0X24 .DATApYY(Y=@DATAYZpY(፬ DATAZHZYX፬204-ODATAHZZZ፬ 39 .DATAZZHZ፬4 21DATAZ [Z8⍬RW@DATA [h[Z⍬@DATAh[[ [⍬81 .DATA[[h[⍬4 DATA[@\[X㍬r-- DATA@\\[㍬(r-- DATA\\@\䍬24-ODATA\]\H䍬.23-ODATA]`]\䍬59 .DATA`]]]䍬(.docDATA]]`]H卬 jerDATA]8^]卬23-ADATA8^^]卬 jerDATA^^8^捬)@DATA^_^X捬x23-ADATA_X_^獬ssavDATAX___獬DATA__X_P荬DATA_0`_鍬dDATA0`x`_鍬DATAx``0`鍬DATA`ax`ꍬDATAaPa`hꍬH2YDATAPaaa0덬FDATAaaPa덬pDATAa(ba썬LDATA(bpbaP퍬NDATApbb(b퍬~KDATAbcpbWDATAcHcbDATAHcccy0DATAccHc@}XDATAc dcDATA dhdc8DATAhdd dbZDATAddhdnTPDATAd@ediDATA@eedPaDATAee@e`DATAefe(}TSDATAf`feYDATA`fffPDATAff`f{DATAf8gfDATA8ggf@DATAgg8gDATAghg8DATAhXhgDATAXhhh@wDATAhhXhDATAh0ihDATA0ixih}FREEDATAxii0iFREEDATAijxiXDATAjPji}DATAPjjjPDATAjjPjtDATAj(kjDATA(kpkjhjDATApkk(kiDATAklpkIDATAlHlkLDATAHlllTfDATAllHlTFREEDATAl mlDATA mhmlDATAhmm m(DATAmmhmpDATAm@nmDATA@nnmDATAnn@n8qDATAnonDATAo`onDATA`oooDATAoo`oPDATAo8po7DATA8ppoDATApp8p@ctsDATApqp*DATAqXqpbDATAXqqqpDATAqqXqDATAq0rq DATA0rxrqH DATAxrr0r DATArsxr 1@DATAsPsr( FREEDATAPsssp /DATAssPs DATAs(ts DATA(tptsH DATAptt(t DATAtupt DATAuHut8 DATAHuuu DATAuuHu 4zDATAu vu D$DATA vhvuH 'DATAhvv v DATAvvhvhYDATAv@wvDATA@wwv DATAww@w[DATAwxwder/DATAx`xwuDATA`xxxDATAxx`xptDATAx8yxx}DATA8yyx(DATAyy8yDATAyzy333?DATAzXzyDATAXzzz DATAzzXzDATADATAz0{zB.blDATA0{x{zsDATAx{{0{0DATA{|x{y3dDATA|P|{>DATAP|||rDATA||P|{DATA|(}|PvDATA(}p}|333?DATAp}}(}H DATA}~p}DATADATA~H~}`DATAH~~~0DATA~~H~DATA~ ~DATA h~DATAh DATAhDATA@ DATA@ DATAЀ@!DATAЀ`"0DATA`Ѐ #XDATA`#"~(DATA`0$cDATADATA8$1DATA8%~8DATAȂ8%TDATAȂh&`DATAXȂ& DATADATAX'wFREEDATA胋X'DATA胋0'DATA0x胋8(a`DATAx0(DATAx)]FREEDATAP)@DATAP*erDATAP`*@DATADATA(*@DATA(p@+KDATAp(+DATAp,jDATAH,kDATAH8-jDATA؇H-lDATA؇ p.DATA h؇.fDATAh X/pDATAh/sDATA@0dDATA@01c۷zADATAЉ@1MDATAЉ@2jzADATA`Љ2qDATA`03bDATA`3(DATA84DATA8X4DATAȋ84Mg.DATAȋ 5DATAXȋh5DATAX5ODATA茋X86DATA茋07DATA0x茋h7ODATAx07SDATAxh8PDATAP8=DATAPX9gDATAP9`DATA(:DDATA(p:[DATAp(;DATAp;DATAH;DATAH@<eDATAؐH<DATAؐ =7DATA hؐ=p~DATAh =DATAh >@DATA@h>eDATA@>$DATAВ@?DATAВ?DATA`В @VDATA`@ODATA𓋬`(ADATA𓋬8pA)DATA8𓋬ADATAȔ8B!DATAȔhB)DATAXȔBDATAXCDATA蕋XXC"DATA蕋0C DATA0x蕋CXDATAx0hDsDATAxEDATAPPEIDATAPEuDATAPpFDATA(FDATA(pxG DATAp(GDATAp`H/DATAHH|DATAHpI1DATAؙHIyDATAؙ xJ DATA hؙJDATAh KaDATAhLaDATA@LfDATA@8M$DATAЛ@MDATAЛHNDATA`ЛNDATA`NDATA𜋬`(ODATA𜋬8PP$DATA8𜋬P1DATAȝ8QDATAȝQIDATAXȝ8RsDATAXR-DATA螋X8S2DATA螋0SDDATA0x螋TDATAx0XTqDATAxTDATAP@UeDATAPU$DATAࠋP0VDATAࠋ(V^DATA(pࠋWDATAp(`W[DATApW[DATAHpX^DATAHY^DATAآHYDDATAآ ZoDATA hآZaDATAh 8[dDATAh[DATA@\DATA@@\DATAФ@\DATAФ\DATA`Ф]!DATA``]DATA𥋬`].DATA𥋬8^DATA8𥋬H^DATAȦ8^!DATAȦ^DATAXȦ(_.DATAX_DATA觋X_aDATA觋0``DATA0x觋`3DATAx0aDATAxPaoDATAPaDATAP8b8DATAੋPbDATAੋ(bWDATA(pੋpcDATAp(c;DATAp dDATAHhd2DATAHdDATAثHe1DATAث peDATA hثe0DATAh fDATAh`fSDATA@fDATA@gDATAЭ@Xg!DATAЭgDATA`Эg)DATA`8h DATA𮋬`phDATA𮋬8hDATA8𮋬hoDATAȯ8i&DATAȯi DATAXȯjDATAX`jDATA谋XjDATA谋0j2DATA0x谋@kDATAx0k DATAxkDATAPlDATAPHlDATAಋPlDATAಋ(lDATA(pಋ(m,DATAp(m DATApm*DATAHnDATAHPn,DATAشHnDATAش o.DATA hش`oDATAh oDATAhoDATA@0p$DATA@pDATAж@pDATAжqDATA`жXq1DATA`qDATA𷋬`qDATA𷋬8Hr'DATA8𷋬r DATAȸ8rDATAȸ0s,DATAXȸsDATAXsDATA蹋XtDATA蹋0XtDATA0x蹋tDATAx0tDATAx0u,DATAPuDATAPuDATA໋PvDATA໋(XvDATA(p໋vDATAp(vDATAp0w-DATAHwDATAHwDATAؽHxDATAؽ XxDATA hؽxDATAh xDATAh0y-DATA@yDATA@yDATAп@zDATAпXzDATA`пzDATA`zDATA`0{DATA8p{DATA8{DATA8|DATA‹H|DATA‹X‹|DATAX‹‹‹|DATA‹‹X‹ }DATA‹0ˋ`}DATA0Ëxˋ}DATAxËË0Ë}DATAËċxË8~DATAċPċË~DATAPċċċ~DATAċċPċDATAċ(ŋċPDATA(ŋpŋċDATApŋŋ(ŋDATAŋƋpŋ(DATAƋHƋŋpDATAHƋƋƋDATAƋƋHƋDATAƋ NjƋ@DATA NjhNjƋDATAhNjNj NjЁDATANjNjhNjDATANj@ȋNj`DATA@ȋȋNjDATAȋȋ@ȋDATAȋɋȋ0DATAɋ`ɋȋxDATA`ɋɋɋDATAɋɋ`ɋDATAɋ8ʋɋPDATA8ʋʋɋDATAʋʋ8ʋ'DATAʋˋʋ8]DATAˋXˋʋȅDATAXˋˋˋx1DATAˋˋXˋ؆DATAˋ0̋ˋDATA0̋x̋ˋ臎 DATAx̋̋0̋ )DATA̋͋x̋xDATA͋P͋̋ DATAP͋͋͋DATA͋͋P͋H'DATA͋(΋͋DATA(΋p΋͋DATAp΋΋(΋0,DATA΋ϋp΋<DATAϋHϋ΋'DATAHϋϋϋX:DATAϋϋHϋDATAϋ ЋϋDATA ЋhЋϋHDATAhЋЋ ЋDATAЋЋhЋȌDATAЋ@ыЋDATA@ыыЋP(DATAыы@ыDATAыҋыDATAҋ`ҋы8DATA`ҋҋҋxDATAҋҋ`ҋDATAҋ8ӋҋMDATA8ӋӋҋ"DATAӋӋ8ӋDATAӋԋӋ0'DATAԋXԋӋ(DATAXԋԋԋ9DATAԋԋXԋHDATAԋ0Ջԋ&DATA0ՋxՋԋ𑎬DATAxՋՋ0Ջ@'DATAՋ֋xՋ:DATA֋P֋ՋDATAP֋֋֋P+DATA֋֋P֋DATA֋(׋֋蓎DATA(׋p׋֋0&DATAp׋׋(׋$DATA׋؋p׋DATA؋H؋׋ DATAH؋؋؋pDATA؋؋H؋,DATA؋ ً؋DATA ًhً؋`-DATAhًً ً4DATAًًhً(DATAً@ڋًpDATA@ڋڋًDATAڋڋ@ڋDATAڋۋڋX3DATAۋ`ۋڋDATA`ۋۋۋx(DATAۋۋ`ۋЙ:DATAۋ8܋ۋ8'DATA8܋܋ۋDATA܋܋8܋ؚDATA܋݋܋ !DATA݋X݋܋pDATAX݋݋݋DATA݋݋X݋DATA݋0ދ݋HDATA0ދxދ݋5DATAxދދ0ދ𜎬9DATAދߋxދX(DATAߋPߋދDATAPߋߋߋDATAߋߋPߋ8DATAߋ(ߋDATA(pߋȞDATAp(DATAዬpXDATAዬHዬDATAHዬዬዬIDATAዬዬHዬXHDATAዬ ⋬ዬР&DATA ⋬h⋬ዬ((DATAh⋬⋬ ⋬'DATA⋬⋬h⋬ء)DATA⋬@㋬⋬0'DATA@㋬㋬⋬"DATA㋬㋬@㋬آ.DATA㋬䋬㋬8EDATA䋬`䋬㋬DATA`䋬䋬䋬BDATA䋬䋬`䋬h>DATA䋬8勬䋬ؤ.DATA8勬勬䋬8RDATA勬勬8勬0DATA勬括勬NDATA括X括勬DDATAX括括括DATA括括X括X>DATA括0独括ȧ_DATA0独x独括X`DATAx独独0独討DATA独苬x独0DATA苬P苬独DATAP苬苬苬DATA苬苬P苬DATA苬(鋬苬ȫDATA(鋬p鋬苬"DATAp鋬鋬(鋬଎JDATA鋬ꋬp鋬XDATAꋬHꋬ鋬DATAHꋬꋬꋬ诎(DATAꋬꋬHꋬ@DATAꋬ 달ꋬDATA 달h달ꋬqDATAh달달 달`+DATA달달h달-DATA달@심달&DATA@심심달p(DATA심심@심Ȳ0DATA심틬심(-DATA틬`틬심0DATA`틬틬틬賎,DATA틬틬`틬H0DATA틬8틬*DATA8틬9DATA8h_DATA&DATAXP DATAXDATAX趎%DATA0@&DATA0xDATAx0طDATAx(&DATAPDATAPDATAPDATA(򋬘PDATA(p񋬘DATAp(蹎DATAp(DATAH󋬸pDATAHDATAHDATA 􋬐HDATA h󋬘DATAh ػDATAh(DATA@hDATA@􋬨 DATA@DATA@DATA`DATA`нDATA`DATA8`DATA8DATA8𾎬DATA0DATAXpDATAXDATAXDATA0HDATA0xDATAx0DATAxDATAPhDATAPDATAPDATA(0ŽDATA(pŽDATAp(ŽDATApÎDATAHHÎDATAHÎ*DATAHÎ&DATA HĎDATA hĎDATAh Ď+DATAh0Ŏ!DATA@Ŏ&DATA@Ŏ"DATA@(Ǝ&DATAƎ'DATA`ƎDATA` ǎDATA`hǎDATA8ǎ*DATA8Ȏ1DATA8pȎDATAȎDATAXɎ&DATAXXɎDATAXɎDATA0ɎDATA0x0ʎDATAx0ʎ*DATAxʎ1DATAP8ˎ7DATAPˎDATAPˎDATA(8̎DATA(p̎DATAp(̎DATAp͎?DATAHp͎DATAH͎,DATAHΎDATA @Ύ DATA hxΎDATAh Ύ#DATAhώDATA@hώ%DATA@ώDATA@ЎDATAHЎDATA`Ў&DATA`ЎDATA`8юDATA8 ю&DATA8  ю DATA  8 ҎDATA  HҎ$DATA X ҎDATAX   Ҏ~DATA  X ӎDATA 0 HԎQDATA0 x Ԏ DATAx  0 Վ(DATA  x `Վ,DATA P ՎDATAP   ՎDATA  P H֎DATA ( ֎ DATA( p ֎"DATAp  ( ׎DATA p X׎iDATAH ׎wDATAH؎oDATAH8َgDATA َ"DATA h ڎ*DATAh xڎDATAhڎ DATA@ڎDATA@@ێxDATA@ێtDATA܎oDATA`0ݎvDATA`ݎoDATA`xގrDATA8ߎrDATA8ߎzDATA8`2DATADATAXᎬDATAX@ᎬDATAXᎬ#DATA0ᎬDATA0x ⎬DATAx0p⎬DATAx⎬DATAP⎬ DATAP0㎬DATAPp㎬DATA(㎬DATA(p㎬DATAp( 䎬DATApX䎬DATAH䎬 DATAH䎬 DATAH厬 DATA H厬DATA h厬+DATAh 厬 DATAh(掬DATA@p掬DATA@掬DATA@玬(DATA`玬DATA`玬*DATA`莬DATA`X莬(DATA8莬 DATA8莬 DATA8(鎬DATAp鎬"DATAX鎬$DATAXꎬ$DATAXpꎬ%DATA0ꎬ&DATA0x 뎬"DATAx0p뎬%DATAx뎬%DATAP 쎬#DATAPp쎬"DATAP쎬DATA(펬#DATA(p`펬#DATAp(펬!DATA p$DATA H XDATAH   DATA  H (DATA  ! P#DATA !h! DATAh!! !!DATA!!h!8'DATA!@"!DATA@""!"DATA""@"0DATA"#"x$DATA#`#""DATA`### &DATA##`#x(DATA#8$#-DATA8$$#0!DATA$$8$DATA$%$$DATA%X%$( DATAX%%%x DATA%%X%!DATA%0&%!DATA0&x&%hDATAx&&0&!DATA&'x&DATA'P'&X'DATAP''''DATA''P'DATA'(('X#DATA((p('"DATAp(((("DATA()p(H DATA)H)(#DATAH)))DATA))H)0DATA) *)xDATA *h*)!DATAh** *DATA**h*hDATA*@+*DATA@++* DATA++@+XDATA+,+DATA,`,+DATA`,,,H DATA,,`, DATA,8-, DATA8--,8DATA--8-DATA-.-!DATA.X.-($DATAX...DATA..X.#DATA.0/. 'DATA0/x/.xDATAx//0/DATA/0x/DATA0P0/h!DATAP000DATA00P0!DATA0(10X#DATA(1p10DATAp11(1DATA12p1H"DATA2H21!DATAH222 DATA22H28DATA2 32DATA 3h32DATAh33 3(DATA33h3x#DATA3@43!DATA@443#DATA44@4hDATA454DATA5`54DATA`555X!DATA55`5$DATA5865#DATA8665P&DATA6686"DATA676$DATA7X76P%DATAX777$DATA77X7 #DATA7087P &DATA08x87 "DATAx8808 $DATA89x8P $DATA9P98 "DATAP999 'DATA99P9P #DATA9(:9 'DATA(:p:9 $DATAp::(:P #DATA:;p: (DATA;H;: !DATAH;;;H DATA;;H;x DATA; <; DATA <h<; vDATAh<< <DATA<=DATA>`>=(DATA`>>>`DATA>>`>DATA>8?>DATA8??>DATA??8?PDATA?@?DATA@X@?DATAX@@@DATA@@X@8DATA@0A@DATA0AxA@DATAxAA0ADATAABxA8DATABPBApDATAPBBBDATABBPBDATAB(CB@DATA(CpCB DATApCC(CDATACDpC DATADHDC0DATAHDDD`DATADDHDDATAD ED9DATA EhEDP6DATAhEE EDATAEEhEDATAE@FEP DATA@FFEDATAFF@F0DATAFGF DATAG`GFXDATA`GGGDATAGG`GDATAG8HGDATA8HHGXDATAHH8HDATAHIHDATAIXIHDATAXIIIHDATAIIXI_DATAI0JIdDATA0JxJIDATAxJJ0JDATAJKxJ@DATAKPKJx.DATAPKKK DATAKKPK(2DATAK(LK.DATA(LpLK8DATApLL(LP.DATALMpL,DATAMHMLDATAHMMM`DATAMMHMDATAM NM "DATA NhNMP DATAhNN N DATANNhN DATAN@ON!DATA@OONh!DATAOO@O!"DATAOPO"DATAP`POP"DATA`PPP"DATAPP`P"DATAP8QP8#DATA8QQP#DATAQQ8Q#DATAQRQ$DATARXRQ@$DATAXRRRp$*DATARRXR$XDATAR0SRP%DATA0SxSR%(DATAxSS0S%#DATASTxSH&#DATATPTS&DATAPTTT&+DATATTPT@'DATAT(UTx'+DATA(UpUT'DATApUU(U ( DATAUVpUp(DATAVHVU(oDATAHVVV`)#DATAVVHV)"DATAV WV*:DATA WhWVh*nDATAhWW W+?DATAWWhWx+GDATAW@XW+ADATA@XXW`,DATAXX@X,9DATAXYX- DATAY`YX8-DATA`YYYp-DATAYY`Y-DATAY8ZY.PDATA8ZZY.;DATAZZ8Z.0DATAZ[ZH/?DATA[X[Z/FDATAX[[[00TDATA[[X[0MDATA[0\[81KDATA0\x\[1IDATAx\\0\(2DATA\]x\p2 DATA]P]\2-DATAP]]] 3FDATA]]P]3/DATA](^]3CDATA(^p^]h4KDATAp^^(^4,DATA^_p^@5*DATA_H_^5MDATAH___6,DATA__H_x6DATA_ `_6NDATA `h`_@7DATAh`` `7?DATA``h`7DATA`@a`(8DATA@aa`X8%DATAaa@a8DATAaba8DATAb`ba89DATA`bbb9DATAbb`b9#DATAb8cb:DATA8ccbH:DATAcc8c:)DATAcdc:DATAdXdc0;9DATAXddd;DATAddXd;DATAd0ed(<DATA0exedp<DATAxee0e<DATAefxe=DATAfPfeH=DATAPfff=DATAffPf=DATAf(gf >DATA(gpgfh>DATApgg(g>DATAghpg>DATAhHhg@?DATAHhhh?DATAhhHh?DATAh ih@DATA ihihH@DATAhii i@DATAiihi@ DATAi@ji0A'DATA@jjiAFDATAjj@jBDATAjkj8BDATAk`kjCDATA`kkk0CDATAkk`kxCDATAk8lkC DATA8llkD%DATAll8lXDDATAlmlD#DATAmXmlDDATAXmmm0EDATAmmXmpEDATAm0nmE DATA0nxnmFDATAxnn0nPF DATAnoxnF%DATAoPonFDATAPooo@GDATAooPopG$DATAo(poG#DATA(pppoH%DATAppp(ppH!DATApqppH%DATAqHqpIDATAHqqq`I#DATAqqHqIDATAq rqI DATA rhrq@JDATAhrr rJDATArrhrJ DATAr@sr KDATA@ssrpKDATAss@sK*DATAstsL DATAt`tsHLDATA`tttLFDATAtt`tM%DATAt8ut`M3DATA8uutMDATAuu8uN DATAuvuNNDATAvXvu@O%DATAXvvvO&DATAvvXvO3DATAv0wvPPxDATA0wxwvPDATAxww0w@QDATAwxxwQDATAxPxwQDATAPxxxRDATAxxPx`RDATAx(yxRDATA(ypyxRDATApyy(y0SLDATAyzpyS*DATAzHzyT2DATAHzzzhTBDATAzzHzTDATAz {z U0DATA {h{zU DATAh{{ {U0DATA{{h{V5DATA{@|{V'DATA@||{V9DATA||@|@WZDATA|}|WDATA}`}|X(DATA`}}}hX DATA}}`}X(DATA}8~}X%DATA8~~}PYDATA~~8~Y7DATA~~Y#DATAX~HZ|DATAXZ!DATAXH[DATA0x['DATA0x[DATAx0\#DATAxh\0DATAP\0DATAP(]0DATAP]0DATA(]3DATA(pH^3DATAp(^3DATAp_,DATAHh_DATAH_DATA؃H_DATA؃ `DATA h؃h`DATAh `DATAhaDATA@@a.DATA@a'DATAЅ@a%DATAЅPbKDATA`Ѕb+DATA` cDATA``cDATA8cDATA8c-DATAȇ88dDATAȇdEDATAXȇeDATAX8e;DATA舌XeDATA舌0eDATA0x舌0f/DATAx0fDATAxfDATAPg#DATAPXg6DATAPgDATA(hDATA(pPhDATAp(hDATAphDATAH(iGDATAHiDATA،HiDATA، jDATA h،`jDATAh j3DATAhj+DATA@PkDATA@kDATAЎ@k<DATAЎ8lDATA`ЎXmDATA`hnlDATA`oDATA80pDATA8@qqDATAȐ8qDATAȐsDATAXȐtDATAXPtDATA葌XpuDATA葌0vDATA0x葌vDATAx0wvDATAxwDATAPxDATAPxDATAP@y@DATA(zDATA(pzBDATAp(h|DATAp|#DATAH}vDATAH}DATAؕH~JDATAؕ DATA hؕDATAh 8DATAh,DATA@聏DATA@8DATAЗ@6DATAЗDATA`ЗȄDDATA`@DATA𘌬``DATA𘌬8DATA8𘌬DATAș8DATAșP#DATAXșDATAXЈDATA蚌X DATA蚌0hDATA0x蚌)DATAx0"DATAxX8DATAPDATAPDATAP`DATA(DATA(pDATAp(PDATApDATAHDATAH@DATA؞HpDATA؞ DATA h؞DATAh 8 DATAhxDATA@DATA@ DATAР@8DATAРDATA`РȏDATA`DATA𡌬`X"DATA𡌬8DATA8𡌬萏DATAȢ8(DATAȢhDATAXȢDATAX葏DATA裌X(DATA裌0hDATA0x裌DATAx0蒏DATAx0DATAPxDATAPDATAौPDATAौ(HDATA(pौDATAp(ȔDATApDATAH@DATAHDATAاHЕDATAا DATA hا`DATAh DATAh𖏬DATA@8DATA@DATAЩ@ȗDATAЩDATA`ЩXDATA`DATA𪌬`蘏DATA𪌬80DATA8𪌬xDATAȫ8DATAȫDATAXȫPDATAXDATA謌XDATA謌0(DATA0x謌pDATAx0DATAxDATAPH&DATAP*DATA஌PDATA஌(8DATA(p஌xDATAp(DATAp𝏬.DATAHPDATAHDATAذH螏DATAذ 0DATA hذh DATAh (DATAh-DATA@`DATA@+DATAв@DATAвPDATA`в DATA`衏SDATA𳌬`heDATA𳌬84DATA8𳌬h!DATAȴ8DATAȴDATAXȴHDATAX\DATA赌XTDATA赌0%DATA0x赌DATAx00"DATAx'DATAPئ#DATAP('DATA෌P DATA෌(DATA(p෌ DATAp(@`DATApШDATAHDATAH( DATAعH` DATAع ODATA hعDATAh `,DATAh+DATA@DATA@hDATAл@DATAл DATA`лP1DATA`-DATA𼌬`FDATA𼌬8>DATA8𼌬DATAȽ8@EDATAȽDATAXȽDDATAXxDATA辌XGDATA辌08DATA0x辌BDATAx0𱏬DATAx8EDATAPDATAPEDATAPpDATA(DATA(p𳏬!DATAp(@-DATAŒpDATAŒHŒش:DATAHŒŒŒ@DATAŒŒHŒDATAŒ ̌DATA Ìȟ?DATAhÌÌ Ìp DATAÌÌhÌ DATAÌ@ČÌඏ DATA@ČČÌ\DATAČČ@ČeDATAČŌČ@DATAŌ`ŌČMDATA`ŌŌŌDATAŌŌ`Ō`'DATAŌ8ƌŌ7DATA8ƌƌŌ /DATAƌƌ8ƌDATAƌnjƌP9DATAnjXnjƌ/DATAXnjnjnj7DATAnjnjXnj8DATAnj0Ȍnj輏<DATA0ȌxȌnjX>DATAxȌȌ0ȌȽBDATAȌɌxȌ8<DATAɌPɌȌDATAPɌɌɌ𾏬DATAɌɌPɌDATAɌ(ʌɌ@DATA(ʌpʌɌ DATApʌʌ(ʌX DATAʌˌpʌDATAˌHˌʌ9DATAHˌˌˌ/DATAˌˌHˌHÏ8DATAˌ ̌ˌÏ>DATA ̌ȟˌ ďDATAȟ̌ ̌hď]DATǍ̌ȟďDATǍ@͌̌@ŏNDATA@͌͌̌ŏDATA͌͌@͌ŏ DATA͌Ό͌8ƏDATAΌ`Ό͌Ǐ9DATA`ΌΌΌxǏ/DATAΌΌ`ΌǏpDATAΌ8όΌxȏ+DATA8όόΌȏ,DATAόό8ό0ɏ9DATAόЌόɏ/DATAЌXЌόɏpDATAXЌЌЌʏDATAЌЌXЌʏDATAЌ0ьЌ0ˏDATA0ьxьЌpˏ DATAxьь0ьˏDATAьҌxь̏"DATAҌPҌьP̏DATAPҌҌҌ̏DATAҌҌPҌ̏DATAҌ(ӌҌ0͏ DATA(ӌpӌҌh͏DATApӌӌ(ӌ͏DATAӌԌpӌ͏SDATAԌHԌӌxΏDATAHԌԌԌΏRDATAԌԌHԌHϏDATAԌ ՌԌϏUDATA ՌhՌԌ ЏDATAhՌՌ ՌpЏPDATAՌՌhՌЏDATAՌ@֌Ռ@яSDATA@֌֌ՌяDATA֌֌@֌ҏSDATA֌׌֌ҏDATA׌`׌֌ҏDATA`׌׌׌ ӏDATA׌׌`׌hӏDATA׌8،׌(ԏDATA8،،׌@Տ-DATA،،8،Տ-DATA،ٌ،֏DATAٌXٌ،@֏ DATAXٌٌٌx֏DATAٌٌXٌ֏:DATAٌ0ڌٌ׏#DATA0ڌxڌٌh׏DATAxڌڌ0ڌ ؏ DATAڌیxڌX؏,DATAیPیڌ؏DATAPیییُ-DATAییPی`ُDATAی(܌یُDATA(܌p܌یُ;DATAp܌܌(܌HڏQDATA܌݌p܌ڏDATA݌H݌܌ۏDATAH݌݌݌Xۏ+DATA݌݌H݌ۏJDATA݌ ތ݌(܏DATA ތhތ݌p܏<DATAhތތ ތ܏-DATAތތhތ@ݏDATAތ@ߌތxݏ:DATA@ߌߌތݏDATAߌߌ@ߌ(ޏDATAߌߌ0ߏDATA`ߌxߏDATA`H DATA`wDATA8ጬ(ᏬDATA8ጬጬXᏬ5DATAጬጬ8ጬᏬQDATAጬ⌬ጬ@⏬DATA⌬X⌬ጬ⏬ DATAX⌬⌬⌬⏬ DATA⌬⌬X⌬㏬DATA⌬0㌬⌬@㏬%DATA0㌬x㌬⌬㏬DATAx㌬㌬0㌬㏬DATA㌬䌬x㌬䏬BDATA䌬P䌬㌬䏬 DATAP䌬䌬䌬䏬DATA䌬䌬P䌬䏬%DATA䌬(匬䌬P召DATA(匬p匬䌬召DATAp匬匬(匬召 DATA匬挬p匬揬 DATA挬H挬匬`揬DATAH挬挬挬揬.DATA挬挬H挬揬 DATA挬 猬挬8珬DATA 猬h猬挬珬 DATAh猬猬 猬珬DATA猬猬h猬菬 DATA猬@茬猬@菬4DATA@茬茬猬菬DATA茬茬@茬菬%DATA茬錬茬H鏬!DATA錬`錬茬鏬DATA`錬錬錬鏬 DATA錬錬`錬0ꏬDATA錬8ꌬ錬xꏬDATA8ꌬꌬ錬ꏬ'DATAꌬꌬ8ꌬ돬/DATAꌬ댬ꌬx돬?DATA댬X댬ꌬ돬DATAX댬댬댬0쏬/DATA댬댬X댬쏬DATA댬0쌬댬쏬&DATA0쌬x쌬댬8포DATAx쌬쌬0쌬x포 DATA쌬팬x쌬포DATA팬P팬쌬포 DATAP팬팬팬0=DATA팬팬P팬SDATA팬(팬 aDATA(p팬 DATAp( DATAp( DATAHhDATAHDATAH*DATA @$DATA hDATAh 9DATAhPDATA@񌬰"DATA@$DATA@HDATA򌬈񌬀DATA`(DATA`(DATA`p?DATA8󌬨 DATA80DATA8xDATA􌬀!DATAXDATAX` DATAX􌬠DATA0DATA0x0DATAx00DATAxDATAP DATAPXDATAPDATA(0DATA(pHDATAp( DATApDATAH/DATAHhQDATAH1DATA HNDATA hDATAh DATAh`GDATA@DATA@(GDATA@DATA0DATA`>,DATA`H>,DATA`>,DATA8>,DATA8?,DATA8X?,*DATA?,DATAX?,FDATAXp@,6DATAX@,DATA0A,XDATA0xhB,DATAx0B,DATAxB,+DATAPHC,DATAPC,GDATAPD,7DATA(pD,DATA(ppE,YDATAp(E, DATAp0F,DATAHxF,DATAHF,DATAHG,HDATA G,8DATA hG,DATAh H,ZDATAhpI, DATA@I,&DATA@J, DATA@PJ,DATAJ,GDATA`K,7DATA`xK,,DATA`K,DATA8L,ZDATA8hM,;DATA8M, DATA N,0DATAXN,DATAXN,LDATAXHO,7DATA0O,DATA0xP,_DATAx0HQ,$DATAxQ,&DATAPQ, DATAPHR,DATAPR,DATA( R,%DATA( p 0S,DATAp  ( S,)DATA  p HDATA H S,%DATAH  0T,DATA  H xT,#DATA  T, DATA h U,DATAh  @U,DATA  h U,DATA @ U,.DATA@  V,$DATA  @ xV,DATA  V,5DATA ` W,DATA`   PW,DATA  ` W,-DATA 8 X,DATA8 PX, DATA8X, DATAX,DATAXY, DATAX`Y,DATAXY,,DATA0Z,DATA0x`Z,DATAx0Z,DATAx[,DATAPH[,DATAP[,DATAP[,DATA(0\,DATA(px\, DATAp(\,DATAp\,DATAH ],DATAHp],DATAH],#DATA ^, DATA h8^, DATAh x^, DATAh^, DATA@^, DATA@8_, DATA@p_,DATA_,DATA``,DATA`H`,6DATA``, DATA8a,DATA8Ha,+DATA8a,DATAa,DATAX b,"DATAXpb,DATAXb,.DATA0c,DATA0xXc,DATAx0c,'DATAxc,(DATAPHd,"DATAPd,DATAPd,DATA(e,DATA(p`e,DATAp(e,DATApe,$DATAH@f,DATAHf,(DATAHf,DATA g,DATA h`g,#DATAh g,DATAhg,DATA@8h,DATA@h,@DATA@h,DATA0i,DATA`xi,DATA`i,DATA`j,ADATA8 xj,DATA8  j,!DATA  8 k,$DATA ! `k,DATA!X! k,DATAX!!!k,DATA!!X!8l,DATA!0"!l,!DATA0"x"!l,/DATAx""0"0m,DATA"#x"xm,ADATA#P#"m,DATAP###(n,DATA##P#pn,DATA#($#n,DATA($p$#o,DATAp$$($Ho,DATA$%p$o,DATA%H%$o,"DATAH%%%0p,CDATA%%H%p,DATA% &%p,DATA &h&%q,)DATAh&& &pq,DATA&&h&q, DATA&@'&q,$DATA@''&Pr,DATA''@'r,DATA'('r,DATA(`('(s,DATA`(((hs,DATA((`(s,DATA(8)(t,DATA8))(Ht,DATA))8)t,DATA)*)t,DATA*X*)u,DATAX***Pu,DATA**X*u,.DATA*0+*u,DATA0+x+*(v,DATAx++0+`v, DATA+,x+v, DATA,P,+v, DATAP,,,w, DATA,,P,Xw,DATA,(-,w,DATA(-p-,w,DATAp--(-0x,!DATA-.p-x,DATA.H.-x,,DATAH...y,:DATA..H.y,3DATA. /.y,SDATA /h/.`z, DATAh// /z,DATA//h/z,DATA/@0/ {, DATA@00/`{,DATA00@0{, DATA010{,DATA1`10|, DATA`111X|,DATA11`1|, DATA1821|,4DATA82218}, DATA2282p},'DATA232},DATA3X32~,DATAX333P~,$DATA33X3~,(DATA3043,#DATA04x43P,DATAx4404,;DATA45x4,DATA5P54 ,DATAP555h,DATA55P5,DATA5(65؀,DATA(6p65 ,DATAp66(6`,DATA67p6,&DATA7H76,.DATAH777`,DATA77H7, DATA7 87, DATA 8h87(,DATAh88 8p,&DATA88h8ȃ,.DATA8@98(,DATA@998p,DATA99@9,7DATA9:9,!DATA:`:9X,DATA`:::,DATA::`:,DATA:8;: ,2DATA8;;:,DATA;;8;, DATA;<;, DATA<X<;0, DATAX<<x=Ȉ,2DATA>P>=(,DATAP>>>p, DATA>>P>,0DATA>(?>,DATA(?p?>H,"DATAp??(?,DATA?@p?,DATA@H@?(,2DATAH@@@,DATA@@H@Ћ,DATA@ A@,DATA AhA@X,DATAhAA A,DATAAAhA,3DATAA@BAH,DATA@BBA, DATABB@BЍ,1DATABCB0,DATAC`CB`,DATA`CCC, DATACC`C,*DATAC8DC@,DATA8DDC,DATADD8DЏ,DATADED,DATAEXEDX, DATAXEEE,DATAEEXEؐ,DATAE0FE(,DATA0FxFEh,DATAxFF0F, DATAFGxF,DATAGPGF0,DATAPGGGp,%DATAGGPGȒ,DATAG(HG,DATA(HpHGP, DATApHH(H,!DATAHIpHؓ,DATAIHIH ,0DATAHIII,DATAIIHI,DATAI JI,DATA JhJI8,DATAhJJ J,DATAJJhJ,DATAJ@KJ,+DATA@KKJ`,DATAKK@K,DATAKLK,2DATAL`LKP,DATA`LLL,DATALL`Lؗ,DATAL8ML ,DATA8MMLh,DATAMM8M,3DATAMNM,DATANXNMX, DATAXNNN,DATANNXN,DATAN0ON,DATA0OxONX,DATAxOO0O,:DATAOPxO,4DATAPPPOp,DATAPPPP,DATAPPPP,DATAP(QPH,DATA(QpQP,DATApQQ(Q؜,DATAQRpQ ,%DATARHRQx,ADATAHRRR,DATARRHR0,DDATAR SR,DATA ShSR,DATAhSS S8,DATASShS,DATAS@TSП,DATA@TTS,DATATT@T`,DATATUT,"DATAU`UT,GDATA`UUUx,DATAUU`U,!DATAU8VU,$DATA8VVUh,DATAVV8V,DATAVWV,DATAWXWVH,DATAXWWW,!DATAWWXW,/DATAW0XW@,DATA0XxXW,EDATAxXX0X,DATAXYxXH,DATAYPYX,DATAPYYY,DATAYYPY,DATAY(ZYX,DATA(ZpZY,DDATApZZ(Z,>DATAZ[pZ,DATA[H[Z,DATAH[[[,,DATA[[H[h,7DATA[ \[Ш,DDATA \h\[H,SDATAh\\ \ȩ,%DATA\\h\ ,>DATA\@]\,^DATA@]]\ ,VDATA]]@],'DATA]^],(DATA^`^]X,+DATA`^^^,-DATA^^`^,-DATA^8_^p,HDATA8__^,=DATA__8_X,gDATA_`_,3DATA`X`_P,%DATAX```,#DATA``X`,%DATA`0a`P,0DATA0axa`,DATAxaa0a,ODATAabxa,WDATAbPba,DATAPbbb@,EDATAbbPb,ODATAb(cb8,2DATA(cpcb,DATApcc(c,&DATAcdpc8,WDATAdHdc,'DATAHddd,,DATAddHdx,4DATAd ed,$DATA ehed8,DATAhee eh,DATAeehe,DATAe@fe,DATA@ffe@,2DATAff@f,DATAfgf,1DATAg`gfH,DATA`ggg,4DATAgg`g,DATAg8hg@,/DATA8hhg,DATAhh8h,2DATAhihH,DATAiXih,2DATAXiii,DATAiiXi8,DATAi0ji,4DATA0jxji,DATAxjj0j0,3DATAjkxj,DATAkPkjؼ,6DATAPkkk@,DATAkkPk,1DATAk(lk,DATA(lplk0,4DATApll(l,DATAlmpl,4DATAmHmlH,DATAHmmmx,DATAmmHm,DATAm nm,DATA nhnm0,DATAhnn nx,DATAnnhn,DATAn@on,(DATA@oonh, DATAoo@o,%DATAopo,DATAp`poH,4DATA`ppp,DATApp`p, DATAp8qp(,DATA8qqpp,DATAqq8q,DATAqrq,"DATArXrqH,DATAXrrr,!DATArrXr,5DATAr0srP,!DATA0sxsr,+DATAxss0s,'DATAstxsP, DATAtPts,DATAPttt,'DATAttPt0,"DATAt(ut,#DATA(uput,8DATApuu(u8,#DATAuvpu,"DATAvHvu,DATAHvvv(,DATAvvHv`,#DATAv wv,DATA whwv,DATAhww w8,DATAwwhw,DATAw@xw,DATA@xxw,DATAxx@xX,DATAxyx,DATAy`yx,DATA`yyy(,iDATAyy`y,DATAy8zy,bDATA8zzy,DATAzz8z,;DATAz{zH, DATA{X{z,DATAX{{{,>DATA{{X{X,.DATA{0|{,BDATA0|x|{(,DATAx||0|p,?DATA|}x|,;DATA}P}|H,DATAP}}},DATA}}P},hDATA}(~}`,DATA(~p~},gDATAp~~(~@, DATA~p~,DATAH~,DATAH,DATAHP,DATA ,DATA h,DATAh 0,'DATAh,BDATA@,cDATA@,3DATAЁ@,%DATAЁ@,LDATA`Ё,DATA`,DATA``,DATA8,DATA8,DATAȃ8 ,0DATAȃ,TDATAXȃ,4DATAXp,"DATA脍X,7DATA脍0(,DATA0x脍h,0DATAx0,CDATAx8,0DATAP,DATAPX,DATAP,BDATA(,`DATA(p,DATAp(,DATAp ,+DATAHx,,DATAH,DATA؈H ,7DATA؈ ,DATA h؈,'DATAh ,FDATAh,3DATA,3DATA@#!BPY DATAxo SDATA""" x4DATA Name: 'RenderMan (.rib)...' DATA0Blender: 233DATApGroup: 'Export'DATA8Tooltip: 'Save/Render a Scene to RenderMan Renderers' DATA"""DATAHDATA@x# RenderMan export script by Christoffer Green and Goran KocovDATA(茍# Pixie Extension by Joseph MontanezDATA@# 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 windowDATAPDATAimport BlenderDATAimport stringDATA import osDATA 8import sysDATApfrom os import P_NOWAITDATAfrom Blender.Draw import *DATAfrom Blender.BGL import *DATAHfrom Blender import SceneDATA$from Blender.Scene import RenderDATAfrom math import piDATA from math import atanDATAhfrom math import powDATA֑DATAtry:DATA import totiffDATAXexcept:DATAH print "Did not find the totiff module, will use ImageMagic instead\n"DATADATA8DATA4h# MAKE SURE YOU CHANGE THIS TO YOUR PYTHON FOLDERDATAȓif (os.name != "posix"):DATA  sys.path = ['c:\\python23']DATA`DATA$scene = Blender.Scene.GetCurrent()?DATA$camobj = scene.getCurrentCamera()ODATA40camera = Blender.Camera.Get(camobj.getData().name)DATADATA# The bevent constantsDATA,exportevent = 1 # export button pressedDATA(`exitevent = 2 # exit button pressedDATA,updateguievent = 3 # update the pressedjerDATA0filetoggleevent = 999 # file button pressedDATApDATA# GUI variablesDATAfs = Create('')DATA menuval = Create(4)DATAhdof = Create(0)DATAsamples = Create(2)DATA𘍬stop = Create(2.0)DATA8lenght = Create(1.0)DATAdistance = Create(5.0)DDATAșsrate = Create(3)DATAfile = Create(0)DATAXbuffer = Create(1)DATA$filename = Create("default.rib")DATA 𚍬image = Create("default")@2DDATA @dirw = Create("default")DATA$pixierenderer = Create("rndr")JDATA$prmanrenderer = Create("prman")DATA$0dlrenderer = Create("renderdl")1DATA$bmrtrenderer = Create("rendrib")DATA(Мentropyrenderer = Create("entropy")DATA$(aqsisrenderer = Create("aqsis")DATA$xpixietexmaker = Create("texmake")DATA$ȝprmantexmaker = Create("txmake")DATA$dltexmaker = Create("tdlmake")DATA$hbmrttexmaker = Create("mkmip")DATA$entropytexmaker = Create("mkmip")DATA$aqsistexmaker = Create("teqser")DATAXradiosity = Create(0)DATAradnum = Create(50)DATA蟍gi = Create(0)DATA(gisteps = Create(100)DATAp#PixieDATAindirect = Create(0)DATA𠍬occlusion = Create(0)DATA8ambiSamples = Create(6)DATA #End PixieDATAgeom = Create(1)DATAmeshexport = Create(1)YDATAHpointwidth = Create(1.0)DATAanim = Create(0)DATA آmaxpixeldist = Create(20)DATA(maxerror = Create(0.25)DATAprshadow = Create(1)DATAsmooth = Create(0.00)DATAareasamples = Create(20)DATAHbuff256 = Create(0)@DATAbuff512 = Create(1)DATAؤbuff1024 = Create(0)DATA buff2048 = Create(0)DATAhmotionblur = Create(0)DATA motionblurframe = Create(1)DATArendert = Create(1)m?DATAHcaustics = Create(0)DATAphoton = Create(4000)DATAئuv = Create(0)DATArecurs = Create(4)DATA`debug = Create(0)DATAhiddenlayer = Create(0)DATA 𧍬globalsettings = Create(1)DATA@scenesettings = Create(0)DATAshadereditor = Create(0)DATAШsurfaceshader = Create(3)DATA$surfaceshadername = Create("")DATAhabout = Create(0)DATAshadermenu = Create(1)DATA ambientshader = Create(1.00)DATA Hdiffuseshader = Create(0.50)DATA specularshader = Create(0.50)DATA$認roughnessshader = Create(0.10)DATA 8coefshader = Create(1.50)DATA reflblurshader = Create(0.00)DATA ثrefrblurshader = Create(0.00)DATA(objecteditor = Create(0)DATApconvertbm = Create(1)DiADATA objectshadermenu = Create(0)DATAarealightMESH = Create(0)DATA Precievecaustics = Create(0)DATA transmittcaustics = Create(0)DATA(𭍬transmittcausticsslider = Create(1.40)DATAHreflsamples = Create(0)DATArefrsamples = Create(0)DATAخkr = Create(1.0)DATA rendershadow = Create(0)DATAhautogs = Create(0)DATA reflectcaustics = Create(0)DATAprogress = Create(1)DATAHgain = Create(1.0)DATAgamma = Create(1.0)DATAذlightx = Create(1.0)DATA bias = Create(0.25)DATA hraytraceshadow = Create(1)DATAprojection = Create(0)DATA textureblurm = Create(0.0)DATAPnorm = Create(0.01)DATAconverttex = Create(1)DATA಍gisphere = Create(1)DATA(rvisibility = Create(0)uADATApfinalgather = Create(0)CDATArgba = Create(1)DATAcastshadow = Create(1)DATA@reconvert = Create(0)DATAtexturem = Create(' ')DATAXtexturem.val = '' DATAtextshader = Create('Surface "plastic" ')DATA(ඍtextshader.val = 'Surface "plastic"'DATA8textshaderd = Create('Displacement "bumpy" ')DATA,textshaderd.val = 'Displacement "bumpy"'DATAظhdritex = Create(' ')DATAhdritex.val = ''DATA蹍hdri = Create(0)DATA(preworldrafile = Create(' ')DATApreworldrafile.val = ''DATA@preworldra = Create(0)DATApostworldrafile = Create(' ')DATA`postworldrafile.val = '' DATApostworldra = Create(0)DATA𼍬objectrafile = Create(' ')DATAobjectrafile.val = ''DATAobjectra = Create(0)DATAPtextnor = Create(0)DATA illuminationmenu = Create(0)DATA辍areagi = Create(0)DATA0indirectgi = Create(1)-DATAxeblur = Create(0.00)DATAesamples = Create(1)DATAgianim = Create(1)-DATAPamesh = Create(0)DATApatchsize = Create(4.0)DATAelemsize = Create(2.0)-DATA(minsize = Create(1.0)DATApDATA# Other variables DATA@renderer = "PRMan |BMRT |Entropy |3Delight |AQSIS |Pixie "@DATAdP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"DATADpÍ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"DATA4Pč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"DATA0ƍsshader = "ADD NEW"DATAxƍsshader2 = ""DATAƍshadernametemp = ""DATAǍselectedname = ""DATAHǍselectedtype = "Type: "DATA Ǎtmp = ""DATAǍimagelist = ""DATA(ȍimagelistmenu = "No images loaded"DATA$`ȍrgbatext = "rgb |rgba |rgbz |z "DATA0ȍcastshadowtext = "Os |opaque |shader |none"DATAɍtxdone = []DATAPɍDATAɍ# Global variablesDATAɍincrement = 0DATAʍxbar = 11DATA @ʍi = 0DATAxʍmeshobjects = 0DATAʍmaxblur = 10.0DATAʍmeshnum = 0DATA8ˍDATA0hˍ# Create the BlenderMan directories on startupDATAˍif (os.name != "posix"):DATA̍ rootdir = '/BlenderMan/'DATA0X̍ partitionname = Blender.sys.progname[0:2]DATA̍else:DATA0̍ rootdir = os.getenv("HOME") + '/BlenderMan/'DATA$P͍pdir = rootdir + dirw.val + '/'DATA4͍globalpropertiesdir = pdir + '/GlobalProperties/'DATA0΍surfaceshadersdir = pdir + '/SurfaceShaders/'DATA<`΍displacementshadersdir = pdir + '/DisplacementShaders/'DATA0΍objectsettingsdir = pdir + '/ObjectSettings/'DATA0(ύlightsettingsdir = pdir + '/LightSettings/'DATA4ύmeshesdir = os.path.normpath(pdir + '/Meshes/')DATA$ύimagesdir = pdir + '/images/'DATA$8Ѝshadowdir = pdir + '/shadows/'DATA(Ѝtexturesdir = pdir + '/textures/'DATA$Ѝshadersdir = pdir + '/shaders/'DATA0эtry: os.mkdir(rootdir)DATAxэexcept OSError: passDATAэtry: os.mkdir(pdir)DATAҍexcept OSError: passDATA$Hҍtry: os.mkdir(surfaceshadersdir)DATAҍexcept OSError: passDATA$ҍtry: os.mkdir(globalpropertiesdir)DATA0Ӎexcept OSError: passDATA(xӍtry: os.mkdir(displacementshadersdir)DATAӍexcept OSError: passDATAԍtry: os.mkdir(meshesdir)DATA`ԍexcept OSError: passDATA$ԍtry: os.mkdir(objectsettingsdir)DATAԍexcept OSError: passp`DATA @Սtry: os.mkdir(lightsettingsdir)DATAՍexcept OSError: passDATAՍtry: os.mkdir(shadowdir)DATA ֍except OSError: passpDATAh֍try: os.mkdir(texturesdir)DATA֍except OSError: passDATA֍try: os.mkdir(imagesdir)DATA@׍except OSError: passDATA׍DATA ׍def gui():DATAT׍ global menuval, dof, samples, stop, lenght, distance, srate, file, buffer, dirwDATAXp؍ global filename, image, radiosity, radnum, gi, gisteps, geom, meshexport, pointwidthDATA`؍ global anim, maxpixeldist, maxerror, smooth, areasamples, buff256, buff512, buff1024, buff2048DATAtٍ global motionblur, motionblurframe, rendert, caustics, photon, uv, recurs, debug, globalsettings, scenesettingsDATAd(ڍ global shadereditor, sshader, surfaceshader, surfaceshadername, about, shadermenu, ambientshaderDATAdڍ global diffuseshader, specularshader, roughnessshader, coefshader, reflblurshader, refrblurshaderDATA`Hۍ global objecteditor, selectedname, convertbm, objectshadermenu, arealightMESH, recievecausticsDATA\ۍ global transmittcaustics, transmittcausticsslider, reflsamples, refrsamples, rendershadowDATAh`܍ 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\0 global preworldra, preworldrafile, postworldra, postworldrafile, objectra, objectrafileDATA@ global ambiSamples, occlusion, indirect #Pixie Ambient stuff DATA(፬3-JDATA4X፬ if (autogs.val == 1): #automaticly select objectshDATA ፬ Redraw(1)DATA፬ getSelectedObject()-0DATA8⍬ saveload(0,0,'object')DATA⍬8 .DATA⍬ # GUI settingsDATA8⍬ glClearColor(0.4,0.48,0.57, 0.0) # blue background-x DATA X㍬ glClear(GL_COLOR_BUFFER_BIT)- DATA,㍬ glColor3f(0, 0, 0) # main black back 18DATA䍬 glRectf(2, 2, 630, 340)1-JDATA0H䍬 glColor3f(0.4, 0.48, 0.57) # main blue backgDATA䍬 glRectf(4, 4, 628, 300)~@DATA,䍬 glColor3f(0.27, 0.3, 0.35) # blue topjerDATAH卬 glRectf(4, 302, 628, 338)ADATA卬 glColor3f(1,1,1)erDATA卬DATA,捬 # Buttons for the main BlenderMan panels-JDATA|X捬 globalsettings = Toggle("Global Settings", 12, 75, 310, 100, 20, globalsettings.val, "Global project settings")DATAt獬 scenesettings = Toggle("Scene Settings", 557, 175, 310, 100, 20, scenesettings.val, "Global scene settings")DATA獬 shadereditor = Toggle("Shader Editor", 13, 275, 310, 100, 20, shadereditor.val, "Surface and diplacement shader settings")DATAP荬 objecteditor = Toggle("Object Editor", 33, 375, 310, 100, 20, objecteditor.val, "Edit object settings that Blender doesn't support")DATAh鍬 about = Toggle("About", 16, 475, 310, 100, 20, about.val, "Information about this script")DATA鍬DATA鍬 # Global SettingsDATA ꍬ if (globalsettings.val == 1):DATAhꍬ debug = Slider("Debug Level ", updateguievent, 440, 270, 180, 20, debug.val, 0, 3, 0, "How much debug information the renderer should output")DATA0덬 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")DATAP썬 gain = Slider("Gain ", 0, 225, 270, 180, 20, gain.val, 0.0, 5.0, 0)REEDATAPP퍬 gamma = Slider("Gamma ", 0, 225, 248, 180, 20, gamma.val, 0.0, 5.0, 0)DATA퍬 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):WDATA recurs = Slider("RaySteps ", 0, 440, 248, 180, 20, recurs.val, 0, 15, 0, "Maximum number of steps for the raytracing recursion")KDATA| 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)")DATA 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")DATA 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)")DATAdP dirw = String("Project: ", 500, 150, 125, 140, 19, dirw.val, 200, "Name of the project")DATA 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")VDATA elif menuval.val == 2:DATA| 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")DATA8 entropytexmaker = String("Tex. Maker: ", 0, 480, 100, 140, 19, entropytexmaker.val, 200, "Name of the mipmap texture making executable")DATA elif menuval.val == 4:DATAx@ dlrenderer = String("Renderer: ", 0, 480, 125, 140, 19, dlrenderer.val, 200, "Name of the renderer executable")DATA dltexmaker = String("Tex. Maker: ", 0, 480, 100, 140, 19, dltexmaker.val, 200, "Name of the mipmap texture making executable")EDATA elif menuval.val == 5:DATA 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")DATAX elif menuval.val == 6:npuDATA pixierenderer = String("Renderer: ", 0, 480, 125, 140, 19, pixierenderer.val, 200, "Name of the renderer executable")DATAP 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")DATAlh 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")DATAX Button("Save Sett", 31, 385, 51, 75, 20, "Save global and scene settings")DATA glRasterPos2i(310, 80)DATA Text("Samples")DATA( glRasterPos2i(310, 105)DATAp Text("ShRate")DATA glRasterPos2i(310, 130)DATA Text("Renderer")DATA8 glRasterPos2i(310, 155)DATA Text("Channels")DATA if (progress.val == 1):DATA # Progressbar textDATAP glRasterPos2i(10, 25)DATA8 Text("Mesh: %s/%s"%(int(meshnum), int(meshobjects)))DATA## if anim.val:DATA@## glRasterPos2i(10, 40)DATA,## display = Blender.Scene.GetCurrent()DATAd## Text("Frame: %s/%s"%(display.currentFrame(), display.endFrame() - display.startFrame() + 1))EDATAp # Progressbar backplateDATA glColor3f(0, 0, 0)DATA  glRectf(9, 10, 620, 21)DATA H  glColor3f(0.78, 0.7, 0.8)DATA  glRectf(10, 9, 621, 20)DATA  glColor3f(0.4, 0.4, 0.4)DATA(  glRectf(10, 10, 620, 20)DATAp  # ProgressbarDATA  glColor3f(0, 0, 0)DATA$  glRectf(10, 10, xbar + 1, 20)DATA H  glColor3f(0.78, 0.7, 0.8)DATA  glRectf(10, 11, xbar, 20)XDATA  glColor3f(0.52, 0.25, 0.45)DATA 8  glRectf(11, 11, xbar, 19)DATA  DATA  # Scene settingsDATA  if (scenesettings.val == 1):DATAH  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\h preworldrafile = String("File: ", 0, 190, 60, 430, 20, preworldrafile.val, 100)DATA postworldra = Toggle("PostWorld ReadArchive", updateguievent, 10, 40, 180, 20, postworldra.val, "Add a ReadArchive to a user-defined file just after WorldBegin")DATA  if (postworldra.val == 1):# glRasterPos2i(200, 15)DATAh> Text(selectedtype)DATA(> if (selectedtype == 'Type: Mesh'):DATA? objectra = Toggle("Object ReadArchive", 18, 10, 60, 180, 20, objectra.val, "Add a ReadArchive to a user-defined file just after object's AttributeBegin")DATA? if (objectra.val == 1):DATAX @ objectrafile = String("File: ", 18, 190, 60, 430, 20, objectrafile.val, 100)DATAP@ convertbm = Toggle("Use Shader", 18, 10, 220, 180, 20, convertbm.val)DATA(A if (convertbm.val == 1):DATA,pA namelist = string.split(sshader, "|")DATA A namelist.remove('ADD NEW')DATA$B namelist = map(str, namelist)DATA,hB sshader2 = string.join(namelist, "|")DATA B if (len(sshader2) == 0):DATAC glRasterPos2i(10, 205)DATA$XC Text("No shaders available.")DATA C else:DATA\C objectshadermenu = Menu(sshader2, 18, 10, 200, 180, 20, objectshadermenu.val)DATAthD geom = Toggle("Export Geometry", 18, 230, 270, 180, 20, geom.val, "Output the mesh geometry to a RIB file")DATAE if (geom.val == 1):DATALPE meshexport = Menu(meshex, 18, 230, 250, 180, 20, meshexport.val)DATAxE amesh = Toggle("Animated Mesh", 18, 230, 230, 120, 20, amesh.val, "Turn this on if the mesh deforms in time")DATA pF if (meshexport.val != 4):DATAF 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 xG else:DATAG pointwidth = Slider("Width ", 18, 230, 180, 180, 20, pointwidth.val, 0.0, 10.0, 0, "Radius of the Points primitive")DATA0`H if (menuval.val == 2) or (menuval.val == 3):DATAH rvisibility = Toggle("Hide Source", 18, 230, 200, 180, 20, rvisibility.val, "Hides the object from primary rays")DATA4pI if ((menuval.val == 2) or (menuval.val == 3)):DATA|I arealightMESH = Toggle("AreaLight", 18, 10, 270, 180, 20, arealightMESH.val, "Use the object as an area light")DATA$xJ if (arealightMESH.val == 1):DATAJ areasamples = Slider("AreaSamp ", 18, 10, 250, 180, 20, areasamples.val, 0, 400, 0, "Controls the graininess of the area light")DATAdK recievecaustics = Toggle("Recieve Caustics", 18, 440, 270, 180, 20, recievecaustics.val)DATAdL reflectcaustics = Toggle("Reflect Caustics", 18, 440, 250, 180, 20, reflectcaustics.val)DATAhL transmittcaustics = Toggle("Transmitt Caustics", 18, 440, 230, 180, 20, transmittcaustics.val)DATA(8M if (transmittcaustics.val == 1):DATAM transmittcausticsslider = Slider("IOR ", 18, 440, 210, 180, 20, transmittcausticsslider.val, 0.00, 2.20, 0, "Index of refraction")DATAHN if (menuval.val != 5):DATAN glRasterPos2i(10, 165)DATA N Text('Raytraced Shadows')DATA(O 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(PP if (selectedtype == 'Type: Lamp'):DATA4P if ((menuval.val == 2) or (menuval.val == 3)):DATAQ caustics = Toggle("Caustics", 18, 230, 270, 180, 20, caustics.val, "Turn on photon emission used for caustics calculations")DATALQ if ((caustics.val == 1) & ((menuval.val == 2) or (menuval.val == 3))):DATAt8R photon = Slider("Photons ", 18, 230, 250, 180, 20, photon.val, 4000, 80000, 0, "Number of photons emitted")DATA0R lampobj = Blender.Object.Get(selectedname)DATA48S lamp = Blender.Lamp.Get(lampobj.getData().name)DATAHS if (lamp.getMode() & lamp.Modes['Shadows']) and (lamp.type != 3):DATAT if (menuval.val != 5):DATAtXT raytraceshadow = Toggle("Ray Shadow", 245, 100, 270, 90, 20, raytraceshadow.val, "Use raytraced shadows")DATAT if lamp.type == 2:DATAh@U rendershadow = Toggle("Ren Shadow", 244, 10, 270, 90, 20, rendershadow.val, "Use shadowmaps")DATA(U prmanshadowbuttonsposition = 270DATA 0V if (rendershadow.val == 1):DATA`V bias = Slider("Bias ", 18, 10, 210, 180, 20, bias.val, 0.0, 1.0, 0, "Shadowmap bias")DATA W if (rendershadow.val == 1):DATA\`W buff256 = Toggle("256", 8, 10, 190, 42, 20, buff256.val, "Shadowmap resolution")DATA\W buff512 = Toggle("512", 9, 52, 190, 42, 20, buff512.val, "Shadowmap resolution")DATA`pX buff1024 = Toggle("1024", 10, 95, 190, 48, 20, buff1024.val, "Shadowmap resolution")DATA`Y buff2048 = Toggle("2048", 11, 143, 190, 48, 20, buff2048.val, "Shadowmap resolution")DATAHY if (lamp.getMode() & lamp.Modes['Shadows']) and (lamp.type != 3):DATApZ if ((((menuval.val == 1) or (menuval.val == 3)) and (raytraceshadow.val == 1)) or (rendershadow.val == 1)):DATAdZ eblur = Slider("Blur ", 18, 10, 250, 180, 20, eblur.val, 0.0, maxblur, 0, "Shadow blur")DATAh8[ esamples = Slider("Samples ", 18, 10, 230, 180, 20, esamples.val, 0, 256, 0, "Blur quality")DATA[DATA\ # About dialogDATA@\ if (about.val == 1):DATA\ glColor3f(0,0,0)DATA\ glRasterPos2i(10, 279)DATA$] Text("BlenderMan 0.1 Beta 9.0")DATA`] glRasterPos2i(10, 259)DATA0] Text("by Christoffer Green and Goran Kocov")DATA^ glColor3f(1,1,1)DATAH^ glRasterPos2i(9, 280)DATA$^ Text("BlenderMan 0.1 Beta 9.0")DATA^ glRasterPos2i(9, 260)DATA0(_ Text("by Christoffer Green and Goran Kocov")DATA_ glRasterPos2i(10, 230)DATAd_ Text("_______________________________________________________________________________________")DATA`` glRasterPos2i(10, 200)DATA4` Text("Thanks to sgefant for the name suggestion")DATAa glRasterPos2i(10, 180)DATApPa Text("Thanks to Phillipe Crassous for helping me fix the spotlight rotation bug and other code improvements")DATAa glRasterPos2i(10, 160)DATA<8b Text("Thanks to desaster and #python for syntax help")DATAb glRasterPos2i(10, 140)DATAXb Text("Thanks to K-Rich, Macke, Kib_Tph, sgefant and #Blender3d for pre-beta testing")DATApc glRasterPos2i(10, 120)DATA<c Text("Thanks to Jan Walter for the basic exporting code")DATA d glRasterPos2i(10, 100)DATA4hd Text("Thanks to svo for the pointspolygon code")DATAd glRasterPos2i(10, 80)DATA4e Text("Thanks to nishin for alpha/beta-testing")DATApe glRasterPos2i(10, 60)DATA4e Text("Thanks to eeshlo for the totiff module")DATAf glRasterPos2i(10, 40)DATAT`f Text("Thanks to DetectiveThorn for the help with the light intensity conversion")DATAfDATAgdef event(evt, val):DATA$Xg if (evt == ESCKEY and not val): DATA g Exit()DATA,g if (evt == ACCENTGRAVEKEY and not val): DATA 8h export()DATAphDATAhdef bevent(evt):DATAph global sshader, increment, pdir, maxblur, imagelist, imagelistmenu, imagelisttif, shadernametemp, selectednameDATA(i if (evt == 500): # Change projectDATA i newdirs()DATA j surfaceshadername.val = ""DATA`j sshader = "ADD NEW"DATAj try: DATA4j f = open(surfaceshadersdir + 'ShaderNames','r')DATA@k saveShaderName(0)DATA k except:DATAk saveShaderName(1)DATAl resetObject()DATAHl saveload(0, 0, 'object')DATAl saveload(0, 0, 'global')DATA l Register (gui, event, bevent)DATA0(m if (evt == exportevent): # Export buttonDATA m export()DATA,m if (evt == exitevent): # Exit buttonDATA n Exit()DATA0Pn if (evt == updateguievent): # Update GUIDATA n Register (gui, event, bevent)DATA0o if (evt == filetoggleevent): # File toggleDATA`o file.val = 1DATAo buffer.val = 0DATA o Register (gui, event, bevent)DATA(0p if (evt == 5): # Buffer toggleDATAp file.val = 0DATAp buffer.val = 1DATA q Register (gui, event, bevent)DATA4Xq if (evt == 6): # Global Illumination toggleDATAq radiosity.val = 0DATA q Register (gui, event, bevent)DATA(Hr if (evt == 7): # Radiosity toggleDATAr gi.val = 0DATA r Register (gui, event, bevent)DATA00s if (evt == 8): # Shadow buffer buttonsDATAs if (buff256.val == 1):DATAs buff512.val = 0DATAt buff1024.val = 0DATAXt buff2048.val = 0DATAt saveload(1,0,'object')DATA t Register (gui, event, bevent)DATA00u if (evt == 9): # Shadow buffer buttonsDATAu if (buff512.val == 1):DATAu buff256.val = 0DATAv buff1024.val = 0DATAXv buff2048.val = 0DATAv saveload(1,0,'object')DATA v Register (gui, event, bevent)DATA00w if (evt == 10): # Shadow buffer buttonsDATAw if (buff1024.val == 1):DATAw buff512.val = 0DATAx buff256.val = 0DATAXx buff2048.val = 0DATAx saveload(1,0,'object')DATA x Register (gui, event, bevent)DATA00y if (evt == 11): # Shadow buffer buttonsDATAy if (buff2048.val == 1):DATAy buff512.val = 0DATAz buff1024.val = 0DATAXz buff256.val = 0DATAz saveload(1,0,'object')DATA z Register (gui, event, bevent)DATA0{ if (evt == 12):DATAp{ globalsettings.val = 1DATA{ scenesettings.val = 0DATA| shadereditor.val = 0DATAH| objecteditor.val = 0DATA| about.val = 0DATA | Register (gui, event, bevent)DATA } if (evt == 557):DATA`} globalsettings.val = 0DATA} scenesettings.val = 1DATA} shadereditor.val = 0DATA8~ objecteditor.val = 0DATA~ about.val = 0DATA ~ Register (gui, event, bevent)DATA if (evt == 13):DATAP globalsettings.val = 0DATA scenesettings.val = 0DATA shadereditor.val = 1DATA( objecteditor.val = 0DATAp about.val = 0DATA  Register (gui, event, bevent)DATA if (evt == 16):DATA@ globalsettings.val = 0DATA scenesettings.val = 0DATAЁ shadereditor.val = 0DATA objecteditor.val = 0DATA` about.val = 1DATA  Register (gui, event, bevent)DATA if (evt == 33):DATA0 globalsettings.val = 0DATAx scenesettings.val = 0DATA shadereditor.val = 0DATA objecteditor.val = 1DATAP about.val = 0DATA  Register (gui, event, bevent)DATA( if (evt == 14): # Add shader menuDATA`8 namelist = string.split(sshader, "|") # the names of the shaders gets hacked up into a listDATAȅ surfaceshadername.val = namelist[surfaceshader.val - 1] # change the label of the shader in the shadereditor to the one selectedDATA4x 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 臎 name = 0DATA,  numbername = "%03d" % (int(increment))DATAx while (name == 0):DATA name = 1DATA for x in namelist[:]:DATA(H if ('Surface.%s'%numbername == x):DATA  increment = increment +1DATA name = 0DATA00 numbername = "%03d" % (int(increment))DATA@ namelist.insert(listlenght - 1 , 'Surface.%s'%numbername)DATA( sshader = string.join(namelist, "|")DATA<X surfaceshadername.val = namelist[surfaceshader.val - 1]DATA saveShaderName(1)DATA resetShaderVal()DATAH shadermenu.val = 1DATA else:DATAȌ saveload(0,0,'shader')DATA saveShaderName(1)DATA,P shadernametemp = surfaceshadername.valDATA  Register (gui, event, bevent)DATA if (evt == 340):DATA8 resetShaderVal()DATAx saveload(1,0,'shader')DATA  Register (gui, event, bevent)DATAP if ((evt == 15) & (surfaceshadername.val != "")): # Surface shader deleteDATA$ deleteshader = surfaceshader.valDATA  tempselected = selectednameDATA(0 namelist = string.split(sshader, "|")DATA, namelist.remove(surfaceshadername.val)DATA< surfaceshadername.val = namelist[surfaceshader.val - 1]DATA H namelist = map(str, namelist)DATA( sshader = string.join(namelist, "|")DATA 𑎬 listlenght = len(namelist)DATA(@ if (surfaceshader.val == listlenght):DATA< surfaceshadername.val = namelist[surfaceshader.val - 2]DATA  surfaceshadername.val = ""DATA,P surfaceshader.val = surfaceshader.val - 1DATA saveShaderName(1)DATA蓎 saveload(0,0,'shader')DATA(0 for objects in Blender.Object.Get():DATA( if (objects.getType() == "Mesh"):DATA resetObject()DATA  selectedname = objects.nameDATAp saveload(0,0,'object')DATA0 if deleteshader == objectshadermenu.val:DATA convertbm.val = 0DATA0` elif deleteshader < objectshadermenu.val:DATA8 objectshadermenu.val = objectshadermenu.val - 1DATA( saveload(1,0,'object')DATA p selectedname = tempselectedDATA saveload(0,0,'object')DATA  Register (gui, event, bevent)DATA4X 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,x namelist = string.split(sshader, "|")DATA<Й namelist[surfaceshader.val - 1] = surfaceshadername.valDATA(8 sshader = string.join(namelist, "|")DATA saveload(1,0,'shader')DATAؚ saveShaderName(1)DATA$  Register (gui, event, bevent) DATAp if (evt == 18):DATA saveload(1,0,'object')DATA  Register (gui, event, bevent)DATAH if (evt == 19):DATA8 testrender = open('%s/testrender.rib'%rootdir, 'w')DATA<𜎬 testrender.write('Projection "perspective" "fov" 40\n')DATA,X testrender.write('Format 320 240 1\n')DATA if (rgba.val == 1):DATA channels = "rgb"DATA8 elif (rgba.val == 2):DATA channels = "rgba"DATAȞ elif (rgba.val == 3):DATA channels = "rgbz"DATAX elif (rgba.val == 4):DATA channels = "z"DATAL testrender.write('Display "Test Render" "framebuffer" "%s"\n'%channels)DATALX testrender.write('Option "searchpath" "texture" ["%s"]\n'%texturesdir)DATA(Р testrender.write('Exposure 1 1.2\n')DATA,( testrender.write('PixelSamples 1 1\n')DATA( testrender.write('Translate 0 0 5\n')DATA,ء testrender.write('Rotate -120 1 0 0\n')DATA(0 testrender.write('Rotate 25 0 0 1\n')DATA$ testrender.write('WorldBegin\n')DATA0آ if (menuval.val == 1) or (menuval.val == 4):DATAH8 testrender.write('\tAttribute "visibility" "integer trace" [1]\n')DATA if (menuval.val == 3):DATAD testrender.write('\tAttribute "visibility" "reflection" [1]\n')DATA@h testrender.write('\tAttribute "visibility" "shadow" [1]\n')DATA0ؤ if (menuval.val == 1) or (menuval.val == 4):DATAT8 testrender.write('\tAttribute "visibility" "string transmission" ["shader"]\n')DATA4 elif (menuval.val == 2) or (menuval.val == 3):DATAP testrender.write('\tAttribute "render" "string casts_shadows" ["shade"]\n')DATAH if (menuval.val == 2) or (menuval.val == 4) or (menuval.val == 5):DATA if (menuval.val != 5):DATA@X testrender.write('\tAttribute "light" "shadows" ["on"]\n')DATA`ȧ testrender.write('\tLightSource "spotlight" 1 "intensity" 20 "from" [0 3 4] "to" [0 0 0]\n')DATAdX testrender.write('\tLightSource "spotlight" 2 "intensity" 20 "from" [0 -3 4] "to" [0 0 0]\n')DATA討 elif (menuval.val == 3):DATA0 testrender.write('\tLightSource "spotlight" 1 "intensity" 10 "from" [0 3 4] "to" [0 0 0] "string shadowname" ["shadow"] "float shadowsamples" [1]\n')DATA testrender.write('\tLightSource "spotlight" 2 "intensity" 10 "from" [0 -3 4] "to" [0 0 0] "string shadowname" ["shadow"] "float shadowsamples" [1]\n')DATA elif (menuval.val == 1):DATA testrender.write('\tLightSource "shadowspot" 1 "intensity" 10 "from" [0 3 4] "to" [0 0 0] "string shadowname" ["shadow"] "float samples" [1]\n')DATAȫ testrender.write('\tLightSource "shadowspot" 2 "intensity" 10 "from" [0 -3 4] "to" [0 0 0] "string shadowname" ["shadow"] "float samples" [1]\n')DATA$ elif (menuval.val == 6): #Pixie!DATAL଎ testrender.write('\tAttribute "visibility" "transmission" "opaque"\n') DATAX 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,诎 testrender.write('\tAttributeBegin\n')DATA@ name = 'foobar'DATA meshobj = 10DATAt testrender.write('\t\tAttribute "displacementbound" "string coordinatesystem" ["object"] "float sphere" [1]\n')DATA,` writeShader(testrender, name, meshobj, 0)DATA0 testrender.write('\t\tSphere 1 -1 1 360\n')DATA( testrender.write('\tAttributeEnd\n')DATA,p testrender.write('\tAttributeBegin\n')DATA4Ȳ if ((menuval.val == 2) or (menuval.val == 3)):DATA0( testrender.write('\tSurface "oakplank"\n')DATA4 elif (menuval.val == 4) or (menuval.val == 1):DATA0賎 testrender.write('\tSurface "rmarble"\n')DATA4H elif (menuval.val == 5) or (menuval.val == 6):DATA, testrender.write('\tSurface "matte"\n')DATA< testrender.write('\tPointsPolygons [4 ] [0 3 2 1 ]\n')DATA`h 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( testrender.write('\tAttributeEnd\n')DATA$P testrender.write('WorldEnd\n')DATA testrender.close()DATA(趎 render('%s/testrender.rib'%rootdir)DATA(@ if (evt == 20): # Load settingsDATA loadSettings()DATA ط Register (gui, event, bevent)DATA(( if (evt == 21): # Save settingsDATA saveSettings()DATA  Register (gui, event, bevent)DATA if (evt == 30):DATAP saveload(0, 0, 'global')DATA  Register (gui, event, bevent)DATA蹎 if (evt == 31):DATA( saveload(1, 0, 'global')DATA p Register (gui, event, bevent)DATA if (evt == 32):DATA saveload(1,0,'shader')DATA H Register (gui, event, bevent)DATA if (evt == 34):DATA ػ worked = getSelectedObject()DATA( if (worked == 1):DATAh resetObject()DATA$ Register (gui, event, bevent)DATA saveload(0,0,'object')DATA @ Register (gui, event, bevent)DATA if (evt == 244):DATAн rendershadow.val = 1DATA raytraceshadow.val = 0DATA` saveload(1,0,'object')DATA if (eblur.val > 0.2):DATA𾎬 eblur.val = 0.2DATA0 maxblur = 0.2DATA p Register (gui, event, bevent)DATA if (evt == 245):DATA rendershadow.val = 0DATAH raytraceshadow.val = 1DATA saveload(1,0,'object')DATA maxblur = 10.0DATA  Register (gui, event, bevent)DATAh if (evt == 475):DATA indirectgi.val = 1DATA areagi.val = 0DATA 0Ž Register (gui, event, bevent)DATAŽ if (evt == 476):DATAŽ indirectgi.val = 0DATAÎ areagi.val = 1DATA HÎ Register (gui, event, bevent)DATA,Î if (evt == 367): # Convert texturesDATA(Î imagelist = os.listdir(texturesdir) DATAHĎ if (imagelist != []):DATAĎ for image in imagelist:DATA,Ď rawimage = '%s/%s'%(texturesdir, image)DATA$0Ŏ totiff.SetOutDir(texturesdir)DATA(Ŏ ok = totiff.ConvertShort(rawimage)DATA$Ŏ if not ok[0]: # error occurredDATA((Ǝ print ok[1] # print error messageDATA(Ǝ imagelist = os.listdir(texturesdir) DATAƎ imagelisttif = []DATA ǎ for image in imagelist:DATA hǎ if (image[-3:] == 'tif'):DATA,ǎ imagelisttif = imagelisttif + [image]DATA4Ȏ imagelistmenu = string.join(imagelisttif, "|")DATA pȎ Register (gui, event, bevent)DATAȎ if (evt == 368):DATA(Ɏ imagelist = os.listdir(texturesdir) DATAXɎ if (imagelist != []):DATAɎ imagelisttif = []DATAɎ for image in imagelist:DATA 0ʎ if (image[-3:] == 'tif'):DATA,ʎ imagelisttif = imagelisttif + [image]DATA4ʎ imagelistmenu = string.join(imagelisttif, "|")DATA88ˎ texturem.val = str(imagelisttif[converttex.val - 1])DATAˎ saveload(1,0,'shader')DATA ˎ Register (gui, event, bevent)DATA 8̎Register (gui, event, bevent)DATA̎DATA̎def getSelectedObject():DATA@͎ global selectedname, selectedtype, namelist, sshader2, sshaderDATAp͎ try:DATA0͎ selected = Blender.Object.GetSelected()[0]DATA Ύ except:DATA @Ύ return 0DATA xΎ selectedname = selected.nameDATA$Ύ if (selected.getType() == "Mesh"):DATA ώ selectedtype = 'Type: Mesh'DATA(hώ elif (selected.getType() == "Lamp"):DATA ώ selectedtype = 'Type: Lamp'DATAЎ else:DATA HЎ selectedtype = 'Type: Other'DATA(Ў namelist = string.split(sshader, "|")DATAЎ namelist.remove('ADD NEW')DATA 8ю namelist = map(str, namelist)DATA(ю sshader2 = string.join(namelist, "|")DATA ю return 1DATAҎ DATA(HҎdef saveload(save, exportS, module):DATAҎ if (module == 'shader'):DATAҎ Variables = [shadermenu.val, ambientshader.val, diffuseshader.val, specularshader.val, roughnessshader.val, coefshader.val, DATAӎ reflblurshader.val, refrblurshader.val, reflsamples.val, refrsamples.val, kr.val, textshader.val, textshaderd.val, texturem.val,DATATHԎ textureblurm.val, norm.val, textnor.val, illuminationmenu.val, projection.val]DATAԎ if exportS:DATA,Վ namelist = string.split(sshader, "|")DATA0`Վ name = namelist[objectshadermenu.val - 1]DATA Վ else: DATA Վ name = surfaceshadername.valDATAH֎ if (name == ''):DATA ֎ returnDATA$֎ fname = surfaceshadersdir + nameDATA׎ if (module == 'object'):DATAlX׎ Variables = [convertbm.val, objectshadermenu.val, geom.val, meshexport.val, uv.val, arealightMESH.val, DATAx׎ areasamples.val, recievecaustics.val, transmittcaustics.val, transmittcausticsslider.val, caustics.val, photon.val, DATAp؎ rendershadow.val, buff256.val, buff512.val, buff1024.val, buff2048.val, eblur.val, esamples.val, amesh.val, DATAh8َ reflectcaustics.val, raytraceshadow.val, bias.val, rvisibility.val, castshadow.val, pointwidth.val, DATA$َ objectra.val, objectrafile.val]DATA, ڎ fname = objectsettingsdir + selectednameDATAxڎ if (selectedname == ''): DATA ڎ returnDATAڎ if (module == 'global'):DATA|@ێ Variables = [gi.val, gisteps.val, radiosity.val, radnum.val, dirw.val, image.val, filename.val, file.val, buffer.val, DATAxێ 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, DATAx0ݎ 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, DATAtxގ 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]DATA4` fname = globalpropertiesdir + 'GlobalProperties'DATA # Save variablesDATAᎬ if (save == 1):DATA@Ꭼ f = open(fname,'w')DATA$Ꭼ writeln(f,'BlenderMan0.1Beta9.0')DATAᎬ for i in Variables:DATA ⎬ writeln(f,type(i).__name__)DATAp⎬ if (i == '\n'):DATA⎬ writeln(f,'')DATA⎬ continueDATA0㎬ writeln(f,i)DATAp㎬DATA㎬ # Load variablesDATA㎬ if (save == 0):DATA 䎬 try:DATAX䎬 f = open(fname,'r')DATA 䎬 except: DATA 䎬 returnDATA 厬 index = 0DATA H厬 version = str(f.readline())DATA,厬 if (version != 'BlenderMan0.1Beta9.0\n'):DATA 厬 returnDATA(掬 for i in Variables:DATA p掬 varType = str(f.readline())DATA掬 if (varType == "str\n"):DATA,玬 Variables[index] = str(f.readline())DATA `玬 elif (varType == "float\n"):DATA,玬 Variables[index] = float(f.readline())DATA 莬 elif (varType == "int\n"):DATA,X莬 Variables[index] = int(f.readline())DATA莬 index += 1DATA 莬 f.close()DATA(鎬 if (module == 'shader'):DATA$p鎬 shadermenu.val = Variables[0]DATA(鎬 ambientshader.val = Variables[1]DATA(ꎬ diffuseshader.val = Variables[2]DATA(pꎬ specularshader.val = Variables[3]DATA(ꎬ roughnessshader.val = Variables[4]DATA$ 뎬 coefshader.val = Variables[5]DATA(p뎬 reflblurshader.val = Variables[6]DATA(뎬 refrblurshader.val = Variables[7]DATA$ 쎬 reflsamples.val = Variables[8]DATA$p쎬 refrsamples.val = Variables[9]DATA 쎬 kr.val = Variables[10]DATA$펬 textshader.val = Variables[11]DATA$`펬 textshaderd.val = Variables[12]DATA$펬 texturem.val = Variables[13]DATA( textureblurm.val = Variables[14]DATA X norm.val = Variables[15]DATA$ textnor.val = Variables[16]DATA, illuminationmenu.val = Variables[17]DATA$P projection.val = Variables[18]DATA elif (module == 'object'):DATA$ convertbm.val = Variables[0]DATA(8 objectshadermenu.val = Variables[1]DATA  geom.val = Variables[2]DATA$ meshexport.val = Variables[3]DATA0 uv.val = Variables[4]DATA(x arealightMESH.val = Variables[5]DATA$ areasamples.val = Variables[6]DATA(  recievecaustics.val = Variables[7]DATA,x transmittcaustics.val = Variables[8]DATA0 transmittcausticsslider.val = Variables[9]DATA$0 caustics.val = Variables[10]DATA  photon.val = Variables[11]DATA( rendershadow.val = Variables[12]DATA$( buff256.val = Variables[13]DATA$x buff512.val = Variables[14]DATA$ buff1024.val = Variables[15]DATA$ buff2048.val = Variables[16]DATA h eblur.val = Variables[17]DATA$ esamples.val = Variables[18]DATA  amesh.val = Variables[19]DATA(X reflectcaustics.val = Variables[20]DATA( raytraceshadow.val = Variables[21]DATA  bias.val = Variables[22]DATA$X rvisibility.val = Variables[23]DATA$ castshadow.val = Variables[24]DATA$ pointwidth.val = Variables[25]DATA$H objectra.val = Variables[26]DATA$ objectrafile.val = Variables[27]DATA elif (module == 'global'):DATA0 gi.val = Variables[0]DATA x gisteps.val = Variables[1]DATA$ radiosity.val = Variables[2]DATA  radnum.val = Variables[3]DATA h dirw.val = Variables[4]DATA  image.val = Variables[5]DATA$ filename.val = Variables[6]DATA X file.val = Variables[7]DATA  buffer.val = Variables[8]DATA  anim.val = Variables[9]DATA$H rendert.val = Variables[10]DATA$ menuval.val = Variables[11]DATA$ samples.val = Variables[12]DATA 8 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$ motionblur.val = Variables[18]DATA(  motionblurframe.val = Variables[19]DATA x dof.val = Variables[20]DATA  stop.val = Variables[21]DATA  lenght.val = Variables[22]DATA$h distance.val = Variables[23]DATA  autogs.val = Variables[24]DATA$ progress.val = Variables[25]DATA$X indirectgi.val = Variables[26]DATA  areagi.val = Variables[27]DATA  gianim.val = Variables[28]DATA$H patchsize.val = Variables[29]DATA$ elemsize.val = Variables[30]DATA$ minsize.val = Variables[31]DATA 8 recurs.val = Variables[32]DATA  gain.val = Variables[33]DATA  gamma.val = Variables[34]DATA ( lightx.val = Variables[35]DATA$x hiddenlayer.val = Variables[36]DATA$ gisphere.val = Variables[37]DATA$ finalgather.val = Variables[38]DATA h hdri.val = Variables[39]DATA  hdritex.val = Variables[40]DATA  rgba.val = Variables[41]DATA$X reconvert.val = Variables[42]DATA( prmanrenderer.val = Variables[43]DATA$ bmrtrenderer.val = Variables[44]DATA(P entropyrenderer.val = Variables[45]DATA$ dlrenderer.val = Variables[46]DATA( aqsisrenderer.val = Variables[47]DATA(P pixierenderer.val = Variables[48]DATA( prmantexmaker.val = Variables[49]DATA$  bmrttexmaker.val = Variables[50]DATA(P  entropytexmaker.val = Variables[51]DATA$  dltexmaker.val = Variables[52]DATA(  aqsistexmaker.val = Variables[53]DATA(P  pixietexmaker.val = Variables[54]DATA$  preworldra.val = Variables[55]DATA(  preworldrafile.val = Variables[56] DATA$P  postworldra.val = Variables[57]DATA(  postworldrafile.val = Variables[58] DATA(  ambiSamples.val = Variables[59] DATA$P  occlusion.val = Variables[60] DATA,  #ambiSamplesindex.val = Variables[61] DATA$  indirect.val = Variables[61]DATAH  DATAx def writeln(f,x):DATA  try:DATAx  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')DATA if (nn > 0):DATA( x = x[:nn] + x[nn + 1:]DATAp f.write(str(x))DATA f.write('\n')DATA  except:DATA( passDATA`DATAdef readint(f):DATA try:DATA return int(f.readline())DATA P except:DATA passDATAdef readfloat(f):DATA try:DATA 8 return float(f.readline())DATA  except:DATA passDATAdef readstr(f):DATA8 try:DATAp s = (f.readline())DATA nn = string.find(s, '\n')DATA if (nn > 0):DATA@ s = s[:nn] + s[nn + 1:]DATA  return sDATA  except:DATA  print sDATA0DATA`def saveShaderName(save):DATA global sshaderDATA< if save: f = open(surfaceshadersdir + 'ShaderNames','w')DATA8P else: f = open(surfaceshadersdir + 'ShaderNames','r')DATA  if save: writeln(f,sshader)DATA else: sshader = readstr(f)DATA P f.close()DATAtry: DATA4 f = open(surfaceshadersdir + 'ShaderNames','r')DATA except:DATAX saveShaderName(1)DATA  Register (gui, event, bevent)DATADATAsaveShaderName(0)DATA XRegister (gui, event, bevent)DATAsshader2 = sshaderDATADATADATAHdef 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:DATA0x rootdir = os.getenv("HOME") + '/BlenderMan/'DATA$ pdir = rootdir + dirw.val + '/'DATA4( globalpropertiesdir = pdir + '/GlobalProperties/'DATA0 surfaceshadersdir = pdir + '/SurfaceShaders/'DATA< displacementshadersdir = pdir + '/DisplacementShaders/'DATA0P objectsettingsdir = pdir + '/ObjectSettings/'DATA0 lightsettingsdir = pdir + '/LightSettings/'DATA  meshesdir = pdir + '/Meshes/'DATA ` imagesdir = pdir + '/images/'DATA  shadowdir = pdir + '/shadows/'DATA$  texturesdir = pdir + '/textures/'DATA$P  shadersdir = pdir + '/shaders/'DATA  try:DATA  os.mkdir(pdir)DATA ! os.mkdir(globalpropertiesdir)DATA h! os.mkdir(surfaceshadersdir)DATA$! os.mkdir(displacementshadersdir)DATA" os.mkdir(meshesdir)DATA P" os.mkdir(objectsettingsdir)DATA " os.mkdir(lightsettingsdir)DATA" os.mkdir(shadowdir)DATA8# os.mkdir(texturesdir)DATA# os.mkdir(imagesdir)DATA# except OSError: DATA$ passDATA@$DATA,p$def writeHeader(ribfile, frames, frames2):DATA\$ ribfile.write('Option "searchpath" "texture" ["%s"]\n'%(texturesdir + ":" + shadowdir))DATA P% display = Scene.GetCurrent()DATA,% context = display.getRenderingContext()DATA$% yResolution = context.imageSizeY()DATA$H& xResolution = context.imageSizeX()DATA & if xResolution >= yResolution:DATA,& factor = yResolution / float(xResolution)DATA@' else:DATA,x' factor = xResolution / float(yResolution)DATA ' if Blender.World.Get() != []:DATA$ ( world = Blender.World.Get()[0]DATA p( 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<* camera = Blender.Camera.Get(camobj.getData().name)DATAph* 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))DATAHx+ ribfile.write("Clipping %s %s\n" % (camera.clipStart, camera.clipEnd))DATAD+ ribfile.write('PixelSamples %s %s\n'%(samples.val, samples.val))DATA`, try:DATA<, ribfile.write('Exposure %s %s\n'%(gain.val, gamma.val))DATA - except: DATA8- passDATAp- if (menuval.val != 2):DATA- if (dof.val == 1): DATAT. ribfile.write('DepthOfField %s %s %s\n'%(stop.val, lenght.val, distance.val))DATA<. ribfile.write('ShadingRate %s\n'%sratelist[srate.val - 1])DATA4. if ((radiosity.val == 1) & (menuval.val == 2)):DATA@H/ ribfile.write('Option "radiosity" "steps" [%s]\n'%radnum.val)DATAH/ ribfile.write('Attribute "indirect" "maxerror" [%s]\n'%maxerror.val)DATAX00 ribfile.write('Attribute "indirect" "float maxpixeldist" [%s]\n'%maxpixeldist.val)DATAP0 ribfile.write('Attribute "radiosity" "float patchsize" [%s]'%patchsize.val)DATAL81 ribfile.write('Attribute "radiosity" "float elemsize" [%s]'%elemsize.val)DATAL1 ribfile.write('Attribute "radiosity" "float minsize" [%s]'%minsize.val)DATA(2 if (motionblur.val == 1):DATA$p2 ribfile.write('Shutter 0 1\n')DATA02 if (menuval.val == 1) or (menuval.val == 4):DATAH 3 ribfile.write('Option "trace" "integer maxdepth" [%s]\n'%recurs.val)DATA03 elif (menuval.val == 2) or (menuval.val == 3):DATAD3 ribfile.write('Option "render" "max_raylevel" [%s]\n'%recurs.val)DATALh4 ribfile.write('Option "statistics" "integer endofframe" [%s]\n'%debug.val)DATA04 if ((indirectgi.val == 1) & (gi.val == 1)):DATA,@5 if ((gianim.val == 0) & (frames2 == 0)):DATAP5 ribfile.write('Option "indirect" "string savefile" ["%s/irr.dat"]\n'%pdir)DATA06 elif ((frames2 > 0) or (gianim.val == 1)):DATAx6 if (anim.val == 1):DATAP6 ribfile.write('Option "indirect" "string seedfile" ["%s/irr.dat"]\n'%pdir)DATA@7 if (menuval.val == 3):DATA@7 ribfile.write('Option "indirect" "integer maxbounce" [3]\n')DATA7DATA(8DATA(X8def writeTransform(ribfile, lampobj):DATA8 global cframeDATA8 Blender.Get('curframe')DATA89 Blender.Window.RedrawAll()DATA9 if (lampobj == 0):DATA$9 camobj = scene.getCurrentCamera()DATA: else:DATAH: camobj = lampobjDATA,: caminvmatrix = camobj.getInverseMatrix()DATA : ribfile.write("Transform [" +DATA<0; "%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],DATAp< caminvmatrix[0][3],DATA< caminvmatrix[1][0],DATA= caminvmatrix[1][1],DATAH= -caminvmatrix[1][2],DATA= caminvmatrix[1][3],DATA= caminvmatrix[2][0],DATA > caminvmatrix[2][1],DATAh> -caminvmatrix[2][2],DATA> caminvmatrix[2][3],DATA> caminvmatrix[3][0],DATA@? caminvmatrix[3][1],DATA? -caminvmatrix[3][2],DATA? caminvmatrix[3][3]))DATA@DATAH@def ambientLight(ribfile):DATA @ if Blender.World.Get() != []:DATA$@ world = Blender.World.Get()[0]DATA(0A if (occlusion.val) or (indirect.val):DATAHA ribfile.write('\tAttribute "visibility" "transmission" "opaque"\n')DATAB else:DATA8B ribfile.write('\tLightSource "ambientlight" 998 "float intensity" [1] "color lightcolor" [%s %s %s]\n\n'%(world.amb[0], world.amb[1], world.amb[2]))DATACDATA0Cdef checkLamps(ribfile):DATAxC global selectednameDATAC lampnum = 0DATA(D for objects in Blender.Object.Get():DATAXD name = objects.getName()DATA$D if (objects.getType() == "Lamp"):DATAD lampnum += 1DATA0E resetObject()DATApE selectedname = nameDATA$E Register (gui, event, bevent)DATAF saveload(0,0,'object')DATA$PF Register (gui, event, bevent)DATA(F writeLamps(ribfile, name, lampnum)DATAF ribfile.write("\n")DATA@GDATA(pGdef renderShadows(ribfile, frames2):DATA$G global selectedname, partitionnameDATA(H display = Blender.Scene.GetCurrent()DATA$pH cframe = Blender.Get('curframe')DATA(H for objects in Blender.Object.Get():DATAI name = objects.getName()DATA$`I if (objects.getType() == "Lamp"):DATAI resetObject()DATA$I Register (gui, event, bevent)DATA@J selectedname = nameDATAJ saveload(0,0,'object')DATA$J Register (gui, event, bevent)DATA K if (rendershadow.val == 1):DATApK if (anim.val == 1):DATA,K shadowframe = Blender.Get('curframe')DATA L else:DATAHL shadowframe = ''DATAHL ribfiledir = os.path.normpath(shadowdir + name + str(shadowframe))DATA(M shadowrib = open(ribfiledir, 'w')DATA4`M if ((menuval.val == 4) & (os.name != "posix")):DATAM ribfile.write('ReadArchive "%s%s"\n'%(os.path.splitdrive( os.path.normcase( os.path.normpath(partitionname + shadowdir + name + str(shadowframe))))))DATA N else:DATAPN ribfile.write('ReadArchive "%s"\n'%(shadowdir + name + str(shadowframe)))DATA(@O shadowrib.write('FrameBegin 0\n')DATA(O lampobj = Blender.Object.Get(name)DATA4O lamp = Blender.Lamp.Get(lampobj.getData().name)DATA|PP if ((lamp.getMode() & lamp.Modes['Shadows']) & (lamp.type == 2)): # if it is set to render shadow and is a spotlightDATAP if (buff256.val == 1):DATA@Q buffer = 256DATA Q elif (buff512.val == 1):DATAQ buffer = 512DATA R elif (buff1024.val == 1):DATA`R buffer = 1024DATA R elif (buff2048.val == 1):DATAR buffer = 2048DATAP0S shadowrib.write('Projection "perspective" "fov" %s\n' %(lamp.spotSize))DATA,S shadowrib.write('PixelSamples 1 1\n')DATA4T if (menuval.val != 2) and (menuval.val != 3):DATADhT shadowrib.write('Hider "hidden" "depthfilter" "midpoint"\n')DATAT if (menuval.val == 3):DATA4 U shadowrib.write('PixelFilter "min" 1 1\n')DATA U else:DATA4U shadowrib.write('PixelFilter "box" 1 1\n')DATA8V shadowrib.write('Hider "hidden" "jitter" [0]\n')DATA(V writeTransform(shadowrib, lampobj)DATA<V shadowrib.write('Format %s %s 1\n'%(buffer, buffer))DATA\@W shadowrib.write('Display "%s/%s%s.pic" "zfile" "z"\n'%(shadowdir, name, shadowframe))DATAW if menuval.val == 5:DATA,X shadowrib.write('ShadingRate 1\n')DATA hX else:DATA,X shadowrib.write('ShadingRate 4\n')DATA(X shadowrib.write('WorldBegin \n')DATAPY shadows = 1DATA8Y createObjects(shadowrib, cframe, shadows, frames2)DATA$Y shadowrib.write('WorldEnd \n')DATAHZ shadowrib.write('MakeShadow "%s/%s%s.pic" "%s/%s%s.tx"\n'%(shadowdir, name, shadowframe, shadowdir, name, shadowframe))DATA$Z shadowrib.write('FrameEnd\n')DATAH[DATA(x[def writeLamps(ribfile, name, lampnum):DATA[ global selectednameDATA$\ lampobj = Blender.Object.Get(name)DATA4h\ 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]DATA4H^ toy = -lampobj.matrix[2][1] + lampobj.matrix[3][1]DATA4^ toz = -lampobj.matrix[2][2] + lampobj.matrix[3][2]DATA0_ if lamp.getMode() & lamp.Modes['Negative']:DATAh_ negative = -1DATA_ else:DATA_ negative = 1DATA ` selectedname = nameDATA h` Register (gui, event, bevent)DATA` saveload(0,0,'object')DATAa if (caustics.val):DATA0@a ribfile.write('\tLightSource "caustic" 2\n')DATA(a ribfile.write('\tIlluminate 2 0\n\n')DATA(a ribfile.write('\tTransformBegin\n')DATALPb ribfile.write('\tAttribute "light" "integer nphotons" [%s]\n'%photon.val)DATA,b if lamp.getMode() & lamp.Modes['Shadows']:DATA c shadow = 'on'DATA`c else:DATAc shadow = 'off'DATA0c if (menuval.val == 2) or (menuval.val == 4):DATA 8d if (raytraceshadow.val == 1):DATAHd ribfile.write('\tAttribute "light" "shadows" ["%s"]\n' % (shadow))DATAe else:DATA<8e ribfile.write('\tAttribute "light" "shadows" ["off"]\n')DATAe if (lamp.type == 2):DATAe if (anim.val == 1):DATA00f shadowframe = '%s'%(Blender.Get('curframe'))DATAf else:DATAf shadowframe = ''DATA$g energratio = lamp.dist * negativeDATA8Xg if ((shadow == 'on') and (raytraceshadow.val == 1)):DATAg if (menuval.val == 3):DATAh shadowname = 'shadow'DATAPh elif (menuval.val == 1):DATAh shadowname = 'raytrace'DATAh elif (menuval.val == 6):DATAH(i ribfile.write('\t(Attribute "visibility" "transmission" "opaque")')DATAi shadowname = 'raytrace'DATA i else:DATA j shadowname = ''DATA`j else:DATA4j if (shadow == 'on') and (rendershadow.val == 1):DATA,j shadowname = name + shadowframe + '.tx'DATA Pk else:DATAk shadowname = ''DATA@k if (menuval.val == 6) and (shadow == 'off'): #Pixie RenderDATA8l 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' \DATAXm %(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))DATAphn elif (menuval.val == 6) and (shadow == 'on') and (raytraceshadow.val == 0): #Pixie Render with SpotShadowsDATAo 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' \DATA0p %(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@q elif (menuval.val == 6) and (shadow == 'on') and (raytraceshadow.val == 1): #Pixie Render with Ray Spot shadowsDATAq 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' \DATAs %(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 else:DATAPt 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' \DATApu %(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))DATAv elif (lamp.type == 1):DATAv energratio = negativeDATAxw if (shadow == "off") or (raytraceshadow.val != 1) or (menuval.val == 2) or (menuval.val == 4) or (menuval.val == 5):DATAw 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))DATAx else:DATAx if (menuval.val == 3):DATAD@y 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))DATAz elif (menuval.val == 1):DATADz 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))DATAh| elif (lamp.type == 0):DATA$| energratio = lamp.dist * negativeDATAx} 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):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))DATA else:DATA 8 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 聏 elif (menuval.val == 1): DATA8 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'DATAHȄ 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 = negativeDATA 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))DATA if (caustics.val == 1):DATA$P ribfile.write('\tTransformEnd\n')DATADATA Јdef writeMatrix(ribfile, name):DATA  Blender.Get('curframe')DATAh Blender.Window.RedrawAll()DATA, matrix = Blender.Object.Get(name).matrixDATA$ ribfile.write("\t\tTransform [" +DATA<X "%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 ` matrix[1][0], matrix[1][1],DATA  matrix[1][2], matrix[1][3],DATA  matrix[2][0], matrix[2][1],DATA P matrix[2][2], matrix[2][3],DATA  matrix[3][0], matrix[3][1],DATA  matrix[3][2], matrix[3][3]))DATA@DATApdef resetObject():DATA convertbm.val = 0DATA objectshadermenu.val = 0DATA8 geom.val = 1DATAx meshexport.val = 1DATA pointwidth.val = 1.0DATA  uv.val = 0DATA8 arealightMESH.val = 0DATA areasamples.val = 20DATAȏ recievecaustics.val = 0DATA transmittcaustics.val = 0DATA$X transmittcausticsslider.val = 1.4DATA caustics.val = 0DATA萏 photon.val = 4000DATA( buff256.val = 0DATAh buff512.val = 1DATA buff1024.val = 0DATA葏 buff2048.val = 0DATA( eblur.val = 0.00DATAh esamples.val = 1DATA amesh.val = 0DATA蒏 reflectcaustics.val = 0DATA0 raytraceshadow.val = 0DATAx rendershadow.val = 0DATA bias.val = 0.25DATA rvisibility.val = 0DATAH castshadow.val = 1DATA objectra.val = 0DATAȔDATAdef resetShaderVal():DATA@ if (shadermenu.val == 1):DATA ambientshader.val = 1DATAЕ diffuseshader.val = 0.5DATA specularshader.val = 0.5DATA` roughnessshader.val = 0.1DATA if (shadermenu.val == 2):DATA𖏬 ambientshader.val = 0.2DATA8 diffuseshader.val = 0.0DATA specularshader.val = 0.5DATA ȗ roughnessshader.val = 0.05DATA coefshader = 1.5DATAX reflblurshader = 0DATA refrblurshader.val = 0DATA蘏 reflsamples.val = 0DATA0 refrsamples.val = 0DATAx if (shadermenu.val == 3):DATA ambientshader.val = 1.0DATA diffuseshader.val = 0.1DATAP specularshader.val = 1.0DATA roughnessshader.val = 0.2DATA if (shadermenu.val == 5):DATA( ambientshader.val = 1DATAp diffuseshader.val = 0.5DATA specularshader.val = 0.5DATA roughnessshader.val = 0.1DATA(H textshader.val = 'Surface "plastic"'DATA, textshaderd.val = 'Displacement "bumpy"'DATA texturem.val = ''DATA8 textnor.val = 0DATAx illuminationmenu.val = 0DATADATA0𝏬def writeShader(ribfile, name, meshobj, anim):DATAP global texturefile, txdoneDATA  if (arealightMESH.val == 0):DATA螏 MName = '"plastic"'DATA0 else: DATAh MName = ''DATA, if ((uv.val == 1) and (meshobj != 10)):DATA0 mesh = Blender.NMesh.GetRawFromObject(name)DATA` if mesh.faces[0].image:DATA, imagename = mesh.faces[0].image.filenameDATA  imagename = imagename[:-3]DATAP imagename = imagenameDATA$ imagename = imagename + 'tif'DATAT衏 imagename = '%s/%s/textures/%s'%(rootdir, dirw.val, os.path.split(imagename)[1])DATAhh rawimage = '%s/%s/textures/%s'%(rootdir, dirw.val, os.path.split(mesh.faces[0].image.filename)[1])DATA8 infile = open(mesh.faces[0].image.filename, 'rb')DATA$h outfile = open(rawimage, 'wb')DATA  outfile.write(infile.read())DATA outfile.close()DATAH infile.close()DATA` imagenameconv = texturesdir + os.path.split(mesh.faces[0].image.filename)[1][:-3] + 'tif'DATAX txname = texturesdir + os.path.split(mesh.faces[0].image.filename)[1][:-3] + 'tx'DATA( if os.path.isfile(imagename) == 0:DATA  try:DATA$0 totiff.SetOutDir(texturesdir)DATA( ok = totiff.ConvertShort(rawimage)DATA$ئ if not ok[0]: # error occurredDATA(( print ok[1] # print error messageDATA  except:DATA  if (os.name != "posix"):DATA  try:DATAd@ os.system('/ImageMagick/convert.exe -depth 8 -compress none %s %s'%(rawimage, imagename))DATAШ 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]DATAh imagename = imagenameDATA  tdlname = imagename + 'tx'DATA$ imagename = imagename + 'tif'DATA4P 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:DATAH@ os.system('%s %s %s'%(prmantexmaker.val, imagenameconv, txname))DATA elif menuval.val == 2:DATAH os.system('%s %s %s'%(bmrttexmaker.val, imagenameconv, txname))DATAx elif menuval.val == 3:DATAH os.system('%s %s %s'%(entropytexmaker.val, imagenameconv, txname))DATA8 elif menuval.val == 4:DATAD os.system('%s %s %s'%(dltexmaker.val, imagenameconv, txname))DATA𱏬 elif menuval.val == 5:DATAH8 os.system('%s %s %s'%(aqsistexmaker.val, imagenameconv, txname))DATA elif menuval.val == 6:DATAH os.system('%s %s %s'%(pixietexmaker.val, imagenameconv, txname))DATAp else: DATA MName = '"plastic"'DATA$𳏬 if (transmittcaustics.val == 1):DATA0@ mesh = Blender.NMesh.GetRawFromObject(name)DATA try:DATA<ش material = Blender.Material.Get(mesh.materials[0].name)DATA@ mr = material.RDATA mg = material.GDATA mb = material.BDATA@ except: # if the mesh doesnt have a material default to whiteDATA p 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 @ if (reflectcaustics.val == 1):DATAP ribfile.write('\t\tAttribute "caustic" "color specularcolor" [.9 .9 .9]\n')DATA  if (recievecaustics.val == 1):DATA(` ribfile.write('\t\tIlluminate 2 1\n')DATA8 if ((shadermenu.val == 1) & (arealightMESH.val != 1)):DATA0  if ((convertbm.val != 0) or (meshobj == 10)):DATA ribfile.write('\t\tSurface "plastic" "Ka" %s "Kd" %s "Ks" %s "roughness" %s\n'%(ambientshader.val, diffuseshader.val, specularshader.val, roughnessshader.val))DATA<P 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< ribfile.write('\t\tDeclare "blur" "uniform float"\n')DATA@輏 ribfile.write('\t\tDeclare "refrblur" "uniform float"\n')DATA@X ribfile.write('\t\tDeclare "raysamples" "uniform float"\n')DATADȽ ribfile.write('\t\tDeclare "refrraysamples" "uniform float"\n')DATA@8 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):DATA@ evar = '"blur" [%s] "raysamples" [%s] "refrraysamples" %s "refrblur" %s "eta" %s'%(reflblurshader.val, reflsamples.val, refrsamples.val, refrblurshader.val, coefshader.val)DATA  else:DATAX 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< elif ((shadermenu.val == 3) & (arealightMESH.val != 1)):DATA0 if ((convertbm.val != 0) or (meshobj == 10)):DATA<HÏ ribfile.write('\t\tDeclare "blur" "uniform float"\n')DATA@Ï ribfile.write('\t\tDeclare "raysamples" "uniform float"\n')DATA ď if (menuval.val == 3):DATA`hď evar = '"string envname" ["reflection"] "string envspace" ["current"] "float twosided" 1'DATAď elif (menuval.val == 2):DATAP@ŏ evar = ('"raysamples" %s "blur" %s'%(reflsamples.val, reflblurshader.val))DATA ŏ else:DATAŏ evar = ''DATA8Ə 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)):DATA0xǏ if ((convertbm.val != 0) or (meshobj == 10)):DATAtǏ ribfile.write('\t\tAttribute "displacementbound" "sphere" [ %s ] "coordinatesystem" [ "object" ]\n'%norm.val)DATA,xȏ ribfile.write('\t\t%s\n'%textshader.val)DATA0ȏ ribfile.write('\t\t%s\n'%textshaderd.val)DATA<0ɏ 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'DATA0ˏ tdlname = txnameDATA$pˏ txname = texturesdir + txnameDATAˏ converttex = 1DATA$̏ if os.path.isfile(txname) == 0:DATAP̏ for texture in txdone:DATA ̏ if (txname == texture):DATȀ converttex = 0DATA 0͏ breakDATAh͏ if (converttex == 1):DATA͏ if (menuval.val == 1):DATAT͏ os.system('%s %s %s'%(prmantexmaker.val, texturesdir + texturem.val, txname))DATA xΏ elif (menuval.val == 2):DATATΏ os.system('%s %s %s'%(bmrttexmaker.val, texturesdir + texturem.val, txname))DATA HϏ elif (menuval.val == 3):DATAXϏ os.system('%s %s %s'%(entropytexmaker.val, texturesdir + texturem.val, txname))DATA Џ elif (menuval.val == 4):DATATpЏ os.system('%s %s %s'%(dltexmaker.val, texturesdir + texturem.val, txname))DATA Џ elif (menuval.val == 5):DATAT@я 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):DATAhӏ 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))DATA0@Տ if ((convertbm.val == 0) & (meshobj != 10)):DATA0Տ mesh = Blender.NMesh.GetRawFromObject(name)DATA֏ if (MName == ''):DATA @֏ returnDATAx֏ try:DATA<֏ material = Blender.Material.Get(mesh.materials[0].name)DATA$׏ 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 ؏ except:DATA0X؏ ribfile.write('\t\tSurface %s\n'%(MName))DATA؏ if (meshobj != 10):DATA0ُ mesh = Blender.NMesh.GetRawFromObject(name)DATA`ُ try:DATAُ if mesh.materials:DATA<ُ material = Blender.Material.Get(mesh.materials[0].name)DATATHڏ ribfile.write("\t\tColor [%s %s %s]\n" %(material.R, material.G, material.B))DATAڏ except: passDATA ۏ if (arealightMESH.val == 1):DATA,Xۏ ribfile.write('\t\tSurface "constant"\n')DATALۏ ribfile.write('\t\tAttribute "light" "nsamples" [%s]\n'%areasamples.val)DATA(܏ if (menuval.val == 2):DATA@p܏ ribfile.write('\t\tAttribute "light" "shadows" ["on"]\n')DATA0܏ mesh = Blender.NMesh.GetRawFromObject(name)DATA@ݏ try:DATA<xݏ 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))DATA0ߏ elif (menuval.val == 2):DATAxߏ ribfile.write('\t\tAreaLightSource "arealight" 999 "intensity" [%s] "lightcolor" [%s %s %s]\n'%(material.emit * 100, material.R, material.G, material.B))DATA H except:DATAx ribfile.write('\t\tAreaLightSource "arealight" 999 "intensity" [%s] "lightcolor" [%s %s %s]\n'%(0.7 * 100, 1, 1, 1))DATA(ᏬDATA8XᏬdef createObjects(ribfile, cframe, shadows, frames2):DATATᏬ global sshader, selectedname, thisone, meshobjects, xbar, meshnum, partitionnameDATA@⏬ meshobjects = 0.0DATA⏬ thisone = 0DATA⏬ meshnum = 0DATA㏬ objecttime = ''DATA(@㏬ 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():DATAP召 name = objects.getName()DATA召 resetObject()DATA 召 area = 0DATA$揬 obj = Blender.Object.Get(name)DATA`揬 i = 0DATA0揬 while (obj.Layer>>i): # convert layer numberDATA揬 i = i + 1DATA 8珬 if (i == hiddenlayer.val):DATA珬 layer = 1DATA珬 else:DATA菬 layer = 0DATA8@菬 if ((objects.getType() == "Mesh") & (layer == 0)):DATA菬 meshnum = meshnum + 1DATA(菬 meshobj = Blender.Object.Get(name)DATA$H鏬 obj = Blender.Object.Get(name)DATA鏬 selectedname = nameDATA$鏬 Register (gui, event, bevent)DATA0ꏬ saveload(0,0,'object')DATAxꏬ if (shadows == 0):DATA(ꏬ ribfile.write('\tAttributeBegin\n')DATA0돬 if ((shadows == 0) and (objectra.val == 1)):DATA@x돬 ribfile.write('\t\tReadArchive "%s"\n' %(objectrafile.val))DATA돬 if (shadows != 1):DATA00쏬 mesh = Blender.NMesh.GetRawFromObject(name)DATA 쏬 if (len(mesh.faces) == 0):DATA(쏬 ribfile.write('\tAttributeEnd\n')DATA8포 del(mesh)DATA x포 returnDATA포 if (mesh.materials):DATA 포 try:DATA@0 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)DATAhDATA  if (motionblur.val == 1):DATA, ribfile.write('\tMotionBegin [0 1]\n')DATA(@ Blender.Set('curframe', cframe) DATA  writeMatrix(ribfile, name)DATA< Blender.Set('curframe', cframe + motionblurframe.val)DATA P writeMatrix(ribfile, name)DATA$ ribfile.write('\tMotionEnd\n')DATA( Blender.Set('curframe', cframe) DATA H else:DATA  writeMatrix(ribfile, name)DATA, namelist = string.split(sshader, "|")DATA( if len(namelist) > 1: DATA@p surfaceshadername.val = namelist[objectshadermenu.val - 1] DATA$ Register (gui, event, bevent)DATA0 if (convertbm.val == 1):DATAx saveload(0,1,'shader')DATA$ Register (gui, event, bevent)DATA  if (castshadow.val == 1):DATA` op = "Os"DATA  elif (castshadow.val == 2):DATA op = "opaque"DATA 0 elif (castshadow.val == 3):DATA4 if (menuval.val == 1) or (menuval.val == 4):DATA op = "shader"DATA  else:DATAX op = "shade"DATA  elif (castshadow.val == 4):DATA4 if (menuval.val == 1) or (menuval.val == 4):DATAH op = "transparent"DATA  else:DATA op = "none"DATA0 if (menuval.val == 1) or (menuval.val == 4):DATATh ribfile.write('\t\tAttribute "visibility" "string transmission" ["%s"]\n'%op)DATA4 elif (menuval.val == 2) or (menuval.val == 3):DATAPH ribfile.write('\t\tAttribute "render" "string casts_shadows" ["%s"]\n'%op)DATA  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):DATA4 writeShader(ribfile, name, meshobj, frames2)DATA>, if (amesh.val == 1):DATAH>, objecttime = frames2DATA >, else:DATA>, objecttime = ''DATA ?, if (motionblur.val != 1):DATA,X?, if ((frames2 == 0) or amesh.val == 1):DATA?, if (geom.val == 1):DATAH?, meshfile = open('%s/%s%s.rib'%(meshesdir,name, objecttime), 'w')DATA8p@, 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\A, else: ribfile.write('\t\tReadArchive "%s/%s%s.rib"\n'%(meshesdir, name, objecttime))DATA hB, else:DATA B, if (meshexport.val == 2):DATA,B, if ((frames2 == 0) or amesh.val == 1):DATAHC, if (geom.val == 1):DATAHC, meshfile = open('%s/%s%s.rib'%(meshesdir,name, objecttime), 'w')DATA8D, check(name, meshfile, meshobj, meshnum, shadows)DATApD, 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\pE, else: ribfile.write('\t\tReadArchive "%s/%s%s.rib"\n'%(meshesdir, name, objecttime))DATA E, else:DATA0F, if (amesh.val != 1):DATAxF, if (frames2 == 0):DATAF, if (geom.val == 1):DATALG, meshfile = open('%s/%s%s.rib'%(meshesdir,name, objecttime), 'w')DATA<G, check(name, meshfile, meshobj, meshnum, shadows)DATAG, 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\H, else: ribfile.write('\t\tReadArchive "%s/%s%s.rib"\n'%(meshesdir, name, objecttime))DATA pI, else:DATA(I, Blender.Set('curframe', cframe) DATA$J, Blender.Window.RedrawAll()DATAPJ, if (geom.val == 1):DATAHJ, meshfile = open('%s/%s%s.rib'%(meshesdir,name, objecttime), 'w')DATA8K, check(name, meshfile, meshobj, meshnum, shadows)DATA0xK, ribfile.write('\tMotionBegin [0 1]\n')DATAK, 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\L, else: ribfile.write('\t\tReadArchive "%s/%s%s.rib"\n'%(meshesdir, name, objecttime))DATA<hM, Blender.Set('curframe', cframe + motionblurframe.val)DATA$M, Blender.Window.RedrawAll()DATA4 N, objecttime = frames2 + motionblurframe.valDATAN, if (geom.val == 1):DATAPN, meshfile = open('%s/%s%s.rib'%(meshesdir,name, str(objecttime)), 'w')DATA8HO, check(name, meshfile, meshobj, meshnum, shadows)DATAO, 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`P, else: ribfile.write('\t\tReadArchive "%s/%s%s.rib"\n'%(meshesdir, name, str(objecttime)))DATA(HQ, ribfile.write('\tMotionEnd\n')DATA(Q, Blender.Set('curframe', cframe) DATA$Q, Blender.Window.RedrawAll()DATAHR, objecttime = frames2DATAR, if (shadows == 0):DATA(R, ribfile.write('\tAttributeEnd\n')DATA 0S, if (arealightMESH.val == 1):DATA,S, ribfile.write('\tIlluminate 999 1\n')DATAHDATA(S,def drawBar(meshnum, qwerty, pixels):DATA0T, if (progress.val == 1):DATA$xT, global thisone, meshobjects, xbarDATA T, xbar = 0DATAU, xbar = qwertyDATA@U, if (xbar < 10): xbar = 11DATA U, Draw()DATA0U, elif ((progress.val == 0) & (anim.val == 1)):DATA( V, testtime = Blender.Get('curframe')DATAxV,DATA8V,def check(name, meshfile, meshobj, meshnum, shadows):DATAW, if (shadows != 1):DATA PW, print 'Exporting: %s'%nameDATA0W, mesh = Blender.NMesh.GetRawFromObject(name)DATA X, if (len(mesh.faces) == 0):DATAPX, del(mesh)DATA X, returnDATAX, if (meshexport.val == 1):DATA$Y, pointspolygon(meshfile, mesh)DATA `Y, elif (meshexport.val == 2):DATA0Y, polygon(mesh, meshfile, meshobj, meshnum)DATA Z, elif (meshexport.val == 3):DATA `Z, subdivmesh(meshfile, mesh)DATA Z, elif (meshexport.val == 4):DATA[, points(meshfile, mesh)DATA H[, elif (meshexport.val == 5):DATA[, general(meshfile, mesh)DATA [, elif (meshexport.val == 6):DATA0\, bilinear(meshfile, mesh)DATA x\, del(mesh)DATA\, meshfile.close()DATA\,DATA ],def pointspolygon(file, mesh): DATAp], global meshnumDATA$], testtime = Blender.Get('curframe')DATA ^, update = 5DATA8^, colorif = 0DATAx^, perso = 0.0DATA^, pixels = 0.0DATA^, update = 100DATA 8_, index = 0DATAp_, facenum = len(mesh.faces)DATA_, if menuval.val != 2:DATA`, if mesh.hasFaceUV() == 1:DATA8H`, file.write('Declare "st" "facevarying float[2]"\n')DATA$`, file.write("PointsPolygons [");DATAa, for face in mesh.faces:DATA,Ha, if len(face.v) == 4 and menuval.val == 2:DATAa, file.write('3 3 ')DATAa, else:DATA$ b, file.write('%s '%(len(face.v)))DATApb, index = index + 1DATA0b, if ((index == update) or (index == facenum)):DATAc, update = update + 100DATAXc, pixels = 619DATA(c, perso = float(index) / float(facenum)DATA,c, qwerty = float(pixels) * float(perso) DATA$Hd, drawBar(meshnum, qwerty, pixels)DATAd, file.write("] ")DATAd, file.write("[ ")DATAe, for face in mesh.faces:DATA`e, num = len(face.v)DATAe, if num == 3 or num == 4:DATA(e, if num == 4 and menuval.val == 2:DATA@f, for i in (0,1,2,0,2,3):DATA,f, file.write('%s ' % face.v[i].index)DATA f, else:DATAg, for vert in face.v:DATA$`g, file.write('%s ' % vert.index)DATAg, file.write("]")DATAg, file.write('\n"P" [')DATA8h, for vert in mesh.verts:DATADh, file.write("%s %s %s " % (vert.co[0], vert.co[1], vert.co[2]))DATAh, file.write('] ')DATA0i, if mesh.faces[0].smooth:DATAxi, file.write(' "N" [')DATAi, for vert in mesh.verts:DATADj, file.write("%s %s %s " % (vert.no[0], vert.no[1], vert.no[2]))DATAxj, file.write(']')DATA$j, if mesh.hasVertexColours() == 1:DATA(k, vertexcol = range(len(mesh.verts))DATA`k, file.write('\n"Cs" [')DATAk, for face in mesh.faces:DATAk, num = len(face.v)DATA8l, if num == 3 or num == 4:DATA$l, for vi in range(len(face.v)):DATA0l, vertexcol[face.v[vi].index] = face.col[vi]DATA0m, for vc in vertexcol:DATADxm, file.write('%s %s %s ' % (vc.r/256.0, vc.g/256.0, vc.b/256.0))DATAm, file.write(']')DATA(n, if (menuval.val != 2):DATApn, if mesh.hasFaceUV() == 1:DATAn, file.write('\n"st" [')DATAo, for face in mesh.faces:DATAHo, num = len(face.v)DATA o, if num == 3 or num == 4:DATA$o, for vi in range(len(face.v)):DATAD0p, file.write('%s %s ' % (face.uv[vi][0], 1.0 - face.uv[vi][1]))DATAp, file.write(']')DATAp, else:DATA,q, if (len(mesh.faces[0].uv) != 0):DATApq, file.write('\n"st" [ ')DATAq, vtuv = [] DATA(q, for i in range(len(mesh.verts)): DATAPr, vtuv.append(0) DATAr, for f in mesh.faces: DATA r, for i in range(len(f.uv)): DATA(s, uv = f.uv[i]DATA hs, uv = uv[0], 1.0 - uv[1]DATA s, vtuv[f.v[i].index] = uvDATAt, for c in vtuv:DATAHt, for d in c: DATAt, file.write('%s '%d)DATAt, file.write(']')DATAu, file.write('\n')DATAPu,DATA0u,def polygon(mesh, meshfile, meshobj, meshnum):DATAu, global meshobjects, iDATA(v, i = 0DATA `v, update = 5DATAv, colorif = 0DATAv, perso = 0.0DATAw, pixels = 0.0DATAXw, facenum = len(mesh.faces)DATAw, for face in mesh.faces:DATAw, if mesh.materials:DATA$0x, matname=mesh.materials[0].nameDATAx, try:DATA0x, material = Blender.Material.Get(matname)DATA<y, if (colorif != material.R + material.G + material.B):DATA4y, colorif = material.R + material.G + material.BDATATy, meshfile.write("\t\tColor [%s %s %s]\n" %(material.R, material.G, material.B))DATA `z, except:DATA z, passDATA z, if len(mesh.faces[i].v) == 3:DATA {, vertar = 3DATA`{, else:DATA{, vertar = 4DATA{, if face.smooth:DATA|, smooth = 1DATAX|, else:DATA|, smooth = 0DATA8|, writePoly(mesh,face, meshfile, i, vertar, smooth);DATA 8}, i = i + 1DATA(p}, if ((i == update) or (i == facenum)):DATA}, update = update + 5DATA~, pixels = 619DATA(P~, perso = float(i) / float(facenum)DATA,~, qwerty = float(pixels) * float(perso)DATA$, drawBar(meshnum, qwerty, pixels)DATAP,DATA<,def textureUV(i, mesh, va, vb, vc, meshfile, face, number):DATA, try:DATA , etest = face.uv[0][0]DATA h, except:DATA , returnDATA؀, meshfile.write('"st" [ ')DATA , if (number == 1):DATA`, for x in [0, 1, 2]:DATA(, meshfile.write("%s "%face.uv[x][0])DATA0, 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(p, meshfile.write("%s "%face.uv[x][0])DATA0ȃ, meshfile.write("%s "%(1.0 - face.uv[x][1]))DATA(, meshfile.write(']\n')DATAp,DATA8,def writePoly(mesh, face, meshfile, i, vertar, smooth):DATA$, meshfile.write('Polygon "P" [ ')DATAX, 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:DATA , print iDATA , print xDATA 0, print yDATAh, meshfile.write(']\n')DATA, if (smooth == 1):DATA, meshfile.write('"N" [')DATA8, for x in [0, 1, 2]:DATA, for y in range(3):DATA4Ȉ, meshfile.write('%s '%mesh.faces[i].v[x].no[y])DATA(, meshfile.write(']\n')DATA p, number = 1DATA4, textureUV(i,mesh,0,1,2, meshfile, face, number)DATA, if (vertar == 4):DATA$H, meshfile.write('Polygon "P" [ ')DATA, for x in [0, 2, 3]:DATA, 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" [')DATAX, for x in [0, 2, 3]:DATA, for y in range(3):DATA4, meshfile.write('%s '%mesh.faces[i].v[x].no[y])DATAH, meshfile.write(']\n')DATA, number = 2DATA4Ѝ, textureUV(i,mesh,0,1,2, meshfile, face, number)DATA0,DATA `,def general(meshfile, mesh):DATA , index = 0DATA,, meshfile.write('PointsGeneralPolygons [')DATA@, for face in mesh.faces:DATA, meshfile.write('1 ')DATAЏ, index = index + 1DATA, meshfile.write(']\n[')DATA X, index = 0DATA, for face in mesh.faces:DATA ؐ, meshfile.write(str(nr) + ' ')DATA(, index = index + 1DATAh, meshfile.write(']\n[')DATA , index = 0DATA, for f in mesh.faces:DATA0, for v in f.v:DATA(p, meshfile.write(str(v.index) + ' ')DATAȒ, index = index + 1DATA, meshfile.write(']\n"P" [')DATA P, index = 0DATA$, for x in range(len(mesh.verts)):DATAؓ, for y in range(3):DATA4 , meshfile.write(str(mesh.verts[x].co[y]) + '')DATA, index = index + 1DATA, meshfile.write(']\n')DATA,DATA 8,def bilinear(meshfile, mesh):DATA, f = 0DATA, for face in mesh.faces:DATA,, 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])DATAP, meshfile.write(']\n')DATA, if face.smooth:DATAؗ, meshfile.write('"N" [ ')DATA , for x in [3, 2, 0, 1]:DATAh, for y in range(3):DATA4, meshfile.write('%s '%mesh.faces[f].v[x].no[y])DATA, meshfile.write(']\n')DATA X, f = f + 1DATA,DATA ,def subdivmesh(meshfile, mesh):DATA, if menuval.val != 2:DATAX, if mesh.hasFaceUV() == 1:DATA<, meshfile.write('Declare "st" "facevarying float[2]"\n')DATA8, meshfile.write('SubdivisionMesh "catmull-clark" [')DATAp, for face in mesh.faces:DATA, num = len(face.v)DATA , meshfile.write('%s '%(num))DATAH, meshfile.write(']\n[')DATA, for face in mesh.faces:DATA؜, for vert in face.v:DATA( , meshfile.write('%s ' % vert.index)DATADx, meshfile.write(']\n["interpolateboundary"] [0 0] [] []\n"P" [') DATA, for vert in mesh.verts:DATAH0, meshfile.write("%s %s %s " % (vert.co[0], vert.co[1], vert.co[2]))DATA, meshfile.write(']')DATA, if (menuval.val != 2):DATA8, if mesh.hasFaceUV() == 1:DATA , meshfile.write('\n"st" [')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)):DATAH, meshfile.write('%s %s ' % (face.uv[vi][0], 1.0 - face.uv[vi][1]))DATAx, meshfile.write(']')DATA$, if mesh.hasVertexColours() == 1:DATA(, vertexcol = range(len(mesh.verts))DATA h, meshfile.write('\n"Cs" [')DATA, for face in mesh.faces:DATA, num = len(face.v)DATAH, 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:DATAH, meshfile.write('%s %s %s ' % (vc.r/256.0, vc.g/256.0, vc.b/256.0))DATA, meshfile.write(']')DATAH, meshfile.write('\n')DATA,DATA,def points(meshfile, mesh):DATA , meshfile.write('Points "P" [')DATAX, for vert in mesh.verts:DATAH, meshfile.write("%s %s %s " % (vert.co[0], vert.co[1], vert.co[2]))DATA@, meshfile.write('] "constantwidth" [%s]\n' % (pointwidth.val))DATA,DATA ,def createGI(ribfile, frames):DATA0, if (areagi.val == 1) and (menuval.val !=6):DATA8h, ribfile.write('\tDeclare "casts_shadows" "string"\n')DATAHШ, ribfile.write('\tAttribute "render" "casts_shadows" ["opaque"]\n')DATATH, ribfile.write('\tLightSource "ambientlight" 998 "lightcolor" [0.02 0.02 0.02]\n')DATA(ȩ, 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,, ribfile.write('\t\t\tColor [1 1 1]\n')DATA,X, ribfile.write('\t\t\tOrientation "rh"\n')DATA0, ribfile.write('\t\t\tReverseOrientation\n')DATA0, ribfile.write('\t\t\tSurface "constant"\n')DATALp, ribfile.write('\t\t\tAttribute "light" "nsamples" [%s]\n'%gisteps.val)DATA@, ribfile.write('\t\t\tAttribute "light" "shadows" ["on"]\n')DATAhX, 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(P, ribfile.write('\t\tAttributeEnd\n')DATA$, ribfile.write('\tAttributeEnd\n')DATA(, ribfile.write('\tIlluminate 1 1\n')DATA4P, if (indirectgi.val == 1) and (menuval.val !=6):DATA , 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')DATAP, ribfile.write('\tAttribute "indirect" "integer nsamples" [%s]\n'%gisteps.val)DATA48, ribfile.write('\tLightSource "indirect" 42\n\n')DATA, if (gisphere.val == 1):DATA(, ribfile.write('\tAttributeBegin\n')DATAX8, 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')DATA8x, ribfile.write('\t\tSphere 2000 -2000 2000 360\n')DATA(, ribfile.write('\tAttributeEnd\n')DATA8,DATAh,def render(ribfile):DATA, 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))DATAH, elif (menuval.val == 3):DATA8, 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))DATAH, elif (menuval.val == 6):DATA4, os.system('%s %s'%(pixierenderer.val, ribfile))DATA, elif (os.name == "posix"):DATA8, if (menuval.val == 1):DATA8, os.system('%s %s &'%(prmanrenderer.val, ribfile))DATA, elif (menuval.val == 2):DATA40, os.system('%s %s &'%(bmrtrenderer.val, ribfile))DATA, elif (menuval.val == 3):DATA8ؼ, 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):DATA80, os.system('%s %s &'%(aqsisrenderer.val, ribfile))DATA, elif (menuval.val == 6):DATA8, os.system('%s %s &'%(pixierenderer.val, ribfile))DATAH,DATAx,def closeFile(ribfile):DATA, ribfile.close()DATA,DATA0,def writeFrame(ribfile):DATAx, global sshader, cframeDATA , display = Scene.GetCurrent()DATA,, context = display.getRenderingContext()DATAh, frames2 = 0DATA(, display = Blender.Scene.GetCurrent()DATA, if (anim.val == 1):DATA8H, frames = context.endFrame() - context.startFrame()DATA, else:DATA, frames = 0DATA(, if (anim.val == 1):DATA p, cframe = context.startFrame()DATA, else:DATA$, cframe = Blender.Get('curframe')DATA H, for x in range(frames + 1):DATA$, Blender.Set('curframe', cframe)DATA8, print 'Exporting Frame: %s'%Blender.Get('curframe')DATA$P, renderShadows(ribfile, frames2)DATA,, ribfile.write('\nFrameBegin %s\n'%cframe)DATA(, writeHeader(ribfile, frames, frames2)DATAP, lampobj = 0DATA, if (motionblur.val == 1):DATA(, ribfile.write('MotionBegin [0 1]\n')DATA$0, Blender.Set('curframe', cframe)DATA$, writeTransform(ribfile, lampobj)DATA<, Blender.Set('curframe', cframe + motionblurframe.val)DATA$8, writeTransform(ribfile, lampobj)DATA$, Blender.Set('curframe', cframe)DATA , ribfile.write('MotionEnd\n')DATA(, else:DATA$`, writeTransform(ribfile, lampobj)DATA, if (rgba.val == 1):DATA, channels = "rgb"DATA8, elif (rgba.val == 2):DATA, channels = "rgba"DATA, elif (rgba.val == 3):DATA, channels = "rgbz"DATAX, 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))DATA, if (preworldra.val == 1):DATA<, ribfile.write('ReadArchive "%s"\n'%(preworldrafile.val))DATA$H, ribfile.write('WorldBegin \n')DATA , if (postworldra.val == 1):DATA@, ribfile.write('\tReadArchive "%s"\n'%(postworldrafile.val))DATA0X, if (menuval.val == 1) or (menuval.val == 4):DATAD, ribfile.write('\tAttribute "visibility" "integer trace" [1]\n')DATA(, if (menuval.val == 3):DATA@p, ribfile.write('\tAttribute "visibility" "reflection" [1]\n')DATA<, ribfile.write('\tAttribute "visibility" "shadow" [1]\n')DATA H, #PixieDATA, if (occlusion.val == 1):DATAl, ribfile.write('\tLightSource "ambientocclusion" 1 "numSamples" %s\n'%(int(pow(2,ambiSamples.val+6))))DATA`, if (indirect.val == 1):DATAh, ribfile.write('\tLightSource "ambientindirect" 1 "numSamples" %s\n'%(int(pow(2,ambiSamples.val+6))))DATA@, #End PixieDATA, ambientLight(ribfile)DATA, checkLamps(ribfile)DATA, if (gi.val == 1):DATA P, createGI(ribfile, frames)DATA, if (hdri.val == 1):DATA, if (menuval.val == 3):DATA(0, 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 + 1DATA, frames2 = frames2 + 1DATA,DATA4 ,def export(): # start the export stuff from hereDATAX, global selectedtype, selectedname, xbar, texturefile, shadernametemp, partitionnameDATA8, newdirs() # make sure all the directories are thereDATA$p, xbar = 10 # reset the progressbarDATA8, selectedtype = 'Type:' # reset the object editor stuffDATA(, selectedname = ''DATA4h, filedir = os.path.normpath(pdir + filename.val)DATAD, ribfile = open(filedir, 'w') # open the main ribfile (default.rib)DATA48, if ((menuval.val == 4) & (os.name != "posix")):DATA, ribfile.write('ReadArchive "%s%s"\n'% os.path.splitdrive( os.path.normcase( os.path.normpath(partitionname + pdir + "/texturefile.rib") ) ) )DATAX, else:DATAD, ribfile.write('ReadArchive "%s"\n'% (pdir + "/texturefile.rib"))DATAd, texturefile = open(os.path.normpath(pdir + 'texturefile.rib'), 'w') # open the texture rib fileDATA, if (menuval.val == 5):DATA, texturefile.write('#\n')DATA, , writeFrame(ribfile) # write all the framesDATA0x, closeFile(ribfile) # close the main ribfileDATA, texturefile.close()DATA8 , selectedtype = 'Type:' # reset the object editor stuffDATA, selectedname = ''DATA(, surfaceshadername.val = shadernametempDATAH , Register (gui, event, bevent) # make sure all gui values are in placeDATA4, if (rendert.val == 1): # if the renderbutton is onDATA4, render(pdir + filename.val) # render the rib fileOB,G,OBCubep,?????????????DOBd?? #=?>=?@???,,:,&,DATA,,I=L> ף ף;p,AAAOB,Gx,,OBCube.001,D`Y@Q>?????Q>i!3?i!3D`Y@?????DOBd?? #=?>=?@???,, nZ"DATA,,I=L> ף ף;? X@ЊA@@OBx,G,OBCube.002,???????i!3?i!3?????DOBd?? #=?>=?@???,,n( nDATA,,I=L> ף ף;}4 |4 4 ~4A|4A~4AMEp,.,MECube8',,X,(, 5AAADATAX,3AAIIAIAIAAAIIIAAIIAIAAIIDATA(,0 ############DATAx,/ME,.,p,MECube.001Y",x,H, 56A?;4?DATAx,36A?;4II6A54I6546?;4I6A?54?III6A;4?II6;4?I6?54?IIDATAH,0 ############DATAx,/ME,.,MECube.002-,,,5jAjAjADATA@,3\@^@^豲@N\@^^II^[^IIIWd@^N@Nd@U@^@豲@Q@i^@IbY^@II[^@^@N@jjAjzjjAjAzpjAjAjpzjAjAjApzpjjjjjjAIjAjjIjAjjAIIDATAP,0############# # # # # # # # # # # # ## # #DATA,/             GLOBr@P NeDNA18dXoSDNANAME*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