пятница, 21 июля 2017 г.

EDXRay. MultiplexedMLT. эксперименты

обнаружил, что дополнительный просчет Direct Illumination на этапе предрасчета и раз в 3 прохода дополнительный подсчет Direct Illumination и учёт его для metropolis sampling очень благотворно сказывается и на specular, и на diffuse составляющих изображения.
вот такой вышел результат после экспериментов:

вследствии моих экспериментов Environment map темнее, зато проработанней материалы на обьектах. возможно, нужно иначе делить изображение с учетом сработавших семплов.
следующее в развитии MultiplexedMLT - семплинг лучей камеры по порядку, а не по metropolis, как сейчас.

для сравнения:
до моих экспериментов, оригинальный MultiplexedMLT из EDXRay


и он же за время, как у моего варианта

четверг, 20 июля 2017 г.

EDXRay. пре-альфа

единственно необходимый шаг для выпуска альфа-версии EDXRay - загрузка файлов.
можно из командной строки, можно кнопкой
следующий шаг - сохранение сцены/проекта - изменений, сделанных в рендере-студии(передвижение камеры, обьектов, смена материалов, смена параметров hdri-освещения, неба, других параметров)

пятница, 14 июля 2017 г.

EDXRay to pepelac render TODO добавка

в догонку к EDXRay to pepelac render TODO
  • openEXR - file read, tinyexr - file save
  • сохранение картинки во всех доступных форматах изображения
  • tone mapping
  • DebugImages - они же light passes, нужно будет для MultiLight, для сохранения нормалей, глубин, прозрачности и т.д.

среда, 12 июля 2017 г.

EDXRay. материалы. удивительные открытия в коде

как оказалось, Glass материал поддерживает Fresnel.
как оказалось при рассмотрении кода с учетом Френеля из других рендеров и обьяснения к рендеру Hydra Render

Fresnel:  (френелевские отражения)

Опция Fresnel используется для симуляции материалов c покрытиями и работает полностью аналогично френелю в таких рендерах как VRay, Corona и mental.


Заметка
Френель в редакторе материалов таких рендеров, как VRay, Corona, Mental и Hydra - это удобный способ симуляции двуслойных материалов. Изначально формулы Френеля были разработаны для стекла. При попадании луча света на стекло, часть энергии отражается, а часть проходит внутрь и преломляется. То, какая часть света проходит внутрь, а какая отражается, зависит от угла падения и определяется формулами Френеля. Однако позже формулы Френеля начали использовать для симуляции материала, состоящего из 2 слоёв (как минимум). Первый слой - стекловидная плёнка, которая и создаёт эффект Френеля. Второй слой, как правило, диффузный.
Интересно отметить, что используемые в современных рендерах формулы Френеля - это формулы для диэлектриков, то есть стёкол. Для металлов, то есть проводников, существуют другие формулы точно описывающие их поведение. Однако, так совпало, что при задании больших значений IOR в формуле френеля для диэлектриков, они начинают вести себя похожим образом на формулы Френеля и для проводников. Задание IOR = 50 или 20 далеко от физического смысла, но даёт похожий результат на формулы Френеля для проводников, то есть “случайно получается” металл. В Hydra Renderer мы не стали нарушать эту старую добрую традицию, и поддержали ставший “де факто” трюк с большими значениями fresnel IOR.
Моделирование материала с покрытием с использования формул френеля. Первый слой представляет собой полностью прозрачное стекло (или любой другой диэлектрик) с определённым IOR френеля. При увеличении fresnel IOR данный двухслойный материал становится всё более металлическим.
Диффузный цвет шара чёрный. Вверху френелевские отражения включены. Внизу выключены, что делает маетриал похожим на зеркало.

Fresnel IOR:  (френелевские отражения)


Френелевские отражения с различными значениями Fresnel IOR. Диффузный цвет шара - жёлтый, цвет отражений - также желтый.

среда, 28 июня 2017 г.

EDXRay. волшебная сила Ctrl

в openGL виде нажать Ctrl и мышкой тыцнуть обьект - он станет выделен и покажется редактор материалов!
типа материала и свойства можно менять

EDXRay to pepelac render TODO

todo на ближайшее время по рендеру:
  • кнопка загрузки объектов, сцен, проектов(сцена+рендеренное)
  • сохранение сцен, проектов
  • средняя кнопка мыши зажатая и движ мыши с текущим объектом - переместить объект
  • вращение средней кнопкой мыши - увеличение/уменьшение
  • доделать обработку клавиатуры
  • все свойства материала из obj/mtl - ADVANCED mat
  • все мои антиалиазинги
  • vcm
  • все мои оптимизации(vm_hybridance, path_reuse)
  • удаление выделенных объектов
  • interactive preview(magic sampling)
будет как в keyshot, но по-новому и без progressive photon mapping

    суббота, 24 июня 2017 г.

    EDXRay. чтение материалов из obj/mtl

    не читались и не учитывались параметры материла:
    Ke - emissive color(r, g, b)
    Ni - IOR материала
    Ns - phong exponent
    Kt - transmissive color.

    сейчас все эти параметры запоминаются в свойствах материала.
    Ni, Kt учитываются при рендеринге:


    пока еще сложно даются рендеру материалы, у которых поровну Specular и Diffuse или Specular и Transmissive
    ошибка на картинке -
    статуе присвоен материал с
    Kd 1.000000 0.800000 0.800000
    Ks 0.2 0.2 0.2
    но используется только зеркальная(Ks - specular) составляющая.

    стеклянная сфера тоже передана не совсем верно
    newmtl Reflective
    Ns 96.078431
    Ka 0.000000 0.000000 0.000000
    Kd 0.0 0.0 0.0
    Ks 0.9 0.9 1.0
    Kt 0.9 0.9 1.0
    Ni 1.5
    d 1.000000
    illum 2
    а в рендере использовано только преломление(Kt - Transmission)

    пятница, 23 июня 2017 г.

    EDXRay. hairball.obj и hdri освещение

    нашёлся мне EDXRay - bidirectional path tracer, path tracer, multiplexed mlt с поддержкой disney brdf(по этой фразе его и нашёл), загружает obj, можно загрузить и повращать hdr.

    после чтения исходников удивительной находкой оказалось, что используется код smallVCM, на основе которого я писал свой рендер.
    в рендере также есть:
    • фильтры изображения MitchellNetravali, gaussian, box(без фильтрации)
    • adaptive sampling - галочка есть, а самого адаптив семплинга в коде нет
    • загрузка environment map(картинка для hdri освещения) интерактивно, в самой программе - в форматах JPEG, PNG, TGA, PSD, GIF, BMP, HDR, PIC, PNM, PPM, PGM. допишу еще pfm
    • сохраняет только в самописный BMP
    • RandomSampler, SobolSampler, Metropolis(фактически его нет, вызывается RandomSampler, сделано наверное для Multiplexed MLT - metropolis там единственный семплер)
    • StochasticPPM - не реализован - вызывается BidirPathTracingIntegrator😹
    • Camera Models

      • Thin Lens Model
      • Fisheye Camera
      • Realistic Camera Parameters
      • Arbitrarily Shaped Bokeh
      • Vignette and Cateye effect
    • Light Source

      • Point Light
      • Directional Light
      • Polygonal Area Light
      • Procedural Sky Light with Hosek Model
      • HDR Probe
    • Integrators

      • Volumetric Path Tracing - как его вызвать, я не понял. надо читать исходник Media/Homogeneous.cpp - похоже используется в phaseFunction HenyeyGreenstein
      • Bidirectional Path Tracing with Multiple Importance Sampling
      • Multiplexed Metroplis Light Transport
    • Materials

      • Lambertion Diffuse
      • Smooth Conductor
      • Smooth Dielectric
      • Rough Conductor
      • Rough Dielectric
      • Disney BRDF
        • Layered Material with Up to 2 Specular Coats
        • Cloth
      • Subsurface Scattering
        • BSSRDF based on Normalized Diffusion
        • Participating Media
      • Normal Map
      • Roughness Map
      • Alpha Test
    отлично сделан рендер. я автору написал "thanks for HUGE rework of smallVCM code"
    я писал свои модификации к оригинальному smallVCM, но в некоторых моментах я замечал, что сложно добавлять новые штуки. остановил разработку, смотрел как бы мне сделать более универсальный каркас. и перепробовал много исходников и оказывается, что автор EDXRay уже порезал и замиксовал на новый лад исходники smallVCM. сам алгоритм vcm в рендере не реализован. я допишу🐼
    также я планирую:
    • загрузку obj с помощью tinyobjloader
    • nanort для пересечения с треугольниками, сферами, curves, cones. сейчас поддерживается Embree для пересечения с треугольниками. сферы превращаются в треугольники
    • загрузка сцен в форматах ini, xml, rib, всех форматах, поддерживаемых assimp
    • реализовать материалы из obj, mtl, поддержка disney brdf из mtl

    суббота, 17 июня 2017 г.

    tinsel renderer and my speedup modifications

    tinsel renderer and my speedup modifications:
    • cpu only version. gpu version hardcoded off
    • openMP is added. on my 2-core cpu speedup to 160%(before openMP 4.7s per frame for ajax scene, after 2.9s) - more cores = faster
    • little bit speedup for disneyBRDF pdf calculation
    TODO:
    - nanoRT scene accelelerator
    - tinyobjloader with my speedups
    - lodePNG for save png
    - openCL version

    Features
    • Unbiased uni-directional path tracer
    • Disney's principled BRDF with importance sampling of diffuse and specular lobes
    • CPU or GPU tracing and shading with a persistent CUDA threads model
    • Interactive OpenGL progressive mode
    • Explicit area light sampling
    • Affine and deformable motion blur
    • Gaussian reconstruction filter
    • Instanced triangle mesh primitives with affine transformations
    • AABB tree with SAH and splitting
    • Simple scene description format
    • Windows / macOS / Linux support

      P.S. зачеркнутое - заявленное, но в коде нет этого




    available on github https://github.com/tigrazone/tinsel

    воскресенье, 11 июня 2017 г.

    embree и openexr. пустые страхи

    почему-то было у меня отторжение openEXR и Embree, особенно напрягался про то, что фиг соберёшь под linux и macOSx, но, почитав руководства по установке, становится понятно, что как раз windows-версия сложнее для установки и обновления под Visual Studio. под minGW можно наверное собрать из исходников openEXR и Embree.
    SmallUPBP очень уж неплохо работает.
    tinyexr можно оставить для записи файлов. неплохо сохраняет и файлы получаются меньше, чем сохраненные openEXR. буду его использовать чтоб не искать в настройках openEXR. может и openEXR у меня старый, только толстые файлы сохраняет.
    может я и лось и что-то недонастроил что с tinyexr, но но при загрузке exr для IBL - не видно результата, будто б exr чёрный.

    пятница, 9 июня 2017 г.

    pepelac. ibl from akari1

    после попыток прицепить IBL от upbp и неясного падения проги от этого, решил брать независимый исходник от akari1.
    к тому ж там есть importance sampled ibl для direct paths

    P.S. причиной падения оказался заход за границу массива. ох уж эти студенты с предустановленными значениями.
    заработало ibl-освещение. только новая напасть. освещение будто б черным светом. tinyexr шалит... или я чота сделал не так

    четверг, 8 июня 2017 г.

    density control for photon maps

    документ Density control for photon maps опубликован в 2000 году
    с 2001 года реализован в RenderPark
    подобное предлагали в 2014 году Jiří Vorba, Ondřej Karlík, Martin Šik, Tobias Ritschel, Jaroslav Křivánek в работе On-line Learning of Parametric Mixture Models for Light Transport Simulation
    да и в mental ray были importons
    и я сделаю
    если кратко - выпускаются сначала фотоны для оценки, куда их надо больше - небольшое количество и потом - по построенной карте - более грамотно запускаются фотоны для полноценного просчета

    понедельник, 5 июня 2017 г.

    akari2 vs gemspt

    gemspt подкупает тем, что поддерживает раздельно материалы diffuse, specular, glass и они содержат одинаковые методы, это упрощает и унифицирует подход к материалам.
    в akari2 только 2 материала - diffuse, specular/glossy.
    была идея перенести в gemspt хорошие решения из akari2, но я, просмотрев исходные тексты nanort/examples/path_tracer/, понял что лучше добавить более стандартную работу с материалами, разделив на компоненты

    https://github.com/githole/gemspt
    https://github.com/tigrazone/akari2

    пятница, 21 апреля 2017 г.

    github.com/githole/

    очень благодарен сетевому создателю многих рендров github.com/githole
    с его подачи мне доступны рендеры:
    akari3 https://github.com/githole/akari3
    akari2 https://github.com/githole/akari2
    akari https://github.com/githole/akari
    Kelemen style MLT https://github.com/githole/simple-mlt
    path tracer https://github.com/githole/cpuex-pt
    edubpt https://github.com/githole/edubpt
    simple-bidirectional-pathtracer https://github.com/githole/simple-bidirectional-pathtracer

    GEMSPT https://github.com/githole/gemspt
    интересен тем, что четко прописаны Diffuse, Specular, Glass материалы.
    после внедрения obj достаточно просто переключать между этими 3мя материалами.
    хорошо расширяется

    четверг, 20 апреля 2017 г.

    akari2 optimised path tracer - port to minGW gcc and Linux gcc

    сделал оптимизации оригинальному akari2 https://github.com/githole/akari2,
    сделал port для gcc и выложил на github https://github.com/tigrazone/akari2

    akari2 - path tracer с HDRI освещением и загрузкой сцен из obj, mtl.
    mtl тут нестандартный, сделаю стандартным + расширения mtl



    по сравнению с akari, тут нет, но допишу:
    • importance sampling for IBL
    • adaptive antialiasing
    • DOF
    • vigneting
    • aperture
    • direct lighting

    есть большой плюс - path tracing воплощен так, что легко можно переделать в bidirectional path tracer
    в nanort/examples/bidir_path_tracer/ воплощен еще emission и больше материалов поддерживается, чем в akari2.
    большое спасибо авторам указанных рендеров!!!!!!!!!!!!!!!!

    среда, 12 апреля 2017 г.

    smallpt pascal lazarus

    Очень мало примеров современного и достойного global illumination на pascal в модификации Delphi и Lazarus.
    Есть очень неплохой пример на Turbo Pascal 3/Lazarus, написан Dirk de la Hunt http://www.iwasdeportedandalligotwasthislousydomain.co.uk/static.php?page=smallpt_tp

    С моими оптимизациями path tracer ускорился на 15%.

    Оригинальная версия by Dirk de la Hunt просчитала картинку 1024x768 на 16 spp 4-мя потоками за 68 секунд.
    Моя версия - 59 с.

    Если выставить в настройках компилятора платформу x86_64, это даст еще прирост скорости!

    В сравнении с C++ версией скомпилированной MinGW gcc - 48с - на 15% быстрее моей версии на Lazarus, но в сравнении с скомпилированным Visual Studio Compiler(69c) или Intel C++ compiler результат даже хуже чем Lazarus или похожий.

    В настройках всех компиляторов я подбирал самые оптимальные настройки, которые давали скоростной код.

    скачать smallpt pascal lazarus path tracer с github

    Огромным плюсом я считаю библиотеку FreeImage, которая работает с множеством графических файлов, в том числе поддерживает новейшие изменения в jpeg и работает с HDR, EXR и есть подвязка под Lazarus.

    Поэтому на Lazarus буду писать и bidirectional path tracer, и mlt, и vcm!

    воскресенье, 9 апреля 2017 г.

    upbp: path reuse

    идея:
    соединять eye path не с 1 light path, а с несколькими


    eye path соединяется c 1 light path
    44 секунды на 1 sample per pixel


    eye path соединяется c 5 light path
    66 секунд на 1 sample per pixel

    как видно из изображений, path reuse помогает найти больше specular path - там где каустика и отражения

    для визуального сравнения смотрите страницу

    пятница, 7 апреля 2017 г.

    ini как формат сохранения сцены

    ini выбираю потому что он проще для редактирования и понимания, чем xml и неструктурированный txt или текстовые описания в своих куче форматов.
    для чтения ini нашел библиотеку inih, затем немного её оптимизировал и выложил
    идею использовать ini для сохранения сцены подсмотрел у автора рендера oreoren

    четверг, 6 апреля 2017 г.

    akarized

    akari хорош тем, что там есть свой qbvh очень шустрый - и строит быстро и пересечения находит и не надо подключать большие либы типа embree или nanort.
    в akari также есть:
    * adaptive IBL
    * adaptive antialiasing
    * DOF
    * vigneting
    * aperture
    * path tracing with explicit direct lighting
    * сохранение hdr, bmp
    * чтение hdr

    добавил к вышеперечисленному небольшие оптимизации вроде вычисления sincos одной командой, а не 2мя функциями sin и cos, разложение вычисления ONB...

    среда, 5 апреля 2017 г.

    akari2 и оригинальная сцена - 2 миллиона треугольников


    картинка кликабельна! | picture is clickable!
    HDRI освещение, path tracing, normal mapping
    10 минут на amd athlon dual core 4200+, 14 секунд на картинку 1920x1080, 40 проходов

    akari2 и hairball.obj - много треугольников!

    akari2 отличается от akari наличием obj loader, normal mapping из файла
    не очень много я почерпну из него
    загрузил hairball.obj на 2.88 миллионов треугольников



    картинка кликабельна! | picture is clickable!
    HDRI освещение, path tracing, normal mapping
    30 минут на amd athlon dual core 4200+, 11 секунд на картинку 1920x1080, 152 прохода

    можно скачать архив с akari2 + haiball.obj для windows

    akari + mcmc ups

    собрал akari под MinGW 64-битным компилятором. собирается и под linux тоже теперь.
    markov chain monte carlo ups/vcm(mcmcups) встрою в akari как один из рендеров
    очень пригодится akari aaa, придумал как использовать с mcmcups

    среда, 29 марта 2017 г.

    отличия от upbp

    • importance sampling lights
    • 3-pass preview
    • adaptive antialiasing
    • mmlt
    • чтение и запись большего количества форматов сцен и изображений
      29 mar 17
      • png - lodepng
      • hdr, tga, bmp - stb_image_write
    • AquireImage - autoexposure из WinOsi
      29 mar 17
    • path regularization

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

    elementary os

    установил elementary os без проблем.
    программа скомпилировалась без ошибок.
    размер исполняемого файла 1,3 мб.
    запустился без проблем и создал файлы с рендереным.
    я доволен, что пепелац легко собирается и на linux

    deepin linux

    установил сиё чудо просто и без проблем. интернет, музыка и видео - из коробки.
    скопировал свои исходники и make... не знает что такое g++, gcc говорит cc1 чего-то там не хватает.
    synaptic, gcc, lazarus не известны магазину приложений тамошнему.
    установил synaptic через консоль и всё остальное.
    корявые шрифты и много мороки.
    поставлю Elementary os. с ним не было проблем

    как сделать компактные исполняемые файлы в c++, lazarus, delphi

    C++, компилятор MinGW
    • лучше printf, чем std::cout
    • лучше массивы, выделяемые с помощью malloc, чем std::vector
    • char * строки лучше std::string
    • c-аналоги std:: - функций и классов лучше
    в моём exe на 307kb также есть работа с std::vector и push_back и сопутствующее

    Free Pascal/Delphi, компилятор Lazarus
    основному оконному и runtime-набору есть чудесная замена — https://github.com/FChrisF/LLCL
    c  помощью этой диво-библиотеки exe получаются 100kb
    со всем функционалом!
    в описании LLCL написано, что собирает программы только под Windows.

    Delphi и LVCL
    попробую аналогичную библиотеку LVCL для Delphi 7.
    аналогичный пример занимает 58kb
    буду программировать оконную часть на Delphi !!!

    пятница, 3 марта 2017 г.

    Path Space Regularization for Holistic and Robust Light Transport

    Path Space Regularization for Holistic and Robust Light Transport, описание
    посмотрел pdf прилагаемые к этой работе и в дополнительных материалах нашел простую реализацию этого метода на основе explicit direct light path tracing


    Path tracer with Regularization 16 spp

    Explicit direct light path tracing 16 spp

    Path tracer with Regularization 2048 spp

    Explicit direct light path tracing 2048 spp

    код и примеры доступны на github https://github.com/tigrazone/ptreg
    картинки кликабельные

    в сравнении можно посмотреть на moo.ho.ua/ptreg/ptreg.html

    вторник, 21 февраля 2017 г.

    bidirectional path tracing и потоки

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

    суббота, 18 февраля 2017 г.

    bidirectional path tracing, DOF и темнота


    эти 2 сцены сложны по освещенности для рендера
    посмотрим как справится с ими vertex connection and merging и path traced manifoldis next event estimate

    пятница, 17 февраля 2017 г.

    vertex connection and merging. обьяснение и связь с bidirectional path tracing

    типичный bidirectional path tracing выглядит так:
    для каждого пиксела:

    • выпустить луч из источника освещения, сохранить всё куда он попал
    • выпустить луч из камеры, сохранить всё куда он попал
    • обьединить между собой вершины обоих путей
    vertex connection and merging
    двухпроходный: 1й проход - light tracing, сохраняет куда какой луч попал и что полезного обнаружил, 2й проход - лучи из камеры пересекаются с сохранными light-путями(как в bidirectional path tracing), а также луч находит световые эффекты, которые просчитываются по алгоритму  progressive photon mapping на основе той же сохраненной информации о вершинах из light tracing-прохода.

    path reuse - это взять сохраненные light-вершины и информацию, найденую на этапе light tracing брать не только для обрабатываемого пиксела, но и для соседних. никаких выпусков лучей не происходит. собирается информация об уже выпущеных лучах. соединяются между собой вершины light и луча из камеры, давая новые эффекты

    и это - не обман и не приблизительное

    среда, 15 февраля 2017 г.

    photon beams, point-to-beam connections, beam-to-beam connections из оригинального SmallUPBP

    собирал очередную сборку своего рендера на основе SmallUPBP b в одном из тестов обнаружил, что сломал логику и сами части рендера слишком увлекшись упрощениями.
    вернулся к мастер-версии с https://github.com/PetrVevoda/smallupbp/zipball/master, собрал с единственными изменениями - отключив все sse4-инструкции.
    добавлю в мастер-версию только изменения, которые гарантированно полезны - ускоряют, меньше памяти и не ломают работу рендера.
    затем проверил, работают ли photon beams - 2 метода - работают!
    и решил сравнить в чем между ними отличия


    по времени - с photon beams картинки считались в 2-2,5 раза дольше

    volumetric vcm наглядно



    вторник, 14 февраля 2017 г.

    bidirectional path tracing эксперимент с многопоточностью

    параллельно обрабатывается цикл по всей картинке, параллельно обрабатываются семплы - где-то 1, где-то 5
    в параллельной обработке что-то сломалось и программа окончилась аварийно без обьяснений
    до её завершения собрал как это было в анимации
    уменьшено в 2 раза