|
|
@ -25,6 +25,8 @@ _BL2PL = { |
|
|
|
"SUN": plDirectionalLightInfo, |
|
|
|
"SUN": plDirectionalLightInfo, |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_FAR_POWER = 15.0 |
|
|
|
|
|
|
|
|
|
|
|
class LightConverter: |
|
|
|
class LightConverter: |
|
|
|
def __init__(self, exporter): |
|
|
|
def __init__(self, exporter): |
|
|
|
self._exporter = weakref.ref(exporter) |
|
|
|
self._exporter = weakref.ref(exporter) |
|
|
@ -57,16 +59,9 @@ class LightConverter: |
|
|
|
|
|
|
|
|
|
|
|
def _convert_attenuation(self, bl, pl): |
|
|
|
def _convert_attenuation(self, bl, pl): |
|
|
|
intens = bl.energy |
|
|
|
intens = bl.energy |
|
|
|
|
|
|
|
|
|
|
|
if intens < 0: |
|
|
|
if intens < 0: |
|
|
|
intens = -intens |
|
|
|
intens = -intens |
|
|
|
|
|
|
|
attenEnd = bl.distance * 2 if bl.use_sphere else bl.distance |
|
|
|
if bl.use_sphere: |
|
|
|
|
|
|
|
attenEnd = bl.distance |
|
|
|
|
|
|
|
else: |
|
|
|
|
|
|
|
attenEnd = bl.distance * 2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
kFarPowerConst = 15.0 # From Plasma's plSillyLightKonstants |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if bl.falloff_type == "CONSTANT": |
|
|
|
if bl.falloff_type == "CONSTANT": |
|
|
|
print(" Attenuation: No Falloff") |
|
|
|
print(" Attenuation: No Falloff") |
|
|
@ -77,18 +72,14 @@ class LightConverter: |
|
|
|
elif bl.falloff_type == "INVERSE_LINEAR": |
|
|
|
elif bl.falloff_type == "INVERSE_LINEAR": |
|
|
|
print(" Attenuation: Inverse Linear") |
|
|
|
print(" Attenuation: Inverse Linear") |
|
|
|
pl.attenConst = 1.0 |
|
|
|
pl.attenConst = 1.0 |
|
|
|
pl.attenLinear = (intens * kFarPowerConst - 1.0) / attenEnd |
|
|
|
pl.attenLinear = max(0.0, (intens * _FAR_POWER - 1.0) / attenEnd) |
|
|
|
if pl.attenLinear < 0: |
|
|
|
|
|
|
|
pl.attenLinear = 0 |
|
|
|
|
|
|
|
pl.attenQuadratic = 0.0 |
|
|
|
pl.attenQuadratic = 0.0 |
|
|
|
pl.attenCutoff = attenEnd |
|
|
|
pl.attenCutoff = attenEnd |
|
|
|
elif bl.falloff_type == "INVERSE_SQUARE": |
|
|
|
elif bl.falloff_type == "INVERSE_SQUARE": |
|
|
|
print(" Attenuation: Inverse Square") |
|
|
|
print(" Attenuation: Inverse Square") |
|
|
|
pl.attenConst = 1.0 |
|
|
|
pl.attenConst = 1.0 |
|
|
|
pl.attenLinear = 0.0 |
|
|
|
pl.attenLinear = 0.0 |
|
|
|
pl.attenQuadratic = (intens * kFarPowerConst - 1.0) / (attenEnd * attenEnd) |
|
|
|
pl.attenQuadratic = max(0.0, (intens * _FAR_POWER - 1.0) / (attenEnd * attenEnd)) |
|
|
|
if pl.attenQuadratic < 0: |
|
|
|
|
|
|
|
pl.attenQuadratic = 0 |
|
|
|
|
|
|
|
pl.attenCutoff = attenEnd |
|
|
|
pl.attenCutoff = attenEnd |
|
|
|
else: |
|
|
|
else: |
|
|
|
raise BlenderOptionNotSupportedError(bl.falloff_type) |
|
|
|
raise BlenderOptionNotSupportedError(bl.falloff_type) |
|
|
@ -112,10 +103,10 @@ class LightConverter: |
|
|
|
diff_color = [i * energy for i in bl_light.color] |
|
|
|
diff_color = [i * energy for i in bl_light.color] |
|
|
|
spec_color = [i for i in bl_light.color] |
|
|
|
spec_color = [i for i in bl_light.color] |
|
|
|
|
|
|
|
|
|
|
|
diff_str = "({:.4f}, {:.4f}, {:.4f})".format(diff_color[0], diff_color[1], diff_color[2]) |
|
|
|
diff_str = "({:.4f}, {:.4f}, {:.4f})".format(*diff_color) |
|
|
|
diff_color.append(energy) |
|
|
|
diff_color.append(energy) |
|
|
|
|
|
|
|
|
|
|
|
spec_str = "({:.4f}, {:.4f}, {:.4f})".format(spec_color[0], spec_color[1], spec_color[2]) |
|
|
|
spec_str = "({:.4f}, {:.4f}, {:.4f})".format(*spec_color) |
|
|
|
spec_color.append(energy) |
|
|
|
spec_color.append(energy) |
|
|
|
|
|
|
|
|
|
|
|
# Do we *only* want a shadow? |
|
|
|
# Do we *only* want a shadow? |
|
|
|