Я перебуваю в процесі здійснення атмосферного розсіювання планет з космосу. Я використовував шейдери Шона О'Ніла від http://http.developer.nvidia.com/GPUGems2/gpugems2_chapter16.html в якості вихідної точки.
У мене майже однакова проблема, пов'язана з fCameraAngle, за винятком шейдера SkyFromSpace, на відміну від шейдера GroundFromSpace, як тут: http://www.gamedev.net/topic/621187-sean-oneils-atmospheric-scattering/
Я отримую дивні артефакти з небом із космічного шейдера, коли його не використовую fCameraAngle = 1
у внутрішньому циклі. У чому причина цих артефактів? Артефакти зникають, коли fCameraAngle обмежений до 1. Мені також здається відсутність відтінку, який присутній у пісочниці O'Neil ( http://sponeil.net/downloads.htm )
Положення камери X = 0, Y = 0, Z = 500. GroundFromSpace зліва, SkyFromSpace праворуч.
Положення камери X = 500, Y = 500, Z = 500. GroundFromSpace зліва, SkyFromSpace праворуч.
Я виявив, що кут камери, здається, обробляється дуже по-різному в залежності від джерела:
В оригінальних шейдерах кут камери в SkyFromSpaceShader обчислюється як:
float fCameraAngle = dot(v3Ray, v3SamplePoint) / fHeight;
Тоді як в землі від космічного шейдера кут камери обчислюється як:
float fCameraAngle = dot(-v3Ray, v3Pos) / length(v3Pos);
Однак різні джерела в Інтернеті роздумують з нехтуванням променями. Чому це?
Ось проект C # Windows.Forms, який демонструє проблему і який я використовував для створення зображень: https://github.com/ollipekka/AtmosphericScatteringTest/
Оновлення: У проекті ScatterCPU, знайденому на сайті O'Neil, я з’ясував, що променевий знімок камери відміняється, коли камера знаходиться над точкою затінення, так що розсіювання обчислюється від точки до камери.
Зміна напрямку променя дійсно видаляє артефакти, але створює інші проблеми, як показано тут:
Крім того, у проекті ScatterCPU O'Neil захищає від ситуацій, коли оптична глибина світла менше нуля:
float fLightDepth = Scale(fLightAngle, fScaleDepth);
if (fLightDepth < float.Epsilon)
{
continue;
}
Як зазначається в коментарях, поряд із цими новими артефактами все ще залишається питання, що не так із зображеннями, де камера розміщена у 500, 500, 500? Відчувається, що ореол зосереджений на абсолютно неправильній частині планети. Можна було б очікувати, що світло буде ближче до того місця, де сонце повинно потрапити на планету, а не там, де воно змінюється з дня на ніч.
Проект github було оновлено, щоб відобразити зміни цього оновлення.