-Поиск по дневнику

Поиск сообщений в eugene20237

 -Подписка по e-mail

 




Linux: загрузка с корнем на RAID

Понедельник, 21 Января 2013 г. 15:07 + в цитатник
Загрузка Linux с корнем на RAID:
http://habrahabr.ru/post/133059/
Пригодится.

Если рэйд из флешек, то их надо низкоуровнево форматировать с помощью dd if=/dev/zero bs=4096 of=/dev/sdX, иначе grub не захочет на них ставится после создания raid. Кроме того, надо делать mdadm —zero-superblock /dev/sdX каждой флешке независимо от форматирования перед созданием raid. Всё это можно сделать в alternate установщике любого дистрибутива, нажав Alt+F2.

Метки:  

Мелочи: установка Windows 7 с флешки

Вторник, 15 Января 2013 г. 20:43 + в цитатник
В качестве блокнота:
http://misterkim.org/articles/installing-windows7-from-usb.html
Установка винды с флешки. Если коротко, то надо использовать Windows7-USB-DVD-tool.
Иногда прога Microsoft для записи винды на флешку тупит и говорит что флешка используется другой программой. Флешку надо форматировать в FAT32, чтобы такого не было. Кроме того прога Microsoft'а умеет записывать только дистрибутивы Windows 7 и 8. Windows XP она не записывает. Ещё одна важная деталь: флешка для этой проги должна быть отформатированна в винде под FAT32. Иначе будет выдавать сообщения о том что устройство уже кем-то используется и занято - это не правда. Если дистрибутив винды не в iso, а в каком-то другом формате (например, mds), то надо его смонтировать и тупо создать iso образ из набора файлов. Это можно сделать программами UltraISO или ImageBurn или любыми другими.

Есть ещё одна странная приблуда, называется WinToFlash. Она умеет записывать на флешку Windows XP.

А вот так предлагается делать загрузочную флешку под DOS: http://tro.net.ua/item/%D1%81%D0%BE%D0%B7%D0%B4%D0...%D0%BB%D0%B5%D1%88%D0%BA%D0%B8
Затем на неё можно скопировать необходимые досовские программы вроде mhdd... Там сразу загружается VolkovCommander, так что пользоваться легко.

Примерно таким же образом можно записывать на флешки Linux дистрибутивы:
http://warenek.ru/%D1%83%D1%81%D1%82%D0%B0%D0%BD%D...D0%BB%D0%B5%D1%88%D0%BA%D0%B8/
Программы для записи: UltraISO, Unetbootin, Image Writerz (win32 Disk Imager).

Метки:  

Последняя битва на Земле

Вторник, 25 Декабря 2012 г. 02:31 + в цитатник
Что будет завтра? Мы не знаем что будет завтра в нашей жизни. Мы даже не уверены в том, что будет в следующую минуту. Это всё "лирика" и мало кого волнует. Однако, если завтра нас ожидает важное событие, то мы начинаем волноваться о его исходе. Быть или не быть? Получится или нет? Да или нет? От этого зависит всё.
Я хочу понять как относится к этой неизвестности - как спасти себя от страха? То, что произойдёт завтра решать не нам. Это сделает кто-то другой и наступит неизбежность, которая может повернуться как лицом, так и ботинком. Можно ли доверять этой устрашающей и непостижимой внешней силе, надеясь на лучшее? Ведь такое доверие неизбежности может спасти от страха. Типа, Бог/Дух/Великая_река_силы обо мне позаботится, поэтому всё будет хорошо. А что если не будет? Что если нам подсунут новое испытание, которое станет настоящим кошмаром? И этот кошмар необходимо пройти для входа на "новый уровень"?
Не надо бояться. Не будет кошмара, если мы его не нагнетаем, думая в этом ключе о предстоящем событии. Не надо индульгировать на страхе - это не приносит ничего, кроме самого страха и проблем. Надо жить здесь и сейчас, потому что только безупречность идёт в счёт. Всё что делаем в текущий момент - это наша битва на этой Земле, которая может оказаться "последней" в контексте предстоящего события. Событие ассоциируется со смертью. Например, смертью какого-то начинания, смертью отношений, смертью нашего мировоззрения. Важно понять в прикладном аспекте, что вот это дело последнее, что происходит, раз мы переживаем предстоящий момент, ровняя его со смертью. А раз так, то сейчас происходит последняя битва и она происходит не зря. Возможно, мы живём ради вот таких "последних битв", которые идут каждый миг нашей жизни. И от того КАК мы их проведём действительно зависит всё.

Суть приёма в том, что "безупречность" или "последняя битва" являются не просто абстрактной идеей, а конкретным практическим состоянием, в которое мы можем легко перейти. Последняя битва - это практическое действие, которое происходит прямо сейчас, в том случае, если мы делаем его хорошо. В виде действия безупречность является альтернативой страху, потому что страх - это действие "бояться". Мы боимся, потому что у нас нет никакой альтернативы тому, что делать с переживанием. Мы больше ничего не умеем! Легко что-то приобрести, но трудно отказаться. Такова природа людей! И мы приобретаем страх. Чтобы отказаться от страха, надо взять что-то другое. А для этого это другое надо наработать. Состояние последней битвы в безупречном виде должно стать наработанной привычкой, защитным механизмом, который мы можем включить перед лицом страха. Это козырь, который нужно засунуть в рукав и научиться быстро его вытаскивать! Мгновение и мы уже в другом состоянии - в состоянии последней битвы на Земле, потому что только она идёт в счёт.

Метки:  

Конец света для админа

Пятница, 21 Декабря 2012 г. 05:11 + в цитатник
Не в качестве жалобы. Просто констатация факта. Всё началось с того, что перестала работать сеть на балконе. После многочасовых выяснений причины оказалось, что кабель до того промёрз, что обломился. Протянуть новый кабель на мой балкон сложно, но я это сделал.
После этого появилось ещё 2 никак не связанные проблемы: 1.) у меня не крутится вентилятор видюхи из-за мороза; 2.) сервер на балконе ни с того ни с сего перестал отвечать. После долгих выяснений оказалось что сервер на балконе не грузится по неизвестным причинам, возможно проблема с винчестером. Это самое фиговое что могло произойти, ибо на нём вся работа. Мне пришлось вытащить этот компьютер с балкона. Пока вытаскивал его повредил другие кабели и в итоге пришлось наводить капитальный порядок во всём серверном шкафу. Ладно.
Хотелось разобраться с сервером, однако было уже поздно и шуметь нельзя. Поэтому я решил обновить запасной сервер в коридоре и перенести работу туда. Я начал обновление и спустя несколько часов дошёл до точки невозврата, где нужно загружаться с новым ядром. Однако это был осознанный риск. Так или иначе, сервер не захотел с ним работать - не загрузился. В итоге последний домашний сервер я тоже сломал.
Итог: все серверы сломаны, рабочие данные недоступны, печать парализована, сеть частично повреждена, возможность играть также под вопросом. Ну и ладно, зато я жив и у меня есть интернет. Возьму и буду ставить свежие версии - гулять так гулять! Так админы встречают конец света. 8-)

Метки:  

Делаю перчатки с подогревом

Вторник, 18 Декабря 2012 г. 20:56 + в цитатник
Вот первый прототип :) Работает!
electro_gloves (700x466, 235Kb)

Метки:  

Как сохранить связь с Потоком?

Понедельник, 17 Декабря 2012 г. 22:35 + в цитатник
Наконец-то я нашёл ответ на свой вопрос: "Как не потерять удовольствие от работы?"
Есть ещё один способ. Это должно хобби, которое однозначно "включает", причем мгновенно и при любых обстоятельствах. Для меня это кунг-фу :D Перебирать разные движения в потоке поединка - это настоящее удовольствие! Тоже самое вы можете почувствовать в танце или другом занятии. Главное чтобы ваше хобби позволяло выходить на Поток быстро, в течение буквально нескольких минут.
Зачем нужно такое хобби в нашей жизни? Это нужно тем людям, у кого при обычной работе не всегда можно легко выйти на Поток. В этом блоге я уже много раз писал какие проблемы могут быть с выходом на Поток нашей обычной работе. Если выйти на Поток получается редко, нас может настигнуть творческий кризис и, соответственно, неудовольствие от жизни. Чтобы не стать жертвой творческого кризиса нужно быстро включающее хобби. Тогда мы вспоминаем свой Поток и осознаем себя как творческие люди.
Всё очень просто! :) Вот так: http://video.yandex.ru/users/eugene20237/view/23/#hq

Метки:  

Запекание текстур плагином 3dmax Flatrion

Вторник, 27 Ноября 2012 г. 03:19 + в цитатник
Я нуб в этом деле, но приходится запекать текстуры и импортировать модели из 3dmax. Пишу эту заметку чисто для себя, чтобы запомнить некоторые особенности работы с Flatrion и не наломать дров снова.

Я накладываю на модель комбинированный материал, состоящий из нескольких других материалов, затем каждой грани назначаю идентификатор нужного материала и модель текстурируется так как мне надо. При запекании такой модели в плагине Flatrion нельзя использовать тот же канал текстуры (Target Channel), с которым были использованы исходные материалы. Обычно это канал 1. Иначе итоговая текстура запекается неправильно. Если установить любой другой Target Channel, то всё нормально, но при экспорте будут использованы всё равно координаты из канала 1. Поэтому я сделал "ход конём":
1. Установил Texture Stretch в значение 0.3, а Gutter Padding 16. Параметр Overlap (ниже) установил в значение 8. Advansed Unwrap Setting оставил по умолчанию (все галочки сняты).
2. Установил Target Channel в значение 1.
3. Нажал кнопку Apply Unwrap Modifiers.
4. Экспортировал модель в Collada (DAE), сняв галочку Bake Matrices.
5. Установил Target Channel в значение 2.
6. Нажал кнопку Apply Unwrap Modifiers.
7. Target Map Slot не трогал. Текстура никуда не назначается.
8. Установил галочку Make Self-Illuminating.
9. Add shell установил в значение Overrite.
10. Нажал Select Bake Element и выбрал Blend Map. В группе Bake Element Settings снял галочку Reflection. В случае Complete Map получается какая-то фигня.
11. Shell Switcher = (Baked, Baked) и Shell Resolver = Keed Baked.
12. Выбрал файл, куда будет рендерится текстура.
13. Нажал кнопку Bake Selected и увидел запечённую текстуру в своем файле.

В итоге всё экспортировалось и запеклось правильно!

Метки:  

Среда для ИИ

Среда, 05 Сентября 2012 г. 01:37 + в цитатник
Всё сводится к вопросу: а в какой среде должен обучаться ИИ? А этот вопрос автоматически порождает другой: а что мы вообще хотим от ИИ в итоге? Если мы хотим получить бота в компьютерной игре, то обучать его нужно соответственно в виртуальном мире этой игры. Если мы хотим разговорного собеседника, то обучать такого монстра придётся в мире, идентичном нашему или очень похожему на наш. Отсюда понятно зачем на самом деле нужна Матрица, где бегает Морфиус - чтобы обучать Смитов!

Что же мы можем сделать? Либо создавать большой виртуальный мир с социальными отношениями, смоделированными чувствами и прочим-прочим, либо сделать нечто совершенно иное и вырастить ИИ для решения узкоспециализированной задачи. Я вот подумал, что хорошо бы сделать робота, который будет писать программы вместо меня Для этого можно создать виртуальный мир в котором живёт язык программирования, а именно его виртуальная машина. Скорее всего язык придется изобретать свой, чтобы впихнуть ИИ в его концепции. Т.е. задача пока чисто академическая. Но в случае успеха, уверяю вас, мы будем уже грезить о Скайнете и будущем с терминаторами, потому что оно приблизится.

vm (650x155, 47Kb)

Метки:  

Макросы для AS3

Понедельник, 27 Августа 2012 г. 17:06 + в цитатник
А я и не знал что бывают такие штуки:
http://stackoverflow.com/questions/2527561/is-it-p...e-to-do-a-define-in-adobe-flex
И даже отдельные препроцессоры для AS3 есть. Очень интересно, можно все настроить и использовать макросы.
Для FlashBuilder: http://blog.joa-ebert.com/2006/02/27/actionscript3-preprocessor/
Для FlashDevelop: http://www.flashdevelop.org/community/viewtopic.php?f=5&t=1188
И вообще их много.
Также макросы есть в apparat: http://code.google.com/p/apparat/wiki/MacroExpansion
Для встраивания inline функций надо использовать тулзу tdsi, которая есть здесь: http://makc.googlecode.com/svn/trunk/flash/fd_inline/tdsitest/
А ещё можно делать макросы в AS3 через gpp (http://en.nothingisreal.com/wiki/GPP).
Вот он: http://makc.googlecode.com/svn/trunk/gpp.2.24-windows/
Вот тестовый проект под FD с ним: http://makc.googlecode.com/svn/trunk/flash/fd_inline/gpptest/

Метки:  


Процитировано 1 раз

IEEE754 - вдруг кто-то ещё не знает...

Воскресенье, 26 Августа 2012 г. 04:54 + в цитатник
Я не знал, каюсь. Не знал что все вещественные числа считаются совершенно не правильно. Недавно столкнулся с этим в AS3 при вычислении текстурных координат. Долго копал, а потом узнал это: http://www.yur.ru/science/computer/IEEE754.htm

В AS3 например такая операция 0.4 + 0.2 даёт результат 0.6000000000000001. Из-за этого текстурные координаты берутся от другого пикселя и картинка становится неверной. В моём случае достаточно было просто обрезать вычисленный результат. Наиболее быстрый способ это сделать такой: int(10000000*x) / 10000000. И делать надо это после каждой арифметической операции с вещественным числом x.

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

Метки:  

Работа с памятью на флеше

Четверг, 16 Августа 2012 г. 06:35 + в цитатник
Коротко резюмирую тут трюки по борьбе со сборщиком мусора виртуальной машина Flash Player. Иследования проводились только для версии 11.1 standalone debugger for win32. В следующих версиях Flash Player могли как улучшить работу с памятью так и ухудшить, но скорее всего всё осталось также. Итак, garbage collector (GC) исключительно хреново работает с памятью. Он её попросту не очищает во многих случаях или выделяет в разы больше чем требуется.

Вы наверняка знаете, что такое сильные и слабые ссылки и как GC их считает чтобы понять нужен этот объект или нет... Всё это написано во многих местах, в т.ч. в документации по AS3. Я всё это повторять не буду. Здесь описано как всё должно хорошо очищаться: http://help.adobe.com/en_US/as3/mobile/flashplatform_optimizing_content.pdf
Но нифига оно так не работает к сожалению. При соблюдении всех этих правил моя программа всё равно жрала память как сумасшедшая при загрузке, а потом Flash Player просто падал, когда кончалась физическая память в операционной системе. Вот так он работает на самом деле.

Всё началось вот с этой темы в Juick: http://juick.com/eugene20237@ya.ru/2009006 и моего вопроса на StackOverflow: http://stackoverflow.com/questions/11833009/as3-bitmapdata-memory-leaks
Почитайте, если хотите, узнаете много нового о флеше. А ещё почитайте вот эту статью о том что надо реально сделать для оптимизации по памяти на флеше.

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

  • Loader в дефолтном своем применении порождает утечки памяти. Поэтому если через него загружается картинка, то надо брать её BitmapData и делать bitmapData.clone(), сохраняя в другую переменную. А потом диспозить существующую картинку в Loader, а затем делать loader.unload(). Ещё на всякий случай можно cacheAsBitmap=false.
    PHP:

    var bitmapData:BitmapData = (loader.contentLoaderInfo.content as Bitmap).bitmapData.clone();
    (
    loader.content as Bitmap).cacheAsBitmap false;
    (
    loader.content as Bitmap).bitmapData.dispose();
    (
    loader.content as Bitmap).bitmapData null;
    (
    loader.contentLoaderInfo.content as Bitmap).bitmapData null;
    loader.unload();
    font>


    Только тогда он работает нормально. И то с учетом, что память очищается секундой позднее. Но очищается. Во всех остальных случаях можно сушить вёсла... При этом Loader остаётся единственным способом загружать картинки без утечек памяти.

  • C Embed ресурсами всё гораздо хуже. Под них выделяется всегда в разы больше памяти (в 2 раза обычно) и далее она не очищается никогда. Поэтому просто так Embed ресурсы использовать нельзя. Причина заключается в том, что они построены на Flex-компонентах, а в них много неоптимальной фигни. Юзайте Loader. А если нужно встроить ресурс в приложение, то делайте бинарный Embded, а затем Loader.loadBytes(...). Другого пути пока не найдено.
    PHP:

    [Embed(source="../media/128.png"mimeType="application/octet-stream")]
    static private const 
    EmbedBMP:Class;
    ..............
    loader.loadBytes(new EmbedBMP() as ByteArrayAsset);
    font>



  • Использовать много мелких картинок - плохая идея. Флеш будет выделять больше памяти чем требуется. Если же для большой группы картинок (допустим 100 шт.) вызывается dispose(), то их память будет очищена, но не сразу, а как повезет: может через минуту или как угодно Богу Мусорщику. Если же использовать десяток больших картинок (допустим 4096x4096), то память под них будет выделять и очищаться абсолютно корректно и сразу же.

  • Выделение памяти под BitmapData происходит не при создании объекта BitmapData, а при первой операции рисования на ней или копирования данных пикселей в неё. Это внутренняя оптимизация BitmapData.

  • Говорят, что BitmapData иногда выделяет памяти больше чем надо из-за внутреннего мипмеппинга. Этот мипмеппинг отключить никак нельзя. Также есть информация, что он отключается, если задать размеры картинки не являющиеся степенью двойки. У меня на практике это совсем не подтвердилось, так что никакой возможности управления мипмеппингом скорее всего уже нет.

  • Сюда же поделюсь опытом использования трюка с local connection. Так вот, в исходном варианте этого хака LocalConnection создаётся два раза внутри try. Мои эксперименты показали, что надо вписать там три строчки, а не две. Вот так:
    PHP:

    public static function freeMemoryGC(): void
    {
      
    // the GC will perform a full mark/sweep on the second call.
      
    try
      {
        new 
    LocalConnection().connect('foo');
        new 
    LocalConnection().connect('foo');
        new 
    LocalConnection().connect('foo');
      }
      catch (
    e:*)
      {
      }
      
    //System.gc();
    }
    font>


    В этом случае вероятность очистки памяти сразу гораздо выше (почти всегда сразу очищается). Если сделать два раза эту инструкцию, но вызвать тоже самое хотя бы через 100 мс, то память также очиститься. System.gc() не использую потому что он работает только AIR или только в отладочной версии Flash Player. Кроме того советую почитать эту тему о способах принудительного пинания GC. В частности в ней есть ссылка на такой способ.


Метки:  

Создание спецэффектов для игр

Среда, 01 Августа 2012 г. 00:05 + в цитатник
Хочу поделиться совсем небольшим, но всё таки опытом создания графических спец-эффектов для игр. Я имею в виду всякие вспышки, магию и всё что угодно, что делается системами частиц. Но в первую очередь это конечно взрывы :)

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

  • Сначала делал их в 3dmax. Но это долго и сложно. Также есть плагин FumeFX для 3dmax, который всё это упрощает. Обратите на него внимание, если собираетесь заняться спецэффектами взрывов профессионально.

  • Затем нашёл такую русскую фиговину как Magic Particles 3D. Это фактически бесплатная программа, которая позволяет создавать системы частиц и экспортировать их как в простые PNG файлы, так и в нечто большее. Помимо экспорта итоговой картинки там есть множество API для разных популярных игровых движков, что позволяет использовать разработанные системы частиц в играх, вычисляя их в realtime. В программе есть большое количество встроенных готовых эффектов (samples). Среди них парочка вменяемых взрывов.

  • Совсем недавно обнаружил программку Particle Illusion. Стоит денег. На сей момент: $389. Выглядит более солидно чем Magic Particles. Пресетов для неё, судя по всему, очень много. Взрывы более качественные. Экспорт есть во что пожелаешь. Буду делать всё в ней теперь. API для игр правда нет, но мне и не надо.

  • Ещё есть Adobe After Effects, но готовых взрывов для него я не нашёл, а изучать всё это долго. Но это средство предназначено именно для спецэффектов, так что если кто-то взялся за это серьёзно, есть смысл изучать After Effects. Стоит $175 на текущий момент.


Вот такой скупой обзорчик получился для тех кто не в курсе.

Экспорт low-poly персонажей из Poser и DAZ Studio

Вторник, 31 Июля 2012 г. 22:58 + в цитатник
У меня появилась идея: экспортировать персонажей из Poser/DAZ и вставлять в свой игровой движок. Если такая возможность существует, то перспектива очень заманчивая, потому что моделей для Poser/DAZ существует дофигища. Это бы решило проблему поиска или создания нужных персонажей для игр. Но экспортировать надо в low-poly. Сразу же погуглил на эту тему и нашёл вот это обсуждение на англоязычном форуме. Там много интересного. Короче, выходы есть и так действительно можно.

В середине этой темы есть ссылка на утилиту под названием Decimator for DAZ Studio. Она может создавать низкополигональные модели из стандартных дазовских. А именно умеет:
"Decimator for DAZ Studio allows users to create any number of lower polygon versions of a high resolution model known as Levels of Detail (LODs). Use LOD features in DAZ Studio to automatically switch between models depending on factors such as distance from the camera.
Features:
- Create Levels of Detail (LODs)
- Remove invisible Nodes following decimation.
- Remove invisible Surfaces following decimation.
- Prepare to Decimate – (Convert polygons to triangles).
- Decimate complete model including all objects in scene.
- Decimate only selected objects.
- Decimate by percentage.
- Decimate to fixed number of faces."

Кроме того: "In Poser you have high poly meshes and low poly meshes. No need to use some plugin. the low poly meshes are like 2000 polys... perfect." Это очень радует.




Процитировано 1 раз

Экспорт единой текстуры сцены в 3dMax

Среда, 25 Июля 2012 г. 18:41 + в цитатник
Эта заметка написана ламером для ламеров. Так что если, кто-то знает как эти вещи делать правильно, расскажите! Если же вы не эксперт в 3dmax, но вам нужно экспортировать какую-то модель с единой текстурой, как мне, эта заметка для вас. Экспорт всех материалов сцены, а также освещения в одну простую текстуру нужен в частности для некоторых игровых движков. Короче, если вы не знаете зачем это надо, идите лесом..)

Дело в том, что пытаясь сделать эту процедуру я по незнанию сделал ряд ошибок и в итоге всё экспортировалось неправильно. Ошибки эти от кривости рук и недостатка опыта. Возможно кто-то из вас тоже мог на них напороться. В этой заметке я кратко опишу весь процесс работающего экспорта чтобы люди не тратили время методом тыка. Все действия описываются для 3dmax 2012. В других версиях всё аналогично.

Откройте свою модель в 3dmax и после этого никогда не сохраняйте, потому что мы будем её херить в процессе экспорта :) Экспортируемый объект должен быть только один. Если у вас их несколько, то сконвертируйте их в editable poly или editable mesh, а затем соедините с другими объектами с помощью кнопки Attach. Далее выделите полученный объект, который вы хотите экспортировать. На этом этапе у вас уже должно быть расставлено освещение и отлажен итоговый вид с помощью обычного рендеринга в 3dmax. Теперь кликаем Rendering -> Render to texture или просто нажмите клавишу "0" на клавиатуре.

render_settings
Откроется окно рендеринга в текстуру, с помощью которого мы соединим все наши текстуры и освещение в одном графическом файле. Если вы не знаете что такое запекание текстуры в 3dmax, то почитайте эту или вот эту статью. Идите отсюда, читайте. Почитали, но всё ещё не знаете как всё экспортировать? Не беда, сейчас всё будет ясно. Выставьте настройки, как показано на скриншоте. Красным я выделил те пункты, которые изменил для себя. Обратите на них внимание. Если вы понимаете (а вы должны) для чего каждый пункт нужен, можете изменить его под себя. Важно тут выставить автоматическую генерацию новых текстурных координат. Почему? Потому что если оставить Use existing channel, то освещение в текстуре будет неправильным, образуются черные резкие полигоны в совершенно неожиданных местах. Так что рендеринг с использованием существующих текстурных координат к сожалению не работает. Поэтому выставляем Use automatic unwrap в какой-нибудь несуществующий Channel.

После выбора настроек в самом низу окна нажмите кнопку Render. Вы получите примерно такой результат:
rendering_result
3dmax рассчитает новые текстурные координаты и добавит в стек модификаторов штуку под названием Automatic Flatten UVs. Этот модификатор накладывает на модель новые текстурные координаты. Если его удалить из стека, вступят в силу предыдущие текстурные координаты. Кроме того, после рендеринга текстуры будут изменены ваши материалы в сцене. В Diffuse map будет вставлена свежезапечённая текстура, а сам объект в итоге может выглядит тёмно. Т.е. в 3dmax он будет отображаться неправильно. Но это всё неважно...)

Теперь важный момент. Ни в коем случае не надо нигде использовать изображение текстуры из окна результата рендеринга. С виду оно нормальное, но на самом деле сильно отличается от файла, который вы указали в target настройке. Если использовать картинку из того окошка, то при наложении на объект появятся резкие белые или тёмные рёбра. Неизвестно почему, но это происходит, так что надо использовать файл, который сгенерил рендерер. Если открыть этот файл в фотошопе, то мы увидим примерно следующую картинку:
photoshop_texture
Текстура может оказаться темноватой, как здесь. Это из-за того, что 3dmax зачем-то прописал в PNG файл нестандартную гамму, более тёмную. Не знаю почему и зачем, но вы возможно знаете. Так или иначе, это можно исправить в фотошопе с помощью Image -> Adjusments -> Levels или каким-то другим способом откорректировать гамму текстуры. Полученную текстуру можно уже использовать в игровом движке или там где вам надо.

Но это ещё не всё. Если вы экспортировали модель до этого, то она будет содержать старые текстурные координты, которые теперь изменились. Так что необходимо заново экспортировать модель чтобы она содержала правильные текстурные координаты. Собственно выбор Output to source в настройках рендеринга текстуры был нужен именно для этого. Чтобы затем экспортировать модель с новыми текстурными координатами. Я экспортировал модель в формат Collada (DAE).
export_to_dae
Соответственно, вы экспортируйте куда вам надо. Готово! Теперь у вас есть текстура и модель, которые можно использовать в ваших приложениях.

Напоследок покажу как выглядела модель в моей игрушке:
seyatel_in_game
Всё экспортировалось правильно, и текстура и модель. Желаю вам удачи в ваших проектах!

P.S.: А если вы хотите запечь несколько объектов в одну текстуру, то хотите дальше, потому что стандартный RTT этого не позволяет. Почитайте эту тему на буржуйском форуме и сделайте свои выводы. А вывод будет следующий: надо использовать плагин Flatrion. Его вы также можете найти на торрентах. Процедура, описанная в данной заметке делается плагином Flatrion в два клика. Даже новую развертку генерить не надо. Всё прекрасно работает сразу. Вот такие пироги.

Метки:  

Структура папок в Poser 6

Воскресенье, 15 Июля 2012 г. 04:50 + в цитатник
Это цитата сообщения Джоан [Прочитать целиком + В свой цитатник или сообщество!]

Поддержка ваших библиотек

Все файлы Poser должны находиться в основной директории (файловой директории) Runtime. В ранних версиях Poser директория Runtime могла располагаться исключительно в той же папке, что и исполняемый файл Poser. Другими словами, если вы устанавливаете Poser 4 в папку, указанную по умолчанию, директория Runtime будет создана по адресу C ==> Program Files ==> Curious Labs ==> Poser 4, как и файл Poser.exe.
При работе с Poser 5 и более поздними версиями в корневой директории появится папка Downloads. Эта папка содержит дополнительную директорию Runtime, в которой сохраняется весь купленный или загруженный вами материал. Если вы разделите новый материал и материал, установленный вместе с программой Poser, это значительно упростит вашу работу.Читать далее

 

Жанна-Джоан.

 


Метки:  

Do it yourself

Среда, 27 Июня 2012 г. 17:45 + в цитатник
Про вдохновение. Нашел для себя один его источник. Нужно сделать в ютубе поиск по абревиатуре DIY. "do it yourself" - сделай сам. Там будут видео про то, как разные чуваки мастерят что-то хайтехническое. Области самые разные. Можно найти клипы и на русском языке.

Метки:  

ИИ: решение сложной задачи

Четверг, 07 Июня 2012 г. 04:33 + в цитатник
Есть идея насчёт ИИ... Надо не забыть.

Допустим мы купили в магазине ИИ и даём ему задачу: сделать за нас всю интеллектуальную работу. Нам нет разницы за секунду он это сделает или за минуту, но для самого ИИ, живущего в темпе процессорных тиков, это огромное подспорье. В начале он ничего не умеет делать на тему нашей задачи, это его великая цель, которая сейчас недостижима. Поэтому браться за ключевую задачу сразу для ИИ смысла нет. Но просто так учиться он тоже не сможет, потому что тогда он углубится в какую-нибудь иную сторону и обучение затянется навечно. Поэтому нужно дать ему направление. Тут можно использовать принцип "реки жизни". Когда ИИ получает навыки, которые приближают его к цели, он получает от управляющей системы особые сигналы типа "успех" и, соответственно, если он изучает навык, который не имеет отношения к главной задаче, ИИ получит сигнал типа "провал". В программе ИИ должно быть заложено воспринимать сигналы "успех" как направление исследований, а сигналов "провал" он будет усиленно избегать. Таким образом, ИИ будет "плыть по течению" и сможет вплотную подойти к решению своей главной задачи.

Кроме того, можно разбить его обучение на этапы. Это может оказаться более эффективным, т.к. некоторые вещи для ИИ лучше изучать отдельно, не применяя опыт, полученный из предыдущих сессий. Таким образом, можно разбить обучении ИИ на несколько "жизней", после каждой из которых агрегировать опыт и корректировать его для следующего этапа. Т.к. времени в процессорных тиках у ИИ очень много, то он может "прожить" миллионы "жизней". За этот срок пройдёт какая-нибудь минута реального времени, а ИИ обучится главной задаче и выполнит за нас всю работу.

Метки:  

Ещё один способ дисциплины

Четверг, 31 Мая 2012 г. 20:30 + в цитатник
Вот ещё один метод. Цитирую.
"Подскажу другую методику: о понятии трудового ража. Напомню, что способом его намеренного вызова является мечтание о работе, воображение себе, как будешь мыть пол, надевая тряпку на швабру, или как порежешь овощи и забросишь их в кипящую пучину. А чтобы не отвлечься раньше времени, категорически запрещается себя жалеть. Лишь только появляются такие позывы (у тебя это названо "задумались о лучшей доле") - в этот момент нужно вообразить себе, как хорошо будет пойти бакланить уже с чистой совестью, когда все сделано. А в довесок полезно в такой момент пообещать себе награду: конфетку, пироженко, фильмик. Работа за вознаграждение, как показывает практика, куда более полезный способ "любить себя", чем попытки баловать внутреннее дитя без особой на то причины.

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

Кстати, любопытное наблюдение насчет этой пустоты, которая появляется при безделии: во-первых, она постоянно стремится заполниться внутренним диалогом либо какой-то навязчивым мотивчиков, либо индульгированием (в кастанедианском понимании). Если же этого нет, остается пугающее Ничто, которое в то же время совершенно и составляет основу человеческого существа, побуждая к действию, а в бездействии ведя к всезнанию и всегармонии, Нирване.

Так вот, при определенной практике эта пустота чем-то заполняется. Легче всего ее наполнить болью - тогда, стоит уйти всему другому, остается боль. И это уже очень полезная практика.
Почему?
Да потому что можно залить туда любую эмоцию в итоге, в том числе и неисчислимое счастье."

Метки:  

Лень и "неохота"

Вторник, 29 Мая 2012 г. 23:46 + в цитатник
Мне пришла идея о том, почему нам иногда не хочется что-то делать. Работаешь себе, а потом вдруг понимаешь, что это "скучно", "нудно", "неинтересно" и вообще нафиг это дело. Забиваешь и лежишь на печи. Работа стоит, а срок идёт. И вроде бы уже ничего не поделать с этим состоянием, кроме как действовать "через не хочу". Я заинтересовался тем, откуда берётся это состояние.

Во всём виноват ум и его компаньон - внутренний диалог. Во время исполнения привычной работы он включается и начинает говорить. Это происходит, потому что ничто его не загружает, т.к. работа привычная. А говорит он следующее: "То, что я делаю, скучно и гораздо веселее было бы бакланить. Есть тысячу дел, которые приносят больше удовольствия чем это.". А теперь стоп! Задумайтесь, откуда всё это? Это действительно ВАШЕ желание забить? Я задумался и мне показалось, что нет.

Давайте разберёмся, почему возникает эта мысль. Я думаю, что причина в следующем. Не секрет, что нас постоянно все учат: окружающие, СМИ, книги. Мы уже давно стали конгломератом чужих ценностей и инкубатором распорядков. Так вот, среди этой информации, которая уже давно прочно вшита в наш мозг, есть такой "опыт":
Делаем простую работу -> Забиваем -> Бакланим = Должен быть прирост удовольствия
Уверяю вас, подобные цепочки действий есть в "арсенале" каждого из нас. Вроде бы всё верно: да, типа был такой опыт у нас, когда мы впервые забили на работу и нам стало хорошо. Вот в школе например. Вспомните свои ощущения, когда впервые прогуляли урок. Лёгкость есть? У меня была.

Но дальше начинается путаница. На наш собственный небольшой опыт, накладываются мнения друзей, которые абсолютно идентичны этим. Затем из таких мнений формируется мировоззрение целого общества. Общество школьников, например, или студентов. Забить на уроки всегда было модно, а быть ботаном - да ему не даст никто никогда! Всё это прописывается в наш мозг и укореняется в нём в виде представлений о том, как должно меняться наше состояние. Мы убеждены, что если "забить", то станет легче и веселей. Но так было многие годы назад!!! Мы изменились, работа уже никуда не денется. Нужны новые убеждения, а их ещё нет в нашем "арсенале".

Некоторые люди предлагают переписать outdated-привычки на новые. Это не всегда удаётся, но если есть такая возможность, то лучше прошить в голову новую цепочку. Это работает. Я же предлагаю fast and dirty решение, которое тоже прекрасно работает. Суть его в том, что мы должны детектить ленивые мысли и всяческие мечты о более интересном. Что же делать когда враг обнаружен? Отсекать их? Нет, это не сработает, враг слишком глубоко засел. Поэтому мы "ударим по площадям", а именно просто напросто отключим весь внутренний диалог.
Делаем простую работу -> Задумались о лучшей доли -> Отключаем внутренний диалог = Работаем с удовольствием
Вот вам заклинание на все случаи жизни, пользуйтесь!

Примечание о внутреннем диалоге
Имеется в виду просто отключить все мысли. Инструкции придётся искать самим, потому что всё индивидуально. Один из способов: сконцентрироваться на дыхании. Просто контролировать дыхание. За то время, пока ты его контролируешь напрямую, внутренний диалог не вякнет. Другое дело что в итоге ум всё равно нас обманывает и уводит в сторону, начиная болтовню с собой. Когда же внутренний диалог отключается по настоящему, возникает новое ощущение - лёгкость. Иногда можно реально почувствовать как что-то помимо мозга вмешивается и даёт команду: "Остановить внутренний диалог". Вот к этому надо идти. А вот классический метод, для отдельной тренировки, описанный ещё у Карлоса.

Метки:  

Искусственная жизнь

Понедельник, 21 Мая 2012 г. 01:44 + в цитатник
В этом посте речь пойдёт о принципах построения искусственной жизни на основе ИИ, описанного ранее. Я обнаружил одну важную особенность: каждое действие неразрывно связано с состоянием, в котором его можно применять. Под состоянием (S) понимается все необходимые условия, в которых действие может быть исполнено. Т.е. в неоптимизированном идеальном варианте это совокупность всех параметров мира, в модели которого живёт ИИ. В оптимизированном варианте это только явно необходимые параметры без учета "погоды на Марсе".

Если ИИ нашёл новое сложносоставное действие с помощью анализа лога экспериментов, рассмотренного в предыдущем посте, то он обязан привязать это действие к набору параметров S, при которых оно может быть выполнено. Таким образом, к одному и тому же эффекту (состоянию), могут вести несколько действий, как примитивных, так и составных. Подходящее действие ИИ выбирает исходя из условий, в которых он находится.

Некоторые эффекты воздействий, которые являются целями ИИ, в течение его жизни, должны быть изначально прошиты, для того чтобы он обрёл цель после рождения и начал действовать. Другие эффекты он может сам обозначить целями в ходе движения к какому-то изначально прошитому эффекту.

Пусть A0 - множество всех действий прошитых в ИИ при рождении, а S - состояние системы. Тогда в общем виде алгоритм искусственной жизни будет выглядеть следующим образом.
PHP:

// необходимо достичь предустановленного эффекта S1
1.случайный_перебор_действий(A0S1)
// эффект S1 достигнут, а также найдены многие другие действия и сохранены в множество A1
// необходимо достичь предустановленного эффекта S2
2.случайный_перебор_действий(A0 A1S2)
// эффект S2 достигнут, а также найдены многие другие действия и сохранены в множество A2
// необходимо достичь предустановленного эффекта S1 и есть действие a75 для его достижения в условиях S75
3.случайный_перебор_действий(A0 A1 A2S75)
// достигнуты условия S75, теперь можно выполнять действия для достижения цели S1
4.выполнение_набора_действий(a75)
// эффект S1 достигнут, многие действия откорректированы
...
font>


На шаге 3 и 4 демонстрируется как ИИ выбирает промежуточный эффект S75 в качестве цели для достижения эффекта S1. Теперь о том, что такое случайный_перебор_действий(...) и как он может быть запрограммирован. Всё очень просто:
PHP:

случайный_перебор_действий
(Aмножество действийStцелевое состояние системы)
{
  
Ac найти_действия_приводящие_к_эффекту(ASt)
  
Ss извлечь_начальные_условия(Ac)
  while (
!= St && not(S in Ss))
  {
    
A0[random(LEN(A))]
    
выполнение_примитивного_действия(a)
  }
  if (
== St)
    return;
  if (
S in Ss)
  {
    
найти_действие_по_начальным_условиям(AcS)
    
выполнение_набора_действий(a)
    if (
== St)
      return;
    else
      exit(
"Критическая ошибка, обратитесь к разработчикам.");
  }
}
font>


Функция случайный_перебор_действий(...) всегда должна завершаться удачно, т.е. приводить к искомому эффекту St. Эта функция пытается найти промежуточные точки для перехода к состоянию St и далее перебирает примитивные действия до тех пор пока одна из этих точек не будет достигнута. Если таких точек не нашлось вовсе, эта функция будет делать перебор примитивных действий до тех пор пока не достигнуто условие St.

Конечно же это тоже не боевые условия и надо бы перебирать не примитивные действия, а составные, но с учётом времени их выполнения и адекватности ситуации. Кроме того, в реальных условиях надо учитывать вероятности появления того или иного эффекта при выборе действий. Всё это мы оставим на потом! В этом посте показан только принцип, по которому, на мой взгляд, можно строить искусственную жизнь с искусственным интеллектом.

Метки:  

Поиск сообщений в eugene20237
Страницы: 7 6 5 [4] 3 2 1 Календарь