The normal force is typically for stationary objects just like sitting on a table or sitting in an elevator and their response in relation to external forces and gravity (like the formula you showed said)
For calculating max force in collisions like you said you’d probably want to venture into the field of momentum
Formulas I will use and reference back to using the number assignments:

(1): the formula for the momentum of an object
p=momentum
m=mass
v=velocity
arrow hat means its a vector quantity (or it has direction)
(2): the formula for impulse, or change in momentum
Δp = impulse or change in momentum
F = force
Δt = change in time
Δ means “the change in ____”
(3): the formula for the coefficient of restitution, or elasticity, related to the energy lost in a collision
c = coefficient of restitution
v1f = the final velocity of object 1
v2f = the final velocity of object 2
v1i = the initial velocity of object 1
v2i = the initial velocity of object 2
| | means the absolute value of ___, or just making it positive (eg |-5| = 5, |-10| = 10, etc…)
(4): formula for conservation of momentum
pinitial = the initial net momentum (sum of all of the momentums of objects 1 and 2 before the collision)
pfinal = the final net momentum (sum of all of the momentums of objects 1 and 2 after the collision)
Lets start with the harder collision of two moving objects
According to the conservation of momentum, formula (4), the total momentum before the collision is equal to the total momentum after the collision
Using formula (1), we can fill this formula out in the context of our problem:
m
1, v
1i, m
2, and v
2i are all known values because roblox gives them to you
We’re trying to solve for v1f and v2f because, using those values, we can calculate its final momentum, and therefore its change in momentum, Δp
We can then use Δp and Δt to calculate the force, F applied on each object
The problem we are faced with is that we need to solve for two variables with one equation, which isnt possible without a second equation
So we need another equation
Lets begin working on one other equation with velocity which we could use, equation (3)
I will be using the average of the two objects elasticities according to each objects elasticityweight (these are two other values given by the roblox engine, which can be found using part.CustomPhysicalProperties.Elasticity and part.CustomPhysicalProperties.ElasticityWeight if customphysicalproperties is enabled in studio which is a really stupid limitation but whatever. you can just determine your own elasticity values if you really want)
Some formulas roblox could perhaps use for this are:

(6): formula for the elastic weight combined, the proportion of e1 that will be used to determine the combined elasticity/coefficient of restitution
I will use (1-ewc) to determine the proportion of e2 that will be used to determine the combined elasticity because they both add to 1 (ewc1+ewc2=1; ewc2=(1 - ewc1))
ewc=corrected elastic weight of object 1
e1w=uncorrected elastic weight of object 1 (given by roblox)
e2w=uncorrected elastic weight of object 2 (given by roblox)
(7): formula for the average, combined elasticity using both of the elasticities of object 1 and 2, and averaging them according to the weights, ewc and (1 - ewc)
e1=elasticity of object 1 (given by roblox)
e2=elasticity of object 2 (given by roblox)
Going back to the beginning, lets use equation (3) to bring this equation into the main problem
Remember how we’re trying to solve for v1f and v2f, and how we need two equations to do that
Now we have two equations, (3) and (5)
Remember, we’re trying to solve for v1f and v2f, so lets begin
We will start by solving for v1f in both equations, (3) and (5), starting with (3):

Continuing onto (5):
Set (9) and (11) equal to eachother and solve for v2f:
I believe that the ± symbol in equation (16) (and the previous ± symbols of course) can be turned to a + symbol, because in the case of a collision with any elasticity the two objects would not continue in the same direction or phase through eachother, and in the case that c = 0, or theres no elasticity or bounciness, the ± term is multiplied by 0 and no longer affects the behavior
For simplicity sake, I will simply change it in equation (16) and leave it in the rest
Now, knowing v2f we can just plug it into one of our equations such as (11) and we will get an answer for v1f
We can simplify this a lot when the second object isnt moving / cant move (is anchored)
Going back to equation (9), we can make a couple assumptions
v2f = 0
v2i = 0
Therefore:

In this case the ± symbol can be turned to a - symbol, because if its + it would go straight through the stationary object which isnt a very realistic solution
So, with that in mind, lets continue on with this post and wrap it up sooner rather than later
The next part of this problem is converting our vf values to forces using equation (2)
The hard part of this relatively short equation is the weird Δt term
So basically, I think the best way to go about the Δt term would be to determine it yourself depending on the material in terms of an “impact absorption rate” in terms of Δt/stud/second, so steel would have a Δt/s/s of 0.01, and fabric would have a Δt/s/s of 0.5
This “Δt/s/s” value is the speed at which the material can decelerate an object
A metallic object slows down an object very quickly and abruptly, causing more force and more damage, while a fabric pillow slows down an object very slowly and gently, causing less force and less damage
(I edited the t/s/s value a tiny bit in order for it to work properly downwards, the new t/s/s value should be a value from 0 to 1 and represents the amount of time lost from a starting value of 1 second, at 1 stud/second)

(up and down in that graph is Δt, or the time it takes for the collision to happen. side to side in the graph is the speed, stud/second)
So I would take the Δt/s/s value of each object and average them
So for example, if metal hit metal I would add 0.03 Δt/s/s and 0.01 Δt/s/s together to get an overall deceleration of 0.02 Δt/s/s
I would then get the difference between the two velocities and power that to the average of the two Δt/s/s values
The formula for this would look something like:
(in the case of a collision with a stationary object, v2i is 0, so just plug in 0 for v2i)
(also its hard to tell but the |v
1i-v
2i| is in an exponent)
t1ss and t2ss are the Δt/s/s values of each object, 1 and 2 then the velocities are of course just the velocities
Now, to calculate Δp, you simply need to get the difference from initial to final velocities for both of the objects and plug them into equation (1), this is shown below:

You would use equation (20) once each for object 1 and object 2
So now, we are able to calculate the force by just rearranging equation (2) a little bit:

So, to sum it up:
For collision with a stationary object:
Use equation (7) to calculate the coefficient of restitution, plug into equation (17) along with the initial velocity, then use the final velocity in equation (19) along with the initial velocity and mass
You then have to calculate Δt in equation (18) using the predetermined Δt/s/s values for each material class along with the velocity of the moving object and 0 for the nonmoving object
Then use Δp and Δt which you just calculated in equations (18) and (19) in equation (20) to solve for the force
You can then plug this into the stress equation, (21)

For collision with two moving objects:
Use equation (7) to calculate the coefficient of restitution, plug into equation (16) along with object 1 and 2’s masses and velocities
Then use v2f to calculate v1f into equation (9) or (11) (I would prefer equation (9) because its far shorter but also has the added complexity of the ± symbol, just remember that the ± symbol can be simplified to a - in this specific equation)
You then plug this data into equations (18), (19) and then (20) using the methods described just above (keep in mind in this case youll actually use the same formula, you will NOT set v2i or vf to 0 in any of the cases
As for the area component of the stress equation, Im really not sure what you would do
I would personally, if I wanted a lot of realism, calculate either an actual area based on the shapes, angles and positions of the two objects, or use some filler value based on some random calculation, or just simply ignore that part of the formula cause force is proportional to stress and for roblox collisions it probably doesnt matter all that much
I would be interested to hear what you have to say about the area though, in terms of the actual application of this system so perhaps you could reply back on this topic
Continuing on to a more complete piece of code, here is how I would likely implement all of this math, applying the explanations above
function elasticity_weight_combined(e1weight,e2weight)
return e1weight/(e1weight+e2weight) --formula (6)
end
function elasticity(e1,e2,e1weight,e2weight)
local ewc = elasticity_weight_combined(e1weight,e2weight)
return e1 * ewc + e2 * (1 - ewc) --formula (7)
end
function delta_t(t1ss,t2ss,v1i,v2i)
return ((t1ss + t2ss)/2)^math.abs(v1i - v2i) --formula (18)
end
function delta_p(m,vi,vf)
return m * (vf - vi) --formula (19)
end
function stationary(vi, m, e1, e2, e1weight, e2weight, t1ss, t2ss)
local c = elasticity(e1,e2,e1weight,e2weight)
local vf = -(c*vi) --formula (17)
local delta_p = delta_p(m,vi,vf)
local delta_t = delta_t(t1ss,t2ss,vi,0)
local F = delta_p/delta_t --formula (20)
--do stress stuff here
--you likely want to math.abs() the force, because the direction isnt really important here
end
function nonstationary(v1i, v2i, m1, m2, e1, e2, e1weight, e2weight, t1ss, t2ss)
local c = elasticity(e1, e2, e1weight, e2weight)
local a = m1 * v1i + m2 * v2i + m1 * c * v1i - m1 * c * v2i --top half of formula (16)
local b = m1 + m2 --bottom half of formula (16)
local v2f = a/b --combining of two halves
local v1f = v2f - c * v1i + c * v2i --formula (9)
local delta_p_1 = delta_p(m1, v1i, v1f)
local delta_p_2 = delta_p(m2, v2i, v2f)
local delta_t = delta_t(t1ss,t2ss,v1i,v2i)
local F_1 = delta_p_1/delta_t --formula (20)
local F_2 = delta_p_2/delta_t --formula (20)
--do stress stuff here
--you likely want to math.abs() the two forces, because the direction isnt really important here
end
--further considerations
--[[
* Producing of t1ss and t2ss values
* Producing of e1, e2, e1weight and e2weight
* Length of code & performance
* Multi-object interactions
* Detecting collisions, getting velocity and mass
-- Producing of t1ss and t2ss values --
KEEP IN MIND THE NEW TSS VALUES NEED TO BE BETWEEN 0 AND 1
As I recommended earlier, I would make several values based on the material, or just one big general value if that doesnt matter that much
You could do something like:
local tss_values = {
"Stone" = 0.01,
"Metal" = 0.02,
"Wood" = 0.1,
"Fabric" = 0.5...
}
---------------------------------------------------
-- Producing of e1, e2, e1weight and e2weight --
Either use a predetermined value between 0 and 1 for all of the values (robloxs default for like plastic for example is e = 0.5, eweight = 1), or by ticking customphysicalproperties IN STUDIO (This is a HUGE limitation because you cant use robloxs default values unless you tick the customphysicalproperties in edit mode of studio. Idk why they made it like that in their new update but who cares, we have to deal with it. I would personally just make my own elasticity and elasticity weight values for each material just like the Δt/s/s values above)
-----------------------------------------------------------------
-- Length of code & performance --
This is way longer than I hoped it would be and I can see why you might be thinking (because you commented it earlier), how could this be efficient?
I mean Im no expert but, because these are all very elementary calculations and the cpu can do them in like 0.0001 nanoseconds I wouldnt personally be worried about it. I would be more worried about the implementation of this system (for example if you used .touched to detect collisions on tons of objects)
-----------------------------------------------
-- Multi-object interactions --
I would personally not care that much about multi object physics and mass, and just think about each object individually, BUT if you have a big ship made up of like 500 parts, you either could or could not, for the mass of object 1, count all of the masses of the entire ship together
I mean to be honest thats pretty important, because if a tiny little triangle piece on a big ship hits something it will take on the weight of the whole ship like its nothing and isnt very realistic
But this is absolutely something you might have to consider when thinking about such things
Im just mentioning this here so you can think about it from your perspective, because I really dont know much about what youre trying to do
-------------------------------------
-- Detecting collisions, getting velocity and mass --
Like I was talking about earlier, you could use like .touched to detect collisions however this might get real laggy real quick
Im not sure the scale of your project and that might be a good thing to reply about, because if there is a massive scale in your project a new solution might have to be thought through
Also for getting velocity and mass, in the case that you're not familiar with such things here is the process
(its much easier than elasticity and stuff)
1) velocity
I have built this program around 1D collisions, and therefore we need to think in 1D
We need to get the relative velocity between the two which can be done somewhat simply
To get the raw 3D velocity of both objects, use part.AssemblyLinearVelocity
To convert it to a 1D thing, I would just do
v1i = v1_linearVelocity3D:Dot(part2.Position-part1.Position)
v2i = v2_linearVelocity3D:Dot(part2.Position-part1.Position)
v1i and v2i are the things you want
2) mass
This is much simpler and just involves a basic function
part:GetMass()
I just thought Id throw this here in the case that, again, you arent familiar with how to get the mass of a base part
-------------------------------------------------------------------
--]]
I most certainly forgot many things so please feel free to ask questions and respond to the multiple considerations, and Im always happy to clarify my bad work so feel free
Sorry it took forever but as you can see its a tiny bit long
tl;dr:
phisyks