Задание 4 по машграфу 2013 (1124442), страница 2
Текст из файла (страница 2)
Т.е. трассировка лучей рекурсивный алгоритм, а трассировка путей нет (хотя и может быть реализована черезрекурсию).Для моделирования случайного луча с косинусоидельным распределением может бытьполезна следующая функция, позволяющая по 2 случайным числам с равномернымраспределением (r1 и r2) сгенерировать вектор с косинусоидальным (степень косинусазадается в аргументе power) распределением вокруг направления direction. В аргументhit_norm необходимо передавать нормаль в точке поверхности, на которой генерируетсяотраженный луч. Это делается для предотвращения ситуации, когда отраженный лучуходит под поверхность.float3 MapSampleToCosineDistribution(float r1, float r2, float3 direction, float3 hit_norm, floatpower){float e = power;float sin_phi, cos_phi;sincosf(2*r1*3.141592654f, &sin_phi, &cos_phi);float cos_theta = pow(1.0f-r2,1.0f/(e+1.0f));float sin_theta = sqrtf(1.0f-cos_theta*cos_theta);float3 deviation;deviation.x = sin_theta*cos_phi;deviation.y = sin_theta*sin_phi;deviation.z = cos_theta;float3 ny = direction;float3 nx = normalize(cross(ny, make_float3(1.04,2.93f,-0.6234f)));float3 nz = normalize(cross(nx, ny));swap(ny,nz);float3 res = nx*deviation.x + ny*deviation.y + nz*deviation.z;float invSign = dot(direction, hit_norm) > 0.0f ? 1.0f : -1.0f;if(invSign*dot(res, hit_norm) < 0.0f) // reflected ray is below surfaceres = -nx*deviation.x + ny*deviation.y - nz*deviation.z;return res;}Обратите внимание, что каустики в трассировке путей получаются автоматически, еслиисточники света имеют ненулевой размер и используется неявная стратегиясэмплирования.Фотонные картыФотонная карта предназначена для того, чтобы запоминать информацию о падающих наповерхность фотонах. В простейшем случае с каждой поверхностью необходимо связатьлинейный массив, в который должны записываться координаты точки (двумерные, впространстве поверхности) и цвет попавшего в поверхность фотона. Этот массив иназывается фотонной картой. Вы можете сделать только один такой массив дляплоскости, на которой находится кристалл. Для расчета освещения при помощи методафотонных карт на произвольных объектах, как правило, используются различныеускоряющие структуры (например, kdдерево).Текстурирование объектов сценыОбратите внимание на необходимость реализации как минимум билинейнойинтерполяции при выборке из текстуры (за трилинейную или анизотропную фильтрациюначисляются баллы в соответствии с графой “текстурирование”). При отсутствиифильтрации совсем, баллы за текстурирование могут быть снижены на 0.5.Моделирование глубины резкостиМоделирование эффекта глубины резкости можно сделать, смещая случайным образомпозицию луча (по x и y) в пределах некоторого диска, перпендикулярного направлениювзгляда. Направление луча должно меняться так, чтобы получать на изображенииобласть резкости, а не целиком размытую картинку.Реализация эффекта поглощенияПоглощение света в сплошной однородной среде описывается закономБугераЛамбертаБера (экспоненциальное затухание). Для реализации эффектапоглощения в кристалле нужно для каждого луча учитывать длину участков пути,пройденных ими в сплошной среде (в данном случае в кристалле), и домножатьинтенсивность лучей, прошедших через кристалл, на рассчитанный коэффициентпропускания.АнтиалиасингДля борьбы с алиасингом предлагается пускать бОльшее количество лучей черезразличные точки пикселя (multisampling).Реализация цветного кристалла и цветных теней●Если реализовано поглощение в кристалле, следует задать разные коэффициентыпоглощения по R, G, B каналам, что определит цвет кристалла.● Если поглощения нет, нужно при пересечении с поверхностью кристалладомножать цвет луча, на цвет кристалла (простейшее моделирование поглощения).Например, если кристалл голубой, то компоненты r и g луча при прохождении черезкристалл обнуляются.● С теневыми лучами происходит то же самое. Домножая цвет источника света(например, белый) на цвет кристалла, получаем цвет тени..















