Rename light surfaceRadius->falloffRadius

This commit is contained in:
Zach Pomerantz 2016-02-25 10:02:33 -08:00
parent c2ed5e5474
commit 32ce7c6eab
14 changed files with 50 additions and 49 deletions

View file

@ -326,7 +326,7 @@
var elLightColorBlue = document.getElementById("property-light-color-blue"); var elLightColorBlue = document.getElementById("property-light-color-blue");
var elLightIntensity = document.getElementById("property-light-intensity"); var elLightIntensity = document.getElementById("property-light-intensity");
var elLightSurfaceRadius = document.getElementById("property-light-surface-radius"); var elLightFalloffRadius = document.getElementById("property-light-falloff-radius");
var elLightExponent = document.getElementById("property-light-exponent"); var elLightExponent = document.getElementById("property-light-exponent");
var elLightCutoff = document.getElementById("property-light-cutoff"); var elLightCutoff = document.getElementById("property-light-cutoff");
@ -609,7 +609,7 @@
elLightColorBlue.value = properties.color.blue; elLightColorBlue.value = properties.color.blue;
elLightIntensity.value = properties.intensity.toFixed(1); elLightIntensity.value = properties.intensity.toFixed(1);
elLightSurfaceRadius.value = properties.surfaceRadius.toFixed(1); elLightFalloffRadius.value = properties.falloffRadius.toFixed(1);
elLightExponent.value = properties.exponent.toFixed(2); elLightExponent.value = properties.exponent.toFixed(2);
elLightCutoff.value = properties.cutoff.toFixed(2); elLightCutoff.value = properties.cutoff.toFixed(2);
} else if (properties.type == "Zone") { } else if (properties.type == "Zone") {
@ -801,7 +801,7 @@
}) })
elLightIntensity.addEventListener('change', createEmitNumberPropertyUpdateFunction('intensity', 1)); elLightIntensity.addEventListener('change', createEmitNumberPropertyUpdateFunction('intensity', 1));
elLightSurfaceRadius.addEventListener('change', createEmitNumberPropertyUpdateFunction('surfaceRadius', 1)); elLightFalloffRadius.addEventListener('change', createEmitNumberPropertyUpdateFunction('falloffRadius', 1));
elLightExponent.addEventListener('change', createEmitNumberPropertyUpdateFunction('exponent', 2)); elLightExponent.addEventListener('change', createEmitNumberPropertyUpdateFunction('exponent', 2));
elLightCutoff.addEventListener('change', createEmitNumberPropertyUpdateFunction('cutoff', 2)); elLightCutoff.addEventListener('change', createEmitNumberPropertyUpdateFunction('cutoff', 2));
@ -1613,9 +1613,9 @@
</div> </div>
</div> </div>
<div class="light-section property"> <div class="light-section property">
<div class="label">Apparent Surface Radius (falloff factor)</div> <div class="label">Falloff Radius</div>
<div class="value"> <div class="value">
<input class="coord" type="number" id="property-light-surface-radius" min="0" step="0.1"> <input class="coord" type="number" id="property-light-falloff-radius" min="0" step="0.1">
</div> </div>
</div> </div>
<div class="light-section property"> <div class="light-section property">

View file

@ -430,7 +430,7 @@ void Avatar::render(RenderArgs* renderArgs, const glm::vec3& cameraPosition) {
if (renderArgs->_renderMode != RenderArgs::SHADOW_RENDER_MODE) { if (renderArgs->_renderMode != RenderArgs::SHADOW_RENDER_MODE) {
// add local lights // add local lights
const float BASE_LIGHT_DISTANCE = 2.0f; const float BASE_LIGHT_DISTANCE = 2.0f;
const float LIGHT_SURFACE_RADIUS = 0.01f; const float LIGHT_FALLOFF_RADIUS = 0.01f;
const float LIGHT_EXPONENT = 1.0f; const float LIGHT_EXPONENT = 1.0f;
const float LIGHT_CUTOFF = glm::radians(80.0f); const float LIGHT_CUTOFF = glm::radians(80.0f);
float distance = BASE_LIGHT_DISTANCE * getUniformScale(); float distance = BASE_LIGHT_DISTANCE * getUniformScale();
@ -439,7 +439,7 @@ void Avatar::render(RenderArgs* renderArgs, const glm::vec3& cameraPosition) {
foreach (const AvatarManager::LocalLight& light, DependencyManager::get<AvatarManager>()->getLocalLights()) { foreach (const AvatarManager::LocalLight& light, DependencyManager::get<AvatarManager>()->getLocalLights()) {
glm::vec3 direction = orientation * light.direction; glm::vec3 direction = orientation * light.direction;
DependencyManager::get<DeferredLightingEffect>()->addSpotLight(position - direction * distance, DependencyManager::get<DeferredLightingEffect>()->addSpotLight(position - direction * distance,
distance * 2.0f, light.color, 0.5f, LIGHT_SURFACE_RADIUS, orientation, LIGHT_EXPONENT, LIGHT_CUTOFF); distance * 2.0f, light.color, 0.5f, LIGHT_FALLOFF_RADIUS, orientation, LIGHT_EXPONENT, LIGHT_CUTOFF);
} }
} }

View file

@ -36,16 +36,16 @@ void RenderableLightEntityItem::render(RenderArgs* args) {
glm::vec3 color = toGlm(getXColor()); glm::vec3 color = toGlm(getXColor());
float intensity = getIntensity(); float intensity = getIntensity();
float surfaceRadius = getSurfaceRadius(); float falloffRadius = getFalloffRadius();
float exponent = getExponent(); float exponent = getExponent();
float cutoff = glm::radians(getCutoff()); float cutoff = glm::radians(getCutoff());
if (_isSpotlight) { if (_isSpotlight) {
DependencyManager::get<DeferredLightingEffect>()->addSpotLight(position, largestDiameter / 2.0f, DependencyManager::get<DeferredLightingEffect>()->addSpotLight(position, largestDiameter / 2.0f,
color, intensity, surfaceRadius, rotation, exponent, cutoff); color, intensity, falloffRadius, rotation, exponent, cutoff);
} else { } else {
DependencyManager::get<DeferredLightingEffect>()->addPointLight(position, largestDiameter / 2.0f, DependencyManager::get<DeferredLightingEffect>()->addPointLight(position, largestDiameter / 2.0f,
color, intensity, surfaceRadius); color, intensity, falloffRadius);
} }
#ifdef WANT_DEBUG #ifdef WANT_DEBUG

View file

@ -245,7 +245,7 @@ EntityPropertyFlags EntityItemProperties::getChangedProperties() const {
CHECK_PROPERTY_CHANGE(PROP_DYNAMIC, dynamic); CHECK_PROPERTY_CHANGE(PROP_DYNAMIC, dynamic);
CHECK_PROPERTY_CHANGE(PROP_IS_SPOTLIGHT, isSpotlight); CHECK_PROPERTY_CHANGE(PROP_IS_SPOTLIGHT, isSpotlight);
CHECK_PROPERTY_CHANGE(PROP_INTENSITY, intensity); CHECK_PROPERTY_CHANGE(PROP_INTENSITY, intensity);
CHECK_PROPERTY_CHANGE(PROP_SURFACE_RADIUS, surfaceRadius); CHECK_PROPERTY_CHANGE(PROP_FALLOFF_RADIUS, falloffRadius);
CHECK_PROPERTY_CHANGE(PROP_EXPONENT, exponent); CHECK_PROPERTY_CHANGE(PROP_EXPONENT, exponent);
CHECK_PROPERTY_CHANGE(PROP_CUTOFF, cutoff); CHECK_PROPERTY_CHANGE(PROP_CUTOFF, cutoff);
CHECK_PROPERTY_CHANGE(PROP_LOCKED, locked); CHECK_PROPERTY_CHANGE(PROP_LOCKED, locked);
@ -446,7 +446,7 @@ QScriptValue EntityItemProperties::copyToScriptValue(QScriptEngine* engine, bool
if (_type == EntityTypes::Light) { if (_type == EntityTypes::Light) {
COPY_PROPERTY_TO_QSCRIPTVALUE(PROP_IS_SPOTLIGHT, isSpotlight); COPY_PROPERTY_TO_QSCRIPTVALUE(PROP_IS_SPOTLIGHT, isSpotlight);
COPY_PROPERTY_TO_QSCRIPTVALUE(PROP_INTENSITY, intensity); COPY_PROPERTY_TO_QSCRIPTVALUE(PROP_INTENSITY, intensity);
COPY_PROPERTY_TO_QSCRIPTVALUE(PROP_SURFACE_RADIUS, surfaceRadius); COPY_PROPERTY_TO_QSCRIPTVALUE(PROP_FALLOFF_RADIUS, falloffRadius);
COPY_PROPERTY_TO_QSCRIPTVALUE(PROP_EXPONENT, exponent); COPY_PROPERTY_TO_QSCRIPTVALUE(PROP_EXPONENT, exponent);
COPY_PROPERTY_TO_QSCRIPTVALUE(PROP_CUTOFF, cutoff); COPY_PROPERTY_TO_QSCRIPTVALUE(PROP_CUTOFF, cutoff);
} }
@ -599,7 +599,7 @@ void EntityItemProperties::copyFromScriptValue(const QScriptValue& object, bool
COPY_PROPERTY_FROM_QSCRIPTVALUE(dynamic, bool, setDynamic); COPY_PROPERTY_FROM_QSCRIPTVALUE(dynamic, bool, setDynamic);
COPY_PROPERTY_FROM_QSCRIPTVALUE(isSpotlight, bool, setIsSpotlight); COPY_PROPERTY_FROM_QSCRIPTVALUE(isSpotlight, bool, setIsSpotlight);
COPY_PROPERTY_FROM_QSCRIPTVALUE(intensity, float, setIntensity); COPY_PROPERTY_FROM_QSCRIPTVALUE(intensity, float, setIntensity);
COPY_PROPERTY_FROM_QSCRIPTVALUE(surfaceRadius, float, setSurfaceRadius); COPY_PROPERTY_FROM_QSCRIPTVALUE(falloffRadius, float, setFalloffRadius);
COPY_PROPERTY_FROM_QSCRIPTVALUE(exponent, float, setExponent); COPY_PROPERTY_FROM_QSCRIPTVALUE(exponent, float, setExponent);
COPY_PROPERTY_FROM_QSCRIPTVALUE(cutoff, float, setCutoff); COPY_PROPERTY_FROM_QSCRIPTVALUE(cutoff, float, setCutoff);
COPY_PROPERTY_FROM_QSCRIPTVALUE(locked, bool, setLocked); COPY_PROPERTY_FROM_QSCRIPTVALUE(locked, bool, setLocked);
@ -765,7 +765,7 @@ void EntityItemProperties::entityPropertyFlagsFromScriptValue(const QScriptValue
ADD_PROPERTY_TO_MAP(PROP_DYNAMIC, unused, dynamic, unused); ADD_PROPERTY_TO_MAP(PROP_DYNAMIC, unused, dynamic, unused);
ADD_PROPERTY_TO_MAP(PROP_IS_SPOTLIGHT, IsSpotlight, isSpotlight, bool); ADD_PROPERTY_TO_MAP(PROP_IS_SPOTLIGHT, IsSpotlight, isSpotlight, bool);
ADD_PROPERTY_TO_MAP(PROP_INTENSITY, Intensity, intensity, float); ADD_PROPERTY_TO_MAP(PROP_INTENSITY, Intensity, intensity, float);
ADD_PROPERTY_TO_MAP(PROP_SURFACE_RADIUS, SurfaceRadius, surfaceRadius, float); ADD_PROPERTY_TO_MAP(PROP_FALLOFF_RADIUS, FalloffRadius, falloffRadius, float);
ADD_PROPERTY_TO_MAP(PROP_EXPONENT, Exponent, exponent, float); ADD_PROPERTY_TO_MAP(PROP_EXPONENT, Exponent, exponent, float);
ADD_PROPERTY_TO_MAP(PROP_CUTOFF, Cutoff, cutoff, float); ADD_PROPERTY_TO_MAP(PROP_CUTOFF, Cutoff, cutoff, float);
ADD_PROPERTY_TO_MAP(PROP_LOCKED, Locked, locked, bool); ADD_PROPERTY_TO_MAP(PROP_LOCKED, Locked, locked, bool);
@ -1047,7 +1047,7 @@ bool EntityItemProperties::encodeEntityEditPacket(PacketType command, EntityItem
APPEND_ENTITY_PROPERTY(PROP_IS_SPOTLIGHT, properties.getIsSpotlight()); APPEND_ENTITY_PROPERTY(PROP_IS_SPOTLIGHT, properties.getIsSpotlight());
APPEND_ENTITY_PROPERTY(PROP_COLOR, properties.getColor()); APPEND_ENTITY_PROPERTY(PROP_COLOR, properties.getColor());
APPEND_ENTITY_PROPERTY(PROP_INTENSITY, properties.getIntensity()); APPEND_ENTITY_PROPERTY(PROP_INTENSITY, properties.getIntensity());
APPEND_ENTITY_PROPERTY(PROP_SURFACE_RADIUS, properties.getSurfaceRadius()); APPEND_ENTITY_PROPERTY(PROP_FALLOFF_RADIUS, properties.getFalloffRadius());
APPEND_ENTITY_PROPERTY(PROP_EXPONENT, properties.getExponent()); APPEND_ENTITY_PROPERTY(PROP_EXPONENT, properties.getExponent());
APPEND_ENTITY_PROPERTY(PROP_CUTOFF, properties.getCutoff()); APPEND_ENTITY_PROPERTY(PROP_CUTOFF, properties.getCutoff());
} }
@ -1337,7 +1337,7 @@ bool EntityItemProperties::decodeEntityEditPacket(const unsigned char* data, int
READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_IS_SPOTLIGHT, bool, setIsSpotlight); READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_IS_SPOTLIGHT, bool, setIsSpotlight);
READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_COLOR, xColor, setColor); READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_COLOR, xColor, setColor);
READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_INTENSITY, float, setIntensity); READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_INTENSITY, float, setIntensity);
READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_SURFACE_RADIUS, float, setSurfaceRadius); READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_FALLOFF_RADIUS, float, setFalloffRadius);
READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_EXPONENT, float, setExponent); READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_EXPONENT, float, setExponent);
READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_CUTOFF, float, setCutoff); READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_CUTOFF, float, setCutoff);
} }
@ -1483,7 +1483,7 @@ void EntityItemProperties::markAllChanged() {
_dynamicChanged = true; _dynamicChanged = true;
_intensityChanged = true; _intensityChanged = true;
_surfaceRadiusChanged = true; _falloffRadiusChanged = true;
_exponentChanged = true; _exponentChanged = true;
_cutoffChanged = true; _cutoffChanged = true;
_lockedChanged = true; _lockedChanged = true;
@ -1726,8 +1726,8 @@ QList<QString> EntityItemProperties::listChangedProperties() {
if (intensityChanged()) { if (intensityChanged()) {
out += "intensity"; out += "intensity";
} }
if (surfaceRadiusChanged()) { if (falloffRadiusChanged()) {
out += "surfaceRadius"; out += "falloffRadius";
} }
if (exponentChanged()) { if (exponentChanged()) {
out += "exponent"; out += "exponent";

View file

@ -132,7 +132,7 @@ public:
DEFINE_PROPERTY(PROP_DYNAMIC, Dynamic, dynamic, bool, ENTITY_ITEM_DEFAULT_DYNAMIC); DEFINE_PROPERTY(PROP_DYNAMIC, Dynamic, dynamic, bool, ENTITY_ITEM_DEFAULT_DYNAMIC);
DEFINE_PROPERTY(PROP_IS_SPOTLIGHT, IsSpotlight, isSpotlight, bool, LightEntityItem::DEFAULT_IS_SPOTLIGHT); DEFINE_PROPERTY(PROP_IS_SPOTLIGHT, IsSpotlight, isSpotlight, bool, LightEntityItem::DEFAULT_IS_SPOTLIGHT);
DEFINE_PROPERTY(PROP_INTENSITY, Intensity, intensity, float, LightEntityItem::DEFAULT_INTENSITY); DEFINE_PROPERTY(PROP_INTENSITY, Intensity, intensity, float, LightEntityItem::DEFAULT_INTENSITY);
DEFINE_PROPERTY(PROP_SURFACE_RADIUS, SurfaceRadius, surfaceRadius, float, LightEntityItem::DEFAULT_SURFACE_RADIUS); DEFINE_PROPERTY(PROP_FALLOFF_RADIUS, FalloffRadius, falloffRadius, float, LightEntityItem::DEFAULT_FALLOFF_RADIUS);
DEFINE_PROPERTY(PROP_EXPONENT, Exponent, exponent, float, LightEntityItem::DEFAULT_EXPONENT); DEFINE_PROPERTY(PROP_EXPONENT, Exponent, exponent, float, LightEntityItem::DEFAULT_EXPONENT);
DEFINE_PROPERTY(PROP_CUTOFF, Cutoff, cutoff, float, LightEntityItem::DEFAULT_CUTOFF); DEFINE_PROPERTY(PROP_CUTOFF, Cutoff, cutoff, float, LightEntityItem::DEFAULT_CUTOFF);
DEFINE_PROPERTY(PROP_LOCKED, Locked, locked, bool, ENTITY_ITEM_DEFAULT_LOCKED); DEFINE_PROPERTY(PROP_LOCKED, Locked, locked, bool, ENTITY_ITEM_DEFAULT_LOCKED);
@ -361,7 +361,7 @@ inline QDebug operator<<(QDebug debug, const EntityItemProperties& properties) {
DEBUG_PROPERTY_IF_CHANGED(debug, properties, Dynamic, dynamic, ""); DEBUG_PROPERTY_IF_CHANGED(debug, properties, Dynamic, dynamic, "");
DEBUG_PROPERTY_IF_CHANGED(debug, properties, IsSpotlight, isSpotlight, ""); DEBUG_PROPERTY_IF_CHANGED(debug, properties, IsSpotlight, isSpotlight, "");
DEBUG_PROPERTY_IF_CHANGED(debug, properties, Intensity, intensity, ""); DEBUG_PROPERTY_IF_CHANGED(debug, properties, Intensity, intensity, "");
DEBUG_PROPERTY_IF_CHANGED(debug, properties, SurfaceRadius, surfaceRadius, ""); DEBUG_PROPERTY_IF_CHANGED(debug, properties, FalloffRadius, falloffRadius, "");
DEBUG_PROPERTY_IF_CHANGED(debug, properties, Exponent, exponent, ""); DEBUG_PROPERTY_IF_CHANGED(debug, properties, Exponent, exponent, "");
DEBUG_PROPERTY_IF_CHANGED(debug, properties, Cutoff, cutoff, ""); DEBUG_PROPERTY_IF_CHANGED(debug, properties, Cutoff, cutoff, "");
DEBUG_PROPERTY_IF_CHANGED(debug, properties, Locked, locked, ""); DEBUG_PROPERTY_IF_CHANGED(debug, properties, Locked, locked, "");

View file

@ -167,7 +167,7 @@ enum EntityPropertyList {
PROP_COLLISION_MASK, // one byte of collision group flags PROP_COLLISION_MASK, // one byte of collision group flags
PROP_SURFACE_RADIUS, // for Light entity PROP_FALLOFF_RADIUS, // for Light entity
//////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////
// ATTENTION: add new properties to end of list just ABOVE this line // ATTENTION: add new properties to end of list just ABOVE this line

View file

@ -23,7 +23,7 @@
const bool LightEntityItem::DEFAULT_IS_SPOTLIGHT = false; const bool LightEntityItem::DEFAULT_IS_SPOTLIGHT = false;
const float LightEntityItem::DEFAULT_INTENSITY = 1.0f; const float LightEntityItem::DEFAULT_INTENSITY = 1.0f;
const float LightEntityItem::DEFAULT_SURFACE_RADIUS = 0.1f; const float LightEntityItem::DEFAULT_FALLOFF_RADIUS = 0.1f;
const float LightEntityItem::DEFAULT_EXPONENT = 0.0f; const float LightEntityItem::DEFAULT_EXPONENT = 0.0f;
const float LightEntityItem::DEFAULT_CUTOFF = PI / 2.0f; const float LightEntityItem::DEFAULT_CUTOFF = PI / 2.0f;
@ -63,13 +63,13 @@ EntityItemProperties LightEntityItem::getProperties(EntityPropertyFlags desiredP
COPY_ENTITY_PROPERTY_TO_PROPERTIES(intensity, getIntensity); COPY_ENTITY_PROPERTY_TO_PROPERTIES(intensity, getIntensity);
COPY_ENTITY_PROPERTY_TO_PROPERTIES(exponent, getExponent); COPY_ENTITY_PROPERTY_TO_PROPERTIES(exponent, getExponent);
COPY_ENTITY_PROPERTY_TO_PROPERTIES(cutoff, getCutoff); COPY_ENTITY_PROPERTY_TO_PROPERTIES(cutoff, getCutoff);
COPY_ENTITY_PROPERTY_TO_PROPERTIES(surfaceRadius, getSurfaceRadius); COPY_ENTITY_PROPERTY_TO_PROPERTIES(falloffRadius, getFalloffRadius);
return properties; return properties;
} }
void LightEntityItem::setSurfaceRadius(float value) { void LightEntityItem::setFalloffRadius(float value) {
_surfaceRadius = glm::max(value, 0.0f); _falloffRadius = glm::max(value, 0.0f);
} }
void LightEntityItem::setIsSpotlight(bool value) { void LightEntityItem::setIsSpotlight(bool value) {
@ -107,7 +107,7 @@ bool LightEntityItem::setProperties(const EntityItemProperties& properties) {
SET_ENTITY_PROPERTY_FROM_PROPERTIES(intensity, setIntensity); SET_ENTITY_PROPERTY_FROM_PROPERTIES(intensity, setIntensity);
SET_ENTITY_PROPERTY_FROM_PROPERTIES(exponent, setExponent); SET_ENTITY_PROPERTY_FROM_PROPERTIES(exponent, setExponent);
SET_ENTITY_PROPERTY_FROM_PROPERTIES(cutoff, setCutoff); SET_ENTITY_PROPERTY_FROM_PROPERTIES(cutoff, setCutoff);
SET_ENTITY_PROPERTY_FROM_PROPERTIES(surfaceRadius, setSurfaceRadius); SET_ENTITY_PROPERTY_FROM_PROPERTIES(falloffRadius, setFalloffRadius);
if (somethingChanged) { if (somethingChanged) {
bool wantDebug = false; bool wantDebug = false;
@ -157,7 +157,7 @@ int LightEntityItem::readEntitySubclassDataFromBuffer(const unsigned char* data,
READ_ENTITY_PROPERTY(PROP_INTENSITY, float, setIntensity); READ_ENTITY_PROPERTY(PROP_INTENSITY, float, setIntensity);
READ_ENTITY_PROPERTY(PROP_EXPONENT, float, setExponent); READ_ENTITY_PROPERTY(PROP_EXPONENT, float, setExponent);
READ_ENTITY_PROPERTY(PROP_CUTOFF, float, setCutoff); READ_ENTITY_PROPERTY(PROP_CUTOFF, float, setCutoff);
READ_ENTITY_PROPERTY(PROP_SURFACE_RADIUS, float, setSurfaceRadius); READ_ENTITY_PROPERTY(PROP_FALLOFF_RADIUS, float, setFalloffRadius);
} }
return bytesRead; return bytesRead;
@ -172,7 +172,7 @@ EntityPropertyFlags LightEntityItem::getEntityProperties(EncodeBitstreamParams&
requestedProperties += PROP_INTENSITY; requestedProperties += PROP_INTENSITY;
requestedProperties += PROP_EXPONENT; requestedProperties += PROP_EXPONENT;
requestedProperties += PROP_CUTOFF; requestedProperties += PROP_CUTOFF;
requestedProperties += PROP_SURFACE_RADIUS; requestedProperties += PROP_FALLOFF_RADIUS;
return requestedProperties; return requestedProperties;
} }
@ -190,5 +190,5 @@ void LightEntityItem::appendSubclassData(OctreePacketData* packetData, EncodeBit
APPEND_ENTITY_PROPERTY(PROP_INTENSITY, getIntensity()); APPEND_ENTITY_PROPERTY(PROP_INTENSITY, getIntensity());
APPEND_ENTITY_PROPERTY(PROP_EXPONENT, getExponent()); APPEND_ENTITY_PROPERTY(PROP_EXPONENT, getExponent());
APPEND_ENTITY_PROPERTY(PROP_CUTOFF, getCutoff()); APPEND_ENTITY_PROPERTY(PROP_CUTOFF, getCutoff());
APPEND_ENTITY_PROPERTY(PROP_SURFACE_RADIUS, getSurfaceRadius()); APPEND_ENTITY_PROPERTY(PROP_FALLOFF_RADIUS, getFalloffRadius());
} }

View file

@ -18,7 +18,7 @@ class LightEntityItem : public EntityItem {
public: public:
static const bool DEFAULT_IS_SPOTLIGHT; static const bool DEFAULT_IS_SPOTLIGHT;
static const float DEFAULT_INTENSITY; static const float DEFAULT_INTENSITY;
static const float DEFAULT_SURFACE_RADIUS; static const float DEFAULT_FALLOFF_RADIUS;
static const float DEFAULT_EXPONENT; static const float DEFAULT_EXPONENT;
static const float DEFAULT_CUTOFF; static const float DEFAULT_CUTOFF;
@ -71,8 +71,8 @@ public:
float getIntensity() const { return _intensity; } float getIntensity() const { return _intensity; }
void setIntensity(float value) { _intensity = value; } void setIntensity(float value) { _intensity = value; }
float getSurfaceRadius() const { return _surfaceRadius; } float getFalloffRadius() const { return _falloffRadius; }
void setSurfaceRadius(float value); void setFalloffRadius(float value);
float getExponent() const { return _exponent; } float getExponent() const { return _exponent; }
void setExponent(float value) { _exponent = value; } void setExponent(float value) { _exponent = value; }
@ -89,7 +89,7 @@ protected:
rgbColor _color; rgbColor _color;
bool _isSpotlight { DEFAULT_IS_SPOTLIGHT }; bool _isSpotlight { DEFAULT_IS_SPOTLIGHT };
float _intensity { DEFAULT_INTENSITY }; float _intensity { DEFAULT_INTENSITY };
float _surfaceRadius { DEFAULT_SURFACE_RADIUS }; float _falloffRadius { DEFAULT_FALLOFF_RADIUS };
float _exponent { DEFAULT_EXPONENT }; float _exponent { DEFAULT_EXPONENT };
float _cutoff { DEFAULT_CUTOFF }; float _cutoff { DEFAULT_CUTOFF };

View file

@ -69,7 +69,7 @@ void Light::setAmbientIntensity(float intensity) {
editSchema()._ambientIntensity = intensity; editSchema()._ambientIntensity = intensity;
} }
void Light::setSurfaceRadius(float radius) { void Light::setFalloffRadius(float radius) {
if (radius <= 0.0f) { if (radius <= 0.0f) {
radius = 0.1f; radius = 0.1f;
} }
@ -87,14 +87,15 @@ void Light::setMaximumRadius(float radius) {
void Light::updateLightRadius() { void Light::updateLightRadius() {
// This function relies on the attenuation equation: // This function relies on the attenuation equation:
// I = Li / (1 + (d + Lr)/Lr)^2 // I = Li / (1 + (d + Lr)/Lr)^2
// where I = calculated intensity, Li = light intensity, Lr = light surface radius, d = distance from surface // where I = calculated intensity, Li = light intensity, Lr = light falloff radius, d = distance from surface
// see: https://imdoingitwrong.wordpress.com/2011/01/31/light-attenuation/ // see: https://imdoingitwrong.wordpress.com/2011/01/31/light-attenuation/
// note that falloff radius replaces surface radius in linked example
// This equation is biased back by Lr so that all lights act as true points, regardless of surface radii // This equation is biased back by Lr so that all lights act as true points, regardless of surface radii
const float MIN_CUTOFF_INTENSITY = 0.001f; const float MIN_CUTOFF_INTENSITY = 0.001f;
// Get cutoff radius at minimum intensity // Get cutoff radius at minimum intensity
float intensity = getIntensity() * std::max(std::max(getColor().x, getColor().y), getColor().z); float intensity = getIntensity() * std::max(std::max(getColor().x, getColor().y), getColor().z);
float cutoffRadius = getSurfaceRadius() * ((glm::sqrt(intensity / MIN_CUTOFF_INTENSITY) - 1) - 1); float cutoffRadius = getFalloffRadius() * ((glm::sqrt(intensity / MIN_CUTOFF_INTENSITY) - 1) - 1);
// If it is less than max radius, store it to buffer to avoid extra shading // If it is less than max radius, store it to buffer to avoid extra shading
editSchema()._attenuation.z = std::min(getMaximumRadius(), cutoffRadius); editSchema()._attenuation.z = std::min(getMaximumRadius(), cutoffRadius);

View file

@ -74,11 +74,11 @@ public:
bool isRanged() const { return (getType() == POINT) || (getType() == SPOT ); } bool isRanged() const { return (getType() == POINT) || (getType() == SPOT ); }
// Surface radius is the physical radius of the light sphere through which energy shines, // FalloffRradius is the physical radius of the light sphere through which energy shines,
// expressed in meters. It is used only to calculate the falloff curve of the light. // expressed in meters. It is used only to calculate the falloff curve of the light.
// Actual lights will all have surface radii approaching 0. // Actual rendered lights will all have surface radii approaching 0.
void setSurfaceRadius(float radius); void setFalloffRadius(float radius);
float getSurfaceRadius() const { return getSchema()._attenuation.x; } float getFalloffRadius() const { return getSchema()._attenuation.x; }
// Maximum radius is the cutoff radius of the light energy, expressed in meters. // Maximum radius is the cutoff radius of the light energy, expressed in meters.
// It is used to bound light entities, and *will not* affect the falloff curve of the light. // It is used to bound light entities, and *will not* affect the falloff curve of the light.

View file

@ -41,7 +41,7 @@ PacketVersion versionForPacketType(PacketType packetType) {
case PacketType::EntityAdd: case PacketType::EntityAdd:
case PacketType::EntityEdit: case PacketType::EntityEdit:
case PacketType::EntityData: case PacketType::EntityData:
return VERSION_LIGHT_HAS_SURFACE_RADIUS; return VERSION_LIGHT_HAS_FALLOFF_RADIUS;
case PacketType::AvatarData: case PacketType::AvatarData:
case PacketType::BulkAvatarData: case PacketType::BulkAvatarData:
return static_cast<PacketVersion>(AvatarMixerPacketVersion::SoftAttachmentSupport); return static_cast<PacketVersion>(AvatarMixerPacketVersion::SoftAttachmentSupport);

View file

@ -166,7 +166,7 @@ const PacketVersion VERSION_MODEL_ENTITIES_JOINTS_ON_WIRE = 53;
const PacketVersion VERSION_ENTITITES_HAVE_QUERY_BOX = 54; const PacketVersion VERSION_ENTITITES_HAVE_QUERY_BOX = 54;
const PacketVersion VERSION_ENTITITES_HAVE_COLLISION_MASK = 55; const PacketVersion VERSION_ENTITITES_HAVE_COLLISION_MASK = 55;
const PacketVersion VERSION_ATMOSPHERE_REMOVED = 56; const PacketVersion VERSION_ATMOSPHERE_REMOVED = 56;
const PacketVersion VERSION_LIGHT_HAS_SURFACE_RADIUS = 57; const PacketVersion VERSION_LIGHT_HAS_FALLOFF_RADIUS = 57;
enum class AvatarMixerPacketVersion : PacketVersion { enum class AvatarMixerPacketVersion : PacketVersion {
TranslationSupport = 17, TranslationSupport = 17,

View file

@ -98,12 +98,12 @@ void DeferredLightingEffect::init() {
} }
void DeferredLightingEffect::addPointLight(const glm::vec3& position, float radius, const glm::vec3& color, void DeferredLightingEffect::addPointLight(const glm::vec3& position, float radius, const glm::vec3& color,
float intensity, float surfaceRadius) { float intensity, float falloffRadius) {
addSpotLight(position, radius, color, intensity, surfaceRadius); addSpotLight(position, radius, color, intensity, falloffRadius);
} }
void DeferredLightingEffect::addSpotLight(const glm::vec3& position, float radius, const glm::vec3& color, void DeferredLightingEffect::addSpotLight(const glm::vec3& position, float radius, const glm::vec3& color,
float intensity, float surfaceRadius, const glm::quat& orientation, float exponent, float cutoff) { float intensity, float falloffRadius, const glm::quat& orientation, float exponent, float cutoff) {
unsigned int lightID = (unsigned int)(_pointLights.size() + _spotLights.size() + _globalLights.size()); unsigned int lightID = (unsigned int)(_pointLights.size() + _spotLights.size() + _globalLights.size());
if (lightID >= _allocatedLights.size()) { if (lightID >= _allocatedLights.size()) {
@ -115,7 +115,7 @@ void DeferredLightingEffect::addSpotLight(const glm::vec3& position, float radiu
lp->setMaximumRadius(radius); lp->setMaximumRadius(radius);
lp->setColor(color); lp->setColor(color);
lp->setIntensity(intensity); lp->setIntensity(intensity);
lp->setSurfaceRadius(surfaceRadius); lp->setFalloffRadius(falloffRadius);
if (exponent == 0.0f && cutoff == PI) { if (exponent == 0.0f && cutoff == PI) {
lp->setType(model::Light::POINT); lp->setType(model::Light::POINT);

View file

@ -37,11 +37,11 @@ public:
/// Adds a point light to render for the current frame. /// Adds a point light to render for the current frame.
void addPointLight(const glm::vec3& position, float radius, const glm::vec3& color = glm::vec3(0.0f, 0.0f, 0.0f), void addPointLight(const glm::vec3& position, float radius, const glm::vec3& color = glm::vec3(0.0f, 0.0f, 0.0f),
float intensity = 0.5f, float surfaceRadius = 0.01f); float intensity = 0.5f, float falloffRadius = 0.01f);
/// Adds a spot light to render for the current frame. /// Adds a spot light to render for the current frame.
void addSpotLight(const glm::vec3& position, float radius, const glm::vec3& color = glm::vec3(1.0f, 1.0f, 1.0f), void addSpotLight(const glm::vec3& position, float radius, const glm::vec3& color = glm::vec3(1.0f, 1.0f, 1.0f),
float intensity = 0.5f, float surfaceRadius = 0.01f, float intensity = 0.5f, float falloffRadius = 0.01f,
const glm::quat& orientation = glm::quat(), float exponent = 0.0f, float cutoff = PI); const glm::quat& orientation = glm::quat(), float exponent = 0.0f, float cutoff = PI);
void prepare(RenderArgs* args); void prepare(RenderArgs* args);