45 const Light *light =
static_cast<const Light *
>(context.object->data);
46 pxr::UsdLuxLightAPI usd_light_api;
48 switch (light->type) {
50 switch (light->area_shape) {
52 pxr::UsdLuxRectLight rect_light = pxr::UsdLuxRectLight::Define(
stage,
usd_path);
53 rect_light.CreateWidthAttr().Set(light->area_size, timecode);
54 rect_light.CreateHeightAttr().Set(light->area_sizey, timecode);
55 usd_light_api = rect_light.LightAPI();
59 pxr::UsdLuxRectLight rect_light = pxr::UsdLuxRectLight::Define(
stage,
usd_path);
60 rect_light.CreateWidthAttr().Set(light->area_size, timecode);
61 rect_light.CreateHeightAttr().Set(light->area_size, timecode);
62 usd_light_api = rect_light.LightAPI();
66 pxr::UsdLuxDiskLight disk_light = pxr::UsdLuxDiskLight::Define(
stage,
usd_path);
67 disk_light.CreateRadiusAttr().Set(light->area_size / 2.0f, timecode);
68 usd_light_api = disk_light.LightAPI();
73 pxr::UsdLuxDiskLight disk_light = pxr::UsdLuxDiskLight::Define(
stage,
usd_path);
74 disk_light.CreateRadiusAttr().Set((light->area_size + light->area_sizey) / 4.0f,
76 usd_light_api = disk_light.LightAPI();
84 pxr::UsdLuxSphereLight sphere_light = pxr::UsdLuxSphereLight::Define(
stage,
usd_path);
85 sphere_light.CreateRadiusAttr().Set(light->radius, timecode);
86 if (light->radius == 0.0f) {
87 sphere_light.CreateTreatAsPointAttr().Set(
true, timecode);
91 pxr::UsdLuxShapingAPI shaping_api = pxr::UsdLuxShapingAPI::Apply(sphere_light.GetPrim());
93 shaping_api.CreateShapingConeAngleAttr().Set(
RAD2DEGF(light->spotsize) / 2.0f, timecode);
94 shaping_api.CreateShapingConeSoftnessAttr().Set(light->spotblend, timecode);
98 usd_light_api = sphere_light.LightAPI();
102 pxr::UsdLuxDistantLight distant_light = pxr::UsdLuxDistantLight::Define(
stage,
usd_path);
103 distant_light.CreateAngleAttr().Set(
RAD2DEGF(light->sun_angle / 2.0f), timecode);
104 usd_light_api = distant_light.LightAPI();
113 if (light->type ==
LA_SUN) {
115 intensity = light->energy / 4.0f;
119 intensity = light->energy /
M_PI;
122 usd_light_api.CreateIntensityAttr().Set(intensity, timecode);
123 usd_light_api.CreateExposureAttr().Set(0.0f, timecode);
124 usd_light_api.CreateColorAttr().Set(pxr::GfVec3f(light->r, light->g, light->b), timecode);
125 usd_light_api.CreateDiffuseAttr().Set(light->diff_fac, timecode);
126 usd_light_api.CreateSpecularAttr().Set(light->spec_fac, timecode);
127 usd_light_api.CreateNormalizeAttr().Set(
true, timecode);
129 auto prim = usd_light_api.GetPrim();
const pxr::UsdStageRefPtr stage