Вопросы по программированию, Конкретнее - по генерации уровня |
Здравствуйте, гость ( Авторизация | Регистрация )
Перед публикацией рекомендуем ознакомиться с правилами раздела
Вопросы по программированию, Конкретнее - по генерации уровня |
27.07.2013, 21:28
Сообщение
#1
|
|
Геймер Репутация: 19 Группа: Участник Сообщений: 105 Награды: 2 Регистрация: 12.05.2010 |
Здравствуй Gameinator!
Делаю свою игру. Моделирование, создание музыки, рисование - все это более менее ок, а вот с программированием все не так гладко... К примеру досихпор не знаю как делать интерполяцию (линейную и по безье (или как оно там) ). Но основная проблема - генерация уровня. Гугл не помогает. Посоветуйте нормальную литературу (желательно на русском, просто на английском запарюсь читать) о алгоритмах генерации. И.... эээ.... ну чтоб там больше картинок было, чем зубодробительных формул. У меня аллергия на математические формулы, даже на самые простейшие. Можно в псевдокоде. Заранее спасибо! Сообщение отредактировал Dereline - 27.07.2013, 21:32 |
 
|
|
|
|
27.07.2013, 22:06
Сообщение
#2
|
|
Доктор Игровых Наук Репутация: 544 Группа: Участник Сообщений: 3657 Награды: 9 Регистрация: 12.07.2007 |
Во первых какой язык и какой рендер(DX или GL)? Во вторых что подразумевается под "генерацией уровня", типа как в диабло2 или path of exile ? А в третьих
Цитата И.... эээ.... ну чтоб там больше картинок было, чем зубодробительных формул. У меня аллергия на математические формулы, даже на самые простейшие. , программирование нельзя выучить не зная матана, начиная от простейшего до самого сложного, также просто не существует книг в картинках, максимум увидишь "треугольнички и квадратики" которые рисовал в школе и то ооочень редко.
|
 
|
|
27.07.2013, 22:14
Сообщение
#3
|
|
Геймер Репутация: 19 Группа: Участник Сообщений: 105 Награды: 2 Регистрация: 12.05.2010 |
Во первых какой язык и какой рендер(DX или GL)? Во вторых что подразумевается под "генерацией уровня", типа как в диабло2 или path of exile ? А в третьих ЦитатаИ.... эээ.... ну чтоб там больше картинок было, чем зубодробительных формул. У меня аллергия на математические формулы, даже на самые простейшие., программирование нельзя выучить не зная матана, начиная от простейшего до самого сложного, также просто не существует книг в картинках, максимум увидишь "треугольнички и квадратики" которые рисовал в школе и то ооочень редко. Рендер тут не важен (если так интересно - DirectX). Под генерацией уровня я подразумеваю создание меша.... ну скажем здания с корридорами и комнатами, а также создание точек где будет стоять свет и статик модели. Но для начала неплохо бы просто меш. Нельзя выучить программирование говоришь? А что если я тебе скажу, что я его уже знаю? Без знания матана можно выучить программирование (и даже C++, представь себе!), просто для этого надо иметь хорошое знание информатики. С DirectX API проблем нет, есть проблема с алгоритмом генерации. Книжки в картиночках существуют . Но вообще в данном случае это можно читать как "Чтоб объясняли доходчиво". Сами картиночки необязательны, если все и так понятно. |
 
|
|
27.07.2013, 22:28
Сообщение
#4
|
|
Высший Игровой Бог Репутация: 1747 Группа: Супермодератор Сообщений: 12594 Награды: 15 Регистрация: 05.11.2009 |
Тема перемещена в более подходящий раздел.
-------------------- |
 
|
|
27.07.2013, 22:40
Сообщение
#5
|
|
Доктор Игровых Наук Репутация: 544 Группа: Участник Сообщений: 3657 Награды: 9 Регистрация: 12.07.2007 |
Dereline, в таком случае объясняю что генерации как таковой не существует до сих пор ни в одной игре кроме майнкрафта но там эта задача сильно упрощена т.к. весь мир состоит в прямом смысле из квадратов и отпадает необходимость использования мешей. Та что присутствует в некоторых играх работает по принципу заранее рассчитанных условий, модели(куски) рисуются заранее квадратами с подгонкой вершин друг к другу. Далее описываются условия в коде которые срабатывают из псевдослучайных чисел. Конкретно небольшой пример:
есть 3 меша(как бы то нибыло нарисованные квадратами), Пусть первый будет нижней гранью карты и имеет число 1 и может быть пристыкован к любой своей части, 2й меш располагается впритык к 1ому мешу с любой из 4х сторон а также может быть пристыкован сам к себе, 3й меш подогнан только для стыка со 2м мешом и может быть пристыкован сам к себе. Задаем константные размеры максимального количества кубов в нашем случае 10х10 , высоту не учитываем. Далее задаем условия вероятности создания каждого меша с учетом его расстояния до любого края т.е. от 0-10х до 0-10у. к примеру для меша 1 вероятность создания на крайних координатах = 1 и чем ближе к центральной точке 5,5 вероятность уменьшается. 2й меш создается только при условии пристутсвия рядом меша 1 или 2.. У меш 3 вероятность создания будет равна 1 только в центре, чем ближе к краю тем меньше вероятность, может быть создан только при наличии вокруг мешей 2 и 3. Во избежание не стыковок карту генерировать необходимо методом улитки т.е: 1-2-3 8-9-4 7-6-5 Сгенирированная карта по условиям будет выглядеть примерно так: 1-1-1-1-1-1-1-1-1-1 1-1-2-2-1-1-1-1-2-1 1-2-1-2-2-2-2-2-1-1 1-2-2-3-3-2-2-1-2-1 1-1-2-3-3-2-3-2-1-1 1-1-1-2-3-3-2-2-2-1 1-1-1-1-2-2-1-1-1-1 1-1-1-1-1-2-1-2-2-1 1-2-1-1-1-1-1-1-1-1 1-1-1-1-1-1-1-1-1-1 PS: алгоритм который описал очень сильно упрощен, но идея понятно я думаю. |
 
|
|
27.07.2013, 22:46
Сообщение
#6
|
|
Архимагистр Игры Репутация: 364 Группа: Забанен Сообщений: 2765 Награды: 1 Регистрация: 06.06.2008 |
Где-то пацаны из Крайтека публиковали видео-демо и, кажется, пейпер на тему процедурной генерации города. А вообще гугл тебе поможет.
З.Ы. Такие темы лучше создавать на геймдев.ру -------------------- Играть в шутеры на консолях - все равно, что заниматься сексом с резиновой женщиной
|
 
|
|
27.07.2013, 23:07
Сообщение
#7
|
|
Геймер Репутация: 19 Группа: Участник Сообщений: 105 Награды: 2 Регистрация: 12.05.2010 |
Спасибо за объяснение, хотя вопрос все еще остается открытым. Я думал сделать примерно так:
1) В зданий 3 этажа. Константа. В начале всей генераций рандомно определяем точки лестниц, чтобы не усложнять алгоритм. 2) Алгоритм работает только с одним этажом. Все начинается в классе LevelMap который генерирует изображение где-то 256х256 px. Каждый пиксель привязан к уникальному "блоку": т.н. кусочек интерьера (это может быть корридор, часть комнаты, холл, особая комната, корридор с расположеной ловушкой, лестница и еще много много всего). Все это описано в отдельном enum'е и дальше уже работаем с именоваными константами. Алгоритм генерирует три карты. Дальше идем в класс LevelMesh. 3) LevelMesh создает корридоры и комнаты на основе сгенерированых карт. У него довольно много задач, одна из них: определение крайнего пикселя комнаты и создание соответственно стены. Какбы то нибыло результатом его является скомплектованый меш. 4) LevelLight создает свет на основе сгенерированных карт. Думаю что меш не понадобится. Результатом работы его является массив структуры, которая содержит в себе: Point3D (координаты света) и дифузный цвет. 5) LevelStatic создает модели на основе сгенерированых карт. В корридорах проще всего, а вот в комнатах по-сложнее (есть несколько видов комнат, но об этом заботится LevelMap). Кстати, модели светильников (и еще пара вещей) идут в префабе вместе с светом, так что генерация их не требуется. Вся эта радость записывается где-нибудь на диске в бинарном виде. Когда игрок появляется на уровне, то в определеном радиусе от него начинаем спаунить модели и свет (уровень большой, а компьютер задолбается спаунить все в один момент). Что касается модели то я думаю тут поидут стандартные оптимизованые методы отсчечения невидимых граней, которые идут вместе с большинством игровых движков. Вот как то так. Сыро, недоработано, но как-то так. Жду Где-то пацаны из Крайтека публиковали видео-демо и, кажется, пейпер на тему процедурной генерации города. А вообще гугл тебе поможет. У меня не город, у меня здание. И там еще одна фишка будет, но я пока про неё помолчу, мне бы хотя бы простую генерацию сделать. Гугл не помог, я к нему сразу пошел. Сообщение отредактировал Dereline - 27.07.2013, 23:19 |
 
|
|
27.07.2013, 23:46
Сообщение
#8
|
|
Доктор Игровых Наук Репутация: 544 Группа: Участник Сообщений: 3657 Награды: 9 Регистрация: 12.07.2007 |
Dereline, на самом деле лучше не заморачиваться с генерацией, подскажу способ для описанного тобой случая:
Моделишь к примеру стол, делаешь на нем к примеру 6 костей "хелперов" в местах где может что либо лежать, т.е. стоять лампа, книга, бумажка. В коде обычное случайное число в диапазоне 1-6 и ограничение на количество задающиеся опять же случайным числом от 1до 3х допустим. При генерации создается меш стола и случайными числами количество и тип предметов на нем. Дальше моделишь комнату из 4х стен и потолка, также расставляешь "хелперы" для спавна мебели, света и т.д. комнат можно намоделить пару видов с окнами и без, с разными дырками для дверей. В ней также случайными числами спавнишь мебель. Далее моделишь несколько видов коридоров таким же способом и лестницы и все необходимое. Точкой старта можно сделать к примеру комнату со входной дверью которых тоже несколько типов. Дальше все подинится великому рандому но который уже подконтрольный тебе. В итоге у тебя будет контролируемая иерархия которую можно будет легко проверить и она не будет ресурсоемкой при генерации. Также минимальными будут "сюрпризы" генерации. При особой прытке можно генерить даже текстуры путем наследования начального типа. К примеру Если самая первая сгенерированная комната имеет стены с текстурой А то все остальные могут быть только А-А , А-Б но не Ч-А или М-П, также и мебель может быть использована только относящаяся к типу А и т.д. и т.п.. По моему скромному мнению без такой мнимой генерации как я описал будет почти нереально точно рассчитать положение света, темболее сделать грамотное отсечение поверхностей. В описанном мной случае можно расставить заранее для каждого типа комнаты свои зоны видимости, возможные точки и типы света, тип мебели. В таком подходе можно обойтись и константым количеством комнат на этаж вместо размерности этажа. PS: коли дядя гугл тебе не помог то вот пара статей Сообщение отредактировал jamakasi - 27.07.2013, 23:51 |
 
|
|
28.07.2013, 00:08
Сообщение
#9
|
|
Геймер Репутация: 19 Группа: Участник Сообщений: 105 Награды: 2 Регистрация: 12.05.2010 |
jamakasi, 3 этажа тут геймплейная особенность, так что она в любом случае константа. Все таки хотелось бы сделать с учетом моей схемы или около того. Что касается хелперов для спауна моделей на поверхности стола, то я думаю, что можно просто создать префаб, который помимо самого стола будет содержать пустышки расположенные в нужных позициях и дальше уже от них плясать (модель с костями - куча лишних проблем при импорте). Я думаю использовать unity, но еще не исключаю другие движки. Небольшая часть моделей уже сделана (достаточная чтоб тестировать игру), завтра могу показать несколько, если интересно (сижу с холоди.... ой т.е. с планшетки ).
С динамическими текстурами вопрос полностью решен - я написал несколько хороших шейдеров и сделал несколько специальных шумовых текстур. На важных моделях вообще стоят субстанцы (загуглите, афигенная вещь) которые можно менять прямо в игре. Статьи ща прочитаю, спасибо. |
 
|
|
28.07.2013, 00:20
Сообщение
#10
|
|
Доктор Игровых Наук Репутация: 544 Группа: Участник Сообщений: 3657 Награды: 9 Регистрация: 12.07.2007 |
Dereline, без хелперов будет точно почти нереально что то сделать т.к. даже если получится сделать алгоритм определения оптимальной точки в пространстве то "это" будет кушать нереальное количество процессорного времени. Вообще в случае с 3д пространством шаблонизировать придется в любом случае все. Если смотришь в сторону юнити то погугли на предмет генерации комнат и коридоров из игры SCP.
Сообщение отредактировал jamakasi - 28.07.2013, 00:20 |
 
|
|
28.07.2013, 13:41
Сообщение
#11
|
|
Мастер Игры Репутация: 248 Группа: Участник Сообщений: 1363 Награды: 4 Регистрация: 08.03.2010 |
К примеру досихпор не знаю как делать интерполяцию (линейную и по безье (или как оно там) ). При том что вы не знаете как сделать простейший Цитата Нельзя выучить программирование говоришь? А что если я тебе скажу, что я его уже знаю? Без знания матана можно выучить программирование (и даже C++, представь себе!), просто для этого надо иметь хорошое знание информатики. С DirectX API проблем нет, есть проблема с алгоритмом генерации. Математика сама по себе - это общий элемент любого программирования. Если вы не знаете математики, вы не умеете программировать. И все заявления вроде "я это уже умею" говорят лишь о том что вы всего лишь осилили синтаксис языка. Хотя для программиста синтаксис языка вообще дело десятое - на привыкание к синтаксису другого языка уходит десяток-другой минут. А математические алгоритмы остаются прежними. Собственно математика и есть основной поставщик алгоритмов. И вообще если у вас стойкое отвращение к математическим формулам - вам стОит хорошо подумать, нужно ли вам заниматься программированием. И кстати самый первый признак отсутствия опыта - новичку всегда хочется сразу получить готовенькое, а не заниматься экспериментами и исследованиями возможностей. -------------------- Набор шейдеров для S.T.A.L.K.E.R: Shadow of chernobyl: ECB-Shaderpack -
------ Продюсер электронной музыки в стиле Dark Ambient, автор саундтрека для Desowave S.T.A.L.K.E.R.: Lost Alpha. |
 
|
|
28.07.2013, 19:17
Сообщение
#12
|
|
Геймер Репутация: 19 Группа: Участник Сообщений: 105 Награды: 2 Регистрация: 12.05.2010 |
При том что вы не знаете как сделать простейший lerp - как-то странно слышать такое: Знания программирования само по себе бесполезно - оно дает возможность объяснить компьютеру чего ты хочешь на его языке. Чтобы выучить программирование необходимо знать информатику, и простую арифметику. Но чтобы создать желаемую программу нужно знать еще и специальности на которых она строится. К примеру чтобы создать программу для моделирования нужно четко понимать из чего состоят модели, какие на сегодняшний день есть эффективные способы их создания и с помощью каких методов и алгоритмов можно написать эту программу. Причем просто знания даже той математики тут недостаточно. Или вот совсем жеский пример: расчет полета ракеты. Если ты выучил программирование и знаешь математику на отлично, то этого мало, ведь надо знать сопромат, особенности топлива и какие стадий полета проходит ракета. Програмирование лишь оболочка... Когда в ВУЗах изучают программирования то они (для примера и "набивания" руки) используют программирования для решения математических задач. Я же использую программирование в основном для создания скриптов и некоторых инструментов упрощающих мне жизнь (в основном связанные с моделированием и проектированием). И математика мне тут не требуется . К чему все это я? Если вы не знаете математики, вы не умеете программировать. Да к тому, что выучить программирование математика не нужна (а нужны хорошее знания английского и информатика). Она нужна лишь как средство во время обучения. Я же смог выучить программирование без этого. Только и всего. Ну а если мне все таки потребуется какие то математические элементы то я могу взять какую-нибудь библиотеку с сети и использовать методы от туда. Теорию то я немного знаю . Но если потребуется написать собственную математическую библиотеку то тут я конечно зафейлюсь. Как в случае с лерпом, который мне нужен в немного измененном варианте. И кстати самый первый признак отсутствия опыта - новичку всегда хочется сразу получить готовенькое, а не заниматься экспериментами и исследованиями возможностей. Забавно, но именно эксперименты и исследования возможностей я обычно и делаю. Сейчас я просто решил спросить совет у форума, чтобы немного ускорить "исследование". Только и всего. P.S. Сегодня занят был почти весь день. Завтра покажу некоторые наработки по игре, если кому интересно. |
 
|
|
28.07.2013, 22:42
Сообщение
#13
|
|
Follow me: @VIGUR91 Репутация: 2821 Группа: Участник Сообщений: 10420 Награды: 9 Регистрация: 29.03.2008 |
Завтра покажу некоторые наработки по игре, если кому интересно. Естественно интересно. К тому же, надо чтобы тема соответствовала правилам раздела.-------------------- Мой ник читается как VÍGUR (с ударением на первый слог!)
Programming is like sex: one mistake and you have to support it for the rest of your life... "- Ребята, хватит. Всё. Креатива больше не надо... - Верно, согласны. Креатива больше не надо. НА СЕГОДНЯ креатива больше не надо." (с) Андрей Прохоров. |
 
|
|
28.07.2013, 22:59
Сообщение
#14
|
|
Геймер Репутация: 86 Группа: Участник Сообщений: 128 Награды: 4 Регистрация: 05.05.2012 |
-------------------- nop
|
 
|
|
29.07.2013, 13:14
Сообщение
#15
|
|
Мастер Игры Репутация: 188 Группа: Участник Сообщений: 1287 Награды: 2 Регистрация: 28.02.2009 |
программирование нельзя выучить не зная матана Ахахахахахах. Хорошая шутка. Математика сама по себе - это общий элемент любого программирования. Это очень часто используемый элемент, но не обязательный. Программирование - это, в первую очередь, логика, а уж потом математика. -------------------- yeah
|
 
|
|
29.07.2013, 16:01
Сообщение
#16
|
|
Геймер Репутация: 86 Группа: Участник Сообщений: 128 Награды: 4 Регистрация: 05.05.2012 |
Программирование - это, в первую очередь, логика, а уж потом математика. весьма распространенное заблуждение. на первом же собеседовании в сколь-нибудь солидной конторе спросят про сложность поиска в массивах и бинарных деревьях, а за одно написать оценочную ф-ию для какого-нить куска кода, и гуляй вася. -------------------- nop
|
 
|
|
29.07.2013, 16:58
Сообщение
#17
|
|
Follow me: @VIGUR91 Репутация: 2821 Группа: Участник Сообщений: 10420 Награды: 9 Регистрация: 29.03.2008 |
refuse, это смотря в каком направлении программист. Это может быть важно для низкоуровнего программера. Но у меня несколько друзей успешно работают программерами в разных направлениях (начиная от web'a на Ruby и HTML5/JS и заканчивая разработкой app'ов на Objective-C и Java для iOS и Android) без использования сложных математических алгоритмов... И при этом у себя в конторах они считаются хорошими специалистами.
Так что я скорее соглашуть с этим: Программирование - это, в первую очередь, логика, а уж потом математика. Математика нужна и полезна, но только на самом низком уровне, а на высоком хватит и умения пользоваться необходимыми библиотеками. Гораздо важнее в этой профессии, я считаю, нужно упорство, ведь реализацию математических алгоритмов можно найти за пару минут в интернете, если даже они срочно понадобятся.На этом попрошу закончить обсуждения специальности программистов, давайте по теме. -------------------- Мой ник читается как VÍGUR (с ударением на первый слог!)
Programming is like sex: one mistake and you have to support it for the rest of your life... "- Ребята, хватит. Всё. Креатива больше не надо... - Верно, согласны. Креатива больше не надо. НА СЕГОДНЯ креатива больше не надо." (с) Андрей Прохоров. |
 
|
|
29.07.2013, 18:24
Сообщение
#18
|
|
Геймер Репутация: 86 Группа: Участник Сообщений: 128 Награды: 4 Регистрация: 05.05.2012 |
VIGUR, жопокодер - не программист, не важно на каком языке он пишет (хотя среди явистов, веб-программеров и обжектив-си программеров их традиционно больше), так что не, не убедил.
по теме пока обсуждать собственно нечего, ждем наработки от тс. -------------------- nop
|
 
|
|
Текстовая версия | Сейчас: 18.04.2024, 14:19 |