пятница, 30 октября 2015 г.

поиск ника в соцсетях

http://pepelac.xyz/psearch.php
и обо мне http://pepelac.xyz/psearch.php?nick=tigrazone&pages=3&sleeptime=1&psycho=on&icq=on&email=on

simple adaptive antialias pass

  1. просмотреть все соседние пикселы(если 0 по х, сравнить с пикселом сверху)
  2. сравнение пикселов
    • по каждой из x, y, z получить коэффициент отличия = min(x1,x2)/max(x1,x2)
    • если этот коэффициент > константы макс. отличия(0.3 например), то установить флаг необходимости антиалиазинга и прервать цикл по x, y, z
    • расчет точек углов, в которых затем усредняется делением на 4 получившиеся цвета в субпикселах, Java:
      float xScale = scene.viewWidth  / width;
      float yScale = scene.viewHeight / height;
      float left  = (x - 0.25f*(1.1f-rndrnd.getFloat()*0.3f)) * xScale; //(0.8 .. 1.1)/4 = 0.2 .. 0.275
      float right = (x + 0.25f*(1.1f-rndrnd.getFloat()*0.3f)) * xScale;
      float above = (y - 0.25f*(1.1f-rndrnd.getFloat()*0.3f)) * yScale;
      float below = (y + 0.25f*(1.1f-rndrnd.getFloat()*0.3f)) * yScale;

среда, 28 октября 2015 г.

bidirectional path tracing и ускорения

на основе https://github.com/githole/edubpt можно потестировать некоторые ускорения для bidirectional path tracing:

вдохновляют

http://peterkutz.com
http://blog.yiningkarlli.com/

о distributed ray tracing и процедурных текстурах из старой книги




в этой же книге - о сплайнах, текстурировании и
процедурных текстурах!

посмотреть pdf(5mb)

что сделано на сейчас

  • взял чтение obj из akari2 и ускорил его в 2 раза. разбивка на фразы - strtok, затем токенизация в int с помощью adler32 и бинарный поиск. парсер obj легко расширяется новыми лексемами
  • vcm. нашел, как, регулируя количество ligthing paths, сделать рендер более bpt или sppm-based. эта настройка также делает рендеры более или менее быстрыми. меняется от этой настройки и количество шума. нужно еще поработать с нею, т.к. картинки получаются временами более тёмными. что-то не то с делением на количество реально обработанных ligthing paths
  • читаю исходники своего java renderer и беру оттуда работу с adaptive antialias
    1/4
    1/2
    с adaptive antialias

to do

говорят, списки очень мотивируют на более быстрое воплощение мечты.
потому как получается визуально.
буду зачеркивать готовые пункты и писать дату и коментарии.

итак:
  • 1/4, 1/2 превью, simple adaptive antialias pass
  • obj чтение
    1. сделать фиксированный буфер (64kb)
    2. чтение формата сделать более полным
  • qbvh для всей сцены
  • чтение сцены
  • текстуры и материалы
    1. текстуры
    2. процедурные материалы
  • opengl работа с мышью
  • в simplemlt оптимизировать Color direct_radiance_sample() ибо очень ужасно выглядит
    моя версия simplemlt https://github.com/tigrazone/simple-mlt/blob/master/simplemlt.cpp

четверг, 2 июля 2015 г.

vcm. небольшое ускорение

выдалась свободная минутка и я окинул взором свою версию реализации VCM.
нашёл несколько мест, где можно упростить алгебраически формулы, запоминать часто встречающиеся расчеты.

вышло 5% прироста, что я считаю неплохим результатом для быстрых и простых оптимизаций.

старый вариант

новый вариант
вычислял ускорение исходя из количества просчитаных лучей за одинаковое время 186 секунд.
в первом варианте 7,89+7,86=15,75
во втором варианте 8,32+8,29=16,61

15,75/16,61=0,9482239614689946. если эту цифру отнять от 1, то выйдет 0,05177, то есть чуть больше 5%.





воскресенье, 19 апреля 2015 г.

mt_rand vs xorshift









слева - mt_rand, справа - xorshift

mt_rand не такой быстрый, как xorshift - это 2 алгоритма для генерации псевдослучайных чисел.

переписал на Pascal реализацию xorshift с http://stackoverflow.com/questions/13213395/adjusting-xorshift-generator-to-return-a-number-within-a-maximum/13533895

понедельник, 30 марта 2015 г.

как я пишу свой рендер

Источниками воплощенных идей для меня были:
  • Dart Renderer от David Cline, создателя алгоритма ERPT(Energy redistribution path tracing). В исходниках этого рендера я нашёл воплощение Metropolis Light Transport и, экспериментируя со случайными последовательностями и находя в последовательностях закономерности, вывел возможность настраивать Metropolis Light Transport для скорости и точности. Написан на с++.
  • Progressive Path Tracer от Bacterius. Реализация алгоритма Progressive Path Tracer на Delphi. Исходный вариант программы я переделал, ускорив расчеты сфер, треугольников, плоскостей, изменил интерфейс, добавил тоновую коррекцию. Также добавил реализацию importance sampling. 
  • SmallVCM от Tomáš Davidovič. Реализация замечательного алгоритма Vertex connection and merging, который уже реализован в рендерах Corona и Vray. Я добавил вывод изображения в окне с помощью библиотеки fltk, оптимизировал алгоритмы пересечения луча и сфер, треугольников, сделал более частое обновление и более быстрое отображение изображения. Планирую ускорить с помощью реализации ускорителя пересечения луча с обьектами сцены Bounding interval hierarchy из следующего в списке рендера. Написан на с++.
  • SunFlow от Christopher Kulla. Хороший рендер с реализацией photon mapping, path tracing, множеством обьектов и материалов, ускорителями пересечения луча со сценой kd-tree и bounding interval hierarchy. Написан на java.
  • Реализация Stochastic progressive photon mapping для GPU с поддержкой glossy-материалов, спектральным рендерингом и Motion Blur. Написан на с++. http://www.bee-www.com/gpusppm2.zip
  • и остальные списком: Arauna, WinOsi, Pane, R.I.S.E., Mitsuba

На скриншоте - результат моей реализации SmallVCM после 1 часа 55 минуты. На фоне открыто окно браузера с сайтом www.bee-www.com с результатом Stochastic progressive photon mapping для GPU

Не сложно догадаться, что мой рендер будет включать в себя и GPU-версию и Vertex Connection and Merging с Metropolis Light Transport на этапе генерации лучей из источников света. И всё это с оптимизациями и удобствами!

воскресенье, 9 ноября 2014 г.

суббота, 7 сентября 2013 г.

Vertex Connection and Merging


алгоритм - оригинальный Vertex Connection and Merging, SmallVCM
время просчёта - 2 часа 13 минут

скачать и попробовать самостоятельно можно отсюда.
генерирует bmp и hdr, который в 32 бит на пикс можно глядеть в фотошопе с профилем по умолч. нагружает все ядра на всю.
bmp любой смотрелкой файлов смотри. файлы обновляются динамически
110 кб ;)

пятница, 30 августа 2013 г.

немного новостей и обновление

  • заменил стандартный генератор случайных чисел rand() на подвид mtrand() [1]. это улучшило качество сходимости картинки и картинка выглядит более гладкой. разброс лучей стал более однородным
  • в статистику добавил количество лучей в секунду
  • реализовал гибридный метод просчёта, с помощью которого можно просчитывать картинку с помощью смеси алгоритма Дэвида Клейна и моей модификации, дающей более разбросанные лучи, в этом гибридном методе многие параметры можно настраивать

  • добавил возможность динамически менять тактику принятия решения abso алгоритм или old
  • выбросил ненужные части программы, размер исполняемого файла уменьшился на 50 кб
  • начал работу по переходу на kd-tree, которое ускорит работу примерно в 2 раза
  • необходим переход на многопоточную модель вычислений, что даст более сильную загрузку процессоров (сейчас доходит до 50%)
Вот так выглядит новый просчет на моём athlon 64 x2 dual core 4200+ 2.2ghz


время просчёта - 15 минут

Ссылки:

mt19937.c Copyright (C) 1997 Makoto Matsumoto and Takuji Nishimura.
для сравнения - картинка, просчитаная в течении 15 минут на том же компьютере, но без изменений сегодняшних



скачать и попробовать можно отсюда. после распаковки архива в отдельную папку запустите d2.bat и в распакованной папке любым просмотрщиком картинок смотрите, как меняется сгенерированная картинка

четверг, 18 апреля 2013 г.

новая стратегия для моего экспериментального рендерера - new strategy for my new renderer

Я придумал новую стратегию разброса лучей. Это дало более массовое покрытие сцены лучами и увеличение детализации с каждым шагом.
В результате - картинка просчитывается быстро и качественно.

Вот такое посчитал мой старенький ноут с Celeron 540 на частоте 1.8GHz за 6 часов.

Процессор всё это время здорово был загружен около 100%. При этом фактически времени потребовалось для просчёта больше, так как в это всё время я работал на моём многострадальном ноуте, переключаясь из браузера в текстовый редактор и еще фильмы фоном смотрел временами.


Можно скачать для теста 1mb. Распакуйте содержимое архива в отдельную папку. Запускайте d2.bat и любым просмотрщиком картинок оценивайте результаты в файле image.ppm

gpusppm2 in 20 mins