Compare commits
No commits in common. "42daa8a048d2ef0b6dcc2262f8fb11f977faf8e2" and "1b13d92b9949c67adb886d54e11b0144eac3985c" have entirely different histories.
42daa8a048
...
1b13d92b99
|
@ -37,9 +37,9 @@ public class LmParams : IChunk
|
|||
public DepthMode ShadowDepth { get; set; }
|
||||
public bool LightmappedWater { get; set; }
|
||||
public int LightmapScale { get; set; }
|
||||
public uint AnimLightCutoff { get; set; }
|
||||
|
||||
private int _dataSize;
|
||||
private uint _unknown;
|
||||
|
||||
public void ReadData(BinaryReader reader, DbFile.TableOfContents.Entry entry)
|
||||
{
|
||||
|
@ -53,7 +53,7 @@ public class LmParams : IChunk
|
|||
LightmappedWater = reader.ReadBoolean();
|
||||
reader.ReadBytes(3);
|
||||
LightmapScale = reader.ReadInt32();
|
||||
AnimLightCutoff = reader.ReadUInt32();
|
||||
_unknown = reader.ReadUInt32();
|
||||
}
|
||||
|
||||
public void WriteData(BinaryWriter writer)
|
||||
|
@ -68,6 +68,6 @@ public class LmParams : IChunk
|
|||
writer.Write(LightmappedWater);
|
||||
writer.Write(new byte[3]);
|
||||
writer.Write(LightmapScale);
|
||||
writer.Write(AnimLightCutoff);
|
||||
writer.Write(_unknown);
|
||||
}
|
||||
}
|
|
@ -51,11 +51,15 @@ public class Light
|
|||
Matrix4x4 rotate,
|
||||
Matrix4x4 scale)
|
||||
{
|
||||
Position = Vector3.Transform(Position, rotate) + Vector3.Transform(vhotLightPos, scale * rotate * translate);
|
||||
SpotlightDir = Vector3.Normalize(Vector3.Transform(vhotLightDir, scale * rotate));
|
||||
var transform = scale * rotate * translate;
|
||||
vhotLightPos = Vector3.Transform(vhotLightPos, transform);
|
||||
vhotLightDir = Vector3.Transform(vhotLightDir, transform);
|
||||
|
||||
Position = Vector3.Transform(Position, rotate) + vhotLightPos;
|
||||
SpotlightDir = Vector3.Normalize(vhotLightDir - vhotLightPos);
|
||||
}
|
||||
|
||||
public float StrengthAtPoint(Vector3 point, Plane plane, uint lightCutoff)
|
||||
public float StrengthAtPoint(Vector3 point, Plane plane)
|
||||
{
|
||||
// Calculate light strength at a given point. As far as I can tell
|
||||
// this is exact to Dark (I'm a genius??). It's just an inverse distance
|
||||
|
@ -72,13 +76,6 @@ public class Light
|
|||
strength *= (Radius - len) / (Radius - InnerRadius);
|
||||
}
|
||||
|
||||
// Anim lights have a (configurable) minimum light cutoff. This is checked before
|
||||
// spotlight multipliers are applied so we don't cutoff the spot radius falloff.
|
||||
if (Anim && strength * Brightness < lightCutoff)
|
||||
{
|
||||
return 0f;
|
||||
}
|
||||
|
||||
// This is basically the same as how inner radius works. It just applies
|
||||
// a linear falloff to 0 between the inner angle and outer angle.
|
||||
if (Spotlight)
|
||||
|
|
|
@ -25,7 +25,6 @@ public class LightMapper
|
|||
public float MultiSamplingCenterWeight;
|
||||
public bool LightmappedWater;
|
||||
public SunSettings Sunlight;
|
||||
public uint AnimLightCutoff;
|
||||
}
|
||||
|
||||
private ResourcePathManager.CampaignResources _campaign;
|
||||
|
@ -86,7 +85,6 @@ public class LightMapper
|
|||
MultiSamplingCenterWeight = lmParams.CenterWeight,
|
||||
LightmappedWater = lmParams.LightmappedWater,
|
||||
Sunlight = sunlightSettings,
|
||||
AnimLightCutoff = lmParams.AnimLightCutoff,
|
||||
};
|
||||
|
||||
Timing.TimeStage("Gather Lights", BuildLightList);
|
||||
|
@ -260,7 +258,7 @@ public class LightMapper
|
|||
}
|
||||
if (model.TryGetVhot(ModelFile.VhotId.LightDirection, out vhot))
|
||||
{
|
||||
vhotLightDir = (vhot.Position - model.Header.Center) - vhotLightPos;
|
||||
vhotLightDir = vhot.Position - model.Header.Center;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -274,7 +272,7 @@ public class LightMapper
|
|||
{
|
||||
Position = propAnimLight.Offset,
|
||||
Color = Utils.HsbToRgb(propLightColor.Hue, propLightColor.Saturation, propAnimLight.MaxBrightness),
|
||||
Brightness = propAnimLight.MaxBrightness,
|
||||
Brightness = propAnimLight.Brightness,
|
||||
InnerRadius = propAnimLight.InnerRadius,
|
||||
Radius = propAnimLight.Radius,
|
||||
R2 = propAnimLight.Radius * propAnimLight.Radius,
|
||||
|
@ -319,7 +317,6 @@ public class LightMapper
|
|||
{
|
||||
Position = light.Position,
|
||||
Color = Utils.HsbToRgb(propLightColor.Hue, propLightColor.Saturation, propSpotAmb.SpotBrightness),
|
||||
Brightness = propSpotAmb.SpotBrightness,
|
||||
InnerRadius = light.InnerRadius,
|
||||
Radius = light.Radius,
|
||||
R2 = light.R2,
|
||||
|
@ -597,7 +594,7 @@ public class LightMapper
|
|||
|
||||
if (TraceRay(light.Position, point))
|
||||
{
|
||||
strength += targetWeights[idx] * light.StrengthAtPoint(point, plane, settings.AnimLightCutoff);
|
||||
strength += targetWeights[idx] * light.StrengthAtPoint(point, plane);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue