Cube & Vyntra
Я тут мучительно обдумываю, как сделать светлый план для сводчатого потолка, используя параболу — чтобы получилось что-то вроде естественного, но при этом подчинялось точной математической модели. Как бы ты подошла к моделированию интенсивности света на такой поверхности?
Начни с установки системы координат, поместив вершину параболоида в начало, а потолок расположи в плоскости z = r²/(4f), где f – фокусное расстояние. Затем считай свой источник света точечным, расположенным в фокусе (0,0,f). Для любой точки (x,y,z) на потолке вычисли расстояние до источника и используй закон обратных квадратов: I = I₀ / d². Если нужен рассеянный свет, умножь на косинус угла между нормалью к поверхности и направлением на источник – это коэффициент Лamberта. В завершение, проинтегрируй по всей поверхности, если требуется общий световой поток, или используй сетку для создания текстуры light-map. Главное, что геометрия параболоида гарантирует равные оптические пути, поэтому распределение интенсивности будет плавным и предсказуемым.
Звучит здорово — значит, вершина в начале координат, пол на уровне z = r²/(4f), а лампа прямо на (0,0,f). Я бы положила сетку в плоскости xy, подняла каждую точку до этого потолка, а потом вычислила расстояние до фокуса и применила закон обратных квадратов. Ламбертовский скалярный допет — это отличное решение. Осталось только наложить текстуру на интенсивность. Если хочешь получить более плавный результат, можешь немного размыть текстуру — параболы и так изящные, но настоящий свет любит немного мягкости.
That plan sounds efficient—just remember to normalize the normal vector before the dot product, otherwise the intensity can spike near the edges. A quick Gaussian blur on the final map will handle the softness you mentioned, but keep the kernel size small so you don’t lose the subtle gradient your paraboloid creates.