Răsfoiți Sursa

Possibility for BillboardSet / ParticleEffect billboards to be fixed screen size. In this case the billboard size is measured in pixels.

Lasse Öörni 9 ani în urmă
părinte
comite
caf663eac3

+ 1 - 0
Docs/Reference.dox

@@ -1706,6 +1706,7 @@ The parameters of the particle system are stored in a ParticleEffect resource cl
     <relative enable="true|false" />
     <scaled enable="true|false" />
     <sorted enable="true|false" />
+    <fixedscreensize enable="true|false" />
     <emittertype value="sphere|box" />
     <emittersize value="x y z" />
     <emitterradius value="x" />

+ 6 - 0
Source/Urho3D/AngelScript/GraphicsAPI.cpp

@@ -1458,6 +1458,8 @@ static void RegisterBillboardSet(asIScriptEngine* engine)
     engine->RegisterObjectMethod("BillboardSet", "bool get_sorted() const", asMETHOD(BillboardSet, IsSorted), asCALL_THISCALL);
     engine->RegisterObjectMethod("BillboardSet", "void set_scaled(bool)", asMETHOD(BillboardSet, SetScaled), asCALL_THISCALL);
     engine->RegisterObjectMethod("BillboardSet", "bool get_scaled() const", asMETHOD(BillboardSet, IsScaled), asCALL_THISCALL);
+    engine->RegisterObjectMethod("BillboardSet", "void set_fixedScreenSize(bool)", asMETHOD(BillboardSet, SetFixedScreenSize), asCALL_THISCALL);
+    engine->RegisterObjectMethod("BillboardSet", "bool get_fixedScreenSize() const", asMETHOD(BillboardSet, IsFixedScreenSize), asCALL_THISCALL);
     engine->RegisterObjectMethod("BillboardSet", "void set_faceCameraMode(FaceCameraMode)", asMETHOD(BillboardSet, SetFaceCameraMode), asCALL_THISCALL);
     engine->RegisterObjectMethod("BillboardSet", "FaceCameraMode get_faceCameraMode() const", asMETHOD(BillboardSet, GetFaceCameraMode), asCALL_THISCALL);
     engine->RegisterObjectMethod("BillboardSet", "void set_animationLodBias(float)", asMETHOD(BillboardSet, SetAnimationLodBias), asCALL_THISCALL);
@@ -1499,6 +1501,8 @@ static void RegisterParticleEffect(asIScriptEngine* engine)
     engine->RegisterObjectMethod("ParticleEffect", "bool get_sorted() const", asMETHOD(ParticleEffect, IsSorted), asCALL_THISCALL);
     engine->RegisterObjectMethod("ParticleEffect", "void set_scaled(bool)", asMETHOD(ParticleEffect, SetScaled), asCALL_THISCALL);
     engine->RegisterObjectMethod("ParticleEffect", "bool get_scaled() const", asMETHOD(ParticleEffect, IsScaled), asCALL_THISCALL);
+    engine->RegisterObjectMethod("ParticleEffect", "void set_fixedScreenSize(bool)", asMETHOD(ParticleEffect, SetFixedScreenSize), asCALL_THISCALL);
+    engine->RegisterObjectMethod("ParticleEffect", "bool get_fixedScreenSize() const", asMETHOD(ParticleEffect, IsFixedScreenSize), asCALL_THISCALL);
     engine->RegisterObjectMethod("ParticleEffect", "void set_animationLodBias(float)", asMETHOD(ParticleEffect, SetAnimationLodBias), asCALL_THISCALL);
     engine->RegisterObjectMethod("ParticleEffect", "float get_animationLodBias() const", asMETHOD(ParticleEffect, GetAnimationLodBias), asCALL_THISCALL);
     engine->RegisterObjectMethod("ParticleEffect", "void set_emitterType(EmitterType)", asMETHOD(ParticleEffect, SetEmitterType), asCALL_THISCALL);
@@ -1582,6 +1586,8 @@ static void RegisterParticleEmitter(asIScriptEngine* engine)
     engine->RegisterObjectMethod("ParticleEmitter", "bool get_sorted() const", asMETHOD(ParticleEmitter, IsSorted), asCALL_THISCALL);
     engine->RegisterObjectMethod("ParticleEmitter", "void set_scaled(bool)", asMETHOD(ParticleEmitter, SetScaled), asCALL_THISCALL);
     engine->RegisterObjectMethod("ParticleEmitter", "bool get_scaled() const", asMETHOD(ParticleEmitter, IsScaled), asCALL_THISCALL);
+    engine->RegisterObjectMethod("ParticleEmitter", "void set_fixedScreenSize(bool)", asMETHOD(ParticleEmitter, SetFixedScreenSize), asCALL_THISCALL);
+    engine->RegisterObjectMethod("ParticleEmitter", "bool get_fixedScreenSize() const", asMETHOD(ParticleEmitter, IsFixedScreenSize), asCALL_THISCALL);
     engine->RegisterObjectMethod("ParticleEmitter", "void set_faceCameraMode(FaceCameraMode)", asMETHOD(ParticleEmitter, SetFaceCameraMode), asCALL_THISCALL);
     engine->RegisterObjectMethod("ParticleEmitter", "FaceCameraMode get_faceCameraMode() const", asMETHOD(ParticleEmitter, GetFaceCameraMode), asCALL_THISCALL);
     engine->RegisterObjectMethod("ParticleEmitter", "void set_animationLodBias(float)", asMETHOD(ParticleEmitter, SetAnimationLodBias), asCALL_THISCALL);

+ 48 - 2
Source/Urho3D/Graphics/BillboardSet.cpp

@@ -69,6 +69,7 @@ BillboardSet::BillboardSet(Context* context) :
     relative_(true),
     scaled_(true),
     sorted_(false),
+    fixedScreenSize_(false),
     faceCameraMode_(FC_ROTATE_XYZ),
     geometry_(new Geometry(context)),
     vertexBuffer_(new VertexBuffer(context_)),
@@ -104,6 +105,7 @@ void BillboardSet::RegisterObject(Context* context)
     URHO3D_ACCESSOR_ATTRIBUTE("Relative Position", IsRelative, SetRelative, bool, true, AM_DEFAULT);
     URHO3D_ACCESSOR_ATTRIBUTE("Relative Scale", IsScaled, SetScaled, bool, true, AM_DEFAULT);
     URHO3D_ACCESSOR_ATTRIBUTE("Sort By Distance", IsSorted, SetSorted, bool, false, AM_DEFAULT);
+    URHO3D_ACCESSOR_ATTRIBUTE("Fixed Screen Size", IsFixedScreenSize, SetFixedScreenSize, bool, false, AM_DEFAULT);
     URHO3D_ACCESSOR_ATTRIBUTE("Can Be Occluded", IsOccludee, SetOccludee, bool, true, AM_DEFAULT);
     URHO3D_ATTRIBUTE("Cast Shadows", bool, castShadows_, false, AM_DEFAULT);
     URHO3D_ENUM_ACCESSOR_ATTRIBUTE("Face Camera Mode", GetFaceCameraMode, SetFaceCameraMode, FaceCameraMode, faceCameraModeNames, FC_ROTATE_XYZ, AM_DEFAULT);
@@ -141,6 +143,8 @@ void BillboardSet::ProcessRayQuery(const RayOctreeQuery& query, PODVector<RayQue
 
         // Approximate the billboards as spheres for raycasting
         float size = INV_SQRT_TWO * (billboards_[i].size_.x_ * billboardScale.x_ + billboards_[i].size_.y_ * billboardScale.y_);
+        if (fixedScreenSize_)
+            size *= billboards_[i].screenScaleFactor_;
         Vector3 center = billboardTransform * billboards_[i].position_;
         Sphere billboardSphere(center, size);
 
@@ -174,10 +178,38 @@ void BillboardSet::UpdateBatches(const FrameInfo& frame)
     // Sort if position relative to camera has changed
     if (offset != previousOffset_)
     {
-        if(sorted_)
+        if (sorted_)
             sortThisFrame_ = true;
-        if(faceCameraMode_ == FC_DIRECTION)
+        if (faceCameraMode_ == FC_DIRECTION)
             bufferDirty_ = true;
+
+        // Calculate fixed screen size scale factor for billboards if needed
+        if (fixedScreenSize_)
+        {
+            bufferDirty_ = true;
+            worldBoundingBoxDirty_ = true;
+            float invViewHeight = 1.0f / frame.viewSize_.y_;
+            float halfViewWorldSize = frame.camera_->GetHalfViewSize();
+
+            if (!frame.camera_->IsOrthographic())
+            {
+                Matrix4 viewProj(frame.camera_->GetProjection(false) * frame.camera_->GetView());
+                const Matrix3x4& worldTransform = node_->GetWorldTransform();
+                Matrix3x4 billboardTransform = relative_ ? worldTransform : Matrix3x4::IDENTITY;
+                Vector3 billboardScale = scaled_ ? worldTransform.Scale() : Vector3::ONE;
+
+                for (unsigned i = 0; i < billboards_.Size(); ++i)
+                {
+                    Vector4 projPos(viewProj * Vector4(billboardTransform * billboards_[i].position_, 1.0f));
+                    billboards_[i].screenScaleFactor_ = invViewHeight * halfViewWorldSize * projPos.w_;
+                }
+            }
+            else
+            {
+                for (unsigned i = 0; i < billboards_.Size(); ++i)
+                    billboards_[i].screenScaleFactor_ = invViewHeight * halfViewWorldSize;
+            }
+        }
     }
 
     distance_ = frame.camera_->GetDistance(GetWorldBoundingBox().Center());
@@ -254,6 +286,7 @@ void BillboardSet::SetNumBillboards(unsigned num)
         billboards_[i].rotation_ = 0.0f;
         billboards_[i].direction_ = Vector3::UP;
         billboards_[i].enabled_ = false;
+        billboards_[i].screenScaleFactor_ = 1.0f;
     }
 
     bufferSizeDirty_ = true;
@@ -278,6 +311,12 @@ void BillboardSet::SetSorted(bool enable)
     Commit();
 }
 
+void BillboardSet::SetFixedScreenSize(bool enable)
+{
+    fixedScreenSize_ = enable;
+    Commit();
+}
+
 void BillboardSet::SetFaceCameraMode(FaceCameraMode mode)
 {
     if ((faceCameraMode_ != FC_DIRECTION && mode == FC_DIRECTION) || (faceCameraMode_ == FC_DIRECTION && mode != FC_DIRECTION))
@@ -443,6 +482,9 @@ void BillboardSet::OnWorldBoundingBoxUpdate()
             continue;
 
         float size = INV_SQRT_TWO * (billboards_[i].size_.x_ * billboardScale.x_ + billboards_[i].size_.y_ * billboardScale.y_);
+        if (fixedScreenSize_)
+            size *= billboards_[i].screenScaleFactor_;
+
         Vector3 center = billboardTransform * billboards_[i].position_;
         Vector3 edge = Vector3::ONE * size;
         worldBox.Merge(BoundingBox(center - edge, center + edge));
@@ -579,6 +621,8 @@ void BillboardSet::UpdateVertexBuffer(const FrameInfo& frame)
 
             Vector2 size(billboard.size_.x_ * billboardScale.x_, billboard.size_.y_ * billboardScale.y_);
             unsigned color = billboard.color_.ToUInt();
+            if (fixedScreenSize_)
+                size *= billboard.screenScaleFactor_;
 
             float rotationMatrix[2][2];
             SinCos(billboard.rotation_, rotationMatrix[0][1], rotationMatrix[0][0]);
@@ -634,6 +678,8 @@ void BillboardSet::UpdateVertexBuffer(const FrameInfo& frame)
 
             Vector2 size(billboard.size_.x_ * billboardScale.x_, billboard.size_.y_ * billboardScale.y_);
             unsigned color = billboard.color_.ToUInt();
+            if (fixedScreenSize_)
+                size *= billboard.screenScaleFactor_;
 
             float rot2D[2][2];
             SinCos(billboard.rotation_, rot2D[0][1], rot2D[0][0]);

+ 13 - 2
Source/Urho3D/Graphics/BillboardSet.h

@@ -39,7 +39,7 @@ struct URHO3D_API Billboard
 {
     /// Position.
     Vector3 position_;
-    /// Two-dimensional size.
+    /// Two-dimensional size. If BillboardSet has fixed screen size enabled, this is measured in pixels instead of world units.
     Vector2 size_;
     /// UV coordinates.
     Rect uv_;
@@ -51,8 +51,10 @@ struct URHO3D_API Billboard
     Vector3 direction_;
     /// Enabled flag.
     bool enabled_;
-    /// Sort distance.
+    /// Sort distance. Used internally.
     float sortDistance_;
+    /// Scale factor for fixed screen size mode. Used internally.
+    float screenScaleFactor_;
 };
 
 static const unsigned MAX_BILLBOARDS = 65536 / 4;
@@ -89,6 +91,8 @@ public:
     void SetScaled(bool enable);
     /// Set whether billboards are sorted by distance. Default false.
     void SetSorted(bool enable);
+    /// Set whether billboards have fixed size on screen (measured in pixels) regardless of distance to camera. Default false.
+    void SetFixedScreenSize(bool enable);
     /// Set how the billboards should rotate in relation to the camera. Default is to follow camera rotation on all axes (FC_ROTATE_XYZ.)
     void SetFaceCameraMode(FaceCameraMode mode);
     /// Set animation LOD bias.
@@ -117,6 +121,9 @@ public:
     /// Return whether billboards are sorted.
     bool IsSorted() const { return sorted_; }
 
+    /// Return whether billboards are fixed screen size.
+    bool IsFixedScreenSize() const { return fixedScreenSize_; }
+
     /// Return how the billboards rotate in relation to the camera.
     FaceCameraMode GetFaceCameraMode() const { return faceCameraMode_; }
 
@@ -156,6 +163,8 @@ protected:
     bool scaled_;
     /// Billboards sorted flag.
     bool sorted_;
+    /// Billboards fixed screen size flag.
+    bool fixedScreenSize_;
     /// Billboard rotation mode in relation to the camera.
     FaceCameraMode faceCameraMode_;
 
@@ -187,6 +196,8 @@ private:
     unsigned sortFrameNumber_;
     /// Previous offset to camera for determining whether sorting is necessary.
     Vector3 previousOffset_;
+    /// Scale factor for fixed screen size mode.
+    float fixedScaleFactor_;
     /// Billboard pointers for sorting.
     Vector<Billboard*> sortedBillboards_;
     /// Attribute buffer for network replication.

+ 13 - 0
Source/Urho3D/Graphics/ParticleEffect.cpp

@@ -60,6 +60,7 @@ ParticleEffect::ParticleEffect(Context* context) :
     relative_(true),
     scaled_(true),
     sorted_(false),
+    fixedScreenSize_(false),
     animationLodBias_(0.0f),
     emitterType_(EMITTER_SPHERE),
     emitterSize_(Vector3::ZERO),
@@ -136,6 +137,7 @@ bool ParticleEffect::Load(const XMLElement& source)
     relative_ = true;
     scaled_ = true;
     sorted_ = false;
+    fixedScreenSize_ = false;
     animationLodBias_ = 0.0f;
     emitterType_ = EMITTER_SPHERE;
     emitterSize_ = Vector3::ZERO;
@@ -192,6 +194,9 @@ bool ParticleEffect::Load(const XMLElement& source)
     if (source.HasChild("sorted"))
         sorted_ = source.GetChild("sorted").GetBool("enable");
 
+    if (source.HasChild("fixedscreensize"))
+        fixedScreenSize_ = source.GetChild("fixedscreensize").GetBool("enable");
+
     if (source.HasChild("animlodbias"))
         SetAnimationLodBias(source.GetChild("animlodbias").GetFloat("value"));
 
@@ -346,6 +351,9 @@ bool ParticleEffect::Save(XMLElement& dest) const
     childElem = dest.CreateChild("sorted");
     childElem.SetBool("enable", sorted_);
 
+    childElem = dest.CreateChild("fixedscreensize");
+    childElem.SetBool("enable", fixedScreenSize_);
+
     childElem = dest.CreateChild("animlodbias");
     childElem.SetFloat("value", animationLodBias_);
 
@@ -458,6 +466,11 @@ void ParticleEffect::SetSorted(bool enable)
     sorted_ = enable;
 }
 
+void ParticleEffect::SetFixedScreenSize(bool enable)
+{
+    fixedScreenSize_ = enable;
+}
+
 void ParticleEffect::SetAnimationLodBias(float lodBias)
 {
     animationLodBias_ = lodBias;

+ 10 - 3
Source/Urho3D/Graphics/ParticleEffect.h

@@ -129,12 +129,14 @@ public:
     void SetNumParticles(unsigned num);
     /// Set whether to update when particles are not visible.
     void SetUpdateInvisible(bool enable);
-    /// Set whether billboards are relative to the scene node. Default true.
+    /// Set whether billboards are relative to the scene node.
     void SetRelative(bool enable);
-    /// Set scaled.
+    /// Set whether scene node scale affects billboards' size.
     void SetScaled(bool enable);
-    /// Set sorted.
+    /// Set whether billboards are sorted by distance.
     void SetSorted(bool enable);
+    /// Set whether billboards have fixed size on screen (measured in pixels) regardless of distance to camera.
+    void SetFixedScreenSize(bool enable);
     /// Set animation LOD bias.
     void SetAnimationLodBias(float lodBias);
     /// Set emitter type.
@@ -232,6 +234,9 @@ public:
     /// Return whether billboards are sorted.
     bool IsSorted() const { return sorted_; }
 
+    /// Return whether billboards are fixed screen size.
+    bool IsFixedScreenSize() const { return fixedScreenSize_; }
+
     /// Return animation Lod bias.
     float GetAnimationLodBias() const { return animationLodBias_; }
 
@@ -355,6 +360,8 @@ private:
     bool scaled_;
     /// Billboards sorted flag.
     bool sorted_;
+    /// Billboards fixed screen size flag.
+    bool fixedScreenSize_;
     /// Animation LOD bias.
     float animationLodBias_;
     /// Emitter shape.

+ 1 - 0
Source/Urho3D/Graphics/ParticleEmitter.cpp

@@ -337,6 +337,7 @@ void ParticleEmitter::ApplyEffect()
     SetRelative(effect_->IsRelative());
     SetScaled(effect_->IsScaled());
     SetSorted(effect_->IsSorted());
+    SetFixedScreenSize(effect_->IsFixedScreenSize());
     SetAnimationLodBias(effect_->GetAnimationLodBias());
     SetFaceCameraMode(effect_->GetFaceCameraMode());
 }

+ 3 - 1
Source/Urho3D/LuaScript/pkgs/Graphics/BillboardSet.pkg

@@ -8,7 +8,6 @@ struct Billboard
     Color color_ @ color;
     float rotation_ @ rotation;
     bool enabled_ @ enabled;
-    float sortDistance_ @ sortDistance;
 };
 
 class BillboardSet : public Drawable
@@ -18,6 +17,7 @@ class BillboardSet : public Drawable
     void SetRelative(bool enable);
     void SetScaled(bool enable);
     void SetSorted(bool enable);
+    void SetFixedScreenSize(bool enable);
     void SetFaceCameraMode(FaceCameraMode mode);
     void SetAnimationLodBias(float bias);
 
@@ -29,6 +29,7 @@ class BillboardSet : public Drawable
     bool IsRelative() const;
     bool IsScaled() const;
     bool IsSorted() const;
+    bool IsFixedScreenSize() const;
     FaceCameraMode GetFaceCameraMode() const;
     float GetAnimationLodBias() const;
     
@@ -37,6 +38,7 @@ class BillboardSet : public Drawable
     tolua_property__is_set bool relative;
     tolua_property__is_set bool scaled;
     tolua_property__is_set bool sorted;
+    tolua_property__is_set bool fixedScreenSize;
     tolua_property__get_set FaceCameraMode faceCameraMode;
     tolua_property__get_set float animationLodBias;
 };

+ 3 - 0
Source/Urho3D/LuaScript/pkgs/Graphics/ParticleEffect.pkg

@@ -38,6 +38,7 @@ class ParticleEffect : public Resource
     void SetRelative(bool enable);
     void SetScaled(bool enable);
     void SetSorted(bool enable);
+    void SetFixedScreenSize(bool enable);
     void SetAnimationLodBias(float lodBias);
     void SetEmitterType(EmitterType type);
     void SetEmitterSize(const Vector3& size);
@@ -80,6 +81,7 @@ class ParticleEffect : public Resource
     bool IsRelative() const;
     bool IsScaled() const;
     bool IsSorted() const;
+    bool IsFixedScreenSize() const;
     float GetAnimationLodBias() const;
     EmitterType GetEmitterType() const;
     const Vector3& GetEmitterSize() const;
@@ -114,6 +116,7 @@ class ParticleEffect : public Resource
     tolua_property__is_set bool relative;
     tolua_property__is_set bool scaled;
     tolua_property__is_set bool sorted;
+    tolua_property__is_set bool fixedScreenSize;
     tolua_property__get_set float animationLodBias;
     tolua_property__get_set EmitterType emitterType;
     tolua_property__get_set const Vector3& emitterSize;

+ 24 - 1
bin/Data/Scripts/Editor/EditorParticleEffect.as

@@ -128,8 +128,9 @@ void CreateParticleEffectEditor()
     SubscribeToEvent(particleEffectWindow.GetChild("Scaled", true), "Toggled", "EditParticleEffectScaled");
     SubscribeToEvent(particleEffectWindow.GetChild("Sorted", true), "Toggled", "EditParticleEffectSorted");
     SubscribeToEvent(particleEffectWindow.GetChild("Relative", true), "Toggled", "EditParticleEffectRelative");
+    SubscribeToEvent(particleEffectWindow.GetChild("FixedScreenSize", true), "Toggled", "EditParticleEffectFixedScreenSize");
     SubscribeToEvent(particleEffectWindow.GetChild("FaceCameraMode", true), "ItemSelected", "EditParticleEffectFaceCameraMode");
-    
+
     SubscribeToEvent(particleEffectWindow.GetChild("ResetViewport", true), "Released", "ParticleEffectResetViewport");
     SubscribeToEvent(particleEffectWindow.GetChild("ShowGrid", true), "Toggled", "ParticleEffectShowGrid");
 }
@@ -866,6 +867,27 @@ void EditParticleEffectRelative(StringHash eventType, VariantMap& eventData)
     EndParticleEffectEdit();
 }
 
+void EditParticleEffectFixedScreenSize(StringHash eventType, VariantMap& eventData)
+{
+    if (inParticleEffectRefresh)
+        return;
+
+    if (editParticleEffect is null)
+        return;
+
+    if (particleEffectEmitter is null)
+        return;
+
+    BeginParticleEffectEdit();
+
+    CheckBox@ element = eventData["Element"].GetPtr();
+
+    editParticleEffect.fixedScreenSize = element.checked;
+    particleEffectEmitter.ApplyEffect();
+
+    EndParticleEffectEdit();
+}
+
 bool ToggleParticleEffectEditor()
 {
     if (particleEffectWindow.visible == false)
@@ -1480,6 +1502,7 @@ void RefreshParticleEffectBasicAttributes()
     cast<CheckBox>(particleEffectWindow.GetChild("Scaled", true)).checked = editParticleEffect.scaled;
     cast<CheckBox>(particleEffectWindow.GetChild("Sorted", true)).checked = editParticleEffect.sorted;
     cast<CheckBox>(particleEffectWindow.GetChild("Relative", true)).checked = editParticleEffect.relative;
+    cast<CheckBox>(particleEffectWindow.GetChild("FixedScreenSize", true)).checked = editParticleEffect.fixedScreenSize;
 }
 
 void RefreshParticleEffectMaterial()

+ 22 - 3
bin/Data/UI/EditorParticleEffectWindow.xml

@@ -656,6 +656,25 @@
                                     <attribute name="Layout Spacing" value="1" />
                                 </element>
                             </element>
+                            <element>
+                                <!-- Relative -->
+                                <attribute name="Min Size" value="0 16" />
+                                <attribute name="Max Size" value="2147483647 16" />
+                                <attribute name="Layout Mode" value="Horizontal" />
+                                <attribute name="Layout Spacing" value="10" />
+                                <element type="Text" style="EditorAttributeText">
+                                    <attribute name="Text" value="Relative Transform" />
+                                </element>
+                                <element>
+                                    <attribute name="Min Size" value="0 16" />
+                                    <attribute name="Max Size" value="2147483647 16" />
+                                    <attribute name="Layout Mode" value="Horizontal" />
+                                    <attribute name="Layout Spacing" value="1" />
+                                    <element type="CheckBox">
+                                        <attribute name="Name" value="Relative" />
+                                    </element>
+                                </element>
+                            </element>
                             <element>
                                 <!-- Scaled -->
                                 <attribute name="Min Size" value="0 16" />
@@ -695,13 +714,13 @@
                                 </element>
                             </element>
                             <element>
-                                <!-- Relative -->
+                                <!-- Fixed screen size -->
                                 <attribute name="Min Size" value="0 16" />
                                 <attribute name="Max Size" value="2147483647 16" />
                                 <attribute name="Layout Mode" value="Horizontal" />
                                 <attribute name="Layout Spacing" value="10" />
                                 <element type="Text" style="EditorAttributeText">
-                                    <attribute name="Text" value="Relative Transform" />
+                                    <attribute name="Text" value="Fixed Screen Size" />
                                 </element>
                                 <element>
                                     <attribute name="Min Size" value="0 16" />
@@ -709,7 +728,7 @@
                                     <attribute name="Layout Mode" value="Horizontal" />
                                     <attribute name="Layout Spacing" value="1" />
                                     <element type="CheckBox">
-                                        <attribute name="Name" value="Relative" />
+                                        <attribute name="Name" value="FixedScreenSize" />
                                     </element>
                                 </element>
                             </element>