Ошибка bad surface extents

Добавил: root

2013-01-05 16:41:22

1648 просмотров

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

Итак, известно, что далеко не все ошибки, имеющиеся на карте, обнаруживаются в редакторе карт при проверке на ошибки по [Alt-P]. Большинство серьезных ошибок обнаруживается только во время компиляции.

Утилиты ZHLT при наличии ошибки создают файл *.ERR, в который записывается тип ошибки, номер объекта, вызвавшего ее, а также краткое руководство по исправлению, но, естественно, на английском языке.

Содержание статьи:

ЧАСТЬ 1. Наиболее часто встречающиеся ошибки компиляции

  • Plane with no normal
  • Brush with coplanar faces
  • Leaf portal saw into leaf
  • Brush ‘outside world’
  • Mixed face contents
  • === LEAK in hull 0 ===
  • Exceeded MAX_PATCHES
  • Причины медленной работы HLVIS
  • Причины медленной работы HLRAD (проблемы с MakeScales)
  • HLRAD failled to allocate a block of memory
  • Bad Surface Extents
  • Missing [ in texturedef
  • MAX_PORTALS_ON_LEAF
  • MAX_MAP_CLIPNODES

ЧАСТЬ 1. Наиболее часто встречающиеся ошибки компиляции

1. Plane with no normal
Пример:

Entity 10, Brush 0, Side 4: plane with no normal

Entity 10, Brush 0, Side 5: plane with no normal

Данная ошибка возникает при неправильной манипуляции с вертексами. Как известно, любая плоскость определяется 3 точками. Если одна или несколько точек плоскости имеют одинаковые координаты, то это будет уже не плоскость, а линия или точка. Как исправить? Удалить неправильный объект и заменить его новым.

2. Brush with coplanar faces
Пример:

Entity 10, Brush 0, Side 5: has a coplanar plane at (-753, -9, 251), texture CA1X_CON1B

Entity 10, Brush 0, Side 6: has a coplanar plane at (-753, -32, 251), texture CA1X_CON1B

Данная ошибка возникает при неправильной манипуляции с вертексами. Давайте рассмотрим случай возникновения такой ошибки. Предположим, что на карте у нас есть такой объект (см. рис. ниже).

Пример объекта

На виде сверху (2D top) в режиме работы с вертексами объект будет выглядеть, как показано на рисунке внизу, слева. Предположим мы решили сделать из этого объекта куб. Для этого верхнюю точку (вертекс) опускаем вниз (см. рис. ниже).

Вид сверху на объект в режиме манипуляции с вертексамиНе правильное действие с вертексами

Так делать нельзя! Так как мы получаем, что на одной стороне объекта расположено 2 плоскости, а этого быть не должно. Вот как эта не правильная операция выглядит в 3-х мерном виде (см. рис. ниже).

Не правильное действие с вертексами (3D вид)

Не правильное действие с вертексами (3D вид)

Как исправить? Можно, узнав номер неправильного браша или энтити-объекта из ERR-файла с ошибкой, перейти к нему, нажав [Shift-Ctrl-G] в редакторе. При этом Вы увидите небольшое окошко (см. рис. ниже), первая строка которого позволяет перейти к определенному энтити-объекту, вторая — к брашу. Номер неправильного объекта указывается в ERR-файл в следующем виде: «Entity 10, Brush 0, Side 5….», это означает, что ошибка у 10-го энтити-объекта на 5 стороне.

Окно перехода к объекту по его номеру [Shift-Ctrl-G]

После нахождения неправильного объекта, его можно удалить, а можно попытаться исправить. В приведенном выше примере необходимо переместить верхний средний вертекс направо или налево, таким образом, мы превратим две грани, лежащие в одной плоскости, в одну (см. рис. ниже).

Перемещение вертексаПеремещение вертекса

После переноса точки Вам будет задан вопрос: «Merge Vertices?» («Совместить вершины?»), обязательно отвечайте «Да».

Вопрос: Соединить вершины? Отвечаем всегда - ДА

3. Leaf portal saw into leaf

Данная ошибка возникает, когда компилятор HLVIS пытается сравнить 2 портала (leaf portals), которые принадлежат одной видимой вершине (visibility node). Посмотрите на картинку ниже:

Нет ошибки: порталы лежат на одной прямой

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

Если возникает такая ситуация, когда два портала принадлежат одной вершине и образуют кривую линию, то получается ошибка «Leaf portal saw into leaf». Вот как это выглядит:

Ошибка: Leaf portal saw into leaf

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

Как исправить? Лучше всего загрузить карту с ошибкой и попытаться отыскать, так называемый, эффект зеркального отражения ( hall of mirrors effect ). Эта ошибка может легко вызываться тем, что координаты одного из вертексов браша немного отклоняются от координатной сетки. В этом случае проще всего пересоздать неправильный браш, но также можно попробовать использовать параметр

-full

для компилятора HLVIS, который помогает уменьшить количество возможных vis-ошибок. Время компиляции с параметром -full обычно увеличивается на 30% . R_speeds (количество полигонов) при этом остается приблизительно таким же, как и при нормальной vis-компиляции.

4. Brush ‘outside world’

Пример:

Entity 10, Brush 0: outside world(+/-4096): (-9000, -64, 216)-(9000,23,283)

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

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

5. Mixed face contents

Пример:

Entity 0, Brush 12: mixed face contents
Texture ROCK_X1 and SKY

Каждый отдельный объект в Half-Life может быть окрашен в текстуру только одного типа (например, только в текстуру воды). Например, объект, окрашенный с пяти сторон обычной текстурой, а
с шестой — текстурой воды, вызовет данную ошибку.

Всего существует несколько типов текстур, которые не могут быть нанесены на объект вместе с другими. К таким текстурам относятся: SKY, CLIP, ORIGIN и текстуры воды. А самую подробную информацию о типах текстур и их совместимости Вы можете получить из соответствующей статьи: «Типы текстур в Half-Life/CS» .

Как исправить? Перейдите к объекту, вызвавшему ошибку, по [Shift-Ctrl-G] и закрасьте его со всех сторон текстурами одного типа.

6. === LEAK in hull 0 ===

LEAK — дырка на карте. Это самая известная и, пожалуй, самая нелюбимая ошибка. А все потому, что ее трудно обнаружить и легче не допускать, чем потом часами искать (прям стихи :)

А причиной такой ошибки является дырка (зазор) на уровне. Например, есть два браша, между которыми существует зазор (по неосторожности Вы не состыковали эти браши вплотную). Эти браши могут быть, например, стенами или землей Вашей карты. При компиляции программы-компиляторы, обнаружив такую дырку, начинают думать: «А что же за этой дыркой?». Они видят зазор, а за ним ужасающая пустота :) — в итоге возникает ошибка.

Ниже на картинке мы приводим пример такой ошибки.

Одна из главных причин ошибки LEAK - дырка в уровне

Но не всегда LEAK виден так явно, как на рисунке выше. Зачастую LEAK имеет очень маленькие размеры, гораздо меньше даже 1 юнита. Особо много LEAK’ов в декомпилированных картах. Например, Вы решили немного изменить De_Dust, разумеется, декомпильнули его, затем попытались вновь скомпилировать и получили кучу ошибок LEAK.

Второй причиной вызывающей появление LEAK ошибки, является нахождение точечного энтити-объекта за пределами карты. Например, Вы сделали карту, построили вокруг нее небо и случайно поместили какой-нибудь там ambient_generic снаружи карты. В итоге получаем LEAK. Но это лучше, чем искать дырку на карте, т.к. объект найти гораздо проще.

Как исправить? Можно воспользоваться специальной утилитой LeakMarker . А можно попытаться найти LEAK при помощи самой игры. Для этого нужно скопировать файл *.PTS, который создается в директории с компиляторами при обнаружении ошибки LEAK, в директорию « cstrike/maps », где лежит Ваша недокомпилированная карта, которая тем не менее способна запускаться. Далее нужно запустить консоль и ввести: map имя_карты . После загрузки карты, пишем: pointfile .

После ввода этих команд на своей карте Вы обнаружете тонкую извивающуюся линию из черно-белых точек (см. рис. ниже).

Линия из точек, показывающая место ошибки LEAK

Эта линия располагается около места с ошибкой LEAK. Запомнив место, открываете редактор и внимательно смотрите на границы брашей, четко ли они состыкованы. Попробуйте инструментом Vertex Manipulation выровнить вершины подозрительных брашей по координатной сетке.

Если при попытке загрузить pointfile Half-Life вылетает — значит этот файл слишком большой. Придется применять другие методы.

Если ничего не помогает и найти LEAK не удается, создайте вокруг карты небо коробкой, т.е. поместите всю свою карту в большую «комнату», окрашенную со всех сторон текстурой SKY. Это поможет 100% :)

Кстати, если Вы вдруг не заметили, что компиляторы выдали ошибку и подумали, что карта нормально откомпилировалась, то обнаружить неладное можно по жутким тормозам на карте (т.к. HLVIS не успел дойти до оптимизации карты), а освещение на карте будет очень светлым и монотонным (см. рис. выше). Теней от объектов не будет, т.к. HLRAD даже не приступил к работе из-за ошибки.

7. Exceeded MAX_PATCHES

Когда начинает работу компилятор HLRAD, обрабатывающий освещение на карте, он разбивает все видимые поверхности на небольшие участки, называемые патчами (patches). Существует ограничение на максимальное количество патчей — их не должно и не может быть больше 65535.

По умолчанию размер каждого патча составляет 64х64 юнита. Если масштаб (scale) текстуры больше или меньше (речь идет не о размере текстуры, а именно о масштабе), то это сказывается на количестве патчей. Это означает, что текстура с масштабом 2, будет иметь в 4 раза меньше патчей, нежели текстура с масштабом 1.

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

Как исправить? В строку запуска компилятора HLRAD можно прописать параметр «-chop 96» или «-chop 128». Этот параметр устанавливает минимальный размер патча в юнитах. Напомним, что по умолчанию минимальный размер патча составляет 64 юнита. При установке размера патча более 96 юнитов, происходит заметное ухудшение качетсва освещения карты, может появиться эффект «лесенки» на тенях, отбрасываемых объектами.

Также для уменьшения числа патчей можно увеличить масштаб (scale) текстур, например, больших текстур на скалах или земле. Большие по масштабу текстуры создают гораздо меньше патчей. Ну, а если небо у Вас сделано большой коробкой вокруг карты — закрасьте все внешние стороны и дно карты текстурой SKY. При компиляции такие поверхности не просчитываются на освещение и не создают патчей.

8. Причины медленной работы HLVIS

Время компиляции карты, а именно расчет ее визуальной части компилятором HLVIS, не должно быть слишком большим. На грамотно сделанных картах оно не должно превышать 40-45 минут при использовании машины класса PII-300.

Причиной долгой работы HLVIS может быть окружение карты небом в виде большой коробки с целью избежания ошибки LEAK. В этом случае HLVIS обрабатывает большие территории снаружи карты, что увеличивает время его работы.

Второй причиной увеличения времени компиляции HLVIS’ом может стать архитектура на карте. Это довольно трудно объяснить, поэтому приведем несколько примеров:

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

Как избежать долгой компиляции HLVIS? Просто не делайте описанного выше: не создавайте больших, открытых пространств; не делайте небо коробкой вокруг карты; корридоры разворачивайте на 30, 45 или 90°. Да, это все серьезные ограничения, но ничего поделать невозможно. Необходимо просто это принять. Half-Life далеко не новая игра и ее движок не расчитан на большое количество полигонов. Да, и нужны ли все эти «красоты» игроку? Главное — интересный геймплей.

9. Причины медленной работы HLRAD (проблемы с MakeScales)

У Вас долго проходит операция «Make Scales» или «Swap Transfers»? Тогда читайте ниже.

Компилятору HLRAD необходимо довольно большое количество оперативной памяти. Количество памяти необходимое для обработки визуальной матрицы (vismatrix) компилятором HLRAD экспоненциально зависит от размера этой визуальной матрицы. Формула для расчета количества необходимой vismatrix-памяти такова: (количество патчей) 2 /16 = количество vismatrix-памяти в байтах. Если число патчей максимально 65535, то памяти потребуется 256 Мб.

Но память необходима не только для просчета визуальной матрицы. Она также нужна для выполнения операции MakeScales. Количество необходимой памяти для этой операции приблизительно равно половине vismatrix-памяти, т.е. на обе операции вместе, в самом наихудшем случае с 65535 патчами, компилятору HLRAD может понадобится 256+128=384 Мб памяти.

При выполнении операции MakeScales на больших детализированных картах можно часто наблюдать следующую особенность: сначала MakeScales доходит до 90%, скажем за 20 минут, а следующие 10% обрабатываются несколько часов или даже дней! Это происходит при исчерпывании ресурса оперативной памяти, при этом начинается активное обращение к файлу подкачки. Данную ситуацию можно поробовать разрешить, добавив параметр -sparse в строку запуска компилятора HLRAD. Это снизит затраты оперативной памяти на 10% за счет увеличения нагрузки на процессор. Ну, а лучше всего установить дополнительную оперативную память.

Для ускорения работы HLRAD подходят те же методы, которые применяются для устранения ошибки «Exceeded MAX_PATCHES», рассмотренной выше. Используя эти методы, можно уменьшить количество патчей, тем самым уменьшить потребность HLRAD в памяти. Также можно использовать параметр

-bounce 0

для компилятора HLRAD. При этом на карте останется лишь прямое освещение, а отраженное попросту не будет просчитано. Но этот параметр можно применять только для тестовой компиляции. При окончательной компиляции парметр -bounce всегда должен быть больше 0.

Также можно посоветовать использовать параметр -incremental для компилятора HLRAD. При этом при повторной (но не при первой!) компиляции будут «пропущены» стадии: BuildVisLeafs, MakeScales, SwapTransfers. Использовать этот параметр очень просто. В первый раз Вы компилируете карту как обычно, но добавив параметр -incremental . При этом будет дополнительно создан файл размером до нескольких десятков мегабайт. При повторной компиляции карты с этим же параметром данный файл будет использован и позволит пропустить перечисленные операции. Таким образом, если у Вас мало оперативной памяти, то можно помучиться только один раз (при первой компиляции), дальше все пройдет значительно быстрее. Кстати, если Вы поменяете свойства или расположение источников света (объекты: light, light_spot и light_environment), то не забудьте обновить эту информацию в MAP-файле при помощи параметра -onlyents , прописанного в компиляторе HLCSG.

10. HLRAD failled to allocate a block of memory

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

Если Вы не знаете, где в Windows изменяется размер виртуальной памяти, прочитайте об этом в статье «Что такое компиляция?» .

11. Bad Surface Extents

Обычно данная ошибка возникает при нанесении текстур со слишком большим масштабом (более 10, а обычно более 100). Эту ошибку можно обнаружить и в редакторе Hammer. Там она будет найдена, как «Texture axis perpendicular to face». А иногда в редакторе ничего не отображается, вроде бы все чисто. Здесь надо попытаться вспомнить, чего такого необычного Вы сделали на своей карте в последнее время :) Может быть Вы сможете найти какой-то подозрительный объект или вспомните, что раньше были какие-то проблемы с текстурами у какого-то объекта. В общем поищите немного, и Вы наверняка найдете причину данной ошибки.

12. Missing [ in texturedef

Возможно несколько причин появления данной ошибки:

Одна или несколько поверхностей объекта не имеют текстуры (в редакторе такие объекты изображаются абсолютно белыми), или же имя текстуры состоит только из пробелов.
Проверьте карту на ошибки [Alt-P], редактор покажет такую ошибку как «Invalid texture» В имени текстуры присутствуют пробелы (это недопустимо). Замените такие текстуры. Данная ошибка возникает при импорте карт из WorldCraft 3.3 в WorldCraft 2.1, 2.0 Данная ошибка возникает при импорте карт из WorldCraft 3.3 в QuArK Карта сохранена в формате *.MAP, но в поле worldspawn отсутствует:

«mapversion» «220»

(встречается очень редко)

13. MAX_PORTALS_ON_LEAF

Обычно такая ошибка возникает из-за больших комнат с большим количеством ведущих в нее корридоров. Также причиной может быть поврежденный (неправильный) браш. Такой браш можно отыскать по [Alt-P] .

Пример комнаты (вид сверху)

На картинке сверху изображена комната на виде сверху. Розовое — комната, синее — ее стены. Розовая комната является одной большой плоскостью, пространством (leaf). Данная комната соединяется с 32-мя небольшими комнатками (углубления в стенах), таким образом, у одного leaf образуется 32 портала (portals).

Так как в Half-Life «MAX_PORTALS_ON_LEAF» может быть равным 256, то данная ошибка чаще всего случается из-за «битого» браша.

14. MAX_MAP_CLIPNODES

Clipnodes — поверхности, определяемые игровым движком, как непроходимые для игрока. Каждый браш на карте (будь-то стена, пол или ящик) «окутывается» clipnode-поверхностями. Благодаря clipnode’ам игрок не проваливается сквозь землю и не может проходить сквозь стены. Помните старый халфовский чит «noclip» (хождение сквозь стены) — вот это оно и есть :)

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

Когда Вы делаете вокруг карты небо в виде большой коробки, чтобы избежать ошибки LEAK, создается большое число clipnodes, что может привести к появлению ошибки MAX_MAP_CLIPNODES, к тому же это приведет к увеличению времени работы компилятора HLVIS.

В архиве с официальной версией (неулучшенной) утилит ZHLT 2.5.3 есть пример (карта clipnode.map), в котором показано, как можно сберечь большое количество clipnodes.
Давайте посмотрим на картинку с этой карты:

Пример экономии clipnodes

На данном рисунке CLIP и HINT браши представлены в разрезе. Они имеют абсолютно одинаковый размер и расположены аккурат по размерам объекта. Если бы мы не поместили эти браши, то вокруг такого объекта с большим числом сторон было бы образовано большое количество clipnode-плоскостей, которые должны были бы точно указать форму объекта, через которую игрок не может пройти. А используя данный метод, мы значительно уменьшаем количество clipnodes, тем самым уменьшаем вероятность возникновения ошибки MAX_MAP_CLIPNODES и уменьшаем время работы компилятора HLVIS.

Мы провели эксперимент и скомпилировали карту с CLIP-брашем и без него. И вот результаты:

Clipnode-плоскостей с CLIP-брашем (как на рисунке): 30 Clipnode-плоскостей без CLIP-браша: 149
Как видите, результат более чем интересный. Получается, что используя CLIP-браш вокруг объектов с большим количеством сторон, мы сохраняем приличное количество clipnode-плоскостей. Конечно, если карта небольшая и clipnode-плоскостей порядка 10.000-15.000, то особого смысла экономить нет, но это может пригодится при создании большой карты. Кстати, оказалось, что HINT-браш никоим образом не влияет на количество clipnodes, его можно не использовать.

ЧАСТЬ 2. Обзор всех ошибок компиляции

Общие ошибки для всех компиляторов
Ошибка Описание Как исправить
Memory allocation failure Компилятор не смог разместить информацию в памяти Означает, что файл подкачки исчерпан. Увеличьте размер SWAP-файла или добавьте оперативной памяти
NULL Pointer Внутренняя ошибка компилятора Сообщите об этой ошибке на merlinis@bigpond.net.au
Bad Thread Workcount Внутренняя ошибка компилятора Сообщите об этой ошибке на merlinis@bigpond.net.au
Unable to create thread Внутренняя ошибка компилятора Сообщите об этой ошибке на merlinis@bigpond.net.au
Exceeded MAX_MAP_PLANES Превышено максимально допустимое число плоскостей (> 32767) Уменьшите размер карты, сделайте ее менее детализированной
Exceeded MAX_MAP_TEXTURES Превышено максимально допустимое количество текстур Уменьшите количество текстур
Exceeded MAX_MAP_MIPTEX Превышено максимально допустимое количество памяти, выделяемой для текстур (> 4194304 байт) Уменьшите количество разных текстур, уменьшите размер текстур или установите параметр -texdata (подробнее об этом параметре читайте здесь)
Exceeded MAX_MAP_TEXINFO Внутреннее ограничение компилятора Сообщите об этой ошибке на merlinis@bigpond.net.au
Exceeded MAX_MAP_SIDES Внутреннее ограничение компилятора Сообщите об этой ошибке на merlinis@bigpond.net.au
Exceeded MAX_MAP_BRUSHES Превышено максимально допустимое число брашей(> 8192) Уменьшите число брашей
Exceeded MAX_MAP_ENTITIES Превышено максимально допустимое число энтити-объектов для компиляторов (> 1024) Уменьшите число энтити-объектов
Exceeded MAX_ENGINE_ENTITIES Превышено максимально допустимое число энтити-объектов для движка Half-Life (> 1024) Уменьшите число энтити-объектов
Exceeded MAX_MAP_MODELS Превышено максимально допустимое число брашевых энтити-объектов (> 400) Уменьшите число брашевых энтити-объектов. Если это возможно, объедините несколько объектов в один
Exceeded MAX_MAP_VERTS Внутреннее ограничение компилятора Сообщите об этой ошибке на merlinis@bigpond.net.au
Exceeded MAX_MAP_EDGES Внутреннее ограничение компилятора Сообщите об этой ошибке на merlinis@bigpond.net.au
Exceeded MAX_MAP_CLIPNODES Превышено максимально допустимое число clipnode-плоскостей (> 32767) Данная ошибка описана в первой части этой статьи
Exceeded MAX_MAP_MARKSURFACES Внутреннее ограничение компилятора Сообщите об этой ошибке на merlinis@bigpond.net.au
Exceeded MAX_MAP_FACES Превышено максимально допустимое число полигонов (> 65535) Увеличьте масштаб (scale) текстур на больших поверхностях (земля, стены, горы и т.п.). Возможно, ваша карта слишком большая. Уменьшите ее размер, сделайте менее детализированной
Exceeded MAX_MAP_SURFEDGES Внутреннее ограничение компилятора Сообщите об этой ошибке на merlinis@bigpond.net.au
Exceeded MAX_MAP_NODES Превышено максимально допустимое число секций (> 32767) Уменьшите размер карты, сделайте ее менее детализированной
CompressVis Overflow Внутренняя ошибка компилятора Сообщите об этой ошибке на merlinis@bigpond.net.au
DecompressVis Overflow Внутренняя ошибка компилятора Сообщите об этой ошибке на merlinis@bigpond.net.au
Execution Cancelled Запуск компилятора был прерван пользователем или установками компилятора
Internal Error Внутренняя ошибка компилятора Сообщите об этой ошибке на merlinis@bigpond.net.au
Ошибки компилятора HLCSG
Ошибка Описание Как исправить
Missing ‘[‘ in texturedef (U) Одна или несколько поверхностей на карте не имеют текстур или окрашены текстурой, в названии которой есть пробелы Данная ошибка описана в первой части этой статьи
plane with no normal Неправильная форма объекта, полученная в результате манипуляции с вертексами Данная ошибка описана в первой части этой статьи
brush with coplanar faces Неправильная форма объекта, полученная в результате манипуляции с вертексами Данная ошибка описана в первой части этой статьи
brush outside world Неправильная форма объекта, полученная в результате манипуляции с вертексами Данная ошибка описана в первой части этой статьи
mixed face contents Объект имеет на себе текстуры, которые не могут сочетататься Данная ошибка описана в первой части этой статьи
Brush type not allowed in world Неразрешенный тип брашевого энтити-объекта Удалите объект или замените другим
Brush type not allowed in entity Неразрешенный тип точечного энтити-объекта Удалите объект или замените другим
No visibile brushes Нет видимых объектов или все они CLIP- и ORIGIN-браши (на карте должен быть хотя бы один видимый объект)
Entity with ONLY an ORIGIN brush Любой энтити-объект должен состоять хотя бы из одного видимого брашевого объекта. CLIP, HINT и ORIGIN-браши не являются видимыми
Could not find WAD file Компиляторы не смогли обнаружить текстурный wad-файл, указанный в карте Проверьте наличие всех подключенных к редактору текстурных библиотек или используйте параметр -wadconfig (подробнее об этом параметре читайте здесь)
Exceeded MAX_TRIANGLES Внутреннее ограничение компилятора Сообщите об этой ошибке на merlinis@bigpond.net.au
Exceeded MAX_SWITCHED_LIGHTS Превышено максимально допустимое количество включаемых/выключаемых источников света (light или light_spot) Уменьшите количество таких источников света
Exceeded MAX_TEXFILES Внутреннее ограничение компилятора Сообщите об этой ошибке на merlinis@bigpond.net.au
Ошибки компилятора HLBSP
Ошибка Описание Как исправить
LEAK in the map На карте присутствует «дырка» Данная ошибка описана в первой части этой статьи
Exceeded MAX_LEAF_FACES На карте присутствует поврежденный браш или масштаб (scale) текстуры слишком маленький (от -1 до 1) Удалите поврежденный браш (в основном проверьте вставленные на карту префабы, браши полученные с использованием Carve или путем манипуляции с вертексами). Увеличьте масштаб текстуры
Exceeded MAX_WEDGES Внутреннее ограничение компилятора Сообщите об этой ошибке на merlinis@bigpond.net.au
Exceeded MAX_WVERTS Внутреннее ограничение компилятора Сообщите об этой ошибке на merlinis@bigpond.net.au
Exceeded MAX_SUPERFACEEDGES Внутреннее ограничение компилятора Сообщите об этой ошибке на merlinis@bigpond.net.au
Empty Solid Entity Брашевый энтити-объект (brush-based), например, func_wall не содержит брашей (пустой) В редакторе нажмите [Alt-P], перейдите на такой объект кнопкой Go to error, закройте окно с ошибками, убедитесь, что размер объекта не является реальным (например, -1999998w), нажмите Delete, чтобы удалить объект. Повторите все шаги для каждого «пустого» объекта.
Ошибки компилятора HLVIS
Ошибка Описание Как исправить
Leaf portal saw into leaf Данная ошибка описана в первой части этой статьи
Exceeded MAX_PORTALS_ON_LEAF Превышено максимально допустимое количество порталов для одной leaf-поверхности или на карте присутствует поврежденный браш (порталов > 256) Данная ошибка описана в первой части этой статьи
Invalid client/server state Внутренняя ошибка компилятора Сообщите об этой ошибке на merlinis@bigpond.net.au
Ошибки компилятора HLRAD
Ошибка Описание Как исправить
Exceeded MAX_TEXLIGHTS Превышено максимально допустимое число светящихся текстур Уменьшите количество светящихся текстур, используемых на карте
Exceeded MAX_PATCHES Превышено максимально допустимое количество патчей (> 65535) Данная ошибка описана в первой части этой статьи
Transfer < 0 Внутренняя ошибка компилятора Сообщите об этой ошибке на merlinis@bigpond.net.au
Bad Surface Extents На объект были нанесены текстуры со слишком большим масштабом (scale больше 10, но обычно больше 100). Данная ошибка описана в первой части этой статьи
Malformed face normal Примененный тип выравнивания текстуры на видимой поверхности объекта не возможен Проверьте карту на ошибки, нажатием [Alt-P]. Исправьте все ошибки «Texture axis perpindicular to face»
No Lights! На карте нет источников света Добавьте источник света (light, light_environment или light_spot)
Bad Light Type Внутренняя ошибка компилятора Сообщите об этой ошибке на merlinis@bigpond.net.au
Exceeded MAX_SINGLEMAP Внутреннее ограничение компилятора Сообщите об этой ошибке на merlinis@bigpond.net.au

§ 3.1 Что такое компиляция?
§ 3.2 Компиляторы ZHLT
§ 3.3 Улучшенная версия ZHLT Custom Build
§ 3.4 Параметры компиляторов
§ 3.5 Как компилировать?
§ 3.6 Ошибки компиляции
§ 3.7 Разбор компиляционного LOG-файла
§ 3.8 Изменение карты без компиляции
§ 3.9 О декомпиляции карт
§ 3.10 Узнай устройство карты без декомпиляции
§ 3.11 Как ускорить компиляцию?

Тэги:

Добавил: root

2013-01-05 16:41:22

1672 просмотра

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

Итак, известно, что далеко не все ошибки, имеющиеся на карте, обнаруживаются в редакторе карт при проверке на ошибки по [Alt-P]. Большинство серьезных ошибок обнаруживается только во время компиляции.

Утилиты ZHLT при наличии ошибки создают файл *.ERR, в который записывается тип ошибки, номер объекта, вызвавшего ее, а также краткое руководство по исправлению, но, естественно, на английском языке.

Содержание статьи:

ЧАСТЬ 1. Наиболее часто встречающиеся ошибки компиляции

  • Plane with no normal
  • Brush with coplanar faces
  • Leaf portal saw into leaf
  • Brush ‘outside world’
  • Mixed face contents
  • === LEAK in hull 0 ===
  • Exceeded MAX_PATCHES
  • Причины медленной работы HLVIS
  • Причины медленной работы HLRAD (проблемы с MakeScales)
  • HLRAD failled to allocate a block of memory
  • Bad Surface Extents
  • Missing [ in texturedef
  • MAX_PORTALS_ON_LEAF
  • MAX_MAP_CLIPNODES

ЧАСТЬ 1. Наиболее часто встречающиеся ошибки компиляции

1. Plane with no normal
Пример:

Entity 10, Brush 0, Side 4: plane with no normal

Entity 10, Brush 0, Side 5: plane with no normal

Данная ошибка возникает при неправильной манипуляции с вертексами. Как известно, любая плоскость определяется 3 точками. Если одна или несколько точек плоскости имеют одинаковые координаты, то это будет уже не плоскость, а линия или точка. Как исправить? Удалить неправильный объект и заменить его новым.

2. Brush with coplanar faces
Пример:

Entity 10, Brush 0, Side 5: has a coplanar plane at (-753, -9, 251), texture CA1X_CON1B

Entity 10, Brush 0, Side 6: has a coplanar plane at (-753, -32, 251), texture CA1X_CON1B

Данная ошибка возникает при неправильной манипуляции с вертексами. Давайте рассмотрим случай возникновения такой ошибки. Предположим, что на карте у нас есть такой объект (см. рис. ниже).

Пример объекта

На виде сверху (2D top) в режиме работы с вертексами объект будет выглядеть, как показано на рисунке внизу, слева. Предположим мы решили сделать из этого объекта куб. Для этого верхнюю точку (вертекс) опускаем вниз (см. рис. ниже).

Вид сверху на объект в режиме манипуляции с вертексамиНе правильное действие с вертексами

Так делать нельзя! Так как мы получаем, что на одной стороне объекта расположено 2 плоскости, а этого быть не должно. Вот как эта не правильная операция выглядит в 3-х мерном виде (см. рис. ниже).

Не правильное действие с вертексами (3D вид)

Не правильное действие с вертексами (3D вид)

Как исправить? Можно, узнав номер неправильного браша или энтити-объекта из ERR-файла с ошибкой, перейти к нему, нажав [Shift-Ctrl-G] в редакторе. При этом Вы увидите небольшое окошко (см. рис. ниже), первая строка которого позволяет перейти к определенному энтити-объекту, вторая — к брашу. Номер неправильного объекта указывается в ERR-файл в следующем виде: «Entity 10, Brush 0, Side 5….», это означает, что ошибка у 10-го энтити-объекта на 5 стороне.

Окно перехода к объекту по его номеру [Shift-Ctrl-G]

После нахождения неправильного объекта, его можно удалить, а можно попытаться исправить. В приведенном выше примере необходимо переместить верхний средний вертекс направо или налево, таким образом, мы превратим две грани, лежащие в одной плоскости, в одну (см. рис. ниже).

Перемещение вертексаПеремещение вертекса

После переноса точки Вам будет задан вопрос: «Merge Vertices?» («Совместить вершины?»), обязательно отвечайте «Да».

Вопрос: Соединить вершины? Отвечаем всегда - ДА

3. Leaf portal saw into leaf

Данная ошибка возникает, когда компилятор HLVIS пытается сравнить 2 портала (leaf portals), которые принадлежат одной видимой вершине (visibility node). Посмотрите на картинку ниже:

Нет ошибки: порталы лежат на одной прямой

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

Если возникает такая ситуация, когда два портала принадлежат одной вершине и образуют кривую линию, то получается ошибка «Leaf portal saw into leaf». Вот как это выглядит:

Ошибка: Leaf portal saw into leaf

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

Как исправить? Лучше всего загрузить карту с ошибкой и попытаться отыскать, так называемый, эффект зеркального отражения ( hall of mirrors effect ). Эта ошибка может легко вызываться тем, что координаты одного из вертексов браша немного отклоняются от координатной сетки. В этом случае проще всего пересоздать неправильный браш, но также можно попробовать использовать параметр

-full

для компилятора HLVIS, который помогает уменьшить количество возможных vis-ошибок. Время компиляции с параметром -full обычно увеличивается на 30% . R_speeds (количество полигонов) при этом остается приблизительно таким же, как и при нормальной vis-компиляции.

4. Brush ‘outside world’

Пример:

Entity 10, Brush 0: outside world(+/-4096): (-9000, -64, 216)-(9000,23,283)

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

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

5. Mixed face contents

Пример:

Entity 0, Brush 12: mixed face contents
Texture ROCK_X1 and SKY

Каждый отдельный объект в Half-Life может быть окрашен в текстуру только одного типа (например, только в текстуру воды). Например, объект, окрашенный с пяти сторон обычной текстурой, а
с шестой — текстурой воды, вызовет данную ошибку.

Всего существует несколько типов текстур, которые не могут быть нанесены на объект вместе с другими. К таким текстурам относятся: SKY, CLIP, ORIGIN и текстуры воды. А самую подробную информацию о типах текстур и их совместимости Вы можете получить из соответствующей статьи: «Типы текстур в Half-Life/CS» .

Как исправить? Перейдите к объекту, вызвавшему ошибку, по [Shift-Ctrl-G] и закрасьте его со всех сторон текстурами одного типа.

6. === LEAK in hull 0 ===

LEAK — дырка на карте. Это самая известная и, пожалуй, самая нелюбимая ошибка. А все потому, что ее трудно обнаружить и легче не допускать, чем потом часами искать (прям стихи :)

А причиной такой ошибки является дырка (зазор) на уровне. Например, есть два браша, между которыми существует зазор (по неосторожности Вы не состыковали эти браши вплотную). Эти браши могут быть, например, стенами или землей Вашей карты. При компиляции программы-компиляторы, обнаружив такую дырку, начинают думать: «А что же за этой дыркой?». Они видят зазор, а за ним ужасающая пустота :) — в итоге возникает ошибка.

Ниже на картинке мы приводим пример такой ошибки.

Одна из главных причин ошибки LEAK - дырка в уровне

Но не всегда LEAK виден так явно, как на рисунке выше. Зачастую LEAK имеет очень маленькие размеры, гораздо меньше даже 1 юнита. Особо много LEAK’ов в декомпилированных картах. Например, Вы решили немного изменить De_Dust, разумеется, декомпильнули его, затем попытались вновь скомпилировать и получили кучу ошибок LEAK.

Второй причиной вызывающей появление LEAK ошибки, является нахождение точечного энтити-объекта за пределами карты. Например, Вы сделали карту, построили вокруг нее небо и случайно поместили какой-нибудь там ambient_generic снаружи карты. В итоге получаем LEAK. Но это лучше, чем искать дырку на карте, т.к. объект найти гораздо проще.

Как исправить? Можно воспользоваться специальной утилитой LeakMarker . А можно попытаться найти LEAK при помощи самой игры. Для этого нужно скопировать файл *.PTS, который создается в директории с компиляторами при обнаружении ошибки LEAK, в директорию « cstrike/maps », где лежит Ваша недокомпилированная карта, которая тем не менее способна запускаться. Далее нужно запустить консоль и ввести: map имя_карты . После загрузки карты, пишем: pointfile .

После ввода этих команд на своей карте Вы обнаружете тонкую извивающуюся линию из черно-белых точек (см. рис. ниже).

Линия из точек, показывающая место ошибки LEAK

Эта линия располагается около места с ошибкой LEAK. Запомнив место, открываете редактор и внимательно смотрите на границы брашей, четко ли они состыкованы. Попробуйте инструментом Vertex Manipulation выровнить вершины подозрительных брашей по координатной сетке.

Если при попытке загрузить pointfile Half-Life вылетает — значит этот файл слишком большой. Придется применять другие методы.

Если ничего не помогает и найти LEAK не удается, создайте вокруг карты небо коробкой, т.е. поместите всю свою карту в большую «комнату», окрашенную со всех сторон текстурой SKY. Это поможет 100% :)

Кстати, если Вы вдруг не заметили, что компиляторы выдали ошибку и подумали, что карта нормально откомпилировалась, то обнаружить неладное можно по жутким тормозам на карте (т.к. HLVIS не успел дойти до оптимизации карты), а освещение на карте будет очень светлым и монотонным (см. рис. выше). Теней от объектов не будет, т.к. HLRAD даже не приступил к работе из-за ошибки.

7. Exceeded MAX_PATCHES

Когда начинает работу компилятор HLRAD, обрабатывающий освещение на карте, он разбивает все видимые поверхности на небольшие участки, называемые патчами (patches). Существует ограничение на максимальное количество патчей — их не должно и не может быть больше 65535.

По умолчанию размер каждого патча составляет 64х64 юнита. Если масштаб (scale) текстуры больше или меньше (речь идет не о размере текстуры, а именно о масштабе), то это сказывается на количестве патчей. Это означает, что текстура с масштабом 2, будет иметь в 4 раза меньше патчей, нежели текстура с масштабом 1.

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

Как исправить? В строку запуска компилятора HLRAD можно прописать параметр «-chop 96» или «-chop 128». Этот параметр устанавливает минимальный размер патча в юнитах. Напомним, что по умолчанию минимальный размер патча составляет 64 юнита. При установке размера патча более 96 юнитов, происходит заметное ухудшение качетсва освещения карты, может появиться эффект «лесенки» на тенях, отбрасываемых объектами.

Также для уменьшения числа патчей можно увеличить масштаб (scale) текстур, например, больших текстур на скалах или земле. Большие по масштабу текстуры создают гораздо меньше патчей. Ну, а если небо у Вас сделано большой коробкой вокруг карты — закрасьте все внешние стороны и дно карты текстурой SKY. При компиляции такие поверхности не просчитываются на освещение и не создают патчей.

8. Причины медленной работы HLVIS

Время компиляции карты, а именно расчет ее визуальной части компилятором HLVIS, не должно быть слишком большим. На грамотно сделанных картах оно не должно превышать 40-45 минут при использовании машины класса PII-300.

Причиной долгой работы HLVIS может быть окружение карты небом в виде большой коробки с целью избежания ошибки LEAK. В этом случае HLVIS обрабатывает большие территории снаружи карты, что увеличивает время его работы.

Второй причиной увеличения времени компиляции HLVIS’ом может стать архитектура на карте. Это довольно трудно объяснить, поэтому приведем несколько примеров:

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

Как избежать долгой компиляции HLVIS? Просто не делайте описанного выше: не создавайте больших, открытых пространств; не делайте небо коробкой вокруг карты; корридоры разворачивайте на 30, 45 или 90°. Да, это все серьезные ограничения, но ничего поделать невозможно. Необходимо просто это принять. Half-Life далеко не новая игра и ее движок не расчитан на большое количество полигонов. Да, и нужны ли все эти «красоты» игроку? Главное — интересный геймплей.

9. Причины медленной работы HLRAD (проблемы с MakeScales)

У Вас долго проходит операция «Make Scales» или «Swap Transfers»? Тогда читайте ниже.

Компилятору HLRAD необходимо довольно большое количество оперативной памяти. Количество памяти необходимое для обработки визуальной матрицы (vismatrix) компилятором HLRAD экспоненциально зависит от размера этой визуальной матрицы. Формула для расчета количества необходимой vismatrix-памяти такова: (количество патчей) 2 /16 = количество vismatrix-памяти в байтах. Если число патчей максимально 65535, то памяти потребуется 256 Мб.

Но память необходима не только для просчета визуальной матрицы. Она также нужна для выполнения операции MakeScales. Количество необходимой памяти для этой операции приблизительно равно половине vismatrix-памяти, т.е. на обе операции вместе, в самом наихудшем случае с 65535 патчами, компилятору HLRAD может понадобится 256+128=384 Мб памяти.

При выполнении операции MakeScales на больших детализированных картах можно часто наблюдать следующую особенность: сначала MakeScales доходит до 90%, скажем за 20 минут, а следующие 10% обрабатываются несколько часов или даже дней! Это происходит при исчерпывании ресурса оперативной памяти, при этом начинается активное обращение к файлу подкачки. Данную ситуацию можно поробовать разрешить, добавив параметр -sparse в строку запуска компилятора HLRAD. Это снизит затраты оперативной памяти на 10% за счет увеличения нагрузки на процессор. Ну, а лучше всего установить дополнительную оперативную память.

Для ускорения работы HLRAD подходят те же методы, которые применяются для устранения ошибки «Exceeded MAX_PATCHES», рассмотренной выше. Используя эти методы, можно уменьшить количество патчей, тем самым уменьшить потребность HLRAD в памяти. Также можно использовать параметр

-bounce 0

для компилятора HLRAD. При этом на карте останется лишь прямое освещение, а отраженное попросту не будет просчитано. Но этот параметр можно применять только для тестовой компиляции. При окончательной компиляции парметр -bounce всегда должен быть больше 0.

Также можно посоветовать использовать параметр -incremental для компилятора HLRAD. При этом при повторной (но не при первой!) компиляции будут «пропущены» стадии: BuildVisLeafs, MakeScales, SwapTransfers. Использовать этот параметр очень просто. В первый раз Вы компилируете карту как обычно, но добавив параметр -incremental . При этом будет дополнительно создан файл размером до нескольких десятков мегабайт. При повторной компиляции карты с этим же параметром данный файл будет использован и позволит пропустить перечисленные операции. Таким образом, если у Вас мало оперативной памяти, то можно помучиться только один раз (при первой компиляции), дальше все пройдет значительно быстрее. Кстати, если Вы поменяете свойства или расположение источников света (объекты: light, light_spot и light_environment), то не забудьте обновить эту информацию в MAP-файле при помощи параметра -onlyents , прописанного в компиляторе HLCSG.

10. HLRAD failled to allocate a block of memory

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

Если Вы не знаете, где в Windows изменяется размер виртуальной памяти, прочитайте об этом в статье «Что такое компиляция?» .

11. Bad Surface Extents

Обычно данная ошибка возникает при нанесении текстур со слишком большим масштабом (более 10, а обычно более 100). Эту ошибку можно обнаружить и в редакторе Hammer. Там она будет найдена, как «Texture axis perpendicular to face». А иногда в редакторе ничего не отображается, вроде бы все чисто. Здесь надо попытаться вспомнить, чего такого необычного Вы сделали на своей карте в последнее время :) Может быть Вы сможете найти какой-то подозрительный объект или вспомните, что раньше были какие-то проблемы с текстурами у какого-то объекта. В общем поищите немного, и Вы наверняка найдете причину данной ошибки.

12. Missing [ in texturedef

Возможно несколько причин появления данной ошибки:

Одна или несколько поверхностей объекта не имеют текстуры (в редакторе такие объекты изображаются абсолютно белыми), или же имя текстуры состоит только из пробелов.
Проверьте карту на ошибки [Alt-P], редактор покажет такую ошибку как «Invalid texture» В имени текстуры присутствуют пробелы (это недопустимо). Замените такие текстуры. Данная ошибка возникает при импорте карт из WorldCraft 3.3 в WorldCraft 2.1, 2.0 Данная ошибка возникает при импорте карт из WorldCraft 3.3 в QuArK Карта сохранена в формате *.MAP, но в поле worldspawn отсутствует:

«mapversion» «220»

(встречается очень редко)

13. MAX_PORTALS_ON_LEAF

Обычно такая ошибка возникает из-за больших комнат с большим количеством ведущих в нее корридоров. Также причиной может быть поврежденный (неправильный) браш. Такой браш можно отыскать по [Alt-P] .

Пример комнаты (вид сверху)

На картинке сверху изображена комната на виде сверху. Розовое — комната, синее — ее стены. Розовая комната является одной большой плоскостью, пространством (leaf). Данная комната соединяется с 32-мя небольшими комнатками (углубления в стенах), таким образом, у одного leaf образуется 32 портала (portals).

Так как в Half-Life «MAX_PORTALS_ON_LEAF» может быть равным 256, то данная ошибка чаще всего случается из-за «битого» браша.

14. MAX_MAP_CLIPNODES

Clipnodes — поверхности, определяемые игровым движком, как непроходимые для игрока. Каждый браш на карте (будь-то стена, пол или ящик) «окутывается» clipnode-поверхностями. Благодаря clipnode’ам игрок не проваливается сквозь землю и не может проходить сквозь стены. Помните старый халфовский чит «noclip» (хождение сквозь стены) — вот это оно и есть :)

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

Когда Вы делаете вокруг карты небо в виде большой коробки, чтобы избежать ошибки LEAK, создается большое число clipnodes, что может привести к появлению ошибки MAX_MAP_CLIPNODES, к тому же это приведет к увеличению времени работы компилятора HLVIS.

В архиве с официальной версией (неулучшенной) утилит ZHLT 2.5.3 есть пример (карта clipnode.map), в котором показано, как можно сберечь большое количество clipnodes.
Давайте посмотрим на картинку с этой карты:

Пример экономии clipnodes

На данном рисунке CLIP и HINT браши представлены в разрезе. Они имеют абсолютно одинаковый размер и расположены аккурат по размерам объекта. Если бы мы не поместили эти браши, то вокруг такого объекта с большим числом сторон было бы образовано большое количество clipnode-плоскостей, которые должны были бы точно указать форму объекта, через которую игрок не может пройти. А используя данный метод, мы значительно уменьшаем количество clipnodes, тем самым уменьшаем вероятность возникновения ошибки MAX_MAP_CLIPNODES и уменьшаем время работы компилятора HLVIS.

Мы провели эксперимент и скомпилировали карту с CLIP-брашем и без него. И вот результаты:

Clipnode-плоскостей с CLIP-брашем (как на рисунке): 30 Clipnode-плоскостей без CLIP-браша: 149
Как видите, результат более чем интересный. Получается, что используя CLIP-браш вокруг объектов с большим количеством сторон, мы сохраняем приличное количество clipnode-плоскостей. Конечно, если карта небольшая и clipnode-плоскостей порядка 10.000-15.000, то особого смысла экономить нет, но это может пригодится при создании большой карты. Кстати, оказалось, что HINT-браш никоим образом не влияет на количество clipnodes, его можно не использовать.

ЧАСТЬ 2. Обзор всех ошибок компиляции

Общие ошибки для всех компиляторов
Ошибка Описание Как исправить
Memory allocation failure Компилятор не смог разместить информацию в памяти Означает, что файл подкачки исчерпан. Увеличьте размер SWAP-файла или добавьте оперативной памяти
NULL Pointer Внутренняя ошибка компилятора Сообщите об этой ошибке на merlinis@bigpond.net.au
Bad Thread Workcount Внутренняя ошибка компилятора Сообщите об этой ошибке на merlinis@bigpond.net.au
Unable to create thread Внутренняя ошибка компилятора Сообщите об этой ошибке на merlinis@bigpond.net.au
Exceeded MAX_MAP_PLANES Превышено максимально допустимое число плоскостей (> 32767) Уменьшите размер карты, сделайте ее менее детализированной
Exceeded MAX_MAP_TEXTURES Превышено максимально допустимое количество текстур Уменьшите количество текстур
Exceeded MAX_MAP_MIPTEX Превышено максимально допустимое количество памяти, выделяемой для текстур (> 4194304 байт) Уменьшите количество разных текстур, уменьшите размер текстур или установите параметр -texdata (подробнее об этом параметре читайте здесь)
Exceeded MAX_MAP_TEXINFO Внутреннее ограничение компилятора Сообщите об этой ошибке на merlinis@bigpond.net.au
Exceeded MAX_MAP_SIDES Внутреннее ограничение компилятора Сообщите об этой ошибке на merlinis@bigpond.net.au
Exceeded MAX_MAP_BRUSHES Превышено максимально допустимое число брашей(> 8192) Уменьшите число брашей
Exceeded MAX_MAP_ENTITIES Превышено максимально допустимое число энтити-объектов для компиляторов (> 1024) Уменьшите число энтити-объектов
Exceeded MAX_ENGINE_ENTITIES Превышено максимально допустимое число энтити-объектов для движка Half-Life (> 1024) Уменьшите число энтити-объектов
Exceeded MAX_MAP_MODELS Превышено максимально допустимое число брашевых энтити-объектов (> 400) Уменьшите число брашевых энтити-объектов. Если это возможно, объедините несколько объектов в один
Exceeded MAX_MAP_VERTS Внутреннее ограничение компилятора Сообщите об этой ошибке на merlinis@bigpond.net.au
Exceeded MAX_MAP_EDGES Внутреннее ограничение компилятора Сообщите об этой ошибке на merlinis@bigpond.net.au
Exceeded MAX_MAP_CLIPNODES Превышено максимально допустимое число clipnode-плоскостей (> 32767) Данная ошибка описана в первой части этой статьи
Exceeded MAX_MAP_MARKSURFACES Внутреннее ограничение компилятора Сообщите об этой ошибке на merlinis@bigpond.net.au
Exceeded MAX_MAP_FACES Превышено максимально допустимое число полигонов (> 65535) Увеличьте масштаб (scale) текстур на больших поверхностях (земля, стены, горы и т.п.). Возможно, ваша карта слишком большая. Уменьшите ее размер, сделайте менее детализированной
Exceeded MAX_MAP_SURFEDGES Внутреннее ограничение компилятора Сообщите об этой ошибке на merlinis@bigpond.net.au
Exceeded MAX_MAP_NODES Превышено максимально допустимое число секций (> 32767) Уменьшите размер карты, сделайте ее менее детализированной
CompressVis Overflow Внутренняя ошибка компилятора Сообщите об этой ошибке на merlinis@bigpond.net.au
DecompressVis Overflow Внутренняя ошибка компилятора Сообщите об этой ошибке на merlinis@bigpond.net.au
Execution Cancelled Запуск компилятора был прерван пользователем или установками компилятора
Internal Error Внутренняя ошибка компилятора Сообщите об этой ошибке на merlinis@bigpond.net.au
Ошибки компилятора HLCSG
Ошибка Описание Как исправить
Missing ‘[‘ in texturedef (U) Одна или несколько поверхностей на карте не имеют текстур или окрашены текстурой, в названии которой есть пробелы Данная ошибка описана в первой части этой статьи
plane with no normal Неправильная форма объекта, полученная в результате манипуляции с вертексами Данная ошибка описана в первой части этой статьи
brush with coplanar faces Неправильная форма объекта, полученная в результате манипуляции с вертексами Данная ошибка описана в первой части этой статьи
brush outside world Неправильная форма объекта, полученная в результате манипуляции с вертексами Данная ошибка описана в первой части этой статьи
mixed face contents Объект имеет на себе текстуры, которые не могут сочетататься Данная ошибка описана в первой части этой статьи
Brush type not allowed in world Неразрешенный тип брашевого энтити-объекта Удалите объект или замените другим
Brush type not allowed in entity Неразрешенный тип точечного энтити-объекта Удалите объект или замените другим
No visibile brushes Нет видимых объектов или все они CLIP- и ORIGIN-браши (на карте должен быть хотя бы один видимый объект)
Entity with ONLY an ORIGIN brush Любой энтити-объект должен состоять хотя бы из одного видимого брашевого объекта. CLIP, HINT и ORIGIN-браши не являются видимыми
Could not find WAD file Компиляторы не смогли обнаружить текстурный wad-файл, указанный в карте Проверьте наличие всех подключенных к редактору текстурных библиотек или используйте параметр -wadconfig (подробнее об этом параметре читайте здесь)
Exceeded MAX_TRIANGLES Внутреннее ограничение компилятора Сообщите об этой ошибке на merlinis@bigpond.net.au
Exceeded MAX_SWITCHED_LIGHTS Превышено максимально допустимое количество включаемых/выключаемых источников света (light или light_spot) Уменьшите количество таких источников света
Exceeded MAX_TEXFILES Внутреннее ограничение компилятора Сообщите об этой ошибке на merlinis@bigpond.net.au
Ошибки компилятора HLBSP
Ошибка Описание Как исправить
LEAK in the map На карте присутствует «дырка» Данная ошибка описана в первой части этой статьи
Exceeded MAX_LEAF_FACES На карте присутствует поврежденный браш или масштаб (scale) текстуры слишком маленький (от -1 до 1) Удалите поврежденный браш (в основном проверьте вставленные на карту префабы, браши полученные с использованием Carve или путем манипуляции с вертексами). Увеличьте масштаб текстуры
Exceeded MAX_WEDGES Внутреннее ограничение компилятора Сообщите об этой ошибке на merlinis@bigpond.net.au
Exceeded MAX_WVERTS Внутреннее ограничение компилятора Сообщите об этой ошибке на merlinis@bigpond.net.au
Exceeded MAX_SUPERFACEEDGES Внутреннее ограничение компилятора Сообщите об этой ошибке на merlinis@bigpond.net.au
Empty Solid Entity Брашевый энтити-объект (brush-based), например, func_wall не содержит брашей (пустой) В редакторе нажмите [Alt-P], перейдите на такой объект кнопкой Go to error, закройте окно с ошибками, убедитесь, что размер объекта не является реальным (например, -1999998w), нажмите Delete, чтобы удалить объект. Повторите все шаги для каждого «пустого» объекта.
Ошибки компилятора HLVIS
Ошибка Описание Как исправить
Leaf portal saw into leaf Данная ошибка описана в первой части этой статьи
Exceeded MAX_PORTALS_ON_LEAF Превышено максимально допустимое количество порталов для одной leaf-поверхности или на карте присутствует поврежденный браш (порталов > 256) Данная ошибка описана в первой части этой статьи
Invalid client/server state Внутренняя ошибка компилятора Сообщите об этой ошибке на merlinis@bigpond.net.au
Ошибки компилятора HLRAD
Ошибка Описание Как исправить
Exceeded MAX_TEXLIGHTS Превышено максимально допустимое число светящихся текстур Уменьшите количество светящихся текстур, используемых на карте
Exceeded MAX_PATCHES Превышено максимально допустимое количество патчей (> 65535) Данная ошибка описана в первой части этой статьи
Transfer < 0 Внутренняя ошибка компилятора Сообщите об этой ошибке на merlinis@bigpond.net.au
Bad Surface Extents На объект были нанесены текстуры со слишком большим масштабом (scale больше 10, но обычно больше 100). Данная ошибка описана в первой части этой статьи
Malformed face normal Примененный тип выравнивания текстуры на видимой поверхности объекта не возможен Проверьте карту на ошибки, нажатием [Alt-P]. Исправьте все ошибки «Texture axis perpindicular to face»
No Lights! На карте нет источников света Добавьте источник света (light, light_environment или light_spot)
Bad Light Type Внутренняя ошибка компилятора Сообщите об этой ошибке на merlinis@bigpond.net.au
Exceeded MAX_SINGLEMAP Внутреннее ограничение компилятора Сообщите об этой ошибке на merlinis@bigpond.net.au

§ 3.1 Что такое компиляция?
§ 3.2 Компиляторы ZHLT
§ 3.3 Улучшенная версия ZHLT Custom Build
§ 3.4 Параметры компиляторов
§ 3.5 Как компилировать?
§ 3.6 Ошибки компиляции
§ 3.7 Разбор компиляционного LOG-файла
§ 3.8 Изменение карты без компиляции
§ 3.9 О декомпиляции карт
§ 3.10 Узнай устройство карты без декомпиляции
§ 3.11 Как ускорить компиляцию?

Тэги:

Помогите с ошибкой — Bad surface extents

Помогите с проблемой пожалуйста! Переделываю карту nuke, всё что просил «зонер» уже по исправлял, но в момент BuildFacelights: на 90 процентах возникает ошибка:

Error:
for Face 8739 (texture lab1_w8a2) at
(959.000 -832.000 -692.000) (960.000 -832.000 -692.000) (960.000 -832.000 -672.000) (959.000 -832.000 -672.000)
Error: Bad surface extents (1431 x 9)
Check the file ZHLTProblems.html for a detailed explanation of this problem

Суть вопроса: помогите, как найти на карте эту долбаную растянутую текстуру???? Карта конвертировалась из BSP в MAP, по этому кривовата!
Я уже излазил её всю, уже истерика начинается:bandhead: !!!! Помогите пожалуйста!!!!
Если нужен файл MAP., отпишитесь я скину.

Жду помощи и советов((((((!!!!!! :help: :help: :( :(

кидай мапу, а вообще ищи по координатам

qpAHToMAS

Ищи в данных координатах (X Y Z) браш с текстурой «lab1_w8a2».
Если ты работаешь в нормальном редакторе, то выбери «Map / Go to coordinates…» и

впиши

вставь координаты, если нет, то води

мышкой

курсором по 2D видам и в строке состояния (внизу) смотри координаты.

qpAHToMAS сказал(а):

Ищи в данных координатах (X Y Z) браш с текстурой «lab1_w8a2».
Если ты работаешь в нормальном редакторе, то выбери «Map / Go to coordinates…» и

впиши

вставь координаты, если нет, то води

мышкой

курсором по 2D видам и в строке состояния (внизу) смотри координаты.

А вы советуете этот редактор? Он лучше Hammer Editor? Очень важно ваше мнение!!!!! Я сейчас вплотную сотрудничаю с одним сайтом, и откровенно говоря нужна поддержка профессионалов!!! Вроде вопросы нубские, но тем не менее лучше спросить лишний раз у людей, чем сдаться и забросить всё в длинный ящик!!! Мне очень нравиться картостроение!!!!!

qpAHToMAS

Да, Jackhammer лучше чем VHE.
Точно также VHLT компиляторы лучше чем ZHLT.
Если воссоздаешь de_nuke, то возможно есть смысл использовать этот исходик, в нем надо достроить около 30% карты.

А ты создавал nuke 2×2??? Если да, то подскажи какой программой можно переконвертировать из BSP в RMF с наименьшими потерями в карте и чтоб меньше дорабатывать приходилось???
Ты ведь так делал при создании этой карты?

FiEctro

STRONG сказал(а):

А ты создавал nuke 2×2??? Если да, то подскажи какой программой можно переконвертировать из BSP в RMF с наименьшими потерями в карте и чтоб меньше дорабатывать приходилось???
Ты ведь так делал при создании этой карты?

Никакой. Потери в любом случае будут.

qpAHToMAS

Я воссоздавал всё с нуля, сверяясь с обыкновенным декомпилом (WinBSP, BSP2MAP, Crafy и прочие декомпиляторы).

Хорошо, последний вопрос! Фантомас, вы писали что VHLT лучше, там всё тоже самое как и с ZHLT (bat файли также создаются?) или есть какие-то особенности??? Заранее спасибо огромное всем за ответы!!!!

qpAHToMAS

Проще тебе скачать исходник нюка что я выложил выше и там будет файл «vhlt.bcp» — это настройки для программы Batch Compiler, которой можно компилировать карты.

Самый простой способ — это открыть .map файл в notepad++ и искать ;-)

Меню сайта
Категории раздела
Форма входа
Поиск
Наш опрос

CS-MAPPER — Создание карт для
 CS.      
Программы Дизайн
Учебник Секреты
Энтити Ссылки  
Статьи О проекте

Учебник по созданию карт
Глава III. Компиляция (ZHLT).
§ 3.6 Ошибки компиляции
Из данной публикации вы узнаете о наиболее частых ошибках компиляции, о
том, как их не допустить и как исправить. В окончании этого материала
мы приводим таблицу всех возможных ошибок.

Что же, как вам должно быть известно, отнюдь не все ошибки, имеющиеся в
уровне, обнаруживаются в редакторе Хаммер при нажатии комбинации клавиш
[Alt-P]. Большое число значительных ошибок находятся только во время процесса компиляции.

Утилиты Зонера при обнаружении ошибки создают ERR-файл, в который
заносится вид ошибки, номер объекта, вызвавшего её, а также небольшую
инструкцию по исправлению на английском языке.

Содержание материала:

    ЧАСТЬ 1. Наиболее часто встречающиеся ошибки компиляции

  • Plane with no normal
  • Brush with coplanar faces
  • Leaf portal saw into leaf
  • Brush ‘outside world’
  • Mixed face contents
  • === LEAK in hull 0 ===
  • Exceeded MAX_PATCHES
  • Причины медленной работы HLVIS
  • Причины медленной работы HLRAD (проблемы с MakeScales)
  • HLRAD failled to allocate a block of memory
  • Bad Surface Extents
  • Missing [ in texturedef
  • MAX_PORTALS_ON_LEAF
  • MAX_MAP_CLIPNODES
  • ЧАСТЬ 2. Обзор всех ошибок компиляции

  • Сводная таблица всех ошибок компиляции

ЧАСТЬ 1. Наиболее часто встречающиеся ошибки компиляции

1. Plane with no normal

    Пример:

    Entity 20, Brush 0, Side 2: plane with no normal
    Entity 20, Brush 0, Side 3: plane with no normal

    Эта ошибка рождается при неправильной манипуляции с вершинами объекта
    (вертексами). Как нам всем известно, любая плоскость определяется тремя
    точками. Если 1 или несколько точек плоскости имеют одинаковые
    координаты, то это будет уже линия или точка.

    Как исправить? Удалить неправильный объект и заменить его новым.

2. Brush with coplanar faces

    Пример:

    Entity 15, Brush 0, Side 1: has a coplanar plane at (-757, -9, 263), texture SA1X_UPKN2C
    Entity 15, Brush 0, Side 4: has a coplanar plane at (-757, -32, 263), texture SA1X_UPKN2C

    Эта ошибка рождается при неправильной манипуляции с вершинами объекта
    (вертексами). Рассмотрим, как зарождается данная ошибка. Допустим, что в
    уровне у нас есть такой объект (смотрите картинку ниже).

    Пример объекта

    На виде сверху (2D top) в режиме работы с вершинами объект будет
    выглядеть, как показано на рисунке внизу, слева. Допустим, мы решили
    переделать данный объект в куб. Для этого верхний вертекс (вершину)
    опускаем вниз (смотрите картинку ниже, справа).

    Вид сверху на объект в режиме манипуляции с вертексамиНе правильное действие с вертексами

    Так вот, так делать запрещено! У нас получилось, что на 1-ой стороне
    объекта находится две плоскости, а этого быть не должно. Вот как эта
    ошибка выглядит в трёхмерном виде (смотрите картинку ниже).

    Не правильное действие с вертексами (3D вид)

    Не правильное действие с вертексами (3D вид)

    Как исправить? Можно, из файла *.ERR с описанием ошибки узнать номер ошибочного браша или энтити-объекта, затем перейти к нему, нажав [Shift-Ctrl-G]
    в редакторе. При этом мы увидим небольшое окно (смотрите картинку
    ниже), первая строка позволяет перейти по номеру к энтити-объекту,
    вторая — к брашу. Номер объекта, вызвавшего ошибку, указывается в *.ERR файле в следующем виде:
    «Entity 15, Brush 0, Side 1….», это означает, что ошибка в пятнадцатом энтити на первой грани.

    Окно перехода к объекту по его номеру [Shift-Ctrl-G]

    После того, как вы нашли ошибочный объект, его можно удалить, а можно
    попробовать исправить. С приведённым выше объектом, можно поступить так:
    нужно переместить верхнюю среднюю вершину направо или налево, таким
    образом, мы превратим 2 стороны, лежащие в одной плоскости, в одну грань
    (смотрите картинку ниже).

    Перемещение вертексаПеремещение вертекса

    После того, как мы перенесём вертекст направо или налево, нам будет
    задан вопрос: «Merge Vertices?» (что означает: «Совместить вершины?»),
    обязательно отвечайте «Да».

    Вопрос: Соединить вершины? Отвечаем всегда - ДА

3. Leaf portal saw into leaf

    Эта ошибка рождается, когда программа-компилятор HLVIS.EXE
    пытается сравнить два портала (leaf portals), которые принадлежат 1-ой
    видимой вершине (visibility node). См. рис. ниже:Нет ошибки: порталы лежат на одной прямой

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

    Если происходит данная ситуация, когда два портала принадлежат одной вершине и образуют кривую линию, то возникает ошибка «Leaf portal saw into leaf». Посмотрите, как она выглядит:

    Ошибка: Leaf portal saw into leaf

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

    Как исправить? Легче всего запустить уровень с ошибкой и поробовать найти, так называемый, эффект зеркального отражения (hall of mirrors effect).
    Данная ошибка может рождаться, когда координаты одной из вершин браша
    или брашевой энтити несколько отклоняются от координатной сетки. В
    данном случае просто пересоздайте неправильный объект, но также можно
    попробовать использовать параметр

    -full для
    программы-компилятора HLVIS.EXE, который помогает сократить число
    возможных vis-ошибок. Время компиляции с параметром -full обычно
    увеличивается на 30 процентов. R_speeds (число видимых полигонов) при этом остается примерно таким же, как и при обычной vis-компиляции.

4. Brush ‘outside world’

    Пример:

    Entity 20, Brush 0: outside world(+/-4096): (-9000, -84, 513)-(9000,43,433)

    Есть несколько причин возникновения этой ошибки. Во-первых, такая
    ошибка возможна при наличии повреждённого браша (из-за ошибочной
    манипуляции с вершинами объекта). В этом случае нужно точно отследить
    координаты поврежденного браша или энтити, которые сообщаются в *.ERR
    файле с описанием ошибки. Если какая-то координата равна -9000 или 9000,
    то такой объект необходимо удалить и создать новый.

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

5. Mixed face contents

    Пример:

    Entity 0, Brush 25: mixed face contents
    Texture ROCK_X1 and SKY

    Всякий отдельный объект в Counter-Strike можно окрашивать в текстуру
    только 1-го типа (к примеру, только в текстуру жидкости). К примеру,
    объект, затекстурированный с 5 сторон обыкновенной текстурой, а
    с шестой — текстурой жидкости, вызовет эту ошибку.

    Всего есть несколько видов текстур, которые нельзя наносить на браш
    или энтити вместе с другими. К таким текстурам относятся: SKY, CLIP,
    ORIGIN и текстуры жидкости. Очень подробно о типах текстур и их
    совместимости мы рассказываем в материале: «Типы текстур в Half-Life/CS».

    Как исправить? Просто перейдите к ошибочному объекту по [Shift-Ctrl-G] и затекстурируйте его со всех сторон текстурами одного вида.

6. === LEAK in hull 0 ===

    LEAK — дырка на карте. Данная ошибка часто втречается и трудно обнаруживается.

    А причина данной ошибки является дырка (зазор) на карте. К примеру, у
    нас есть 2 браша, между которыми существует зазор. При компиляции
    компиляторы, обнаружив подобную дырку, думают: «А что находится за этой
    дыркой?». Они видят зазор между брашами, а дальше… устрашающая пустота
    :-) — в итоге возникает ошибка LEAK.

    На рисунке ниже вы можете видеть пример этой ошибки.

    Одна из главных причин ошибки LEAK - дырка на карте

    Но не всегда дырка видна так явно, как на картинке выше. Часто дырка
    имеет очень маленькие размеры, значительно меньше всего лишь одного
    юнита! Особо много дырок в декомпилированных картах. К примеру, мы
    захотели маленько изменить De_Dust. Декомпилировали его, затем
    попытались снова откомпилировать и получили вагон и маленькую тележку
    ошибок LEAK.

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

    Как исправить? Можно попробовать использовать специальную утилиту LeakMarker.
    А можно попробовать найти дырку (LEAK) при помощи самой Counter-Strike.
    Для этого нужно скопировать PTS-файл, который создается в папке с
    компиляторами при обнаружении дырки на карте, в директорию «cstrike/maps»,
    где лежит ваш недокомпилированный уровень, который всё же
    работоспособен и, главное, может загружаться. Далее необходимо открыть
    консоль и ввести: map имя_уровня. После запуска уровня, пишем: pointfile.

    После ввода этих нехитрых команд на своём уровне, должна появиться
    тонкая ломаная линия из черно-белых точек (смотрите картинку ниже).

    Чёрно-белая линия из точек, показывающая место ошибки LEAK

    Эта линия находится около дырки — места с ошибкой LEAK. Запомните это
    место, откройте Hammer и сосредоточенно осмотрите границы объектов,
    чётко ли они состыкованы. Попробуйте инструментом для работы с вершинами
    (Vertex Manipulation) выровнить вершины подозрительных объектов по
    координатной сетке.

    Если при попытке запустить pointfile, Counter-Strike вылетает — это
    означает, что PTS-файл слишком большой. Придется пробовать иные способы.

    Если ничего из выше перечисленного не помогло и найти дырку не удается
    — попробуйте создать вокруг уровня небо коробкой, то есть поместите
    весь свой уровень в большую «комнату», окрашенную со всех сторон
    текстурой SKY. Это должно помочь на 100 процентов :-)

    Кстати сказать, если вы случайно не заметили, что компиляторы выдали
    ошибку LEAK и подумали, что уровень откомпилировался правильно, то
    обнаружить неладное можно по сильным тормозам на карте, так как
    HLVIS.EXE не дошёл до оптимизации карты, а освещённость уровня будет
    очень светлая и монотонная (смотрите картинку выше). Теней от объектов
    не будет, так как HLRAD.EXE ещё не успел приступить к работе из-за
    ошибки.

7. Exceeded MAX_PATCHES

    Когда приступает к работе программа-компилятор HLRAD.EXE, который
    просчитывает освещённость уровня, он разбивает все рисуемые поверхности
    на маленькие участки, которые называются патчами (patches). В Half-Life
    существует лимит на максимальное число патчей — в сумме не должно и не
    может быть больше 65535 патчей.

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

    Если сделать небо вокруг уровня большой коробкой, то все внешние
    области, не видимые игроком, будут всё равно обработаны
    программой-компилятором HLVIS.EXE. Если у вас большая карта, то это
    может вызвать данную ошибку (Exceeded MAX_PATCHES), так как число
    участков или патчей может превысить порог в 65535 шт.

    Как исправить? В строчку запуска программы-компилятора
    HLRAD.EXE можно вписать параметр «-chop 96» или «-chop 128». Данный
    параметр устанавливает мин. размер патча в юнитах. Напомним, что по
    умолчанию минимальный размер патча составляет 64х64 юнита. ПОднако,
    помните, что установка размера патчей более 96 юнитов, приводит к
    значительному ухудшению качетсва освещённости уровня, может появиться
    эффект «лесенки» на тенях, отбрасываемых объектами.

    Ещё можно увеличить масштаб текстур для сокращения количества патчей, к
    примеру, больших текстур на скалах или земле. Большие по масштабу
    текстуры создают гораздо меньше патчей. А если небо у вас — коробка
    вокруг уровня, то не забудьте закрасить все внешние грани объектов и дно
    уровня специальной текстурой SKY. Во время компиляции данные
    SKY-поверхности не просчитываются на освещённость и не создают патчей.

8. Причины медленной работы HLVIS

    Итоговое время компиляции карты, а именно просчёт её визуальной части
    программой-компилятором HLVIS.EXE, не должно превышать 50-60 минут при
    использовании машины уровня PII-300 (да, таких, наверное, уже и не
    осталось :).

    Причиной продолжительной работы HLVIS.EXE может быть окружение карты
    небом в виде большой коробки. В этом случае HLVIS.EXE обрабатывает
    большие территории снаружи карты, что увеличивает время его работы.
    Поэтому в этом случае не забывайте закрашивать внешние стороны объектов и
    дно карты текстурой SKY.

    Второй причиной, котороя сказывается на время компиляции программой
    HLVIS.EXE может стать архитектура уровня. Это довольно трудно объяснить,
    поэтому приведем несколько примеров:

    • проходы, которые пересекают стены не под прямым углом;
    • браши или брашевые энтити, развернутые на произвольный угол;
    • высокие неперпендикулярные к полу стены;
    • большое число мелких брашей (не энтити) на обширных, открытых пространствах;

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

    Как избежать долгой компиляции HLVIS.EXE? Просто не делайте
    описанного выше: не создавайте обширных, открытых пространств; не
    делайте небо коробкой вокруг карты, а если делает, то окрашивайте
    текстурой SKY дно и внешние стены уровня; проходы разворачивайте на 30,
    45 или 90 градусов, зажимая при вращении клавишу Shift. Конечно, всё это
    значительные ограничения, но ничего поделать нельзя. Необходимо просто
    это принять. Counter-Strike довольно старая игра и движок не расчитан на
    значительное число полигонов. Да, и нужны ли все эти «красоты» игроку?
    Мы уверены, главное, захватывающий геймплей.

9. Причины медленной работы HLRAD (проблемы с MakeScales)

    У вас значительное время занимает операции «Make Scales» и «Swap Transfers»? Читайте об этом ниже.

    Программа-компилятор HLRAD.EXE требует довольно значительное
    количество оперативной памяти. Количество памяти нужное для просчёта
    визуальной матрицы (vismatrix) компилятором HLRAD.EXE экспоненциально
    зависит от размера данной визуальной матрицы. Формула для расчёта
    количества необходимой vismatrix-памяти такова: (количество патчей)2/16 = количество vismatrix-памяти в байтах. Если число патчей максимально 65535, то памяти потребуется 256 Мб.

    Но память нужна не только для обработки визуальной матрицы. Она также
    необходима для выполнения операции MakeScales. Количество нужной
    оперативной памяти для этой операции приблизительно равно 0.5
    vismatrix-памяти, то есть на обе операции вместе, в самом наихудшем
    случае с 65535 патчами, компилятору HLRAD.EXE может понадобиться
    256+128=384 Мб памяти.

    Когда выполняется операция MakeScales на больших детализированных
    картах можно не редко наблюдать следующую специфичность: сначала
    MakeScales доходит до 90 процентов, скажем за 30 минут, а следующие 10
    процентов просчитываются несколько часов или даже дней! Происходит это,
    когда оперативная память исчерпывается, при этом начинается энергичное
    обращение к файлу подкачки (SWAP-файлу). Данный случай можно поробовать
    решить, добавив параметр -sparse в строчку запуска
    программы-компилятора HLRAD.EXE. Это снизит использование оперативной
    памяти на 10 процентов за счёт увеличения нагрузки на процессор. Ну, а
    лучше всего прикупить пару планочек оперативки :-)

    Для ускорения работы HLRAD.EXE подходят методы, применяющиеся для
    устранения ошибки «Exceeded MAX_PATCHES», которую мы рассмотрели выше в
    данном материале. Используя данные методы, можно сократить число патчей,
    тем самым уменьшить потребность HLRAD.EXE в памяти. Также можно
    попробовать использовать параметр

    -bounce 0 для
    программы-компилятора HLRAD.EXE. При этом на карте останется лишь прямое
    освещение, а отраженный свет просто-напросто не будет просчитан. Но,
    помните, данную опцию можно применять только для тестовой компиляции.
    При финальной (полной) компиляции параметр -bounce всегда должен быть больше нуля.

    Также мы советуем использовать опцию -incremental для
    программы-компилятора HLRAD.EXE. В этом случае, при повторной (но не при
    первой!) компиляции будут пропущены операции: MakeScales, SwapTransfers
    и BuildVisLeafs. Использовать данный параметр не просто, а очень
    просто. В первый раз мы компилируем уровень как обычно, но не забыв
    добавить параметр -incremental для компилятора HLRAD.EXE. В этом
    случае создастся файл размером до нескольких десятков мегабайт. При
    второй и последующих компиляциях уровня с данной опцией этот файл будет
    использован, что позволит пропустить перечисленные выше стадии. Так что,
    если у Вас немного системной памяти, то нужно помучиться только один
    раз (при первой компиляции), а при последующих компиляциях всё будет
    намного быстрее. Кстати сказать, если мы изменим свойства или
    расположение источников света (объекты: light_environment, light_spot и
    light), то не забудьте обновить эту информацию в MAP-файле при помощи
    параметра -onlyents, прописанного в программе-компиляторе HLCSG.EXE.

10. HLRAD failled to allocate a block of memory

    Данная ошибка возникает, когда программа-компилятор HLRAD.EXE
    (просчитывающая освещённость на карте) не смогла продолжить работу из-за
    недостатка оператвиной памяти. В этом случае нужно увеличить размер
    виртуальной памяти (файла подкачки, SWAP-файла) или (рекомендуется)
    установить доп. оперативную память на свой ПК.

11. Bad Surface Extents

    В большинстве случаев эта ошибка возникает при нанесении текстур со
    слишком большим масштабом (более десяти, а обычно более ста). Эту ошибку
    также можно обнаружить в редакторе Хаммер при нажатии на [Alt-P]. Там о ней будет сообщено, как «Texture axis perpendicular to face».

12. Missing [ in texturedef

    Есть несколько причин появления этой ошибки:

    • 1-на или несколько сторон объекта не имеют никакой текстуры. В
      Хаммере эти браши или брашевые энтити отображаются полностью белыми, или
      же если название текстуры состоит только из пробелов.
      Проверьте уровень на ошибки нажатием комбинации клавиш [Alt-P], редактор выдаст эту ошибку как «Invalid texture»

13. MAX_PORTALS_ON_LEAF

    По обыкновению, данная ошибка возникает из-за огромных комнат с
    большим числом входящих в неё проходов. Также причиной может быть
    поврежденный браш или браш неправильной формы. Такой браш можно отыскать
    по [Alt-P].Пример комнаты (вид сверху)

    На рисунке выше изображена комната на виде сверху. Розовое — комната,
    синее — стены. Комната является одним большим пространством (leaf). Эта
    комната соединяется с 32-мя маленькими комнатками (углублениями в
    стенах). Таким образом, у 1 leaf образуется тридцать два портала
    (portals).

    Так как в HL «MAX_PORTALS_ON_LEAF» может быть равным 256-ти, то эта ошибка чаще всего возникает из-за «битого» браша.

14. MAX_MAP_CLIPNODES

    Clipnodes — это такие поверхности, которые определяются
    Counter-Strike’ом, как непроходимые для игрока. Всякий браш, брашевый
    энтити-объект в уровне (стена, скалы, земля, пол или ящик) «окутывается»
    clipnode-поверхностями. Благодаря clipnode-поверхностям игрок не падает
    сквозь землю и не проходит сквозь стены и другие браши.

    Значительное количество данных плоскостей может вызвать эту ошибку
    (MAX_MAP_CLIPNODES). В улучшенных утилитах Зонера — Custom Build
    автоматом включён режим экономии данных clipnode-плоскостей. Однако, это
    не страхует от появления этой ошибки.

    Если мы делаем небо вокруг карты в виде большой коробки, окрашенной
    текстурой SKY, то создается большое число clipnode-поверхностей, что
    может привести к появлению ошибки MAX_MAP_CLIPNODES, к тому же это
    приводит к изменению времени компиляции HLVIS.EXE в сторону увеличения.

    В архиве с официальной версией (не улучшенной) утилит Зонера 2.5.3
    есть пример: уровень clipnode.map, в котором показано, как можно сберечь
    большое количество clipnode-поверхностей.
    Давайте рассмотрим рисунок с этого уровня:

    Пример экономии clipnodes

    На данной картинке HINT и CLIP браши представлены в разрезе. Они имеют
    совершенно одинаковый размер и расположены вокруг объекта. Если бы мы
    не разместили эти браши вокруг объекта, то около данного объекта (с
    большим числом сторон) образовалось бы много clipnodes, которые точно
    указывают форму объекта, через которую игрок не может пройти. Используя
    же данный метод с CLIP и HINT брашами, мы сильно уменьшаем число
    clipnode-плоскостей, уменьшая вероятность возникновения данной ошибки и
    сокращая время работы программы-компилятора HLVIS.EXE.

    Мы поэкспериментировали и откомпилировали уровень с CLIP-брашем и без него. И вот результаты:

    • Clipnodes с CLIP-брашем (как на рисунке): 30
    • Clipnodes без CLIP-браша: 149

    Как видно из примера, результат более чем значительный. Конечно, если
    уровень маленький и clipnodes порядка 12000-15000, то особого смысла
    экономить нет, но это данный метод экономии может пригодиться при
    создании большой карты. Кстати сказать, мы установили, что HINT-браш не
    влияет на количество clipnode-поверхностей, так что его можно не
    использовать.

ЧАСТЬ 2. Обзор всех ошибок компиляции

Общие ошибки для всех компиляторов
Ошибка Описание Как исправить
Memory allocation failure Программа-компилятор не сумел разместить информацию в памяти Исчерпался файл подкачки (SWAP-файл). Увеличьте размер файла подкачки или (что лучше) количество оперативной памяти
NULL Pointer Внутренняя ошибка программы-компилятора Напишите о данной проблеме на [email protected]
Bad Thread Workcount Внутренняя ошибка программы-компилятора Напишите о данной проблеме на [email protected]
Unable to create thread Внутренняя ошибка программы-компилятора Напишите о данной проблеме на [email protected]
Exceeded MAX_MAP_PLANES Превышено максимально допустимое количество поверхностей (больше 32767) Уменьшите размер уровня, уберите излишнюю детализированность
Exceeded MAX_MAP_TEXTURES Превышено максимально возможное число текстур Уменьшите число текстур
Exceeded MAX_MAP_MIPTEX Превышено максимально возможное количество памяти, выделяемой под текстуры (более 4194304 байт) Уменьшите количество различных текстур, уменьшите размер текстур
или установите параметр -texdata (читайте о данном параметре здесь: здесь)
Exceeded MAX_MAP_TEXINFO Внутреннее ограничение компилятора Напишите о данной проблеме на [email protected]
Exceeded MAX_MAP_SIDES Внутреннее ограничение компилятора Напишите о данной проблеме на [email protected]
Exceeded MAX_MAP_BRUSHES Превышено максимально возможное количество брашей (более 8192) Уменьшите количество брашей
Exceeded MAX_MAP_ENTITIES Превышено максимально возможное количество энтити-объектов (более 1024) Уменьшите количество энтитей
Exceeded MAX_ENGINE_ENTITIES Превышено максимально возможное количество энтитей для движка HL (более 1024) Уменьшите количество энтитей
Exceeded MAX_MAP_MODELS Превышено максимально возможное количество брашевых энтитей (более 400) Уменьшите количество брашевых энтитей. Если возможно, объедините несколько объектов в один
Exceeded MAX_MAP_VERTS Внутреннее ограничение компилятора Напишите о данной проблеме на [email protected]
Exceeded MAX_MAP_EDGES Внутреннее ограничение компилятора Напишите о данной проблеме на [email protected]
Exceeded MAX_MAP_CLIPNODES Превышено максимально возможное количество clipnode-плоскостей (более 32767) Эта ошибка подробно описана в 1-й части данного материала
Exceeded MAX_MAP_MARKSURFACES Внутреннее ограничение компилятора Напишите о данной проблеме на [email protected]
Exceeded MAX_MAP_FACES Превышено максимально возможное количество полигонов (более 65535) Увеличьте масштаб текстур на больших поверхностях (земля, стены,
скалы и пр.). Возможно, ваш уровень слишком большой. Уменьшите его
размер, уберите излишнюю детализированность
Exceeded MAX_MAP_SURFEDGES Внутреннее ограничение компилятора Напишите о данной проблеме на [email protected]
Exceeded MAX_MAP_NODES Превышено максимально возможное количество секций (более 32767) Уменьшите размер уровня, уберите излишнюю детализированность
CompressVis Overflow Внутренняя ошибка программы-компилятора Напишите о данной проблеме на [email protected]
DecompressVis Overflow Внутренняя ошибка программы-компилятора Напишите о данной проблеме на [email protected]
Execution Cancelled Запуск компилятора был прерван пользователем или установками компилятора  
Internal Error Внутренняя ошибка программы-компилятора Напишите о данной проблеме на [email protected]
Ошибки компилятора HLCSG
Ошибка Описание Как исправить
Missing ‘[‘ in texturedef (U) Одна или несколько плоскостей в уровне не имеют никакой текстуры или закрашены текстурой, в названии которой есть пробелы Эта ошибка подробно описана в 1-й части данного материала
plane with no normal Неправильная форма браша или брашевого энтити-объекта, полученная в результате манипуляции с вершинами Эта ошибка подробно описана в 1-й части данного материала
brush with coplanar faces Неправильная форма браша или брашевого энтити-объекта, полученная в результате манипуляции с вершинами Эта ошибка подробно описана в 1-й части данного материала
brush outside world Неправильная форма браша или брашевого энтити-объекта, полученная в результате манипуляции с вершинами Эта ошибка подробно описана в 1-й части данного материала
mixed face contents Объект имеет на себе несочетаемые текстуры Эта ошибка подробно описана в 1-й части данного материала
Brush type not allowed in world Неразрешенный тип брашевой энтити Удалите данный энтити-объект или замените новым
Brush type not allowed in entity Неразрешенный тип точечной энтити Удалите данный энтити-объект или замените новым
No visibile brushes Нет видимых объектов или все они CLIP-браши и ORIGIN-браши (в уровне должен быть хотя бы 1 видимый браш)  
Entity with ONLY an ORIGIN brush Любая энтити должена состоять хотя бы из 1 видимого брашевого объекта. CLIP, HINT и ORIGIN-браши не являются видимыми  
Could not find WAD file Компиляторы не смогли обнаружить текстурную библиотеку (WAD-файл, указанный в уровне) Проверьте наличие всех подключенных к редактору текстурных
WAD-файлов или используйте параметр -wadconfig (подробнее об этом
параметре читайте здесь)
Exceeded MAX_TRIANGLES Внутреннее ограничение компилятора Напишите о данной проблеме на [email protected]
Exceeded MAX_SWITCHED_LIGHTS Превышено максимально возможное число включаемых и выключаемых источников света (light или light_spot) Уменьшите число точечных энтити-объектов light или light_spot
Exceeded MAX_TEXFILES Внутреннее ограничение компилятора Напишите о данной проблеме на [email protected]
Ошибки компилятора HLBSP
Ошибка Описание Как исправить
LEAK in the map На карте присутствует «дырка» (LEAK) Эта ошибка подробно описана в 1-й части данного материала
Exceeded MAX_LEAF_FACES В уровне есть поврежденный браш или масштаб текстуры слишком маленький: от -1 до 1; Удалите неправельный браш (проверьте вставленные на карту
префабы, если есть; посмотрите на браши полученные с использованием
функции Carve или путём манипуляции с вершинами). Или увеличьте масштаб
текстуры
Exceeded MAX_WEDGES Внутреннее ограничение компилятора Напишите о данной проблеме на [email protected]
Exceeded MAX_WVERTS Внутреннее ограничение компилятора Напишите о данной проблеме на [email protected]
Exceeded MAX_SUPERFACEEDGES Внутреннее ограничение компилятора Напишите о данной проблеме на [email protected]
Empty Solid Entity Брашевая (brush-based) энтити, к примеру, func_wall не содержит брашей (пустая) В редакторе Hammer нажмите комбинацию клавиш [Alt-P], перейдите на ошибочный объект кнопкой Go to error, закройте окошко с ошибками, убедитесь, проверьте что размер объекта нереален (к примеру, -1999998w), нажмите Delete, чтобы удалить объект. Повторите эти операции для всякого «пустого» ошибочного объекта.
Ошибки компилятора HLVIS
Ошибка Описание Как исправить
Leaf portal saw into leaf    Эта ошибка подробно описана в 1-й части данного материала
Exceeded MAX_PORTALS_ON_LEAF Превышено максимально возможное число порталов для одной leaf-поверхности или в уровне есть ошибочный браш (порталов более 256) Эта ошибка подробно описана в 1-й части данного материала
Invalid client/server state Внутренняя ошибка программы-компилятора Напишите о данной проблеме на [email protected]
Ошибки компилятора HLRAD
Ошибка Описание Как исправить
Exceeded MAX_TEXLIGHTS Превышено максимально возможное количество светящихся текстур Уменьшите число светящихся текстур, которые используются в уровне
Exceeded MAX_PATCHES Превышено максимально возможное число патчей (более 65535) Эта ошибка подробно описана в 1-й части данного материала
Transfer < 0 Внутренняя ошибка программы-компилятора Напишите о данной проблеме на [email protected]
Bad Surface Extents Объект затекстурирован со слишком большим масштабом текстуры: больше десяти, а, обычно, больше ста. Эта ошибка подробно описана в 1-й части данного материала
Malformed face normal Используемый тип выравнивания текстуры на видимой стороне объекта не возможен. Проверьте карту на ошибки, нажатием на комбинацию клавиш [Alt-P]. Исправьте все ошибки «Texture axis perpindicular to face»
No Lights! На карте нет источников света Добавьте источник света: light_environment, light_spot или light)
Bad Light Type Внутренняя ошибка программы-компилятора Напишите о данной проблеме на [email protected]
Exceeded MAX_SINGLEMAP Внутреннее ограничение компилятора Напишите о данной проблеме на [email protected]

Глава III.
Компиляция (ZHLT).

§ 3.1
  Что
такое компиляция?
§ 3.2
  Компиляторы
ZHLT
§ 3.3   Улучшенная
версия ZHLT Custom Build
§ 3.4
  Параметры
компиляторов
§ 3.5   Как
компилировать?
§ 3.6   Ошибки
компиляции
§ 3.7   Разбор
компиляционного LOG-файла
§ 3.8
  Изменение
карты без компиляции
§ 3.9
  О
декомпиляции карт
§ 3.10 Узнай
устройство карты без декомпиляции
§ 3.11 Как
ускорить компиляцию?

К оглавлению Учебника

Категория: Создание карт CS | Добавил: SuperStart (02.03.2012)

Просмотров: 6596

| Рейтинг: 0.0/0 |

Добавлять комментарии могут только зарегистрированные пользователи.

[

Регистрация

|

Вход

]

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

Итак, известно, что далеко не все ошибки, имеющиеся на карте, обнаруживаются в редакторе карт при проверке на ошибки по [Alt-P]. Большинство серьезных ошибок обнаруживается только во время компиляции.

Утилиты ZHLT при наличии ошибки создают файл *.ERR, в который записывается тип ошибки, номер объекта, вызвавшего ее, а также краткое руководство по исправлению, но, естественно, на английском языке.

Содержание статьи:

    ЧАСТЬ 1. Наиболее часто встречающиеся ошибки компиляции

  • Plane with no normal
  • Brush with coplanar faces
  • Leaf portal saw into leaf
  • Brush ‘outside world’
  • Mixed face contents
  • === LEAK in hull 0 ===
  • Exceeded MAX_PATCHES
  • Причины медленной работы HLVIS
  • Причины медленной работы HLRAD (проблемы с MakeScales)
  • HLRAD failled to allocate a block of memory
  • Bad Surface Extents
  • Missing [ in texturedef
  • MAX_PORTALS_ON_LEAF
  • MAX_MAP_CLIPNODES
  • ЧАСТЬ 2. Обзор всех ошибок компиляции

  • Сводная таблица всех ошибок компиляции

ЧАСТЬ 1. Наиболее часто встречающиеся ошибки компиляции

1. Plane with no normal

    Пример:

    Entity 10, Brush 0, Side 4: plane with no normal
    Entity 10, Brush 0, Side 5: plane with no normal

    Данная ошибка возникает при неправильной манипуляции с вертексами. Как известно, любая плоскость определяется 3 точками. Если одна или несколько точек плоскости имеют одинаковые координаты, то это будет уже не плоскость, а линия или точка.

    Как исправить? Удалить неправильный объект и заменить его новым.

2. Brush with coplanar faces

    Пример:

    Entity 10, Brush 0, Side 5: has a coplanar plane at (-753, -9, 251), texture CA1X_CON1B
    Entity 10, Brush 0, Side 6: has a coplanar plane at (-753, -32, 251), texture CA1X_CON1B

    Данная ошибка возникает при неправильной манипуляции с вертексами. Давайте рассмотрим случай возникновения такой ошибки. Предположим, что на карте у нас есть такой объект (см. рис. ниже).

    Пример объекта

    На виде сверху (2D top) в режиме работы с вертексами объект будет выглядеть, как показано на рисунке внизу, слева. Предположим мы решили сделать из этого объекта куб. Для этого верхнюю точку (вертекс) опускаем вниз (см. рис. ниже).

    Вид сверху на объект в режиме манипуляции с вертексамиНе правильное действие с вертексами

    Так делать нельзя! Так как мы получаем, что на одной стороне объекта расположено 2 плоскости, а этого быть не должно. Вот как эта не правильная операция выглядит в 3-х мерном виде (см. рис. ниже).

    Не правильное действие с вертексами (3D вид)

    Не правильное действие с вертексами (3D вид)

    Как исправить? Можно, узнав номер неправильного браша или энтити-объекта из ERR-файла с ошибкой, перейти к нему, нажав [Shift-Ctrl-G] в редакторе. При этом Вы увидите небольшое окошко (см. рис. ниже), первая строка которого позволяет перейти к определенному энтити-объекту,
    вторая — к брашу. Номер неправильного объекта указывается в ERR-файл в следующем виде:
    «Entity 10, Brush 0, Side 5….», это означает, что ошибка у 10-го энтити-объекта на 5 стороне.

    Окно перехода к объекту по его номеру [Shift-Ctrl-G]

    После нахождения неправильного объекта, его можно удалить, а можно попытаться исправить. В приведенном выше примере необходимо переместить верхний средний вертекс направо или налево, таким образом, мы превратим две грани, лежащие в одной плоскости, в одну (см. рис. ниже).

    Перемещение вертексаПеремещение вертекса

    После переноса точки Вам будет задан вопрос: «Merge Vertices?» («Совместить вершины?»), обязательно отвечайте «Да».

    Вопрос: Соединить вершины? Отвечаем всегда - ДА

3. Leaf portal saw into leaf

    Данная ошибка возникает, когда компилятор HLVIS пытается сравнить 2 портала (leaf portals), которые принадлежат одной видимой вершине (visibility node). Посмотрите на картинку ниже:Нет ошибки: порталы лежат на одной прямой

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

    Если возникает такая ситуация, когда два портала принадлежат одной вершине и образуют кривую линию, то получается ошибка «Leaf portal saw into leaf». Вот как это выглядит:

    Ошибка: Leaf portal saw into leaf

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

    Как исправить? Лучше всего загрузить карту с ошибкой и попытаться отыскать, так называемый, эффект зеркального отражения (hall of mirrors effect). Эта ошибка может легко вызываться тем, что координаты одного из вертексов браша немного отклоняются от координатной сетки. В этом случае проще всего пересоздать неправильный браш, но также можно попробовать использовать параметр

    -full для компилятора HLVIS, который помогает уменьшить количество возможных vis-ошибок. Время компиляции с параметром -full обычно увеличивается на 30%. R_speeds (количество полигонов) при этом остается приблизительно таким же, как и при нормальной vis-компиляции.


4. Brush ‘outside world’

    Пример:

    Entity 10, Brush 0: outside world(+/-4096): (-9000, -64, 216)-(9000,23,283)

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

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

5. Mixed face contents

    Пример:

    Entity 0, Brush 12: mixed face contents
    Texture ROCK_X1 and SKY

    Каждый отдельный объект в Half-Life может быть окрашен в текстуру только одного типа (например, только в текстуру воды). Например, объект, окрашенный с пяти сторон обычной текстурой, а
    с шестой — текстурой воды, вызовет данную ошибку.

    Всего существует несколько типов текстур, которые не могут быть нанесены на объект вместе с другими. К таким текстурам относятся: SKY, CLIP, ORIGIN и текстуры воды. А самую подробную информацию о типах текстур и их совместимости Вы можете получить из соответствующей статьи: «Типы текстур в Half-Life/CS».

    Как исправить? Перейдите к объекту, вызвавшему ошибку, по [Shift-Ctrl-G] и закрасьте его со всех сторон текстурами одного типа.


6. === LEAK in hull 0 ===

    LEAK — дырка на карте. Это самая известная и, пожалуй, самая нелюбимая ошибка. А все потому, что ее трудно обнаружить и легче не допускать, чем потом часами искать (прям стихи :)

    А причиной такой ошибки является дырка (зазор) на уровне. Например, есть два браша, между которыми существует зазор (по неосторожности Вы не состыковали эти браши вплотную). Эти браши могут быть, например, стенами или землей Вашей карты. При компиляции программы-компиляторы, обнаружив такую дырку, начинают думать: «А что же за этой дыркой?». Они видят зазор, а за ним ужасающая пустота :) — в итоге возникает ошибка.

    Ниже на картинке мы приводим пример такой ошибки.

    Одна из главных причин ошибки LEAK - дырка в уровне

    Но не всегда LEAK виден так явно, как на рисунке выше. Зачастую LEAK имеет очень маленькие размеры, гораздо меньше даже 1 юнита. Особо много LEAK’ов в декомпилированных картах. Например, Вы решили немного изменить De_Dust, разумеется, декомпильнули его, затем попытались вновь скомпилировать и получили кучу ошибок LEAK.

    Второй причиной вызывающей появление LEAK ошибки, является нахождение точечного энтити-объекта за пределами карты. Например, Вы сделали карту, построили вокруг нее небо и случайно поместили какой-нибудь там ambient_generic снаружи карты. В итоге получаем LEAK. Но это лучше, чем искать дырку на карте, т.к. объект найти гораздо проще.

    Как исправить? Можно воспользоваться специальной утилитой LeakMarker. А можно попытаться найти LEAK при помощи самой игры. Для этого нужно скопировать файл *.PTS, который создается в директории с компиляторами при обнаружении ошибки LEAK, в директорию «cstrike/maps», где лежит Ваша недокомпилированная карта, которая тем не менее способна запускаться. Далее нужно запустить консоль и ввести: map имя_карты. После загрузки карты, пишем: pointfile.

    После ввода этих команд на своей карте Вы обнаружете тонкую извивающуюся линию из черно-белых точек (см. рис. ниже).

    Линия из точек, показывающая место ошибки LEAK

    Эта линия располагается около места с ошибкой LEAK. Запомнив место, открываете редактор и внимательно смотрите на границы брашей, четко ли они состыкованы. Попробуйте инструментом Vertex Manipulation выровнить вершины подозрительных брашей по координатной сетке.

    Если при попытке загрузить pointfile Half-Life вылетает — значит этот файл слишком большой. Придется применять другие методы.

    Если ничего не помогает и найти LEAK не удается, создайте вокруг карты небо коробкой, т.е. поместите всю свою карту в большую «комнату», окрашенную со всех сторон текстурой SKY. Это поможет 100% :)

    Кстати, если Вы вдруг не заметили, что компиляторы выдали ошибку и подумали, что карта нормально откомпилировалась, то обнаружить неладное можно по жутким тормозам на карте (т.к. HLVIS не успел дойти до оптимизации карты), а освещение на карте будет очень светлым и монотонным (см. рис. выше). Теней от объектов не будет, т.к. HLRAD даже не приступил к работе из-за ошибки.

7. Exceeded MAX_PATCHES

    Когда начинает работу компилятор HLRAD, обрабатывающий освещение на карте, он разбивает все видимые поверхности на небольшие участки, называемые патчами (patches). Существует ограничение на максимальное количество патчей — их не должно и не может быть больше 65535.

    По умолчанию размер каждого патча составляет 64х64 юнита. Если масштаб (scale) текстуры больше или меньше (речь идет не о размере текстуры, а именно о масштабе), то это сказывается на количестве патчей. Это означает, что текстура с масштабом 2, будет иметь в 4 раза меньше патчей, нежели текстура с масштабом 1.

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

    Как исправить? В строку запуска компилятора HLRAD можно прописать параметр «-chop 96» или «-chop 128». Этот параметр устанавливает минимальный размер патча в юнитах. Напомним, что по умолчанию минимальный размер патча составляет 64 юнита. При установке размера патча более 96 юнитов, происходит заметное ухудшение качетсва освещения карты, может появиться эффект «лесенки» на тенях, отбрасываемых объектами.

    Также для уменьшения числа патчей можно увеличить масштаб (scale) текстур, например, больших текстур на скалах или земле. Большие по масштабу текстуры создают гораздо меньше патчей. Ну, а если небо у Вас сделано большой коробкой вокруг карты — закрасьте все внешние стороны и дно карты текстурой SKY. При компиляции такие поверхности не просчитываются на освещение и не создают патчей.

8. Причины медленной работы HLVIS

    Время компиляции карты, а именно расчет ее визуальной части компилятором HLVIS, не должно быть слишком большим. На грамотно сделанных картах оно не должно превышать 40-45 минут при использовании машины класса PII-300.

    Причиной долгой работы HLVIS может быть окружение карты небом в виде большой коробки с целью избежания ошибки LEAK. В этом случае HLVIS обрабатывает большие территории снаружи карты, что увеличивает время его работы.

    Второй причиной увеличения времени компиляции HLVIS’ом может стать архитектура на карте. Это довольно трудно объяснить, поэтому приведем несколько примеров:

    • корридоры, пересекающие стену не под прямым углом;
    • браши, развернутые на произвольный угол;
    • большие, высокие комнаты с неперпендикулярными к земле стенами;
    • большое количество мелких брашей (не энтити) на обширных, открытых пространствах

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

    Как избежать долгой компиляции HLVIS? Просто не делайте описанного выше: не создавайте больших, открытых пространств; не делайте небо коробкой вокруг карты; корридоры разворачивайте на 30, 45 или 90°. Да, это все серьезные ограничения, но ничего поделать невозможно. Необходимо просто это принять. Half-Life далеко не новая игра и ее движок не расчитан на большое количество полигонов. Да, и нужны ли все эти «красоты» игроку? Главное — интересный геймплей.

9. Причины медленной работы HLRAD (проблемы с MakeScales)

    У Вас долго проходит операция «Make Scales» или «Swap Transfers»? Тогда читайте ниже.

    Компилятору HLRAD необходимо довольно большое количество оперативной памяти. Количество памяти необходимое для обработки визуальной матрицы (vismatrix) компилятором HLRAD экспоненциально зависит от размера этой визуальной матрицы. Формула для расчета количества необходимой vismatrix-памяти такова: (количество патчей)2/16 = количество vismatrix-памяти в байтах. Если число патчей максимально 65535, то памяти потребуется 256 Мб.

    Но память необходима не только для просчета визуальной матрицы. Она также нужна для выполнения операции MakeScales. Количество необходимой памяти для этой операции приблизительно равно половине vismatrix-памяти, т.е. на обе операции вместе, в самом наихудшем случае с 65535 патчами, компилятору HLRAD может понадобится 256+128=384 Мб памяти.

    При выполнении операции MakeScales на больших детализированных картах можно часто наблюдать следующую особенность: сначала MakeScales доходит до 90%, скажем за 20 минут, а следующие 10% обрабатываются несколько часов или даже дней! Это происходит при исчерпывании ресурса оперативной памяти, при этом начинается активное обращение к файлу подкачки. Данную ситуацию можно поробовать разрешить, добавив параметр -sparse в строку запуска компилятора HLRAD. Это снизит затраты оперативной памяти на 10% за счет увеличения нагрузки на процессор. Ну, а лучше всего установить дополнительную оперативную память.

    Для ускорения работы HLRAD подходят те же методы, которые применяются для устранения ошибки «Exceeded MAX_PATCHES», рассмотренной выше. Используя эти методы, можно уменьшить количество патчей, тем самым уменьшить потребность HLRAD в памяти. Также можно использовать параметр

    -bounce 0 для компилятора HLRAD. При этом на карте останется лишь прямое освещение, а отраженное попросту не будет просчитано. Но этот параметр можно применять только для тестовой компиляции. При окончательной компиляции парметр -bounce всегда должен быть больше 0.

    Также можно посоветовать использовать параметр -incremental для компилятора HLRAD. При этом при повторной (но не при первой!) компиляции будут «пропущены» стадии: BuildVisLeafs, MakeScales, SwapTransfers. Использовать этот параметр очень просто. В первый раз Вы компилируете карту как обычно, но добавив параметр -incremental. При этом будет дополнительно создан файл размером до нескольких десятков мегабайт. При повторной компиляции карты с этим же параметром данный файл будет использован и позволит пропустить перечисленные операции. Таким образом, если у Вас мало оперативной памяти, то можно помучиться только один раз (при первой компиляции), дальше все пройдет значительно быстрее. Кстати, если Вы поменяете свойства или расположение источников света (объекты: light, light_spot и light_environment), то не забудьте обновить эту информацию в MAP-файле при помощи параметра -onlyents, прописанного в компиляторе HLCSG.

10. HLRAD failled to allocate a block of memory

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

    Если Вы не знаете, где в Windows изменяется размер виртуальной памяти, прочитайте об этом в статье «Что такое компиляция?».


11. Bad Surface Extents

    Обычно данная ошибка возникает при нанесении текстур со слишком большим масштабом (более 10, а обычно более 100). Эту ошибку можно обнаружить и в редакторе Hammer. Там она будет найдена, как «Texture axis perpendicular to face». А иногда в редакторе ничего не отображается, вроде бы все чисто. Здесь надо попытаться вспомнить, чего такого необычного Вы сделали на своей карте в последнее время :) Может быть Вы сможете найти какой-то подозрительный объект или вспомните, что раньше были какие-то проблемы с текстурами у какого-то объекта. В общем поищите немного, и Вы наверняка найдете причину данной ошибки.

12. Missing [ in texturedef

    Возможно несколько причин появления данной ошибки:

    • Одна или несколько поверхностей объекта не имеют текстуры (в редакторе такие объекты изображаются абсолютно белыми), или же имя текстуры состоит только из пробелов.
      Проверьте карту на ошибки [Alt-P], редактор покажет такую ошибку как «Invalid texture»
    • В имени текстуры присутствуют пробелы (это недопустимо). Замените такие текстуры.
    • Данная ошибка возникает при импорте карт из WorldCraft 3.3 в WorldCraft 2.1, 2.0
    • Данная ошибка возникает при импорте карт из WorldCraft 3.3 в QuArK
    • Карта сохранена в формате *.MAP, но в поле worldspawn отсутствует: «mapversion» «220» (встречается очень редко)

13. MAX_PORTALS_ON_LEAF

    Обычно такая ошибка возникает из-за больших комнат с большим количеством ведущих в нее корридоров. Также причиной может быть поврежденный (неправильный) браш. Такой браш можно отыскать по [Alt-P].Пример комнаты (вид сверху)

    На картинке сверху изображена комната на виде сверху. Розовое — комната, синее — ее стены. Розовая комната является одной большой плоскостью, пространством (leaf). Данная комната соединяется с 32-мя небольшими комнатками (углубления в стенах), таким образом, у одного leaf образуется 32 портала (portals).

    Так как в Half-Life «MAX_PORTALS_ON_LEAF» может быть равным 256, то данная ошибка чаще всего случается из-за «битого» браша.

14. MAX_MAP_CLIPNODES

    Clipnodes — поверхности, определяемые игровым движком, как непроходимые для игрока. Каждый браш на карте (будь-то стена, пол или ящик) «окутывается» clipnode-поверхностями. Благодаря clipnode’ам игрок не проваливается сквозь землю и не может проходить сквозь стены. Помните старый халфовский чит «noclip» (хождение сквозь стены) — вот это оно и есть :)

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

    Когда Вы делаете вокруг карты небо в виде большой коробки, чтобы избежать ошибки LEAK, создается большое число clipnodes, что может привести к появлению ошибки MAX_MAP_CLIPNODES, к тому же это приведет к увеличению времени работы компилятора HLVIS.

    В архиве с официальной версией (неулучшенной) утилит ZHLT 2.5.3 есть пример (карта clipnode.map), в котором показано, как можно сберечь большое количество clipnodes.
    Давайте посмотрим на картинку с этой карты:

    Пример экономии clipnodes

    На данном рисунке CLIP и HINT браши представлены в разрезе. Они имеют абсолютно одинаковый размер и расположены аккурат по размерам объекта. Если бы мы не поместили эти браши, то вокруг такого объекта с большим числом сторон было бы образовано большое количество clipnode-плоскостей, которые должны были бы точно указать форму объекта, через которую игрок не может пройти. А используя данный метод, мы значительно уменьшаем количество clipnodes, тем самым уменьшаем вероятность возникновения ошибки MAX_MAP_CLIPNODES и уменьшаем время работы компилятора HLVIS.

    Мы провели эксперимент и скомпилировали карту с CLIP-брашем и без него. И вот результаты:

    • Clipnode-плоскостей с CLIP-брашем (как на рисунке): 30
    • Clipnode-плоскостей без CLIP-браша: 149

    Как видите, результат более чем интересный. Получается, что используя CLIP-браш вокруг объектов с большим количеством сторон, мы сохраняем приличное количество clipnode-плоскостей. Конечно, если карта небольшая и clipnode-плоскостей порядка 10.000-15.000, то особого смысла экономить нет, но это может пригодится при создании большой карты. Кстати, оказалось, что HINT-браш никоим образом не влияет на количество clipnodes, его можно не использовать.

ЧАСТЬ 2. Обзор всех ошибок компиляции

  • Ошибка bad string xbox 360
  • Ошибка bad serial number given in setup operation flashpoint
  • Ошибка bad request код ошибки 400 amocrm
  • Ошибка bad request госуслуги
  • Ошибка bad pool caller что это