Offset raycast by specific amount

I have been really struggling with trying to get random deviation to work for hitscan shotguns in my FPS game. The script at the bottom of this more or less just creates a raycast from the camera’s center, and shoots 15 raycasts towards the same place.

_

Obviously, for shotguns, every pellet going to the same place doesn’t work. I would like to know if there is a way to properly cause the raycasts to deviate from the center by a set amount, while accounting for the rotation of the player.

I have tried countless things, some of them resulting in (mostly) working functions, though often times, this happens:


As seen here, the spread on the far right is fine and dandy, but when the player turns leftwards, the spread seems to compress into a less vertical shape. I have no idea why that is and I have tried plenty of things to deal with that.
_
Also to note, while I’m sure I can make it work if you don’t account for this, the shotgun is intended to have FIXED spread, so the deviation is not random, but, either way, I still can’t get the raycasts to rotate directions without compressing when turning left or right. Facing the same wall diagonally also seems to fix the spread so that it is more like the spread shown on the far right, but I do not understand why the spread is compressing at all?

    void fireHuntingShotgun()
    {
        RaycastHit hShotgunHit = new RaycastHit();
        Ray huntingRay = mainCam.ViewportPointToRay(new Vector3(0.5f, 0.5f, 0f));
        for (int i = 0; i < 15; i++)
        {
            Vector3 spreadAngle = mainCam.transform.forward; 
            //how to make spreadAngle rotate the raycast without that compression effect?  
            if (Physics.Raycast(huntingRay, out hShotgunHit, 100f))
            {
                print(hShotgunHit.distance);
            }
        }
    }

float r = 0.1f;
huntingRay = mainCam.viewportPointToRay(new Vector2(( 0.5f + r * Mathf.Cos(24i), 0.5f r * Mathf.Sin (24*i));