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