?

Log in

No account? Create an account

Мы должны знать, мы будем знать

Как нарисовать стену?
horror
iodiot
Начнем с незамысловатого вопроса на gamedev.stackexchange.com:
I'm curious as to how games like Prelude of the chambered handle graphics. If you play for a bit you will see what I mean. It made me wonder how it works. (it is open-source so you can get the source on This page) I did find a few tutorials but I couldn't undertand some of the stuff but it did help with some things. However, I don't like doing things I don't understand. Does anyone know of any good sites for this kind of 2.5D? Any help is appreciated. After all I've been googling all day. Thanks :)
Aidan Mueller спрашивает, как были разработаны такие игры как Prelude of the Chambered (PoC), и просит поделиться ссылками по теме. Кстати это интересная игра сама по себе. Она была написана Нотчем, создателем игры Minecraft, за 48 часов в ходе конкурса под названием Ludum Dare. Если вы еще не играли, то крайне советую, тем более игра с одной стороны короткая, а с другой увлекательная. В свое время меня тоже заинтересовал PoC с технологической точки зрения, и я начал погружаться в дикий и опасный мир программных рендеров.

Тогда мне было интересно дойти до всего самостоятельно, и я игнорировал оригинальные исходные коды. В скором времени мне под руку подвернулась замечательная статья про рейкастинг, метод рендеринга, который позволял создать 3D перспективу на двумерной карте. Этот же подход в том или ином виде использовался в игре Wolfenstein. В тот момент мне показалось, что этого будет достаточно, чтобы реализовать все, что было в PoC. Но я ошибался.

Вся проблема заключалась в том, что рендер PoC`а поддерживал такие объекты как двери. Двери не в виде плоских спрайтов, а настоящие двери в виде блоков ассиметричной формы:

door

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

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

Что происходит? По шагам:

1) Перевод координат стены в систему координат игрока
2) Отсечение невидимых участков стены
3) Проекция стены на картинную плоскость (почти)
4) Растеризация и текстурирование стены

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

into-view-frame
2) Как рендерить участки стен, которые находятся между игроком и экраном (см. схему нижу)? Правильно: никак. Для этого и нужно отсечение. В противном случае получите ужасные графические артефакты.

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

projection

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

f1

где d — расстояние от игрока до экрана, x’ — координата крайний точки стены после проецирования, а z — глубина. В листинге за d отвечает константа nearPlaneDistance.

4) Растеризация — процесс получения растрового изображения. Стена является четырехугольником и ограничена [startX, endX] по оси oX. Соотвественно мы должны пройти в цилке все точки по горизонтали и для каждой из нее определить текущую высоту стены с помощью линейной интерполяции между lineHeight1 и lineHeight2, не забывая про тест на глубину. Остается лишь получить нужные тексель и вывести его на экран.

Важно отметить, что для рендеринга спрайтов, т.е. различных плоских объектов игрового мира типа противников, изобретать велосипед не нужно. Достаточно небольших модификаций уже готовой функции RenderWall. Правда это не касается полов и потолков, их нужно рендерить по другому принципу, но об этом в другой раз.

Mark V. Shaney
horror
iodiot
hal9000

В середине 80х пользователь по имени Mark V. Shaney оставил сообщение в Usenet группе net.singles. Это группа была посвящена любовным советам и свиданиям, обсуждению сексуальных проблем, поискам второй половинки, пустому трепу между людьми, желающими найти сексуального партнера на пару вечеров. Сообщение:
I seem to be important. For me, it would have agreed with the technical insight that is dear to me. Because of this, I have no advice for someone in that situation!

Joining Mensa was something I did him one better. I wore a dress skirt a day for one week. I did him one better. I wore a dress skirt a day for a 2 year relationship. I’m wondering if anyone else out there has ever experienced this phenomena, whether it was actually your contention that this is true for me.

I suppose it depends how you felt about someone before you became emotionally attached and therefore “safer” – not to sporting events, but to opera.

I lost 90 lbs a few months during my “flower child” days in high school where, due to her high academic standings, was shunned by many of the tube. The experience really screwed them up — if not their heads, their knees. Why does one have to be the prime measurement of manhood. No?

He was a scrawny, spastic nerd in high school, and I fantasized about such a thing. It all depends on the sidelines, listening to what makes the rest of the guys around her – suddenly finds herself in a situation where guys are asking them out!? But this can result in members of either the person of your dreams (in a larger number of males to females studying the field of engineering), the ratio of males to females is somewhere in the past. And, per the other person.

I find it hard to reconcile the notion that something or someone isn’t theirs anymore. I have a date with the woman. Subjectively, I have also acted in this weekend.
Это сообщение не было последним. Shaney начал оставлять ответы в самых разных темах с завидной регулярностью. Некоторые находили его сообщения абсурдными, другие — забавными, а самые отчаянные пытались найти в них тайный смысл, но мало кто догадывался о реальном положении вещей. Shaney не был человеком. Shaney был ботом, созданным тремя изобретателями из Bell Labs: Брюсом Эллисом, Робом Пайком и Доном Митчеллом. Бот анализировал сообщения, которые появлялись в группе net.singles, и хитрым образом всегда находил что ответить. Даже неискушенный человек из мира IT должен понимать, что проблема искусственного интеллекта является открытой, тем более она была открытой в середине 80х и НЕЛЬЗЯ ПРОСТО ТАК ВЗЯТЬ И НАПИСАТЬ ИИ, который бы по утрам говорил тебе:

  — Just what do you think you're doing, Dave?

Но все оказалось много проще. Даже само имя бота содержало ответ. “Mark V. Shaney” — это игра слов и производная от “Markov Chain”. Марковский процесс. Принцип работы бота был крайне прост. Shaney обучался, последовательно читая английский текст. Он брал первые два слова, и использовал их конкатенацию в качестве ключа таблицы, а третье слово добавлял в список возможных значений. Затем перемещался на одно слова вправо и так до самого конца. Секрет успеха заключался в том, что многие пары слов встречались многократно в тексте, и генератор выбирал случайным образом среди списка значений, используя последее и новое слова в качестве следующего ключа. Слова заносились в таблицу с пунктуацией, поэтому Shaney был способен генерировать полноценный, с первого взгляда, английский текст. Мало того, иногда он рождал нетленные афоризмы. Возможный вариант обучения (powered by asciiflow.com): 
       +------------------+                   +------------------------+
       | See   you   next | Wednesday     See | you   next   Wednesday |
       +------+-----------+                   +----+-------------------+
              |                                    |
              |                                    |
              |                                    |
              |                                    |
              |        +------------+              |         +-------------+
              |        |See+you     |              |         |you+next     |
              +------->|------------|              +-------->|-------------|
                       |next        |                        |Wednesday    |
                       +------------+                        +-------------+
Я написал свой вариант Mark V. Shaney и скормил ему книгу Грега Игана «Диаспора». Результаты не заставили себя ждать:
Riemannian space: A Riemannian space is perpendicular to the electron.
No holes, no joins -- just a surface with no obvious clues for anyone.
А вы тоже подумали о Яндекс.Рефератах? Здесь можно посмотреть мою реализацию на C#

Untitled

Питер Уоттс, «Ложная слепота»
horror
iodiot
33072

Как и положено крутой фантастике, история начинается с тяжелого пробуждения после гибернации. Экипаж состоит из полуживых говорящих кусков мяса и… вампира! Вампира? Да, вампира, получите и распишитесь. Кровный враг человека и капитан в одном лице. Новое слово в твердой НФ. Если раньше вы стороной обходили забавные дискуссии школьников о франшизе «Сумерки», то теперь можете смело считать себя тоже в теме. Ведь, как и любой другой добропорядочный вампир, наш упырь аскетичен и боится прямых углов с распятиями. А главный вопрос: зачем? Неужели в мире будущего не нашлось более подходящей и правдивой замены на роль капитана? Тем боле автор сделал вампира такой вещью в себе, из ниоткуда в никуда. Поставив на то, что эволюция на пару с генетикой способна породить созданий и похлеще, к примеру, болтунов из «Роршаха». Но меня это мало успокаивает.

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

В романе даже есть примечание, состоящее из 144 пунктов! Редкая научная работа может похвастаться столь объемной библиографией. И опять главный вопрос: зачем? Как минимум, это перебор. В «Ложной слепоте» плотность интересных идей на страницу текста много меньше, даже без учета того что львиная доля размышлений в художественном романе по-хорошему должна быть авторской. Один из основных источников, по моему мнению, идет под номером двадцать два — книга Оливера Сакса «Человек, который принял жену за шляпу». Он же вероятно дал и название роману. Сакс — известный нейропсихолог, который в нескольких книгах описал истории болезней своих знаменитых пациентов. Подобные расстройства испытывает и экипаж корабля на орбите «Большого Бена». Только Уоттс в отличие от Сакса отказывается последовательно рассказывать, что же происходит с его героями. Лишь скудные ремарки: один галлюцинирует, второй действует но не осознает, третий видит но не понимает. При этом автор жонглирует заимствованными медицинскими терминами, бессмысленно и беспощадно. Это как пример.

Основные сюжетные повороты — по лекалам. Хоть отправляй во французскую палату мер и весов в качестве эталона: непонятные объекты в небе → экспедиция → контакт → выводы. Даже есть второстепенная линия с несчастливой любовью. Но Уотсс прячется в деталях.

Кажется, автор выдумывал свой мир будущего от противного. Чтобы было не как у других и современно. И надо признать у него это получилось вполне правдоподобно. 65536 зондов в небе (программисты в восторге), двигатели на антивеществе, облако Оорта, субкоричневый карлик, орбитальная внеземная цивилизация. Отдельным пунктом хотел бы отметить разборки экипажа с магнитными полями и радиацией. Эти пассажи практически бесподобны.

Но в целом повествование хромает, и дело даже не в суровых стилистических изысканиях, а скорее где-то в связке текст-смысл. Экипаж не мог понять общую суть сообщений «Роршаха». Я же в свою очередь иногда не мог осознать элементарные вещи: где происходят события, что делают герои, зачем они это делают, что у них на уме, их мотивы, переживания. Черт возьми, я и по прочтению не могу уверенно сказать сколько человек было на борту или как они выглядели. В тяжелые минуты повествование вообще превращалось в кучу, где смешались люди, кони.

Что же удалось? Безусловно, внеземная цивилизация, самобытная и самодостаточная. Может только ради нее и стоило пробраться через пару-тройку сотен страниц неоднозначного текста. «Роршах» витает над ущербной звездой, просит людей убраться прочь и тихо черпает массу из аккреционного диска. Никакого обмена знаниями, никакого контакта, лишь занимательные гипотезы о природе сознания и разума, о его необходимости и бесполезности. В общем, полное фиаско, как говорил Лем. И это прекрасно.

Кто-то говорит о смерти твердой НФ и называет «Ложную слепоту» глотком свежего воздуха. Но мне кажется, книга Уоттса — всего лишь небезынтересный роман с огромными организационными проблемами. А смерти нет и не может быть, по крайней мере пока живут и дышат такие писатели как Иган.

Стоит отметить, что книжная серия «Сны разума» получается неубедительной. Непосредственно я познакомился только с полуфентезийным «Эйфельхаймом» Флинна и неровным «Счетом по головам» Марусека. Но есть серьёзные сомнения и по поводу «Спина» Уилсона и «Пустоши» Теплякова.

Originally posted here.