diff options
| author | Ben Marsh <[email protected]> | 2019-10-22 09:07:59 -0400 |
|---|---|---|
| committer | Ben Marsh <[email protected]> | 2019-10-22 09:07:59 -0400 |
| commit | bd0027e737c6512397f841c22786274ed74b927f (patch) | |
| tree | f7ffbdb8f3741bb7f24635616cc189cba5cb865c /vrayPlug/plugin/shaveVrayInstanceI.cpp | |
| download | shave-and-a-haircut-bd0027e737c6512397f841c22786274ed74b927f.tar.xz shave-and-a-haircut-bd0027e737c6512397f841c22786274ed74b927f.zip | |
Adding Shave-and-a-Haircut 9.6
Diffstat (limited to 'vrayPlug/plugin/shaveVrayInstanceI.cpp')
| -rw-r--r-- | vrayPlug/plugin/shaveVrayInstanceI.cpp | 162 |
1 files changed, 162 insertions, 0 deletions
diff --git a/vrayPlug/plugin/shaveVrayInstanceI.cpp b/vrayPlug/plugin/shaveVrayInstanceI.cpp new file mode 100644 index 0000000..bc85015 --- /dev/null +++ b/vrayPlug/plugin/shaveVrayInstanceI.cpp @@ -0,0 +1,162 @@ +// Shave and a Haircut +// (c) 2019 Epic Games +// US Patent 6720962 + +/********************************************************************** + *< + FILE: shaveVrayInstanceI.cpp + + DESCRIPTION: VRay instnace for instanced hair + + CREATED BY: Vladimir Dubovoy <[email protected]> + + HISTORY: created 12-05-2010 + + *> + **********************************************************************/ + +#include "shaveVrayInstanceI.h" +#include "shaveVrayMovingTriVoxelPrim.h" +#include "shaveVrayStaticTriVoxelPrim.h" + + + +shaveVrayInstanceI::shaveVrayInstanceI( + shaveVrayPlugin *vplugin, + VR::MaterialInterface *mtl, VR::BSDFInterface *bsdf, int renderID, + VR::VolumetricInterface *volume, VR::LightList *lightList, +#if defined(VRAY30) + const VR::TraceTransform &baseTM, +#elif defined(VRAY40) + const VR::Transform &baseTM, +#endif + int objectID, + const tchar *userAttributes, int primaryVisibility) + : +#if defined(VRAY30) + VR::BaseMeshInstance(vplugin, vplugin, mtl, bsdf, renderID, volume, lightList, baseTM, objectID, userAttributes, primaryVisibility), +#elif defined(VRAY40) + VR::BaseInstance(vplugin, mtl, bsdf, renderID, volume, lightList, baseTM, objectID, userAttributes, primaryVisibility), +#endif + shaveVrayInstanceBase(vplugin) +{ + _hair() = NULL; + _stackid() = plugin->GetStackIndex(); + _numFacesPerInst() = plugin->GetNumFacesPerInst(); + _numUVSets() = plugin->GetNumUVSets(); + + + //shaveVrayVectorListParam* uvsParam = vplugin->GetUVparam(); + VR::VRayPluginParameter *uvsParam=plugin->paramList->getParam("uvs"); + if(uvsParam) + { + _uvs() = uvsParam->getVectorList(0); + + //int nuvs = uvsParam->getCount(0); + //_uvs() = VR::VectorList(nuvs); + //for(int i = 0; i < nuvs; i++) + //{ + // VR::Vector v = uvsParam->operator[](i); + // _uvs()[i] = v; + //} + } +} + + +void shaveVrayInstanceI::compileGeometry( + VR::VRayRenderer *vray, +#if defined(VRAY30) + VR::TraceTransform *tm, +#elif defined(VRAY40) + const VR::Transform *tm, +#endif + double *times, int tmCount) +{ + LOGMSG("SHAVE", "shaveVrayInstanceI::compileGeometry"); + LOGMSGI("SHAVE", "id",stackid()); + + loadHair(); + + if(!hair()) + return; + +#if defined(VRAY30) + BaseMeshInstance::compileGeometry(vray, tm, times, tmCount); +#elif defined(VRAY40) + BaseInstance::compileGeometry(vray, tm, times, tmCount); +#endif + + int num_voxels = hair()->GetNumVoxels(); + VR::RayServerInterface *rayserver = vray->getRayServer(); + int rendID = rayserver->getNewRenderIDArray(num_voxels); + + const VR::VRaySequenceData& sdata = vray->getSequenceData(); + bool blurOn = sdata.params.moblur.on != 0; + //tm is not animated + if ( !blurOn ) + { + for(int i = 0; i < num_voxels; i++) + { + IHairVoxel* voxel = hair()->GetVoxel(i); + if(voxel) + { + shaveVrayStaticTriVoxelPrim* vox_prim = new shaveVrayStaticTriVoxelPrim(voxel,vray,this); + + + if(rayserver->storeStaticPrimitive(vox_prim, NULL, rendID+i )) + _voxprims().push_back(vox_prim); + else + { + delete vox_prim; + LOGMSG("SHAVE", "shaveVrayInstanceI failed to store voxel prmitive on rayserver"); + + } + } + } + } + else + { + for(int i = 0; i < num_voxels; i++) + { + IHairVoxel* voxel = hair()->GetVoxel(i); + if(voxel) + { + shaveVrayMovingTriVoxelPrim* vox_prim = new shaveVrayMovingTriVoxelPrim(voxel,vray,this); + + + if(rayserver->storeMovingPrimitive(vox_prim, NULL, rendID+i)) + _voxprims().push_back(vox_prim); + else + { + delete vox_prim; + LOGMSG("SHAVE", "shaveVrayInstanceI failed to store voxel prmitive on rayserver"); + + } + } + } + } + LOGMSG("SHAVE", "shaveVrayInstanceI::compileGeometry - OK"); +} + +void shaveVrayInstanceI::clearGeometry(VR::VRayRenderer *vray) +{ + LOGMSG("SHAVE", "shaveVrayInstanceI::clearGeometry"); + + shaveVrayInstanceBase::freeMem(); +#if defined(VRAY30) + BaseMeshInstance::clearGeometry(vray); +#elif defined(VRAY40) + BaseInstance::clearGeometry(vray); +#endif + + //if(stack) + //{ + // delete stack; + // stack = NULL; + //} + LOGMSG("SHAVE", "shaveVrayInstanceI::clearGeometry - OK"); +} + + + + |