Да и я в RUST'е делал, с изменением размера динамично исходя из положеня, ведь в зените будет маленькое..
Вот вырезки из шейдера, за стиль приношу извенения, раньше опыта и дисциплины не хватало:
VecSky.xyz = normalize(PosCam-IN.pWorld);
DotSun = pow(max(dot(VecSun,VecSky.xyz),0.0f),SizeSun);
Color.rgb += DotSun;
VecSky.xyz - это тупо вектор от центра камеры к обрабатываемому пикселю.
VecSun - это вектор (переменная), которую ты посылаешь с кода. Вектор от камеры, где солнце находится, например { 0,1,0 } - это вертикально сверху.
SizeSun нада большим числом, попробуй сперва 10f например, потом поэксперементируй, я не помню уже.
Собственно и всё. На деле всё ОЧЕНЬ просто, и можно без проблем регулировать и положение и размер, и цвет да что угодно. Не мудри с нормалями - они не стабильны, используй как предложил вектор между камерой и позицией пикселя.
Глянь
RUST, я когда-то делал небо там, правда сейчас бы сделал лучше, но там неплохо закат был имхо.