Как определить, присутствует ли материал в данной точке 3D?

#shader #godot

Вопрос:

В шейдере материалов Годо как я могу определить, занимает ли материал произвольную точку в 3D-пространстве?

Предыстория (на случай, если вам нужна дополнительная информация): Я создаю 3d-воксельную игру от третьего лица в Годо. Я бы хотел, чтобы шейдер скрывал воксели, которые находятся между камерой и вокселями, в которые может перемещаться игрок. Все воксели находятся в одной плоскости.

Мой план состоит в том, чтобы для каждого пикселя провести линию от камеры к плоскости. С помощью простой математики я знаю точку пересечения с плоскостью. Учитывая эту точку пересечения, как я могу определить, попал ли он в материал или нет?

Комментарии:

1. Выполните поиск по теме на gamedev.stackexchange.com — есть достаточно материала по радиопередачам и рендерингу вокселов (Правка: я бы сказал, буфер трафарета, но мы говорим о Годо). Кроме того, то, что вы хотите, не похоже на лучший подход… Но мне нужно было бы знать больше о том, как вы настраиваете воксели.

2. @Theraot Спасибо. Я использую этот модуль: voxel-tools.readthedocs.io/en/latest/blocky_terrain . Я думал о том, чтобы выяснить, какие воксели я хочу скрыть в сценарии Годо, а затем передать массив областей для скрытия шейдеру, но шейдеры Годо еще не поддерживают массивы. Хотя я мог бы передать информацию через текстуру… Если у вас есть хорошая идея о том, как это сделать, я весь внимание

3. Подход, который я придумал, не очень подходит для Годо, но должен работать: визуализируйте в отдельном окне просмотра блоки, которые должны быть видны, с материалом, который выводит глубину. Затем в материалах шейдера возьмите текстуру видового экрана из этого видового экрана, запросите ее с помощью координат УФ-излучения экрана, и там вы решите, находится ли она перед или за этой глубиной. Если он находится спереди, то вы можете отбросить фрагмент. Возможно, вам придется добавить смещение для сравнения глубины.