28 мая 2013 г.

Традиция выходных слегка нарушена

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

Поэтому я успел насладиться программированием только в субботу и немного сегодня - а уже понедельник.

На свет родилось новое тестовое приложение, цель которого - структурирование данных VRay которые я потом смогу связать с нодами.

И чем лучше у меня получится этот этап, тем быстрее дела пойдут далее.

Пока решил сузить задачу и сделать что-то вроде конвертреа, который прочитает любую *.vrscene и сковертирует ее как минимум в Питоновский скрипт для Блендера.
Чтобы любой материал созданный для MAX или MAYA, стали доступными в Blender

Пока вот такой набросок получился:


Читаем файл, парсим данные, даже можем попытаться сделать скрипт, НО только после того, как я разберусь со структурой.

Пока тормознулся на структурировани данных.
Подробностями утомлять не стану, хотя процесс весьма интересен...

Будем работать далее...
В любом случае, все эти микро попытки и микро приложения дали огромный опыт и продолжают давать. Идем далее...


24 мая 2013 г.

Приказ по кооперативу № раз!

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


19 мая 2013 г.

Традиционные выходные

Раньше я традиционно по выходным торчал в студии.
Теперь нечто иное. Я дома, с семьей, но делаю что-то вроде хобби, которое имеет отношение к работе.

Продолжаем допиливать GUI для редактирование *.vrscene

Маленький прогресс:




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

16 мая 2013 г.

Перспективы

Завтра со Светой попробуем рассказать всему коллективу куда мы двигаемся и как пытаемся выйти из кризисной ситуации.

Новостей много, безумных и ярких - нет, зато есть куча прагматизма и проверенных приемов.
В целом ситуация не радужна, но весьма позитивна. Есть свет в конце тоннеля.


C# + Cairo + Gtk = Node editor, продолжаем практику )))

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

И вот настал момент прозрения...
Первоначальный исходник за который я уцепился был не очень корректным и ввел меня в заблуждение.

Я полагал, что возможно создать несколько DrawingArea, спокойно наслоить их друг на друга (находясь в пространстве контейнера Fixed) и радоваться результатам - это глупо.

В результате я кардинально пересмотрел подход к созданию GUI и нашол интересное решение.

Теперь все решает класс Node, созданный на основе EventBox. Это такой виртуальный верхний слой, который считает данные, следит за мышкой, реагирует на события.

Малейшее изменение в этом слое влияет на нижний слой - DrawingArea и тут происходит все рисование.

Если кто-то захочет поспорить или предложить лучшее решение - я буду рад, пишите комментарии.

А пока вот такой результат:


Здесь демонстрируется пространство 2000х2000px и работа двух самостоятельных объектов Node, связанных 1 ниткой.

Работает очень быстро. Это радует...
На видео есть небольшое торможение, но это связано только с захватом видео, которое пожирает все ресурсы, в реальности все двигается исключительно быстро.




15 мая 2013 г.

Transparent for Window (GTK# Cairo Xamarin Studio)

Возникли определенные проблемы с пониманием графики в GTK и Cairo
Главный поиск заключался в установке прозрачности для Виджетов.
Информации было крайне мало.
Много экспериментировал и до экспериментировался...

Вот чего достиг )))


Этот очень забавный эффект можно с успехом использовать дя необычных приложений или сплэшскринов.

Исходники проекта тут
Можно баловаться ;-)


12 мая 2013 г.

Создаем традиции выходного дня

Довольно удобно использовать длинные выходные для изучения чего-то нового.
Продолжаю свои искания в сфере программирования.

Многое осознано, двигаемся дальше.
Решил набраться смелости и замахнуться на GUI но не просто графический интерфейс который предлагается фреймворками, а создание своих собственных элементов управления, которых не хватает, чтобы в полную силу начать работу над редактором V-Ray сцен.

В планах довольно много всего, максимализма нам не занимать )))
Пока решил разобраться с ноде-эдитором.
Через него будет идти основная работа по оптимизации, настройке и управлению сценами V-Ray.

Исходя из того набора, что я выбрал (GTK + C# + .NET + Mono), логично было начать изучать GDK + Cairo + Pango, это веселая связка высоко зарекомендовавшая себя на разработке таких приложений как Gimp - может довольно многое.

Смогу ли я?
Выходные показали - как и все новое, сложно начинать, сложно постигать, но потом все налаживается, начинаеш ощущать свободу действий.

Я взял за основу исходники Olivier Lecointre (VMPanel.cs VMObject.cs).
Поначалу долго изучал код, потом начал пробовать его модификации.
В конечном счете выкинул 80% от оригинал, все переписал и вот что стало получаться:


Пока скромно и мало что понятно )))
Мне перспективы видны очень интересные.
Получается красивая структура с которой будет очень легко работать.
В виде нод можно представлять как весь проект в целом, так и отдельно взятые сцены или материалы.
Редактор материалов для подстройки шейдеров тоже возможен.

А главное - оптимизация данных для анимации...
Это приложение будет завершающим этапом пэйплайна, следующий этап - большая кнопка RENDER. Которая здесь тоже будет ;-)

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

Впереди будут выходные еще, посмотрим.

P.S.
Для тех кто не в курсе.
Вот мое мнение - сейчас V-Ray отлично подходит для малых и средних проектов, но что-то большое сделать на нем весьма сложно.
Я пытаюсь создать условия в которых он на прямую будет конкурировать по удобству и гибкости с RenderMan.
Хотя и подключение RenderMan к этой разработке - не исключаю... )))


9 мая 2013 г.

MeShaderEd

В отличие от всех аналогичных разработок, данная продолжает упорно развиваться.
Слава и почет автору!

Речь конечно о редакторе шейдеров для RenderMan - MeShaderEd

Идем по ссылке и изучаем все новое...

7 мая 2013 г.

Будда::Ох о кошках

Однажды Будда::Ох вернулся с Тибета и обнаружил в своем доме кошку.
Он обрадовался тому, что за время его отсутствия дом не был пустым, в доме была жизнь.

Они быстро подружились. Белая пушистая кошка была очень мила. Будда::Ох старался ей во всем помогать.

- Мяу
И Будда::Ох бежит открывать двери...

- Мяу
И Будда::Ох бежит с новой едой для кошки

- Мяу
И Будда::Ох спешит погладить милое существо.

- Мяу
И Будда::Ох думает о туалете для кошки...

Это продолжалось довольно долго, но однажды Будда::Ох задумался.

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

Кошки правят людьми?

И тогда Будда::Ох сказал:
- Всякий господин - слуга.




Вечер после будней

Решил потестить Mono.
C ним доводилось работать, но только в версии для Unity.
Сейчас поставил на MAC и PC полную родную версию.
Первые эксперименты обнадеживают.

Причины выбора:

  • Мне удобно писать на всем что есть под рукой, а под рукой может быть Windows, MAC OS, Linux.
  • V-Ray и Blender созданы для этого списка платформ и значит я тоже должен придерживаться этого курса.
  • По моему мнению из всех аналогичных предложений, Mono наиболее "прокачен" и очень здорово развивается.
  • Это бесплатная среда разработки. Не хочется платить за то, что может закончиться крахом и вообще изначально весьма сомнительно (моя идея может быть полной туфтой, время покажет).

Успехи
Попробовал "распарсить" *.vrscene.  В общем-то и парсиногом это назвать неправильно. Я решил считывать данные на лету и сразу их обрабатывать, без всяких там RegExp.
Получилось.
Работает чрезвычайно быстро, это радует.
Пока решил тормознуться на консольном исполнении и не лезть в GUI.
Когда наработаю основное количество классов и функций - займусь интерфейсом. То есть что-то вроде подготовительной работы. А то что было до этого сделано на Flex - ляжет в основу. Может еще что-то буду на Flex делать, но только ради поиска оптимального решения. Там все довольно просто и быстро лепится, можно использовать его как макет или концепт.

Планы
Теперь призадумаюсь о структуре, как это всё должно быть. Это очень важно.

6 мая 2013 г.

Продолжаем отдыхать...

Еще один выходной добавил новую фишечку к V-Ray пэйплайну.
Теперь геометрию из *.vrscene можно просматривать в окошке.
Думаю любители Блендера узнают очертания Сюзанны )))
Вообще она там крутится, на скриншоте этого не видно конечно.


Пока очень примитивный шейдинг без освещения.
Дело наживное...
Да и особых красот наводить не планирую. Будет легкая поддержка шейдинга, текстуры и примитивный свет, а всё остальное решит кнопка "рендер".
Самое сложное позади, дольше всего провозился с пониманием HEX формата от Chaos Group

Но когда разобрался - понял на сколько все просто )))

Сейчас у меня есть проблемы с чтением данных, пока не разобрался почему, но файлы *.vrscene у меня пока открываются ужасно медленно. А вот когда открылись, то все работает очень шустро, включая показ моделей. Модели очень быстро подгружаются.
Пока две догадки относительно проблемы:
- "кривые" ручки
- Flex+AIR не совсем C++ )))

Если ручки не "распрямятся", то будет грустно, хотя....
Все наработки можно использовать как тестовое приложение. Это очень большой и интересный опыт.

Будут еще выходные )))

P.S.
О простоте HEX формата, используемого Chaos Group
Вообще у них несколько форматов, они немного отличаются типом данных но главная суть проста.
Восемь символов на байт, байт формируется не с права на лево (как учат в школе), а наоборот, но при этом числа чередуются парами.

Например в привычной записи будет:
FAFF7FBF  ---->   а V-Ray сделает ----->  BF7FFFFA
000080BF  ---->   а V-Ray сделает ----->  BF800000
3F800000  ---->   а V-Ray сделает ----->  0000803F

Это как зеркало, но числа переставляются парами.
Надо заметить, что это не странность разработчиков, а очень даже распространенный метод, просто я с ним столкнулся впервые. И в этом методе, в плане оптимизации и скорости есть свои преимущества. По мере считывания, байт за байтом, пара за парой, просто растет число и количество чисел, последовательно и без перескоков идет чтение данных.

Дело в том, что поток данных всегда читается последовательно, то есть слева на право, а привычная нам кодировка (из курса информатики) переставляет знаки с права на лево - это лишние расходы на ресурсы... То есть надо сначала прочитать 8 символов, и только потом что-то вычислить и при этом в обратной последовательности.

Так что все очень даже правильно :-)



5 мая 2013 г.

VRaySceneEditor

Длинные выходные позволили написать небольшую утилитку - VRaySceneEditor


Пока назвать это "эдитором" нельзя, пока это просто вьевер.
Можно просматривать все файлы *.vrscene и разбираться в их конструкции.

Если будет время, буду продолжать, изначально конечная цель была - управление и оптимизация файлов *.vrscene.