Для меня звучит как унитаз. Вы можете попробовать поискать "Unity Matcap Shader" и посмотреть, появится ли что-нибудь хорошее. Вот центральная часть вычисления (в вершинном шейдере):
o.uv = mul((float3x3)UNITY_MATRIX_V, UnityObjectToWorldNormal(v.vertex)).xy * 0.5 + 0.5;
РЕДАКТИРОВАТЬ: Таким образом, вы в основном хотите UV-пространства на экране, за исключением объекта в качестве источника. Я думаю, что вышеупомянутое решение все еще должно работать, если вы замените нормальное положение объекта.
o.uv = mul((float3x3)UNITY_MATRIX_V, v.vertex).xy * 0.5 + 0.5;
При этом будет использоваться позиция объекта в пространстве модели, повернутая в пространство экрана. Он должен работать, пока начало сетки находится в его центре. Обратите внимание, что диапазон UV-координат будет зависеть от размера модели (1 метр = 1 ультрафиолетовая плитка), поэтому вам может понадобиться умножить его на некоторый коэффициент.
РЕДАКТИРОВАТЬ2: Хорошо, поэтому я начинаю понимать немного больше, чего вы пытаетесь достичь. Если вы хотите, чтобы ультрафиолетовое пространство на экране относилось к границам объекта, вам нужно каким-то образом передать ограничивающую рамку пространства экрана в шейдер.
Я предлагаю добавить свойство вектора float4 к материалу. где XY - центр границ, а ZW - размеры блока, а затем установите его из кода, используя что-то вроде GetComponent<MeshRenderer>().material.SetProperty("_ScreenBounds", bounds);
. Вам нужно будет рассчитать границы экрана объекта в методе обновления скрипта. Вы можете получить границы, используя Renderer.bounds , и вы можете преобразовать их в пространство экрана, используя Camera.WorldToScreenPoint () . Преобразуйте все углы ограничительной рамки и получите минимальные / максимальные баллы.
Внутри шейдера вы можете вычислить обычные UV-пространства объекта на экранном пространстве, а затем вычесть смещение и поделить на размеры.
Я должен предупредить вас, что есть небольшойзадержка, связанная с отправкой данных в графический процессор, поэтому может возникнуть небольшая задержка при обновлении границ.