From 179f81adcfd2c35796d01c0449c4e8a0fd7ecdd8 Mon Sep 17 00:00:00 2001 From: HifiExperiments Date: Fri, 12 Apr 2024 22:45:40 -0700 Subject: [PATCH 1/2] add unlit property for shapes --- .../src/RenderableShapeEntityItem.cpp | 7 +++++++ .../src/RenderableShapeEntityItem.h | 1 + .../entities/src/EntityItemProperties.cpp | 21 ++++++++++++------- libraries/entities/src/EntityItemProperties.h | 2 +- libraries/entities/src/EntityPropertyFlags.h | 12 +++++------ libraries/entities/src/ShapeEntityItem.cpp | 20 +++++++++++++++++- libraries/entities/src/ShapeEntityItem.h | 4 ++++ libraries/networking/src/udt/PacketHeaders.h | 1 + .../html/js/entityProperties.js | 7 ++++++- 9 files changed, 58 insertions(+), 17 deletions(-) diff --git a/libraries/entities-renderer/src/RenderableShapeEntityItem.cpp b/libraries/entities-renderer/src/RenderableShapeEntityItem.cpp index 82350f54bf..aafca54b31 100644 --- a/libraries/entities-renderer/src/RenderableShapeEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableShapeEntityItem.cpp @@ -65,6 +65,13 @@ void ShapeEntityRenderer::doRenderUpdateAsynchronousTyped(const TypedEntityPoint materialChanged = true; } + bool unlit = entity->getUnlit(); + if (_unlit != unlit) { + _unlit = unlit; + _material->setUnlit(unlit); + materialChanged = true; + } + auto userData = entity->getUserData(); if (_proceduralData != userData) { _proceduralData = userData; diff --git a/libraries/entities-renderer/src/RenderableShapeEntityItem.h b/libraries/entities-renderer/src/RenderableShapeEntityItem.h index 686014f4de..5e6f2dc243 100644 --- a/libraries/entities-renderer/src/RenderableShapeEntityItem.h +++ b/libraries/entities-renderer/src/RenderableShapeEntityItem.h @@ -42,6 +42,7 @@ private: std::shared_ptr _material { std::make_shared() }; glm::vec3 _color { NAN }; float _alpha { NAN }; + bool _unlit { false }; }; } } diff --git a/libraries/entities/src/EntityItemProperties.cpp b/libraries/entities/src/EntityItemProperties.cpp index 60559e54c7..aed398ec21 100644 --- a/libraries/entities/src/EntityItemProperties.cpp +++ b/libraries/entities/src/EntityItemProperties.cpp @@ -535,6 +535,7 @@ EntityPropertyFlags EntityItemProperties::getChangedProperties() const { CHECK_PROPERTY_CHANGE(PROP_COMPOUND_SHAPE_URL, compoundShapeURL); CHECK_PROPERTY_CHANGE(PROP_COLOR, color); CHECK_PROPERTY_CHANGE(PROP_ALPHA, alpha); + CHECK_PROPERTY_CHANGE(PROP_UNLIT, unlit); changedProperties += _pulse.getChangedProperties(); CHECK_PROPERTY_CHANGE(PROP_TEXTURES, textures); @@ -610,7 +611,6 @@ EntityPropertyFlags EntityItemProperties::getChangedProperties() const { CHECK_PROPERTY_CHANGE(PROP_RIGHT_MARGIN, rightMargin); CHECK_PROPERTY_CHANGE(PROP_TOP_MARGIN, topMargin); CHECK_PROPERTY_CHANGE(PROP_BOTTOM_MARGIN, bottomMargin); - CHECK_PROPERTY_CHANGE(PROP_UNLIT, unlit); CHECK_PROPERTY_CHANGE(PROP_FONT, font); CHECK_PROPERTY_CHANGE(PROP_TEXT_EFFECT, textEffect); CHECK_PROPERTY_CHANGE(PROP_TEXT_EFFECT_COLOR, textEffectColor); @@ -1385,6 +1385,8 @@ EntityPropertyFlags EntityItemProperties::getChangedProperties() const { * @property {Vec3} dimensions=0.1,0.1,0.1 - The dimensions of the entity. * @property {Color} color=255,255,255 - The color of the entity. * @property {number} alpha=1 - The opacity of the entity, range 0.01.0. + * @property {boolean} unlit=false - true if the entity is unaffected by lighting, false if it is lit + * by the key light and local lights. * @property {Entities.Pulse} pulse - Color and alpha pulse. *

Deprecated: This property is deprecated and will be removed.

* @example Create a cylinder. @@ -1859,6 +1861,7 @@ ScriptValue EntityItemProperties::copyToScriptValue(ScriptEngine* engine, bool s if (_type == EntityTypes::Box || _type == EntityTypes::Sphere || _type == EntityTypes::Shape) { COPY_PROPERTY_TO_QSCRIPTVALUE_TYPED(PROP_COLOR, color, u8vec3Color); COPY_PROPERTY_TO_QSCRIPTVALUE(PROP_ALPHA, alpha); + COPY_PROPERTY_TO_QSCRIPTVALUE(PROP_UNLIT, unlit); _pulse.copyToScriptValue(_desiredProperties, properties, engine, skipDefaults, defaultEntityProperties); COPY_PROPERTY_TO_QSCRIPTVALUE(PROP_SHAPE, shape); } @@ -2204,6 +2207,7 @@ void EntityItemProperties::copyFromScriptValue(const ScriptValue& object, bool h COPY_PROPERTY_FROM_QSCRIPTVALUE(compoundShapeURL, QString, setCompoundShapeURL); COPY_PROPERTY_FROM_QSCRIPTVALUE(color, u8vec3Color, setColor); COPY_PROPERTY_FROM_QSCRIPTVALUE(alpha, float, setAlpha); + COPY_PROPERTY_FROM_QSCRIPTVALUE(unlit, bool, setUnlit); _pulse.copyFromScriptValue(object, namesSet, _defaultSettings); COPY_PROPERTY_FROM_QSCRIPTVALUE(textures, QString, setTextures); @@ -2279,7 +2283,6 @@ void EntityItemProperties::copyFromScriptValue(const ScriptValue& object, bool h COPY_PROPERTY_FROM_QSCRIPTVALUE(rightMargin, float, setRightMargin); COPY_PROPERTY_FROM_QSCRIPTVALUE(topMargin, float, setTopMargin); COPY_PROPERTY_FROM_QSCRIPTVALUE(bottomMargin, float, setBottomMargin); - COPY_PROPERTY_FROM_QSCRIPTVALUE(unlit, bool, setUnlit); COPY_PROPERTY_FROM_QSCRIPTVALUE(font, QString, setFont); COPY_PROPERTY_FROM_QSCRIPTVALUE_ENUM(textEffect, TextEffect); COPY_PROPERTY_FROM_QSCRIPTVALUE(textEffectColor, u8vec3Color, setTextEffectColor); @@ -2498,6 +2501,7 @@ void EntityItemProperties::merge(const EntityItemProperties& other) { COPY_PROPERTY_IF_CHANGED(compoundShapeURL); COPY_PROPERTY_IF_CHANGED(color); COPY_PROPERTY_IF_CHANGED(alpha); + COPY_PROPERTY_IF_CHANGED(unlit); _pulse.merge(other._pulse); COPY_PROPERTY_IF_CHANGED(textures); @@ -2573,7 +2577,6 @@ void EntityItemProperties::merge(const EntityItemProperties& other) { COPY_PROPERTY_IF_CHANGED(rightMargin); COPY_PROPERTY_IF_CHANGED(topMargin); COPY_PROPERTY_IF_CHANGED(bottomMargin); - COPY_PROPERTY_IF_CHANGED(unlit); COPY_PROPERTY_IF_CHANGED(font); COPY_PROPERTY_IF_CHANGED(textEffect); COPY_PROPERTY_IF_CHANGED(textEffectColor); @@ -2829,6 +2832,7 @@ bool EntityItemProperties::getPropertyInfo(const QString& propertyName, EntityPr ADD_PROPERTY_TO_MAP(PROP_COMPOUND_SHAPE_URL, CompoundShapeURL, compoundShapeURL, QString); ADD_PROPERTY_TO_MAP(PROP_COLOR, Color, color, u8vec3Color); ADD_PROPERTY_TO_MAP_WITH_RANGE(PROP_ALPHA, Alpha, alpha, float, particle::MINIMUM_ALPHA, particle::MAXIMUM_ALPHA); + ADD_PROPERTY_TO_MAP(PROP_UNLIT, Unlit, unlit, bool); { // Pulse ADD_GROUP_PROPERTY_TO_MAP(PROP_PULSE_MIN, Pulse, pulse, Min, min); ADD_GROUP_PROPERTY_TO_MAP(PROP_PULSE_MAX, Pulse, pulse, Max, max); @@ -2949,7 +2953,6 @@ bool EntityItemProperties::getPropertyInfo(const QString& propertyName, EntityPr ADD_PROPERTY_TO_MAP(PROP_RIGHT_MARGIN, RightMargin, rightMargin, float); ADD_PROPERTY_TO_MAP(PROP_TOP_MARGIN, TopMargin, topMargin, float); ADD_PROPERTY_TO_MAP(PROP_BOTTOM_MARGIN, BottomMargin, bottomMargin, float); - ADD_PROPERTY_TO_MAP(PROP_UNLIT, Unlit, unlit, bool); ADD_PROPERTY_TO_MAP(PROP_FONT, Font, font, QString); ADD_PROPERTY_TO_MAP(PROP_TEXT_EFFECT, TextEffect, textEffect, TextEffect); ADD_PROPERTY_TO_MAP(PROP_TEXT_EFFECT_COLOR, TextEffectColor, textEffectColor, u8vec3Color); @@ -3501,6 +3504,7 @@ OctreeElement::AppendState EntityItemProperties::encodeEntityEditPacket(PacketTy properties.getType() == EntityTypes::Sphere) { APPEND_ENTITY_PROPERTY(PROP_COLOR, properties.getColor()); APPEND_ENTITY_PROPERTY(PROP_ALPHA, properties.getAlpha()); + APPEND_ENTITY_PROPERTY(PROP_UNLIT, properties.getUnlit()); _staticPulse.setProperties(properties); _staticPulse.appendToEditPacket(packetData, requestedProperties, propertyFlags, propertiesDidntFit, propertyCount, appendState); @@ -3978,6 +3982,7 @@ bool EntityItemProperties::decodeEntityEditPacket(const unsigned char* data, int properties.getType() == EntityTypes::Sphere) { READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_COLOR, u8vec3Color, setColor); READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_ALPHA, float, setAlpha); + READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_UNLIT, bool, setUnlit); properties.getPulse().decodeFromEditPacket(propertyFlags, dataAt, processedBytes); READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_SHAPE, QString, setShape); @@ -4199,6 +4204,7 @@ void EntityItemProperties::markAllChanged() { _compoundShapeURLChanged = true; _colorChanged = true; _alphaChanged = true; + _unlitChanged = true; _pulse.markAllChanged(); _texturesChanged = true; @@ -4274,7 +4280,6 @@ void EntityItemProperties::markAllChanged() { _rightMarginChanged = true; _topMarginChanged = true; _bottomMarginChanged = true; - _unlitChanged = true; _fontChanged = true; _textEffectChanged = true; _textEffectColorChanged = true; @@ -4673,6 +4678,9 @@ QList EntityItemProperties::listChangedProperties() { if (alphaChanged()) { out += "alpha"; } + if (unlitChanged()) { + out += "unlit"; + } getPulse().listChangedProperties(out); if (texturesChanged()) { out += "textures"; @@ -4874,9 +4882,6 @@ QList EntityItemProperties::listChangedProperties() { if (bottomMarginChanged()) { out += "bottomMargin"; } - if (unlitChanged()) { - out += "unlit"; - } if (fontChanged()) { out += "font"; } diff --git a/libraries/entities/src/EntityItemProperties.h b/libraries/entities/src/EntityItemProperties.h index 78e69f98b7..196e2ef46f 100644 --- a/libraries/entities/src/EntityItemProperties.h +++ b/libraries/entities/src/EntityItemProperties.h @@ -254,6 +254,7 @@ public: DEFINE_PROPERTY_REF(PROP_COMPOUND_SHAPE_URL, CompoundShapeURL, compoundShapeURL, QString, ""); DEFINE_PROPERTY_REF(PROP_COLOR, Color, color, u8vec3Color, ENTITY_ITEM_DEFAULT_COLOR); DEFINE_PROPERTY(PROP_ALPHA, Alpha, alpha, float, ENTITY_ITEM_DEFAULT_ALPHA); + DEFINE_PROPERTY_REF(PROP_UNLIT, Unlit, unlit, bool, false); DEFINE_PROPERTY_GROUP(Pulse, pulse, PulsePropertyGroup); DEFINE_PROPERTY_REF(PROP_TEXTURES, Textures, textures, QString, ""); @@ -329,7 +330,6 @@ public: DEFINE_PROPERTY_REF(PROP_RIGHT_MARGIN, RightMargin, rightMargin, float, TextEntityItem::DEFAULT_MARGIN); DEFINE_PROPERTY_REF(PROP_TOP_MARGIN, TopMargin, topMargin, float, TextEntityItem::DEFAULT_MARGIN); DEFINE_PROPERTY_REF(PROP_BOTTOM_MARGIN, BottomMargin, bottomMargin, float, TextEntityItem::DEFAULT_MARGIN); - DEFINE_PROPERTY_REF(PROP_UNLIT, Unlit, unlit, bool, false); DEFINE_PROPERTY_REF(PROP_FONT, Font, font, QString, ROBOTO_FONT_FAMILY); DEFINE_PROPERTY_REF_ENUM(PROP_TEXT_EFFECT, TextEffect, textEffect, TextEffect, TextEffect::NO_EFFECT); DEFINE_PROPERTY_REF(PROP_TEXT_EFFECT_COLOR, TextEffectColor, textEffectColor, u8vec3Color, TextEntityItem::DEFAULT_TEXT_COLOR); diff --git a/libraries/entities/src/EntityPropertyFlags.h b/libraries/entities/src/EntityPropertyFlags.h index ae8928b68e..8d4fd515f4 100644 --- a/libraries/entities/src/EntityPropertyFlags.h +++ b/libraries/entities/src/EntityPropertyFlags.h @@ -121,6 +121,7 @@ enum EntityPropertyList { PROP_COMPOUND_SHAPE_URL, PROP_COLOR, PROP_ALPHA, + PROP_UNLIT, PROP_PULSE_MIN, PROP_PULSE_MAX, PROP_PULSE_PERIOD, @@ -266,12 +267,11 @@ enum EntityPropertyList { PROP_RIGHT_MARGIN = PROP_DERIVED_7, PROP_TOP_MARGIN = PROP_DERIVED_8, PROP_BOTTOM_MARGIN = PROP_DERIVED_9, - PROP_UNLIT = PROP_DERIVED_10, - PROP_FONT = PROP_DERIVED_11, - PROP_TEXT_EFFECT = PROP_DERIVED_12, - PROP_TEXT_EFFECT_COLOR = PROP_DERIVED_13, - PROP_TEXT_EFFECT_THICKNESS = PROP_DERIVED_14, - PROP_TEXT_ALIGNMENT = PROP_DERIVED_15, + PROP_FONT = PROP_DERIVED_10, + PROP_TEXT_EFFECT = PROP_DERIVED_11, + PROP_TEXT_EFFECT_COLOR = PROP_DERIVED_12, + PROP_TEXT_EFFECT_THICKNESS = PROP_DERIVED_13, + PROP_TEXT_ALIGNMENT = PROP_DERIVED_14, // Zone // Keylight diff --git a/libraries/entities/src/ShapeEntityItem.cpp b/libraries/entities/src/ShapeEntityItem.cpp index 825660bd72..054d7f96be 100644 --- a/libraries/entities/src/ShapeEntityItem.cpp +++ b/libraries/entities/src/ShapeEntityItem.cpp @@ -119,6 +119,7 @@ EntityItemProperties ShapeEntityItem::getProperties(const EntityPropertyFlags& d COPY_ENTITY_PROPERTY_TO_PROPERTIES(color, getColor); COPY_ENTITY_PROPERTY_TO_PROPERTIES(alpha, getAlpha); + COPY_ENTITY_PROPERTY_TO_PROPERTIES(unlit, getUnlit); withReadLock([&] { _pulseProperties.getProperties(properties); }); @@ -170,6 +171,7 @@ bool ShapeEntityItem::setSubClassProperties(const EntityItemProperties& properti SET_ENTITY_PROPERTY_FROM_PROPERTIES(color, setColor); SET_ENTITY_PROPERTY_FROM_PROPERTIES(alpha, setAlpha); + SET_ENTITY_PROPERTY_FROM_PROPERTIES(unlit, setUnlit); withWriteLock([&] { bool pulsePropertiesChanged = _pulseProperties.setProperties(properties); somethingChanged |= pulsePropertiesChanged; @@ -190,6 +192,7 @@ int ShapeEntityItem::readEntitySubclassDataFromBuffer(const unsigned char* data, READ_ENTITY_PROPERTY(PROP_COLOR, glm::u8vec3, setColor); READ_ENTITY_PROPERTY(PROP_ALPHA, float, setAlpha); + READ_ENTITY_PROPERTY(PROP_UNLIT, bool, setUnlit); withWriteLock([&] { int bytesFromPulse = _pulseProperties.readEntitySubclassDataFromBuffer(dataAt, (bytesLeftToRead - bytesRead), args, propertyFlags, overwriteLocalData, @@ -206,6 +209,7 @@ EntityPropertyFlags ShapeEntityItem::getEntityProperties(EncodeBitstreamParams& EntityPropertyFlags requestedProperties = EntityItem::getEntityProperties(params); requestedProperties += PROP_COLOR; requestedProperties += PROP_ALPHA; + requestedProperties += PROP_UNLIT; requestedProperties += _pulseProperties.getEntityProperties(params); requestedProperties += PROP_SHAPE; return requestedProperties; @@ -222,6 +226,7 @@ void ShapeEntityItem::appendSubclassData(OctreePacketData* packetData, EncodeBit bool successPropertyFits = true; APPEND_ENTITY_PROPERTY(PROP_COLOR, getColor()); APPEND_ENTITY_PROPERTY(PROP_ALPHA, getAlpha()); + APPEND_ENTITY_PROPERTY(PROP_UNLIT, getUnlit()); withReadLock([&] { _pulseProperties.appendSubclassData(packetData, params, entityTreeElementExtraEncodeData, requestedProperties, propertyFlags, propertiesDidntFit, propertyCount, appendState); @@ -255,6 +260,19 @@ float ShapeEntityItem::getAlpha() const { }); } +void ShapeEntityItem::setUnlit(bool unlit) { + withWriteLock([&] { + _needsRenderUpdate |= _unlit != unlit; + _unlit = unlit; + }); +} + +bool ShapeEntityItem::getUnlit() const { + return resultWithReadLock([&] { + return _unlit; + }); +} + void ShapeEntityItem::setUnscaledDimensions(const glm::vec3& value) { const float MAX_FLAT_DIMENSION = 0.0001f; const auto shape = getShape(); @@ -468,4 +486,4 @@ void ShapeEntityItem::setUserData(const QString& value) { _needsRenderUpdate |= _userData != value; _userData = value; }); -} \ No newline at end of file +} diff --git a/libraries/entities/src/ShapeEntityItem.h b/libraries/entities/src/ShapeEntityItem.h index d5b934153a..1559949c8c 100644 --- a/libraries/entities/src/ShapeEntityItem.h +++ b/libraries/entities/src/ShapeEntityItem.h @@ -82,6 +82,9 @@ public: glm::u8vec3 getColor() const; void setColor(const glm::u8vec3& value); + bool getUnlit() const; + void setUnlit(bool unlit); + void setUnscaledDimensions(const glm::vec3& value) override; bool supportsDetailedIntersection() const override; @@ -107,6 +110,7 @@ public: protected: glm::u8vec3 _color; float _alpha { 1.0f }; + bool _unlit { false }; PulsePropertyGroup _pulseProperties; entity::Shape _shape { entity::Shape::Sphere }; diff --git a/libraries/networking/src/udt/PacketHeaders.h b/libraries/networking/src/udt/PacketHeaders.h index b4fb5a172d..f35bce1388 100644 --- a/libraries/networking/src/udt/PacketHeaders.h +++ b/libraries/networking/src/udt/PacketHeaders.h @@ -296,6 +296,7 @@ enum class EntityVersion : PacketVersion { AudioZones, AnimationSmoothFrames, ProceduralParticles, + ShapeUnlit, // Add new versions above here NUM_PACKET_TYPE, diff --git a/scripts/system/create/entityProperties/html/js/entityProperties.js b/scripts/system/create/entityProperties/html/js/entityProperties.js index ff55abbde9..2c72b8ea6d 100644 --- a/scripts/system/create/entityProperties/html/js/entityProperties.js +++ b/scripts/system/create/entityProperties/html/js/entityProperties.js @@ -177,7 +177,12 @@ const GROUPS = [ decimals: 2, propertyID: "shapeAlpha", propertyName: "alpha", - }, + }, + { + label: "Unlit", + type: "bool", + propertyID: "unlit", + } ] }, { From 261cb94ff0f2ac15fa2215522c563e0d78e0da3a Mon Sep 17 00:00:00 2001 From: HifiExperiments Date: Fri, 21 Jun 2024 14:40:40 -0700 Subject: [PATCH 2/2] fix create issue --- scripts/system/create/assets/data/createAppTooltips.json | 4 ++++ .../create/entityProperties/html/js/entityProperties.js | 3 ++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/scripts/system/create/assets/data/createAppTooltips.json b/scripts/system/create/assets/data/createAppTooltips.json index 076f47f5dd..23a351af72 100644 --- a/scripts/system/create/assets/data/createAppTooltips.json +++ b/scripts/system/create/assets/data/createAppTooltips.json @@ -8,6 +8,10 @@ "shapeAlpha": { "tooltip": "The opacity of the entity between 0.0 fully transparent and 1.0 completely opaque." }, + "shapeUnlit": { + "tooltip": "If enabled, the entity will not be lit by the keylight or local lights.", + "jsPropertyName": "unlit" + }, "text": { "tooltip": "The text to display on the entity." }, diff --git a/scripts/system/create/entityProperties/html/js/entityProperties.js b/scripts/system/create/entityProperties/html/js/entityProperties.js index 4bbacf8af3..5cd56fc642 100644 --- a/scripts/system/create/entityProperties/html/js/entityProperties.js +++ b/scripts/system/create/entityProperties/html/js/entityProperties.js @@ -181,7 +181,8 @@ const GROUPS = [ { label: "Unlit", type: "bool", - propertyID: "unlit", + propertyID: "shapeUnlit", + propertyName: "unlit" } ] },