VR-Forces 4.10 Class Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
DtShadowSettingsRecord.h
Go to the documentation of this file.
1 /******************************************************************************
2 ** Copyright (c) 2021 MAK Technologies, Inc.
3 ** All rights reserved.
4 ******************************************************************************/
5 
9 
10 #pragma once
11 
15 
16 #include <string>
17 #include <map>
18 #include <vector>
19 
20 
21 
22 namespace makArchives
23 {
24 
30  {
31  public:
33  {
37  };
38 
40  {
43  MIXED_LOGARITHMIC_UNIFORM_SPLIT
44  };
45 
47  {
49  LIGHT_SPACE
50  };
51 
53  {
56  TEXTURE_2D_ARRAY_STORAGE
57  };
58 
60  {
64  VARIANCE_SHADOW_MAPS
65  };
66 
67 
69  {
75  PCF_POISSON_DISC_32_TAPS
76  };
77 
79  {
82  ROTATED_SAMPLING
83  };
84 
87 
90 
93 
95  DtShadowSettingsRecord& operator=(const DtShadowSettingsRecord& orig);
96 
98  void setName(const std::string& name);
99 
101  const std::string& name() const { return myName; }
102 
104  void setDirty(bool dirty);
105 
107  bool dirty() const { return myDirty; }
108 
110  void setShadowsEnabled(bool shadowsEnabled);
111 
113  bool shadowsEnabled() const { return myShadowsEnabled; }
114 
116  void setEntitiesCastsShadows(bool castShadows);
117 
119  bool entitiesCastsShadows() const { return myEntitiesCastsShadows; }
120 
122  void setPropsCastsShadows(bool castShadows);
123 
125  bool propsCastsShadows() const { return myPropsCastsShadows; }
126 
128  void setTerrainCastsShadows(bool castShadows);
129 
131  bool terrainCastsShadows() const { return myTerrainCastsShadows; }
132 
134  void setMoonCastsShadows(bool castShadows);
135 
137  bool moonCastsShadows() const { return myMoonCastsShadows; }
138 
140  void setCloudsCastsShadows(bool castShadows);
141 
143  bool cloudsCastsShadows() const { return myCloudsCastsShadows; }
144 
146  void setVisualizeShadows(bool visualizeShadows);
147 
149  bool visualizeShadows() const { return myVisualizeShadows; }
150 
152  void setNumberOfSplits(unsigned int numSplits);
153 
155  unsigned int numberOfSplits() const { return myNumSplits; }
156 
159  void setUseCachedFarCascade(bool useCachedFarCascade);
160 
162  bool useCachedFarCascade() const { return myUseCachedFarCascade; }
163 
165  void setFarCascadeUpdateFrequency(float value) { myFarCascadeUpdateFrequency = value; }
166 
168  float farCascadeUpdateFrequency() const {return myFarCascadeUpdateFrequency; }
169 
171  void setUseFrontFaceCulling(bool useFrontFaceCulling);
172 
174  bool useFrontFaceCulling() const { return myUseFrontFaceCulling; }
175 
177  void setUsePolygonOffset(bool usePolygonOffset);
178 
180  bool usePolygonOffset() const { return myUsePolygonOffset; }
181 
183  void setPolygonOffset(unsigned int splitIndex, float factor, float units);
184 
186  float polygonOffsetFactor(unsigned int splitIndex) const;
187 
189  float polygonOffsetUnits(unsigned int splitIndex) const;
190 
192  void setSpotLightShadowMapSize(unsigned int size);
193 
195  unsigned int spotLightShadowMapSize() const { return mySpotLightShadowMapSize; }
196 
198  void setGlobalLightShadowMapSize(unsigned int size);
199 
201  unsigned int globalLightShadowMapSize() const { return myGlobalLightShadowMapSize; }
202 
204  void setUseMaximumViewDistance(bool useMaximumViewDistance);
205 
207  bool useMaximumViewDistance() const { return myUseMaximumViewDistance; }
208 
210  void setMaximumViewDistance(double viewDistance);
211 
213  double maximumViewDistance() const { return myMaximumViewDistance; }
214 
215 
217  void setShadowAmbientFactor(float shadowAmbientFactor);
218 
220  float shadowAmbientFactor() const { return myShadowAmbientFactor; }
221 
223  void setShadowStabilizationScheme(ShadowStabilizationScheme shadowStabilizationScheme);
224 
226  ShadowStabilizationScheme shadowStabilizationScheme() const { return myShadowStabilizationScheme; }
227 
229  void setSplitDistanceComputeScheme(SplitDistanceComputeScheme splitDistanceComputeScheme);
230 
232  SplitDistanceComputeScheme splitDistanceComputeScheme() const { return mySplitDistanceComputeScheme; }
233 
235  void setMixedSplitInterpolationValue(double interp);
236 
238  double mixedSplitInterpolationValue() const { return myMixedSplitInterp; }
239 
241  void setSplitSelectionScheme(SplitSelectionScheme splitSelectionScheme);
242 
244  SplitSelectionScheme splitSelectionScheme() const { return mySplitSelectionScheme; }
245 
247  void setDataStorageScheme(DataStorageScheme dataStorageScheme);
248 
250  DataStorageScheme dataStorageScheme() const { return myDataStorageScheme; }
251 
253  void setPreFilteringScheme(PreFilteringScheme preFilteringScheme);
254 
256  PreFilteringScheme preFilteringScheme() const { return myPreFilteringScheme; }
257 
259  void setFilteringScheme(FilteringScheme filteringScheme);
260 
262  FilteringScheme filteringScheme() const { return myFilteringScheme; }
263 
265  void setPoissonDiskSamplingScheme(PoissonDiskSamplingScheme poissonDiskSamplingScheme);
266 
268  PoissonDiskSamplingScheme poissonDiskSamplingScheme() const { return myPoissonDiskSamplingScheme; }
269 
271  void setUseViewportMulticast(bool useViewportMulticast);
272 
274  bool useViewportMulticast() const { return myUseViewportMulticast; }
275 
277  void setNumPersistentPassesPerCascade(unsigned int numPasses);
278 
280  unsigned int numPersistentPassesPerCascade() const { return myNumPersistentPassesPerCascade; }
281 
283  void setNumAdditionalPassesPerCascade(unsigned int numPasses);
284 
286  unsigned int numAdditionalPassesPerCascade() const { return myNumAdditionalPassesPerCascade; }
287 
289  void setPcfFilterWidth(unsigned int pcfFilterWidth);
290 
292  unsigned int pcfFilterWidth() const { return myPcfFilterWidth; }
293 
295  void setBlendCascadesBoundaries(bool blendCascadesBoundaries);
296 
298  bool blendCascadesBoundaries() const { return myBlendCascadesBoundaries; }
299 
301  void setUseSDSM(bool useSDSM);
302 
304  bool useSDSM() const { return myUseSDSM; }
305 
307  void setSDSMReadBackLatency(unsigned int sdsmReadBackLatency);
308 
310  unsigned int sdsmReadBackLatency() const { return mySDSMReadBackLatency; }
311 
313  void setUseCameraDepthBufferForSDSM(bool useCameraDepthBufferForSDSM);
314 
316  bool useCameraDepthBufferForSDSM() const { return myUseCameraDepthBufferForSDSM; }
317 
319  void setAdjustFarAndFlagsBasedOnHAT(bool enabled) { myAdjustFarAndFlagsBasedOnHAT = enabled; }
320 
322  bool adjustFarAndFlagsBasedOnHAT() const { return myAdjustFarAndFlagsBasedOnHAT; }
323 
324 
326 
328  void setSplitNearDistanceMinimumBias(double bias);
329 
331  double splitNearDistanceMinimumBias() const;
332 
334  void setSplitNearDistanceMaximumBias(double bias);
335 
337  double splitNearDistanceMaximumBias() const;
338 
340  void setSplitFarDistanceBias(double bias);
341 
343  double splitFarDistanceBias() const;
345  void setEVSMPositiveExponent(double evsmPositiveExponent);
346 
348  double evsmPositiveExponent() const { return myEVSMPositiveExponent; }
349 
351  void setEVSMNegativeExponent(double evsmNegativeExponent);
352 
354  double evsmNegativeExponent() const { return myEVSMNegativeExponent; }
355 
357  void setVSMMininumVariance(double vsmMininumVariance);
358 
360  double vsmMininumVariance() const;
361 
363  void setESMDarkeningFactor(double esmDarkeningFactor);
364 
366  double esmDarkeningFactor() const;
367 
369  void setAntiFlickerQuantizationFactor(float antiFlickerQuantizationFactor);
370 
372  float antiFlickerQuantizationFactor() const;
373 
374 
375  protected:
376  friend class boost::serialization::access;
377 
378  template <typename Archive>
379  void serialize(Archive& ar, unsigned int version)
380  {
381  ar & BOOST_SERIALIZATION_NVP(myName);
382  ar & BOOST_SERIALIZATION_NVP(myNumSplits);
383  if (version >= 7)
384  {
385  ar & BOOST_SERIALIZATION_NVP(myShadowsEnabled);
386  }
387  ar & BOOST_SERIALIZATION_NVP(myEntitiesCastsShadows);
388  ar & BOOST_SERIALIZATION_NVP(myPropsCastsShadows);
389  ar & BOOST_SERIALIZATION_NVP(myTerrainCastsShadows);
390  ar & BOOST_SERIALIZATION_NVP(myVisualizeShadows);
391  ar & BOOST_SERIALIZATION_NVP(myPolygonOffsetFactor);
392  ar & BOOST_SERIALIZATION_NVP(myPolygonOffsetUnits);
393  ar & BOOST_SERIALIZATION_NVP(myUsePolygonOffset);
394  ar & BOOST_SERIALIZATION_NVP(mySpotLightShadowMapSize);
395  ar & BOOST_SERIALIZATION_NVP(myGlobalLightShadowMapSize);
396  ar & BOOST_SERIALIZATION_NVP(myMaximumViewDistance);
397  ar & BOOST_SERIALIZATION_NVP(myUseMaximumViewDistance);
398  ar & BOOST_SERIALIZATION_NVP(myUseFrontFaceCulling);
399  ar & BOOST_SERIALIZATION_NVP(mySplitNearDistanceMinimumBias);
400  ar & BOOST_SERIALIZATION_NVP(mySplitNearDistanceMaximumBias);
401  ar & BOOST_SERIALIZATION_NVP(mySplitFarDistanceBias);
402  ar & BOOST_SERIALIZATION_NVP(myShadowAmbientFactor);
403  ar & BOOST_SERIALIZATION_NVP(myShadowStabilizationScheme);
404  ar & BOOST_SERIALIZATION_NVP(myAntiFlickerQuantizationFactor);
405  ar & BOOST_SERIALIZATION_NVP(mySplitDistanceComputeScheme);
406  ar & BOOST_SERIALIZATION_NVP(myMixedSplitInterp);
407  ar & BOOST_SERIALIZATION_NVP(mySplitSelectionScheme);
408  ar & BOOST_SERIALIZATION_NVP(myDataStorageScheme);
409  ar & BOOST_SERIALIZATION_NVP(myPreFilteringScheme);
410  ar & BOOST_SERIALIZATION_NVP(myFilteringScheme);
411  ar & BOOST_SERIALIZATION_NVP(myPoissonDiskSamplingScheme);
412  ar & BOOST_SERIALIZATION_NVP(myNumAdditionalPassesPerCascade);
413  ar & BOOST_SERIALIZATION_NVP(myPcfFilterWidth);
414  ar & BOOST_SERIALIZATION_NVP(myBlendCascadesBoundaries);
415  ar & BOOST_SERIALIZATION_NVP(myUseSDSM);
416  ar & BOOST_SERIALIZATION_NVP(mySDSMReadBackLatency);
417  ar & BOOST_SERIALIZATION_NVP(myUseCameraDepthBufferForSDSM);
418  ar & BOOST_SERIALIZATION_NVP(myEVSMPositiveExponent);
419  ar & BOOST_SERIALIZATION_NVP(myEVSMNegativeExponent);
420  ar & BOOST_SERIALIZATION_NVP(myVSMMininumVariance);
421  ar & BOOST_SERIALIZATION_NVP(myESMDarkeningFactor);
422  ar & BOOST_SERIALIZATION_NVP(myDirty);
423  ar & BOOST_SERIALIZATION_NVP(myNumPersistentPassesPerCascade);
424 
425  if (version >= 2)
426  {
427  ar & BOOST_SERIALIZATION_NVP(myCloudsCastsShadows);
428  }
429 
430  if (version >= 3)
431  {
432  ar & BOOST_SERIALIZATION_NVP(myUseCachedFarCascade);
433  }
434 
435  if (version >= 4)
436  {
437  ar & BOOST_SERIALIZATION_NVP(myUseViewportMulticast);
438  }
439 
440  if (version >= 5)
441  {
442  ar & BOOST_SERIALIZATION_NVP(myAdjustFarAndFlagsBasedOnHAT);
443  ar & BOOST_SERIALIZATION_NVP(myFarCascadeUpdateFrequency);
444  }
445 
446  if (version >= 6)
447  {
448  ar & BOOST_SERIALIZATION_NVP(myMoonCastsShadows);
449  }
450  }
451 
452 
453  protected:
454 
455  std::string myName;
456  bool myDirty;
457 
459 
461 
463 
465 
467 
469 
470  unsigned int myNumSplits;
471 
472  std::vector<float> myPolygonOffsetFactor;
473 
474  std::vector<float> myPolygonOffsetUnits;
475 
477 
479 
481 
483 
485 
487 
489 
491 
506  unsigned int myPcfFilterWidth;
508  bool myUseSDSM;
509  unsigned int mySDSMReadBackLatency;
511 
512  // deprecated
514 
516 
518 
524 
525 
526  };
527 }
528 
SplitDistanceComputeScheme
Definition: DtShadowSettingsRecord.h:39
double mySplitNearDistanceMinimumBias
Definition: DtShadowSettingsRecord.h:492
ShadowStabilizationScheme myShadowStabilizationScheme
Definition: DtShadowSettingsRecord.h:496
unsigned int spotLightShadowMapSize() const
Gets spot light texture atlas size.
Definition: DtShadowSettingsRecord.h:195
bool myCloudsCastsShadows
Definition: DtShadowSettingsRecord.h:468
double mySplitNearDistanceMaximumBias
Definition: DtShadowSettingsRecord.h:493
DataStorageScheme
Definition: DtShadowSettingsRecord.h:52
bool adjustFarAndFlagsBasedOnHAT() const
Gets if near cascades automatically change size and flags in the air.
Definition: DtShadowSettingsRecord.h:322
bool entitiesCastsShadows() const
Gets entities casts shadow flag.
Definition: DtShadowSettingsRecord.h:119
BOOST_CLASS_VERSION(makArchives::DtDiGuySettingsRecord, 3)
FilteringScheme myFilteringScheme
Definition: DtShadowSettingsRecord.h:502
double myEVSMNegativeExponent
Definition: DtShadowSettingsRecord.h:515
Definition: DtShadowSettingsRecord.h:35
bool useViewportMulticast() const
Gets use viewport multicast.
Definition: DtShadowSettingsRecord.h:274
float farCascadeUpdateFrequency() const
Gets far cascade update frequency.
Definition: DtShadowSettingsRecord.h:168
DtShadowSettingsRecord is the serializable record used to read and write a Shadow Setting&#39;s Configura...
Definition: DtShadowSettingsRecord.h:29
bool myUseFrontFaceCulling
Definition: DtShadowSettingsRecord.h:482
FilteringScheme
Definition: DtShadowSettingsRecord.h:68
bool myUseViewportMulticast
Definition: DtShadowSettingsRecord.h:488
double evsmNegativeExponent() const
Gets exponential variance shadow maps(EVSM) negative exponent.
Definition: DtShadowSettingsRecord.h:354
bool useMaximumViewDistance() const
Gets use maximum view distance.
Definition: DtShadowSettingsRecord.h:207
Definition: DtShadowSettingsRecord.h:42
voidpf void uLong size
Definition: ioapi.h:39
bool terrainCastsShadows() const
Gets terrain casts shadow flag.
Definition: DtShadowSettingsRecord.h:131
bool myAdjustFarAndFlagsBasedOnHAT
Definition: DtShadowSettingsRecord.h:490
unsigned int myNumSplits
Definition: DtShadowSettingsRecord.h:470
float myFarCascadeUpdateFrequency
Definition: DtShadowSettingsRecord.h:486
void setFarCascadeUpdateFrequency(float value)
Sets far cascade update frequency.
Definition: DtShadowSettingsRecord.h:165
Contains DLL export macros.
Definition: DtShadowSettingsRecord.h:61
bool useSDSM() const
Gets Sample Distribution Shadow Maps(SDSM) enabled or disabled state.
Definition: DtShadowSettingsRecord.h:304
bool myDirty
Definition: DtShadowSettingsRecord.h:456
SplitDistanceComputeScheme splitDistanceComputeScheme() const
Gets split distance compute scheme.
Definition: DtShadowSettingsRecord.h:232
float myShadowAmbientFactor
Definition: DtShadowSettingsRecord.h:495
std::vector< float > myPolygonOffsetUnits
Definition: DtShadowSettingsRecord.h:474
Definition: DtShadowSettingsRecord.h:54
PoissonDiskSamplingScheme poissonDiskSamplingScheme() const
Gets poisson disk sampling scheme.
Definition: DtShadowSettingsRecord.h:268
bool myEntitiesCastsShadows
Definition: DtShadowSettingsRecord.h:460
double maximumViewDistance() const
Get maximum far distance.
Definition: DtShadowSettingsRecord.h:213
unsigned int numAdditionalPassesPerCascade() const
Gets additional number of passes per cascade.
Definition: DtShadowSettingsRecord.h:286
bool usePolygonOffset() const
Gets use polygon offset.
Definition: DtShadowSettingsRecord.h:180
bool blendCascadesBoundaries() const
Gets blend between cascade boundaries.
Definition: DtShadowSettingsRecord.h:298
Definition: DtShadowSettingsRecord.h:70
SplitSelectionScheme
Definition: DtShadowSettingsRecord.h:46
bool propsCastsShadows() const
Gets props casts shadow flag.
Definition: DtShadowSettingsRecord.h:125
unsigned int mySpotLightShadowMapSize
Definition: DtShadowSettingsRecord.h:522
double evsmPositiveExponent() const
Gets exponential variance shadow maps(EVSM) positive exponent.
Definition: DtShadowSettingsRecord.h:348
unsigned int myPcfFilterWidth
Definition: DtShadowSettingsRecord.h:506
float shadowAmbientFactor() const
Gets shadow factor for modulating the scene.
Definition: DtShadowSettingsRecord.h:220
bool shadowsEnabled() const
Gets shadows enabled flag.
Definition: DtShadowSettingsRecord.h:113
double myMaximumViewDistance
Definition: DtShadowSettingsRecord.h:478
DataStorageScheme myDataStorageScheme
Definition: DtShadowSettingsRecord.h:500
unsigned int numPersistentPassesPerCascade() const
Gets number of persistent passes per cascade.
Definition: DtShadowSettingsRecord.h:280
double myVSMMininumVariance
Definition: DtShadowSettingsRecord.h:517
void setAdjustFarAndFlagsBasedOnHAT(bool enabled)
Sets to make the near cascades automatically change size and flags in the air.
Definition: DtShadowSettingsRecord.h:319
bool myUseMaximumViewDistance
Definition: DtShadowSettingsRecord.h:480
bool myUseCameraDepthBufferForSDSM
Definition: DtShadowSettingsRecord.h:510
unsigned int pcfFilterWidth() const
Gets PCF filter width.
Definition: DtShadowSettingsRecord.h:292
ShadowStabilizationScheme
Definition: DtShadowSettingsRecord.h:32
bool myVisualizeShadows
Definition: DtShadowSettingsRecord.h:520
void serialize(Archive &ar, unsigned int version)
Definition: DtShadowSettingsRecord.h:379
PreFilteringScheme preFilteringScheme() const
Gets pre-filtering scheme.
Definition: DtShadowSettingsRecord.h:256
bool myUseSDSM
Definition: DtShadowSettingsRecord.h:508
SplitDistanceComputeScheme mySplitDistanceComputeScheme
Definition: DtShadowSettingsRecord.h:497
bool useCameraDepthBufferForSDSM() const
Gets the setting for the usage of the most recent camera depth buffer for Sample Distribution Shadow ...
Definition: DtShadowSettingsRecord.h:316
double myESMDarkeningFactor
Definition: DtShadowSettingsRecord.h:519
double myMixedSplitInterp
Definition: DtShadowSettingsRecord.h:498
SplitSelectionScheme mySplitSelectionScheme
Definition: DtShadowSettingsRecord.h:499
bool myTerrainCastsShadows
Definition: DtShadowSettingsRecord.h:464
PreFilteringScheme myPreFilteringScheme
Definition: DtShadowSettingsRecord.h:501
Definition: DtShadowSettingsRecord.h:48
unsigned int myNumPersistentPassesPerCascade
Definition: DtShadowSettingsRecord.h:504
PoissonDiskSamplingScheme
Definition: DtShadowSettingsRecord.h:78
Definition: DtShadowSettingsRecord.h:41
float myAntiFlickerQuantizationFactor
Definition: DtShadowSettingsRecord.h:521
unsigned int globalLightShadowMapSize() const
Gets global light texture size for cascaded shadow mapping.
Definition: DtShadowSettingsRecord.h:201
FilteringScheme filteringScheme() const
Gets filtering scheme.
Definition: DtShadowSettingsRecord.h:262
bool myBlendCascadesBoundaries
Definition: DtShadowSettingsRecord.h:507
double mySplitFarDistanceBias
Definition: DtShadowSettingsRecord.h:494
Definition: DtShadowSettingsRecord.h:34
PoissonDiskSamplingScheme myPoissonDiskSamplingScheme
Definition: DtShadowSettingsRecord.h:503
bool myUseCachedFarCascade
Definition: DtShadowSettingsRecord.h:484
Definition: DtShadowSettingsRecord.h:81
unsigned int myNumAdditionalPassesPerCascade
Definition: DtShadowSettingsRecord.h:505
DataStorageScheme dataStorageScheme() const
Gets data storage scheme.
Definition: DtShadowSettingsRecord.h:250
bool visualizeShadows() const
Gets shadow visualization mode.
Definition: DtShadowSettingsRecord.h:149
bool myMoonCastsShadows
Definition: DtShadowSettingsRecord.h:466
bool useCachedFarCascade() const
Gets use cached far cascade.
Definition: DtShadowSettingsRecord.h:162
SplitSelectionScheme splitSelectionScheme() const
Gets split selection scheme.
Definition: DtShadowSettingsRecord.h:244
unsigned int numberOfSplits() const
Gets shadow visualization mode.
Definition: DtShadowSettingsRecord.h:155
Definition: DtShadowSettingsRecord.h:80
double mixedSplitInterpolationValue() const
Gets mixed logarithmic uniform split interpolation value.
Definition: DtShadowSettingsRecord.h:238
bool myUsePolygonOffset
Definition: DtShadowSettingsRecord.h:523
std::vector< float > myPolygonOffsetFactor
Definition: DtShadowSettingsRecord.h:472
std::string myName
Definition: DtShadowSettingsRecord.h:455
unsigned int sdsmReadBackLatency() const
Gets Sample Distribution Shadow Maps(SDSM) read back latency.
Definition: DtShadowSettingsRecord.h:310
ShadowStabilizationScheme shadowStabilizationScheme() const
Gets shadow stabilization scheme.
Definition: DtShadowSettingsRecord.h:226
bool moonCastsShadows() const
Gets terrain casts shadow flag.
Definition: DtShadowSettingsRecord.h:137
bool dirty() const
Checks if any setting just changed.
Definition: DtShadowSettingsRecord.h:107
bool myPropsCastsShadows
Definition: DtShadowSettingsRecord.h:462
bool myShadowsEnabled
Definition: DtShadowSettingsRecord.h:458
double myEVSMPositiveExponent
Definition: DtShadowSettingsRecord.h:513
#define DT_DLL_MAKARCHIVES
Definition: makArchives.h:31
bool cloudsCastsShadows() const
Gets cloud casts shadow flag.
Definition: DtShadowSettingsRecord.h:143
const std::string & name() const
Returns setting name.
Definition: DtShadowSettingsRecord.h:101
unsigned int myGlobalLightShadowMapSize
Definition: DtShadowSettingsRecord.h:476
bool useFrontFaceCulling() const
Gets use front face culling.
Definition: DtShadowSettingsRecord.h:174
PreFilteringScheme
Definition: DtShadowSettingsRecord.h:59
unsigned int mySDSMReadBackLatency
Definition: DtShadowSettingsRecord.h:509

Document ID: Generated on Tue Sep 21 17:42:52 EDT 2021 from SVN revision 234861
Copyright © 2005-2021 MAK Technologies. All Rights Reserved (www.mak.com)