Skip to content

Commit

Permalink
Add extra light controls to delta lights
Browse files Browse the repository at this point in the history
namely importance multiplier and cast indirect light toggle
  • Loading branch information
luisbarrancos committed Mar 3, 2019
1 parent 132b5d8 commit 7aa2190
Show file tree
Hide file tree
Showing 4 changed files with 68 additions and 11 deletions.
6 changes: 6 additions & 0 deletions scripts/appleseedMaya/AETemplates/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,12 @@ def buildBody(self, nodeName):
self.__buildVisibilitySection()
self.endLayout()

elif self.thisNode.type() in {'pointLight', 'spotLight', 'directionalLight'}:
self.beginLayout('appleseed', collapse=1)
self.addControl('asCastIndirectLight', label='Cast Indirect Light')
self.addControl('asImportanceMultiplier', label='Importance Multiplier')
self.endLayout()

elif self.thisNode.type() == 'bump2d':
self.beginLayout('appleseed', collapse=1)
self.addControl('asNormalMapMode', label='Map Mode')
Expand Down
10 changes: 0 additions & 10 deletions src/appleseedmaya/exporters/arealightexporter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -109,16 +109,6 @@ void AreaLightExporter::createEntities(
params.insert("width", 2.0f);
params.insert("height", 2.0f);

bool castIndirectLight = true;
AttributeUtils::get(node(), "asCastIndirectLight", castIndirectLight);

params.insert("cast_indirect_light", castIndirectLight);

float importanceMultiplier = 1.0f;
AttributeUtils::get(node(), "asImportanceMultiplier", importanceMultiplier);

params.insert("importance_multiplier", importanceMultiplier);

if (sessionMode() == AppleseedSession::ExportSession)
m_lightMesh.reset(asr::MeshObjectFactory().create(objectName.asChar(), params));
else
Expand Down
17 changes: 17 additions & 0 deletions src/appleseedmaya/exporters/lightexporter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -128,17 +128,32 @@ void LightExporter::createEntities(
asr::ColorEntityFactory::create(colorName.asChar(), params, values));
}

auto extraControls = [&](asr::ParamArray& lightParams)
{
bool castIndirectLight = true;
AttributeUtils::get(node(), "asCastIndirectLight", castIndirectLight);
lightParams.insert("cast_indirect_light", castIndirectLight);

float importanceMultiplier = 1.0f;
AttributeUtils::get(node(), "asImportanceMultiplier", importanceMultiplier);
lightParams.insert("importance_multiplier", importanceMultiplier);
};

if (depNodeFn.typeName() == "directionalLight")
{
lightFactory = lightFactories.lookup("directional_light");
lightParams.insert("irradiance", colorName.asChar());
lightParams.insert("irradiance_multiplier", intensity);

extraControls(lightParams);
}
else if (depNodeFn.typeName() == "pointLight")
{
lightFactory = lightFactories.lookup("point_light");
lightParams.insert("intensity", colorName.asChar());
lightParams.insert("intensity_multiplier", intensity);

extraControls(lightParams);
}
else if (depNodeFn.typeName() == "spotLight")
{
Expand All @@ -154,6 +169,8 @@ void LightExporter::createEntities(
AttributeUtils::get(node(), "penumbraAngle", penumbraAngle);
const double outerAngle = coneAngle.asDegrees() + 2.0 * penumbraAngle.asDegrees();
lightParams.insert("outer_angle", outerAngle);

extraControls(lightParams);
}
else
{
Expand Down
46 changes: 45 additions & 1 deletion src/appleseedmaya/extensionattributes.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -250,6 +250,7 @@ namespace
MFnNumericData::kBoolean,
false,
status);
numAttrFn.setKeyable(false);
AttributeUtils::makeInput(numAttrFn);
modifier.addExtensionAttribute(nodeClass, attr);

Expand All @@ -258,8 +259,9 @@ namespace
"asCastIndirectLight",
"asCastIndirectLight",
MFnNumericData::kBoolean,
false,
true,
status);
numAttrFn.setKeyable(false);
AttributeUtils::makeInput(numAttrFn);
modifier.addExtensionAttribute(nodeClass, attr);

Expand All @@ -280,6 +282,47 @@ namespace
modifier.doIt();
}

void addDeltaLightExtensionAttributes()
{
for (const MString& light : {"pointLight", "spotLight", "directionalLight"})
{
MNodeClass nodeClass(light);
MDGModifier modifier;

MStatus status;

MFnNumericAttribute numAttrFn;

MObject attr = createNumericAttribute<bool>(
numAttrFn,
"asCastIndirectLight",
"asCastIndirectLight",
MFnNumericData::kBoolean,
true,
status);
numAttrFn.setKeyable(false);

AttributeUtils::makeInput(numAttrFn);
modifier.addExtensionAttribute(nodeClass, attr);

attr = createNumericAttribute<float>(
numAttrFn,
"asImportanceMultiplier",
"asImportanceMultiplier",
MFnNumericData::kFloat,
1.0f,
status);
numAttrFn.setMin(0.0f);
numAttrFn.setSoftMax(10.0f);

AttributeUtils::makeInput(numAttrFn);
modifier.addExtensionAttribute(nodeClass, attr);

addVisibilityExtensionAttributes(nodeClass, modifier);
modifier.doIt();
}
}

void addBump2dExtensionAttributes()
{
MNodeClass nodeClass("bump2d");
Expand Down Expand Up @@ -416,6 +459,7 @@ MStatus addExtensionAttributes()
{
addMeshExtensionAttributes();
addAreaLightExtensionAttributes();
addDeltaLightExtensionAttributes();
addBump2dExtensionAttributes();
addShadingEngineExtensionAttrs();
addCameraExtensionAttrs();
Expand Down

0 comments on commit 7aa2190

Please sign in to comment.