Как сделать четкие линии при GL-рисовании

Во время рисования через Handles/Gizmos/GL вы можете столкнуться с проблемой, которая заключается в том, что нарисованные треугольники и линии начинают "играть" на находящемся рядом меше.
Помимо этого, эффект не статичен, линии начинают прыгать при изменении параметров обзора камеры.
Выглядит это примерно так:
Решить данную проблему можно двумя разными подходами - на уровне шейдеров и на уровне кода самого рисования. Я предлагаю вам решать проблему через код, так как в этом случае вы имеете быстрый способ изменения приоритета рисования объектов.
Наиболее тривиальным решением будет пропустить все точки через метод, немного приближающий их к камере.
Например:
public static Vector3 CloserCamera(Vector3 point, int order)
{
	//matrix - Gizmos.matrix / Handles.matrix в зависимости от контекста
    var cameraLocalPosition = matrix.inverse.MultiplyPoint(Camera.current.transform.position);
    var direction = (cameraLocalPosition - point).normalized;
    return point + direction * (.001f*order);
}
Мы можем выстраивать order по своему усмотрению, в зависимости от того, какой объект хотим видеть ближе.
Плюс данного способа в том, что "смещение" не видно под любым углом обзора, а объект полностью сохраняет свои пропорции.


Views: 1 718

Devion #1 - 6 years ago 0
Голосов: +0 / -0
И, кстати, вопрос после написанной заметки - помнится у такого эффекта есть даже специальное название. Кто помнит как это называется?
alexprey #2 - 6 years ago 0
Голосов: +0 / -0
Devion, Z-Figthing
Если ты строишь эти линии поверх меша, то просто делай небольшое смещении по нормали
Devion #3 - 6 years ago 0
Голосов: +0 / -0
Если ты строишь эти линии поверх меша, то просто делай небольшое смещении по нормали
Так метод это и делает. Смещает по направлению к камере. А ты как предлагаешь? :)
Если нормали от трианглов то на впуклых участках меша это наоборот "скроет" линии, на выпуклых может показать две.
Тут же еще какой плюс - с какой стороны не посмотри на меш, он все время будет правильно отображаться.