mirror of
https://github.com/TombEngine/TombEngine.git
synced 2025-05-08 03:28:03 +03:00
Fix fog calculation for additive surfaces
This commit is contained in:
parent
e8b5f7d1c6
commit
7fc4055a12
2 changed files with 13 additions and 18 deletions
|
@ -1133,16 +1133,16 @@ void TriggerWaterfallMist(const ItemInfo& item)
|
|||
|
||||
float finalFade = (fadeMin == fadeMax >= 1.0f) ? 1.0f : std::max(fadeMin, fadeMax);
|
||||
|
||||
auto startColor = item.Color / 2.0f * finalFade * float(UCHAR_MAX);
|
||||
auto endColor = item.Color / 4.0f * finalFade * float(UCHAR_MAX);
|
||||
auto startColor = item.Color / 4.0f * finalFade * float(UCHAR_MAX);
|
||||
auto endColor = item.Color / 8.0f * finalFade * float(UCHAR_MAX);
|
||||
|
||||
float step = size * 0.75f;
|
||||
float step = size * scale;
|
||||
int steps = int((width / 2) / step);
|
||||
int currentStep = 0;
|
||||
|
||||
while (true)
|
||||
{
|
||||
int offset = (step * currentStep) + (Random::GenerateInt(0, 64) - 32);
|
||||
int offset = (step * currentStep) + Random::GenerateInt(-32, 32);
|
||||
|
||||
if (offset > width)
|
||||
break;
|
||||
|
@ -1152,7 +1152,7 @@ void TriggerWaterfallMist(const ItemInfo& item)
|
|||
auto* spark = GetFreeParticle();
|
||||
spark->on = true;
|
||||
|
||||
char colorOffset = (Random::GenerateInt(0, 32)) - 16;
|
||||
char colorOffset = (Random::GenerateInt(-8, 8));
|
||||
spark->sR = std::clamp(int(startColor.x) + colorOffset, 0, UCHAR_MAX);
|
||||
spark->sG = std::clamp(int(startColor.y) + colorOffset, 0, UCHAR_MAX);
|
||||
spark->sB = std::clamp(int(startColor.z) + colorOffset, 0, UCHAR_MAX);
|
||||
|
@ -1162,22 +1162,22 @@ void TriggerWaterfallMist(const ItemInfo& item)
|
|||
|
||||
spark->colFadeSpeed = 1;
|
||||
spark->blendMode = BLEND_MODES::BLENDMODE_ADDITIVE;
|
||||
spark->life = spark->sLife = Random::GenerateInt(0, 16) + 16;
|
||||
spark->life = spark->sLife = Random::GenerateInt(8, 12);
|
||||
spark->fadeToBlack = spark->life - 6;
|
||||
|
||||
spark->x = offset * sign * sin + Random::GenerateInt(0, 16) + item.Pose.Position.x - 8;
|
||||
spark->x = offset * sign * sin + Random::GenerateInt(-8, 8) + item.Pose.Position.x;
|
||||
spark->y = Random::GenerateInt(0, 16) + item.Pose.Position.y - 8;
|
||||
spark->z = offset * sign * cos + Random::GenerateInt(0, 16) + item.Pose.Position.z - 8;
|
||||
spark->z = offset * sign * cos + Random::GenerateInt(-8, 8) + item.Pose.Position.z;
|
||||
|
||||
spark->xVel = 0;
|
||||
spark->yVel = Random::GenerateInt(0, 128) + 64;
|
||||
spark->yVel = Random::GenerateInt(-64, 64);
|
||||
spark->zVel = 0;
|
||||
|
||||
spark->friction = 0;
|
||||
spark->rotAng = GetRandomControl() & 0xFFF;
|
||||
spark->scalar = scale;
|
||||
spark->maxYvel = 0;
|
||||
spark->rotAdd = Random::GenerateInt(0, 32) - 16;
|
||||
spark->rotAdd = Random::GenerateInt(-16, 16);
|
||||
spark->gravity = -spark->yVel >> 2;
|
||||
spark->sSize = spark->size = Random::GenerateInt(0, 3) * scale + size;
|
||||
spark->dSize = 2 * spark->size;
|
||||
|
|
|
@ -46,25 +46,21 @@ float4 DoFog(float4 sourceColor, float4 fogColor, float value)
|
|||
if (FogMaxDistance == 0)
|
||||
return sourceColor;
|
||||
|
||||
float alphaMult = 1.0f;
|
||||
|
||||
switch (BlendMode)
|
||||
{
|
||||
case BLENDMODE_ADDITIVE:
|
||||
case BLENDMODE_SCREEN:
|
||||
case BLENDMODE_LIGHTEN:
|
||||
alphaMult = Luma(sourceColor.xyz);
|
||||
fogColor.w = 0.0f;
|
||||
fogColor.xyz *= Luma(sourceColor.xyz);
|
||||
break;
|
||||
|
||||
case BLENDMODE_SUBTRACTIVE:
|
||||
case BLENDMODE_EXCLUDE:
|
||||
alphaMult = 1.0f - Luma(sourceColor.xyz);
|
||||
fogColor.w = 0.0f;
|
||||
fogColor.xyz *= 1.0f - Luma(sourceColor.xyz);
|
||||
break;
|
||||
|
||||
case BLENDMODE_ALPHABLEND:
|
||||
alphaMult = sourceColor.w;
|
||||
fogColor.w = sourceColor.w;
|
||||
break;
|
||||
|
||||
default:
|
||||
|
@ -75,7 +71,6 @@ float4 DoFog(float4 sourceColor, float4 fogColor, float value)
|
|||
fogColor.w = sourceColor.w;
|
||||
|
||||
float4 result = lerp(sourceColor, fogColor, value);
|
||||
result.w *= alphaMult;
|
||||
return result;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue