Структура папок 🔗
/track_name 🔗
Папка с содержимым трека.
Если хотим добавить несколько конфигов, создаём дополнительные папки с их названиями, например:
/track_name/ebanko
И смотрим секцию models_LAYOUT.ini.
Далее структура папок повторяется для каждого конфига.
track_name.kn5 🔗
Основной файл с моделями трека. Можно поменять через models.ini.
Без models.ini должен повторять назвапние папки с треком.
models_LAYOUT.ini 🔗
Какие модели грузить для каких конфигов. LAYOUT - название конфига.
Если конфигов нету, название файла просто models.ini.
[MODEL_0]
FILE=anglesey.kn5
POSITION=0,0,0
ROTATION=0,0,0
[DYNAMIC_OBJECT_0]
PROBABILITY=100
MULT=1,1
FILE=angleseyship.kn5
POS_MODE=RANDOM
RND_POS_CENTER=-300,-20,-1000
RND_POS_RANGE=0,0,0
VEL_MODE=RANDOM
RND_VEL_BASE=0.4,-0.01,0
RND_VEL_RANGE=0,0,0
map.png 🔗
Карта трека, отображаемая в игре.
ai/ 🔗
fast_lane.ai 🔗
Полоска лайна для ИИ, с границами трека.
Используется для установки камер и отображения “ideal line” ассиста в игре.
pit_lane.ai 🔗
Полоска ответвления в питы для ИИ. Граница, как правило, просто копия самой полоски.
data/ 🔗
audio_sources.ini 🔗
Позволяет прицепить звуки к нуллам. Например, можно прицепить звук реверба при проезде через туннель или поставить пение птичек при проезде мимо объекта.
Примеры:
[AC_AUDIO_0] ; название объекта в блендере, обязательно КАПСОМ
VOLUME_SCALE=20
VOLUME=0.9
FILENAME=content/sfx/ambience_1.wav ; обязательно WAV
[REVERB_0] ; эффект реверба, номерная индексация
ENABLED=1
NODE=AC_AUDIO_0 ; название объекта в блендере
MINDISTANCE=175
MAXDISTANCE=225
PRESET=CUSTOM ; список пресетов: https://fmod.com/docs/2.00/api/core-api-system.html#fmod_preset_generic далее в примере кастомная настройка, которая не нужна при использовании других пресетов
DECAY_TIME=2750
EARLY_DELAY=50
LATE_DELAY=250
HF_REFERENCE=4500
HF_DECAY_RATIO=75
DIFFUSION=100
DENSITY=100
LOW_SHELF_FREQUENCY=250
LOW_SHELF_GAIN=0
HIGH_CUT=4000
EARLY_LATE_MIX=80
WET_LEVEL=-16
cameras.ini 🔗
Положения реплей камер. Можно сделать несколько файлов с разными наборами камер.
Генерируется в KSEditor, для переключений требуется AI spline.
[HEADER]
VERSION=3 ; File version. Should be 3 at the moment.
CAMERA_COUNT=13 ; Count of [CAMERA_X] sections in this file
SET_NAME= ; Visible set name in the replay window
[CAMERA_0]
NAME=START_CAMERA
POSITION=-3.55726 ,1.12934 ,-25.7909 ; Location of the camera
FORWARD=0.216578 ,-0.0299961 ,0.975804
UP=0.00649943 ,0.99955 ,0.0292834
MIN_FOV=30
MAX_FOV=45
IN_POINT=0
OUT_POINT=0.015873
SHADOW_SPLIT0=1.8
SHADOW_SPLIT1=20
SHADOW_SPLIT2=180
NEAR_PLANE=0.1 ; Only objects after this distance are drawn
FAR_PLANE=5000 ; Only objects before this distance are drawn
MIN_EXPOSURE=0
MAX_EXPOSURE=10000
DOF_FACTOR=10
DOF_RANGE=10000
DOF_FOCUS=0
DOF_MANUAL=0
SPLINE= ; spline.csv, all offsets are from POSITION
SPLINE_ROTATION=0 ; Rotation works counter-clockwise with movement in the +X direction being 0 degrees and moving east. This is the same system used as with trigonometry. As my camera moves in -Z, 0 degrees means it will move north. 270 degrees means it will move east. I need 302.3 degrees for this camera.
FOV_GAMMA=1
SPLINE_ANIMATION_LENGTH=15 ; The lower the number, the faster the camera moves. It doesn't move along with any car. You will have to find a nice balance between (most used) cars. Also keep in mind that the animation length is dependant of the number of entries in the .csv file.
IS_FIXED=0 ; 1 = True, 0 = False. Prevents the camera from moving at all
С помощью SPLINE, SPLINE_ROTATION, SPLINE_ANIMATION_LENGTH можно сделать подвижные камеры. Для этого нужно сгенерировать (например, скриптами в блендере) CSV файл с набором координат на каждой строчке.
Сам не тестировал, но в случае Блендера, с большой долей вероятности координаты здесь в наркоманском формате X, -Z, Y (поворот но оси X на 90°), как и во всех случаях в Assetto Corsa, когда что-то нужно анимировать.
Пример spline.csv:
0, 0, 0
0, -0.4183, -9.3249
0, -0.8376, -18.6567
crew.ini 🔗
Определяет с какой стороны стоят чуваки в питах.
1 = слева
-1 = справа
groove.ini 🔗
Параметры оверлея наката; как быстро он темнеет и как сильно.
В игре это будет заметно только в том случае, если сессия начата с грипом меньше 100%.
[HEADER]
GROOVES_NUMBER=1 ; number of individual objects
[GROOVE_0]
NAME=Rubber1 ; name of the object
MIN=0.05 ; minimum alpha
MAX=0.6 ; maximum alpha
MULT=5
MULT определяет как быстро произойдёт переход от MIN к MAX. Чем больше это значение, тем медленнее переход. Например, в случае 5 это займёт в 5 раз больше проездов машин, чем в случае 1.
Настройки шейдера и пример:
ksPerPixelAlphaAlphaBlended:TrueCastShadow:False
Параметр alpha задаёт интенсивность.
lighting.ini 🔗
Определяет направление солнца.
[LIGHTING]
SUN_PITCH_ANGLE=35 ; defines the height of the sun. 0 = top of the sky. 90 = horizon
SUN_HEADING_ANGLE=45 ; counter-clockwise rotation around the track
В ванильной AC, положение солнца поддерживает значения от -90 до 90, и соответствует часам 8:00 → 13:00 → 18:00.
Таким образом, солнце достигает пика в 13:00. SUN_PITCH_ANGLE определяет высоту этого пика, где 0 = прямо над головой и 90 = горизонт.
По этой же логике работает настройка времени через SUN_ANGLE в Assetto Server, только там значения от -180 до 180, и таким образом 24-часовой цикл.
SUN_HEADING_ANGLE - корректировка севера. Изначально игра ожидает, что ось Y в Blender (-Z в AC) будет указывать на север. Это соответствует значению 0. Другими значениями мы вращаем север, например, если в нашей сцене изначально оси не были откалиброваны по компасу и теперь уже проблемно разворачивать сотни объектов.
map.ini 🔗
Настройки размеров для отображение картинки с картой трека в игре.
Генерируется в CSP. Пример:
[PARAMETERS]
WIDTH=512 ; should be the width of the image
HEIGHT=512 ; should be the height of the image
MARGIN=20 ; unknown, default 20
SCALE_FACTOR=1 ; this scales the car location to the location on the map. Increasing this value will result in a theoretically larger image, but the image will still be drawn in its original size.
MAX_SIZE=1600 ; unknown, default 1600
X_OFFSET=256 ; moves the image on the X-axis. WIDTH/2 will place the image center at the map center
Y_OFFSET=256 ; moves the image on the X-axis. HEIGHT/2 will place the image center at the map center
DRAWING_SIZE=10 ; unknown, default 10. Seems like a scaling for the drawing size of the image but doesn't do anything
startinglights.ini 🔗
Настройки старового семафора для кольца. Пример:
[SETTINGS]
EMISSIVE=1,0,0,1
INTENSITY=15
DIFFUSE=0.3
Объекты семафора должны называться KS_START_LIGHT_N, где N - номер с нулевой индексацией.
Динамическое освещение стартовых семафоров работает через скрытую настройку [LIGHT_STARTING] в CSP.
При необходимости, дополнительный зелёный семафор можно осветить через CSP условие FLAG_TYPE, с параметром 0 до начала гонки и 1 после её начала. Переключение происходит в момент окончания стартового семафора.
semaphore.ini 🔗
Настройки стартового семафора для драга. В виду невозможности привязать динамическое освещение к этому набору условий, обычным трассам лучше использовать startinglights.ini.
[GROUPS]
DISQUALIFIED=1
READY=3
START=3
[COLOR]
INTENSITY=2.2
[OBJECT_0]
TYPE=1 ; 0=DISQUALIFIED 1=READY 2=START
NAME=Semaphore_Red1 ; AC_SEMAPHORE_RED
ORDER=0 ; it's the first of its set to be turned on
[OBJECT_1]
TYPE=1
NAME=Semaphore_Red2 ; AC_SEMAPHORE_GREEN
ORDER=1
[OBJECT_2]
TYPE=1
NAME=Semaphore_Red3
ORDER=2
[OBJECT_3]
TYPE=2
NAME=Semaphore_Green1
ORDER=0
[OBJECT_4]
TYPE=2
NAME=Semaphore_Green2
ORDER=0
[OBJECT_5]
TYPE=2
NAME=Semaphore_Green3
ORDER=0
surfaces.ini 🔗
Список поверхностей и их настройки.
Дефолтный набор лежит в "system\data\surfaces.ini:
ROADGRASSKERBSANDWALL
Коллайдеры для стен, зданий, отбойников обязательно должны называться WALL.
Здесь можно определить параметр питов, включив параметр IS_PITLANE=1, чтобы на этой поверхности работало ограничение скорости и чтобы она правильно определялась генератором карт.
Примеры:
[CSPFACE_0]
KEY=ROAD
FRICTION=0.75
DAMPING=0
WAV_PITCH=0
FF_EFFECT=NULL
DIRT_ADDITIVE=0
BLACK_FLAG_TIME=0
IS_VALID_TRACK=1
SIN_HEIGHT=0
SIN_LENGTH=0
IS_PITLANE=0
VIBRATION_GAIN=0
VIBRATION_LENGTH=0
[SURFACE_1]
KEY=ASPHALT ; name of the surface. Objects use surfaces by this name
FRICTION=1 ; friction of this surface
DAMPING=0 ; slow down factor
WAV= ; a sound file playing while touching this surface
WAV_PITCH=0 ; scales how fast the the sound is played
FF_EFFECT=NULL ; unknown
DIRT_ADDITIVE=0 ; marks the surface as dirty (e.g. grass), 1=enabled, 0=disabled
IS_VALID_TRACK=1 ; marks the surface as valid track. Invalid surfaces will trigger the penalty system. 1=valid track, 0=invalid track
BLACK_FLAG_TIME=0 ; unknown
SIN_HEIGHT=0 ; simulates a bumpy road. This defines the height of the bumps in meters.
SIN_LENGTH=0 ; simulates a bumpy road. This defines the length of the bumps. 1 = 1 meter, 2 = 0.5 meter, 0.5 = 2 meter
IS_PITLANE=0 ; marks the surface as a pitlane and activates the limiter. 1=pitlane, 0=normal track
VIBRATION_GAIN=0 ; unknown
VIBRATION_LENGTH=0 ; unknown
[SURFACE_2]
KEY=KERB
FRICTION=0.92
DAMPING=0
WAV=kerb.wav
WAV_PITCH=1.3
FF_EFFECT=1
DIRT_ADDITIVE=0
BLACK_FLAG_TIME=0
IS_VALID_TRACK=1
SIN_HEIGHT=0
SIN_LENGTH=0
IS_PITLANE=0
VIBRATION_GAIN=0.1
VIBRATION_LENGTH=0.2
extension/ 🔗
ext_config.ini 🔗
Настройки CSP.
ui/ 🔗
preview.png 🔗
Превьюшка в меню выбора карты.
outline.png 🔗
Мини-карта конфига, которяа отображается в меню выбора карты.
ui_track.json 🔗
Данные трека, отображающиеся в меню выбора карты.
Типы объектов 🔗
Обычная геометрия 🔗
Обычные меши. По умолчанию не имеют коллизий.
Физические объекты - коллайдеры 🔗
Коллайдеры определяются названием меша. Схема:
- Номерной идентификатор, индексация с единицы
- Название поверхности из
surfaces.ini - Необязательный суффикс
Например 1ROADYOMAMA.
Коллайдеры могут быть невидимыми.
Например, если не называть визуальный меш дороги по этой схеме, то отдельный меш коллайдера дороги (физический меш, ретоп 3д скана) может быть гораздо детальнее, и местами довольно грубо несоответствовать визуальной составляющей.
По этим причинам для тестов коллизий и подвесок при разработке машины обязательно нужно использовать Test Pad by Stereo и Suspensions Test Track by chuky500, где не будет сюрпризов с кривыми, наклонёнными и невидимыми мешами физики.
Физические объекты - подвижные коллайдеры 🔗
Определяются названием меша: AC_POBJECT_suffix.
Например, конуса. Рекомендуется ставить не больше 15 таких объектов на трек, и давать им примитивную геометрию, чтобы физика не вешала игру.
Нуллы 🔗
Ряд невидимых объектов, нужных для функций игры.
Все нуллы должны быть повёрхнуты осью Y вверх, осью Z вперёд.
AC_START_N 🔗
Стартовый грид. Индексация с нуля и без нулевых префиксов, т.е. AC_START_0, AC_START_1.
AC_PIT_N 🔗
Положения машин в питах. Всё как у AC_START_N.
AC_TIME_X_Y 🔗
Чекпойнты зон трека. Всего их можно поставить два, не считая стартового.
В отличие от респов, направление осей здесь не важно.
X - номерная индексация. Нулл с номером 0 ставится на старте/финише.
Y - сторона чекпойнта. Чекпойнты всегда идут парами, L и R. Пара образует собой линию, которую пересекает машина.
AC_HOTLAP_START_0 🔗
Определяет стартовую позицию для режима игры Hotlap.
AC_AB_X_Y 🔗
Для карт без закольцовки, например, тоге.
В этих треках нужны нуллы для питов и хотлапов, но не нужны нуллы для грида.
AC_AB_START_L,AC_AB_START_RAC_AB_FINISH_L,AC_AB_FINISH_R
AC_AUDIO_suffix 🔗
Объекты для источников звука в audio_sources.ini.
KSTREE_GROUP_X_Y 🔗
Для оптимизации деревьев.
X- название группы деревьев, напримерAY- номерная индексация с единицы
KSEditor склеит все деревья в группе в один объект и запечёт нормали относительно ориджинов каждого отдельного объекта. По деревьям, их ориджинам и нормалям будет отдельная страница.
Эта оптимизация позволяет сделать трассу с десятками тысяч деревьев без подвисаний.