
Доброго времени суток. Как со мной бывает, как только я разобрался в каком-то сложном для себя вопросе, я сразу хочу рассказать всем решение. Поэтому решил написать серию из двух статей по такой интересной теме, как процедурная генерация. А конкретнее, я буду рассказывать про генерацию текстур планет. В этот раз я подготовился основательнее и постараюсь сделать материал качественнее, чем в моем предыдущем посте «Простая система событий в Unity» (кстати, спасибо всем за ответные посты). Прежде чем продолжить, хочу обратить ваше внимание на несколько моментов:
1)Этот генератор не претендует на реалистичность, и писал я его для того, чтобы сгенерировать уникальные текстуры для сотни маленьких шариков, которые занимают 10% экрана и к тому же прикрыты облаками.
2)Но это не значит, что я не буду рад критике. Напротив, одна из причин написания этого поста — получить советы по улучшению алгоритма, я с радостью улучшу его.
3)Чисто технический момент: я пишу на C# под Unity3d, так что думать о том, как выводить в изображение с приемлимой скоростью вам придется самим, для каждого языка и платформы свои способы.
Итак, план таков: в первой статье я рассказываю о процедурной генерации планет типа «терра», потом получаю шквал критики, ради которого все и делалось, улучшаю алгоритм, дорабатываю для других типов планет и пишу вторую часть.
Готовы? Поехали.Читать полностью »
Рубрика «Программирование» - 820
Процедурная генерация текстур планет на основе алгоритма Diamond-Square, часть 1
2015-01-28 в 14:50, admin, рубрики: Diamond-Square, game development, unity3d, Алгоритмы, Программирование, процедурная генерация, текстуры планетКатегории Клейсли
2015-01-28 в 14:12, admin, рубрики: c++, haskell, математика, Программирование, теория категорий, функциональное программированиеКомпозиция логирования
Вы видели, как сделать категорию типов и чистых функций. Я также упомянул, что есть способ смоделировать побочные эффекты, или нечистые функции, в рамках теории категорий. Давайте рассмотрим пример: функции, которые логируют или записывают ход своего выполнения.
Читать полностью »
Oracle join elimination
2015-01-28 в 8:01, admin, рубрики: join elimination, oracle, sql, Программирование Оптимизатор в Oracle может применять различные способы трансформации запросов для улучшения их производительности. Одним из таких способов является join elimination. В официальной документации Oracle Database SQL Tuning Guide об этом способе сказано достаточно мало, в отличие от других.
Приглашаю читателей под кат, чтобы поговорить об этом способе поподробнее.
Читать полностью »
Как виртуальная реальность пришла в проект на Unity
2015-01-28 в 7:30, admin, рубрики: Oculus Rift, unity, unity3d, Программирование «Веяния моды привносят в жизнь новые проблемы заставляют меняться» Наверно именно от этой мысли было принято решение подключить в проект на Unity, шлем виртуальной реальности, всем известный Oculus Rift DK2. Вопреки суровому прощупыванию рублем финансового дна удалось заказать Oculus Rift с доставкой в Санкт-Петербург по адекватной цене. Оперативно, менее чем за две недели, заказ прибыл в стены нашего офиса.
Краткий курс компьютерной графики: пишем упрощённый OpenGL своими руками, статья 5 из 6
2015-01-27 в 22:15, admin, рубрики: game development, shaders, Программирование, Работа с анимацией и 3D-графикой, шейдерыСодержание основного курса
- Статья 1: алгоритм Брезенхэма
- Статья 2: растеризация треугольника + отсечение задних граней
- Статья 3: Удаление невидимых поверхностей: z-буфер
- Статья 4: Необходимая геометрия: фестиваль матриц
- Статья 5: Пишем шейдеры под нашу библиотеку
- Статья 6: Чуть больше, чем просто шейдер: просчёт теней
Улучшение кода
- Статья 3.1: Настала пора рефакторинга
- красивый класс матриц
- как работает новый растеризатор
Пришла пора веселья, давайте для начала смотреть размер текущего кода:
- geometry.cpp+.h — 218 строк
- model.cpp+.h — 139 строк
- our_gl.cpp+.h — 102 строки
- main.cpp — 66 строк
Итого 525 строк. Ровно то, что я обещал в самом начале курса. И заметьте, что отрисовкой мы занимаемся только в our_gl и main, а это всего 168 строк, и нигде мы не вызывали сторонних библиотек, вся отрисовка сделана нами с нуля!
Я напоминаю, что мой код нужен только для финального сравнения с вашим работающим кодом! По-хорошему, вы всё должны написать с нуля, если следуете этому циклу статей. Очень прошу, делайте самые безумные шейдеры и выкладывайте в комментарии картинки!!!
Ансамбль синапсов – структурная единица нейронной сети
2015-01-27 в 21:22, admin, рубрики: Алгоритмы, нейронные сети, Программирование 
В мае прошлого года сотрудники лаборатории глубокого обучения Гугла и учёные из двух американских университетов опубликовали исследование «Intriguing properties of neural networks». Статья о нём вольно пересказывалась здесь на Хабре, и само исследование также критиковалось специалистом из ABBYY.
Гугловцы в результате своих исследований разочаровались в способностях нейронов сети распутывать признаки входных данных и стали склоняться к мысли, что нейронные сети не распутывают синтаксически значимые признаки по отдельным структурным элементам, а хранят их во всей сети в целом как в голограмме. В нижней части иллюстрации к этой статье чёрно-белыми я привёл карты активации 29, 31 и 33-его нейронов сети, которую обучил рисовать картинку. То, что тушка птицы без головы и крыльев, изображаемая для примера 29-ым нейроном, покажется людям синтаксически значимым признаком гугловцы считают всего лишь ошибкой интерпретации наблюдателя.
В статье я на реальном примере постараюсь показать, что и в искусственных нейронных сетях распутанные признаки можно обнаружить. Постараюсь объяснить, почему гугловцы увидели то, что они увидели, а распутанных признаков увидеть не смогли, и покажу, где в сети скрываются синтаксически значимые признаки. Статья является популярной версией доклада, прочитанного на конференции «Нейроинформатика — 2015» в январе этого года. Наукообразную версию статьи можно будет почитать в материалах конференции.
Читать полностью »
ErgoEmacs — a way to Lisp
2015-01-27 в 10:52, admin, рубрики: emacs, ErgoEmacs, емакс, Лисп, Программирование
Если вы получаете удовольствие от программирования, то, наверняка, перманентно находитесь в состоянии поиска лучших инструментов, лучших идей, лучших решений. И знаете, конечной остановкой лично для меня стал Emacs. А точнее — его сборка под названием ErgoEmacs. Под катом будет попытка логического и последовательного рассказа об использовании данного текстового редактора в контексте знакомства с ним впервые в жизни (не вдаваясь в сильную конкретику, а скорее стараясь уловить общую идею); идеологическая пропаганда (емакса вообще и лиспа в частности); небольшая критика последней из статей на Хабре по данной тематике, а также небольшое философское заключение. Если вы хотите расширить свой кругозор, прошу под кат.
Читать полностью »
Финансы в Excel+VBA. Калькулятор опционов по модели Блэка-Шоулза
2015-01-27 в 10:21, admin, рубрики: Excel, vba, математика, опционы, Программирование, финансы Статья адресована и будет полезна в первую очередь тем, кто начал изучать опционы и хочет разобраться в их ценообразовании. Ну и во вторую очередь тем, кто ещё не использует инструмент VBA в своих расчётах в екселе, но хочет научиться — вы увидите, как это на самом деле просто.
Читать полностью »
Я горжусь своей профессией. Я — программист
2015-01-27 в 9:48, admin, рубрики: c++, колледж, Программирование, профессия программиста, учеба
Любой человек должен уметь менять пеленки, планировать вторжения, резать свиней, конструировать здания, управлять кораблями, писать сонеты, вести бухгалтерию, возводить стены, вправлять кости, облегчать смерть, исполнять приказы, отдавать приказы, сотрудничать, действовать самостоятельно, решать уравнения, анализировать новые проблемы, вносить удобрения, программировать компьютеры, вкусно готовить, хорошо сражаться, достойно умирать.
Специализация — удел насекомых.
Роберт А. Хайнлайн
Писать про IT-профессии довольно сложно, ведь они сейчас в каждой сфере. Почти в любой профессии что-то связано с IT.
Дело, которым человек решил заниматься в жизни, должно быть значимым и нужным другим людям, приносить реальную практическую пользу. Можно сколько угодно внутренне самосовершенствоваться и утверждать, будто самое важное — это твой богатый внутренний мир, но, на самом деле, всё, что происходит в сознании человека, не имеет никакого смысла и значения, если не дает реальных ощутимых практических плодов, влияющих на жизнь и развитие общества в целом. Объективно, человек — это его работа, это конечный результат прилагаемых усилий. Всё остальное — только почва, из которой такой плод — результат — может вырасти. Люди, не сумевшие вовремя этого осознать, обрекают себя на то, чтобы долгое время, если не навсегда, оставаться аутсайдерами, способными только ныть, жаловаться и недоумевать, почему общество их отвергает?!
Когда-то передо мной встал вопрос: кем стать?
Использование DSP-сопроцессора DM8168 с помощью фреймворка C6Accel
2015-01-27 в 9:19, admin, рубрики: C6Accel, DM8168, dsp, DSP-сопроцессор, EZSDK, linux, opencv, texas instruments, Блог компании Promwad, высокая производительность, микропроцессоры, Программирование, разработка, разработка электроники, сигнальные процессоры, Электроника для начинающих 
В этой статье мы познакомимся с отладочной платой DM816x/C6A816x/AM389x и фреймворком C6Accel (он же C6EZAccel), а также рассмотрим инструкции по наладке системы для выполнения встроенных тестовых приложений.
Всё началось с интересной идеи использовать алгоритмы нынче очень популярной библиотеки компьютерного зрения OpenCV на микропроцессоре. Однако, изучив немного тему, идея уточнилась. Почему бы не реализовать алгоритмы не просто на ядре ARM, а на специализированном ядре для цифровой обработки сигналов DSP? Тем самым разгрузим ядро ARМ, ускорим выполнение алгоритмов, и, глядишь, самое громоздкое приложение заработает в реальном времени.
Итак, что же использовать для решения задачи? Оказалось вариантов немного…
Читать полностью »



