Working edition and emissive edge on fade element enter/leave

This commit is contained in:
Olivier Prat 2017-06-29 12:59:43 +02:00
parent 6a31dc2659
commit fb33b8d1c1
3 changed files with 40 additions and 42 deletions

View file

@ -22,8 +22,8 @@ struct FadeParameters
{
vec4 _baseInvSizeAndLevel;
vec4 _noiseInvSizeAndLevel;
vec3 _innerEdgeColor;
vec3 _outerEdgeColor;
vec4 _innerEdgeColor;
vec4 _outerEdgeColor;
vec2 _edgeWidthInvWidth;
int _invertBase;
float _padding;
@ -108,16 +108,15 @@ void applyFade(vec3 position, out vec3 emissive) {
if (alpha < 0) {
discard;
}
/*
float edgeMask = alpha * fadeParameters[fadeCategory]._edgeWidthInvWidth.y;
float edgeAlpha = 1.0-clamp(edgeMask, 0, 1);
edgeMask = step(edgeMask, 1.f);
//edgeMask = step(edgeMask, 1.f);
edgeMask = edgeMask > 1.f ? 0.f : 1.f;
edgeAlpha *= edgeAlpha; // Square to have a nice ease out
emissive = mix(fadeParameters[fadeCategory]._innerEdgeColor, fadeParameters[fadeCategory]._outerEdgeColor, edgeAlpha);
emissive *= edgeMask;
*/
emissive = vec3(0,0,0);
vec4 color = mix(fadeParameters[fadeCategory]._innerEdgeColor, fadeParameters[fadeCategory]._outerEdgeColor, edgeAlpha);
emissive = color.rgb * edgeMask * color.a;
}
<@endfunc@>

View file

@ -6,6 +6,9 @@
#include <Interpolate.h>
#include <gpu/Context.h>
#define FADE_MIN_SCALE 0.001f
#define FADE_MAX_SCALE 100000.f
void FadeSwitchJob::configure(const Config& config) {
_parameters->_isEditEnabled = config.editFade;
}
@ -100,17 +103,17 @@ void FadeJobConfig::setDuration(float value) {
}
void FadeJobConfig::setBaseSizeX(float value) {
baseSize[editedCategory].x = value;
baseSize[editedCategory].x = FADE_MIN_SCALE*powf(FADE_MAX_SCALE/ FADE_MIN_SCALE, value);
emit dirty();
}
void FadeJobConfig::setBaseSizeY(float value) {
baseSize[editedCategory].y = value;
baseSize[editedCategory].y = FADE_MIN_SCALE*powf(FADE_MAX_SCALE / FADE_MIN_SCALE, value);
emit dirty();
}
void FadeJobConfig::setBaseSizeZ(float value) {
baseSize[editedCategory].z = value;
baseSize[editedCategory].z = FADE_MIN_SCALE*powf(FADE_MAX_SCALE / FADE_MIN_SCALE, value);
emit dirty();
}
@ -125,17 +128,17 @@ void FadeJobConfig::setBaseInverted(bool value) {
}
void FadeJobConfig::setNoiseSizeX(float value) {
noiseSize[editedCategory].x = value;
noiseSize[editedCategory].x = FADE_MIN_SCALE*powf(FADE_MAX_SCALE / FADE_MIN_SCALE, value);
emit dirty();
}
void FadeJobConfig::setNoiseSizeY(float value) {
noiseSize[editedCategory].y = value;
noiseSize[editedCategory].y = FADE_MIN_SCALE*powf(FADE_MAX_SCALE / FADE_MIN_SCALE, value);
emit dirty();
}
void FadeJobConfig::setNoiseSizeZ(float value) {
noiseSize[editedCategory].z = value;
noiseSize[editedCategory].z = FADE_MIN_SCALE*powf(FADE_MAX_SCALE / FADE_MIN_SCALE, value);
emit dirty();
}
@ -145,7 +148,7 @@ void FadeJobConfig::setNoiseLevel(float value) {
}
void FadeJobConfig::setEdgeWidth(float value) {
edgeWidth[editedCategory] = value;
edgeWidth[editedCategory] = value * value;
emit dirty();
}
@ -214,12 +217,8 @@ void FadeConfigureJob::configure(const Config& config) {
configuration._invertBase = config.baseInverted[i];
configuration._edgeWidthInvWidth.x = config.edgeWidth[i];
configuration._edgeWidthInvWidth.y = 1.f / configuration._edgeWidthInvWidth.x;
configuration._innerEdgeColor.r = config.edgeInnerColor[i].r * config.edgeInnerColor[i].a;
configuration._innerEdgeColor.g = config.edgeInnerColor[i].g * config.edgeInnerColor[i].a;
configuration._innerEdgeColor.b = config.edgeInnerColor[i].b * config.edgeInnerColor[i].a;
configuration._outerEdgeColor.r = config.edgeOuterColor[i].r * config.edgeOuterColor[i].a;
configuration._outerEdgeColor.g = config.edgeOuterColor[i].g * config.edgeOuterColor[i].a;
configuration._outerEdgeColor.b = config.edgeOuterColor[i].b * config.edgeOuterColor[i].a;
configuration._innerEdgeColor = config.edgeInnerColor[i];
configuration._outerEdgeColor = config.edgeOuterColor[i];
}
_isBufferDirty = true;
}

View file

@ -127,11 +127,11 @@ public:
int editedCategory{ ELEMENT_ENTER_LEAVE_DOMAIN };
glm::vec3 baseSize[EVENT_CATEGORY_COUNT]{
{ 1.0f, 1.0f, 1.0f }, // ELEMENT_ENTER_LEAVE_DOMAIN
{ 1.0f, 1.0f, 1.0f }, // BUBBLE_ISECT_OWNER
{ 1.0f, 1.0f, 1.0f }, // BUBBLE_ISECT_TRESPASSER
{ 1.0f, 1.0f, 1.0f }, // USER_ENTER_LEAVE_DOMAIN
{ 1.0f, 1.0f, 1.0f }, // AVATAR_CHANGE
{ 0.35f, 0.35f, 0.35f }, // ELEMENT_ENTER_LEAVE_DOMAIN
{ 0.35f, 0.35f, 0.35f }, // BUBBLE_ISECT_OWNER
{ 0.35f, 0.35f, 0.35f }, // BUBBLE_ISECT_TRESPASSER
{ 0.35f, 0.35f, 0.35f }, // USER_ENTER_LEAVE_DOMAIN
{ 0.35f, 0.35f, 0.35f }, // AVATAR_CHANGE
};
float baseLevel[EVENT_CATEGORY_COUNT]{
1.0f, // ELEMENT_ENTER_LEAVE_DOMAIN
@ -148,11 +148,11 @@ public:
false, // AVATAR_CHANGE
};
glm::vec3 noiseSize[EVENT_CATEGORY_COUNT]{
{ 1.0f, 1.0f, 1.0f }, // ELEMENT_ENTER_LEAVE_DOMAIN
{ 1.0f, 1.0f, 1.0f }, // BUBBLE_ISECT_OWNER
{ 1.0f, 1.0f, 1.0f }, // BUBBLE_ISECT_TRESPASSER
{ 1.0f, 1.0f, 1.0f }, // USER_ENTER_LEAVE_DOMAIN
{ 1.0f, 1.0f, 1.0f }, // AVATAR_CHANGE
{ 0.35f, 0.35f, 0.35f }, // ELEMENT_ENTER_LEAVE_DOMAIN
{ 0.35f, 0.35f, 0.35f }, // BUBBLE_ISECT_OWNER
{ 0.35f, 0.35f, 0.35f }, // BUBBLE_ISECT_TRESPASSER
{ 0.35f, 0.35f, 0.35f }, // USER_ENTER_LEAVE_DOMAIN
{ 0.35f, 0.35f, 0.35f }, // AVATAR_CHANGE
};
float noiseLevel[EVENT_CATEGORY_COUNT]{
1.0f, // ELEMENT_ENTER_LEAVE_DOMAIN
@ -169,22 +169,22 @@ public:
3.0f, // AVATAR_CHANGE
};
float edgeWidth[EVENT_CATEGORY_COUNT]{
0.1f, // ELEMENT_ENTER_LEAVE_DOMAIN
0.1f, // BUBBLE_ISECT_OWNER
0.1f, // BUBBLE_ISECT_TRESPASSER
0.1f, // USER_ENTER_LEAVE_DOMAIN
0.1f, // AVATAR_CHANGE
0.05f, // ELEMENT_ENTER_LEAVE_DOMAIN
0.05f, // BUBBLE_ISECT_OWNER
0.05f, // BUBBLE_ISECT_TRESPASSER
0.05f, // USER_ENTER_LEAVE_DOMAIN
0.05f, // AVATAR_CHANGE
};
glm::vec4 edgeInnerColor[EVENT_CATEGORY_COUNT]{
{ 1.0f, 1.0f, 1.0f, 1.0f }, // ELEMENT_ENTER_LEAVE_DOMAIN
{ 1.0f, 1.0f, 1.0f, 1.0f }, // BUBBLE_ISECT_OWNER
{ 78.f / 255.f, 215.f / 255.f, 255.f / 255.f, 0.0f }, // ELEMENT_ENTER_LEAVE_DOMAIN
{ 31.f / 255.f, 198.f / 255.f, 166.f / 255.f, 1.0f }, // BUBBLE_ISECT_OWNER
{ 1.0f, 1.0f, 1.0f, 1.0f }, // BUBBLE_ISECT_TRESPASSER
{ 1.0f, 1.0f, 1.0f, 1.0f }, // USER_ENTER_LEAVE_DOMAIN
{ 1.0f, 1.0f, 1.0f, 1.0f }, // AVATAR_CHANGE
};
glm::vec4 edgeOuterColor[EVENT_CATEGORY_COUNT]{
{ 1.0f, 1.0f, 1.0f, 1.0f }, // ELEMENT_ENTER_LEAVE_DOMAIN
{ 1.0f, 1.0f, 1.0f, 1.0f }, // BUBBLE_ISECT_OWNER
{ 78.f / 255.f, 215.f / 255.f, 255.f / 255.f, 1.0f }, // ELEMENT_ENTER_LEAVE_DOMAIN
{ 31.f / 255.f, 198.f / 255.f, 166.f / 255.f, 1.0f }, // BUBBLE_ISECT_OWNER
{ 1.0f, 1.0f, 1.0f, 1.0f }, // BUBBLE_ISECT_TRESPASSER
{ 1.0f, 1.0f, 1.0f, 1.0f }, // USER_ENTER_LEAVE_DOMAIN
{ 1.0f, 1.0f, 1.0f, 1.0f }, // AVATAR_CHANGE
@ -245,8 +245,8 @@ struct FadeParameters
{
glm::vec4 _baseInvSizeAndLevel;
glm::vec4 _noiseInvSizeAndLevel;
glm::vec3 _innerEdgeColor;
glm::vec3 _outerEdgeColor;
glm::vec4 _innerEdgeColor;
glm::vec4 _outerEdgeColor;
glm::vec2 _edgeWidthInvWidth;
glm::int32 _invertBase;
glm::float32 _padding;