A lidar scanner for Minecraft 26.2 (Forge). Client side. Author: Zenoyui.
Лидарный сканер для Minecraft 26.2 (Forge). Клиентский. Автор: Zenoyui.
Hold the scan key and the sensor fires a budget of pulses each tick. Every return becomes a point in a cloud that stays where it was measured. The world itself is not drawn, so what you see is the scan and nothing else.
Пока удерживается клавиша сканирования, прибор выпускает за тик отведённое число импульсов. Каждый возврат становится точкой облака и остаётся там, где был измерен. Сам мир не рисуется, поэтому вы видите скан и ничего кроме него.
| KeyКлавиша | What it doesЧто делает |
|---|---|
V | hold to scanудерживать для сканирования |
Z | cycle scan mode: line, cone narrow, cone normal, cone wide, spinсмена режима: строка, узкий конус, обычный конус, широкий конус, вращение |
H | area map scan of the space around youобзорный скан помещения вокруг вас |
J | open the settingsоткрыть настройки |
K | export the cloud of this dimensionвыгрузить облако этого измерения |
N | clear the cloudочистить облако |
B | show or hide the worldпоказать или скрыть мир |
Range, reflectance and noise follow the lidar equation rather than a colour ramp on a raycast. The sensor is specified the way real units are: by the range at which a ten percent reflective target still returns.
Дальность, отражение и шум следуют уравнению лидара, а не раскраске луча по шкале. Прибор задан так же, как задают настоящие: дальностью, на которой цель с отражением десять процентов ещё даёт возврат.
The cloud holds ten million points by default and up to thirty two million. Thinning is what makes that capacity last: a return landing in an already scanned cell is dropped, and the cell grid coarsens with distance the way a real scan thins out. Points expire when the world changes, because a scanner has no memory better than its last measurement. The cloud is saved per world and read back on rejoining.
Облако держит десять миллионов точек по умолчанию и до тридцати двух миллионов. Ёмкости хватает надолго благодаря прореживанию: возврат, попавший в уже отсканированную ячейку, отбрасывается, а сетка ячеек укрупняется с расстоянием - так же редеет и настоящий скан. Точки исчезают при изменении мира, потому что у сканера нет памяти надёжнее последнего измерения. Облако сохраняется для каждого мира и читается обратно при возвращении.
Three depth cues make it readable: eye-dome lighting darkens a point whose screen neighbours are nearer, point size falls as one over distance, and brightness falls with distance the way aerial perspective works outdoors. Only lightness changes, so colour stays free for the material.
Читаемость дают три признака глубины: затенение по глубине темнит точку, чьи соседи по экрану ближе; размер точки падает как обратное расстояние; яркость убывает с расстоянием так же, как работает воздушная перспектива. Меняется только светлота, поэтому цвет остаётся за материалом.
The export key writes the cloud of the current dimension to
<game dir>/lidar/export/. The format is chosen by
exportFormat.
Клавиша выгрузки пишет облако текущего измерения в
<каталог игры>/lidar/export/. Формат задаётся настройкой
exportFormat.
x y z red green blue intensity classification plus scan_angle in
degrees from nadir. Coordinates are double precision.x y z red green blue intensity classification и scan_angle в
градусах от надира. Координаты двойной точности.Every point carries colour, return strength as intensity, an ASPRS class code and a scan angle, so the file opens in CloudCompare, QGIS or any survey tool with the fields such a tool expects. Axes are swapped on the way out: world height goes to Z, as those tools expect. No coordinate reference system is declared, because the world has none.
Каждая точка несёт цвет, силу возврата как интенсивность, код класса ASPRS и угол сканирования, поэтому файл открывается в CloudCompare, QGIS или любой геодезической программе с теми полями, которых она ждёт. Оси меняются местами при выгрузке: высота мира уходит в Z, как эти программы и ожидают. Система координат не объявляется, поскольку у мира её нет.
Open them with J in game, or from the mods list. Every option
shows its description, unit, range and default; a value outside its range cannot be applied.
The config file is config/lidar-client.toml. Defaults move themselves when the
mod updates: an untouched value is migrated to the new default, an edited one is left
alone.
Открываются клавишей J в игре или из списка модов. У каждой
настройки видны описание, единица измерения, границы и умолчание; значение вне границ
принято не будет. Файл настроек - config/lidar-client.toml. Умолчания
переносятся сами при обновлении мода: нетронутое значение переходит на новое умолчание,
изменённое остаётся как есть.
| OptionНастройка | DefaultУмолчание | AcceptsПринимает | What it doesЧто делает |
|---|---|---|---|
sensorPreset | "custom" | custom, os0, os1, os2 | Load the specifications of a real sensor: custom, os0, os1, os2. Applied once when the value changes, so a hand-edited option is never silently undone. Figures come from the vendor product pages; what each preset writes is listed in the log.Загрузить характеристики настоящего прибора: custom, os0, os1, os2. Применяется один раз при смене значения, поэтому правка отдельного параметра вручную не отменяется молча. Числа взяты со страниц изготовителя; что именно записывает каждый набор, перечислено в журнале. [1] |
maxReturnsPerRay | 3 | 1 .. 8 | Max returns per ray. A ray continues through non-opaque blocks (glass, leaves, plants, fluids).Наибольшее число возвратов на один луч. Луч продолжается сквозь непрозрачные не полностью блоки: стекло, листву, растения, жидкости. |
rangeAt10PercentBlocks | 96 | 8 .. 512 blocks | Sensor range spec: distance at which a 10 percent reflective target still returns. Darker targets drop out sooner, brighter ones reach further, and the limit grows with the square of distance.Паспортная дальность прибора: расстояние, на котором цель с отражением десять процентов ещё даёт возврат. Более тёмные цели пропадают раньше, более светлые достаются дальше, а предел растёт как квадрат расстояния. [2] |
beamDivergenceDeg | 0.18 | 0.0 .. 5.0 degrees | Beam divergence, full angle. Widens the footprint with distance.Расходимость пучка, полный угол. Расширяет пятно с расстоянием. [2] |
rangeNoiseCm | 1.0 | 0.0 .. 100.0 centimetres | Range noise, one sigma. Gives the cloud its thickness.Шум дальномера, одна сигма. Даёт облаку его толщину. [2] |
sensorChannels | 64 | 1 .. 256 channels | Vertical channels of the sensor, as in a multi-channel lidar (Ouster OS1: 32, 64 or 128).Число вертикальных каналов прибора, как у многоканального лидара (Ouster OS1: 32, 64 или 128). [2] |
returnMode | "all" | all, first, last, strongest, dual | Receiver return mode, as configured on a real sensor: all, first, last, strongest, dual. A pulse crossing leaves, glass or a fence comes back as several echoes; the sensor is told which to report. dual reports the strongest and the last, which is what Velodyne and Ouster call dual return. all reports every echo and gives the densest cloud, which is why it is the default here.Режим возврата приёмника, как его задают на настоящем приборе: all, first, last, strongest, dual. Импульс, прошедший сквозь листву, стекло или забор, возвращается несколькими откликами, и прибору указывают, какие докладывать. dual докладывает наибольший и последний - это то, что Velodyne и Ouster называют двойным возвратом. all докладывает каждый отклик и даёт самое плотное облако, поэтому он и выбран умолчанием. |
returnSeparationBlocks | 1.0 | 0.0 .. 16.0 blocks | Range resolution: two echoes closer together than this merge into one. A pulse has a length, so targets nearer than half of it cannot be told apart. 0 turns the check off and lets glass one centimetre from a wall give two echoes.Разрешение по дальности: два отклика, разделённые меньшим расстоянием, сливаются в один. Импульс имеет длину, поэтому цели ближе её половины неразличимы. 0 отключает проверку и позволяет стеклу в сантиметре от стены дать два отклика. [3] |
minRangeBlocks | 0.0 | 0.0 .. 16.0 blocks | Blind zone: returns closer than this are discarded. Sensors with separate transmit and receive optics have one, about a metre on a VLP-16.Мёртвая зона: возвраты ближе неё отбрасываются. Она есть у приборов с раздельной передающей и приёмной оптикой, около метра у VLP-16. [2] |
| OptionНастройка | DefaultУмолчание | AcceptsПринимает | What it doesЧто делает |
|---|---|---|---|
maxRange | 48 | 4 .. 256 blocks | Max scan ray distance.Наибольшая дальность луча сканирования. |
raysPerTick | 512 | 1 .. 8192 rays per tick | Rays cast per tick while the scan key is held. A real OS1 emits about 10.4 million points per second against 10240 rays per second here.Сколько лучей выпускается за тик, пока удерживается клавиша сканирования. Настоящий OS1 даёт около 10.4 миллиона точек в секунду против 10240 лучей в секунду здесь. |
scanFovDeg | 60 | 2 .. 170 degrees | Base opening angle of the scan pattern. Line mode uses it as fan width; the cone modes use it times 0.25, 1.0 and 2.0.Основной угол раскрытия рисунка сканирования. Строчный режим берёт его шириной веера, конусные - умноженным на 0.25, 1.0 и 2.0. |
spinDegPerTick | 30 | 1 .. 360 degrees per tick | Azimuth swept per tick in spin mode. 18 deg per tick is one revolution per second.Азимут, проходимый за тик во вращательном режиме. 18 градусов за тик дают один оборот в секунду. |
| OptionНастройка | DefaultУмолчание | AcceptsПринимает | What it doesЧто делает |
|---|---|---|---|
maxStoredPoints | 10000000 | 0 .. 32000000 points | Point cloud capacity (ring buffer, oldest point evicted first). A point costs 26 bytes in the Java heap and 16 in video memory, and thinning adds about 13 more for its cell index. The heap arrays are allocated at full capacity as soon as the first point is stored, not as the cloud fills, and clearing the cloud does not give them back: only lowering this value does. The default reserves about 250 MB straight away and reaches about 390 MB once the cloud is full.Ёмкость облака точек (кольцевой буфер, первой вытесняется самая старая точка). Точка стоит 26 байт в куче Java и 16 в видеопамяти, а прореживание добавляет около 13 на её ячейку. Массивы выделяются сразу на полную ёмкость при первой сохранённой точке, а не по мере наполнения, и очистка облака их не возвращает: возвращает только уменьшение этого значения. Умолчание занимает около 250 МБ сразу и доходит до 390 МБ на полном облаке. |
pointSpacing | 0.15 | 0.0 .. 2.0 blocks | Grid step for thinning. A hit landing in an already occupied cell is dropped, so rescanning a surface does not consume the buffer. 0 disables thinning.Шаг сетки прореживания. Попадание в уже занятую ячейку отбрасывается, поэтому повторное сканирование поверхности не расходует буфер. 0 отключает прореживание. |
spacingReferenceBlocks | 16 | 1 .. 256 blocks | Distance at which the thinning grid step equals pointSpacing. Closer surfaces get a finer grid, further ones a coarser grid, which is how a real scan behaves: angular ray density is constant, so surface density falls with distance.Расстояние, на котором шаг сетки прореживания равен pointSpacing. Ближе сетка мельче, дальше крупнее - так ведёт себя и настоящий скан: угловая плотность лучей постоянна, поэтому плотность на поверхности падает с расстоянием. |
| OptionНастройка | DefaultУмолчание | AcceptsПринимает | What it doesЧто делает |
|---|---|---|---|
colorMode | "distance" | distance, intensity, material | Point color: distance (rainbow ramp), intensity (return strength, grey), material (block map color). The colour is decided when a point is measured and kept with it, so this also decides what the export carries. Changing it does not recolour points already scanned: set material before scanning if you want block colours in the file.Цвет точки: distance (радужная шкала по расстоянию), intensity (сила возврата, оттенки серого), material (цвет блока на карте). Цвет выбирается в миг измерения и хранится вместе с точкой, поэтому им же задаётся и то, что попадёт в выгрузку. Смена настройки уже отсканированные точки не перекрашивает: если нужны цвета блоков в файле, поставьте material до сканирования. |
pointLifetimeTicks | 200 | 20 .. 6000 ticks | Particle lifetime of one point on the fallback render path. Also the refresh period: the whole cloud is redrawn once per this interval.Время жизни частицы одной точки на запасном пути отрисовки. Оно же период обновления: всё облако перерисовывается раз за этот промежуток. |
pointSize | 0.05 | 0.01 .. 0.5 blocks | Point quad size on the fallback particle path.Размер четырёхугольника точки на запасном, частичном пути отрисовки. |
renderRange | 96 | 8 .. 512 blocks | Max distance from the player at which stored points are redrawn. Independent of maxRange.Наибольшее расстояние от игрока, на котором сохранённые точки перерисовываются. От maxRange не зависит. |
gpuPointRenderer | true | true, false | Draw the point cloud from GPU vertex buffers instead of spawning a particle per point. Off falls back to particles, which caps the cloud at a few tens of thousands of points.Рисовать облако из вершинных буферов видеокарты вместо создания частицы на каждую точку. Выключение возвращает частицы, а они ограничивают облако несколькими десятками тысяч точек. |
pointPixelSize | 0.0 | 0.0 .. 16.0 pixels | Fixed point size for the GPU renderer. 0 lets the size follow distance, which is what makes a near point look nearer than a far one.Постоянный размер точки для отрисовки видеокартой. 0 позволяет размеру следовать за расстоянием, отчего ближняя точка и выглядит ближе дальней. |
roundPoints | true | true, false | Draw points as discs instead of squares. A real beam footprint is round, and a square reads as an artefact when points are large on screen.Рисовать точки кругами, а не квадратами. Пятно настоящего пучка круглое, а квадрат читается как искажение, когда точки на экране крупные. |
| OptionНастройка | DefaultУмолчание | AcceptsПринимает | What it doesЧто делает |
|---|---|---|---|
scalePointsWithDistance | true | true, false | Size points by distance: a point stands for a patch of surface pointSpacing blocks across, so it shrinks as 1/distance. This is the relative size depth cue.Задавать размер точки расстоянием: точка означает участок поверхности шириной pointSpacing, поэтому уменьшается как 1/расстояние. Это признак глубины по относительному размеру. [4] |
depthCueFalloffBlocks | 42.0 | 0.0 .. 512.0 blocks | Distance over which point brightness falls to 1/e, following Koschmieder's law for aerial perspective. 42 puts the edge of a 96 block render range at about 10 percent brightness. 0 turns the cue off.Расстояние, на котором яркость точки падает в e раз, по закону Кошмидера для воздушной перспективы. При 42 край дальности отрисовки в 96 блоков имеет около десяти процентов яркости. 0 отключает признак. [5] |
depthCueMinBrightness | 0.12 | 0.0 .. 1.0 fraction | Lower bound of the brightness cue. Keeps distant points visible instead of fading them to black.Нижний предел яркостного признака глубины. Оставляет дальние точки видимыми вместо угасания в чёрный. |
edlEnabled | true | true, false | Eye-Dome Lighting: darken a point when its neighbours on screen are nearer to the camera. The standard shading technique for point clouds (CloudCompare, Potree, ArcGIS Pro).Затенение по глубине (Eye-Dome Lighting): точка темнеет, когда её соседи по экрану ближе к наблюдателю. Обычный приём затенения облаков точек (CloudCompare, Potree, ArcGIS Pro). [6] |
edlStrength | 1.0 | 0.0 .. 10.0 fraction | Strength of eye-dome lighting. At 1.0 an edge where distance changes by ten percent darkens to about a half.Сила затенения по глубине. При 1.0 перепад расстояния в десять процентов темнеет примерно вдвое. |
edlRadiusPixels | 2.0 | 0.5 .. 16.0 pixels | Neighbour distance for eye-dome lighting. Larger outlines thicker and costs the same.Расстояние до соседа при затенении по глубине. Больше - толще обводка, при той же цене. |
| OptionНастройка | DefaultУмолчание | AcceptsПринимает | What it doesЧто делает |
|---|---|---|---|
entityRefreshTicks | 3 | 1 .. 20 ticks | Ticks between redraws of entity-attached points. Lower follows a moving target more closely and costs a buffer rebuild more often.Через сколько тиков перерисовываются точки, привязанные к существам. Меньше - точнее следует за движущейся целью и чаще требует пересборки буфера. |
maxEntityPoints | 30000 | 0 .. 200000 points | Capacity for points attached to entities. They follow the entity and are not saved to disk. 0 disables entity scanning.Ёмкость для точек, привязанных к существам. Они следуют за существом. 0 отключает сканирование существ. |
entityPointSpacing | 0.025 | 0.0 .. 1.0 blocks | Grid step for thinning points on entities, measured in the entity's own frame. Separate from pointSpacing because a body is small. 0 disables thinning on entities.Шаг сетки прореживания точек на существах, отсчитываемый в системе самого существа. Отдельный от pointSpacing, потому что тело мало. 0 отключает прореживание на существах. |
| OptionНастройка | DefaultУмолчание | AcceptsПринимает | What it doesЧто делает |
|---|---|---|---|
mapScanRadius | 32 | 4 .. 64 blocks | Radius of the area map scan (key H). The scan walks the connected air volume around the player and puts points on the block faces it touches.Радиус обзорного скана помещения (клавиша H). Скан обходит связный объём воздуха вокруг игрока и ставит точки на те грани блоков, которых касается. |
mapScanBlocksPerTick | 4000 | 200 .. 50000 cells per tick | Air cells processed per tick by the area map scan. Higher finishes sooner and costs more per tick.Сколько ячеек воздуха обрабатывает обзорный скан за тик. Больше - раньше закончится и дороже обойдётся каждый тик. |
mapScanFaceSamples | 3 | 1 .. 6 samples per edge | Points per block face edge for the area map scan: 2 means a 2x2 grid, four points per face.Точек на ребро грани блока при обзорном скане: 2 означает сетку 2 на 2, то есть четыре точки на грань. |
| OptionНастройка | DefaultУмолчание | AcceptsПринимает | What it doesЧто делает |
|---|---|---|---|
scannerShowItems | true | true, false | While the world is hidden (key B), keep dropped items visible.Пока мир скрыт (клавиша B), оставлять видимыми выброшенные предметы. |
scannerShowNameTags | true | true, false | While the world is hidden (key B), keep name tags visible: player nicknames, named mobs, and the invisible armour stands servers use for floating text.Пока мир скрыт (клавиша B), оставлять видимыми подписи: имена игроков, названных существ и невидимые стойки для брони, которыми на серверах делают парящий текст. |
scannerShowDisplays | true | true, false | While the world is hidden (key B), keep display entities visible: text, item and block displays.Пока мир скрыт (клавиша B), оставлять видимыми отображающие сущности: текстовые, предметные и блочные. |
hideWorld | true | true, false | Hide the world (terrain, entities, sky, clouds, weather) and leave only the point cloud on black. Toggled in game with B.Скрыть мир (рельеф, существ, небо, облака, погоду) и оставить только облако точек на чёрном. Переключается в игре клавишей B. |
| OptionНастройка | DefaultУмолчание | AcceptsПринимает | What it doesЧто делает |
|---|---|---|---|
exportFormat | "las" | las, ply, both | Which files the export key (K) writes: las, ply, or both. LAS 1.4 point record format 7 is the ASPRS standard for lidar data and is what a survey tool expects. PLY carries the same fields and is read by mesh tools as well; coordinates in it are double precision. both writes two files from one press and costs the time and the disk space of both.Какие файлы пишет клавиша выгрузки (K): las, ply или both. LAS 1.4, запись формата 7 - отраслевой стандарт ASPRS для лидарных данных, и именно его ждёт геодезическая программа. PLY несёт те же поля и читается вдобавок средствами работы с сетками; координаты в нём двойной точности. both пишет два файла за одно нажатие и стоит времени и места обоих. |
savePointCloud | true | true, false | Save the point cloud on leaving a world and load it back on rejoining. File: <game dir>/lidar/<world>.lidarСохранять облако точек при выходе из мира и читать обратно при возвращении. Файл: <каталог игры>/lidar/<мир>.lidar |
scanSound | true | true, false | Scanner click while a scan key is held.Щелчок сканера, пока удерживается клавиша сканирования. |
logPerformance | false | true, false | Log a timing line every 200 ticks: scan, store and buffer rebuild times, rays and points per tick.Записывать в журнал строку измерений каждые 200 тиков: время скана, укладки и пересборки буфера, число лучей и точек за тик. |
An option without a source is not a physical quantity: it is a load or display setting, chosen by order of magnitude.Настройка без источника не является физической величиной: это настройка нагрузки или отображения, выбранная по порядку величины.
Open an issue at github.com/Zenoyui/lidar-scan. Please say which version of the mod you run, what you did and what happened. A log from the session helps more than a description of it.
Заведите запись на github.com/Zenoyui/lidar-scan. Укажите версию мода, что вы делали и что произошло. Журнал сеанса помогает больше, чем его пересказ.