BLENDER_v249REND SceneGLOB  0ذxƲ SRxDZذSR1-AnimationtPѰxƲ DATAtDATA?t DATA? DATA?DATApDATApDATApHpDATApH0DATA0xpHDATAx0DATAxDATA@DATA@DATA@DATA ?DATA tDATA pDATAX?DATAXpDATAcXpHDATAcc0DATAc@dcpH0DATA@ddcDATAd@dtxDATA8dDATA8DATAȥ8xDATAȥpHDATAXȥ@pDATAX@0DATA覰X@DATA覰0xDATA0x覰DATAx0DATAxDATAPxpDATAP@DATAغtxOзะDATALink and MaterialsEditing>DATAȫMeshEditingF>DATAȫରAnim settingsObject>DATAରȫDrawObjectF>DATAରConstraintsObject>DATA(EffectsObjectDATA(@HooksObjectF>ରDATA@X(Particle InteractionObject>DATAXp@SoftbodyObject>DATApXOutputRender>DATApRenderRenderF>DATAAnimRender>DATAFormatRender>DATAзะ333?@DhCDhCC(BDC?z?DATAะз333?/9DATAغػp? !  DATAػغ@0pHG==o? ؼDATAؼTransform PropertiesView3d>DATAؼ3D Viewport propertiesView3d>"DATA 333?????????G==o? A*A?G==o??????*Aٲ B??=C ݢM@ݢM@ݢM@? DATA 333?/9DATAʰػpH0??PףHðȰ°°DATA°Transform PropertiesIpo!>DATAXðİ333? zC̽̌?zC@ #< #<`jFzD ( OBzC̽̌?DATAİŰð333? CC|||??l|DATAŰİ 333? zCCHBC|||?CFC= ADATAưŰ 333? Բ =rttDATAưǰ 333? ?zDzDBCl||ll|zDzD=HB DATAǰư 333? BzB@l|llFzD #<HB DATAȰǰ333? ??? ???? A???PA A!O?j?}GCHB? Aٲ B? #<C DATAȰ333? /9DATAʰѰ ϰ˰̰DATA˰̰Link and MaterialsEditing>DATA̰˰MeshEditingF>DATAͰ333?J zCB{ µCB ?BFB= ADATAͰΰ 333?J zCCHBC$?CFC= ADATAΰϰͰ333?J #DhC`DpJgChCC(BDC?z?DATAϰΰ333?J /9DATAѰʰxp@} ?=o?.԰ְҰӰDATAҰӰTransform PropertiesView3d>DATAӰҰ3D Viewport propertiesView3d>"DATA԰333? KPDATA@X(LampLampF>PDATAXp@SpotLamp>DATApXTexture and InputLamp>PDATApMap ToLamp>PpDATAPreviewMaterial>hDATAЗMaterialMaterialF>hDATAЗ蘱PreviewWorld>fDATA蘱ЗWorldWorldF>fDATA蘱Mist Stars PhysicsWorld>DATA0Texture and InputWorld>fDATA0HMap ToWorld>fDATAH`0OutputRender>iDATA`ϱHRenderRenderF>iDATAϱѱ`AnimRender>iDATAѱұϱFormatRender>iDATAұ0ӱѱLink and MaterialsEditing>"DATA0ӱHԱұMeshEditingF>"DATAHԱ`ձ0ӱMesh ToolsEditing>DATA`ձxֱHԱMesh Tools 1Editing>DATAxֱױ`ձCameraEditingF>DATAױرxֱShadersMaterial>hDATAرٱױTextureMaterial>hDATAٱڱرAnim settingsObject>DATAڱ۱ٱDrawObjectF>DATA۱ݱڱConstraintsObject>DATAݱ ޱ۱ScriptlinksScript>DATA ޱ8߱ݱEffectsObject۱DATA8߱P ޱMap InputMaterial>cرDATAPh8߱Map ToMaterial>cرDATAhPAnimAnim>DATAhSoundSound>DATAListenerSoundF>DATASequencerSound>DATAArmatureEditingF>DATARampsMaterialF>hDATAMirror TranspMaterial>hDATA(Mist / Stars / PhysicsWorld>f(DATA(@Amb OccWorld>fDATA@X(Shadow and SpotLamp>PDATAXp@ModifiersEditing>"DATApXShapesEditing>"XDATApMultiresEditing>"DATAHjMesh Tools MoreEditing>DATAHjUV CalculationEditing>DATAHjLinks and PipelineMaterial>hDATALSSSMaterial>hDATALuRender LayersRender>iHDATAuLBakeRender>iϱDATAuStampRender>iѱDATA333?`ްQDhC}DԉhCC(BDC?z?xƲmDATA333?`ް??? ???? A??@PA Aj?c3>}GCHB? Aٲ B? #<C DATA8333?`ްHE}CHE}C HE}C??DATA8333?`ްSave JPEGC:\Documents and Settings\NCCM-2\Desktop\tuts\blend L^DATA00`ް۰ٰٰH۰UnUonn@'@'DATA000H۰ڰ=w=o?ESEES \`w!h%H0HDATA0HTransform PropertiesView3d,>DATAH0View PropertiesView3dT>"DATA$!333?0GDATA`! 333?02 8c@XXDXDATA`333?0????????=w=o?%A{IAy?=w=o??????{IAٲ B??)==C7?X< G@ G@ G@? DATAX8`333?0zC̽̌?zC@22 #< #<`jFzD ( OBzC̽̌?DATA8333?0HEVDHEVD2 XHEVD??2DATA8 333?0?zDzB@22FzD #<HB DATA333?0DdC8CnD fCC(BDC?z?DATA333?0viOpen Text FileICTURESC:\Documents and Settings\NCCM-2\Desktop\nts\tents/Resources/yafaray_ui.py I_LDATA`0P;90~??AHMCSCCS `#0l0lDATATransform PropertiesView3d,>DATAView PropertiesView3dT>"DATA` 333?սүp?=~?ؐ M=`6r?>5?0;o?ս?~?6ؐ r?֯p?M=>@f9޾#@?t+#-+qүp ?:ʽMʽ\'7tY?C^?;e@o@? 675ɗ4D]?0%V8 @L֟rBYGA(@~??AHMսүp?=~?ؐ M=`6r?>5?0;o?{ ?ƾܾ HB?ٲ B?? E;=Cn}g&&@u U%A+|iz@<&{;;@&{;@L5?F8u? ?DATAX` n333?zC̽̌?zC@22 #< #<`jFzD ( OBzC̽̌?DATAn` 333?HEVDHEVD2 XHEVD??2DATAn 333??zDzB@22FzD #<HB DATA333?DdC8CnD fCC(BDC?z?DATA333?Save AseNT PICTURESC:\Documents and Settings\NCCM-2\Desktop\tuts\tents/Resources/light_yafaray.blended.blend0ADATA`pڰ۰9P;qٰ==o?SS `#@F|($DATA$Transform PropertiesView3d,>DATA$View PropertiesView3dT>"DATA@F|0333?`"־Ͼ\O?7h?*O>oKf?>@d8d??־7h?oϾIf?YO?)O>>>M@?'GuTk=Yl$κ`U;=2>!?UZ(AX߾`Pȿ5A0JNˆ>M@?qٰ==o?"־Ͼ\O?7h?*O>oKf?>@d8d??ج>pHt5I9A?ٲ B??V ==C@M U%A+|iz@<5t$t$@5t$@L5?F8u? O-?!DATAX0h@F|333?`zC̽̌?zC@22 #< #<`jFzD ( OBzC̽̌?DATAh(:0333?`HEVDHEVD2 XHEVD??2x0DATA,x`߰BOq= ( DATA,`߰߰xEM@|A )DATA,߰p`߰AM1~Ab>A(ݲDATA,p߰BO`A#DATA,0pBOp=AٲDATA,0CS@ffxƲDATA(: h 333?`?zDzB@22FzD #<HB DATA ((:333?`DdC8CnD fCC(BDC?z?DATA( 333?`Save AseNT PICTURESC:\Documents and Settings\NCCM-2\Desktop\tuts\tents/Resources/light_yafaray.blended.blend0ASRxP/ذSR3-Materialodel Sing؟  PXxƲ DATA؟0DATA0x؟ DATAx0 DATAxDATAP<DATAP<DATAPDATA( DATA( p ,<DATAp  ( ,DATA  p DATA H  ,DATAH   DATA H DATA  0xDATA h  ؟DATAh   ؟DATA  h PDATA @  PDATA@   0DATA  @ xDATA   DATA `  PDATA`   ( DATA  ` P( DATA 8 p DATA8 ( p DATA8 DATA DATAXp  DATAX(  DATAX  DATA0 H DATA0x H DATAx0 DATAxp  DATAH  DATAP ؟P?@Pף;;!@(PDATAPhOutputRender>DATAhPRenderRenderF>DATAhAnimRender>DATAFormatRender>DATA@333? ~CA~CA!?AFA= ADATA@ 333? zCCHBC ?CFC= ADATA333? DhC?DhCC(BDC?z?mDATA333? ??? ???? A??@PA Aj?c3>}GCHB? Aٲ B? #<C DATA(333? @̌AR|B1@lA A@CC #<@DATA(333? /9DATA  P0x !  DATA F ( p PG@? JL-=-=W-X~@.E !(-DATA !8"OutputRender>DATA8"P# !RenderRender>DATAP#h$8"AnimRender0>DATAh$%P#FormatRenderH>DATA%&h$PreviewMaterial>DATA&'%MaterialMaterial>DATA'(&ShadersMaterial0>DATA()'TextureMaterialD>DATA)*(Map InputMaterial\>DATA*,)Map ToMaterial`>DATA,(-*RampsMaterial>&DATA(-,Mirror TranspMaterialH>DATA@.(@333?*ChCCvgCC(BDC?z?DATA(@xC@.333?*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'>d DATAXxCE(@333?*zC AzC A #< #<`jFzD OBDATAExC333?*;SAVE FILE/usr/home/intrr/blender/blend/untitled.blendDATAFO   ( U.=w=o?+=+=W+X,XGMDATAGHK333????h?j(4?t'>????hj(4t'?U.=w=o??OAٲ B??=Ch?j(4?t'>dEh@Eh@Eh@? DATAHKXLG333?DdC>9C,DeCC(BDC?z?DATAXXLMHK333?zC AzC A #< #<`jFzD OBDATAMXL333? SAVE FILE/Users/ton/Desktop/der/blend/untitled.blendDATAOXFH  p  e?B$?AHM+++USPVDATAP(T333?ݕ/?U~'?3F:?>T8165e?2>Z& 4?ߕ/?7F:?81W~>85e?'?T2>ne@>M@?4z?'''䷄?K??T?v|@?l211A 4Atp>?@@FC>G ?4xB֟&BĭeA(@e?B$?AHMݕ/?U~'?3F:?>T8165e?2>Z& 4?H?N,Z#OAٲ B??=Ch?j(4?t'>dA@A@A@? DATA(T8UP333?DdC>9C,DeCC(BDC?z?DATAX8UV(T333?zC AzC A #< #<`jFzD OBDATAV8U333? SAVE FILE/Users/ton/Desktop/der/blend/untitled.blendDATAXO  H &=+=o?USY_DATAY]333?*?3?3:-vk(4??3?3;@k(40v@?&=PU1n;+=ꉖø;ZO{:?JXA54U0AC;@j(40v@?&=+=o??3?3:-vk(4?5?5IXAٲ B??=C:j(4?.vdٚ@ٚ@ٚ@? DATA]^Y333?*DdC>9C,DeCC(BDC?z?DATAX^_]333?*zC AzC A #< #<`jFzD OBDATA_^333?* SAVE FILE/Users/ton/Desktop/der/blend/untitled.blendSRxP/hSR4-Sequencea@ee(kpk(xƲ DATAaaDATAa(ba DATA(bpba DATApbb(bDATAbcpbDATAcHcbDATAHcccDATAccHcDATAc dcDATA dhdcDATAhdd dTDATAddhdTDATAd@edDATA@edDATAeea(bDATAefeapbDATAf`feabDATA`fffpbcDATAff`fbcDATAf8gfaHcDATA8ggf(bcDATAgg8gHccDATAghgHccDATAhXhgc dDATAXhhhc dDATAhhXhchdDATAh0ih dhdDATA0ixihHcdDATAxii0icdDATAijxihddDATAjPjibdDATAPjjjcdDATAjjPj d@eDATAj(kjc@eDATA(kjd@eDATApksabcpbpqploDATAplmOutputRender>DATAmnplRenderRenderF>DATAnomAnimRender>DATAonFormatRender>DATApq333?ʃDhCvDhCC(BDC?z?DATAqp333?ʃ/9DATAstpkHca(bc !  DATAt|sbd@ec8=i>o?  zDATAu333?ʄ~CB~CB ?BFB= ADATAuv333?ʄzCAzCA  A@FB= A ?DATAv zu333?ʄ????????8=i>o?fffAD&@??fffAٲ B? #<C DATA zv333?ʄAVE TARGA/t1.blend9DATA|Xthddc d8=H>o?UUU }`DATA}~333?JzCAzCA1||1 A@FB= A ?DATA~`}333?J????????8=H>o?fffA*@??fffAٲ B? #<C DATA`~333?JAVE TARGA/t1.blend9DATAX(|cHcdhd8=>o?SSSTX0DATAXX333?ʅB̽̌?B̽̌? #< #<`jFzD SQB̽̌?DATA0X333?ʅ????????8=>o?fffA@??fffAٲ B? #<C DATA0333?ʅOAD FILE/9DATA(Xdc d@e8=i>o? (pDATA( 333?*zCAzCA A@FB= A ?DATA p(333?*????????8=i>o?fffAD&@??fffAٲ B? #<C DATAp 333?*AVE TARGA/t1.blend9SRxhP/SR5-ScriptingЙ xƲ DATAXDATAX DATA蓲X DATA蓲0DATA0x蓲DATAx0DATAxDATAPDATAPDATAPDATA(XDATA(pXxDATAp(DATApxDATAH0DATAHxPDATAؗHPDATAؗ PDATA hؗ0xDATAh 0DATAhDATA@蓲DATA@DATAЙ@PDATAЙ蓲DATAxX !  DATA0xPz==o?H0DATA0Transform PropertiesView3d>DATA03D Viewport propertiesView3d>"DATAH333? ˅????????z==o?&A*A?z==o??????*Aٲ B??=C ?@?@?@? DATAH333? ˅/9DATA P蓲??Pף Lh(DATATransform PropertiesIpo!>DATAh 333? Բ> =DATAলh333? CCx??|?DATAXলh333? zC̽̌?zC@;; #< #<`jFzD ( OBzC̽̌?DATAh ল333? CC|||??l|DATA,BO`A#DATA,`BOp=AٲDATA,`BOq= ( DATA,`EMA )DATA h 333? zCCHBC|||?CFC= ADATA謲  333? ?zDzDBCl||ll|zDzD=HB DATA謲ح 333? BzB@l|llFzD #<HB DATAح(謲333? ??? ???? A???PA A!O?j?}GCHB? Aٲ B? #<C DATA(ح333? /9DATA 0OpòIJ X²DATA 8Link and MaterialsEditing>DATA8P MeshEditingF>DATAPh8Anim settingsObject>DATAhPDrawObjectF>DATAhConstraintsObject>DATAEffectsObjectDATAȻHooksObjectF>hDATAȻ༲Particle InteractionObject>DATA༲ȻSoftbodyObject>DATA༲OutputRender>DATA(RenderRenderF>DATA(@AnimRender>DATA@X²(FormatRender>DATAX²@ScriptlinksScript>DATApòIJ333? ChC#DhCC(BDC?z?DATAIJpò333? /9SC|xƲSCScenetageain*ٲıjA??_??D βDATAL*^^DATAL^YafRayH_H_DATALH_Renderer_7DATAL_H`Set 18dȎ2DATAL8dsetnamedDATAdSet 1DATAL8dlightTypemDATAmDirect lightingOCK!DATAL0caustic_typeDATANoneDATAL0ncausticsDATALnd0caustic_depth DATALdpencaustic_radius?DATALpe(fddo_AODATAL(ffpeAO_samples DATALf(g(fAO_distance?DATAL(ggfAO_colorDATA???DATALg(h(gpath_samples DATAL(hhgno_recursiveDATALh(i(hbouncesDATAL(iihuse_backgroundDATALipj(iraydepthDATALpjjishadowDepthDATALjpkpjthreadsDATALpkkjclayRenderDATALkplpkdrawParamsDATALpllkxmlDATALlpmplautoSaveDATALpmmlimageToBlenderDATALmpnpmgamma?DATALpnnmgammaInput?DATALnpopncustomStringDATADATALpoontranspShadDATALopppoclamp_rgbDATALpppoAA_minsamplesDATALpqppAA_inc_samplesDATALq(rpAA_passesDATAL(rrqAA_threshold?DATALr(s(rAA_pixelwidth?DATAL(ssrfilter_typeDATAboxOCK!DATALs(t(sphotons DATAL(ttsdiffuseRadius?DATALt(u(tsearchdDATAL(uutcaustic_mixDATALu`v(ufinalGatherDATAL`vvufg_bouncesDATALv`w`vfg_samplesDATAL`wvshow_mapDATAL`wvolType2DATA2NoneDATALstepSize?DATALadaptiveDATALoptimizeDATALHattgridScaleDATALHȍsigma_t?DATALȍHHalpha?DATALHȎȍdebugTypeeDATAeNDATALȎHshow_perturbed_normalsDATALH``_Set 22DATAL8setnameDATASet 2DATAL8lightTypexDATAxDirect lightingOCK!DATALp8caustic_type8DATA8NoneDATALpcausticsDATALppcaustic_depth DATALpcaustic_radius?DATALppdo_AODATALpAO_samples DATALppAO_distance?DATALp8AO_colorDATA???DATAL8ppath_samples DATAL88no_recursiveDATAL8bouncesDATAL88use_backgroundDATAL8raydepthDATAL88shadowDepthDATAL8threadsDATAL88clayRenderDATAL8drawParamsDATAL88xmlDATAL8autoSaveDATAL88imageToBlenderDATAL8gamma?DATAL88gammaInput?DATAL8customStringDATADATALp8transpShadDATALpclamp_rgbDATALppAA_minsamplesDATALpAA_inc_samplesDATALppAA_passesDATALpAA_threshold?DATALppAA_pixelwidth?DATALp(filter_typeDATAboxOCK!DATAL(pphotons DATAL((diffuseRadius?DATAL(searchdDATAL((caustic_mixdDATAL(finalGatherDATAL((fg_bouncesDATAL(fg_samplesDATAL((show_mapDATAL(volTypeDATANoneDATAL`(stepSize?DATAL`adaptiveDATAL``optimizeDATAL`attgridScaleDATAL``sigma_t?DATAL`alpha?DATAL`debugType`DATA`NDATALshow_perturbed_normalsDATAL`HaH`Set 302DATALЬsetnameDATASet 3DATALЬPlightTypeptDATAptDirect lightingOCK!DATALPЬcaustic_typeЭDATAЭNoneDATALPcausticsDATALcaustic_depth DATALcaustic_radius?DATALdo_AODATALAO_samples DATALAO_distance?DATALбAO_colorDATA???DATALбPpath_samples DATALPвбno_recursiveDATALвPPbouncesDATALPгвuse_backgroundDATALгPPraydepthDATALPдгshadowDepthDATALдPPthreadsDATALPедclayRenderDATALеPPdrawParamsDATALPжеxmlDATALжPPautoSaveDATALPзжimageToBlenderDATALзPPgamma?DATALPизgammaInput?DATALиPcustomStringPDATAPDATALиtranspShadDATALclamp_rgbDATALAA_minsamplesDATALAA_inc_samplesDATALAA_passesDATALAA_threshold?DATALAA_pixelwidth?DATALfilter_typeDATAboxOCK!DATAL@photons DATAL@diffuseRadius?DATAL@@searchdDATAL@caustic_mixdDATAL@@finalGatherDATAL@fg_bouncesDATAL@@fg_samplesDATAL@show_mapDATALx@volType@DATA@NoneDATALxstepSize?DATALxxadaptiveDATALxoptimizeDATALxxattgridScaleDATALxsigma_t?DATALxxalpha?DATALx0debugTypeDATANDATAL0xshow_perturbed_normalsDATALHaa`Set 42DATALhsetname0DATA0Set 4DATALh(lightTypeDATADirect lightingOCK!DATAL(hcaustic_typeDATANoneDATAL`(causticsDATAL`caustic_depth DATAL``caustic_radius?DATAL`do_AODATAL``AO_samples DATAL`AO_distance?DATAL`AO_color`DATA`???DATAL(path_samples DATAL(no_recursiveDATAL((bouncesDATAL(use_backgroundDATAL((raydepthDATAL(shadowDepthDATAL((threadsDATAL(clayRenderDATAL((drawParamsDATAL(xmlDATAL((autoSaveDATAL(imageToBlenderDATAL((gamma?DATAL(gammaInput?DATAL`(customString(DATA(DATAL`transpShadDATAL``clamp_rgbDATAL`AA_minsamplesDATAL``AA_inc_samplesDATAL`AA_passesDATAL``AA_threshold?DATAL`AA_pixelwidth?DATAL`filter_type`DATA`boxOCK!DATALphotons DATALdiffuseRadius?DATALsearchdDATALcaustic_mixdDATALfinalGatherDATALfg_bouncesDATALfg_samplesDATALshow_mapDATALPvolTypeDATANoneDATALPstepSize?DATALPPadaptiveDATALPoptimizeDATALPPattgridScaleDATALPsigma_t?DATALPPalpha?DATALPdebugTypeDATANDATALPshow_perturbed_normalsDATALaHHaSet 52DATAL@setnameDATASet 5DATAL@lightTypeDATADirect lightingOCK!DATAL@caustic_typeDATANoneDATAL8causticsDATAL8caustic_depth DATAL88caustic_radius?DATAL8do_AODATAL88AO_samples DATAL8AO_distance?DATAL8AO_color8DATA8???DATALpath_samples DATALno_recursiveDATALbouncesDATALuse_backgroundDATALraydepthDATALshadowDepthDATALthreadsDATALclayRenderDATALdrawParamsDATALxmlDATALautoSaveDATALimageToBlenderDATALgamma?DATALgammaInput?DATAL8customStringDATADATAL8transpShadDATAL88clamp_rgbDATAL8AA_minsamplesDATAL88AA_inc_samplesDATAL8AA_passesDATAL88AA_threshold?DATAL8AA_pixelwidth?DATALp8filter_type8DATA8boxOCK!DATALpphotons DATALppdiffuseRadius?DATALpsearchdDATALppcaustic_mixdDATALpfinalGatherDATALppfg_bouncesDATALpfg_samplesDATALppshow_mapDATALp(volTypeDATANoneDATAL(pstepSize?DATAL((adaptiveDATAL(optimizeDATAL((attgridScaleDATAL(sigma_t?DATAL((alpha?DATAL(debugTypeDATANDATAL(show_perturbed_normalsDATALHȏasetnamepqDATApqSet 1DATALȏHHlightTypeXDATAXDirect lightingOCK!DATALHȏcaustic_typeuDATAuNoneDATAL`HcausticsDATAL`caustic_depth DATAL`caustic_radius?DATALdo_AODATALAO_samples DATALAO_distance?DATALAO_colorp~DATAp~???DATALpath_samples DATALno_recursiveDATALbouncesDATALXuse_backgroundDATALXraydepthDATALXXshadowDepthDATALXthreadsDATALXXclayRenderDATALXdrawParamsDATALXXxmlDATALXautoSaveDATALXXimageToBlenderDATALXgamma?DATALXXgammaInput?DATALXcustomStringDATADATALXXtranspShadDATALXclamp_rgbDATALX XAA_minsamplesDATALX  AA_inc_samplesDATAL  X AA_passesDATAL   AA_threshold?DATAL   AA_pixelwidth?DATAL   filter_typeȐDATAȐboxOCK!DATAL   photons DATAL   diffuseRadius?DATAL   searchdDATAL H caustic_mixDATALH finalGatherDATALHHfg_bouncesDATALHfg_samplesDATALHHshow_mapDATALHvolTypeDATANoneDATALHHstepSize?DATALHadaptiveDATALHHoptimizeDATALHattgridScaleDATALHsigma_t?DATALalpha?DATALdebugTypeXDATAXNDATALshow_perturbed_normalsDATA{. DATA{, nDATA,{(̲|@*DATA(̲{̲,.( DATA̲{x(̲.ٲDATAx{Q̲.RDATAQ{jx.DX8DATAj{Q. 1DATA(Ͳz,d'=A@DATApͲL?B ?o: ??P22 2d 22 22 22 22 22 > #<===ff??AHz?=???CDATAβ'????C?N #,=P +=ϲ??????DATAHϲ%?=Vy?>`fff?Ou<?DATAH8в1 RenderLayerIM`i IMRender ResultR??IM `iIMyafPrevyafPrevNN؉@@??CAвCACameraamera.001L>DB=B B@?LA7(P`LALamp.001;?????A4B>??? B4B?@@???o:??????@?????DATA'????C?55?55?-c??????DATA-%??LAP(p7LALamp.002<i?H?>?L6>A4B>??P? B4B?@@???o:??????@?????DATAP'????C?55?55? (o??????DATA %??DATA LAp(PLALamp.003=>?b??&>A4B>??>w? B4B?@@???o:??????@?????DATA>w'????C?55?55? 0Ku??????DATA 0%??DATA LA(pLASpot6 ?????AB>??hѲ.?A4B?@@@ ???o:??????@?????DATAhѲ'????C?55?55?Ҳ??????DATAҲ%??WOlıyҲWOWorld.001?b??A <@pA@cBj>L=>DATALbHcHcDATALHcYafRayw"DATALw`xbg_type؊ DATA؊Single ColorDATAL`xxwiblDATALx`y`xibl_samplesDATAL`yyxrotationDATALy`z`ypower?DATAL`zzycolorȃDATAȃDATALz`{`zhorizon_colorDATA???DATAL`{{zhorizon_ground_color DATA ?@33??DATAL{`|`{zenith_coloriDATAip=???DATAL`|(}{zenith_ground_color|DATA| ?ף??DATAL(}}`|turbidity@DATAL}~(}a_var?DATAL~}b_var?DATALH~c_var?DATALHȀd_var?DATALȀHHe_var?DATALHȁȀfrom}DATA}???DATALȁHHadd_sunDATALHȂȁsun_power?DATALȂHHbackground_lightDATALHȂlight_samplesDATALHdsturbidity@DATALdsaltitudeDATALdsa?DATALdsb?DATALdsc?DATALdsd?DATALdse?DATALdsadd_sunDATALdsnightDATALdssun_power?DATALdsbright?DATALdsbackground_lightDATALdslight_samplesDATA TXxԲTXText0ղ0ղ0ղ0ղxղDATA0ղ(iEERFDATA(iTXxԲTXyafaray_ui.py,8! ÔADATA8C:\Documents and Settings\NCCM-2\Desktop\yafaray_ui.pyEDATAh0 DATAhDATAhXFREEDATAXh` FREEDATAXcDATAHXDATAH 04gpDATA H FREEDATA FREEDATA+FREEDATA` FREEDATA` 8 ipDATA8P` (FREEDATAP8FREEDATAPH9FREEDATAx FREEDATAx  FREEDATA8xFREEDATA8HHnFREEDATAH8GocDATA HFREEDATA (%X.FREEDATA(%% `3ocDATA%&(%O%docDATA&(% DATA(p)&3FREEDATAp),(舷FREEDATA,5p)$FREEDATA5:,8ubDATA:X;5XFREEDATAX;;:FREEDATA;<X;XFREEDATA<x<;FREEDATAx<8=<<FREEDATA8==x<=FREEDATA=>8=X>FREEDATA>?=XFREEDATA?x?>0@FREEDATAx?PF?FREEDATAPFFx?dDATAFPFNFREEDATAF0 DATAx(DATAx *ֻDATA xhDATA0 DATA0(!ֻDATA(0+DATA(pлDATA@(DATA@4.jpDATA@DATAXG DATAAлDATA(2.psDATA(p'DATA(X DATADATA@ 5DATA@- DATA@0DATADATAHDATAH0  DATAH DATAK8DATAK@LK22-SDATA@LLKLspeaDATALPM@LMDATAPMMLM#LDATAMNPM8N9 20DATANOMNFREEDATAOONHO%DATAOPOODATAP8QOPXDATA8QQPQ]DATAQXR8QR%_DATAXRRQRcDATARhSXR SDATAhSSRS-DATASxThS0TqDATAxTUSTDATAUUxTPUDATAU(VUU\DATA(VVUpVDATAV@W(VVгDATA@WWVW9 14DATAWhX@WXDATAhXW--- DATAhhXpDATAh uDATAhXPDATA@60 dDATA@P DATAh  DATAhDATAh 18-ODATAx@DATAx'гDATA`xH24-JDATA`DATA`@79 05DATAh@HDATAhubDATAh 19-NDATAx@DATAx )гDATA xhri.pDATAH гDATAH9 16DATApH-.psdDATApDATApP 3 1DATA DATA( 9 13DATA(pгDATA(8M--- DATA0<DATA82 DATA8 k003DATA 8` лDATA h! DATAh DATA@h DATA@DATAx@*DATAxDATAx@DATA86WDATA8mDATAH8DATAH%DATAH0%DATA$ 7 DATAP& DATA`DATA'xDATA(%DATA`' b.psDATA' лDATAX DATA(FREEDATAX DATAX#DATAxX@DATAxYh( DATAYZx11-JDATAZZY`ZExDATAZp[Z [01 tDATAp[[Z[DATA[\p[8\DDATA\][\гDATA]H]\)DATAH]]]]%bDATA]0^H]* DATA0^^]x^DATA^^0^*xDATA^x_^@_68 tDATAx_`^_FREEDATA``x_X`гDATA`8a`` uDATA8aa`aled DATAaPb8abpaDATAPbbab(DATAbcPb@cled-DATAcdbcxDATAddcPdGгDATAd`edeDATA`eed@+ гDATAeXf`ee71.tiDATAXffefDATAfhgXf0g02-DDATAhghfg$8 17DATAhhhgPh@FREEDATAhXihi02-DDATAXihi52 UDATA@Xii13-JDATA@МYDATAМP@ uDATAPНМ DATAНpP&FREEDATAp0НFгDATA0ȟpxȾDATAȟp0+ uDATApȟDATApPv uDATA@@95 1DATA89 08DATA8أ$jpgDATAأ 8+ --- DATA hأ+DATAh "70 1DATAhPDATAX:27-FDATAX!DATAX@9 21DATA(اDATA(pDATAP(09-SDATAPFREEDATA`P(гDATA`0T--- DATA0Ы`x&гDATAЫP095 aDATAPЫDATAP0-DATAح0000DATAX-gDATAX DATA0XH,DATA0xDATA00YDATA0xгDATAH0DATAH9 19DATAHH64 GDATAH-DATA8H-DATA8FREEDATAh8hDATAh)30-DDATAhX DATA0 uDATA0x$9 08DATAp0# DATAp uDATApH48 hDATA  33.jDATA hгDATAP $31-JDATAP4FREEDATAPH4--- DATA0 DATA0x)DATAp0  DATAp,KDATAp`9 16DATA0DATA0xDATAP0#KDATAP9 19DATAP(4ernsDATAX- --- DATAX Y DATAX+DATAXHF 2DATACDATA0J6DATA 1DATA0.DATA0x19-MDATA@0 DATA@?DATA@@;9 08DATA0гDATA0x--- DATAP0 DATAPDATAP(*гDATA@м861 bDATA@ؽ--- DATAؽX@ 61 bDATAXؽ`. DATA@X 19-MDATA@ DATA@(%--- DATA(*0039DATA(p&DATAH(61 bDATAH DATAhH0DATAh uDATAxh@61 bDATAx. DATAPx19-MDATAP"0050DATAP8RгDATAp5YDATAp DATAp8splaDATAYDATAH$гDATA@" DATA@гDATA@/--- DATAP DATADATA` uDATAP)43 bDATAP8гDATAPP"FREEDATAP+DATAP'11 cDATAP8(DATA@- 2DATA@4DATA@8384 cDATAH, uDATAH,KDATAH8$ DATA8.0DATA8-9 16DATA8((`DATA('9 22DATA(p,DATA(3 uDATA01 DATA0x.9 17DATA 0@ .GDATA P! 7HDATAP!! !.#JDATA!"P!@"(iKDATA"H#!"*LDATAH##"#1MDATA#$H#@$$cODATA$@%#$)PDATA@%%$%.RDATA%&@%0&. TDATA&@'%&3UDATA@''&'0VDATA'(@'8(.XDATA()'(UYDATA))(`)$ZDATA)P*)*[DATAP**)*]DATA*x+P*++^DATAx+,*+'_DATA,,x+`,`DATA,(-,,/bDATA(--,p-/ucDATA-.(-- dDATA..-`.#|eDATA.H/./ gDATAH//./ hDATA/0H//eiDATA00/X0SjDATA0x10(1lDATAx1@201ImDATA@22x12oDATA23@23QTqDATA3(423jsDATA(443p4uDATA4P5(44+&wDATAP5545!xDATA56P586%zDATA6756d{DATA776X7|DATA7@877$}DATA@8878"DATA8`9@8(9LDATA`9:89+cDATA::`9P:RVDATA:;: ;FFDATA;P<:;9ՇDATAP<=;<;DATA==P<P=9DATA=>=>BDATA>@?=>F{DATA@??>?;iDATA?@@?@@;<DATA@XA?@+ѓDATAXAB@A:PDATABBXAXB>ۖDATABxCBC5DATAxC0DBC8lDATA0DDxCxD)RDATADE0D EF DATAEPFDE:DATAPFFEF- DATAFGPF@G-PDATAGhHFGHDATAhH(IGH@DATA(IIhHpI:4DATAIJ(I(J=DATAJJI;(DATAJؼJ`@ondoDATAؼJ @?DATAPؼ8DATAPADATAPX-DATA8DATA8DATAx8.7DATAxDATAxX)DATA8DATA8DATAP8?DATAPDATAxP(?DATAxDATAxX*DATA8DATA84DATAh80DATAh7DATAh`DATADATA`DATAh/ DATA@DATAHGDATAH0 DATAHDATAXDATADATAX"DATAP$DATAP4DATAHP1 DATAHDATAH&DATAXDATA AbDATA >DATADATAX?DATAHDATAH>DATAHH@DATA@DATA@'DATA@(9DATAXGDATAXDATApX DATAp`tDATA`pDATA`(0DATADATAXزaDATAXDDATAX`DATAH7DATAHDATApH-DATAp0GDATA0xpPr_DATAx0DATAx@.DATA8DATA8%DATA8 8DATAhZDATAhDATAh0DATA(,DATA(p>DATA((`DATA@DATA@DATA@ LDATAfDATADATAHDATA`JDATA`8yDATA(`DATA(pDATA(KDATAhdDATAhDATAh0DATAHKDATAH@|DATA@HDATAX@DATAX JDATA Xh~DATA `DATA0DATA0x;DATA00h>jDATA0xDATAH0DATAH@DATAPH hDATAPDATApP"DATApDATApP:DATAkDATA(DATA(pDATA(LDATAXRDATAXDATAX CDATA0DATA0x<DATA00FDATA(DATA(pDATA@(DATA@SDATA@X3DATAp6DATAp(8DATA(pp=DATA((?DATA DATA  ` lDATA   H DATA @   +DATA@    ?DATA  @ @ ZDATA P   DATAP    DATA P 0,DATAH 8DATAHGDATAHPDATA DATA hLDATA 0fDATAHDATAHDATAH(QDATAkDATADATA`DATApCDATAph}DATAhpDATAh0DATA@EDATA@ `DATA @hDATA8 DATA8GDATA8@[DATAPDATAP'DATAP8DATAP KDATAP 0! eDATA0!!P x!DATA!"0!"IDATA"p#!"dDATAp##"#DATA#$p#8$SDATA$X%#%DATAX%&$%:DATA&'X%X&DATA''&X'DATA'((''DATA((('p(SDATA()((@)3DATA)X*()6DATAX*+)*ADATA++X*`+;DATA+P,+,DATAP,,+,DATA,-P,-5DATA-.,-DATA..-`.-DATA././JDATA/0./yDATA01/0DATA110H1DATA1p211XDATAp2P312gDATAP33p23DATA3h4P34DATAh4534,DATA55h4X5FDATA5656aDATA60756DATA0776x7DATA7p8078,DATAp80978FDATA09:p8x9aDATA::09X:DATA:(;::DATA(;;:p;9DATA;<(;(<ZDATA<8=;=DATA8==<=DATA=>8=>JDATA>?=>uDATA?@>?DATA@@?P@DATA@hA@@MDATAhA`B@ADATA`BBhABDATABxC`B(CDATAxC@DBCHDATA@DDxCDATADE@DDDATAEEDPEDATAEpFEESDATApF GEF3DATA GGpFhGDATAG@H GG&DATA@HHGH9DATAHI@H@IDATAI8JHI)DATA8JKIJ_DATAKK8JXK]DATAKLK0LKDATAL0MKLDATA0MMLxMDATAMN0MNDATANOMODATAOXPN PDATAXPPOPDATAPQXP8QHDATAQRPRMDATARSQRDATASSRHSDATASTSSDATATTS`TDATATUTTDATAUUT`UDATAU@VUUDATA@VVUVDATAVhW@VWDATAhW(XVWFDATA(XXhWpXDATAX`Y(XY%DATA`YYXYDATAYZ`Y(Z%DATAZ0[YZ5DATA0[[Zx["DATA[p\0[\ DATAp\\[\DATA\]p\8]@DATA]X^\]-DATAX^^]^DATA^_X^8_DATA__^1 DATA_``_`DATA```_`DATA`pa``(aDATApab`aDATAbbpaHbDATAb0cbbDATA0ccbxc)DATAcXd0c dDATAXddcdDATAdeXd8e4DATAe fdeDATA ffehf4DATAfPg fgDATAPg hfgTDATA hhPghh>DATAhXi h iDATAXiihi#DATAijXi@j$DATAjXkijCDATAXk(ljkTDATA(llXkpl?DATAlm(l(m#DATAm8nlm?DATA8nnmn#DATAno8n o?DATAo0pno#DATA0ppoxpDATAp`q0pp6DATA`qrpq:DATAr`r`q`5DATA`rrrrDATAr(s`r5DATA(ssrps?DATAs(t(sh6 DATA(ttsptDATAt@u(tuDATA@uutu-DATAuhv@u0vDATAhvvuvDATAvxwhv0wDATAxwwvwDATAwxxw@xDATAxywxDATAy`yx6 DATA`yzyy DATAzz`yHz DATAzH{zz+DATAH{{z{)DATA{p|H{8|DATAp|}{| DATA}}p|X}DATA}@~}}4DATA@~~}~'DATA~@~(%DATA ~%DATA Ȁh-DATAȀp -DATApȀDATA8p7 DATA8ȂDATAȂ`8DATA`Ȃ-DATA؄`PWDATA؄ kDATA`؄!DATA` EDATA ؇`h?DATA؇  ADATAH؇3DATAH!DATAhH0DATAhp7DATA@hDATA@ЋDATAЋP@DATAPЋDATAP0"DATAXЍTDATAX؎DATA؎X =DATA@؎؏3DATA@DATAX@DATAXADATAȒX`7DATAȒBDATAГȒ8DATAГBDATAГؔDATAXDATAHؕ?DATAH9 DATA8Hؖ*DATA87DATA80?DATA DATA hDATAX +DATAX0DATAXPDATA8Л6DATA89DATA885DATAX:DATAX1DATAXP1DATAh6DATAh ;DATA Сhh2DATAС 6DATA0СȢ2DATA0x4DATA0(4DATAHؤ;DATAH-DATAH82DATAP3DATAPЧDATAЧP1DATA0ЧȨ3DATA0x5DATA0(8DATADATAȫ`5DATAȫx7DATAx0ȫ:DATA0xx<DATA00?DATAH/DATAH9DATAHH8DATAp?DATApDATAp8/DATAH1DATAH5DATAH@4DATA(DATA(صp6DATAص( ;DATA@صض5DATA@9DATA@@.DATAX8DATAX8DATAXX3DATA@DATA@лDATAлP@DATAPл.DATAP@/DATAX9DATAX4DATAXP3DATAp:DATAp(<DATA(pp<DATA((=DATAP=DATAPDATAP(:DATAH5DATAH5DATAH@5DATAX5DATAX5DATAXP:DATAp6DATAp 6DATA ph6DATA 5DATA06DATA0x4DATA0(9DATADATA`DATA`:DATA`3DATA`X6DATAp7DATAp 4DATA ph9DATA  2DATA82DATA82DATA802DATAH2DATAH9DATAHH1DATA0DATA0xDATAp05DATAp(=DATA(pp8DATA((8DATAP>DATAP:DATAPP=DATA@DATA@1DATA@82DATA DATA hFDATA (*DATA(%DATA(pDATA@(DATA@DATAX@DATAX LDATA XhADATA (LDATA(DATA(pQDATAx(@DATAxDATAxx@DATAx0?DATA0xxDATAH0DATAH*DATAH8 DATA@7DATA@DATAp@7DATApDATApp8DATAp+DATAp`RDATAx0DATAx@MDATA@xQDATA@X=DATAGDATAPKDATAP4DATAPHADATA@DATAHJDATAH@DATAHPADATA8DATA8=DATA8DATA8:DATA@@DATA@8DATA@@>DATAh>DATAh0DATAh`:DATAADATA@6DATA@@DATA@HCDATA@DATA8;DATA8DATAx8@DATAx8DDATA8x;DATA88DDATAp EDATAp 8  JDATA8  p  DATA  8  ?DATA @   EDATA@    :DATA  @ @ CDATA p 9DATAp( ?DATA(pp@DATA(0;DATA8DATA8?DATA88/DATAP?DATAP9DATAPP5DATAxADATAx@KDATA@xRDATA@XJDATA QDATA8DATA8=DATA884DATAP4DATAP4DATAPH4DATA`4DATA`?DATA``9DATA<DATAH ADATAH ! @DATA!!H P!DATA!P"!!?DATAP"#!"=DATA##P"P#/DATA#X$##/DATAX$%#$/DATA%%X$H%/DATA%P&%%/DATAP&'%&9DATA''P&P'5DATA'p('(>DATAp(()'(<DATA())p(p)CDATA)*()0*BDATA*8+)*DATA8+,*+PDATA,,8+P,BDATA,-,-@DATA-H.,-@DATAH./-.GDATA//H.P/>DATA/x0/0?DATAx00/0DATA01x0@1JDATA1202IDATA2312DATA332P3DATA3 433DATA 443h4NDATA4h5 405DATAh5545DATA5h6h506DATAh6756DATA77h6H7@DATA7x878?DATAx8879 DATA8@9x89DATA@9989DATA9h:@9:DATAh:;9:DATA;;h:H;&DATA;8<;;DATA8<<;<DATA<=8<=9DATA=><=DATA>>=`>RDATA>h?>0?DATAh??>?DATA?@h?0@'DATA@@A?@?DATA@AA@ADATAAB@ABEDATABhCABmDATAhC0DBCMDATA0D0EhCxDDATA0EE0DxEDATAEHF0EEDATAHFGEF?DATAGHGHFp@DATAHGHGGEDATAHHHGPHpDATAHxIH@IDATAxIJHIDATAJJxIXJDDATAJKJKoDATAKLJLSDATALMKLDATAM(NLMDATA(NNMpNHDATANO(N8OvDATAOPN(PDDATAPQOPpDATAQRPQDATARRQXRDATARpSRRMDATApShTRSDATAhT(UpSTEDATA(UVhTpUwDATAVV(U`VDATAV0WVVDATA0WWVxWODATAWX0W@XmDATAXYW(YDDATAYZXY`DATAZ[YZDATA[[ZH['DATA[8\[[DATA8\][\\DATA]^8\X]DATA^^]X^DATA^ _^^DATA __^h_DATA_8` __DATA8``_`DATA`a8`aNDATAab`aDATAbba`b2DATAbHcbcDATAHcdbc9DATAddHcHdDATAdeddDATAeedHe"DATAe8feeDATA8fgefdDATAg`g8fH: DATA`ggggDATAgh`g(h.DATAhpighkDATApi@jhiWDATA@jkpijTDATAkk@jXkDATAkPlkkADATAPllklDATAlmPlmVDATAmnlmqDATAnomnDATAoonXoDATAoXpooJDATAXp qopHDATA qqXphqDATAqxr qqXDATAxrPsqrZDATAPstxrs7DATAttPsHtDATAtXuttEDATAXu@vtumDATA@vwXuvMDATAww@vPwtDATAwxxw@xDATAxxywxDATAyyxxXyYDATAyzy0zqDATAz{y {\DATA{|z{oDATA|}{|DATA}}|`}DATA}x~}}LDATAx~@}~IDATA@x~:DATA@@DATA`؀SDATA`HnDATAH`RDATA`H@DATA`DATAx`(DATAx )DATA xh_DATA @.DATA DATA hDATAh HDATAh(CDATA(hpWDATA(@tDATAh0DATAhHdDATAHhDATAH(EDATAmDATAPЎMDATAP@tDATA@PDATAX@DATAX0YDATA0 XxqDATA 0h\DATA @oDATA`(DATA`DATA`@HDATAcDATApUDATApPcDATAPЙpDATAЙhPDATAh8ЙVDATA8hfDATA8`YDATAН8gDATAНPDATAPНKDATAПP`?DATAПPDATAPПHDATAP`nDATAТHUDATAТcDATA0ТDATA0ȤxDATAȤ0DDATApȤХlDATAp8LDATA80p|DATA08xDATAH0DATAHLDATAHXzDATAȫPCDATAȫDATA@ȫDATA@حDATAح@ DDATApح^DATAp8JDATA80p~DATA08xDATAH0DATAHIDATAHXrDATAHFDATA|DATA8DATA8BDATAx8@DATAx0>DATA0xxDATA0PDATAPȹSDATAPODATAP`tDATAPDATAмDATAPDATA@+DATA@DATA@?DATAP:DATA@DATA@FDATAH@XODATAHJDATAHX^DATAh0DATAhDATAhHDDATApDATAxLDATAxpzDATApxDATAp8DATA`[DATA`@cDATA@`HDATA@PDATAPDATADATA`BDATAX DATAX(VDATA(XpZDATA(HDATADATA`-DATAh(DATAh =DATA hhPDATA 8+DATADATA`-DATA]DATAH1DATAHDATA`HDATA`,DATA`P]DATA(1DATADATAXDATAX1DATAX0^DATA0Xx9DATAh00DATAhDATAhH1DATA^DATA@8DATA@DATAh@*DATAh@^DATA@0hvDATA0@x<DATA00DATA0xDATA0FDATApmDATApDATAp8DATA()DATA(pJDATA(8jDATA IDATAx\DATAxDATAx@DATAPGDATAP8kDATA8PIDATA8HXDATAX DATAXDATAX8GDATARDATAHJDATAH ]DATA HhDATA0 DATA0xDATAx06DATAx0;DATA0xx@DATA08:DATA`:DATA`DATA`(ZDATAxEDATAx8DDATA8xbDATA8`YDATA8eDATAPDATAPDATAP0^DATAHDATA`YDATA`@eDATA@`DATAX@DATAX0ZDATA0XxkDATA0`YDATA8eDATAP  DATAP   DATA  P 0 XDATA p   7DATAp 0   FDATA0  p x ZDATA  0 P DATA    DATA  hSDATA 86DATAhJDATAh0MDATA0hxDATA@0DATA@4DATA@8JDATAkDATA8DATA8WDATA8PqDATAx@DATAxDATAxXMDATA lDATA@DATA@DATA@ ODATAoDATADATAPDATApTDATApPbDATAPpDATAh P DATAh 0! LDATA0!"h x!eDATA""0!X"DATA" #""DATA ##"h#DATA#h$ #$6DATAh$ %#$;DATA %%h$h%@DATA%& %(&:DATA&P'%&:DATAP''&'DATA'(P'(ZDATA(h)'(EDATAh)(*()DDATA(*+h)p*bDATA++(*P+YDATA+,+(,eDATA,@-+-DATA@--,-DATA-.@- .^DATA.x/-.HDATAx/P0./YDATAP001x/0eDATA011P0x1DATA1H2011DATAH2 312ZDATA 34H2h3kDATA44 3P4YDATA454(5eDATA5@646DATA@6656DATA67@6 7HDATA7867DATA8`978BDATA`9@:89`DATA@::`9:DATA:X;@:;DATAX;(<:;VDATA(<<X;p<IDATA<=(<8=JDATA=><>ZDATA>?=>DATA??>X?DATA?x@??WDATAx@(A?@6DATA(AAx@pAJDATAAB(A8BpDATABCA(C#DATACPDBCUDATAPDXECDDATAXEEPDEDATAEpFXE FDATApF0GEFADATA0GHpFxGlDATAHH0G`HDATAHIHHDATAIIH`IDATAIhJII@DATAhJPKIJkDATAPK0LhJKbDATA0LLPKxLDATALM0LMFDATAMNLMDATAN8OMN2DATA8OONOFDATAOP8O@P~DATAPQO8QDATAQHRPQFDATAHRhSQRDATAhSTHRSDATATThSHTUDATATUTUDATAUVT V)DATAV@WUV@DATA@WXVWUDATAXX@WXXDATAXhYXXCDATAhY8ZXYVDATA8ZZhYZDATAZ8[8Z[DATA8[[Z[DATA[H\8[\DATAH\\[\DATA\x]H\(]DATAx]]\]DATA]^x]@^DATA^0_]^$DATA0__^x_DATA_`0__QDATA`a_`DATAaa`XaDATAa(baaDATA(bbapbDATAb8c(bbDATA8cdbceDATAdd8c`dQDATAded0eDATAefdeDATAffeXfDATAf(gffDATA(ggfpgDATAgph(gh6DATAph@ighTDATA@iiphiDATAihj@ijDATAhjjijDATAjkhj0kDATAk0ljk3DATA0llkxl&DATAl`m0lmDATA`mmlmDATAm(n`m0@DATA(nnmpnDATAnXo(noDATAXoono&DATAopXo@pDATApqopDATAqqpXqDATAq8rqqDATA8rrqr.DATArxs8r(sDATAxstrsDATAttxsXt+DATAt`utu+DATA`uvtu+DATAvv`uPv@DATAvXwvwDATAXwwvwDATAwxXw8x@DATAxpywx@DATApy zxy2DATA zzpyhz2DATAz{ z{2DATA{P|z{UDATAP||{|DATA|`}P|(}DATA`}}|}DATA}~`}@~,DATA~X}~;DATAX~DATAX8DATAЀDATAP8DATAp5DATAp.DATAp`DATAP8DATAP!DATA8P@DATA8DATA`8,DATA`)DATA`PDATA0Ї/DATA0ȈxDATAȈ`0DATA`Ȉ DATA`HDATA0Ȋ6DATA0Ћx'DATAЋ05DATAȌЋ@ DATAȌ>DATAȌȍDATAHDATAP:DATAPЏDATAЏPODATA@Џ,DATA@#DATA`@(DATA`'DATA`HDATA ؓDATA hSDATA 8%DATAؕDATAX5DATAXDATAXDATAhX0DATAhDATAh@GDATAp;DATApDATApp8DATApDATApP9DATAx9DATAx09DATA0xx8ADATAx0DATAx@DATAx؟nDATAx:DATA@xDATA@ءDATAءX@ DATAXآءDATAآXX DATAXأآDATAأhX DATAhأDATAxh0DATAxDATAPxA DATAP DATAP8#DATA0ا$DATA0xDATAP0 DATAPЩDATAЩPB DATAЩ`DATA(DATA(pDATA(LDATA`Ь[DATA`5DATAخ`XMDATAخ ODATAXخ9DATAXذDATAذXX DATAXذDATAhX0DATAhDATAh@+DATAP0DATAP1DATAPH0DATA`3DATA`>DATAȷ``3DATAȷx1DATAxȷDATAx@DATA0й)DATA0x3DATA0(7DATA8ػ.DATA86DATA80.DATA8ؽ.DATA8/DATA8(/DATA0п/DATA0x2DATA0(.DATA0/DATA0xDATA@0DATA@3DATA@8BDATAh8DATAh7DATAh`4DATAHDATAHDATAH 4DATA86DATA81DATA801DATAH0DATAH1DATAH@3DATAX3DATAX9DATAXX=DATAHDATAHDATA`H(DATA`DATA`(?DATA8'DATA8DATAH8DATAHDATAhH!DATAhB DATAh@C DATAx@DATAx8FDATA8xDATAP8DATAPDATApP(DATApDATAp8+DATAhRDATAhDATAh0DATADATAXDATAx[DATAx@HDATA@xHDATA@PTDATA(PDATAXDATA@?DATA@CDATA@HCDATAx>DATAx8EDATA8xDATA`8DATA`DATA`@\DATACDATAPCDATAPADATAPXADATAMDATAhQDATAh0HDATA0hxDATA0]DATAXQDATAX(TDATA(XpEDATA(0HDATAxJDATAxXfDATAXx@DATAX`@DATA 8DATAH<DATAH=DATAHH=DATAODATA@GDATA@DATAX@DATAX NDATA XhDATA  DATA hDATA8 DATA8DATAX8 DATAXC DATAPX4DATAPC DATAPDATA`DATAHDATAH)DATApH8DATAp 1DATA ph3DATAP DATAPDATAP0.DATADATAX;DATAHDATAHIDATAHXYDATAh 0 DATAh   4DATA  h ` DATA P   ?DATAP    DATA  P DATA   ` >DATA    DATA P DATAP DATAP0;DATAXEDATA0QDATAfDATADATA`DATA`6DATA`8[DATA8`DATAP8DATAP UDATA Ph{DATA `]DATA8SDATA@DATA@7DATA@8FDATAX-DATAXHsDATAHXDATAxH2DATAx8ADATA8xDATAh82DATAh` zDATA` !h 2DATA!"` X!DATA""!X"DATA"(#""DATA(##"p#-DATA#$(#$DATA$%#%5DATA%&$%DATA&'%&DATA''&H'-DATA'`(''?DATA`(('(DATA(()`(DATA())(p)>DATA)*()(*DATA*`+)(+DATA`++*+DATA+,`+@,;DATA,,+DATA,-,@-QDATA-.,.fDATA.(/-.DATA(//.p/DATA/p0(/06DATAp0H1/0[DATAH11p01DATA1`2H12DATA`20312UDATA03(4`2x3{DATA(4503p4]DATA55(4H5SDATA5P656DATAP67561DATA77P6H72DATA70877DATA0887x8DATA89089:DATA9:89DATA::9H:&DATA:::HDDATA:0;:DDATA0;x;:DDATAx;;0;EDATA;<x;GDATA<<;P<DATA<=<<DATA==<`=#DATA=8>=>DATA8>>=>DATA>?8>?KDATA?`@>?MDATA`@@?@DATA@A`@@AGDATAAB@BWDATAB CABDATA CCBhCIDATACD C0DDATADHECDIDATAHEEDEDATAEHFHEFDATAHFFEFDATAFGHF(G?DATAGxHFGgDATAxHHGHDATAHIxH@IDATAI8JHI+DATA8JJIJ=DATAJK8J8KHDATAK8LJLDATA8LLKLDATALM8LM>DATAMpNLMmDATApNNMNDATANOpN8ODATAO8PNO1DATA8PPOPCDATAPQ8P@QDATAQRP@R`DATARSQ SDATASXTR TDATAXTUST5DATAUUXTPUADATAUVUVcDATAVhWUVCDATAhWhXVWDATAhXYhWXDATAYYhXHY`DATAYZY(ZDATAZ`[Y([DATA`[\Z[2DATA\\`[X\?DATA\]\]xDATA]^\^CDATA^_]^DATA_`^_DATA``_H`:DATA`xa`aCDATAxab`aDATAb cxab%DATA ccbhcBDATAcd c(dDATAdpec8eDATApe8fdeJDATA8ffpef7DATAfhg8f0gDATAhghfgDATAhhhgHh;DATAh8ihiDATA8iihiDATAij8ijQDATAjxkij\DATAxkkjkDATAklxk@l"DATAl0mklDATA0mmlxm0DATAmn0m(nBDATAnpomnQDATApoonoDATAoppo8pDATApXqopSDATAXq@rpqoDATA@rsXqrNDATAss@rPsdDATAshts0tDATAhtustDATAuuhtHuKDATAuvuvDATAvHwuwDATAHwwvwDATAwxHw(xNDATAxywxoDATAy0zxy#DATA0zzyxzDATAz{0z{pDATA{|z|aDATA|0}{|DATA0}}|x}ADATA}~0}8~\DATA~`}DATA`(~ADATA(`p\DATA(HDATAȁDATAЂ`>DATAЂTDATA8ЂDATA8;DATAȅ88XDATAȅHDATAH ȅ\DATA HhDATAx CDATAx@LDATA@؉xDATA؉@ FDATA`؉JDATA`DATA`(YDATAPDATAP PDATA PhTDATA 8DATAPЏHDATAPODATAP`DATADATA`DATA@DATA@ؓDATAؓx@ $DATAxؓDATAx@DATAЕDATAP+DATAhG DATA@0t DATA@DATAX@DATAX6DATAXP*DATAX)DATAX1DATAXPDATAЛDATAPDATA DATA hDATA  DATA ؞h:DATA؞  TDATA(؞DATA(Рp)DATAРP(DATAPРDATAP(MDATAH'DATAHDATAxH(DATAxDATAXxtDATAXDATAX8DATApЦkDATApDATApPDATA0DATA0xDATAH0DATAHتDATAت Ht DATA hت DATAh DATAh@9DATAp@DATAp0ADATA0ȮpxDATAȮx00DATAxȮ!DATAx`$DATAX#DATAXDATAX8DATAȲDATAH9DATA8DATA8ش%DATAش 8DATA شhDATAP "DATAPDATAxP0DATAxDATAxx@DATAx8CDATA8xP_ DATA8ȹDATAHPDATAHغDATAغXH DATAXغDATA0X@DATA0xDDATA089DATAh@DATAh(ADATA(hpDATAp(0DATAp!DATApX$DATAP#DATAPDATAxP0DATAxDATAxPDATA0DATA0xDATA0xDATA`"DATA`DATA`8DATA DATA hDATAX  DATAXDATAX8DATA( DATA(pDATAX(%DATAXDATAX8&DATA(DATA(p*DATAh(DATAh DATAhPDATA@ DATA@DATAx@+DATAxDATAxX)DATAPDATAPDATAP('DATA()DATA(p%DATAp(,DATAp%DATApX#DATAX-DATAX!DATAX@-DATA@!DATA@DATA`@!DATA`DATA`8"DATA DATA hDATA DATAh0DATAhDATAxh@DATAxDATAxx@DATAx DATAxHDATADATAX DATADATA`&DATAp:DATAp 7DATA phXDATAx @DATAx@KDATA@xLDATA@P-DATAX+DATAX"DATAX@"DATA`KDATA`DATAp`8DATAp0CDATA0px9DATAh00DATAh-DATAhXSDATA(ZDATAHDATAH?DATAHHODATABDATA@=DATA@DATAp@3DATApPaDATAPp@DATAPXHDATA EDATA0DATA0xDATA00DATA0xDATA00DATA0xDATAX0/DATAXDATAX8DATA(%DATA(pDATA8(DATA8&DATA8 [DATA{DATAiDATADATAXDATAuDATAxdDATAx`nDATA`xDATAx `( DATAx H  TDATAH  x  DATA P H   DATAP    DATA p P 0  DATAp    DATA  p 8 3DATA 8  DATA8 9DATA88DATA@8DATA@DATA@ .DATADATAXDATAH;DATAHDATAHHDATAHDATAXH DATAXDATAxX0DATAxDATAxPDATA(DATA(pDATAH(DATAHDATAXHDATAXDATAX8DATADATAPDATA(DATA(pDATAX(DATAXDATApX8DATAp DATA  pP DATA 8!  DATA8! !FDATAh0#!BPYcuDATADesDATAX"""DATA$`Name: 'YafaRay Export 0.0.4-313'DATABlender: 247 SVNubDATAGroup: 'Render'DATA04Tooltip: 'YafaRay Export'e%DATA """DATAzs4DATA,__author__ = ['Bert Buchholz, Alvaro Luna']DATA__version__ = '0.0.4'EEDATA$__url__ = ['http://yafaray.org']DATA(__bpydoc__ = ""DATA DATA<H# import order IS important for sys.path.append seeminglyEEDATA import sysDATA import osc.DATAimport platformDATAHn59 DATAH# Enter the abolsute path to the YafaRay directory or the relative pathDATA # (as seen from Blender.exe)DATA0X# If you have a directory structure like this:DATA`3#roDATA(O# ,- Blender (containing Blender.exe)EEDATA# +- YafaRayREEDATA3# + ...DATA舷#DATA(# then set dllPath = "..\\YafaRay\\"DATA8dllPath = "..\\YafaRay\\"DATAXpythonPath = ""DATAiarDATAX_SYS = platform.system() DATA2.2DATA<if _SYS == 'Windows':EEDATA= if dllPath == "":DATAX> import _winregfDATA\ regKey = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, 'Software\\YafRay Team\\YafaRay')DATAD0 dllPath = _winreg.QueryValueEx(regKey, 'InstallDir')[0] + '\\'REEDATAudhDATA from ctypes import cdllDATAN dlls = ['zlib1','libpng3','jpeg62','pthreadGC2','Iex','Half','IlmThread','IlmImf','mingwm10','freetype6','yafraycore', 'yafarayplugin']DATA0 for dll in dlls:DATA, print "dll: " + dllPath + dll + '.dll'ocuDATA, cdll.LoadLibrary(dllPath + dll + '.dll')EDATAhDATA if pythonPath == "":1.DATA$( pythonPath = dllPath + 'python'dDATA, pythonPath = os.path.normpath(pythonPath)DATA p sys.path.append(pythonPath)DATAREEDATAif _SYS == 'Linux':DATA if pythonPath == "":DATAHX if os.path.exists(os.environ['HOME'] + '/.blender/scripts/yafaray/'):DATAD pythonPath = os.environ['HOME'] + '/.blender/scripts/yafaray/'DATA  sys.path.append(pythonPath)DATA(p elif os.path.exists('/tmp/yafaray/'):DATA X pythonPath = '/tmp/yafaray/'DATA  sys.path.append(pythonPath)DATA8  elif os.path.exists('/usr/share/yafaray/blender/'):EEDATA0 pythonPath = '/usr/share/yafaray/blender/'DATA 0 sys.path.append(pythonPath)DATAлDATAimport tempfileDATA0import stringEEDATA import mathDATA8import BlenderEDATAKfrom Blender import *DATALֻDATAMimport yaf_exportr DATA$Mfrom yaf_export import yafrayRenderDATA8Nimport yafrayinterfaceDATAN-- DATA(HO##################################### sDATAO#l.DATAP# Utility functionsDATAQ#DATA(R#####################################DATARDATA SuniqeCounter = 0DATASDATA0Tdef getUniqueValue():DATAT global uniqeCounterDATAPU uniqeCounter += 1DATAU return uniqeCounterDATApVl-0DATAVdef drawHLine(x, y, width):DATAW BGL.glColor3f(0,0,0)DATAX BGL.glBegin(BGL.GL_LINES) DATA BGL.glVertex2i(x, y)-MDATA  BGL.glVertex2i(x + width, y)paDATA BGL.glEnd()REEDATAXDATA @def drawSepLine(x, y, width): uDATA @ y -= 15DATA  drawHLine(x, y, width)DATA  y -= 25DATA  return yDATA@10 DATA(def drawSepLineText(x, y, width, text):DATA H y -= 15DATA drawText(x, y - 3, text)EEDATA8@ width = width - 5 - Draw.GetStringWidth(text, "small")DATAD drawHLine(x + Draw.GetStringWidth(text, "small") + 5, y, width)ֻDATA  y -= 25DATA  return yDATA@35 DATA,def drawText(x, y, text, size = "small"):DATAh BGL.glRasterPos2i(x, y)er DATA Draw.Text(text, size)DATADATA0def drawTextLine(x, y, text, size = "small"): 8DATA BGL.glRasterPos2i(x, y)DATAP Draw.Text(text, size)DATA  y -= 13;bpDATA  return yenDATAp0 9DATAP8# draw a complete paragraph, lines will be on wordlength longer than maxWidthDATA@0def drawTextParagraph(x, y, maxWidth, text, size = "small"):DATA BGL.glRasterPos2i(x, y)REEDATA$ words = string.split(text, ' ')linDATA ` length = 0DATA ! line = ""DATA i = 0DATA for w in words:.giDATA line += w + " "DATA, length = Draw.GetStringWidth(line, size)EDATA.giDATA@ if i < len(words)-1:DATA8 lenNextWord = Draw.GetStringWidth(words[i+1], size)DATA else: lenNextWord = 0DATAлDATA( if length + lenNextWord > maxWidth:DATA(0 y = drawTextLine(x, y, line, size)DATA$ line = ""REEDATAP& length = 0bDATA`DATA' if w == '\n':DATA(( y = drawTextLine(x, y, line, size)DATA`' line = ""DATA' length = 0EEDATAX DATA ( i += 14DATA DATA$ y = drawTextLine(x, y, line, size)DATA@лDATA h( return yDATA DATAH`Z# create a menu string for blender draw.menu out of a list of stringsDATA [def makeMenu(text, list):- DATA[ i = 0uDATA8\ MenuStr = text + "%t|"DATA\0 7DATA) for c in list:DATA(] MenuStr += c + " %x" + str(i) + "|" 0DATA * i = i + 1DATAx^-- DATA* return MenuStrDATA@_ֻDATA _def copyParams(source, target):DATAX` for p in source:y DATA` if not target.has_key(p):DATAa target[p] = source[p]er DATAb54 DATA,bdef copyParamsOverwrite(source, target):DATA@c for p in source:- DATAc try:2DATAHPd # print "no problem with: ", source, target, p, source[p], target[p]DATAe target[p] = source[p]39 DATA @+ except:DATA8e print "problem with: ", source, target, p, source[p]DATAf target[p] = 0.0DATA0gDATA(gdef setParam(gui, key, poly, field):DATADPh # poly is either a list or the initVal (latter here not needed)DATAi if type(poly) == list:DATA i field[key] = poly[gui.val]DATAi else:iDATA field[key] = gui.valSDATA DATAֻDATA(def setGUIVals(gui, key, poly, field): DATAH # poly is either a list or the initial value (latter here not needed) DATA x # print gui, key, poly, fieldCDATA, if type(poly) == list: # lists (for menus)DATA if field.has_key(key):5 0DATAxP # need this exception handling in case a list item has been set that has been removed in the meantime (for example,DATAD@ # a material has been renamed or deleted from the Blend file)REEDATA try:DATA( gui.val = poly.index(field[key]) 1DATA + except:dDATA+ gui.val = 0DATA$ elif type(poly) == tuple: # color DATAP if field.has_key(key):re.DATA< gui.val = (field[key][0], field[key][1], field[key][2]) DATA$ elif type(poly) == str: # stringDATA@ if field.has_key(key):ֻDATAا gui.val = field[key][:] DATAp else: # ints, floatsEEDATA if field.has_key(key):ֻDATA gui.val = field[key]DATA(6 2DATAX# checks if key exists in field and if not, create property and assign initial value1-ADATA(xdef checkParam(gui, key, poly, field):DATA try:DATA  if not field.has_key(key): DATA00 if type(poly) == list: # lists (for menus)DATAح field[key] = poly[0]er DATA0 else: # ints, floats, strings, colors etc.- DATA field[key] = poly17DATA H, except:.blDATAx passuDATAv-0DATAx7 1DATA# ### tab material ### #DATADATAֻDATA0# TODO: experimental new structure, fubar atmltDATA-class BlendMat:DATA def __init__(self, mat):-0DATA print "init blend mat".blDATA, self.matProp = mat.properties['YafRay']- DATA$X self.evEdit = getUniqueValue()eenDATAREEDATA(x self.mats = Blender.Material.Get()-- DATA$ self.index = self.mats.index(mat)DATA print self.indexDATAHDATA$ self.menuMat1 = Draw.Create(0)l-0DATAh self.material = matEEDATA( print " with mat: ", self.materialDATA8 #(self.guiMatBlendMat1, "material1", "", matProp),disDATA8H #(self.guiMatBlendMat2, "material2", "", matProp)]DATAer DATA,x def draw(self, height, guiWidgetHeight):DATA  height += guiHeightOffsetDATA0 drawText(10, height + 4, "Absorp. color:")DATA` height += guiHeightOffsetDATA-- DATAx i = 0DATA$ matMenuEntries = "Material 1 %t|"DATA for mat in self.mats:DATA8( matMenuEntries += mat.name + " %x" + str(i) + "|"0 lDATAX- i = i + 1dDATA er DATA, self.menuMat1 = Draw.Menu(matMenuEntries,DATAHH self.evEdit, 100, height, 150, guiWidgetHeight, self.index + 1, "")lDATAD #self.evEdit, 100, height, 150, guiWidgetHeight, self.index, "")DATAL0 #self.evEdit, 100, height, 150, guiWidgetHeight, self.menuMat1.val, "")6DATAֻDATA. return heightDATAxDATA def event(self):EEDATA@ self.matProp['material1'] = self.mats[self.menuMat1.val].nameDATA<@ #self.matProp['material2'] = self.mats[self.menuMat2.val]DATA1 6DATAxclass clTabMaterial:DATA def __init__(self):DATA # preview image-0DATA,( self.yRender = yaf_export.yafrayRender()DATA<м self.previewImage = Image.New("yafPrev", 320, 320, 32)1 6DATA self.previewSize = 100DATA ֻDATA `. # eventsDATA$ self.evShow = getUniqueValue()REEDATA$ self.evEdit = getUniqueValue()1 6DATA(( self.evChangeMat = getUniqueValue()DATA, self.evRefreshPreview = getUniqueValue() DATA(p self.evMatFromObj = getUniqueValue()DATAֻDATA$ self.tabNum = getUniqueValue()10 DATA0inkDATA self.matObject = NoneDATA@ֻDATA . # listsgDATA self.connector = []DATA$ # class-specific types and lists0DATAT8 self.matTypes = ["shinydiffusemat", "glossy", "coated_glossy", "glass", "blend"] DATA8 self.BRDFTypes = ["Normal (Lambert)", "Oren-Nayar"] DATADATA8 self.materials = [] uDATAn-0DATA(H for mat in Blender.Material.Get():DATA$ self.materials.append(mat.name) DATA2 7DATA/ # propertiesEDATAP self.curMat = {} DATAwl.DATA` # gui elementsDATA, self.guiMatShowPreview = Draw.Create(1)-0DATA< self.guiMatPreviewSize = Draw.Create(self.previewSize)ֻDATA$P self.guiMatMenu = Draw.Create(0) DATA, self.guiMatSelectFromObj = Draw.Create(0)DATA( self.guiMatDiffuse = Draw.Create(1.0)DATA,8 self.guiMatSpecular = Draw.Create(0.0)DATA0 self.guiMatColor = Draw.Create(1.0,1.0,1.0)-DDATA8 self.guiMatDiffuseColor = Draw.Create(1.0,1.0,1.0)KDATA48 self.guiMatMirrorColor = Draw.Create(1.0,1.0,1.0)DATA0 self.guiMatTransparency = Draw.Create(0.0)-- DATA0 self.guiMatTranslucency = Draw.Create(0.0)DATA(8 self.guiMatEmit = Draw.Create(0.0)8-DDATA0 self.guiMatFresnel = Draw.Create(0) # ToggleDATA0 self.guiMatGlossyReflect = Draw.Create(0.0) uDATA,( self.guiMatExponent = Draw.Create(0.0)DATA( self.guiMatAsDiffuse = Draw.Create(0)DATA0p self.guiMatIOR = Draw.Create(1.0) # sliderendDATA4 self.guiMatFilterColor = Draw.Create(1.0,1.0,1.0)DATA4 self.guiMatAnisotropy = Draw.Create(0) # toggleDATA0x self.guiMatExpU = Draw.Create(50.0) # sliderADATA0@  self.guiMatExpV = Draw.Create(50.0) # sliderDATA8  self.guiMatAbsorptionColor = Draw.Create(1.0,1.0,1.0)DATA0! self.guiMatAbsorptionDist = Draw.Create(1.0)DATA,@" self.guiMatTransmit = Draw.Create(0.0)LDATA," self.guiMatDispersion = Draw.Create(0.0)DATA4# self.guiMatFakeShadow = Draw.Create(0) # toggleDATA(@$ self.guiMatAssign = Draw.Create(1)ODATA,$ self.guiMatType = Draw.Create(1) # menuDATA0% self.guiMatBlendMat1 = Draw.Create(1) # menuDATA00& self.guiMatBlendMat2 = Draw.Create(1) # menuDATA4& self.guiMatBlendValue = Draw.Create(0.5) # sliderDATA4' self.guiMatDiffuseBRDF = Draw.Create(1) # menuWDATA08( self.guiMatSigma = Draw.Create(0.0) # numberDATA(YDATA(`) for mat in Blender.Material.Get():ZDATA * self.setPropertyList(mat)\DATA*]DATA,+ # call before drawing and once in __init__DATA(+ def setPropertyList(self, mat = None):DATA`, if mat == None:DATA, try:DATA0p- Blender.Material.Get()[self.guiMatMenu.val]DATA - except:gDATA$`. print "Material doesn't exist!"DATA/ self.curMat = {}gDATA / returngDATA/iDATATX0 if not Blender.Material.Get()[self.guiMatMenu.val].properties.has_key("YafRay"):DATA (1 print "mat has no props"mDATAL1 Blender.Material.Get()[self.guiMatMenu.val].properties['YafRay'] = {}DATA2pDATAT3 self.curMat = Blender.Material.Get()[self.guiMatMenu.val].properties['YafRay']DATA3 matProp = self.curMattDATAp4 else:DATA,4 if not mat.properties.has_key("YafRay"):DATA$5 mat.properties['YafRay'] = {}DATA(86 matProp = mat.properties['YafRay']DATA6{DATAX7 self.materials = []DATA(7 for mat in Blender.Material.Get():~DATA$8 self.materials.append(mat.name)DATA(9DATA,9 # connect gui elements with id propertiesDATATP: # , , , DATAH ; self.connector = [(self.guiMatType, "type", self.matTypes, matProp),DATA<; (self.guiMatDiffuse, "diffuse_reflect", 1.0, matProp),DATA<< (self.guiMatSpecular, "specular_reflect", 0.0, matProp),DATA<P= (self.guiMatColor, "color", (1.0, 1.0, 1.0), matProp),DATAD> (self.guiMatDiffuseColor, "diffuse_color", (1, 1, 1), matProp),DATAH> (self.guiMatMirrorColor, "mirror_color", (1.0, 1.0, 1.0), matProp),DATA<? (self.guiMatTransparency, "transparency", 0.0, matProp),DATA<@@ (self.guiMatTranslucency, "translucency", 0.0, matProp),DATA,@ (self.guiMatEmit, "emit", 0.0, matProp),DATA<A (self.guiMatFresnel, "fresnel_effect", False, matProp),DATA@XB (self.guiMatGlossyReflect, "glossy_reflect", 0.0, matProp),DATA8C (self.guiMatExponent, "exponent", 500.0, matProp),DATA<C (self.guiMatAsDiffuse, "as_diffuse", False, matProp),DATA,xD (self.guiMatIOR, "IOR", 1.0, matProp),DATAH E (self.guiMatFilterColor, "filter_color", (1.0, 1.0, 1.0), matProp),DATA<E (self.guiMatAnisotropy, "anisotropic", False, matProp),DATA0F (self.guiMatExpU, "exp_u", 50.0, matProp),DATA0@G (self.guiMatExpV, "exp_v", 50.0, matProp),DATALG (self.guiMatAbsorptionColor, "absorption", (1.0, 1.0, 1.0), matProp),DATADH (self.guiMatAbsorptionDist, "absorption_dist", 1.0, matProp),DATA<pI (self.guiMatTransmit, "transmit_filter", 1.0, matProp),DATA@(J (self.guiMatDispersion, "dispersion_power", 0.0, matProp),DATA< (self.guiMatFakeShadow, "fake_shadows", False, matProp),DATAD` (self.guiMatBlendMat1, "material1", self.materials, matProp),DATAD  (self.guiMatBlendMat2, "material2", self.materials, matProp),DATA< (self.guiMatBlendValue, "blend_value", 0.5, matProp),DATAD (self.guiMatDiffuseBRDF, "brdfType", self.BRDFTypes, matProp),DATA0X (self.guiMatSigma, "sigma", 0.1, matProp)]DATADATA #print "mat connecting"DATA0 # add missing parameters to the property IDDATA for el in self.connector:DATA,X checkParam(el[0], el[1], el[2], el[3])DATADATADATA def draw(self, height):?DATA #print "mat draw"DATA( #self.setPropertyList()DATA  #for el in self.connector:DATA,X # setGUIVals(el[0], el[1], el[2], el[3])DATADATA8 drawText(10, height, "Material settings", "large")DATA0DATA8 height = drawSepLineText(10, height, 320, "Material")DATA`DATA try:DATA ` Blender.Material.Get()[0]DATA h/ except:DATA@ self.curMat = {}DATAH drawText(10, height, "No materials defined in Blender UI!", "large")DATA 0 returnDATADATAXDATA i = 0DATA$X matMenuEntries = "Materials %t|"DATA( for mat in Blender.Material.Get():DATA8 matMenuEntries += mat.name + " %x" + str(i) + "|"DATA1 i = i + 1REEDATADATA& self.guiMatMenu = Draw.Menu(matMenuEntries, self.evChangeMat, 10, height, 150, guiWidgetHeight, self.guiMatMenu.val, "selects an existing Blender material")EDATAXDATAd A self.guiMatSelectFromObj = Draw.PushButton("From active object", self.evMatFromObj, 180, height,cDATA@  150, guiWidgetHeight, "Select material from active object")DATADATA@X height = drawSepLineText(10, height, 320, "Material Preview")DATADATA@ self.guiMatShowPreview = Draw.Toggle("Show Preview ", 0, 10,DATADH height, 150, guiWidgetHeight, self.guiMatShowPreview.val, "")DATADATA( if (self.guiMatShowPreview.val == 1):DATA<( self.guiMatPreviewSize = Draw.Slider("Size: ", 0, 180,DATAH height, 150, guiWidgetHeight, self.guiMatPreviewSize.val, 100, 320)DATADATA  height += guiHeightOffsetDATAx Draw.Image(self.previewImage, 10, height - self.previewSize + 10, 1, 1, 0, 0, self.previewSize, self.previewSize)DATADATA4( height -= self.previewSize - guiHeightOffset;DATADATAdز self.guiRefreshPreview = Draw.PushButton("Refresh Preview", self.evRefreshPreview, 10, height,cDATAH self.previewSize, guiWidgetHeight, "Refresh the preview image.")DATA`DATA8 height = drawSepLineText(10, height, 320, "Settings")DATADATA0 drawText(10, height + 4, "Material type: ")DATAH self.guiMatType = Draw.Menu(makeMenu("Material type", self.matTypes),DATA`Pr self.evEdit, 100, height, 150, guiWidgetHeight, self.guiMatType.val, "Assign material type")DATADATA0@ if self.curMat['type'] == "shinydiffusemat":DATA  height += guiHeightOffsetDATA( drawText(10, height + 4, "Color:")DATA<  self.guiMatColor = Draw.ColorPicker(self.evEdit, 100,DATA\ height, 210, guiWidgetHeight, self.guiMatColor.val, "Base color of diffuse component")DATADATA 0 height += guiHeightOffsetDATA0 drawText(10, height + 4, "Mirror color:")DATA@p self.guiMatMirrorColor = Draw.ColorPicker(self.evEdit, 100,DATAd( height, 210, guiWidgetHeight, self.guiMatMirrorColor.val , "Color filter for mirrored rays")DATADATA  height += guiHeightOffsetDATAP  self.guiMatDiffuse = Draw.Slider("Diffuse reflection: ", self.evEdit, 10,DATAh height, 300, guiWidgetHeight, self.guiMatDiffuse.val, 0.0, 1.0, 0, "Amount of diffuse reflection")DATADATA H height += guiHeightOffsetDATAL self.guiMatSpecular = Draw.Slider("Mirror strength: ", self.evEdit, 10,DATA|8 height, 300, guiWidgetHeight, self.guiMatSpecular.val, 0.0, 1.0, 0, "Amount of perfect specular reflection (mirror)")DATADATA p height += guiHeightOffsetDATAL self.guiMatTransparency = Draw.Slider("Transparency: ", self.evEdit, 10,DATAh height, 300, guiWidgetHeight, self.guiMatTransparency.val, 0.0, 1.0, 0, "material transparency")DATADATA 0 height += guiHeightOffsetDATAL self.guiMatTranslucency = Draw.Slider("Translucency: ", self.evEdit, 10,DATA height, 300, guiWidgetHeight, self.guiMatTranslucency.val, 0.0, 1.0, 0, "Amount of diffuse transmission (translucency)")DATADATA  height += guiHeightOffsetDATAL self.guiMatTransmit = Draw.Slider("Transmit filter: ", self.evEdit, 10,DATAh height, 300, guiWidgetHeight, self.guiMatTransmit.val, 0.0, 1.0, 0, "Amount of tinting of light passing through material")DATA`DATA  height += guiHeightOffsetDATA<x self.guiMatEmit = Draw.Slider("Emit: ", self.evEdit, 10,DATAlh> height, 300, guiWidgetHeight, self.guiMatEmit.val, 0.0, 10.0, 0, "Amount of light the material emits")gDATAxDATA  height += guiHeightOffsetDATAD self.guiMatFresnel = Draw.Toggle("Fresnel ", self.evEdit, 10,DATAl  height, 300, guiWidgetHeight, self.guiMatFresnel.val, "Apply fresnel effect to specular components")ngDATADATA$ if self.guiMatFresnel.val == 1:DATA  height += guiHeightOffsetDATA<P self.guiMatIOR = Draw.Slider("IOR: ", self.evEdit, 10,DATAl height, 300, guiWidgetHeight, self.guiMatIOR.val, 1.0, 30.0, 0, "Refraction index for fresnel effect")DATADATA p height += guiHeightOffsetDATAP self.guiMatDiffuseBRDF = Draw.Menu(makeMenu("BRDF type", self.BRDFTypes),DATAT self.evEdit, 10, height, 150, guiWidgetHeight, self.guiMatDiffuseBRDF.val, "")DATADATAD  if (self.BRDFTypes[self.guiMatDiffuseBRDF.val] == 'Oren-Nayar'):DATA  height += guiHeightOffsetDATA@x self.guiMatSigma = Draw.Number("Sigma", self.evEdit, 10,DATAH0 height, 150, guiWidgetHeight, self.guiMatSigma.val, 0.0, 1.0, "")DATADATApDATA  height += guiHeightOffsetDATAT height = drawTextLine(10, height, "Mappable texture slots, Yafaray <- Blender:")DATA4X height = drawTextLine(10, height, "Bump <- Nor")DATA8 height = drawTextLine(10, height, "Diffuse <- Col")DATA< height = drawTextLine(10, height, "Mirror <- RayMir")DATA@p height = drawTextLine(10, height, "Transparency <- Alpha")DATA@( height = drawTextLine(10, height, "Translucency <- TransLu")DATADATAp`  elif self.curMat['type'] == "glossy" or self.curMat['type'] == "coated_glossy": # Glossy material settingsDATA H  height += guiHeightOffsetDATA,  drawText(10, height + 4, "Diff. color:")DATA@  self.guiMatDiffuseColor = Draw.ColorPicker(self.evEdit, 100,DATA\@  height, 210, guiWidgetHeight, self.guiMatDiffuseColor.val, "Diffuse Reflection Color")DATA DATA  height += guiHeightOffsetDATA00 drawText(10, height + 4, "Glossy color:")DATA< self.guiMatColor = Draw.ColorPicker(self.evEdit, 100,DATAH height, 210, guiWidgetHeight, self.guiMatColor.val, "Glossy Color")DATAPDATA  height += guiHeightOffsetDATAPh self.guiMatDiffuse = Draw.Slider("Diffuse reflection: ", self.evEdit, 10,DATAh0 height, 300, guiWidgetHeight, self.guiMatDiffuse.val, 0.0, 1.0, 0, "Amount of diffuse reflection")DATADATA  height += guiHeightOffsetDATAT( self.guiMatGlossyReflect = Draw.Slider("Glossy reflection: ", self.evEdit, 10,DATAl height, 300, guiWidgetHeight, self.guiMatGlossyReflect.val, 0.0, 1.0, 0, "Amount of glossy reflection")DATADATA ` height += guiHeightOffsetDATAD self.guiMatExponent = Draw.Slider("Exponent: ", self.evEdit, 10,DATA height, 300, guiWidgetHeight, self.guiMatExponent.val, 1.0, 5000.0, 0, "Reflection blur, no effect if Anisotropic is on")DATADATA 0 height += guiHeightOffsetDATAH self.guiMatAsDiffuse = Draw.Toggle("As diffuse ", self.evEdit, 10,DATAd height, 300, guiWidgetHeight, self.guiMatAsDiffuse.val, "Treat glossy component as diffuse")DATAhDATA  height += guiHeightOffsetDATAH self.guiMatAnisotropy = Draw.Toggle("Anisotropic ", self.evEdit, 10,DATA\@ height, 300, guiWidgetHeight, self.guiMatAnisotropy.val, "Use anisotropic reflections")DATADATA( if (self.guiMatAnisotropy.val == 1):DATA 8 height += guiHeightOffsetDATAL self.guiMatExpU = Draw.Slider("Exponent Horizontal: ", self.evEdit, 10,DATAh  height, 300, guiWidgetHeight, self.guiMatExpU.val, 1.0, 10000.0, 0, "u-exponent for anisotropy")DATA x! height += guiHeightOffsetDATAL" self.guiMatExpV = Draw.Slider("Exponent Vertical: ", self.evEdit, 10,DATAh" height, 300, guiWidgetHeight, self.guiMatExpV.val, 1.0, 10000.0, 0,"v-exponent for anisotropy")DATA#DATAT8$ if self.curMat['type'] == "coated_glossy": # extension for coatedGlossy materialDATA % height += guiHeightOffsetDATA<% self.guiMatIOR = Draw.Slider("IOR: ", self.evEdit, 10,DATAX& height, 300, guiWidgetHeight, self.guiMatIOR.val, 1.0, 30.0, 0, "Index of refraction for fresnel effect of the coating top layer")DATAX'DATA ' height += guiHeightOffsetDATATp( height = drawTextLine(10, height, "Mappable texture slots, Yafaray <- Blender:")DATA4@) height = drawTextLine(10, height, "Bump <- Nor")DATA8) height = drawTextLine(10, height, "Diffuse <- Col")DATAD* height = drawTextLine(10, height, "Glossy Reflection <- Spec")DATA<`+ height = drawTextLine(10, height, "Glossy Color <- Csp")DATA,DATA,DATA8- if self.curMat['type'] == "glass": # glass materialDATA - height += guiHeightOffsetDATA0`. drawText(10, height + 4, "Absorp. color:")DATAL/ self.guiMatAbsorptionColor = Draw.ColorPicker(self.evEdit, 100, height,DATA|/ 210, guiWidgetHeight, self.guiMatAbsorptionColor.val, "Glass volumetric absorption color. White disables absorption")DATA0DATA H1 height += guiHeightOffsetDATA\1 self.guiMatAbsorptionDist = Draw.Slider("Absorp. Distance:", self.evEdit, 10, height,DATAh2 300, guiWidgetHeight, self.guiMatAbsorptionDist.val, 0.0, 100.0, True, "Absorption distance scale")DATA3DATA 4 height += guiHeightOffsetDATA04 drawText(10, height + 4, "Filter color:")DATAHX5 self.guiMatFilterColor = Draw.ColorPicker(self.evEdit, 100, height,DATAd6 210, guiWidgetHeight, self.guiMatFilterColor.val, "Filter color applied for refracted light")DATA6DATA x7 height += guiHeightOffsetDATA08 drawText(10, height + 4, "Mirror color:")DATAH8 self.guiMatMirrorColor = Draw.ColorPicker(self.evEdit, 100, height,DATAdx9 210, guiWidgetHeight, self.guiMatMirrorColor.val, "Filter color applied for reflected light")DATAX:DATA : height += guiHeightOffsetDATA<p; self.guiMatIOR = Draw.Slider("IOR: ", self.evEdit, 10,DATA\(< height, 300, guiWidgetHeight, self.guiMatIOR.val, 1.0, 30.0, 0, "Index of refraction")DATA=DATA = height += guiHeightOffsetDATAL> self.guiMatTransmit = Draw.Slider("Transmit Filter: ", self.evEdit, 10,DATAx> height, 300, guiWidgetHeight, self.guiMatTransmit.val, 0.0, 1.0, 0, "Filter strength applied to refracted light")DATA?DATA P@ height += guiHeightOffsetDATAP@ self.guiMatDispersion = Draw.Slider("Dispersion Power: ", self.evEdit, 10,DATAA height, 300, guiWidgetHeight, self.guiMatDispersion.val, 0.0, 10000.0, 0, "Strength of dispersion effect, disabled when 0")DATABDATA (C height += guiHeightOffsetDATALC self.guiMatFakeShadow = Draw.Toggle("Fake shadows ", self.evEdit, 10,DATA height, 300, guiWidgetHeight, self.guiMatFakeShadow.val, "Let light straight through for shadow calculation. Not to be used with dispersion")iDATADDATA PE height += guiHeightOffsetDATATE height = drawTextLine(10, height, "Mappable texture slots, Yafaray <- Blender:")DATA4F height = drawTextLine(10, height, "Bump <- Nor")DATAhGDATA(G elif self.curMat['type'] == "blend":DATA<H #height = self.matObject.draw(height, guiWidgetHeight)DATA @I height += guiHeightOffsetDATA,I height = drawTextLine(10, height, " ")DATA`J height = drawTextParagraph(10, height, 300, "Choose the two materials you wish to blend. " +DATA`XK "You can weight them with the blend value or texture maps. Use the COL texture channel "+DATAL0L "of the blending material to blend two materials using a texture map.")DATALDATA xM height += guiHeightOffsetDATAN self.guiMatBlendMat1 = Draw.Menu(matMenuEntries, self.evEdit, 10, height, 150, guiWidgetHeight, self.guiMatBlendMat1.val, "Material 1")DATAO self.guiMatBlendMat2 = Draw.Menu(matMenuEntries, self.evEdit, 180, height, 150, guiWidgetHeight, self.guiMatBlendMat2.val, "Material 2")DATA PDATA P height += guiHeightOffsetDATAL8Q self.guiMatBlendValue = Draw.Slider("Blend value: ", self.evEdit, 10,DATAPR height, 150, guiWidgetHeight, self.guiMatBlendValue.val, 0.0, 1.0, 0, "")DATARDATA HS height += guiHeightOffsetDATASDATA`TDATATDATA `U def event(self, evt = None):DATAU print "mat evt"DATAV if evt == None:DATAW self.setPropertyList()DATAHW # set the parameters from the GUI to their respective ID propertiesDATA pX for el in self.connector:DATA(Y setParam(el[0],el[1],el[2],el[3])DATAYDATA((Z if self.curMat['type'] == "blend":DATA8Z mat = Blender.Material.Get()[self.guiMatMenu.val]DATA$x[ self.matObject = BlendMat(mat)DATA$\ elif evt == self.evMatFromObj:DATA\ try:DATAD8] mat = Blender.Object.GetSelected()[0].getData().materials[0]DATA0] index = Blender.Material.Get().index(mat)DATA ^ self.guiMatMenu.val = indexDATA8_ self.changeMat()DATA 1 except:DATA ` print "No object selected"DATA`DATA(a def changeMat(self):DATAa #print "change mat"DATAHb self.setPropertyList()DATAb for el in self.connector:DATA,xc setGUIVals(el[0], el[1], el[2], el[3])DATA dDATAd def refreshPreview(self):DATA88e cMat = Blender.Material.Get()[self.guiMatMenu.val]DATAeDATA8hf self.previewSize = int(self.guiMatPreviewSize.val)DATAgDATAXg imageMem = yafrayinterface.new_floatArray(self.previewSize * self.previewSize * 4)DATA@hh self.yRender.createPreview(cMat, self.previewSize, imageMem)DATA iDATA$i for x in range(self.previewSize):DATA(@j for y in range(self.previewSize):DATADj # first row is on the bottom, therefor the idx must be reversedDATAXk idx = (x + (self.previewSize - 1) * self.previewSize - self.previewSize * y) * 4DATA@pl col = yafrayinterface.floatArray_getitem(imageMem, idx + 0)DATA$(m colR = min(255, int(col * 255))DATA@m col = yafrayinterface.floatArray_getitem(imageMem, idx + 1)DATA$n colG = min(255, int(col * 255))DATA@ o col = yafrayinterface.floatArray_getitem(imageMem, idx + 2)DATA$o colB = min(255, int(col * 255))DATAxpDATA8p # still getting exceptions from time to time aboutDATA<q # values out of range which should be impossible usingDATA`5 # min aboveDATArDATA 5 try:DATA@ps self.previewImage.setPixelI(x, y, (colR, colG, colB, 255))DATA h6 except:DATApt print colR, colG, colBDATAuDATA0u yafrayinterface.delete_floatArray(imageMem)DATA0vDATAvDATA0w# ### tab render ### #DATAwDATA@xclass clTabRender:DATAx def __init__(self):DATA 6 # eventsDATA$y self.evShow = getUniqueValue()DATA$Hz self.evEdit = getUniqueValue()DATA,z self.evChangeRenderset = getUniqueValue()DATA,{ self.evChangeSetName = getUniqueValue()DATA8|DATA$| self.tabNum = getUniqueValue()DATAX}DATA8} # Sanne: sunsky, also add "Sunsky" to self.BGTypesDATA(~ self.evGetSunAngle = getUniqueValue()DATA(( self.evGetSunPos = getUniqueValue()DATA( self.evUpdateSun = getUniqueValue()DATA0h self.evSunNormalToNumber = getUniqueValue()DATA0 self.evSunNumberToNormal = getUniqueValue()DATADATA 7 # listsDATA self.connector = []DATA # class-specific typesDATA0 self.AATypes = ["box", "mitchell", "gauss"]DATAXP self.BGTypes = ["Single Color", "Gradient", "Texture", "Sunsky", "DarkTide's SunSky"]DATAl  self.LightingTypes = ["Direct lighting", "Photon mapping", "Pathtracing", "Bidirectional (EXPERIMENTAL)"]DATA$ self.LightingTypes += ["Debug"]DATAH self.DebugTypes = ["N", "dPdU", "dPdV", "NU", "NV", "dSdU", "dSdV"]DATA@h self.CausticTypes = ["None", "Path", "Photon", "Path+Photon"]DATAD  self.RenderSets = ["Set 1", "Set 2", "Set 3", "Set 4", "Set 5"]DATA4 self.VolumeIntTypes = ["None", "Single Scatter"] DATA$ #self.VolumeIntTypes += ["Sky"]DATA0DATAp7 # propertiesEDATA self.Renderer = {}DATA self.World = {}DATADATA  self.scene = Scene.Get()[0]DATA$0 #self.scene = Scene.GetCurrent()DATAXЍ if not self.scene.properties.has_key("YafRay"): self.scene.properties['YafRay']={}DATADATA@  if not self.scene.properties['YafRay'].has_key("Renderer"):DATA4؏ self.scene.properties['YafRay']['Renderer'] = {}DATADATA for r in self.RenderSets:DATAD if not self.scene.properties['YafRay']['Renderer'].has_key(r):DATA8` self.scene.properties['YafRay']['Renderer'][r] = {}DATAD self.Renderer = self.scene.properties['YafRay']['Renderer'][r]DATA 8 else:bleDATAD self.Renderer = self.scene.properties['YafRay']['Renderer'][r]DATAؔDATAX try:DATA@ؕ self.World = Blender.World.GetCurrent().properties['YafRay']DATA 9 except:.wDATA,ؖ Blender.World.New("World").setCurrent()DATA8 Blender.World.GetCurrent().properties['YafRay'] = {}DATA@0 self.World = Blender.World.GetCurrent().properties['YafRay']DATADATAh # gui elementsDATA, self.guiRenderSet = Draw.Create(0) # menuDATA4 self.guiRenderSetName = Draw.Create("") # menuDATAPDATA8Л self.guiRenderAASamples = Draw.Create(1) # numberboxDATA< self.guiRenderAAIncSamples = Draw.Create(1) # numberboxDATA88 self.guiRenderAAPasses = Draw.Create(1) # numberboxDATA< self.guiRenderAAThreshold = Draw.Create(0.0) # numberboxDATA4 self.guiRenderThreads = Draw.Create(1) # sliderDATA4P self.guiRenderGamma = Draw.Create(1.0) # sliderDATA8 self.guiRenderGammaInput = Draw.Create(1.0) # sliderDATA< self.guiRenderAAPixelWidth = Draw.Create(1.5) # numberboxDATA4h self.guiRenderFilterType = Draw.Create(0) # menuDATA8 self.guiRenderTranspShadow = Draw.Create(0) # toggleDATA4Ȣ self.guiRenderClampRGB = Draw.Create(0) # toggleDATA8x self.guiRenderClayRender = Draw.Create(0) # toggleDATA8( self.guiRenderDrawParams = Draw.Create(0) # toggleDATA<ؤ self.guiRenderCustomString = Draw.Create("None") # stringDATA0 self.guiRenderXML = Draw.Create(0) # toggleDATA48 self.guiRenderAutoSave = Draw.Create(0) # toggleDATA4 self.guiRenderToBlender = Draw.Create(0) # toggleDATADATA4 self.guiRenderLightType = Draw.Create(0) # menuDATA4Ȩ self.guiRenderCausticType = Draw.Create(0) # menuDATA8x self.guiRenderRaydepth = Draw.Create(2) # numberboxDATA<( self.guiRenderShadowDepth = Draw.Create(2) # numberboxDATADATA8` self.guiRenderDirCaustics = Draw.Create(0) # toggleDATA8 self.guiRenderDirPhotons = Draw.Create(0) # numberboxDATA< self.guiRenderDirCausticMix = Draw.Create(0) # numberboxDATA@x self.guiRenderDirCausticDepth = Draw.Create(0) # numberboxDATA@0 self.guiRenderDirCausticRadius = Draw.Create(0.0) # numberboxDATA0 self.guiRenderDirAO = Draw.Create(0) # ToggleDATA< self.guiRenderDirAOSamples = Draw.Create(0) # numberboxDATA<H self.guiRenderDirAODist = Draw.Create(0.0) # numberboxDATA@ self.guiRenderDirAOColor = Draw.Create(1.0, 1.0, 1.0) # colorDATADATA08 self.guiRenderUseBG = Draw.Create(0) # ToggleDATA4 self.guiRenderGIQuality = Draw.Create(0) # menuDATA8 self.guiRenderNoRecursive = Draw.Create(0) # ToggleDATA8@ self.guiRenderGIDepth = Draw.Create(2) # numberboxDATADATA8p self.guiRenderPhPhotons = Draw.Create(0) # numberboxDATA<  self.guiRenderPhDiffuseRad = Draw.Create(1.0) # numberboxDATA8ض self.guiRenderPhSearch = Draw.Create(0) # numberboxDATA< self.guiRenderPhCaustixMix = Draw.Create(0) # numberboxDATA0@ self.guiRenderPhFG = Draw.Create(0) # toggleDATA< self.guiRenderPhFGSamples = Draw.Create(0) # numberboxDATA< self.guiRenderPhFGBounces = Draw.Create(0) # numberboxDATA4X self.guiRenderPhShowMap = Draw.Create(0) # toggleDATADATA # world bg stuffDATADATA0 self.guiRenderBGType = Draw.Create(0) # menuDATA0@ self.guiRenderBGIBL = Draw.Create(0) # ToggleDATA< self.guiRenderBGIBLSamples = Draw.Create(1) # numberboxDATA8 self.guiRenderBGIBLRot = Draw.Create(0.0) # SliderDATA4P self.guiRenderBGPower = Draw.Create(1.0) # SliderDATA< self.guiRenderBGColor = Draw.Create(0.0,0.0,0.0) # colorDATA@ self.guiRenderBGHoriCol = Draw.Create(0.0,0.0,0.0) # colorDATA@p self.guiRenderBGZeniCol = Draw.Create(0.0,0.0,0.0) # colorDATA@( self.guiRenderBGHoriGCol = Draw.Create(0.0,0.0,0.0) # colorDATA@ self.guiRenderBGZeniGCol = Draw.Create(0.0,0.0,0.0) # colorDATA # Sanne: SunskyDATA<( self.guiRenderBGTurbidity = Draw.Create(1.0) # numberboxDATA8 self.guiRenderBGAVar = Draw.Create(1.0) # numberboxDATA8 self.guiRenderBGBVar = Draw.Create(1.0) # numberboxDATA8@ self.guiRenderBGCVar = Draw.Create(1.0) # numberboxDATA8 self.guiRenderBGDVar = Draw.Create(1.0) # numberboxDATA8 self.guiRenderBGEVar = Draw.Create(1.0) # numberboxDATA<P self.guiRenderBGFrom = Draw.Create(0.0,0.0,0.0) # normalDATA8 self.guiRenderBGFromX = Draw.Create(0.0) # numberboxDATA8 self.guiRenderBGFromY = Draw.Create(0.0) # numberboxDATA8h self.guiRenderBGFromZ = Draw.Create(0.0) # numberboxDATA8 self.guiRenderBGCreateSun = Draw.Create(0) # toggleDATA8 self.guiRenderBGSunPower = Draw.Create(0.0) # sliderDATA8x self.guiRenderBGSkyLight = Draw.Create(0) # toggleDATA<( self.guiRenderBGSkySamples = Draw.Create(0) # numberboxDATADATA` # DarkTide's SunskyDATA< self.guiRenderDSTurbidity = Draw.Create(2.0) # numberboxDATA4 self.guiRenderDSRealSun = Draw.Create(0) # toggleDATA8X self.guiRenderDSSunPower = Draw.Create(0.0) # sliderDATA8 self.guiRenderDSSkyBright = Draw.Create(1.0) # sliderDATA8 self.guiRenderDSSkyLight = Draw.Create(0) # toggleDATA<h self.guiRenderDSSkySamples = Draw.Create(0) # numberboxDATA4  self.guiRenderDSA = Draw.Create(1.0) # numberboxDATA4 self.guiRenderDSB = Draw.Create(1.0) # numberboxDATA4 self.guiRenderDSC = Draw.Create(1.0) # numberboxDATA40 self.guiRenderDSD = Draw.Create(1.0) # numberboxDATA4 self.guiRenderDSE = Draw.Create(1.0) # numberboxDATA< self.guiRenderDSAltitude = Draw.Create(0.0) # numberboxDATA4H self.guiRenderDSNight = Draw.Create(0) # toggleDATADATAx # volume integratorDATA8 self.guiRenderVolumeIntType = Draw.Create(0) # menuDATA@ self.guiRenderVolumeStepSize = Draw.Create(0.0) # numberboxDATA<p self.guiRenderVolumeAdaptive = Draw.Create(0) # toggleDATA<( self.guiRenderVolumeOptimize = Draw.Create(0) # toggleDATA@ self.guiRenderVolumeAttMapScale = Draw.Create(0) # numberboxDATA< self.guiRenderVolumeSkyST = Draw.Create(0.0) # numberboxDATA@P self.guiRenderVolumeSkyAlpha = Draw.Create(0.0) # numberboxDATADATA4 self.guiRenderDebugType = Draw.Create(0) # menuDATA48 self.guiRenderDebugMaps = Draw.Create(0) #toggleDATADATAHh self.Renderer = self.scene.properties['YafRay']['Renderer']['Set 1']DATA,( if not self.Renderer.has_key('setname'):DATA( self.Renderer['setname'] = "Set 1"DATApDATA self.setPropertyList()DATADATA for r in self.RenderSets:DATAP if not self.scene.properties['YafRay']['Renderer'][r].has_key('setname'):DATADh self.scene.properties['YafRay']['Renderer'][r]['setname'] = rDATAP( copyParams(self.Renderer, self.scene.properties['YafRay']['Renderer'][r])DATADATATp copyParamsOverwrite(self.Renderer, self.scene.properties['YafRay']['Renderer'])DATA@DATADATA@DATA@ # call once before and once after drawing and once in __init__DATAx def setPropertyList(self):DATADATA, if not self.Renderer.has_key('setname'):DATA$8 self.Renderer['setname'] = ""DATA8 self.guiRenderSetName.val = self.Renderer['setname']DATA else:DATA8 self.guiRenderSetName.val = self.Renderer['setname']DATADATA8DATA, # connect gui elements with id propertiesDATAT` # , , , DATA0 self.connector = [DATAP (self.guiRenderLightType, "lightType", self.LightingTypes, self.Renderer),DATAT (self.guiRenderCausticType, "caustic_type", self.CausticTypes, self.Renderer),DATA@X (self.guiRenderDirCaustics, "caustics", 0, self.Renderer),DATAH (self.guiRenderDirCausticDepth, "caustic_depth", 10, self.Renderer),DATAL (self.guiRenderDirCausticRadius, "caustic_radius", 0.25, self.Renderer),DATA8 (self.guiRenderDirAO, "do_AO", 0, self.Renderer),DATADH (self.guiRenderDirAOSamples, "AO_samples", 32, self.Renderer),DATAD (self.guiRenderDirAODist, "AO_distance", 1.0, self.Renderer),DATAL (self.guiRenderDirAOColor, "AO_color", (1.0, 1.0, 1.0), self.Renderer),DATAD (self.guiRenderGIQuality, "path_samples", 32, self.Renderer),DATADP (self.guiRenderNoRecursive, "no_recursive", 0, self.Renderer),DATA< (self.guiRenderGIDepth, "bounces", 5, self.Renderer),DATA@ (self.guiRenderUseBG, "use_background", 0, self.Renderer),DATA # General settingsDATA< (self.guiRenderRaydepth, "raydepth", 2, self.Renderer),DATAD (self.guiRenderShadowDepth, "shadowDepth", 2, self.Renderer),DATA< (self.guiRenderThreads, "threads", 1, self.Renderer),DATA@@ (self.guiRenderClayRender, "clayRender", 0, self.Renderer),DATA@ (self.guiRenderDrawParams, "drawParams", 0, self.Renderer),DATA4 (self.guiRenderXML, "xml", 0, self.Renderer),DATA<` (self.guiRenderAutoSave, "autoSave", 0, self.Renderer),DATAD (self.guiRenderToBlender, "imageToBlender", 0, self.Renderer),DATA8 (self.guiRenderGamma, "gamma", 1.8, self.Renderer),DATAD (self.guiRenderGammaInput, "gammaInput", 1.8, self.Renderer),DATADH (self.guiRenderCustomString, "customString", "", self.Renderer),DATAD (self.guiRenderTranspShadow, "transpShad", 0, self.Renderer),DATA< (self.guiRenderClampRGB, "clamp_rgb", 0, self.Renderer),DATA # AADATAD (self.guiRenderAASamples, "AA_minsamples", 1, self.Renderer),DATAH (self.guiRenderAAIncSamples, "AA_inc_samples", 1, self.Renderer),DATA< (self.guiRenderAAPasses, "AA_passes", 1, self.Renderer),DATAH8 (self.guiRenderAAThreshold, "AA_threshold", 0.05, self.Renderer),DATAH (self.guiRenderAAPixelWidth, "AA_pixelwidth", 1.5, self.Renderer),DATAL  (self.guiRenderFilterType, "filter_type", self.AATypes, self.Renderer),DATA  # photon settingsDATA@  (self.guiRenderPhPhotons, "photons", 500000, self.Renderer),DATAH  (self.guiRenderPhDiffuseRad, "diffuseRadius", 1.0, self.Renderer),DATA<  (self.guiRenderPhSearch, "search", 100, self.Renderer),DATAD@  (self.guiRenderPhCaustixMix, "caustic_mix", 100, self.Renderer),DATA< (self.guiRenderPhFG, "finalGather", 1, self.Renderer),DATA@ (self.guiRenderPhFGBounces, "fg_bounces", 3, self.Renderer),DATADp (self.guiRenderPhFGSamples, "fg_samples", 16, self.Renderer),DATA<0 (self.guiRenderPhShowMap, "show_map", 0, self.Renderer),DATA # background settingsDATA@ (self.guiRenderBGType, "bg_type", self.BGTypes, self.World),DATA08 (self.guiRenderBGIBL, "ibl", 0, self.World),DATA@ (self.guiRenderBGIBLSamples, "ibl_samples", 16, self.World),DATA< (self.guiRenderBGIBLRot, "rotation", 0.0, self.World),DATA8P (self.guiRenderBGPower, "power", 1.0, self.World),DATAD (self.guiRenderBGColor, "color", (0.0, 0.0, 0.0), self.World),DATAL (self.guiRenderBGHoriCol, "horizon_color", (1.0, 1.0, 0.5), self.World),DATAT (self.guiRenderBGHoriGCol, "horizon_ground_color", (.65, .6, .45), self.World),DATALX (self.guiRenderBGZeniCol, "zenith_color", (.57, .65, 1.0), self.World),DATAT  (self.guiRenderBGZeniGCol, "zenith_ground_color", (.28, .26, .2), self.World),DATA # Sanne: SunskyDATA@ (self.guiRenderBGTurbidity, "turbidity", 3.0, self.World),DATA88 (self.guiRenderBGAVar, "a_var", 1.0, self.World),DATA8 (self.guiRenderBGBVar, "b_var", 1.0, self.World),DATA8 (self.guiRenderBGCVar, "c_var", 1.0, self.World),DATA8H (self.guiRenderBGDVar, "d_var", 1.0, self.World),DATA8 (self.guiRenderBGEVar, "e_var", 1.0, self.World),DATA@ (self.guiRenderBGFrom, "from", (1.0, 1.0, 1.0), self.World),DATA<` (self.guiRenderBGCreateSun, "add_sun", 0, self.World),DATA@ (self.guiRenderBGSunPower, "sun_power", 1.0, self.World),DATAD (self.guiRenderBGSkyLight, "background_light", 0, self.World),DATAD  (self.guiRenderBGSkySamples, "light_samples", 8, self.World),DATAP! # DarkTide's SunskyDATA@! (self.guiRenderDSTurbidity, "dsturbidity", 2.0, self.World),DATA@" (self.guiRenderDSAltitude, "dsaltitude", 0.0, self.World),DATA0P# (self.guiRenderDSA, "dsa", 1.0, self.World),DATA0# (self.guiRenderDSB, "dsb", 1.0, self.World),DATA0$ (self.guiRenderDSC, "dsc", 1.0, self.World),DATA0H% (self.guiRenderDSD, "dsd", 1.0, self.World),DATA0% (self.guiRenderDSE, "dse", 1.0, self.World),DATA<& (self.guiRenderDSRealSun, "dsadd_sun", 0, self.World),DATA8P' (self.guiRenderDSNight, "dsnight", 0, self.World),DATA@( (self.guiRenderDSSunPower, "dssun_power", 1.0, self.World),DATA@( (self.guiRenderDSSkyBright, "dsbright", 1.0, self.World),DATADp) (self.guiRenderDSSkyLight, "dsbackground_light", 0, self.World),DATAD0* (self.guiRenderDSSkySamples, "dslight_samples", 8, self.World),DATA* # volume integratorDATAT+ (self.guiRenderVolumeIntType, "volType", self.VolumeIntTypes, self.Renderer),DATADP, (self.guiRenderVolumeStepSize, "stepSize", 1.0, self.Renderer),DATAD- (self.guiRenderVolumeAdaptive, "adaptive", 0, self.Renderer),DATAD- (self.guiRenderVolumeOptimize, "optimize", 0, self.Renderer),DATAH. (self.guiRenderVolumeAttMapScale, "attgridScale", 1, self.Renderer),DATA@P/ (self.guiRenderVolumeSkyST, "sigma_t", 0.1, self.Renderer),DATA@0 (self.guiRenderVolumeSkyAlpha, "alpha", 0.5, self.Renderer),DATA0DATAL@1 (self.guiRenderDebugType, "debugType", self.DebugTypes, self.Renderer),DATAL2 (self.guiRenderDebugMaps, "show_perturbed_normals", 0, self.Renderer)]DATA2DATAP3DATA3 for el in self.connector:DATAPh4 checkParam(el[0], el[1], el[2], el[3]) # adds missing params as property IDDATA05DATA5DATA06DATA6 def updateAllScenes(self):DATADH7 # ugly ass hack, copy the render settings from the first sceneDATA@8 # into all others, since the export only accesses the currentDATA 9 # scene.fDATA9DATA9 for s in Scene.Get():DATA: if not s == self.scene:DATA : print "copying properties"DATA(H; if s.properties.has_key('YafRay'):DATA ; del s.properties['YafRay']DATA < s.properties['YafRay'] = {}DATA<= # seemingly the easiest way to copy a prop group withDATA= # all its subgroupsDATAT`> s.properties['YafRay'] = self.scene.properties['YafRay'].convert_to_pyobject()DATA0?DATA?DATA(0@ def drawGeneralSettings(self, height):DATA@@ height = drawSepLineText(10, height, 320, "General settings")DATAADATAHB self.guiRenderRaydepth = Draw.Number("Raydepth: ", self.evEdit, 10,DATApB height, 150, guiWidgetHeight, self.guiRenderRaydepth.val, 0, 20, "Maximum depth for recursive raytracing")DATAPC self.guiRenderShadowDepth = Draw.Number("Shadow depth: ", self.evEdit, 180,DATAxD height, 150, guiWidgetHeight, self.guiRenderShadowDepth.val, 0, 20, "Max. depth for transparent shadows calculation (if enabled)")DATAxEDATAE height += guiHeightOffsetDATA@F self.guiRenderGamma = Draw.Slider("Gamma: ", self.evEdit, 10,DATAp@ height, 150, guiWidgetHeight, self.guiRenderGamma.val, 0.0, 5.0, 0, "Gamma correction applied to final output, inverse correction of textures and colors is performed")DATAHG self.guiRenderGammaInput = Draw.Slider("G. In: ", self.evEdit, 180,DATAtPH height, 150, guiWidgetHeight, self.guiRenderGammaInput.val, 0.0, 5.0, 0, "Gamma correction applied to input")DATA@IDATAI height += guiHeightOffsetDATAHXJ self.guiRenderClampRGB = Draw.Toggle("Clamp RGB", self.evEdit, 10,DATApK height, 150, guiWidgetHeight, self.guiRenderClampRGB.val, "Reduce the colors' brightness to a low dynamic.")DATATL self.guiRenderTranspShadow = Draw.Toggle("Transparent Shadows", self.evEdit, 180,DATAL height, 150, guiWidgetHeight, self.guiRenderTranspShadow.val, "Pass light through transparent objects, allow semi-transparent shadows")DATAM height += guiHeightOffsetDATALpN self.guiRenderClayRender = Draw.Toggle("Clay render", self.evEdit, 10,DATAx8O height, 150, guiWidgetHeight, self.guiRenderClayRender.val, "Override all materials with a white diffuse material")DATAH(P self.guiRenderThreads = Draw.Slider("Threads: ", self.evEdit, 180,DATAtP height, 150, guiWidgetHeight, self.guiRenderThreads.val, 0, 20, 0, "Number of threads to use for rendering" )DATAQDATAXR height += guiHeightOffsetDATAPR self.guiRenderToBlender = Draw.Toggle("Result to Blender", self.evEdit, 10,DATAS height, 150, guiWidgetHeight, self.guiRenderToBlender.val, "Save the rendering result into the Blender Image Viewer (slow)")DATAHT self.guiRenderAutoSave = Draw.Toggle("Auto save", self.evEdit, 180,DATAxpU height, 150, guiWidgetHeight, self.guiRenderAutoSave.val, "Save each rendering result automatically (use with GUI)")DATA`VDATAV height += guiHeightOffsetDATAPxW self.guiRenderDrawParams = Draw.Toggle("Draw render params", self.evEdit, 10,DATAp@X height, 150, guiWidgetHeight, self.guiRenderDrawParams.val, "Write the render parameters below the image")DATAH(Y self.guiRenderXML = Draw.Toggle("Output to XML", self.evEdit, 180,DATAdY height, 150, guiWidgetHeight, self.guiRenderXML.val, "Create XML output in the YFExport dir")DATAZDATA(H[ if self.guiRenderDrawParams.val == 1:DATA [ height += guiHeightOffsetDATA`\ self.guiRenderCustomString = Draw.String("Custom string: ", self.evEdit, 10, height, 320,DATAX] guiWidgetHeight, self.guiRenderCustomString.val, 50, "Custom string will be added to the info bar, use it for CPU, RAM etc.")DATAX^DATA^ return height;DATAh_DATA_ def draw(self, height):DATA` for el in self.connector:DATAPa setGUIVals(el[0], el[1], el[2], el[3]) # adds missing params as property IDDATAaDATA4`b drawText(10, height, "Render settings", "large")DATAcDATA<c height = drawSepLineText(10, height, 320, "Render set")DATAHdDATAd i = 0DATA$He renderSetMenu = "Render set %t|"DATAe for s in self.RenderSets:DATAhf renderSetMenu += self.scene.properties['YafRay']['Renderer'][s]['setname'] + " %x" + str(i) + "|"DATAH: i = i + 1dDATAgDATA0(h self.guiRenderSet = Draw.Menu(renderSetMenu,DATAlh self.evChangeRenderset, 10, height, 150, guiWidgetHeight, self.guiRenderSet.val, "Selects a render set")DATAXi self.guiRenderSetName = Draw.String("Name: ", self.evChangeSetName, 180, height, 150,DATAXj guiWidgetHeight, self.guiRenderSetName.val, 10, "Name of the current render set")DATAXkDATADk height = drawSepLineText(10, height, 320, "Method of lighting")DATAlDATAXm self.guiRenderLightType = Draw.Menu(makeMenu("Lighting method", self.LightingTypes),DATAtm self.evEdit, 10, height, 320, guiWidgetHeight, self.guiRenderLightType.val, "Choose light integration method")DATAnDATAXoDATALo if self.LightingTypes[self.guiRenderLightType.val] == "Direct lighting":DATALp height = drawSepLineText(10, height, 320, "Direct lighting settings")DATAhqDATA\q self.guiRenderDirCaustics = Draw.Toggle("Use Caustics", self.evEdit, 10, height, 150,DATA\r guiWidgetHeight, self.guiRenderDirCaustics.val, "Enable photon map for caustics only")DATA8s if self.guiRenderDirCaustics.val == 1: # do causticsDATA Ht height += guiHeightOffsetDATAHt self.guiRenderPhPhotons = Draw.Number("Photons", self.evEdit, 10,DATApu height, 150, guiWidgetHeight, self.guiRenderPhPhotons.val, 1, 100000000, "Number of photons to be shot")DATAPv self.guiRenderPhCaustixMix = Draw.Number("Caustic mix", self.evEdit, 180,DATAxPw height, 150, guiWidgetHeight, self.guiRenderPhCaustixMix.val, 1, 10000, "Max. number of photons to mix (blur)")DATA@xDATA x height += guiHeightOffsetDATA\Xy self.guiRenderDirCausticDepth = Draw.Number("Caustic depth", self.evEdit, 10, height,DATAt0z 150, guiWidgetHeight, self.guiRenderDirCausticDepth.val, 0, 50, "Max. number of scatter events for photons")DATA` { self.guiRenderDirCausticRadius = Draw.Number("Caustic radius", self.evEdit, 180, height,DATAp{ 150, guiWidgetHeight, self.guiRenderDirCausticRadius.val, 0.0, 100.0, "Max. radius to search for photons")DATA|DATA `} height += guiHeightOffsetDATAP} self.guiRenderDirAO = Draw.Toggle("Use AO", self.evEdit, 10, height, 150,DATAL~ guiWidgetHeight, self.guiRenderDirAO.val, "Enable ambient occlusion")DATA< if self.guiRenderDirAO.val == 1: # do Ambient occlusionDATA @ height += guiHeightOffsetDATAT؀ self.guiRenderDirAOSamples = Draw.Number("AO samples", self.evEdit, 10, height,DATAp 150, guiWidgetHeight, self.guiRenderDirAOSamples.val, 1, 1000, "Number of samples for ambient occlusion")DATAT self.guiRenderDirAODist = Draw.Number("AO distance", self.evEdit, 180, height,DATA@ 150, guiWidgetHeight, self.guiRenderDirAODist.val, 0.0, 10000.0, "Max. occlusion distance. Surfaces further away do not occlude ambient light")4EDATADATA ( height += guiHeightOffsetDATA, drawText(10, height + 4, "AO color:")DATA`h self.guiRenderDirAOColor = Draw.ColorPicker(self.evEdit, 120, height, 210, guiWidgetHeight,DATA0@ self.guiRenderDirAOColor.val, "AO color")DATADATAhDATAL elif self.LightingTypes[self.guiRenderLightType.val] == "Pathtracing":DATAD height = drawSepLineText(10, height, 320, "Pathtracer settings")DATAXp self.guiRenderCausticType = Draw.Menu(makeMenu("Caustic method", self.CausticTypes),DATAx@ self.evEdit, 10, height, 150, guiWidgetHeight, self.guiRenderCausticType.val, "Choose caustic rendering method")DATA0DATAh if self.guiRenderCausticType.val == 2 or self.guiRenderCausticType.val == 3: # do photon causticsDATA  height += guiHeightOffsetDATAH( self.guiRenderPhPhotons = Draw.Number("Photons", self.evEdit, 10,DATAp height, 150, guiWidgetHeight, self.guiRenderPhPhotons.val, 1, 100000000, "Number of photons to be shot")DATAPЎ self.guiRenderPhCaustixMix = Draw.Number("Caustic mix", self.evEdit, 180,DATAx height, 150, guiWidgetHeight, self.guiRenderPhCaustixMix.val, 1, 10000, "Max. number of photons to mix (blur)")DATADATA  height += guiHeightOffsetDATA\ self.guiRenderDirCausticDepth = Draw.Number("Caustic depth", self.evEdit, 10, height,DATAtx 150, guiWidgetHeight, self.guiRenderDirCausticDepth.val, 0, 50, "Max. number of scatter events for photons")DATA`h self.guiRenderDirCausticRadius = Draw.Number("Caustic radius", self.evEdit, 180, height,DATAp@ 150, guiWidgetHeight, self.guiRenderDirCausticRadius.val, 0.0, 100.0, "Max. radius to search for photons")DATA(DATA  height += guiHeightOffsetDATAL@ self.guiRenderGIDepth = Draw.Number("Depth", self.evEdit, 10, height,DATAd 150, guiWidgetHeight, self.guiRenderGIDepth.val, 0, 50, "Number of light bounces(path length)")DATAX self.guiRenderUseBG = Draw.Toggle("Use background", self.evEdit, 180, height, 150,DATAd guiWidgetHeight, self.guiRenderUseBG.val, "Include background when calculating indirect light")DATADATA  height += guiHeightOffsetDATAX self.guiRenderGIQuality = Draw.Number("Path samples", self.evEdit, 10, height, 150,DATAh guiWidgetHeight, self.guiRenderGIQuality.val, 0, 5000, "Number of path samples per pixel sample" )DATA\` self.guiRenderNoRecursive = Draw.Toggle("No Recursion", self.evEdit, 180, height, 150,DATAh8 guiWidgetHeight, self.guiRenderNoRecursive.val, "No recursive raytracing, only pure path tracing" )DATADATAL elif self.LightingTypes[self.guiRenderLightType.val] == "Photon mapping":DATA@` height = drawSepLineText(10, height, 320, "Photon settings")DATADATAL self.guiRenderGIDepth = Draw.Number("Depth", self.evEdit, 10, height,DATAp` 150, guiWidgetHeight, self.guiRenderGIDepth.val, 0, 50, "Maximum number of scattering events for photons")DATAXH self.guiRenderUseBG = Draw.Toggle("Use background", self.evEdit, 180, height, 150,DATAd guiWidgetHeight, self.guiRenderUseBG.val, "Include background when calculating indirect light")DATADATA x height += guiHeightOffsetDATAH self.guiRenderPhPhotons = Draw.Number("Photons", self.evEdit, 10,DATApХ height, 150, guiWidgetHeight, self.guiRenderPhPhotons.val, 1, 100000000, "Number of photons to be shot")DATAP self.guiRenderPhCaustixMix = Draw.Number("Caustic mix", self.evEdit, 180,DATA height, 150, guiWidgetHeight, self.guiRenderPhCaustixMix.val, 1, 10000, "Max. number of photons to mix (caustics blur)")DATAxDATA  height += guiHeightOffsetDATAP self.guiRenderPhDiffuseRad = Draw.Number("Diff. radius", self.evEdit, 10,DATA|X height, 150, guiWidgetHeight, self.guiRenderPhDiffuseRad.val, 0.01, 100.0, "Radius to search for non-caustic photons")DATADP self.guiRenderPhSearch = Draw.Number("Search", self.evEdit, 180,DATA height, 150, guiWidgetHeight, self.guiRenderPhSearch.val, 1, 10000, "Maximum number of non-caustic photons to be filtered")DATADATA  height += guiHeightOffsetDATAH  self.guiRenderPhFG = Draw.Toggle("Final gather", self.evEdit, 10,DATA` height, 150, guiWidgetHeight, self.guiRenderPhFG.val, "Use final gathering (recommended)")DATAL self.guiRenderPhFGBounces = Draw.Number("FG bounces", self.evEdit, 180,DATA height, 150, guiWidgetHeight, self.guiRenderPhFGBounces.val, 1, 20, "Allow gather rays to extend to paths of this length")DATAxDATA  height += guiHeightOffsetDATAL self.guiRenderPhFGSamples = Draw.Number("FG samples", self.evEdit, 10,DATAtX height, 150, guiWidgetHeight, self.guiRenderPhFGSamples.val, 1, 4096, "Number of samples for final gathering")DATAHH self.guiRenderPhShowMap = Draw.Toggle("Show map", self.evEdit, 180,DATA height, 150, guiWidgetHeight, self.guiRenderPhShowMap.val, "Directly show radiance map (disables final gathering step)")DATADATAD elif self.LightingTypes[self.guiRenderLightType.val] == "Debug":DATA@DATA@ height = drawSepLineText(10, height, 320, "Debug settings")DATAxDATAT self.guiRenderDebugType = Draw.Menu(makeMenu("Debug types", self.DebugTypes),DATATȹ self.evEdit, 10, height, 150, guiWidgetHeight, self.guiRenderDebugType.val, "")DATAP self.guiRenderDebugMaps = Draw.Toggle("Perturbed Normals", self.evEdit, 180,DATAx` height, 150, guiWidgetHeight, self.guiRenderDebugMaps.val, "Show the normals perturbed by bump and normal maps")DATAPDATAмDATAP # general settingsDATA, height = self.drawGeneralSettings(height)DATADATA? # AA settingsDATA<P height = drawSepLineText(10, height, 320, "AA settings")DATADATAH self.guiRenderAAPasses = Draw.Number("AA passes: ", self.evEdit, 10,DATAXO height, 150, guiWidgetHeight, self.guiRenderAAPasses.val, 0, 50, "Number of anti-aliasing passes. Adaptive sampling (passes > 1) uses different pattern")"DATAL self.guiRenderAAPixelWidth = Draw.Number("AA Pixelwidth: ", self.evEdit,DATA`X 180, height, 150, guiWidgetHeight, self.guiRenderAAPixelWidth.val, 0, 20, "AA filter size")DATA0DATA height += guiHeightOffsetDATAHH self.guiRenderAASamples = Draw.Number("AA samples: ", self.evEdit,DATAt 10, height, 150, guiWidgetHeight, self.guiRenderAASamples.val, 1, 256, "Number of samples for first AA pass")DATAP self.guiRenderAAIncSamples = Draw.Number("AA inc. samples: ", self.evEdit,DATA| 180, height, 150, guiWidgetHeight, self.guiRenderAAIncSamples.val, 1, 64, "Number of samples for additional AA passes")DATADATA8 height += guiHeightOffsetDATA\ self.guiRenderFilterType = Draw.Menu(makeMenu("Filter type ", self.AATypes), self.evEdit,DATAd 10, height, 150, guiWidgetHeight, self.guiRenderFilterType.val, "Filter type for anti-aliasing")DATAL self.guiRenderAAThreshold = Draw.Number("AA Threshold: ", self.evEdit,DATAP 180, height, 150, guiWidgetHeight, self.guiRenderAAThreshold.val, 0, 1, "Color threshold for additional AA samples in next pass")DATAPDATA # background settingsDATAD` height = drawSepLineText(10, height, 320, "Background settings")DATA DATAX self.guiRenderBGType = Draw.Menu(makeMenu("Background ", self.BGTypes), self.evEdit,DATA\p 10, height, 150, guiWidgetHeight, self.guiRenderBGType.val, "Sets the background type")DATAHDATA height += guiHeightOffsetDATA0` if self.World['bg_type'] == "Single Color":DATA, drawText(10, height + 4, "BG color:")DATA@ self.guiRenderBGColor = Draw.ColorPicker(self.evEdit, 120,DATATh height, 210, guiWidgetHeight, self.guiRenderBGColor.val, "Background color")DATA,8 elif self.World['bg_type'] == "Gradient":DATADATA0` drawText(10, height + 4, "Horizon color:")DATA` self.guiRenderBGHoriCol = Draw.ColorPicker(self.evEdit, 120, height, 210, guiWidgetHeight,DATA4 self.guiRenderBGHoriCol.val, "Horizon color")DATADATA  height += guiHeightOffsetDATA0 drawText(10, height + 4, "Zenith color:")DATA`P self.guiRenderBGZeniCol = Draw.ColorPicker(self.evEdit, 120, height, 210, guiWidgetHeight,DATA4( self.guiRenderBGZeniCol.val, "Zenith color")DATADATA X height += guiHeightOffsetDATA4 drawText(10, height + 4, "Hor. ground color:")DATA` self.guiRenderBGHoriGCol = Draw.ColorPicker(self.evEdit, 120, height, 210, guiWidgetHeight,DATA<x self.guiRenderBGHoriGCol.val, "Horizon ground color")DATA0DATA  height += guiHeightOffsetDATA4H drawText(10, height + 4, "Zen. ground color:")DATA` self.guiRenderBGZeniGCol = Draw.ColorPicker(self.evEdit, 120, height, 210, guiWidgetHeight,DATA< self.guiRenderBGZeniGCol.val, "Zenith ground color")DATADATA, elif self.World['bg_type'] == "Texture":DATA` self.guiRenderBGIBL = Draw.Toggle("Use IBL", self.evEdit, 10, height, 150, guiWidgetHeight,DATAx self.guiRenderBGIBL.val, "Use the background image as the light source for your image, HDRIs highly recommended!")DATA@x self.guiRenderBGIBLSamples = Draw.Number("IBL Samples: ",DATA self.evEdit, 180, height, 150, guiWidgetHeight, self.guiRenderBGIBLSamples.val, 1, 512, "Number of samples for direct lighting from background")REEDATA x height += guiHeightOffsetDATAH self.guiRenderBGIBLRot = Draw.Slider("Rotation: ", self.evEdit, 10,DATAp height, 150, guiWidgetHeight, self.guiRenderBGIBLRot.val, 0.0, 360.0, 0, "Rotation offset of background")DATADATA8 # Sanne: SunskyDATA, elif self.World['bg_type'] == "Sunsky":DATALp self.guiRenderBGTurbidity = Draw.Number("Turbidity: ", self.evEdit, 10,DATAl8 height, 150, guiWidgetHeight, self.guiRenderBGTurbidity.val, 1.0, 20.0, "Turbidity of the atmosphere")DATAL  self.guiRenderBGAVar = Draw.Number("A (HorBrght): ", self.evEdit, 180,DATA` height, 150, guiWidgetHeight, self.guiRenderBGAVar.val, 0.0, 10.0, "Horizon brightness")DATADATA @ height += guiHeightOffsetDATAH self.guiRenderBGBVar = Draw.Number("B (HorSprd): ", self.evEdit, 10,DATAl height, 150, guiWidgetHeight, self.guiRenderBGBVar.val, 0.0, 10.0, "Spread of horizon edge transition")DATAL self.guiRenderBGCVar = Draw.Number("C (SunBrght): ", self.evEdit, 180,DATA\H height, 150, guiWidgetHeight, self.guiRenderBGCVar.val, 0.0, 10.0, "Sun brightness")DATA DATA  height += guiHeightOffsetDATAH8 self.guiRenderBGDVar = Draw.Number("D (Sunsize): ", self.evEdit, 10,DATAT height, 150, guiWidgetHeight, self.guiRenderBGDVar.val, 0.0, 10.0, "Sun size")DATAL self.guiRenderBGEVar = Draw.Number("E (Backlight): ", self.evEdit, 180,DATA` height, 150, guiWidgetHeight, self.guiRenderBGEVar.val, 0.0, 10.0, "Backscattered light")DATAhDATA # sun directionDATA x height += guiHeightOffsetDATA8 buttonmargin = -(guiWidgetHeight + guiHeightOffset)DATA< normbuttonwidth = 3 * guiWidgetHeight + 2 * buttonmarginDATADx normbuttonstartY = height - normbuttonwidth + guiWidgetHeightDATA<8 coordbuttonstart = 180 + normbuttonwidth + buttonmarginDATA< coordbuttonwidth = 150 - normbuttonwidth - buttonmarginDATADATA\( self.guiRenderBGFromAngle = Draw.PushButton("From (get angle)", self.evGetSunAngle, 10,DATAH height, 150, guiWidgetHeight, "Get angle from selected sun lamp")DATAH self.guiRenderBGFrom = Draw.Normal(self.evSunNormalToNumber, 180,DATAd normbuttonstartY, normbuttonwidth, normbuttonwidth, self.guiRenderBGFrom.val, "Sun direction")DATA\` self.guiRenderBGFromX = Draw.Number("x: ", self.evSunNumberToNormal, coordbuttonstart,DATAh8 height, coordbuttonwidth, guiWidgetHeight, self.guiRenderBGFrom.val[0], -1, 1, "Sun x direction")DATADATA  height += guiHeightOffsetDATA`0 self.guiRenderBGFromPosition = Draw.PushButton("From (get position)", self.evGetSunPos, 10,DATAL height, 150, guiWidgetHeight, "Get position from selected sun lamp")DATA\ self.guiRenderBGFromY = Draw.Number("y: ", self.evSunNumberToNormal, coordbuttonstart,DATAh height, coordbuttonwidth, guiWidgetHeight, self.guiRenderBGFrom.val[1], -1, 1, "Sun y direction")DATADATA  height += guiHeightOffsetDATA\ self.guiRenderBGFromUpdate = Draw.PushButton("From (update sun)", self.evUpdateSun, 10,DATAlx height, 150, guiWidgetHeight, "Update position and angle of selected sun lamp according to GUI values")DATA\` self.guiRenderBGFromZ = Draw.Number("z: ", self.evSunNumberToNormal, coordbuttonstart,DATAh8 height, coordbuttonwidth, guiWidgetHeight, self.guiRenderBGFrom.val[2], -1, 1, "Sun z direction")DATA DATA  height += guiHeightOffsetDATA\0  self.guiRenderBGCreateSun = Draw.Toggle("Add real sun", self.evEdit, 10, height, 150,DATA8  guiWidgetHeight, self.guiRenderBGCreateSun.val, "")DATAH  self.guiRenderBGSunPower = Draw.Slider("Power: ", self.evEdit, 180,DATA\x  height, 150, guiWidgetHeight, self.guiRenderBGSunPower.val, 0.0, 10.0, 0, "Sun power")DATAP DATA  height += guiHeightOffsetDATATh self.guiRenderBGSkyLight = Draw.Toggle("Skylight", self.evEdit, 10, height, 150,DATA88 guiWidgetHeight, self.guiRenderBGSkyLight.val, "")DATAL self.guiRenderBGSkySamples = Draw.Number("Samples: ", self.evEdit, 180,DATAP height, 150, guiWidgetHeight, self.guiRenderBGSkySamples.val, 1, 128, "")DATAx DATA # DarkTide's SunskyDATA8 elif self.World['bg_type'] == "DarkTide's SunSky":DATAL8 self.guiRenderDSTurbidity = Draw.Number("Turbidity: ", self.evEdit, 10,DATAl height, 320, guiWidgetHeight, self.guiRenderDSTurbidity.val, 2.0, 12.0, "Turbidity of the athmosphere")DATA  height += guiHeightOffsetDATAX self.guiRenderDSA = Draw.Number("Brightness of horizon gradient: ", self.evEdit, 10,DATAtP height, 320, guiWidgetHeight, self.guiRenderDSA.val, -10.0, 10.0, "Darkening or brightening towards horizon")DATA@DATA  height += guiHeightOffsetDATAPX self.guiRenderDSB = Draw.Number("Luminance of horizon: ", self.evEdit, 10,DATAp  height, 320, guiWidgetHeight, self.guiRenderDSB.val, -10.0, 10.0, "Luminance gradient near the horizon")DATADATA  height += guiHeightOffsetDATAP  self.guiRenderDSC = Draw.Number("Solar region intensity: ", self.evEdit, 10,DATAp height, 320, guiWidgetHeight, self.guiRenderDSC.val, 0.0, 50.0, "Relative intensity of circumsolar region")DATADATA P height += guiHeightOffsetDATAX self.guiRenderDSD = Draw.Number("Width of circumsolar region: ", self.evEdit, 10,DATAd height, 320, guiWidgetHeight, self.guiRenderDSD.val, 0.0, 50.0, "Width of circumsolar region")DATADATA   height += guiHeightOffsetDATAP  self.guiRenderDSE = Draw.Number("Backscattered light: ", self.evEdit, 10,DATAhx! height, 320, guiWidgetHeight, self.guiRenderDSE.val, -30.0, 30.0, "Relative backscattered light")DATAX"DATA" # sun directionDATA h# height += guiHeightOffsetDATA8$ buttonmargin = -(guiWidgetHeight + guiHeightOffset)DATA<$ normbuttonwidth = 3 * guiWidgetHeight + 2 * buttonmarginDATADh% normbuttonstartY = height - normbuttonwidth + guiWidgetHeightDATA<(& coordbuttonstart = 180 + normbuttonwidth + buttonmarginDATA<& coordbuttonwidth = 150 - normbuttonwidth - buttonmarginDATA'DATA\( self.guiRenderBGFromAngle = Draw.PushButton("From (get angle)", self.evGetSunAngle, 10,DATAH( height, 150, guiWidgetHeight, "Get angle from selected sun lamp")DATAH) self.guiRenderBGFrom = Draw.Normal(self.evSunNormalToNumber, 180,DATAdp* normbuttonstartY, normbuttonwidth, normbuttonwidth, self.guiRenderBGFrom.val, "Sun direction")DATA\P+ self.guiRenderBGFromX = Draw.Number("x: ", self.evSunNumberToNormal, coordbuttonstart,DATAh(, height, coordbuttonwidth, guiWidgetHeight, self.guiRenderBGFrom.val[0], -1, 1, "Sun x direction")DATA-DATA - height += guiHeightOffsetDATA` . self.guiRenderBGFromPosition = Draw.PushButton("From (get position)", self.evGetSunPos, 10,DATAL. height, 150, guiWidgetHeight, "Get position from selected sun lamp")DATA\/ self.guiRenderBGFromY = Draw.Number("y: ", self.evSunNumberToNormal, coordbuttonstart,DATAh0 height, coordbuttonwidth, guiWidgetHeight, self.guiRenderBGFrom.val[1], -1, 1, "Sun y direction")DATAx1DATA 1 height += guiHeightOffsetDATA\2 self.guiRenderBGFromUpdate = Draw.PushButton("From (update sun)", self.evUpdateSun, 10,DATAlh3 height, 150, guiWidgetHeight, "Update position and angle of selected sun lamp according to GUI values")DATA\P4 self.guiRenderBGFromZ = Draw.Number("z: ", self.evSunNumberToNormal, coordbuttonstart,DATAh(5 height, coordbuttonwidth, guiWidgetHeight, self.guiRenderBGFrom.val[2], -1, 1, "Sun z direction")DATA6DATA 6 height += guiHeightOffsetDATAL 7 self.guiRenderDSAltitude = Draw.Number("Altitude: ", self.evEdit, 10,DATA7 height, 150, guiWidgetHeight, self.guiRenderDSAltitude.val, -1.0, 2.0, "Moves the sky dome above or below the camera position")DATAD8 self.guiRenderDSNight = Draw.Toggle("Night ", self.evEdit, 180,DATAd9 height, 150, guiWidgetHeight, self.guiRenderDSNight.val, "Activate experimental night mode")DATA:DATA ; height += guiHeightOffsetDATAX; self.guiRenderDSRealSun = Draw.Toggle("Add real sun", self.evEdit, 10, height, 150,DATALp< guiWidgetHeight, self.guiRenderDSRealSun.val, "Add a real sun light")DATAL8= self.guiRenderDSSunPower = Draw.Slider("Sun Power: ", self.evEdit, 180,DATA\> height, 150, guiWidgetHeight, self.guiRenderDSSunPower.val, 0.0, 10.0, 0, "Sun power")DATA>DATA X? height += guiHeightOffsetDATAX? self.guiRenderDSSkyLight = Draw.Toggle("Add Skylight", self.evEdit, 10, height, 150,DATA8@ guiWidgetHeight, self.guiRenderDSSkyLight.val, "")DATALpA self.guiRenderDSSkySamples = Draw.Number("Samples: ", self.evEdit, 180,DATAt8B height, 150, guiWidgetHeight, self.guiRenderDSSkySamples.val, 1, 256, "SkyLight and Sunlight sample number")DATA$(C height += guiHeightOffsetDATAXC self.guiRenderDSSkyBright = Draw.Slider("Sky Brightnes: ", self.evEdit, 10,DATAD height, 320, guiWidgetHeight, self.guiRenderDSSkyBright.val, 0.0, 10.0, 0, "Multiplier for Sky Brightness")DATAEDATA F height += guiHeightOffsetDATADF self.guiRenderBGPower = Draw.Slider("Power: ", self.evEdit, 10,DATApxG height, 150, guiWidgetHeight, self.guiRenderBGPower.val, 0.0, 20.0, 0, "Multiplier for background color")DATA`HDATAHDATA`I # volume integratorDATADI height = drawSepLineText(10, height, 320, "Volume Integrator")DATAlJ self.guiRenderVolumeIntType = Draw.Menu(makeMenu("Volume Integrator ", self.VolumeIntTypes), self.evEdit,DATAdK 10, height, 150, guiWidgetHeight, self.guiRenderVolumeIntType.val, "Set the volume integrator")DATAxL height += guiHeightOffsetDATAHM self.guiRenderVolumeStepSize = Draw.Number("step size", self.evEdit,DATAM 10, height, 150, guiWidgetHeight, self.guiRenderVolumeStepSize.val, 0, 100, "Exactness of volume calculation (in Blender units)")DATA4N if self.Renderer['volType'] == "Single Scatter":DATAHO self.guiRenderVolumeAdaptive = Draw.Toggle("adaptive", self.evEdit,DATA@P 180, height, 150, guiWidgetHeight, self.guiRenderVolumeAdaptive.val, "Exactness of volume calculation (in Blender units)")DATA 8Q height += guiHeightOffsetDATAHQ self.guiRenderVolumeOptimize = Draw.Toggle("optimize", self.evEdit,DATAR 180, height, 150, guiWidgetHeight, self.guiRenderVolumeOptimize.val, "Optimization, might lead to artifacts in some cases, increase grid resolution in that case")DATA S height += guiHeightOffsetDATAXHT self.guiRenderVolumeAttMapScale = Draw.Number("Att. grid resolution", self.evEdit,DATAU 10, height, 150, guiWidgetHeight, self.guiRenderVolumeAttMapScale.val, 1, 50, "Attenuation grid resolution (enable optimization for this)")DATA, V elif self.Renderer['volType'] == "Sky":DATADV self.guiRenderVolumeSkyST = Draw.Number("scale", self.evEdit,DATAXW 180, height, 150, guiWidgetHeight, self.guiRenderVolumeSkyST.val, 0.0001, 10, "")DATA XX height += guiHeightOffsetDATADX self.guiRenderVolumeSkyAlpha = Draw.Number("alpha", self.evEdit,DATAXY 10, height, 150, guiWidgetHeight, self.guiRenderVolumeSkyAlpha.val, 0.001, 10, "")DATAZDATA[DATA[DATA\ def event(self):DATA \ print "event for render tab"DATA(] self.setPropertyList()DATA]DATA@^ for el in self.connector:DATA(^ setParam(el[0],el[1],el[2],el[3])DATAx_DATAT_ copyParamsOverwrite(self.Renderer, self.scene.properties['YafRay']['Renderer'])DATA` Draw.Redraw(1)DATAXa self.updateAllScenes()DATAaDATApbDATAb def changeSet(self):DATAhc self.Renderer = self.scene.properties['YafRay']['Renderer'][self.RenderSets[self.guiRenderSet.val]]DATAT`d copyParamsOverwrite(self.Renderer, self.scene.properties['YafRay']['Renderer'])DATA0e self.setPropertyList()DATAe Draw.Redraw(1)DATAXf self.updateAllScenes()DATAfDATApg def changeSetName(self):DATA8h self.Renderer['setname'] = self.guiRenderSetName.valDATAXh self.scene.properties['YafRay']['Renderer']['setname'] = self.guiRenderSetName.valDATAi Draw.Redraw(1)DATAj self.updateAllScenes()DATAjDATA 0k # Sanne: functions for sunskyDATA4k def sunPosAngle(self, mode="get", val="position"):DATA(xl activeob = self.scene.objects.activeDATAm warningmessage = TrueDATAmDATA0@ if activeob:DATA pn if activeob.type == "Lamp":DATAo lamp = activeob.dataDATA(o if lamp.type == Lamp.Types["Sun"]:DATA@p warningmessage = FalseDATApDATAXq if mode == "get":DATAq if val == "position":DATA0r sunpos = Mathutils.Vector(activeob.loc)DATA(s if sunpos.length:DATAs sunpos.normalize()DATA,Xt self.guiRenderBGFromX.val = sunpos.xDATA,u self.guiRenderBGFromY.val = sunpos.yDATA,u self.guiRenderBGFromZ.val = sunpos.zDATADPv self.guiRenderBGFrom.val = (sunpos.x, sunpos.y, sunpos.z)DATAw self.event()DATAw elif val == "angle":DATAD8x # analogue to sunflow exporter sun lamp export for sunskyDATADx invmatrix = Mathutils.Matrix(activeob.getInverseMatrix())DATA4y self.guiRenderBGFromX.val = invmatrix[0][2]DATA4hz self.guiRenderBGFromY.val = invmatrix[1][2]DATA4{ self.guiRenderBGFromZ.val = invmatrix[2][2]DATAX{ self.guiRenderBGFrom.val = (invmatrix[0][2], invmatrix[1][2], invmatrix[2][2])DATA| self.event()DATA(}DATA} elif mode == "update":DATA0@~ # get gui from vector and normalize itDATA<~ vguifrom = Mathutils.Vector(self.guiRenderBGFrom.val)DATA if vguifrom.length:DATA8 vguifrom.normalize()DATAЀDATA<P # set location -----------------------------------DATA8 sundist = Mathutils.Vector(activeob.loc).lengthDATA0 activeob.setLocation(sundist * vguifrom)DATA`DATA< # compute and set rotation -----------------------DATA$ # initialize rotation angleDATA@ ang = 0.0DATADATA0 # set reference vector for angle to -zDATA, vtrack = Mathutils.Vector(0, 0, -1)DATAPDATA0Ї # compute sun ray direction from positionDATA x vray = vguifrom.copy()DATA if vguifrom.length:DATA$ vray.negate().normalize()DATAHDATA8Ȋ # get angle between sun ray and reference vectorDATA(x if vtrack.length and vray.length:DATA8 ang = Mathutils.AngleBetweenVecs(vtrack, vray)DATA @ else:DATA@ print "Zero length input vector - sun angle set to 0\n"DATAȍDATAH # get rotation axisDATA< axis = Mathutils.CrossVecs(vtrack, vray).normalize()DATADATAP # get quaternion representing rotation and get corresponding euler anglesDATA0 quat = Mathutils.Quaternion(axis, ang)DATA$ eul = quat.toEuler().unique()DATA(DATA( # convert euler values to radiansDATAH eulrad = []DATAؓ for i in eul:DATATh #eulrad.append((i * 3.14159265) / 180.0) # if module math is not availableDATA(8 eulrad.append(math.radians(i))DATAؕDATA8X # update sun rotation and redraw the 3D windowsDATA  activeob.setEuler(eulrad)DATA Window.Redraw()DATA0DATA if warningmessage:DATAH@ Draw.PupMenu("No or wrong selection %t | Please select a sun lamp.")DATA< print "No or wrong selection\nPlease select a sun lamp."DATADATA8DATA  def sunNormalToNumber(self):DATA<P self.guiRenderBGFromX.val = self.guiRenderBGFrom.val[0]DATA< self.guiRenderBGFromY.val = self.guiRenderBGFrom.val[1]DATA< self.guiRenderBGFromZ.val = self.guiRenderBGFrom.val[2]DATA8A self.event()DATADATA @ def sunNumberToNormal(self):DATAp؟ self.guiRenderBGFrom.val = (self.guiRenderBGFromX.val, self.guiRenderBGFromY.val, self.guiRenderBGFromZ.val)DATA: self.event()DATADATA # ### end classTabRender ### #DATA DATADATA DATADATA # ### tab object ### #DATADATA0class clTabObject:DATA def __init__(self):DATA A # eventspDATA$ self.evShow = getUniqueValue()DATA$8 self.evObjEdit = getUniqueValue()DATA(ا self.evCalcDist = getUniqueValue()DATAxDATA$ self.tabNum = getUniqueValue()DATADATA B # listsDATA` self.connector = []DATADATAp # class-specific typesDATAP self.cameraTypes = ["perspective", "orthographic", "angular", "architect"]DATA\Ь self.bokehTypes = ["disk1", "disk2", "triangle", "square", "pentagon", "hexagon", "ring"]DATA8 self.bokehBiasTypes = ["uniform", "edge", "center"]DATAPX self.LightTypes = ["Point", "Sphere", "Spot", "Sun", "Directional", "Area"]DATAP  self.VolumeRegionTypes = ["ExpDensityVolume", "UniformVolume", "NoiseVolume"]DATA< # self.VolumeRegionTypes += ["GridVolume", "SkyVolume"]DATADATA DATA # gui elementsDATA0DATA # light settingsDATA,@ self.guiLightType = Draw.Create(0) # menuDATA4 self.guiLightSamples = Draw.Create(1) # sliderDATA4 self.guiLightRadius = Draw.Create(1.0) # sliderDATA4H self.guiLightAngle = Draw.Create(0.0) # sliderDATA4 self.guiLightPower = Draw.Create(1.0) # numberboxDATA@ self.guiLightColor = Draw.Create(1.0,1.0,1.0) # color pickerDATA4` self.guiLightCreateGeom = Draw.Create(0) # toggleDATA4 self.guiLightInfinite = Draw.Create(0) # toggleDATADATA@ # camera settingsDATA,й self.guiCamType = Draw.Create(1) # menuDATA4x self.guiCamDOFDist = Draw.Create(0.0) # numberboxDATA8( self.guiCamDOFAperture = Draw.Create(0.0) # numberboxDATA0ػ self.guiCamBokehType = Draw.Create(0) # menuDATA8 self.guiCamBokehRotation = Draw.Create(0.0) # sliderDATA00 self.guiCamBokehBias = Draw.Create(0) # menuDATA0ؽ self.guiCamScale = Draw.Create(1.0) # sliderDATA0 self.guiCamMirrored = Draw.Create(0) # toggleDATA0( self.guiCamCircular = Draw.Create(0) # toggleDATA0п self.guiCamAngle = Draw.Create(90.0) # sliderDATA4x self.guiCamMaxAngle = Draw.Create(90.0) # sliderDATA0( self.guiCamCalcDist = Draw.Create(0) # pushbDATA0 self.guiCamDistObj = Draw.Create("") # stringDATAxDATA # mesh settingsDATA4 self.guiMeshLightEnable = Draw.Create(0) # toggleDATAD8 self.guiMeshLightColor = Draw.Create(1.0,1.0,1.0) # color pickerDATA< self.guiMeshLightDoubleSided = Draw.Create(0) # toggleDATA8 self.guiMeshLightPower = Draw.Create(0.0) # numberboxDATA8` self.guiMeshLightSamples = Draw.Create(0) # sliderDATADATA # mesh as volumeDATA8  self.guiMeshVolumeEnable = Draw.Create(0) # toggleDATA8 self.guiMeshVolumeRegionType = Draw.Create(0) # menuDATA4 self.guiMeshVIss = Draw.Create(0.0) # numberboxDATA40 self.guiMeshVIsa = Draw.Create(0.0) # numberboxDATA4 self.guiMeshVIg = Draw.Create(0.0) # numberboxDATA4 self.guiMeshVIle = Draw.Create(0.0) # numberboxDATA4@ self.guiMeshVIexpa = Draw.Create(0.0) # numberboxDATA4 self.guiMeshVIexpb = Draw.Create(0.0) # numberboxDATA< self.guiMeshVINoiseCover = Draw.Create(0.0) # numberboxDATA@X self.guiMeshVINoiseSharpness = Draw.Create(0.0) # numberboxDATADATA self.setPropertyList()DATA(DATADATA@( # call once before and once after drawing and once in __init__DATA( def setPropertyList(self, obj = None):DATADATA if obj == None:DATA try:DATA$ obj = Object.GetSelected()[0]DATA B except:DATA @C returnDATA@DATAH if not obj.properties.has_key("YafRay"): obj.properties['YafRay']={}DATADATA obType = obj.getType();DATA self.isCamera = FalseDATA( self.isLight = FalseDATADATA,8 # connect gui elements with id propertiesDATAT # , , , DATADATA0 if obType == 'Camera':DATA self.isCamera = TrueDATAX self.cam = obj.dataDATA\ self.connector = [(self.guiCamType, "type", self.cameraTypes, obj.properties['YafRay']),DATAL (self.guiCamDOFDist, "dof_distance", 0.0, obj.properties['YafRay']),DATAL (self.guiCamDOFAperture, "aperture", 0.0, obj.properties['YafRay']),DATAXP (self.guiCamBokehType, "bokeh_type", self.bokehTypes, obj.properties['YafRay']),DATAT( (self.guiCamBokehRotation, "bokeh_rotation", 0.0, obj.properties['YafRay']),DATA\ (self.guiCamBokehBias, "bokeh_bias", self.bokehBiasTypes, obj.properties['YafRay']),DATA@ (self.guiCamScale, "scale", 1.0, obj.properties['YafRay']),DATAD (self.guiCamCircular, "circular", 1, obj.properties['YafRay']),DATADH (self.guiCamMirrored, "mirrored", 0, obj.properties['YafRay']),DATA@ (self.guiCamAngle, "angle", 90, obj.properties['YafRay']),DATAH (self.guiCamMaxAngle, "max_angle", 90, obj.properties['YafRay'])]DATA elif obType == 'Lamp':DATA self.isLight = TrueDATA self.light = obj.dataDATA`@ self.connector = [(self.guiLightType, "type", self.LightTypes, obj.properties['YafRay']),DATAD (self.guiLightSamples, "samples", 8, obj.properties['YafRay']),DATAD (self.guiLightRadius, "radius", 1.0, obj.properties['YafRay']),DATAD (self.guiLightAngle, "angle", 0.5, obj.properties['YafRay']),DATADX (self.guiLightPower, "power", 1.0, obj.properties['YafRay']),DATAP (self.guiLightColor, "color", (1.0, 1.0, 1.0), obj.properties['YafRay']),DATAT (self.guiLightCreateGeom, "createGeometry", False, obj.properties['YafRay']),DATAL (self.guiLightInfinite, "infinite", True, obj.properties['YafRay'])]DATAx else:DATA` self.connector = [(self.guiMeshLightEnable, "meshlight", False, obj.properties['YafRay']),DATAT (self.guiMeshLightColor, "color", (1.0, 1.0, 1.0), obj.properties['YafRay']),DATAX (self.guiMeshLightDoubleSided, "double_sided", False, obj.properties['YafRay']),DATAHp (self.guiMeshLightPower, "power", 1.0, obj.properties['YafRay']),DATAL0 (self.guiMeshLightSamples, "samples", 16, obj.properties['YafRay']),DATAL (self.guiMeshVolumeEnable, "volume", False, obj.properties['YafRay']),DATAh (self.guiMeshVolumeRegionType, "volregionType", self.VolumeRegionTypes, obj.properties['YafRay']),DATAD (self.guiMeshVIss, "sigma_s", .1, obj.properties['YafRay']),DATAD` (self.guiMeshVIsa, "sigma_a", .1, obj.properties['YafRay']),DATA<  (self.guiMeshVIg, "g", 0, obj.properties['YafRay']),DATA@ (self.guiMeshVIle, "l_e", .0, obj.properties['YafRay']),DATA@ (self.guiMeshVIexpa, "a", 1.0, obj.properties['YafRay']),DATA@H (self.guiMeshVIexpb, "b", 1.0, obj.properties['YafRay']),DATAP (self.guiMeshVINoiseSharpness, "sharpness", 1.0, obj.properties['YafRay']),DATAH (self.guiMeshVINoiseCover, "cover", 1.0, obj.properties['YafRay'])]DATADATA for el in self.connector:DATAP checkParam(el[0], el[1], el[2], el[3]) # adds missing params as property IDDATAhDATADATAhDATA def draw(self, height):DATA try:DATA$ obj = Object.GetSelected()[0]DATA C except:DATA8 drawText(10, height, "Nothing selected", "large")DATA C returnpgDATADATA` self.setPropertyList()DATA for el in self.connector:DATA, setGUIVals(el[0], el[1], el[2], el[3])DATA8DATA4 if self.isCamera: # settings for camera objectsDATA4h drawText(10, height, "Camera settings", "large")DATADATA  height += guiHeightOffsetDATA00 drawText(10, height, "Camera: " + obj.name)DATADATA<X height = drawSepLineText(10, height, 320, "Camera type")DATADATAL self.guiCamType = Draw.Menu(makeMenu("Camera type", self.cameraTypes),DATA\X self.evObjEdit, 10, height, 150, guiWidgetHeight, self.guiCamType.val, "Camera type")DATA0 DATA8  if self.guiCamType.val == 0: # perspective cameraDATA` DATA@  height = drawSepLineText(10, height, 320, "Depth of field")DATA DATA self.guiCamBokehType = Draw.Menu(makeMenu("Bokeh type", self.bokehTypes), self.evObjEdit, 10, height, 150, guiWidgetHeight, self.guiCamBokehType.val, "Selects a shape for the blur disk")DATA@`  self.guiCamBokehRotation = Draw.Slider("Bokeh Rotation: ",DATA  self.evObjEdit, 180, height, 150, guiWidgetHeight, self.guiCamBokehRotation.val, 0, 180, 0, "Sets rotation for the blur disk")DATADATA  height += guiHeightOffsetDATA<0 self.guiCamDOFAperture = Draw.Number("Aperture Size: ",DATAXE self.evObjEdit, 10, height, 150, guiWidgetHeight, self.guiCamDOFAperture.val, 0, 20, "Lens aperture size, the larger the more blur (0 disables DOF)")DATAT0 self.guiCamBokehBias = Draw.Menu(makeMenu("Bokeh bias", self.bokehBiasTypes),DATAh self.evObjEdit, 180, height, 150, guiWidgetHeight, self.guiCamBokehBias.val, "Sets a bokeh bias")DATADATA ` height += guiHeightOffsetDATA8 self.guiCamDOFDist = Draw.Number("DOF Distance: ",DATA\ self.evObjEdit, 10, height, 150, guiWidgetHeight, self.guiCamDOFDist.val, 0.0, 1000.0)DATADATA  height += guiHeightOffsetDATAX self.guiCamDistObj = Draw.String("Obj: ", 1000, 10, height, 150, guiWidgetHeight,DATA|h self.guiCamDistObj.val, 50, "Enter the name of the object, that should be in focus, and push \"Calculate distance\".")DATA`` self.guiCamCalcDist = Draw.PushButton("Calculate distance", self.evCalcDist, 180, height,DATAT8 150, guiWidgetHeight, "Calculate the distance from the camera to the object.")DATADATA8 elif self.guiCamType.val == 1: # orthographic cameraDATAH8 height = drawSepLineText(10, height, 320, "Orthographic settings")DATA0 self.guiCamScale = Draw.Number("Scale: ",DATAt self.evObjEdit, 10, height, 150, guiWidgetHeight, self.guiCamScale.val, 0, 10000, "specify the ortho scaling")DATADATA4 elif self.guiCamType.val == 2: # angular cameraDATAD height = drawSepLineText(10, height, 320, "Angular settings")DATADATA4 self.guiCamMirrored = Draw.Toggle("Mirrored ",DATA| self.evObjEdit, 10, height, 150, guiWidgetHeight, self.guiCamMirrored.val, "Mirror x-direction (light probe images)")DATA4  self.guiCamCircular = Draw.Toggle("Circular ",DATAX! self.evObjEdit, 180, height, 150, guiWidgetHeight, self.guiCamCircular.val, "Blend out areas outside max_angle (circular iris)")DATAX"DATA " height += guiHeightOffsetDATA0p# self.guiCamAngle = Draw.Slider("Angle: ",DATA$ self.evObjEdit, 10, height, 150, guiWidgetHeight, self.guiCamAngle.val, 0, 180, 0, "Horizontal opening angle of the camera")DATA8% self.guiCamMaxAngle = Draw.Slider("Max. Angle: ",DATA% self.evObjEdit, 180, height, 150, guiWidgetHeight, self.guiCamMaxAngle.val, 0, 180, 0, "Horizontal opening angle of the camera")DATA&DATA0H' elif self.guiCamType.val == 3: # architectDATA@' height = drawSepLineText(10, height, 320, "Depth of field")DATA(DATA self.guiCamBokehType = Draw.Menu(makeMenu("Bokeh type", self.bokehTypes), self.evObjEdit, 10, height, 150, guiWidgetHeight, self.guiCamBokehType.val, "Selects a shape for the blur disk")DATA@p) self.guiCamBokehRotation = Draw.Slider("Bokeh Rotation: ",DATA(* self.evObjEdit, 180, height, 150, guiWidgetHeight, self.guiCamBokehRotation.val, 0, 180, 0, "Sets rotation for the blur disk")DATA(+DATA + height += guiHeightOffsetDATA<@, self.guiCamDOFAperture = Draw.Number("Aperture Size: ",DATA self.evObjEdit, 10, height, 150, guiWidgetHeight, self.guiCamDOFAperture.val, 0, 20, "Lens aperture size, the larger the more blur (0 disables DOF)")DATAT@- self.guiCamBokehBias = Draw.Menu(makeMenu("Bokeh bias", self.bokehBiasTypes),DATAh. self.evObjEdit, 180, height, 150, guiWidgetHeight, self.guiCamBokehBias.val, "Sets a bokeh bias")DATA.DATA p/ height += guiHeightOffsetDATA80 self.guiCamDOFDist = Draw.Number("DOF Distance: ",DATA\0 self.evObjEdit, 10, height, 150, guiWidgetHeight, self.guiCamDOFDist.val, 0.0, 1000.0)DATA1DATA 2 height += guiHeightOffsetDATAX2 self.guiCamDistObj = Draw.String("Obj: ", 1000, 10, height, 150, guiWidgetHeight,DATA|x3 self.guiCamDistObj.val, 50, "Enter the name of the object, that should be in focus, and push \"Calculate distance\".")DATA`p4 self.guiCamCalcDist = Draw.PushButton("Calculate distance", self.evCalcDist, 180, height,DATATH5 150, guiWidgetHeight, "Calculate the distance from the camera to the object.")DATA6DATA46 elif self.isLight: # settings for light objectsDATA4H7 drawText(10, height, "Light settings", "large")DATA7DATA x8 height += guiHeightOffsetDATA<9 height = drawTextLine(10, height, "Light: " + obj.name)DATA9DATA(H: #The lamp types. (from python docs)DATAHD # 'Lamp': 0DATAD # 'Sun' : 1DATAD # 'Spot': 2DATAE # 'Hemi': 3EDATAG # 'Area': 4DATAP< # 'Photon': 5DATA<DATA$`= lightTypeMenu = "Light type %t|"DATA>DATA > if (self.light.type == 0):DATAL? lightTypeMenu += "Point %x" + str(self.LightTypes.index("Point")) + "|"DATAP? lightTypeMenu += "Sphere %x" + str(self.LightTypes.index("Sphere")) + "|"DATA @ elif (self.light.type == 1):DATAH@A lightTypeMenu += "Sun %x" + str(self.LightTypes.index("Sun")) + "|"DATAXB lightTypeMenu += "Directional %x" + str(self.LightTypes.index("Directional")) + "|"DATA B elif (self.light.type == 2):DATALhC lightTypeMenu += "Spot %x" + str(self.LightTypes.index("Spot")) + "|"DATA 0D elif (self.light.type == 4):DATALD lightTypeMenu += "Area %x" + str(self.LightTypes.index("Area")) + "|"DATAEDATAFDATA F height += guiHeightOffsetDATA@(G self.guiLightType = Draw.Menu(lightTypeMenu, self.evObjEdit,DATAhG 10, height, 150, guiWidgetHeight, self.guiLightType.val, "Assign light type to the selected light")DATAHDATA @I height += guiHeightOffsetDATA,I drawText(10, height + 4, "Light color:")DATA@J self.guiLightColor = Draw.ColorPicker(self.evObjEdit, 120,DATAL8K height, 210, guiWidgetHeight, self.guiLightColor.val, "Light color")DATALDATA L height += guiHeightOffsetDATA@M self.guiLightPower = Draw.Number("Power: ", self.evObjEdit,DATApM 10, height, 150, guiWidgetHeight, self.guiLightPower.val, 0.0, 10000.0, "Intensity multiplier for color")DATANDATA 8O height += guiHeightOffsetDATA4O if obj.properties['YafRay']['type'] == "Area": DATADP self.guiLightSamples = Draw.Slider("Samples: ", self.evObjEdit,DATA@Q 180, height, 150, guiWidgetHeight, self.guiLightSamples.val, 0, 64, 0, "Number of samples to be taken for direct lighting")DATAd@R self.guiLightCreateGeom = Draw.Toggle("Make light visible", self.evObjEdit, 10, height, 150,DATA S guiWidgetHeight, self.guiLightCreateGeom.val, "Creates a visible plane in the dimensions of the area light during the render.")DATA TDATA8T elif obj.properties['YafRay']['type'] == "Sphere":DATADPU self.guiLightRadius = Draw.Number("Radius: ", self.evObjEdit,DATAdV 10, height, 150, guiWidgetHeight, self.guiLightRadius.val, 0, 100.0, "Radius of sphere light")DATADV self.guiLightSamples = Draw.Slider("Samples: ", self.evObjEdit,DATAW 180, height, 150, guiWidgetHeight, self.guiLightSamples.val, 0, 64, 0, "Number of samples to be taken for direct lighting")DATA X height += guiHeightOffsetDATAdHY self.guiLightCreateGeom = Draw.Toggle("Make light visible", self.evObjEdit, 10, height, 150,DATA(Z guiWidgetHeight, self.guiLightCreateGeom.val, "Creates a visible plane in the dimensions of the area light during the render.")DATA([DATA4[ elif obj.properties['YafRay']['type'] == "Sun":DATA@X\ self.guiLightAngle = Draw.Number("Angle: ", self.evObjEdit,DATA|] 10, height, 150, guiWidgetHeight, self.guiLightAngle.val, 0, 80.0,"Angle of the cone in degrees (shadow softness)")DATAD^ self.guiLightSamples = Draw.Slider("Samples: ", self.evObjEdit,DATA^ 180, height, 150, guiWidgetHeight, self.guiLightSamples.val, 0, 64, 0, "Number of samples to be taken for direct lighting")DATA_DATA<H` elif obj.properties['YafRay']['type'] == "Directional":DATADa self.guiLightInfinite = Draw.Toggle("Infinite", self.evObjEdit,DATAa 10, height, 150, guiWidgetHeight, self.guiLightInfinite.val, "Determines if light is infinite or filling a semi-infinite cylinder")DATA(b if not self.guiLightInfinite.val:DATADhc self.guiLightRadius = Draw.Number("Radius: ", self.evObjEdit,DATA(d 180, height, 150, guiWidgetHeight, self.guiLightRadius.val, 0, 10000.0, "Radius of semi-infinit cylinder (only applies if infinite=false)")DATA8eDATALe elif not self.isCamera and not self.isLight: # settings for mesh objectsDATA8f drawText(10, height, "Meshobject settings", "large")DATA0gDATA g height += guiHeightOffsetDATA<Hh height = drawTextLine(10, height, "Object: " + obj.name)DATAiDATA i height += guiHeightOffsetDATATj self.guiMeshLightEnable = Draw.Toggle("Enable meshlight ", self.evObjEdit, 10,DATA`j height, 150, guiWidgetHeight, self.guiMeshLightEnable.val, "Makes the mesh emit light.")DATAkDATA$@l if self.guiMeshLightEnable.val:DATA l height += guiHeightOffsetDATA4xm drawText(10, height + 4, "Meshlight color:")DATAD(n self.guiMeshLightColor = Draw.ColorPicker(self.evObjEdit, 120,DATATn height, 210, guiWidgetHeight, self.guiMeshLightColor.val, "Meshlight color")DATAoDATA 8p height += guiHeightOffsetDATATp self.guiMeshLightDoubleSided = Draw.Toggle("Double Sided ", self.evObjEdit, 10,DATApq height, 150, guiWidgetHeight, self.guiMeshLightDoubleSided.val, "Emit light at both sides of every face.")DATAPr self.guiMeshLightPower = Draw.Number("Power", self.evObjEdit, 180, height,DATAhPs 150, guiWidgetHeight, self.guiMeshLightPower.val, 0.0, 100.0, "Intensity multiplier for color")DATA0tDATA t height += guiHeightOffsetDATALHu self.guiMeshLightSamples = Draw.Slider("Samples: ", self.evObjEdit, 10,DATAv height, 150, guiWidgetHeight, self.guiMeshLightSamples.val, 0, 512, 0, "Number of samples to be taken for direct lighting")DATAwDATA w height += guiHeightOffsetDATAP(x self.guiMeshVolumeEnable = Draw.Toggle("Enable volume", self.evObjEdit, 10,DATApx height, 150, guiWidgetHeight, self.guiMeshVolumeEnable.val, "Makes the mesh a volume at its bounding box.")DATA$y if self.guiMeshVolumeEnable.val:DATA xz height += guiHeightOffsetDATAt{ self.guiMeshVolumeRegionType = Draw.Menu(makeMenu("Volume Region ", self.VolumeRegionTypes), self.evObjEdit,DATAd| 10, height, 150, guiWidgetHeight, self.guiMeshVolumeRegionType.val, "Set the volume region")DATA | height += guiHeightOffsetDATADx} self.guiMeshVIsa = Draw.Number("sigma a", self.evObjEdit, 10,DATA`8~ height, 150, guiWidgetHeight, self.guiMeshVIsa.val, 0.0, 1.0, "Absorption coefficient")DATA  height += guiHeightOffsetDATAD self.guiMeshVIss = Draw.Number("sigma s", self.evObjEdit, 10,DATA`p height, 150, guiWidgetHeight, self.guiMeshVIss.val, 0.0, 1.0, "Scattering coefficient")DATAHDATA ȁ #height += guiHeightOffsetDATA@` #self.guiMeshVIle = Draw.Number("L e", self.evObjEdit, 10,DATAX # height, 150, guiWidgetHeight, self.guiMeshVIle.val, 0.0, 1.0, "Emitted light")DATA  #height += guiHeightOffsetDATA< #self.guiMeshVIg = Draw.Number("g", self.evObjEdit, 10,DATA\8 # height, 150, guiWidgetHeight, self.guiMeshVIg.val, -1.0, 1.0, "Phase coefficient")DATADATA` if self.guiMeshVolumeRegionType.val == self.VolumeRegionTypes.index("ExpDensityVolume"):DATA h height += guiHeightOffsetDATAD self.guiMeshVIexpa = Draw.Number("Height", self.evObjEdit, 10,DATAP height, 150, guiWidgetHeight, self.guiMeshVIexpa.val, 0.0, 1000.0, "")DATA  height += guiHeightOffsetDATAH  self.guiMeshVIexpb = Draw.Number("Steepness", self.evObjEdit, 10,DATAL height, 150, guiWidgetHeight, self.guiMeshVIexpb.val, 0.0, 10.0, "")DATADATA\( elif self.guiMeshVolumeRegionType.val == self.VolumeRegionTypes.index("NoiseVolume"):DATA  height += guiHeightOffsetDATAT self.guiMeshVINoiseSharpness = Draw.Number("Sharpness", self.evObjEdit, 10,DATAXh height, 150, guiWidgetHeight, self.guiMeshVINoiseSharpness.val, 0.01, 1.0, "")DATA 8 height += guiHeightOffsetDATALЏ self.guiMeshVINoiseCover = Draw.Number("Cover", self.evObjEdit, 10,DATAP height, 150, guiWidgetHeight, self.guiMeshVINoiseCover.val, 0.0, 1.0, "")DATA`DATADATA` def event(self):DATA self.setPropertyList()DATA for el in self.connector:DATA(  setParam(el[0],el[1],el[2],el[3])DATADATA@ def calcDist(self):DATAЕ try:DATA,P obj = Object.Get(self.guiCamDistObj.val)DATA hG except:mpDATA 0t returnDATADATA  cam = Object.GetSelected()[0]DATA8 dist = math.sqrt(math.pow(obj.loc[0]-cam.loc[0],2) +DATA,P math.pow(obj.loc[1]-cam.loc[1],2) +DATA, math.pow(obj.loc[2]-cam.loc[2],2))DATA4 cam.properties['YafRay']['dof_distance'] = distDATAPDATAЛDATA P# ### end classTabObject ### #DATADATAhDATADATA<hdef event(evt, val): # the function to handle input eventsDATAX  global lastMousePosX, lastMousePosY, guiDrawOffset, middlePressed, currentSelectionDATADATA,p mouseX, mouseY = Window.GetMouseCoords()DATADATA if middlePressed:DATAP( if Window.GetMouseButtons() & Window.MButs['M']: # still pressed = draggingDATA( mouseDeltaY = lastMousePosY - mouseYDATA  guiDrawOffset -= mouseDeltaYDATA( lastMousePosX = mouseXDATA lastMousePosY = mouseYDATAt Draw.Draw()EDATA  else: # not pressed any moreDATA8 middlePressed = FalseDATAlЦ elif not middlePressed and Window.GetMouseButtons() & Window.MButs['M']: # not yet pressed, start draggingDATA lastMousePosX = mouseXDATAP lastMousePosY = mouseYDATA middlePressed = TrueDATAxDATA # exit when user presses QDATA if evt == Draw.QKEY:DATAt Draw.Exit()EEDATA  returnDATA elif evt == Draw.RKEY:DATA<@ # execute all init methods to ensure all properties areDATAD # initialized. only on objects and materials, render settingsDATAD # seem to be pointless, since they should be set by the user atDATAx # least once in any caseDATA4 for obj in Blender.Scene.GetCurrent().objects:DATA$ TabObject.setPropertyList(obj)DATA(` for mat in Blender.Material.Get():DATA$ TabMaterial.setPropertyList(mat)DATA yRender = yafrayRender()DATA8 yRender.render()DATAȲDATA<H # redraw the UI if the selection changed from last eventDATA try:DATA( selection = Object.GetSelected()[0]DATA  except:DATAh selection = NoneDATA$ if currentSelection != selection:DATA  currentSelection = selectionDATA0 Draw.Redraw(0)DATADATA@DATADdef button_event(evt): # the function to handle Draw Button eventsDATA P_ global TabDATAȹDATA P if evt:DATA Draw.Redraw(0)DATA DATA if evt == evShowHelp:DATA@ Tab = helpTabDATAHx elif evt == evRender or evt == evRenderAnim or evt == evRenderView:DATA<8 # execute all init methods to ensure all properties areDATAD # initialized. only on objects and materials, render settingsDATAD # seem to be pointless, since they should be set by the user atDATAp # least once in any caseDATA4 for obj in Blender.Scene.GetCurrent().objects:DATA$ TabObject.setPropertyList(obj)DATA(X for mat in Blender.Material.Get():DATA$ TabMaterial.setPropertyList(mat)DATA yRender = yafrayRender()DATA0 if evt == evRender:DATA yRender.render()DATAP elif evt == evRenderView:DATA yRender.render(True)DATAx elif evt == evRenderAnim:DATA| popupMsg = "Render animation (can be stopped with ESC in the GUI or Ctrl+C on the console), continue?%t|Yes%x0|No%x1"DATA$ result = Draw.PupMenu(popupMsg)DATA if result == 0:DATA8 yRender.renderAnim()DATA  elif evt == TabObject.evShow:DATAh Tab = TabObject.tabNumDATA$ elif evt == TabMaterial.evShow:DATA Tab = TabMaterial.tabNumDATA8 TabMaterial.changeMat()DATA$ elif evt == TabMaterial.evEdit:DATAp TabMaterial.event()DATA( elif evt == TabMaterial.evChangeMat:DATA TabMaterial.changeMat()DATA(8 elif evt == TabMaterial.evMatFromObj:DATA TabMaterial.event(evt)DATA,p elif evt == TabMaterial.evRefreshPreview:DATA  TabMaterial.refreshPreview()DATA$ elif evt == TabRenderer.evShow:DATAP Tab = TabRenderer.tabNumDATA$ elif evt == TabRenderer.evEdit:DATA TabRenderer.event()DATA, elif evt == TabRenderer.evChangeRenderset:DATA TabRenderer.changeSet()DATA,X elif evt == TabRenderer.evChangeSetName:DATA  TabRenderer.changeSetName()DATA # Sanne: sunskyDATA(( elif evt == TabRenderer.evGetSunAngle:DATA, TabRenderer.sunPosAngle("get", "angle")DATA(p elif evt == TabRenderer.evGetSunPos:DATA0 TabRenderer.sunPosAngle("get", "position")DATA( elif evt == TabRenderer.evUpdateSun:DATA$X TabRenderer.sunPosAngle("update")DATA0 elif evt == TabRenderer.evSunNormalToNumber:DATA$ TabRenderer.sunNormalToNumber()DATA0@ elif evt == TabRenderer.evSunNumberToNormal:DATA$ TabRenderer.sunNumberToNormal()DATADATA$ elif evt == TabObject.evObjEdit:DATA TabObject.event()DATA$8 elif evt == TabObject.evCalcDist:DATA TabObject.calcDist()DATAhDATA Draw.Redraw(1)DATA0DATA# end button_event()DATA@DATADATA@DATA # Help menuDATAHDATAdef drawHelp(height):DATA X y = heightDATADATA(` drawText(10, height, "Help", "large")DATA< #y = drawTextLine(20, y, "Object/Light/Camera:", "large")DATA8 y = drawSepLineText(10, y, 320, "Object/Light/Camera")DATA\h y = drawTextParagraph(20, y, 300, "Objects can act as light sources, settable here. \n\DATA@ \n\DATAL The light type must be set in the blender UI and afterwards *also* in the\DATAP script. Yafray light types are \"mapped\" onto blender lights, like so: \n\DATA0P Blender: Sun\t\tYafray: Sun, Directional \n\DATA, Blender: Lamp\t\tYafray: Point, Sphere \n\DATA$ Blender: Area\t\tYafray: Area \n\DATA$@ Blender: Spot\t\tYafray: Spot \n\DATAL All other parameters are set in the script, blender's settings won't have\DATA any effect. \n\DATA8 \n\DATAD Camera settings for DOF and type of camera (check out the angular\DATA<x camera for real 360 deg. lightprobes/angular maps ;-))")DATA0DATA0 y = drawSepLineText(10, y, 320, "Materials")DATATX y = drawTextParagraph(20, y, 300, "First off, you need to have a blender material\DATA\( i.e., \"Add New\" at Blender's \"Material Button\". Materials are still assigned in the\DATA Blender-way. \n\DATA@ But: The material's color etc. are solely set in this script.\DATAPH Only the textures are set in the blender UI (Texture, Map Input, Map to tabs)\DATAD Of course, not all texture slots are supported by all materials,\DATA@ see the material itself to see, which slots are supported.")DATADATA4 y = drawSepLineText(10, y, 320, "Render settings")DATAd y = drawTextParagraph(20, y, 300, "Pretty straight forward. If you use >Texture< as background,\DATAD the blender world texture will be used. The texture type (i.e.\DATALX angular, spherical, tube) is still set in the blender UI, low and high\DATAH  range maps are possible as backgrounds, but if you want to use IBL,\DATA  you should use a HDRI map.")DATAxDATADATAxDATADATAxDATA0def gui(): # the function to draw the screenDATA  size = Window.GetAreaSize()DATA 8 BGL.glClearColor(.7,.7,.7,1)DATA( BGL.glClear(BGL.GL_COLOR_BUFFER_BIT)DATAp BGL.glColor3f(1,1,1)DATADATA( height = size[1] - 25 + guiDrawOffsetDATA\  Draw.PushButton("R E N D E R", evRender, 10, height, 140, guiWidgetHeight, "Render image")DATA| Draw.PushButton("Render anim", evRenderAnim, 150, height, 90, guiWidgetHeight, "Render animation into Blender output dir")DATAl Draw.PushButton("Render view", evRenderView, 240, height, 90, guiWidgetHeight, "Render current 3D view")DATADATAX height += guiHeightOffsetDATAx Draw.PushButton("Object/Light/Camera", TabObject.evShow, 10, height, 140, guiWidgetHeight, "Edit object properties")DATAh Draw.PushButton("Material", TabMaterial.evShow, 150, height, 90, guiWidgetHeight, "Edit materials")DATAp Draw.PushButton("Settings", TabRenderer.evShow, 240, height, 90, guiWidgetHeight, "Edit the render settings")DATADATA(  height += guiHeightOffsetDATAX  Draw.PushButton("Help", evShowHelp, 240, height, 90, guiWidgetHeight, "Short help")DATA DATA  height -= 10DATA  drawHLine(10, height, 320)DATA0  height -= 20DATA DATA48  if Tab == TabObject.tabNum: # settings for objectsDATA  TabObject.draw(height)DATA< elif Tab == TabMaterial.tabNum: # settings for materialsDATA8 TabMaterial.draw(height)DATA< elif Tab == TabRenderer.tabNum: # settings for rendererDATA TabRenderer.draw(height)DATA0  elif Tab == helpTab: # settings for materialsDATA drawHelp(height)DATAX else:DATA< drawText(10, height, "Select a tab from above.", "large")DATADATADATA# "main" programDATA DATAguiHeightOffset = -20DATA0guiWidgetHeight = 15DATAguiDrawOffset = 0DATAPlastMousePosX = 0DATAlastMousePosY = 0DATApmiddlePressed = FalseDATAcurrentSelection = NoneDATADATATab = getUniqueValue()DATAnoTab = getUniqueValue()DATA8helpTab = getUniqueValue()DATADATA P# eventsDATA evShowHelp = getUniqueValue()DATA pevRenderView = getUniqueValue()DATAevRender = getUniqueValue()DATA evRenderAnim = getUniqueValue()DATA8DATA TabMaterial = clTabMaterial()DATAP TabRenderer = clTabRender()DATA TabObject = clTabObject()DATAH!Draw.Register(gui, event, button_event) # registering the 3 callbacksOBPٲq( OBCameraamera.001 в@d9޾#@???h?nZѶv?ս>~?nZ6ؐ r?ԯp?M=>@d9޾#@??????v]c֍0?LE0˼?jx4[??W$1ú1?D۩ ?Z?OBd????> P?u=??????DATAL(P(PDATAL(PYafRayPU DATALP(Qtype DATAperspectiveOCK!DATAL(QQPdof_distanceDATALQ(R(QapertureDATAL(RRQbokeh_type0@DATA0@disk1DATALR(S(Rbokeh_rotationDATAL(SSRbokeh_bias2DATA 2uniformOCK!DATALS(T(Sscale?DATAL(TTScircularDATALT(U(TmirroredDATAL(UUTangleZDATALU(Umax_angleZOBP( q#ٲOBCubepherep ) + +d><???[^\?{H{H?[^\??d><??????]^\3+??у?M?D6 Gr?FQB?B?>@V@#@?DOBd??<?>Q8>u=????@????8-yDATALpDATALYafRayp DATALpmeshlightDATALpcolorpDATAp???DATAL8double_sidedDATAL8power?DATAL88samplesDATAL8volumeDATAL8volregionType8DATA8ExpDensityVolumeDATALsigma_s?DATALsigma_a?DATALgDATALl_eDATALa?DATALb?DATAL sharpness?DATAL cover?DATADATAl +VBevel'=AOBP 1qX8#OBLamp.001 ٲ7Al??;e5% ?@a9޾#@?+rU?c*a?7,>25nr?i>?xݾL??p2пaG3?zpڍezl.?$4%>Th1?+e*a? 95:,rr?tU?>k>ϳP?DOBd?? #=?>=???????@???DATAL((DATAL(YafRayH0PDATALH0[type0DATA0PointDATAL[`[H0samplesDATAL`[Z[radius?DATALZ`Z`[angle?DATAL`ZPZpower?DATALP`Zcolor.DATA.???DATALPPcreateGeometryDATALPinfiniteOBPX8qR 1OBLamp.002 ٲP55@-@^[@@d9޾#@???'l?"9þN<Q5>l??;e5% ?.@* ]@v7@?+rU?c*a?7,>25nr?i>?xݾL??h3A3|?X2X3? 6G?-e*a?Ц75<,rr?uU?>k>BW@">twQ?DOBd?? #=?>=???????@???DATALDATALYafRay@p2sDATAL@D|type8DATA8SphereDATALD|=w@samplesDATAL=w@nD|radius?DATAL@n>w=wangle?DATAL>w@npower G@DATAL>wcolor9DATA9୳??oN?DATALp2screateGeometryDATALp2sinfiniteOBPRqX8OBLamp.003 ٲp U%A+|iz@@d9޾#@K??#zY=fQ5>l??;e5% ?@E@?+rU?c*a?7,>25nr?i>?xݾL??32 ?DO/M0?G״׷˴?Py?c*a?V:5І?@,rr?J>j>%a@F4@P ?DOBd?? #=?>=???????@???DATAL``DATAL`YafRay=w?{p? ?DATAL;wFU1C3?i>{bm4Z:/=<<Ԟ="L?D>?DOBd?? #=?>=???????@???pyDATAL((DATAL(YafRay(DATAL(XumeshlightDATALXu<(colorDATA???DATAL<Xudouble_sidedDATALhd<power?DATALhddsamplesDATALdhehdvolumeDATALhebdvolregionType(DATA(ExpDensityVolumeDATALb(chesigma_s?DATAL(ccbsigma_a?DATALc=g(cgDATAL=g=gcl_eDATAL=g>g=ga?DATAL>g =gb?DATAL >gsharpness?DATAL cover?DATA0OBP qOBPlane.001xI{@"A3?9 @v??d =[8?2?6?Bݽ,r?a?Rz!?o**X.?@"A??????13@[3?K3\v3?%C55?|>?&W>@ A>->h)>%_=???????@??? 8yDATALx((DATAL(YafRayPp}DATALPpWmeshlightDATALpW Pcolor`DATA`???DATAL pWdouble_sidedDATAL  powerZB@DATAL samplesDATALhj volumeDATALhj8uvolregionType&DATA&ExpDensityVolumeDATAL8uhjsigma_s?DATALP8usigma_a?DATALPXgDATALX0kPl_eDATAL0kXa?DATAL|0kb?DATAL|p}sharpness?DATALp}|cover?DATAOBP*qOBSphere (N@JP1 h?????? h?????????ս?~?a6ِ r?ׯp?M=> AL@#@?DOBd?? #=?>=???????@???=`DSyDATAL XsXsDATALXsYafRaysDATALsXsmeshlightDATALXsscolorp DATAp ???DATALpXsdouble_sidedDATALppower?DATALppsamplesDATALpvolumeDATALppvolregionType(/DATA(/ExpDensityVolumeDATALpsigma_s?DATALppsigma_a?DATALpgDATALpl_eDATALa?DATALb?DATALsharpness?DATALcover?DATAP1MAlg*8hMAflooraterial.0017`+L?L?L???????????L?????2?? ף; ף;AA ????????@?=?==???????L?L?L?L==ff????DATAL`+pupuDATALpuYafRayHi`~DATALHi typepiDATApishinydiffusematOCK!DATAL !Hidiffuse_reflect@?DATAL! specular_reflectDATAL<!colorȮDATAȮ???DATAL<&diffuse_color=DATA=???DATAL&H<mirror_colorXDATAX???DATALH(?&transparencyDATAL(?!HtranslucencyDATAL!x(?emitDATALxP!fresnel_effectDATALPWxglossy_reflectDATALWHPexponent@@DATALH(Was_diffuseDATAL(@kHIOR?DATAL@kH(filter_colorȯDATAȯ???DATALH@kanisotropicDATAL8Hexp_uI@DATAL8(exp_vI@DATAL(Ș8absorption( DATA( ???DATALȘ(absorption_dist?DATALkȘtransmit_filter?DATALkkdispersion_powerDATALkkkfake_shadowsDATALkekmaterial1(4DATA(4floorDATALekmaterial21DATA1floorDATAL@eblend_value?DATAL@`~brdfTypeDATANormal (Lambert)DATAL`~@sigma?DATA  HDATAHCsBsAr@q?q>p=o=op?q@qArBsGwFvEuDuDtCsBsArAr@r  @q@rArArBsCsDtDuEuFvLzKyJyIxHxHwGvFv FvFvGvHwHxIxJyKyQ~P}O|N|M{M{Lz!!!$$$%%%&&&'''&&&%%%$$$"""KzLzM{M{N|O|P}VUTSR$$$(((+++---......///...---,,,***(((%%%!!! RRSTU[ZYX&&&---222555666777888777666666555333222000---)))%%%!!!&&&XXYZ`_^^ ---555:::>>>AAABBBBBBCCCBBBAAA???===:::888666444111---)))### (((]^^_eed"""222;;;BBBFFFIIIKKKLLLMMMMMMMMMKKKIIIGGGDDDAAA===:::777333///***$$$'''...777cdekj444@@@HHHMMMQQQSSSUUUVVVWWWWWWVVVUUUSSSPPPNNNJJJFFFBBB===999555000+++,,,444===JJJjjpp333CCCLLLRRRWWW[[[]]]___`````````___^^^\\\YYYVVVRRRNNNJJJEEE???:::666000222999AAAMMMopv(((CCCOOOWWW]]]aaadddggghhhiiiiiiiiihhhfffdddaaa^^^ZZZVVVRRRMMMGGGAAA:::555777===FFFQQQdddu|<<L?????2?? ף; ף;? ?????????@?=?==???ih????L?L?L?L==ff????DATAL $XXDATALXYafRayHHDATALH!typeXDATAXglassDATAL!X"Hdiffuse_reflect?DATALX""!specular_reflectDATAL"hHX"color`tDATA`t???DATALhHH"diffuse_colorpDATAp???DATALHhIhHmirror_color DATA ???DATALhInHtransparencyDATALnxohItranslucencyDATALxoonemitDATALoxofresnel_effectDATALoglossy_reflectDATALexponent@@DATALas_diffuseDATALIOR?DATALfilter_colorDATA???DATAL8 anisotropicDATAL8  exp_uI@DATAL 8 8 exp_vI@DATAL8 / absorption~DATA~`Pi?`Pi?`Pi?DATAL/DATA h ГDATAГCsBsAr@q?q>p=o=op?q@qArBsGwFvEuDuDtCsBsArAr@r  @q@rArArBsCsDtDuEuFvLzKyJyIxHxHwGvFv"$$$#! FvFvGvHwHxIxJyKyQ~P}O|N|M{M{Lz%*-/000.-*'#KzLzM{M{N|O|P}VUTSR&-2689 : ::9752.*$RRSTU[ZYX!09 > B D E E E D C B @ > <84/)"0XXYZ`_^^(9 B I N Q R S S S Q O M I G D A =83,$(1]^^_eed* > J R W \^_```^ \ Y V Q L H D @ ;5.09 Ecdekj# A P Z`ehklllljhea] W R L G B <57 @ L]jjpp @ S_gmrtvxxxwurokgb\ V O H C < > G Q`opv1 Scmtz~}yuqlf` Y Q I C D L We~u| Kdqz{upib Z R H J R]k{]q}~yrkc [ Q P Wbpk}{skc Y Y]gt Rx{sjabelz]zqhjmr~gxoruzj~wy}    ~ "$&&%#  #' ,130 *%! "'0;#D'H"B7 ,$ !$ ,:+M;]@b8Y'H6 )" !% / C:\OrVxJl4U= ,$ !% /!C=`Ux]Pr7Y? .$ !#+<1TGjPsDg.P: +$  "% />*N2U,O@1'" !"& ,497 0)$!  "$&('&$" !""""!!  MAl(ݲ*8hMAligthaterial5N???????????L?????2?? ף; ף;? ?????????@?=?==???('????L?L?L?L==ff????DATALNpOpODATALpOYafRayOH^DATALOpPtype"DATA"shinydiffusematOCK!DATALpPPOdiffuse_reflect?DATALPpQpPspecular_reflectDATALpQQPcolorh'DATAh'???DATALQpRpQdiffuse_color(DATA (DATALpRRQmirror_color'DATA'???DATALRpSpRtransparencyDATALpSSRtranslucencyDATALSpTpSemitDATALpTTSfresnel_effectDATALTpUpTglossy_reflectDATALpUUTexponent@@DATALUpVpUas_diffuseDATALpVVUIOR?DATALVWpVfilter_colorpWDATApW???DATALW8XVanisotropicDATAL8XXWexp_uI@DATALX8Y8Xexp_vI@DATAL8YZXabsorptionYDATAY???DATALZZ8Yabsorption_dist?DATALZ[Ztransmit_filter?DATAL[[Zdispersion_powerDATAL[\[fake_shadowsDATAL\\[material1x" DATA x"MaterialDATAL\]\material28" DATA 8"MaterialDATAL]]\blend_value?DATAL]H^]brdfType^DATA^Normal (Lambert)DATALH^]sigma?DATA('!'??????????L>DATA   DATA CsBsAr@q?q>p=o=op?q@qArBsGwFvEuDuDtCsBsArAr@r  @q@rArArBsCsDtDuEuFvLzKyJyIxHxHwGvFv"$$$#! FvFvGvHwHxIxJyKyQ~P}O|N|M{M{Lz%*-/000.-*'#KzLzM{M{N|O|P}VUTSR&-2689:::9752.*$RRSTU[ZYX!09>BDEEEDCB@><84/)"0XXYZ`_^^(9BINQRSSSQOMIGDA=83,$(1]^^_eed*>JRW\^_```^\YVQLHD@;5.09Ecdekj#APZ`ehklllljhea]WRLGB<57@L]jjpp@S_gmrtvxxxwurokgb\VOHC<>GQ`opv1Scmtz~}yuqlf`YQICDLWe~u|Kdqz{upibZRHJR]k{]q}~yrkc[QPWbpk}{skcYY]gtRx{sjabelz]zqhjmr~gxoruzj~wy}~  ##''""  ++;;@@88''  ::OOVVJJ44  !!==UU]]PP77 11GGPPDD..  **22,,  TE'&TETex8>@???????@@????? @??<ME )4-MECubepherefh*  3???DATA8hDATATh**fDATAf:??II?I?I???III??II?I??IIDATAT*DATA7 """"""""""""DATAT*DATAx6MEXJ4{MEPlane/(M~AK ???DATA/gDATATK*~DATA`~:????DATAT*ADATA0A7####DATAT*(MDATA(M6ME{4eXJMEPlane.0019c0  ???DATA9(ݲDATAT*DATA:84$8$($&($(@4$(@$<>$L>($(@@$(@">$<>(>$L>@$8@$38 >$3(&>$3&@$3DATAT *0DATA07######## # # # # # # ##DATAT *cDATAPc6   ME4@J;MEPlane.0053xXṟ ???DATA3(ݲDATATXr*xDATAx:84$8$($&($(@4$(@$<>$L>($(@@$(@">$<>(>$L>@$8@$38 >$3(&>$3&@$3DATAṮ*DATA7######## # # # # # # ##DATAT*DATAP6   ME@J4MESphereШ JKM N4???DATA8hDATATK*DATA0]:d=ץ={}wő>g=tp$?6+>%=dl 0 >X=a-; 7~ ?=8TE H?w=EO1?B >5X~B?m>g" aMͮ%P?&>9aho]?.0>Zng?ѐ8> þsEp?+?>G{};y?F>PȽ|u{?G>};y?F>(=| Av?C>G>{}Ep?+?>0>!x'%g?Ґ8>>s0o]?/0>Z>nV<(P?&>9?ahGB?m>g"? aM3Q1?B >5?XZH?w=E?Ob?~ ?=1T?E lj>X=a?-; pK+>6=^l? 0 @vő>g= t?p$?|zC> ={?}}='5={? }O>= t?S"7|z>>^l?@-@v>8>a?7pQf?ʵY>1T?A6lj ?+x>E?Kbt='?ԋ>5?S"Z6?u>g"?h[%3QKD?>9?Rb(GP?\̬>Z>Jh2+V<xZ?>>@m@-07Tb?@>0>)q.'%g?J+>G>s 0_k?>(=u0 ]l?>@v0_k?>PȽu0ug?J+>Gs 06Tb?>><)q.vZ?> þ@m@-P?Z̬>ZJh2+HD?>9Rb(6?|u>g"h[%ͮn='?ϋ>5S"~ ?!x>EKIf?Y>8TA6>8>a7> >dl@-O>=tS"78>={ wu=K=n~ <=0 _=n~n &>w={ w'w>$%>t>Y>dl(6>>a*2!P>l>8T ;'?Lt>EC-?F#>5@KH2~>$?_>g"DR6ͮ0?Z>9}X ;;?:>Z]>HD?Of? þRbAϰK? ?~ ?GahES? ?PȽiFu/T?9?ljGS? ?(=iF (P?>~ ?G>ahEаK??0>e D'%JD?Pf?>RbA0;?=>Z>]>V<0?]>9?}X ;GB$?d>g"?DR63Q?N#>5?@KH2Z?Tt>E?C-b^>v>1T? ;'lj>>a?*2!p>ɵY>^l?(6@v'w>$%> t?|z&>={? }= _=m~?n a==m~?aB >B >{?}D0R>D0R> t?EE|zӋ>Ӌ>^l?""@v>>a?**pM#>N#>1T?H2H2ljĬ>Ŭ>E?j9j9b>>5???Z ? ?g"?EE3Q??9?@K@KG??Z>OOV<r='?s='?>SS09-?9-?0>VV'%1?1?G>XX%4?%4?(=ZZ 5?5?ZZ%4?%4?PȽZZu1?1?GXX9-?9-?>5??~>>Ej9j9A#>B#>8TH2H2䩪>婪>a**ċ>ŋ>dl""%0R>&0R>tEEB >B >{w`=`=n~[[/ _=;=n~n v=&>{ w$%>'w>tY>>dl6(>>a!*2k>P>8T' ;Jt>?E-CD#>?5H2@K~[>>$?g"6DRͮV>0?9 ;}X9>;?Z>]Mf?HD? þARb ?ϰK?< De<~ ?'P?GEah ?S?PȽFiu9?/T?Glj ?S?(=Fi =~ ?'P?G>Eah ?ѰK?0> De'%Nf?JD?>ARb0;>;?Z>>]V<\>0?9? ;}XGb>C$?g"?6DR3QL#>?5?H2@KZRt>?E?-Cbt>^>1T?' ;lj>>a?!*2pǵY>>^l?6(@v$%>'w> t?|z=&>{? } _==m~?n a=ou=m~? a1=ѐ8>{? }=O> t?7S"|z>>^l?@-@v8>>a?7pƵY>Pf?1T?6Alj'x> ?E?Kbҋ>t='?5?"SZ|u>6?g"?%h[3Q>ID?9?(RbGY̬>P?Z>2+JhV<>wZ?>@-@m0<>7Tb?0>.)q'%G+>g?G> 0s>_k?(=0u >[l?0@v>_k?PȽ0uuE+>g?G 0s;>4Tb?<.)q>tZ? þ@-@mX̬>P?Z2+Jh>GD?9(Rbwu>6?g"%h[ͮ̋>m='?5"S~x> ?EKY>If?8T6A8>>a7>>dl@-=O>t7S"=8>{ wJ=u=n~ ե{}wg=ő>t?p$=4+>dl 0 X=>a -;=6~ ?8T Ew=H?EOB >}1?5X~m>B?g"M aͮ&>#P?9ah.0>o]?Znʐ8>g? þs+?>Dp?<!x C>Av?G}{}F>9y?PȽ|uG>{?}}F>9y?(=| C>Av?G>}{+?>Ep?0>!x'%ʐ8>g?>s0.0>o]?Z>nV<&>%P?9?ahGm>B?g"?M a3QB >1?5?XZw=H?E?Ob=>~ ?1T? EljX=>a? -;p0=H+>^l? 0@vg=ő> t??p$|z=C>{?}}!<=m~?rM a23=m~? aMG>{?} t?'%|z<'ز>^l?0@v)9NZ>a?UpV<mZl?>@v0t?0>|z'%D{?G>}`j~?(=a W(?`j~?PȽauƳ{?G} ?]t?<{zeWl? þ@vOa?Zp+T?9ljE?g"bͮQ2]5?5Z~3g"?E2Q#,9?8TG3Z>aU<->dl0ࢲ>t'%xG>{w.~°ͼ=n~ ֥a=n~M C>{!}wgő>tp$(昽3+>dlr 0X>a;-;ݽ5~ ?8T!EwH?E)OB |1?5XX~mB?g" aͮ&"P?9=ah/0o]?ZnА8g? þs+?Dp?<!xCAv?G{}F8y?PȽ'|uG{?}}F8y?(='| CAv?G>{+?Dp?0>!x'%Ր8g?>s0/0o]?Z>nV<&$P?9?=ahG mB?g"? a3QB 1?5?XXZwH?E?)Obݽ=~ ?1T?!EljX>a?;-;p6昽G+>^l?r 0@vgő> t?p$|zC>{?!}})=m~?M amu=m~?3 a5昽ϐ8>{?r}O> t?S"|z>^l?B@-@v8>a?7pɵYOf?1T?Alj+x ?E?KbՋs='?5?^ݝSZu6?g"?#h[3Q颾GD?9?FRbG[̬P?Z>JhV<tZ?>@m0@4Tb?0>!)q'%I+g?G>s¾_k?(=AϮu þYl?@v¾_k?PȽAϮuuI+g?Gs=2Tb?a7 >dlB@-O>tS"昽8>{rwJu=n~3 - _9=n~n uݽ&>{!w$%'w>t\Y>dl(ޭ>a{*2kL>8T ;Jt?E҃CD#ɾ?5@K~^۾:$?g"DRͮY쾾0?9}X9;?ZJ]MfED? þNRb ̰K?Bah ͰK?0>e'%OfFD?>NRb0;;?Z>J]V<X0?9?}XGb۾?$?g"?DR3QN#ɾ?5?@KZSt?E?҃CbtZ>1T? ;lj>a?{*2pǵY>^l?(@v$%'w> t?\|zݽ&>{?!} _=m~?n a񍽥=m~?"aB B >{?X}B0RB0R> t?E|zҋЋ>^l?^ݢ"@v頻>a?Wթ*pL#ɾI#>1T?H2ljĬ>E?j9b>5??Z  ?g"? E3Q?9?@KG?Z>/OV<q='n='?>bS09-9-?0>dV'%11?G>5?~徵>Ej9@#ɾ=#>8TH2㩪ᩪ>aWթ*ċ‹>dl^ݢ"#0R!0R>tEB B >{Xw^]=n~"9覽* _=n~&r={= w'w$%>t颾Y>dlG6ޭȾ>aͅ!Mg>8Tā'Ft>E}-@#>5H2~<$T>g"6ͮ0Q>9 ;;4>Z%>EDKf? þA̰K ?<) D$P9~ ?GES ?PȽFu,T9?GS ?(=F $P;~ ?G>EΰK ?0>) D'%GDKf?>A0;7>Z>%>V<0W>9? ;G@$\>g"?63QJ#>5?H2ZOt>E?}-b[p>1T?ā'ljȾ>a?ͅ!p颾µY>^l?G6@v'w$%> t?|z&={?= }覽 _=m~?a?lu=m~?iaϐ8/={? }O= t?7|z>^l?Ҿ@v޾8>a?BpNfY>1T?N6lj "x>E?br='Ћ>5?c"Z6xu>g"?%3QFD>9?(GPV̬>Z>2+V<sZ>>@-03Tb7>0>׎.'%gD+>G> 0_k>(=R0 Xl >0_k>PȽR0ug@+>G 01Tb8><׎.qZ> þ@-PT̬>Z񾶗2+DD>9(6qu>g"%ͮk='ɋ>5c"~ x>EGfY>8TN6޾8>aB>dlҾO}=t78 ={ wuF=n~i_Ľϥ5<~Bm>g"MͮP&>9o].0>ZJgǐ8> þDp+?><߇AvC>G}6yuF>PȽu{G>w6yuF>(= Av C>G>}Dp+?>0>߇'%gÐ8>>0o].0>Z>JV<"P&>9?GBm>g"?M3Q1B >5?<ZHw=E?]b;~ =1T?B ljX=a? pE++=^l?ώ @vőg= t??|zC={?}Ľ^l?@vZa?p9ڊ1T?ljg"KE?ήb5[5?ZEg"?3Q*Tv9?GaZ>V<Vlr>0ty0>'%{j&9G>wf~(= ɳf~PȽu{+Gwt#݁<Tl þaZ&TЎ9EMg"ͮ5ٳ5~g"ijEή9_ 8TZ=:aþdl0\ɲtG~{wʼȽ, n~u^Ľץn~C{!wőgt2+*昽dlrXa;3~ ݽ8TB!HwE])z1B 5ᄃDp+?0>߇'%g֐8>0o]/0Z>JV<!P&9?=GB mg"?3Q1B 5?_k¾(=RAϋ Vlþ_k¾PȽRAugH+G/Tb;<׎!oZ þPZ̬Z񾶗Ԫ@D颾9F6|ug"$ͮi='΋5c^~ xEEfY8TN䔕޾8aB dlBOt8 昽{rw uIn~i36覽+ _n~&rݽ{=!w'w$%t\넅颾YdlGڭȾa{Hk8TؔItE} D#ɾ5~6$\۾g"ͮ0T9;8Z%JBDLf þNɰK <)P<~ GBS PȽBɰK 0>)'%CDNf>N0;9Z>%JV<0V9?G<$`۾g"?3QJ#ɾ5?͂ZQtE?}bUr1T?ljȾa?{p颾ŵY^l?G@v'w$% t?\|z&ݽ{?=!}覽 _m~?a񍽥m~?""aB B {?XX}>0RA0R t?|z΋Ћ^l?^^@v쩪a?WWpE#ɾI#ɾ1T?͸ljE?Ɩb5?Z  g"? 3Q9?G Z>//V<l='p='>bb0~9-9-0>dd'%}11G><<%4%4(= 55%4%4PȽu|11G<<~9-9-B˰K0>)'%IfFD>N02;Z>J%V<R쾽09?ăGW۾=$g"?ɼ3QF#ɾ5?ZJtE?}bmW1T?ljȾa?{pY颾^l?G@v$%'w t?\|zݽ&{?!=} _覽m~?ajum~?3ia+昽͐8{?r}O t?|z^l?B@v8޾a?BpYLf1T?Nljx E?b͋o='5?^cZtu6g"?$ژ3Q颾BD9?F׮GR̬PZ>ԶV<rZ>040Tb0>!׎'%>+gG>¾_k(=BR þUl¾_kPȽBRu;+gG5/Tb+?Dp0>߇'%8g>0.0o]Z>JV<&P9?=럗G mBg"?3QB 15?X2Za?p^391T?ljT 4g"E?ήb355?Z 4Eg"?3Qz3&T9?G~74aZ>V<\4Tl>0HK"4t0>'%Z3{G>w3`~(=  43`~PȽu4{Gw3t<qc4Rl þM4aZ24#T9^4Eg"ͮ }%455~4g"Eή398T且l3ZaA3þdl>2tڄ/3G{wNU2ȼȽn~uץ<\Ľn~r=C{wg=đt?ۄ,=/+dl X=쾜a =1~ 8T Bw=HE]B >w15<~#m>Bg"Mͮ&>P9/0>n]ZJא8>g þ+?>Dp<߇C>AvG}zF>.yPȽuG>{wzF>.y(= C>AvG>}+?>Dp0>߇'%ؐ8>g>0/0>n]Z>JV<&>P9?Gm>Bg"?M3QB >~15?^l?@v8>޾a?BpĵY>Jf1T?6Nlj)x> E?bЋ>m='5?"cZ{u>6g"?%3Q>@D9?(G[̬>PZ>2+V<>mZ>@-0<>-Tb0>.׎'%C+>gG> 0>_k(=0R >Ql0>_kPȽ0RuI+>gG 0:>,Tb<.׎>lZ þ@-Z̬>PZ2+>=D9(|u>6g"%ͮ΋>f='5"c~x> EY>Cf8T6N8>޾aB >dl|=Ot7݄=8{ wH= un~i* _=4覽n~r=&{ =w$%>'wtᄅY>颾dl6G>حȾa!i>D8T'ĔGt>E-}B#> 5H2~[>4$g"6ͮS>09 ;7>;Z>%Mf??D þA ?ưK< D)<~ ?PGE ?SPȽFu9?$TG ?S(=F 8~ ?PG>E ?ǰK0> D)'%Mf?@D>A09>;Z>>%V<S>09? ;G[>7$g"?63QG#>5?H2ZPt>E?-}bp>Q1T?'lj>Ⱦa?!pµY>颾^l?6G@v$%>'w t?|z=&{? =} _=覽m~?a=m~?"aB >B {?X}=0R>:0R t?E|z΋>̋^l?"^@v멪>驪a?*WpF#>A#ɾ1T?H2lj>E?j9b>5??Z ? g"?E 3Q? 9?@KG ? Z>O/V<n='?i='>Sc09-?|9-0>Vd'%|1?y1G>X<%4?%4(=Z 5?5Z%4?%4PȽZu1?y1GX<9-?{9-5?~>Ej9<#>6#ɾ8TH2͔ߩ>ܩa*W‹>dl"^0R>0RtE儅B >B {Xw\=Yn~"6=# _n~n &>iݽ{!w'w>$%t\넅>Ydl(ڭ>a*2{H>a8T ;ؔ?>tEC ?7#ɾ5@K~8$?K۾g"DRͮ0?G9}X;?+Z]JCD?Ff þRbNȰK?ahBʰK?0>e'%CD?Ff>RbN0;?.Z>]JV<0?M9?}XG:$?Q۾g"?DR3Q?B#ɾ5?@K͂Z?GtE?CbT>j1T? ;lj>a?*2{p>Y^l?(@v'w>$% t?\|z&>ݽ{?!}= _m~?n ahu=m~? 3aː8>(昽{?r}O> t?S"|z>^l?@-B@v>8a?7pJf?Y1T?Alj ?xE?Kbm='?ʋ5?S^݂Z6?oug"?h[$3Q@D?颾9?RbFGP?O̬Z>JhV<nZ?>@m0.Tb?10>)q!'%g?9+G>s_k?~¾(=uBϋ Rl?þ@v_k?~¾PȽuBug?5+Gs,Tb?0<)q!nZ? þ@mP?L̬ZJhԪ>D?颾9RbF6?jug"h[$ͮg='?5S^~ ? xEKDf?Y8TA䔕>8a7>dl@-BO>rtS"8>昽{rw u=@n~ 3[=ƥn~M C>{}!wđ>qgtp$/+>昽dl 0r>Wa-;;0~ ?ݽ8TE!H?wEO)v1?B 5XX~B?lg" aͮP?&9ah=n]?.0Zng?8 þsDp?+?{Dp?+?0>!x'%g?8>s0n]?.0Z>nV<P?&9?ah=GB?mg"? a3Q}1?B 5?XXZH?wE?O)b7~ ?ݽ1T?E!lj> Xa?-;;p@+>'昽^l? 0r@vő>g t?p$|z C>{?}!}=m~?M a+=/3m~? aG>0AP3{?})>-3 t?'%|z >2>3^l?0@vZ>d;q3a?U<p9?pV<Ol?4>@v0t?LK40>|z'%{?84G>}\~?+ 4(=a ?x4\~?+ 4PȽau{?4G}t?S24<|zOl?4 þ@va?.C4Zp T?[49ljE?Ǐ4g"bͮ5?j45Z~g"?4E2Q9?F$48TGZ>FO3aU<>3dl0>3t'%G>J-3{wƼ=$2n~ DATATM* JDATA^ J7!####### # # # # # ################!# ! # !#!#!"#"#"#####$#$#$%#%#%&#&#&'#'#'(#(#()#)#)*#*#*+#+#+,#,#,-#-#-.#.#./#/#/0#0 #01#1 #12#2 #23#3 #34#4 #45#5#56#6#67#7#78#8#89#9#9:#:#:;#;#;<#<#<=!=#=>#<?#>?!;@#?@#:A#@A#9B#AB#8C#BC#7D#CD#6E#DE#5F#EF#4G#FG#3H#GH#2I#HI#1J#IJ#0K#JK#/L#KL#.M#LM#-N#MN#,O#NO#+P#OP#*Q#PQ#)R#QR#(S#RS#'T#ST#&U#TU#%V#UV#$W#VW##X#WX#"Y#XY#!Z#YZ# [#Z[#\#[\!\]#]^![^#^_#Z_#_`#Y`#`a#Xa#ab#Wb#bc#Vc#cd#Ud#de#Te#ef#Sf#fg#Rg#gh#Qh#hi#Pi#ij#Oj#jk#Nk#kl#Ml#lm#Lm#mn#Kn#no#Jo#op#Ip#pq#Hq#qr#Gr#rs#Fs#st#Et#tu#Du#uv#Cv#vw#Bw#wx#Ax#xy#@y#yz#?z#z{!>{#{|!{}#z~#}~!y#~#x##w##v##u##t##s##r##q##p##o##n##m##l##k##j##i##h##g##f##e##d##c##b##a##`##_##^##]#!#!########################################################~#!}###!#########################################################!#!#########################################################!###!############################ # # #  # #  # #  # #  ## ##################!#!############# # # !#!#!"# "#"## ###$# $#$%# %#%&# &#&'#'#'(#(#()#)#)*#*#*+#+#+,#,#,-#-#-.#.#./#/#/0#0#01#1#12#2#23#3#34#4#45#5#56!6#67#58#78!49#89#3:#9:#2;#:;#1<#;<#0=#<=#/>#=>#.?#>?#-@#?@#,A#@A#+B#AB#*C#BC#)D#CD#(E#DE#'F#EF#&G#FG#%H#GH#$I#HI##J#IJ#"K#JK#!L#KL# M#LM#N#MN#O#NO#P#OP#Q#PQ#R#QR#S#RS#T#ST#U#TU!UV#VW!TW#WX#SX#XY#RY#YZ#QZ#Z[#P[#[\#O\#\]#N]#]^#M^#^_#L_#_`#K`#`a#Ja#ab#Ib#bc#Hc#cd#Gd#de#Fe#ef#Ef#fg#Dg#gh#Ch#hi#Bi#ij#Aj#jk#@k#kl#?l#lm#>m#mn#=n#no#<o#op#;p#pq#:q#qr#9r#rs#8s#st!7t#tu#sv#uv!rw#vw#qx#wx#py#xy#oz#yz#n{#z{#m|#{|#l}#|}#k~#}~#j#~#i##h##g##f##e##d##c##b##a##`##_##^##]##\##[##Z##Y##X##W##V#!!#!########################################~##}##|##{##z##y##x##w##v#!u###!#########################################################!#!#########################################################!###!########################################## # # #  # #  # #  # #  ## ####!#!#### ## ## ## ## ############### # # !#!#!"#"#"#####$#$#$%#%#%&#&#&'#'#'(#(#()#)#)*#*#*+#+#+,#,#,-#-#-.#.#./!/#/0#.1#01!-2#12#,3#23#+4#34#*5#45#)6#56#(7#67#'8#78#&9#89#%:#9:#$;#:;##<#;<#"=#<=#!>#=># ?#>?#@#?@#A#@A#B#AB#C#BC#D#CD#E#DE#F#EF#G#FG#H#GH#I#HI#J#IJ#K#JK#L#KL#M#LM#N#MN!NO#OP!MP#PQ#LQ#QR#KR#RS#JS#ST#IT#TU#HU#UV#GV#VW#FW#WX#EX#XY#DY#YZ#CZ#Z[#B[#[\#A\#\]#@]#]^#?^#^_#>_#_`#=`#`a#<a#ab#;b#bc#:c#cd#9d#de#8e#ef#7f#fg#6g#gh#5h#hi#4i#ij#3j#jk#2k#kl#1l#lm!0m#mn#lo#no!kp#op#jq#pq#ir#qr#hs#rs#gt#st#fu#tu#ev#uv#dw#vw#cx#wx#by#xy#az#yz#`{#z{#_|#{|#^}#|}#]~#}~#\#~#[##Z##Y##X##W##V##U##T##S##R##Q##P##O#!#!##########################~##}##|##{##z##y##x##w##v##u##t##s##r##q##p##o#!n###!#########################################################!#!#########################################################!###!#########################################################! #  ! #  # #  # #  # # #################################### # # !#!#!"#"#"#####$#$#$%#%#%&#&#&'!'#'(#&)#()!%*#)*#$+#*+##,#+,#"-#,-#!.#-.# /#./#0#/0#1#01#2#12#3#23#4#34#5#45#6#56#7#67#8#78#9#89#:#9:#;#:;#<#;<#=#<=#>#=>#?#>?#@#?@#A#@A# B#AB# C#BC# D#CD# E#DE# F#EF!FG#GH!EH#HI#DI#IJ#CJ#JK#BK#KL#AL#LM#@M#MN#?N#NO#>O#OP#=P#PQ#<Q#QR#;R#RS#:S#ST#9T#TU#8U#UV#7V#VW#6W#WX#5X#XY#4Y#YZ#3Z#Z[#2[#[\#1\#\]#0]#]^#/^#^_#._#_`#-`#`a#,a#ab#+b#bc#*c#cd#)d#de!(e#ef#dg#fg!ch#gh#bi#hi#aj#ij#`k#jk#_l#kl#^m#lm#]n#mn#\o#no#[p#op#Zq#pq#Yr#qr#Xs#rs#Wt#st#Vu#tu#Uv#uv#Tw#vw#Sx#wx#Ry#xy#Qz#yz#P{#z{#O|#{|#N}#|}#M~#}~#L#~#K##J##I##H##G#!#!##########~##}##|##{##z##y##x##w##v##u##t##s##r##q##p##o##n##m##l##k##j##i##h##g#!f###!#########################################################!#!#########################################################!#|!!!|!|!!!|f!|e!G!F!|(!|'! !!|!|!!!|!|!!!|n!|m!O!N!|0!|/!!!|!|!!!|!|!!|u!|t!V!U!|7!|6!!!|!|!!!|!|!!!|}!]!\!>|!=|!!!################# # # # # #########|!#DATATN*ШDATAPШ6|       ! "!#"$#%$&%'&(')(*)+*,+-,.-/. 0/ 10  21  32  43 54 65768798:9;:<;=<=||>==>?<<?@;;@A::AB99BC88CD77DE66EF55FG44GH33HI22IJ11JK00KL//LM..MN--NO,,OP++PQ**QR))RS((ST''TU&&UV%%VW$$WX##XY""YZ!!Z[  [\\\][^]\Z_^[Y`_ZXa`YWbaXVcbWUdcVTedUSfeTRgfSQhgRPihQOjiPNkjOMlkNLmlMKnmLJonKIpoJHqpIGrqHFsrGEtsFDutECvuDBwvCAxwB@yxA?zy@>{z?|{>|}{{}~zz~yyxxwwvvuuttssrrqqppoonnmmllkkjjiihhggffeeddccbbaa``__^^]]~}~|}|||           !  "! #"  $#  %$  &% '& (')(*)+*,+-,.-/.0/102132435465|6|766785589449:33:;22;<11<=00=>//>?..?@--@A,,AB++BC**CD))DE((EF''FG&&GH%%HI$$IJ##JK""KL!!LM  MNNOOPPQQRRSSTTUUUVTWVUSXWTRYXSQZYRP[ZQO\[PN]\OM^]NL_^MK`_LJa`KIbaJHcbIGdcHFedGEfeFDgfEChgDBihCAjiB@kjA?lk@>ml?=nm><on=;po<:qp;9rq:8sr97ts8|t7|uttuvssvwrrwxqqxyppyzooz{nn{|mm|}ll}~kk~jjiihhggffeeddccbbaa``__^^]]\\[[ZZYYXXWWVV~}~|}{|z{yzxywxvwuv|u|||                     ! "!#"$#%$&%'&(')(*)+*,+-,.-/.|/|0//01..12--23,,34++45**56))67((78''89&&9:%%:;$$;<##<=""=>!!>?  ?@@AABBCCDDEEFFGGHHIIJJKKLLMMNNNOMPONLQPMKRQLJSRKITSJHUTIGVUHFWVGEXWFDYXECZYDB[ZCA\[B@]\A?^]@>_^?=`_><a`=;ba<:cb;9dc:8ed97fe86gf75hg64ih53ji42kj31lk20ml1|m0|nmmnollopkkpqjjqriirshhstggtuffuveevwddwxccxybbyzaaz{``{|__|}^^}~]]~\\[[ZZYYXXWWVVUUTTSSRRQQPPOO~}~|}{|z{yzxywxvwuvtustrsqrpqopno|n|||           ! "!#"$#%$&%'&|'|(''()&&)*%%*+$$+,##,-""-.!!./  /00112233445566778899::;;<<==>>??@@AAB  BC  CD  DE  EF  FFGEHGFDIHECJIDBKJCALKB@MLA?NM@>ON?=PO><QP=;RQ<:SR;9TS:8UT97VU86WV75XW64YX53ZY42[Z31\[20]\1/^]0._^/-`_.,a`-+ba,*cb+)dc*(ed)|e(|feefgddghcchibbijaajk``kl__lm^^mn]]no\\op[[pqZZqrYYrsXXstWWtuVVuvUUvwTTwxSSxyRRyzQQz{PP{|OO|}NN}~MM~LLKKJJIIHHGG~}~|}{|z{yzxywxvwuvtustrsqrpqopnomnlmkljkijhighfg|f||PYPGPYyafaray_ui.pyp0 yafaray_ui.pyDNA10SDNANAMEq *next*prev*data*first*lastxyzwxminxmaxyminymax*pointergroupvalval2name[32]typesubtypeflagsaveddatalentotallen*newid*libname[24]usicon_id*propertiesid*idblock*filedataname[240]filename[240]totpad*parentw[2]h[2]changed[2]pad0pad1*rect[2]*obblocktypeadrcodename[128]*bp*beztmaxrcttotrctvartypetotvertipoextraprtbitmaskslide_minslide_maxcurval*drivercurvecurshowkeymuteipoposrelativetotelempad2*weightsvgroup[32]sliderminslidermax*refkeyelemstr[32]elemsizeblock*ipo*fromtotkeyslurph**scripts*flagactscripttotscript*line*formatblenlinenostartendflagscolor[4]pad[4]*namenlineslines*curl*sellcurcselcmarkers*undo_bufundo_posundo_len*compiledmtimesizeseekpassepartalphaangleclipstaclipendlensortho_scaledrawsizeshiftxshiftyYF_dofdistYF_apertureYF_bkhtypeYF_bkhbiasYF_bkhrotscriptlink*dof_obframenrframesoffsetsfrafie_imacyclokmulti_indexlayerpassmenunribufs*gputexture*anim*rrsourcelastframetpageflagtotbindxrepyreptwstatwendbindcode*repbind*packedfile*previewlastupdatelastusedanimspeedgen_xgen_ygen_typeaspxaspy*vnodetexcomaptomaptonegblendtype*object*texuvname[32]projxprojyprojzmappingofs[3]size[3]texflagcolormodelpmaptopmaptonegnormapspacewhich_outputpad[2]rgbkdef_varcolfacnorfacvarfacdispfacwarpfacname[160]*handle*pname*stnamesstypesvars*varstr*result*cfradata[32](*doit)()(*instance_init)()(*callback)()versionaipotype*ima*cube[6]imat[4][4]obimat[3][3]stypeviewscalenotlaycuberesdepthrecalclastsizenoisesizeturbulbrightcontrastrfacgfacbfacfiltersizemg_Hmg_lacunaritymg_octavesmg_offsetmg_gaindist_amountns_outscalevn_w1vn_w2vn_w3vn_w4vn_mexpvn_distmvn_coltypenoisedepthnoisetypenoisebasisnoisebasis2imaflagcropxmincropymincropxmaxcropymaxxrepeatyrepeatextendcheckerdistnablaiuser*nodetree*plugin*coba*envuse_nodespad[7]loc[3]rot[3]mat[4][4]min[3]max[3]pad3modetotexshdwrshdwgshdwbshdwpadenergydistspotsizespotblendhaintatt1att2*curfallofffalloff_typeshadspotsizebiassoftbufsizesampbuffersfiltertypebufflagbuftyperay_sampray_sampyray_sampzray_samp_typearea_shapearea_sizearea_sizeyarea_sizezadapt_threshray_samp_methodtexactshadhalostepsun_effect_typeskyblendtypehorizon_brightnessspreadsun_brightnesssun_sizebackscattered_lightsun_intensityatm_turbidityatm_inscattering_factoratm_extinction_factoratm_distance_factorskyblendfacsky_exposuresky_colorspacepad4YF_numphotonsYF_numsearchYF_phdepthYF_useqmcYF_bufsizeYF_padYF_causticblurYF_ltradiusYF_glowintYF_glowofsYF_glowtypeYF_pad2*mtex[18]specrspecgspecbmirrmirgmirbambrambbambgambemitangspectraray_mirroralpharefspeczoffsaddtranslucencyfresnel_mirfresnel_mir_ifresnel_trafresnel_tra_ifiltertx_limittx_falloffray_depthray_depth_traharseed1seed2gloss_mirgloss_trasamp_gloss_mirsamp_gloss_traadapt_thresh_miradapt_thresh_traaniso_gloss_mirdist_mirfadeto_mirshade_flagmode_lflarecstarclinecringchasizeflaresizesubsizeflarebooststrand_stastrand_endstrand_easestrand_surfnorstrand_minstrand_widthfadestrand_uvname[32]sbiaslbiasshad_alphaseptexrgbselpr_typepr_backpr_lampml_flagdiff_shaderspec_shaderroughnessrefracparam[4]rmsdarkness*ramp_col*ramp_specrampin_colrampin_specrampblend_colrampblend_specramp_showrampfac_colrampfac_spec*groupfrictionfhreflectfhdistxyfrictdynamodesss_radius[3]sss_col[3]sss_errorsss_scalesss_iorsss_colfacsss_texfacsss_frontsss_backsss_flagsss_presetYF_arYF_agYF_abYF_dscaleYF_dpwrYF_dsmpYF_presetYF_djitgpumaterialname[256]scale*bbi1j1k1i2j2k2selcol1selcol2quat[4]expxexpyexpzradrad2s*mat*imatelemsdisp**mattotcolwiresizerendersizethreshvec[3][3]alfaweightradiush1h2f1f2f3hidevec[4]mat_nrpntsupntsvresoluresolvorderuordervflaguflagv*knotsu*knotsvtilt_interpradius_interpcharidxkernhnurb*bevobj*taperobj*textoncurve*path*keybevpathlenbevresolwidthext1ext2resolu_renresolv_renspacemodespacinglinedistshearfsizewordspaceulposulheightxofyoflinewidth*strfamily[24]*vfont*vfontb*vfonti*vfontbisepchartotboxactbox*tbselstartselend*strinfocurinfoeffect*mface*mtface*tface*mvert*medge*dvert*mcol*msticky*texcomesh*mselectvdataedatafdatatotedgetotfacetotselectact_facecubemapsizesmoothreshsubdivsubdivrsubsurftype*mr*pv*tpageuv[4][2]col[4]transptileunwrapv1v2v3v4edcodecreasebweightdef_nr*dwtotweightco[3]no[3]pad[3]uv[2]co[2]indexfis[256]v[4]midv[2]*faces*colfaces*edges*edge_boundary_states*vert_edge_map*vert_face_map*map_mem*vertslevelslevel_countcurrentnewlvledgelvlpinlvlrenderlvluse_col*edge_flags*edge_creases*vert_map*edge_map*old_faces*old_edges*errormodifiersubdivTyperenderLevels*emCache*mCachedefaxispad[6]lengthrandomizeseed*ob_arm*start_cap*end_cap*curve_ob*offset_oboffset[3]scale[3]merge_distfit_typeoffset_typecountaxistolerance*mirror_obsplit_anglevalueresval_flagslim_flagse_flagsbevel_angledefgrp_name[32]*texturestrengthdirectionmidleveltexmapping*map_objectuvlayer_name[32]uvlayer_tmp*projectors[10]*imagenum_projectorsaspectxaspectypercentfaceCountfacrepeat*objectcenterstartxstartyheightnarrowspeeddampfallofftimeoffslifetimedeformflagmulti*prevCosparentinv[4][4]cent[3]*indexartotindexforce*clothObject*sim_parms*coll_parms*point_cache*x*xnew*xold*current_xnew*current_x*current_v*mfacesnumvertsnumfacesabsorptiontime*bvhtree*dmoperationvertextotinfluencegridsizeneedbind*bindweights*bindcostotcagevert*dyngrid*dyninfluences*dynverts*pad2dyngridsizedyncellmin[3]dyncellwidthbindmat[4][4]*psystotdmverttotdmedgetotdmfacepsysrt[2]*facepavgroupprotect*fss*target*auxTargetvgroup_name[32]keepDistshrinkTypeshrinkOptsprojAxissubsurfLevels*originfactorlimit[2]originOptspntswopntsuopntsvopntswtypeutypevtypewfufvfwdudvdw*defvec[8][3]partypepar1par2par3parsubstr[32]*track*proxy*proxy_group*proxy_from*action*poselib*poseconstraintChannelsdefbasemodifiersdloc[3]orig[3]dsize[3]drot[3]obmat[4][4]constinv[4][4]laycolbitstransflagipoflagtrackflagupflagnlaflagprotectflagipowinscaflagscavisflagboundtypedupondupoffdupstadupendsfctimemassdampinginertiaformfactorrdampingsizefacmarginmax_velmin_velm_contactProcessingThresholddtdtxactcolempty_drawtypepad1[3]empty_drawsizedupfacescapropsensorscontrollersactuatorsbbsize[3]actdefgameflaggameflag2*bsoftsoftflaganisotropicFriction[3]constraintsnlastripshooksparticlesystem*pd*soft*dup_groupfluidsimFlagrestrictflagshapenrshapeflagrecalcobody_type*fluidsimSettings*derivedDeform*derivedFinallastDataMaskstateinit_stategpulampcurindexactivedeflectforcefieldpdef_damppdef_rdamppdef_permpdef_frictpdef_rfrictf_strengthf_powerf_distf_dampmaxdistmindistmaxradminradf_power_rpdef_sbdamppdef_sbiftpdef_sboftclump_facclump_powkink_freqkink_shapekink_ampfree_endtex_nablatex_modekinkkink_axisrt2*rngf_noisesimframestartframeendframeeditframelinStiffangStiffvolumeviterationspiterationsditerationsciterationskSRHR_CLkSKHR_CLkSSHR_CLkSR_SPLT_CLkSK_SPLT_CLkSS_SPLT_CLkVCFkDPkDGkLFkPRkVCkDFkMTkCHRkKHRkSHRkAHRcollisionflagsnumclusteriterationswelding*particlestotpointtotspring*bpoint*bspringnodemassgravmediafrictrklimitphysics_speedgoalspringgoalfrictmingoalmaxgoaldefgoalvertgroupfuzzynessinspringinfrictefraintervallocalsolverflags**keystotpointkeysecondspringcolballballdampballstiffsbc_modeaeroedgeminloopsmaxloopschokesolver_IDplasticspringpreload*scratchshearstiffinpush*pointcacheshow_advancedoptionsresolutionxyzpreviewresxyzrealsizeguiDisplayModerenderDisplayModeviscosityValueviscosityModeviscosityExponentgravxgravygravzanimStartanimEndgstarmaxRefineiniVelxiniVelyiniVelz*orgMesh*meshSurface*meshBBsurfdataPath[240]bbStart[3]bbSize[3]typeFlagsdomainNovecgenvolumeInitTypepartSlipValuegenerateTracersgenerateParticlessurfaceSmoothingsurfaceSubdivsparticleInfSizeparticleInfAlphafarFieldSize*meshSurfNormalscpsTimeStartcpsTimeEndcpsQualityattractforceStrengthattractforceRadiusvelocityforceStrengthvelocityforceRadiuslastgoodframemistypehorrhorghorbhorkzenrzengzenbzenkambkfastcolexposureexprangelinfaclogfacgravityactivityBoxRadiusskytypeocclusionResphysicsEngineticratemaxlogicstepphysubstepmaxphystepmisimiststamistdistmisthistarrstargstarbstarkstarsizestarmindiststardiststarcolnoisedofstadofenddofmindofmaxaodistaodistfacaoenergyaobiasaomodeaosampaomixaocolorao_adapt_threshao_adapt_speed_facao_approx_errorao_approx_correctionao_samp_methodao_gather_methodao_approx_passes*aosphere*aotableshemiresmaxiterdrawtypesubshootpsubshootenodelimmaxsublamppamapamielmaelmimaxnodeconvergenceradfacgammaselcolsxsy*lpFormat*lpParmscbFormatcbParmsfccTypefccHandlerdwKeyFrameEverydwQualitydwBytesPerSeconddwFlagsdwInterleaveEveryavicodecname[128]*cdParms*padcdSizeqtcodecname[128]codecaudio_codecvideo_bitrateaudio_bitrategop_sizerc_min_raterc_max_raterc_buffer_sizemux_packet_sizemux_ratemixratemain*mat_override*light_overridelay_zmasklayflagpassflagpass_xor*avicodecdata*qtcodecdataffcodecdatacfrapsfrapefraimagesframaptothreadsframelenblurfacedgeRedgeGedgeBfullscreenxplayyplayfreqplayattribrt1stereomodedimensionspresetmaximsizexschyschxpartsypartswinposplanesimtypesubimtypequalityrpadrpad1rpad2scemoderendererocresalphamodeosafrs_secedgeintsafetyborderdisprectlayersactlayxaspyaspfrs_sec_basegausspostmulpostgammaposthuepostsatdither_intensitybake_osabake_filterbake_modebake_flagbake_normal_spacebake_quad_splitbake_maxdistbake_biasdistbake_padGIqualityGIcacheGImethodGIphotonsGIdirectYF_AAYFexportxmlYF_nobumpYF_clamprgbyfpad1GIdepthGIcausdepthGIpixelspersampleGIphotoncountGImixphotonsGIphotonradiusYF_raydepthYF_AApassesYF_AAsamplesyfpad2GIshadowqualityGIrefinementGIpowerGIindirpowerYF_gammaYF_exposureYF_raybiasYF_AApixelsizeYF_AAthresholdbackbuf[160]pic[160]stampstamp_font_idstamp_udata[160]fg_stamp[4]bg_stamp[4]simplify_subsurfsimplify_shadowsamplessimplify_particlessimplify_aossscineonwhitecineonblackcineongammajp2_presetjp2_depthrpad3domeresdomemodedomeangledometiltdomeresbuf*dometextparticle_percsubsurf_maxshadbufsample_maxao_errorcol[3]framename[64]*brushtoolseam_bleednormal_anglestepinverttotrekeytotaddkeybrushtypebrush[7]emitterdistdraw_timedname[36]mat[3][3]cornertypeeditbutflagjointrilimitdegrturnextr_offsdoublimitsegmentsringsverticesunwrapperuvcalc_radiusuvcalc_cubesizeuvcalc_marginuvcalc_mapdiruvcalc_mapalignuvcalc_flagautoik_chainlenimapaintparticleselect_threshclean_threshretopo_moderetopo_paint_toolline_divellipse_divretopo_hotspotmultires_subdiv_typeskgen_resolutionskgen_threshold_internalskgen_threshold_externalskgen_length_ratioskgen_length_limitskgen_angle_limitskgen_correlation_limitskgen_symmetry_limitskgen_retarget_angle_weightskgen_retarget_length_weightskgen_retarget_distance_weightskgen_optionsskgen_postproskgen_postpro_passesskgen_subdivisions[3]skgen_multi_level*skgen_templatebone_sketchingbone_sketching_convertskgen_subdivision_numberskgen_retarget_optionsskgen_retarget_rollskgen_side_string[8]skgen_num_string[8]edge_modepad3[2]dirview*session*cumapdrawbrushsmoothbrushpinchbrushinflatebrushgrabbrushlayerbrushflattenbrushpivot[3]brush_typetexnrtexrepttexfadetexsepaveragingtablet_sizetablet_strengthsymmrakeaxislock*camera*world*setbase*basactcursor[3]twcent[3]twmin[3]twmax[3]editbutsizeselectmodeproportionalprop_modeautomergepad5pad6autokey_mode*ed*radioframing*toolsettingsaudiotransform_spacesjumpframesnap_modesnap_flagsnap_target*theDagdagisvaliddagflagssculptdataframe_stepzoomblendximyimspacetypeblockscale*areablockhandler[8]viewmat[4][4]viewinv[4][4]persmat[4][4]persinv[4][4]winmat1[4][4]viewmat1[4][4]viewquat[4]zfaclay_usedpersp*ob_centre*bgpic*localvd*ri*retopo_view_data*depthsob_centre_bone[32]localviewlayactscenelockaroundcamzoompivot_lastgridgridviewpixsizenearfarcamdxcamdygridlinesviewbutgridflagmodeselecttwtypetwmodetwflagtwdrawflagtwmat[4][4]clip[4][4]*clipbbafterdrawzbufxrayflag2gridsubdivkeyflagsndofmodendoffilter*properties_storage*gpdlviewquat[4]lpersplviewverthormaskmin[2]max[2]minzoommaxzoomscrollkeeptotkeepaspectkeepzoomoldwinxoldwinycursor[2]rowbutv2d*editipoipokeyactname[32]constname[32]bonename[32]totipopinbutofschannellockmedian[3]cursenscuractaligntabomainbmainbo*lockpointexfromshowgroupmodeltypescriptblockre_alignoldkeypresstab[7]render_sizechanshownzebra*filelisttotfiletitle[24]dir[240]file[80]ofssortmaxnamelencollumsf_fpfp_str[8]*libfiledataretvalmenuact(*returnfunc)()(*returnfunc_event)()(*returnfunc_args)()*arg1*arg2*menup*pupmenuoopsvisiflagtree*treestoresearch_string[32]search_tsesearch_flagsdo_outlinevisstoreflagdeps_flagsimanrcurtileimtypenrdt_uvstickydt_uvstretchpad[5]centxcentyautosnap*texttopviewlinesfont_idlheightleftshowlinenrstabnumbercurrtab_setshowsyntaxoverwritepix_per_linetxtscrolltxtbarwordwrapdoplugins*py_draw*py_event*py_button*py_browsercallback*py_globaldictlastspacescriptname[256]scriptarg[256]*script*but_refsredraws*idaspect*curfont*edittreetreetype*filesactive_filenumtilesxnumtilesyselstateviewrectbookmarkrectscrollposscrollheightscrollareaactive_bookmarkprv_wprv_h*imgoutline[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_drawtypeiconfile[80]back[4]header[4]panel[4]shade1[4]shade2[4]hilite[4]grid[4]wire[4]select[4]lamp[4]active[4]group[4]group_active[4]transform[4]vertex[4]vertex_select[4]edge[4]edge_select[4]edge_seam[4]edge_sharp[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]cframe[4]vertex_sizefacedot_sizebpad[2]syntaxl[4]syntaxn[4]syntaxb[4]syntaxv[4]syntaxc[4]movie[4]image[4]scene[4]audio[4]effect[4]plugin[4]transition[4]meta[4]editmesh_active[4]handle_vertex[4]handle_vertex_select[4]handle_vertex_sizehpad[7]solid[4]tuitbutstv3dtfiletipotinfotsndtacttnlatseqtimatimaseltexttoopsttimetnodetarm[20]bpad[4]bpad1[4]spec[4]dupflagsavetimetempdir[160]fontdir[160]renderdir[160]textudir[160]plugtexdir[160]plugseqdir[160]pythondir[160]sounddir[160]yfexportdir[160]versionsvrmlflaggameflagswheellinescrolluiflaglanguageuserprefviewzoomconsole_bufferconsole_outmixbufsizefontsizeencodingtransoptsmenuthreshold1menuthreshold2fontname[256]themesundostepsundomemorygp_manhattendistgp_euclideandistgp_erasergp_settingstb_leftmousetb_rightmouselight[3]tw_hotspottw_flagtw_handlesizetw_sizetextimeouttexcollectratememcachelimitprefetchframesframeserverportpad_rot_angleobcenter_diarvisizervibrightrecent_filessmooth_viewtxglreslimitndof_panndof_rotatecurssizepad[8]versemaster[160]verseuser[160]glalphaclipautokey_flagcoba_weightvertbaseedgebaseareabase*sceneendxendysizexsizeyscenenrscreennrfullmainwinwinakthandler[8]*newvvec*v1*v2panelname[64]tabname[64]drawname[64]ofsxofsycontrolsnapold_ofsxold_ofsysortcounter*paneltab*v3*v4*fullwinmat[4][4]headrctwinrctheadwinwinheadertypebutspacetypewinxwinyhead_swaphead_equalwin_swapwin_equalheadbutlenheadbutofscursorspacedatauiblockspanelssubvstr[4]subversionpadsminversionminsubversiondisplaymode*curscreen*curscenefileflagsglobalfname[80]*ibuf*ibuf_comp*se1*se2*se3nrbottomrightxofsyofslift[3]gamma[3]gain[3]saturationdir[160]donestartstillendstill*stripdataorxory*crop*transform*color_balance*tstripdata*tstripdata_startstill*tstripdata_endstill*ibuf_startstill*ibuf_endstill*instance_private_data**current_private_data*tmpstartofsendofsmachinestartdispenddispmulhandsizeanim_preseek*stripfacf0facf1*seq1*seq2*seq3seqbase*sound*hdaudiolevelpancurposstrobe*effectdataanim_startofsanim_endofsblend_modeblend_opacity*oldbasep*parseq*seqbasepmetastackedgeWidthforwardwipetypefMinifClampfBoostdDistdQualitybNoCompScalexIniScaleyIniScalexFinScaleyFinxInixFinyIniyFinrotInirotFininterpolation*frameMapglobalSpeedlastValidFramebuttypeuserjitstatotpartnormfacobfacrandfactexfacrandlifeforce[3]vectsizemaxlendefvec[3]mult[4]life[4]child[4]mat[4]texmapcurmultstaticstepomattimetexspeedtexflag2negvertgroup_vvgroupname[32]vgroupname_v[32]*keysminfacusedusedelemdxdylinkotypeold*poin*oldpoinresetdistlastval*makeyqualqual2targetName[32]toggleName[32]value[32]maxvalue[32]delaydurationmaterialName[32]damptimerpropname[32]matname[32]axisflag*fromObjectsubject[32]body[32]pulsefreqtotlinks**linkstapjoyindexaxis_singleaxisfbuttonhathatfprecisionstr[128]module[64]*mynewinputstotslinks**slinksvalostate_mask*actframeProp[32]blendinpriorityend_resetstrideaxisstridelengthsndnrpad1[2]makecopycopymadepad2[1]track*melinVelocity[3]angVelocity[3]localflagdyn_operationforceloc[3]forcerot[3]linearvelocity[3]angularvelocity[3]*referencebutstabutendminmaxvisifacrotdampminloc[3]maxloc[3]minrot[3]maxrot[3]matprop[32]distributionint_arg_1int_arg_2float_arg_1float_arg_2toPropName[32]*toObjectbodyTypefilename[64]loadaniname[64]int_argfloat_arggoaccellerationmaxspeedmaxrotspeedmaxtiltspeedtiltdampspeeddamp*sample*stream*newpackedfile*snd_soundpanningattenuationpitchmin_gainmax_gaindistancestreamlenchannelshighpriopad[10]gaindopplerfactordopplervelocitynumsoundsblendernumsoundsgameengine*lamprengobjectdupli_ofs[3]childbaserollhead[3]tail[3]bone_mat[3][3]arm_head[3]arm_tail[3]arm_mat[4][4]xwidthzwidthease1ease2rad_headrad_tailbonebasechainbasepathflaglayer_protectedghostepghostsizeghosttypepathsizeghostsfghostefpathsfpathefpathbcpathacconstflagikflagselectflagagrp_index*bone*childiktree*b_bone_mats*dual_quat*b_bone_dual_quatschan_mat[4][4]pose_mat[4][4]pose_head[3]pose_tail[3]limitmin[3]limitmax[3]stiffness[3]ikstretch*customchanbaseproxy_layerstride_offset[3]cyclic_offset[3]agroupsactive_groupcustomColcs*grpreserved1groupsactive_markeractnractwidthtimeslidename[30]ownspacetarspaceenforceheadtail*tarsubtarget[32]matrix[4][4]space*proptarnumtargetsiterationsrootbonemax_rootbone*poletarpolesubtarget[32]poleangleorientweightgrabtarget[3]reserved2minmaxflagstuckcache[3]lockflagfollowflagvolmodeplaneorglengthbulgepivXpivYpivZaxXaxYaxZminLimit[6]maxLimit[6]extraFzinvmat[4][4]fromtomap[3]expofrom_min[3]from_max[3]to_min[3]to_max[3]zminzmaxpad[9]channel[32]no_rot_axisstride_axiscurmodactstartactendactoffsstridelenblendoutstridechannel[32]offs_bone[32]hasinputhasoutputdatatypesockettype*new_socknslimitstack_indexinternstack_index_extlocxlocyown_indexto_index*tosock*link*new_nodeusername[32]lastyoutputs*storageminiwidthcustom1custom2custom3custom4need_execexectotrbutrprvr*typeinfo*fromnode*tonode*fromsocknodeslinks*stack*threadstackinitstacksizecur_indexalltypes*owntype*selin*selout(*timecursor)()(*stats_draw)()(*test_break)()cyclicmoviesamplesminspeedpercentxpercentybokehcurvedimage_in_widthimage_in_heightcenter_xcenter_yspiniterwrapsigma_colorsigma_spacehuesatt1t2t3fstrengthfalphakey[4]x1x2y1y2colname[32]bktyperotationpreviewgamcono_zbuffstopmaxblurbthresh*dict*nodeangle_ofscolmodmixthresholdfademcjitprojfitshortymintablemaxtableext_in[2]ext_out[2]*curve*table*premultablecurrcliprcm[4]black[3]white[3]bwmul[3]sample[3]offset[2]innerradiusratergb[3]cloneactive_rndactive_cloneactive_mask*layerstotlayermaxlayertotsize*pooleditflagvel[3]rot[4]ave[3]numparentpa[4]w[4]fuv[4]foffsetrand[3]*stick_obprev_state*hairi_rot[4]r_rot[4]r_ave[3]r_ve[3]dietimebanksizemulnum_dmcachebpialiveloopdistrphystyperotmodeavemodereacteventdrawdraw_asdraw_sizechildtypedraw_stepren_stephair_stepkeys_stepadapt_angleadapt_pixrotfromintegratornbetweenboidneighboursbb_alignbb_uv_splitbb_animbb_split_offsetbb_tiltbb_rand_tiltbb_offset[2]simplify_flagsimplify_refsizesimplify_ratesimplify_transitionsimplify_viewporttimetweakjitfackeyed_timeeff_hairgrid_respartfactanfactanphasereactfacavefacphasefacrandrotfacrandphasefacrandsizereactshapeacc[3]dragfacbrownfacdampfacabslengthrandlengthchild_nbrren_child_nbrparentschildsizechildrandsizechildradchildflatchildspreadclumpfacclumppowrough1rough1_sizerough2rough2_sizerough2_thresrough_endrough_end_shapebranch_thresdraw_line[2]max_lat_accmax_tan_accaverage_velbankingmax_bankgroundzboidfac[8]boidrule[8]*eff_group*dup_ob*bb_ob*pd2*part*edit**pathcache**childcachepathcachebufschildcachebufs*target_ob*keyed_ob*latticeeffectorsreacteventstotchildtotcachedtotchildcachetarget_psyskeyed_psystotkeyedbakespacebb_uvname[3][32]vgroup[12]vg_negrt3*renderdata*cacheCdisCvi[3]structuralbendingmax_bendmax_structmax_shearavg_spring_lentimescaleeff_force_scaleeff_wind_scalesim_time_oldstepsPerFrameprerollmaxspringlensolver_typevgroup_bendvgroup_massvgroup_structpresets*collision_listepsilonself_frictionselfepsilonself_loop_countloop_countpressure*pointstotpointsthicknessstrokesframenum*actframegstepinfo[128]sbuffer_sizesbuffer_sflag*sbufferTYPEccharucharshortushortintlongulongfloatdoublevoidLinkLinkDataListBasevec2svec2ivec2fvec2dvec3ivec3fvec3dvec4ivec4fvec4drctirctfIDPropertyDataIDPropertyIDLibraryFileDataPreviewImageIpoDriverObjectIpoCurveBPointBezTripleIpoKeyBlockKeyScriptLinkTextLineTextMarkerTextPackedFileCameraImageUserImageGPUTextureanimRenderResultMTexTexPluginTexCBDataColorBandEnvMapImBufbNodeTreeTexMappingLampCurveMappingWaveMaterialGroupVFontVFontDataMetaElemBoundBoxMetaBallNurbCharInfoTextBoxCurvePathMeshMFaceMTFaceTFaceMVertMEdgeMDeformVertMColMStickyMSelectCustomDataMultiresPartialVisibilityMDeformWeightMTexPolyMLoopUVMLoopColMFloatPropertyMIntPropertyMStringPropertyOrigSpaceFaceMultiresColMultiresColFaceMultiresFaceMultiresEdgeMultiresLevelMultiresMapNodeModifierDataSubsurfModifierDataLatticeModifierDataCurveModifierDataBuildModifierDataMaskModifierDataArrayModifierDataMirrorModifierDataEdgeSplitModifierDataBevelModifierDataBMeshModifierDataDisplaceModifierDataUVProjectModifierDataDecimateModifierDataSmoothModifierDataCastModifierDataWaveModifierDataArmatureModifierDataHookModifierDataSoftbodyModifierDataClothModifierDataClothClothSimSettingsClothCollSettingsPointCacheCollisionModifierDataBVHTreeSurfaceModifierDataDerivedMeshBVHTreeFromMeshBooleanModifierDataMDefInfluenceMDefCellMeshDeformModifierDataParticleSystemModifierDataParticleSystemParticleInstanceModifierDataExplodeModifierDataFluidsimModifierDataFluidsimSettingsShrinkwrapModifierDataSimpleDeformModifierDataLatticebDeformGroupbActionbPoseBulletSoftBodyPartDeflectSoftBodyObHookRNGSBVertexBodyPointBodySpringSBScratchWorldRadioBaseAviCodecDataQuicktimeCodecDataFFMpegCodecDataAudioDataSceneRenderLayerRenderDataRenderProfileGameFramingTimeMarkerImagePaintSettingsBrushParticleBrushDataParticleEditSettingsTransformOrientationToolSettingsBrushDataSculptDataSculptSessionSceneDagForestBGpicView3DSpaceLinkScrAreaRenderInfoRetopoViewDataViewDepthsbGPdataView2DSpaceInfoSpaceIpoSpaceButsSpaceSeqSpaceFiledirentryBlendHandleSpaceOopsTreeStoreTreeStoreElemSpaceImageSpaceNlaSpaceTextScriptSpaceScriptSpaceTimeSpaceNodeSpaceImaSelFileListThemeUIThemeSpaceThemeWireColorbThemeSolidLightUserDefbScreenScrVertScrEdgePanelFileGlobalStripElemTStripElemStripCropStripTransformStripColorBalanceStripProxyStripPluginSeqSequencebSoundhdaudioMetaStackEditingWipeVarsGlowVarsTransformVarsSolidColorVarsSpeedControlVarsEffectBuildEffPartEffParticleWaveEffOopsbPropertybNearSensorbMouseSensorbTouchSensorbKeyboardSensorbPropertySensorbActuatorSensorbDelaySensorbCollisionSensorbRadarSensorbRandomSensorbRaySensorbMessageSensorbSensorbControllerbJoystickSensorbExpressionContbPythonContbActuatorbAddObjectActuatorbActionActuatorbSoundActuatorbCDActuatorbEditObjectActuatorbSceneActuatorbPropertyActuatorbObjectActuatorbIpoActuatorbCameraActuatorbConstraintActuatorbGroupActuatorbRandomActuatorbMessageActuatorbGameActuatorbVisibilityActuatorbTwoDFilterActuatorbParentActuatorbStateActuatorFreeCamerabSamplebSoundListenerSpaceSoundGroupObjectBonebArmaturebPoseChannelbActionGroupbActionChannelSpaceActionbConstraintChannelbConstraintbConstraintTargetbPythonConstraintbKinematicConstraintbTrackToConstraintbRotateLikeConstraintbLocateLikeConstraintbMinMaxConstraintbSizeLikeConstraintbActionConstraintbLockTrackConstraintbFollowPathConstraintbStretchToConstraintbRigidBodyJointConstraintbClampToConstraintbChildOfConstraintbTransformConstraintbLocLimitConstraintbRotLimitConstraintbSizeLimitConstraintbDistLimitConstraintbShrinkwrapConstraintbActionModifierbActionStripbNodeStackbNodeSocketbNodeLinkbNodebNodePreviewbNodeTypeNodeImageAnimNodeBlurDataNodeDBlurDataNodeBilateralBlurDataNodeHueSatNodeImageFileNodeChromaNodeTwoXYsNodeTwoFloatsNodeGeometryNodeVertexColNodeDefocusNodeScriptDictNodeGlareNodeTonemapNodeLensDistTexNodeOutputCurveMapPointCurveMapBrushCloneCustomDataLayerHairKeyParticleKeyChildParticleParticleDataParticleSettingsParticleEditParticleCacheKeyLinkNodebGPDspointbGPDstrokebGPDframebGPDlayerTLEN   L4( P\$8Tpx(x T|8lLDlh88,< L   @ 84DX`D`t@<l<<\hd4Dd<@L@@@<lht(T8xl(4H8P HP|<$$X P$88 x P4 088,@0,Hh(H,(lDLP<L< \PLlT`<8l (DtH@,@t<h4,,D,@,4` l\4<$x( (@   ,D8HSTRC9                     !"#$%&'()*+, -./0!!!"1#234./56789  :;<=>$ ?@.AB%%%%C=/DEF GHIJ& %KLM= N$OPQR'STUV%(((WXY) ))Z[\+]^_*`]a b(c(def ghij kl+mn]% ,opqrstuvwxyz{|$O'} ~- . " /01%++ 2 394   %5C@6$@57 .8qr38-9$O.467:    -;P  <Fqr !"#$%&'()*+,-.+/0123456789:;<=>?@ABCDEFGHIJKL2M$O'}=$O>NOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvw xyz{|}~/@66 2M9$O?F'} @%A+BBBCDC  $O># "%EEE"1#2F%FGH9C     $OI&> FbC    @ @@@%GFFJ'C $O&>KLMNOPQ R!J"S#T$T%T&6'()*+%,-./U0V1 M 2345 67K89:;%<O89=>W?PW@ANBC>DQX.25 67YEZ%RFSGL3.25 67[H\I]J^3_`_4aKLbMLcccaN`ObPQ R SdT6('%NUU VNUWXYZ[\]T$T&^_V`aKbOc('6%eee dfeefVg] h igee hee jkiee[lmnjee oH k ee p q r stulvwx]yleez{ |mee}]n ee~%]oee%p ee3 %q ee .]%reeseetee muee 3 %+veeF w ee xeeyeez{|}~eeNNNNNNK%eeee %ee %6ee9ee -eeee} ee  k ee  z%F%"$O&PC% o &    $OIC      >      !"#$%'} & ' ( )*G+4,-./0 1 2 3 456?789:;,<=>?@ABCF D & EF$GHIJKLMNOPQRSTUVWXYZ[\]^_`abcd3ef%}ghijklmnopqrstuvwxyz{|}~,%Q}0JJJ$ONG/TVU      +$O2M'} !"#$%&'( ) *+,-./0123%4 5 67F8 9:;<=]>?@ABCDD >E?FGH%IJKLMNOPQRSTUVWXYZ[\]^d_`"mabcdefghi#jklmn opqrstuvw xy%z{|}~ F* +F+F m8%   m   2M</] !+ "#$. %&'()*+,-./0129 34567'} g 89:;<=>?@@A% .- mBCDEKFGHIJKLMNOPQRS  " TUVWXYZ[\]^_`+sabcdefg'hijklmnopqCr st5uvwxyz {|}~01$@^kFGHIFGHIFGHIF  $OPA.$FGHWI  %/FGHI B|!FGHI+F     FGHI 9  FGHI.-< ,B | FGHIFGHI*]      ] FGH]+ FGHFGHIP  99%|*FGHI f%+     8     D6 !"#$%&'()*+,-./012345_6789:;<=>?@ABCDEFGHIJK "%LMNOPQRSTUVWXYZ[\]^%4_B`abcdefghijklmnopqrstuvwxyz{ |}~%26   % v%F4F'}    f  88%0988      -  [$O0      %    %9p !"# $%&'()*+,-.%/0]l12929-234\5Qn6789:;<=%>?@ABCDEFGHvIJKLM?2NOEP QR S TU% V WXY%+F>Z%[\]^_%`a%bc%de Fpznbfg +h ijkTlmn+F o -p% qzrstuvwx*y z{nT|F  o}~% - 4\ 4\ 4\m   -J % " ` -  T   4\+@ -z  % 4\D@?nf j+Fk4\_* - zT  - % ++ $Om]FGH   F - %? & l  " 1 &       %    !!! $O    g%"FGHI ###$O $ $$      %$O% %% %&*  '  ( ]%) * + +F , - [\%. !/ "0 #$%&1  '()*+,-./%+F2 v3 %04 123456785    9:v6    9:v7    9:v8  %9 ;: ::<= -;;; >?$O [\@ABCDEF < GHIJ====K<LMNOP+QRST=U>V? ???WXYN { Z [QR\]^_`abcde@Af>>>?g?h=i=U9 j k<l mnop qAr=s=t u vwBxy%Cz{D|}"~%%D pB%E%FGhij9HIJKLM zN  O jpmP[%HQ%RST SSS< @TU.\% Cm\/%2MUV F_ TV% WB%XBYZ XBXWXMm%Qd[p1F.bc4\:  953 678        m      l            ^\]    ! " # $ % & ' ( ) * + , - ?7?. / 0 $O51 %[2 ZY\3 ]4 ]5 6 7 6 8 9 : ; < Nn5= > ? 9@ A B /C D E F G H }{"^I J K L M N O P Q R S T U V W ]X Y Z [ \ ] ^ %F|^_ ` a b ]c d _e ```_f g h aaa i j b bb ak h l ^m  xn o p ENDB