3.6 Ошибки компиляции // Создание карт для CS

В данной статье мы подробно рассматриваем наиболее частые ошибки компиляции, рассказываем как их избежать и как исправить. В конце статьи мы приводим сводную таблицу всех возможных ошибок, причем в той форме, в которой они выдаются компиляторами ZHLT Custom Build. С небольшими изменениями данные ошибки выводятся и в официальных компиляторах ZHLT. Итак, известно, что далеко не все ошибки, имеющиеся на карте, обнаруживаются в редакторе карт при проверке на ошибки по [Alt-P] . Большинство серьезных ошибок обнаруживается только во время компиляции. Утилиты ZHLT при наличии ошибки создают файл *.ERR, в который записывается тип ошибки, номер объекта, вызвавшего ее, а также краткое руководство по исправлению, но, естественно, на английском языке. ЧАСТЬ 1. Наиболее часто встречающиеся ошибки компиляции ЧАСТЬ 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-х мерном виде (см. рис. ниже). Как исправить? Можно, узнав номер неправильного браша или энтити-объекта из ERR-файла с ошибкой, перейти к нему, нажав [Shift-Ctrl-G] в редакторе. При этом Вы увидите небольшое окошко (см. рис. ниже), первая строка которого позволяет перейти к определенному энтити-объекту, вторая — к брашу. Номер неправильного объекта указывается в ERR-файл в следующем виде: «Entity 10, Brush 0, Side 5....», это означает, что ошибка у 10-го энтити-объекта на 5 стороне. После нахождения неправильного объекта, его можно удалить, а можно попытаться исправить. В приведенном выше примере необходимо переместить верхний средний вертекс направо или налево, таким образом, мы превратим две грани, лежащие в одной плоскости, в одну (см. рис. ниже). После переноса точки Вам будет задан вопрос: «Merge Vertices?» («Совместить вершины?»), обязательно отвечайте «Да». 3. Leaf portal saw into leaf Данная ошибка возникает, когда компилятор HLVIS пытается сравнить 2 портала (leaf portals), которые принадлежат одной видимой вершине (visibility node). Посмотрите на картинку ниже: Красный и желтый порталы на самом деле были одним порталом, которыл был разбит на два. Оба показанных портала должны лежать на одной прямой, но учитывая ограниченную точность компьютеров при осуществлении операций с плавающей точкой, эти порталы могут слегка наклониться по отношению друг к другу (угол наклона порталов настолько мал, что его невозможно заметить невооруженным глазом — только в бинокль :). Если возникает такая ситуация, когда два портала принадлежат одной вершине и образуют кривую линию, то получается ошибка « 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 Каждый отдельный объект в Half-Life может быть окрашен в текстуру только одного типа (например, только в текстуру воды). Например, объект, окрашенный с пяти сторон обычной текстурой, а с шестой — текстурой воды, вызовет данную ошибку. Всего существует несколько типов текстур, которые не могут быть нанесены на объект вместе с другими. К таким текстурам относятся: SKY, CLIP, ORIGIN и текстуры воды. А самую подробную информацию о типах текстур и их совместимости Вы можете получить из соответствующей статьи: . Как исправить? Перейдите к объекту, вызвавшему ошибку, по [Shift-Ctrl-G] и закрасьте его со всех сторон текстурами одного типа. 6. === LEAK in hull 0 === LEAK — дырка на карте. Это самая известная и, пожалуй, самая нелюбимая ошибка. А все потому, что ее трудно обнаружить и легче не допускать, чем потом часами искать (прям стихи :) А причиной такой ошибки является дырка (зазор) на уровне. Например, есть два браша, между которыми существует зазор (по неосторожности Вы не состыковали эти браши вплотную). Эти браши могут быть, например, стенами или землей Вашей карты. При компиляции программы-компиляторы, обнаружив такую дырку, начинают думать: «А что же за этой дыркой?». Они видят зазор, а за ним ужасающая пустота :) — в итоге возникает ошибка. Ниже на картинке мы приводим пример такой ошибки. Но не всегда LEAK виден так явно, как на рисунке выше. Зачастую LEAK имеет очень маленькие размеры, гораздо меньше даже 1 юнита. Особо много LEAK'ов в декомпилированных картах. Например, Вы решили немного изменить De_Dust, разумеется, декомпильнули его, затем попытались вновь скомпилировать и получили кучу ошибок LEAK. Второй причиной вызывающей появление LEAK ошибки, является нахождение точечного энтити-объекта за пределами карты. Например, Вы сделали карту, построили вокруг нее небо и случайно поместили какой-нибудь там ambient_generic снаружи карты. В итоге получаем LEAK. Но это лучше, чем искать дырку на карте, т.к. объект найти гораздо проще. Как исправить? Можно воспользоваться специальной утилитой LeakMarker . А можно попытаться найти LEAK при помощи самой игры. Для этого нужно скопировать файл *.PTS, который создается в директории с компиляторами при обнаружении ошибки LEAK, в директорию « cstrike/maps », где лежит Ваша недокомпилированная карта, которая тем не менее способна запускаться. Далее нужно запустить консоль и ввести: map имя_карты . После загрузки карты, пишем: pointfile . После ввода этих команд на своей карте Вы обнаружете тонкую извивающуюся линию из черно-белых точек (см. рис. ниже). Эта линия располагается около места с ошибкой 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'ом может стать архитектура на карте. Это довольно трудно объяснить, поэтому приведем несколько примеров: корридоры, пересекающие стену не под прямым углом; браши, развернутые на произвольный угол; большие, высокие комнаты с неперпендикулярными к земле стенами; большое количество мелких брашей (не энтити) на

Hosted by uCoz