Главная | Форум | Мой профиль | Выход | RSS
Меню сайта
Мини-чат
200
Наш опрос
Расширение спектра деятельности. Тоесть принимать и по возможности помогать не только Ultimate 3D
Всего ответов: 298
Кабинет

Логин:
Пароль:
Поиск
Календарь
«  Апрель 2024  »
ПнВтСрЧтПтСбВс
1234567
891011121314
15161718192021
22232425262728
2930
Архив записей
Наши друзья
  • Официальный cайт U3D
  • Лучший сайт по GM
  • Сайт по геймдеву
  • Статистика

    Онлайн всего: 1
    Гостей: 1
    Пользователей: 0
    Мы рады приветствовать Вас на русскоязычном официальном сайте игрового движка Game Maker+Ultimate3D. Этот сайт создан для всех тех, кто хотел бы своими силами создать хотя бы одну компьютерную 3D игру, но не знает, как это сделать и с чего начать.Вы всегда хотели заняться разработкой компьютерных игр, но не знали как?Тогда вы попали по адресу. Game Maker с Ultimate3D это микс, который позволит делать захватывающие компьютерные игры с неограниченными возможностями. Так же есть форум на котором можно задовать свои вопросы по Ultimate 3D!

    Рендерер ландшафта


    Рендерер ландшафта может использоваться, чтобы создать гигантские ландшафты от карт высоты. Это использует самые эффективные методики для того, чтобы выполнить большие детальные ландшафты доступными. Их называют geo-mip-mapping и текстурируют splatting. Так как трудно понять, как использовать рендерер ландшафта правильно, не зная, как эти методики работают, я собираюсь объяснить их теперь.



    Geo-mip-mapping и текстура splatting
    Так, каков geo-mip-mapping? Это - методика, используемая, чтобы создать различные уровни деталей для ландшафтов эффективно. Ландшафт будит разбиение в несколько квадратных элементов мозаичного изображения. У каждого из этих элементов мозаичного изображения есть пять различных LoDs со счетом треугольника в диапазоне от 512 до 2. Из-за эффективной структуры LoDs все они могут использовать тот же самый буфер вершины. Следующая графика иллюстрирует, как различные LoDs смотрят.


      

    В зависимости от различия высоты элемента мозаичного изображения и расстояния на камеру, Окончательную трехмерный, решит, какой уровень деталей должен использоваться для того, чтобы выполнить элемент мозаичного изображения. Это критическое разнообразие LoDs делает рендерер ландшафта невероятно эффективным. Одна проблема, с которой Вам противостоят часто, выполняя ландшафт, как получить хорошие текстуры для ландшафта. У каждой части ландшафта должен быть различный цвет, но текстура, которая покрывает целый ландшафт, была бы или чрезвычайно большой или чрезвычайно недетальной. Ни один не желателен. Одна методика, чтобы избежать этого является использованием карты деталей, но это не выглядит очень хорошим.

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




    Текстура splatting дает Вам возможность сделать Ваш просмотр ландшафта действительно детализированным и живым. Вы можете использовать каменную текстуру для наклонов и травы или текстуры грязи для плоских областей. Кроме того, Вы можете поместить визуальные помехи в пики Ваших гор и продолжиться, но не в последнюю очередь Вы получаете возможность использовать отдельную текстуру для путей, на которых может идти символ. Отметьте, что текстура splatting требует поддержки много текстурирования по крайней мере с двумя текстурами. Это означает, что возвращаемое значение GetSimultaneousTextureCount () должно быть> =2.



    Используя рендерер ландшафта
    Используя ландшафт рендерер действительно легок. Трудная вещь делает разбросанное, высоту и альфа-карты (есть программы, чтобы сделать это). Но это не тема прямо сейчас. Здесь Вы узнаете, как создать ландшафт, и как установить различные текстуры для этого. Как с любым другим объектом в Окончательном трехмерный, ландшафт требует своего собственного объекта Game Maker. И снова Вы должны установить несколько переменных прежде, чем создать ландшафт. Вот список их:

    x, y, z -Начало координат ландшафта. У каждого пункта на ландшафте будут x-, y-и z-координата, это выше чем значение соответствующей переменной.

    height_map -Файл, который содержит карту высоты, которую Вы хотите использовать для того, чтобы создать ландшафт. Это могло быть, например, "gfx/TerrainHeightMap.png". Карта высоты может быть полутоновой, но если Вы нуждаетесь в большей точности, Вы можете также использовать все каналы, чтобы определить высоту. Формула, которая используется, чтобы добраться от R, Г, B, цвета с каждым значением в диапазоне от 0 до 255 к высоте вершины, является z+height * (R*2^24+G*2^16+B*2^8+A)/2^32.

    tile_count_x, tile_count_y -Число элементов мозаичного изображения вдоль оси X и оси Y. Они - два из трех важных размеров, которые дают размер ландшафта. Они также определяют, насколько детальный ландшафт будет и сколько вычислительное время и память будут требоваться для того, чтобы выполнить и создать его. Так как ландшафт составлен из действительно сложной и детальной геометрии, Вы не должны использовать слишком высокие значения здесь. 100*100 уже было бы очень большим. Его геометрия взяла бы оперативную память на приблизительно 57 Мбайт.

    tile_size -Это - третье значение, это важно для размера ландшафта. Это дает размер вдоль x-и оси Y каждого элемента мозаичного изображения в мировом пространстве. Так как элементы мозаичного изображения являются всегда квадратными, это - только одно значение.

    height- Высота ландшафта. Черный пиксел в карте высоты привел бы к z-позиции ландшафта, это равно значению переменной z, в то время как белый пиксел в карте высоты привел бы к z-позиции, это равно z+height.

    base_texture -Строка, дающая файл, который содержит первую текстуру, которая должна быть применена к ландшафту. Эта текстура не нуждается в альфа-карте, так как она не покрывает никакую другую текстуру.

    wrap_count_x, wrap_count_y -Счет обертки вдоль x-и оси Y для первой текстуры. Счет обертки - значение, которое определяет, как часто текстура должна быть повторена. Обычно значения для этих переменных весьма подобны тем, Вы установили для переменных tile_count_x и tile_count_y.

    (дополнительный) terrain_lod -Уровень деталей разлагает на множители для ландшафта, который влияет на путь, Окончательный трехмерный, выбирает LoDs, выполняя элементы мозаичного изображения. Это значение является дополнительным, таким образом Вы не должны настраивать его. В этом случае Окончательный трехмерный будет использовать 1 как коэффициент LoD. Если Вы установите значение ниже чем 1, то выше LoDs будет использоваться, если Вы введете более высокое значение, понизитесь, то LoDs будет использоваться.

    (дополнительный) light_map_resolution -Разрешающая способность, которая должна использоваться для световой карты (см. ниже для получения дополнительной информации о световой карте). По умолчанию это 256. Одна световая карта используется для законченного ландшафта. Значение для этой переменной должно быть мощностью два.

    (дополнительный) alpha_map_resolution-Разрешающая способность, которая должна использоваться для альфа-карты каждого элемента мозаичного изображения. По умолчанию это 32. У каждого элемента мозаичного изображения ландшафта есть свой собственный набор альфа-карт, таким образом большие значения для этой переменной приведут к очень сильному использованию памяти. Хорошее значение для этого обычно находится где-нибудь вокруг 2*light_map_resolution / (tile_count_x+tile_count_y). Значение для этой переменной должно быть мощностью два.



    После установки этих переменных Вы можете назвать CreateTerrain () однажды создать ландшафт и связать это с объектом, которым была вызвана функция. Затем Вы должны добавить другие текстуры к ландшафту. Если нет никаких других текстур, которые должны быть применены, Вы только должны назвать ApplyTerrainTextures (). Так как ландшафты - очень статические объекты, Вы не должны поместить Шаг () в случай шага на сей раз. Однако, Вы все еще добрались, чтобы поместить, Разрушают () в разрушить случай. Если Вы хотите использовать больше чем одну текстуру, используя текстуру splatting, Вы должны поместить несколько других вызовов функции между звонками в CreateTerrain () и ApplyTerrainTextures (). Так как каждая текстура покрывает текстуры, которые были применены перед нею, заказ дел вызовов функции. Вот функция:

    Эта функция добавляет текстуру к ландшафту, которым это называют, используя текстуру splatting:

    AddTerrainTexture ( DiffuseMap, AlphaMap, WrapCountX, WrapCountY, AlphaMapChannel ) 

    DiffuseMap -Строка, дающая файл, который содержит разбросанную карту, которую Вы хотите добавить к ландшафту.

    AlphaMap -Строка, дающая файл, который содержит альфа-карту, которую Вы хотите использовать.

    WrapCountX, WrapCountY -Счет обертки вдоль x-и оси Y для этой разбросанной карты. Счет обертки - значение, которое определяет, как часто текстура должна быть повторена. Чтобы сделать это немного менее очевидным, что текстуры повторены, Вы должны использовать различные счета обертки для различных текстур.

    AlphaMapChannel -Канал альфы отображает файл, от которого должна быть взята информация. Это может быть 0, чтобы использовать яркость (для полутоновых альфа-карт), 1, чтобы использовать красный канал, 2, чтобы использовать зеленый канал, 3, чтобы использовать синий канал или 4, чтобы использовать альфа-канал. Благодаря этому параметру один альфа-файл карты может содержать альфа-карты для множественных разбросанных карт.



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

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

    Эта функция возвращает высоту данного объекта ландшафта в данной позиции. Очень немногим требуется вычислительное время.


    GetTerrainHeightAtPos ( TerrainID, X, Y ) 

    TerrainID -Идентификатор ландшафта возражает, от которого Вы хотите восстановить значение высоты. 

    X, Y -Позиция, в которой Вы хотите, чтобы высота была определена.



    Эта функция возвращает интенсивность данной текстуры в данной позиции на данном ландшафте. Возвращаемое значение - реальное значение в диапазоне от 0 до 1, где 0 средств, что текстура не может быть замечена в этой позиции и 1 средстве, что текстура - единственная, которая может быть замечена в этой позиции.

    GetTextureStrengthAtPosition ( TerrainID, TextureIndex, X, Y ) 

    TerrainID -Идентификатор ландшафта возражает, от которого Вы хотите восстановить силу текстуры.

    TextureIndex -Индекс текстуры Вы хотите получить информацию о. 0 обращается к основной разбросанной карте, 1 обращается к первой добавленной текстуре и так далее.

    X, Y -Позиция, в которой Вы хотите, чтобы сила текстуры была определена.



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



    Вычисление световой карты
    Если Вы уже создали некоторый ландшафт, Вы, возможно, обратили внимание, что это не получает литерал источниками освещения. Вы будете рады об этом; это выглядело бы ужасным, если бы освещение вершины использовалось, потому что счет вершины элементов мозаичного изображения изменяется всякий раз, когда LoD изменяется. И так как человеческий глаз очень чувствителен к внезапным изменениям, которые не выглядели бы хорошими вообще. По этой причине ландшафты используют световую карту вместо этого. Световая карта - текстура, которая отображена по целому ландшафту с мультипликативной операцией текстуры. Отметьте, что это требует поддержки много текстурирования с тремя текстурами, таким образом возвращаемое значение GetSimultaneousTextureCount () должно быть> =3.

    Окончательный трехмерный вычисляет световую карту автоматически. Вы только должны сказать это, какие источники освещения должны использоваться для того, чтобы создать световую карту. Часто не хорошо использовать источники освещения, которые двигаются много, потому что перевычисление световой карты в каждом отдельном кадре берет довольно много вычислительного времени. Вместо этого Вы должны использовать только источники освещения, которые не изменяются быстро. Я рекомендую использовать часть кода, который делает Окончательным трехмерный, часто повторно вычисляют световую карту (например, однажды секунда). Вот функция, которую Вы должны сделать Окончательным трехмерный, вычисляют световую карту.

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

    CalculateTerrainLightMap (LightSourceID1, LightSourceID2..., LightSourceID10 ) 

    LightSourceID1, LightSourceID2..., LightSourceID10 -Игровые идентификаторы Производителя источника освещения возражают, что Вы хотите использовать для того, чтобы вычислить световую карту. Если Вы поместите 0 для всех их, то Окончательных трехмерный будет использовать все источники освещения, которые являются частью сцены.



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

    Эта функция установит текстуру как таможенную световую карту.

    SetCustomTerrainLightMap ( TextureIndex ) 

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



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

    Эта функция поднимает или понижает ландшафт в окружении данной позиции.

    DeformTerrain ( DeformationCenterX, DeformationCenterY, DeformationRadius, RaiseLevel ) 

    DeformationCenterX, DeformationCenterY -Начало координат деформации в мировых пространственных координатах. Это - позиция, в которой деформация будет максимальна. 

    DeformationRadius -Радиус вокруг деформации центрируется, в котором будет искажен ландшафт.

    RaiseLevel -Количество, которым ландшафт будет поднят (позитивное значение) или пониженный (отрицательная величина).

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




    Этот метод приводит к очень хорошим сферическим кратерам. Достаточно эффективно быть названным во время игровой игры, но это нельзя назвать каждым шагом или так же частое. Отметьте, что это не может понизить ландшафт ниже z и не может поднять ландшафт выше z+height. Если Вы используете это, Вы должны удостовериться, что есть некоторое пространство, прежде, чем эти пределы будут достигнуты.

    Рекомендуется не использовать то же самое значение для параметров DeformationRadius и RaiseLevel каждый раз, когда Вы называете это. Вы должны добавить беспорядочно вычисленное значение. Причина, почему это необходимо, состоит в том, что Окончательный трехмерный также изменяет высоту и нормальную карту, которая используется внутренне, чтобы вычислить световую карту. Если Вы используете те же самые параметры каждый раз, когда ошибки округления могут всегда происходить в том же самом месте. Это приведет к странным эффектам в автоматически вычисленной световой карте. Это смотрит, как будто лестница была создана в ландшафте. Случайные значения для параметров - самый простой способ избежать этого (например, Вы могли пройти 150+random (30) для DeformationRadius).

    Теперь, что случается, если Вы хотите сохранить игру после использования DeformTerrain (...)? Все эти кратеры могут быть важными для gameplay, таким образом они определенно должны быть сохранены среди с другими данными. Самый простой способ сделать это сохраняет карту высоты ландшафта. Окончательные трехмерные предложения простая функция с этой целью.

    Эта функция сохраняет карту высоты объекта ландшафта, которым это называют к данному файлу. Все изменения, которые были произведены в ландшафте через DeformTerrain (...), включены в эту карту высоты. Карта высоты всегда - карта высоты шкалы яркости:

    SaveTerrainHeightMap ( OutputFile ) 

    OutputFile -Файл, к которому должна быть сохранена карта высоты. Расширение этого файла должно быть или.bmp или.dds.



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



    Создавание переводных картинок ландшафта
    Часто необходимо покрыть ландшафт другими текстурами в некоторых местах. Например в местах, где взрыв случился, текстура с сожженной грязью должна появиться. Текстурирование самого ландшафта не может быть изменено, но это возможно, чтобы создать оверлейные программы на ландшафте, которые покрывают это отлично и используют желательную текстуру. Эти оверлейные программы называют переводными картинками ландшафта. Окончательные трехмерные особенности автоматическое создание переводных картинок ландшафта. Переводные картинки ландшафта - образцовые объекты, и поэтому они требуют своего собственного объекта Game Maker. В этом объекте Вы должны установить четыре переменные перед созданием переводной картинки:

    terrain_object -Идентификатор ландшафта возражает, на котором Вы хотите создать переводную картинку.

    center_x, center_y -Средняя позиция переводной картинки в мировом пространстве. 

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

    После установки этих переменных Вы можете назвать CreateTerrainDecal () однажды создать переводную картинку. Как обычно Вы должны поместить, Разрушают () в разрушить случае. Шаг () может быть помещен в случай шага, но обычно это не необходимо, так как переводные картинки ландшафта статичны. Замена переменных преобразования не обычно желательна. Переменные x, y, z, rotx, roty и rotz должны равняться нулю и scalx, чешуйчатому, и scalz должен равняться тому. Иначе ландшафт будет в неправильном месте.

    Созданный образцовый объект может быть изменен точно так же как любой образцовый объект. Вы можете использовать SetMaterialStageTexture (...), чтобы поставлять это текстурой, Вы можете использовать SetModelMaterial (...), чтобы изменить его цвет, и Вы можете даже изменить его геометрию образцовыми функциями манипуляции. У объекта есть множественные уровни деталей, чтобы достигнуть этого, это соответствует форме ландшафта должным образом, независимо от того какой LoD эта часть ландшафта в настоящее время использует. Это работает весьма хорошо, но тем не менее может случиться, что части переводной картинки иногда покрываются ландшафтом. Если дело обстоит так Вы можете увеличить значение переменной z немного и назвать Шаг (). Это установит проблему. Вам решать найти совершенное значение для z. Это зависит от ландшафта и от размера переводной картинки.

    После его создания переводная картинка ландшафта полностью независима от ландшафта, для которого она была создана. Это не будет изменяться, если ландшафт будет искажен или разрушит. По этой причине Вы должны обновить это, если это должно адаптировать к измененному ландшафту. Чтобы сделать так только требование Разрушают () и CreateTerrainDecal (). Если Вы изменили переводную картинку ландшафта после ее создания, Вы должны будете сделать эти изменения снова.



    Создавание высоты и альфа-карт
    Для создания высоты и альфа-карт, я могу рекомендовать очень удобную и дружественную программу под названием Земной Скульптор. Его использование действительно интуитивно, и это идет с детальным руководством. К сожалению незарегистрированная версия немного ограничена. Как только Вы проектировали некоторый ландшафт в Земном Скульпторе, Вы можете сохранить его. Программа тогда сохранит карту высоты, сжатую альфа-карту, и световую карту. Карта высоты может использоваться Окончательным трехмерный, как. Вы можете также использовать световую карту как таможенную световую карту, если Вы хотите к. Альфа-карта может также использоваться, поскольку она экспортируется благодаря параметру AlphaMapChannel AddTerrainTexture (...).

    Другие бесплатные программы для создания ландшафтов - Terragen, Мировая Машина, Terranim8or и L3DT. Объяснение того, как экспортировать карты высоты от Terranim8or доступно на Окончательном трехмерном Семействе, и обучающая программа на использовании L3DT Руудом v A может быть найден в Окончательной трехмерной Wiki.


    © Shkola Ultimate 3D . Все права защищены.Макарский Роман (ASD_W_GAMES) And Беляков Вячеслав (ZXC76)
    Author:
    © Christoph Peters. Some rights reserved.


    Школа Ultimate3D 2009-2010 год