1 /* 2 Open Asset Import Library (assimp) 3 ---------------------------------------------------------------------- 4 5 Copyright (c) 2006-2016, assimp team 6 All rights reserved. 7 8 Redistribution and use of this software in source and binary forms, 9 with or without modification, are permitted provided that the 10 following conditions are met: 11 12 * Redistributions of source code must retain the above 13 copyright notice, this list of conditions and the 14 following disclaimer. 15 16 * Redistributions in binary form must reproduce the above 17 copyright notice, this list of conditions and the 18 following disclaimer in the documentation and/or other 19 materials provided with the distribution. 20 21 * Neither the name of the assimp team, nor the names of its 22 contributors may be used to endorse or promote products 23 derived from this software without specific prior 24 written permission of the assimp team. 25 26 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 27 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 28 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 29 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 30 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 31 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 32 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 33 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 34 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 35 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 36 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 37 38 ---------------------------------------------------------------------- 39 */ 40 41 /** @file BlenderScene.h 42 * @brief Intermediate representation of a BLEND scene. 43 */ 44 #ifndef INCLUDED_AI_BLEND_SCENE_H 45 #define INCLUDED_AI_BLEND_SCENE_H 46 47 #include "BlenderDNA.h" 48 49 namespace Assimp { 50 namespace Blender { 51 52 // Minor parts of this file are extracts from blender data structures, 53 // declared in the ./source/blender/makesdna directory. 54 // Stuff that is not used by Assimp is commented. 55 56 57 // NOTE 58 // this file serves as input data to the `./scripts/genblenddna.py` 59 // script. This script generates the actual binding code to read a 60 // blender file with a possibly different DNA into our structures. 61 // Only `struct` declarations are considered and the following 62 // rules must be obeyed in order for the script to work properly: 63 // 64 // * C++ style comments only 65 // 66 // * Structures may include the primitive types char, int, short, 67 // float, double. Signedness specifiers are not allowed on 68 // integers. Enum types are allowed, but they must have been 69 // defined in this header. 70 // 71 // * Structures may aggregate other structures, unless not defined 72 // in this header. 73 // 74 // * Pointers to other structures or primitive types are allowed. 75 // No references or double pointers or arrays of pointers. 76 // A pointer to a T is normally written as std::shared_ptr, while a 77 // pointer to an array of elements is written as boost:: 78 // shared_array. To avoid cyclic pointers, use raw pointers in 79 // one direction. 80 // 81 // * Arrays can have maximally two-dimensions. Any non-pointer 82 // type can form them. 83 // 84 // * Multiple fields can be declare in a single line (i.e `int a,b;`) 85 // provided they are neither pointers nor arrays. 86 // 87 // * One of WARN, FAIL can be appended to the declaration ( 88 // prior to the semiolon to specifiy the error handling policy if 89 // this field is missing in the input DNA). If none of those 90 // is specified the default policy is to subtitute a default 91 // value for the field. 92 // 93 94 #define WARN // warn if field is missing, substitute default value 95 #define FAIL // fail the import if the field does not exist 96 97 struct Object; 98 struct MTex; 99 struct Image; 100 101 #include <memory> 102 103 #define AI_BLEND_MESH_MAX_VERTS 2000000000L 104 105 // ------------------------------------------------------------------------------- 106 struct ID : ElemBase { 107 108 char name[1024] WARN; 109 short flag; 110 }; 111 112 // ------------------------------------------------------------------------------- 113 struct ListBase : ElemBase { 114 115 std::shared_ptr<ElemBase> first; 116 std::shared_ptr<ElemBase> last; 117 }; 118 119 120 // ------------------------------------------------------------------------------- 121 struct PackedFile : ElemBase { 122 int size WARN; 123 int seek WARN; 124 std::shared_ptr< FileOffset > data WARN; 125 }; 126 127 // ------------------------------------------------------------------------------- 128 struct GroupObject : ElemBase { 129 130 std::shared_ptr<GroupObject> prev,next FAIL; 131 std::shared_ptr<Object> ob; 132 }; 133 134 // ------------------------------------------------------------------------------- 135 struct Group : ElemBase { 136 ID id FAIL; 137 int layer; 138 139 std::shared_ptr<GroupObject> gobject; 140 }; 141 142 // ------------------------------------------------------------------------------- 143 struct World : ElemBase { 144 ID id FAIL; 145 146 }; 147 148 // ------------------------------------------------------------------------------- 149 struct MVert : ElemBase { 150 float co[3] FAIL; 151 float no[3] FAIL; 152 char flag; 153 int mat_nr WARN; 154 int bweight; 155 }; 156 157 // ------------------------------------------------------------------------------- 158 struct MEdge : ElemBase { 159 int v1, v2 FAIL; 160 char crease, bweight; 161 short flag; 162 }; 163 164 // ------------------------------------------------------------------------------- 165 struct MLoop : ElemBase { 166 int v, e; 167 }; 168 169 // ------------------------------------------------------------------------------- 170 struct MLoopUV : ElemBase { 171 float uv[2]; 172 int flag; 173 }; 174 175 // ------------------------------------------------------------------------------- 176 // Note that red and blue are not swapped, as with MCol 177 struct MLoopCol : ElemBase { 178 char r, g, b, a; 179 }; 180 181 // ------------------------------------------------------------------------------- 182 struct MPoly : ElemBase { 183 int loopstart; 184 int totloop; 185 short mat_nr; 186 char flag; 187 }; 188 189 // ------------------------------------------------------------------------------- 190 struct MTexPoly : ElemBase { 191 Image* tpage; 192 char flag, transp; 193 short mode, tile, pad; 194 }; 195 196 // ------------------------------------------------------------------------------- 197 struct MCol : ElemBase { 198 char r,g,b,a FAIL; 199 }; 200 201 // ------------------------------------------------------------------------------- 202 struct MFace : ElemBase { 203 int v1,v2,v3,v4 FAIL; 204 int mat_nr FAIL; 205 char flag; 206 }; 207 208 // ------------------------------------------------------------------------------- 209 struct TFace : ElemBase { 210 float uv[4][2] FAIL; 211 int col[4] FAIL; 212 char flag; 213 short mode; 214 short tile; 215 short unwrap; 216 }; 217 218 // ------------------------------------------------------------------------------- 219 struct MTFace : ElemBase { 220 221 float uv[4][2] FAIL; 222 char flag; 223 short mode; 224 short tile; 225 short unwrap; 226 227 // std::shared_ptr<Image> tpage; 228 }; 229 230 // ------------------------------------------------------------------------------- 231 struct MDeformWeight : ElemBase { 232 int def_nr FAIL; 233 float weight FAIL; 234 }; 235 236 // ------------------------------------------------------------------------------- 237 struct MDeformVert : ElemBase { 238 239 vector<MDeformWeight> dw WARN; 240 int totweight; 241 }; 242 243 // ------------------------------------------------------------------------------- 244 #define MA_RAYMIRROR 0x40000 245 #define MA_TRANSPARENCY 0x10000 246 #define MA_RAYTRANSP 0x20000 247 #define MA_ZTRANSP 0x00040 248 249 struct Material : ElemBase { 250 ID id FAIL; 251 252 float r,g,b WARN; 253 float specr,specg,specb WARN; 254 short har; 255 float ambr,ambg,ambb WARN; 256 float mirr,mirg,mirb; 257 float emit WARN; 258 float ray_mirror; 259 float alpha WARN; 260 float ref; 261 float translucency; 262 int mode; 263 float roughness; 264 float darkness; 265 float refrac; 266 267 268 float amb; 269 float ang; 270 float spectra; 271 float spec; 272 float zoffs; 273 float add; 274 float fresnel_mir; 275 float fresnel_mir_i; 276 float fresnel_tra; 277 float fresnel_tra_i; 278 float filter; 279 float tx_limit; 280 float tx_falloff; 281 float gloss_mir; 282 float gloss_tra; 283 float adapt_thresh_mir; 284 float adapt_thresh_tra; 285 float aniso_gloss_mir; 286 float dist_mir; 287 float hasize; 288 float flaresize; 289 float subsize; 290 float flareboost; 291 float strand_sta; 292 float strand_end; 293 float strand_ease; 294 float strand_surfnor; 295 float strand_min; 296 float strand_widthfade; 297 float sbias; 298 float lbias; 299 float shad_alpha; 300 float param; 301 float rms; 302 float rampfac_col; 303 float rampfac_spec; 304 float friction; 305 float fh; 306 float reflect; 307 float fhdist; 308 float xyfrict; 309 float sss_radius; 310 float sss_col; 311 float sss_error; 312 float sss_scale; 313 float sss_ior; 314 float sss_colfac; 315 float sss_texfac; 316 float sss_front; 317 float sss_back; 318 319 short material_type; 320 short flag; 321 short ray_depth; 322 short ray_depth_tra; 323 short samp_gloss_mir; 324 short samp_gloss_tra; 325 short fadeto_mir; 326 short shade_flag; 327 short flarec; 328 short starc; 329 short linec; 330 short ringc; 331 short pr_lamp; 332 short pr_texture; 333 short ml_flag; 334 short texco; 335 short mapto; 336 short ramp_show; 337 short pad3; 338 short dynamode; 339 short pad2; 340 short sss_flag; 341 short sss_preset; 342 short shadowonly_flag; 343 short index; 344 short vcol_alpha; 345 short pad4; 346 347 char seed1; 348 char seed2; 349 350 std::shared_ptr<Group> group; 351 352 short diff_shader WARN; 353 short spec_shader WARN; 354 355 std::shared_ptr<MTex> mtex[18]; 356 }; 357 358 // ------------------------------------------------------------------------------- 359 struct Mesh : ElemBase { 360 ID id FAIL; 361 362 int totface FAIL; 363 int totedge FAIL; 364 int totvert FAIL; 365 int totloop; 366 int totpoly; 367 368 short subdiv; 369 short subdivr; 370 short subsurftype; 371 short smoothresh; 372 373 vector<MFace> mface FAIL; 374 vector<MTFace> mtface; 375 vector<TFace> tface; 376 vector<MVert> mvert FAIL; 377 vector<MEdge> medge WARN; 378 vector<MLoop> mloop; 379 vector<MLoopUV> mloopuv; 380 vector<MLoopCol> mloopcol; 381 vector<MPoly> mpoly; 382 vector<MTexPoly> mtpoly; 383 vector<MDeformVert> dvert; 384 vector<MCol> mcol; 385 386 vector< std::shared_ptr<Material> > mat FAIL; 387 }; 388 389 // ------------------------------------------------------------------------------- 390 struct Library : ElemBase { 391 ID id FAIL; 392 393 char name[240] WARN; 394 char filename[240] FAIL; 395 std::shared_ptr<Library> parent WARN; 396 }; 397 398 // ------------------------------------------------------------------------------- 399 struct Camera : ElemBase { 400 enum Type { 401 Type_PERSP = 0 402 ,Type_ORTHO = 1 403 }; 404 405 ID id FAIL; 406 407 Type type,flag WARN; 408 float lens WARN; 409 float sensor_x WARN; 410 float clipsta, clipend; 411 }; 412 413 414 // ------------------------------------------------------------------------------- 415 struct Lamp : ElemBase { 416 417 enum FalloffType { 418 FalloffType_Constant = 0x0 419 ,FalloffType_InvLinear = 0x1 420 ,FalloffType_InvSquare = 0x2 421 //,FalloffType_Curve = 0x3 422 //,FalloffType_Sliders = 0x4 423 }; 424 425 enum Type { 426 Type_Local = 0x0 427 ,Type_Sun = 0x1 428 ,Type_Spot = 0x2 429 ,Type_Hemi = 0x3 430 ,Type_Area = 0x4 431 //,Type_YFPhoton = 0x5 432 }; 433 434 ID id FAIL; 435 //AnimData *adt; 436 437 Type type FAIL; 438 short flags; 439 440 //int mode; 441 442 short colormodel, totex; 443 float r,g,b,k WARN; 444 //float shdwr, shdwg, shdwb; 445 446 float energy, dist, spotsize, spotblend; 447 //float haint; 448 449 float att1, att2; 450 //struct CurveMapping *curfalloff; 451 FalloffType falloff_type; 452 453 //float clipsta, clipend, shadspotsize; 454 //float bias, soft, compressthresh; 455 //short bufsize, samp, buffers, filtertype; 456 //char bufflag, buftype; 457 458 //short ray_samp, ray_sampy, ray_sampz; 459 //short ray_samp_type; 460 short area_shape; 461 float area_size, area_sizey, area_sizez; 462 //float adapt_thresh; 463 //short ray_samp_method; 464 465 //short texact, shadhalostep; 466 467 //short sun_effect_type; 468 //short skyblendtype; 469 //float horizon_brightness; 470 //float spread; 471 float sun_brightness; 472 //float sun_size; 473 //float backscattered_light; 474 //float sun_intensity; 475 //float atm_turbidity; 476 //float atm_inscattering_factor; 477 //float atm_extinction_factor; 478 //float atm_distance_factor; 479 //float skyblendfac; 480 //float sky_exposure; 481 //short sky_colorspace; 482 483 // int YF_numphotons, YF_numsearch; 484 // short YF_phdepth, YF_useqmc, YF_bufsize, YF_pad; 485 // float YF_causticblur, YF_ltradius; 486 487 // float YF_glowint, YF_glowofs; 488 // short YF_glowtype, YF_pad2; 489 490 //struct Ipo *ipo; 491 //struct MTex *mtex[18]; 492 // short pr_texture; 493 494 //struct PreviewImage *preview; 495 }; 496 497 // ------------------------------------------------------------------------------- 498 struct ModifierData : ElemBase { 499 enum ModifierType { 500 eModifierType_None = 0, 501 eModifierType_Subsurf, 502 eModifierType_Lattice, 503 eModifierType_Curve, 504 eModifierType_Build, 505 eModifierType_Mirror, 506 eModifierType_Decimate, 507 eModifierType_Wave, 508 eModifierType_Armature, 509 eModifierType_Hook, 510 eModifierType_Softbody, 511 eModifierType_Boolean, 512 eModifierType_Array, 513 eModifierType_EdgeSplit, 514 eModifierType_Displace, 515 eModifierType_UVProject, 516 eModifierType_Smooth, 517 eModifierType_Cast, 518 eModifierType_MeshDeform, 519 eModifierType_ParticleSystem, 520 eModifierType_ParticleInstance, 521 eModifierType_Explode, 522 eModifierType_Cloth, 523 eModifierType_Collision, 524 eModifierType_Bevel, 525 eModifierType_Shrinkwrap, 526 eModifierType_Fluidsim, 527 eModifierType_Mask, 528 eModifierType_SimpleDeform, 529 eModifierType_Multires, 530 eModifierType_Surface, 531 eModifierType_Smoke, 532 eModifierType_ShapeKey 533 }; 534 535 std::shared_ptr<ElemBase> next WARN; 536 std::shared_ptr<ElemBase> prev WARN; 537 538 int type, mode; 539 char name[32]; 540 }; 541 542 // ------------------------------------------------------------------------------- 543 struct SubsurfModifierData : ElemBase { 544 545 enum Type { 546 547 TYPE_CatmullClarke = 0x0, 548 TYPE_Simple = 0x1 549 }; 550 551 enum Flags { 552 // some omitted 553 FLAGS_SubsurfUV =1<<3 554 }; 555 556 ModifierData modifier FAIL; 557 short subdivType WARN; 558 short levels FAIL; 559 short renderLevels ; 560 short flags; 561 }; 562 563 // ------------------------------------------------------------------------------- 564 struct MirrorModifierData : ElemBase { 565 566 enum Flags { 567 Flags_CLIPPING =1<<0, 568 Flags_MIRROR_U =1<<1, 569 Flags_MIRROR_V =1<<2, 570 Flags_AXIS_X =1<<3, 571 Flags_AXIS_Y =1<<4, 572 Flags_AXIS_Z =1<<5, 573 Flags_VGROUP =1<<6 574 }; 575 576 ModifierData modifier FAIL; 577 578 short axis, flag; 579 float tolerance; 580 std::shared_ptr<Object> mirror_ob; 581 }; 582 583 // ------------------------------------------------------------------------------- 584 struct Object : ElemBase { 585 ID id FAIL; 586 587 enum Type { 588 Type_EMPTY = 0 589 ,Type_MESH = 1 590 ,Type_CURVE = 2 591 ,Type_SURF = 3 592 ,Type_FONT = 4 593 ,Type_MBALL = 5 594 595 ,Type_LAMP = 10 596 ,Type_CAMERA = 11 597 598 ,Type_WAVE = 21 599 ,Type_LATTICE = 22 600 }; 601 602 Type type FAIL; 603 float obmat[4][4] WARN; 604 float parentinv[4][4] WARN; 605 char parsubstr[32] WARN; 606 607 Object* parent WARN; 608 std::shared_ptr<Object> track WARN; 609 610 std::shared_ptr<Object> proxy,proxy_from,proxy_group WARN; 611 std::shared_ptr<Group> dup_group WARN; 612 std::shared_ptr<ElemBase> data FAIL; 613 614 ListBase modifiers; 615 }; 616 617 618 // ------------------------------------------------------------------------------- 619 struct Base : ElemBase { 620 Base* prev WARN; 621 std::shared_ptr<Base> next WARN; 622 std::shared_ptr<Object> object WARN; 623 }; 624 625 // ------------------------------------------------------------------------------- 626 struct Scene : ElemBase { 627 ID id FAIL; 628 629 std::shared_ptr<Object> camera WARN; 630 std::shared_ptr<World> world WARN; 631 std::shared_ptr<Base> basact WARN; 632 633 ListBase base; 634 }; 635 636 637 // ------------------------------------------------------------------------------- 638 struct Image : ElemBase { 639 ID id FAIL; 640 641 char name[240] WARN; 642 643 //struct anim *anim; 644 645 short ok, flag; 646 short source, type, pad, pad1; 647 int lastframe; 648 649 short tpageflag, totbind; 650 short xrep, yrep; 651 short twsta, twend; 652 //unsigned int bindcode; 653 //unsigned int *repbind; 654 655 std::shared_ptr<PackedFile> packedfile; 656 //struct PreviewImage * preview; 657 658 float lastupdate; 659 int lastused; 660 short animspeed; 661 662 short gen_x, gen_y, gen_type; 663 }; 664 665 // ------------------------------------------------------------------------------- 666 struct Tex : ElemBase { 667 668 // actually, the only texture type we support is Type_IMAGE 669 enum Type { 670 Type_CLOUDS = 1 671 ,Type_WOOD = 2 672 ,Type_MARBLE = 3 673 ,Type_MAGIC = 4 674 ,Type_BLEND = 5 675 ,Type_STUCCI = 6 676 ,Type_NOISE = 7 677 ,Type_IMAGE = 8 678 ,Type_PLUGIN = 9 679 ,Type_ENVMAP = 10 680 ,Type_MUSGRAVE = 11 681 ,Type_VORONOI = 12 682 ,Type_DISTNOISE = 13 683 ,Type_POINTDENSITY = 14 684 ,Type_VOXELDATA = 15 685 }; 686 687 enum ImageFlags { 688 ImageFlags_INTERPOL = 1 689 ,ImageFlags_USEALPHA = 2 690 ,ImageFlags_MIPMAP = 4 691 ,ImageFlags_IMAROT = 16 692 ,ImageFlags_CALCALPHA = 32 693 ,ImageFlags_NORMALMAP = 2048 694 ,ImageFlags_GAUSS_MIP = 4096 695 ,ImageFlags_FILTER_MIN = 8192 696 ,ImageFlags_DERIVATIVEMAP = 16384 697 }; 698 699 ID id FAIL; 700 // AnimData *adt; 701 702 //float noisesize, turbul; 703 //float bright, contrast, rfac, gfac, bfac; 704 //float filtersize; 705 706 //float mg_H, mg_lacunarity, mg_octaves, mg_offset, mg_gain; 707 //float dist_amount, ns_outscale; 708 709 //float vn_w1; 710 //float vn_w2; 711 //float vn_w3; 712 //float vn_w4; 713 //float vn_mexp; 714 //short vn_distm, vn_coltype; 715 716 //short noisedepth, noisetype; 717 //short noisebasis, noisebasis2; 718 719 //short flag; 720 ImageFlags imaflag; 721 Type type FAIL; 722 //short stype; 723 724 //float cropxmin, cropymin, cropxmax, cropymax; 725 //int texfilter; 726 //int afmax; 727 //short xrepeat, yrepeat; 728 //short extend; 729 730 //short fie_ima; 731 //int len; 732 //int frames, offset, sfra; 733 734 //float checkerdist, nabla; 735 //float norfac; 736 737 //ImageUser iuser; 738 739 //bNodeTree *nodetree; 740 //Ipo *ipo; 741 std::shared_ptr<Image> ima WARN; 742 //PluginTex *plugin; 743 //ColorBand *coba; 744 //EnvMap *env; 745 //PreviewImage * preview; 746 //PointDensity *pd; 747 //VoxelData *vd; 748 749 //char use_nodes; 750 }; 751 752 // ------------------------------------------------------------------------------- 753 struct MTex : ElemBase { 754 755 enum Projection { 756 Proj_N = 0 757 ,Proj_X = 1 758 ,Proj_Y = 2 759 ,Proj_Z = 3 760 }; 761 762 enum Flag { 763 Flag_RGBTOINT = 0x1 764 ,Flag_STENCIL = 0x2 765 ,Flag_NEGATIVE = 0x4 766 ,Flag_ALPHAMIX = 0x8 767 ,Flag_VIEWSPACE = 0x10 768 }; 769 770 enum BlendType { 771 BlendType_BLEND = 0 772 ,BlendType_MUL = 1 773 ,BlendType_ADD = 2 774 ,BlendType_SUB = 3 775 ,BlendType_DIV = 4 776 ,BlendType_DARK = 5 777 ,BlendType_DIFF = 6 778 ,BlendType_LIGHT = 7 779 ,BlendType_SCREEN = 8 780 ,BlendType_OVERLAY = 9 781 ,BlendType_BLEND_HUE = 10 782 ,BlendType_BLEND_SAT = 11 783 ,BlendType_BLEND_VAL = 12 784 ,BlendType_BLEND_COLOR = 13 785 }; 786 787 enum MapType { 788 MapType_COL = 1 789 ,MapType_NORM = 2 790 ,MapType_COLSPEC = 4 791 ,MapType_COLMIR = 8 792 ,MapType_REF = 16 793 ,MapType_SPEC = 32 794 ,MapType_EMIT = 64 795 ,MapType_ALPHA = 128 796 ,MapType_HAR = 256 797 ,MapType_RAYMIRR = 512 798 ,MapType_TRANSLU = 1024 799 ,MapType_AMB = 2048 800 ,MapType_DISPLACE = 4096 801 ,MapType_WARP = 8192 802 }; 803 804 // short texco, maptoneg; 805 MapType mapto; 806 807 BlendType blendtype; 808 std::shared_ptr<Object> object; 809 std::shared_ptr<Tex> tex; 810 char uvname[32]; 811 812 Projection projx,projy,projz; 813 char mapping; 814 float ofs[3], size[3], rot; 815 816 int texflag; 817 short colormodel, pmapto, pmaptoneg; 818 //short normapspace, which_output; 819 //char brush_map_mode; 820 float r,g,b,k WARN; 821 //float def_var, rt; 822 823 //float colfac, varfac; 824 825 float norfac; 826 //float dispfac, warpfac; 827 float colspecfac, mirrfac, alphafac; 828 float difffac, specfac, emitfac, hardfac; 829 //float raymirrfac, translfac, ambfac; 830 //float colemitfac, colreflfac, coltransfac; 831 //float densfac, scatterfac, reflfac; 832 833 //float timefac, lengthfac, clumpfac; 834 //float kinkfac, roughfac, padensfac; 835 //float lifefac, sizefac, ivelfac, pvelfac; 836 //float shadowfac; 837 //float zenupfac, zendownfac, blendfac; 838 }; 839 840 841 } 842 } 843 #endif 844