Я установил угол прожектора на 150 градусов. Но это не то, на что я надеюсь в этой необычной ситуации.
Это просто.
Если я установлю угол точечного света на 150 градусов, то он должен осветить область на 150 градусов. но, как вы можете видеть выше, свет достигает только небольшой области в центре (может быть, как 24-градусная область??)
Почему это происходит? и как я могу это исправить?
Я знаю, что могу увеличить диапазон до 5000, чтобы решить проблему. Но я должен довести прожектор до максимальной дальности. А на максимальной дальности свет должен распространяться точно по углу. Свет должен РАСПРОСТРАНЯТЬСЯ НА МАКСИМАЛЬНОЙ ДАЛЬНОСТИ.
Расстояние между прожектором и плоскостью равно 50, а диапазон прожектора равен 51. Я переопределил шейдер по умолчанию, чтобы изменить затухание света на очень низкое, чтобы свет достигал почти максимального диапазона.
Спасибо.
Добавлено назначение моего приложения и шейдера
ХОРОШО. Прежде всего, спасибо всем за ваше время, чтобы помочь мне. Действительно .. Я действительно ценю всех.
Я довольно опытный программист полного стека, но действительно новичок в 3D-графике и шейдерах. Поэтому я не думаю, что смогу сделать проектор самостоятельно за короткое время без длительного изучения программирования шейдеров.
Тем не мение,
Цель моего приложения
Я имитирую размещение видеонаблюдения, и мне нужно визуализировать точную зону охвата видеонаблюдения. Вот почему мне нужно что-то вроде стандартного проектора Unity. НО! UNITY PROJECTOR не может создать тень и даже осветить заднюю сторону сетки, что совершенно не имеет смысла и не может быть использовано для моей цели. Как упоминалось в ответах, я знаю, что делаю что-то очень нереальное. Чтобы визуализировать точную зону покрытия видеонаблюдения, мне нужен небольшой свет, который идет только до определенного диапазона. Итак, чтобы пояснить, что я пытаюсь сделать, я перечислю свойства, которым должен удовлетворять мой проектор.
Возможно управление вертикальным и горизонтальным углом. (Проектор Unity может)
- Прямоугольная форма, которую видят камеры видеонаблюдения (думаю, печенье может решить)
- Можно контролировать максимальную дальность (свет или камеры всегда имеют опцию дальности)
- Свет должен достигать максимальной дальности и равномерно распределяться в максимальной дальности. (Это начало темы)
- Проектор должен создавать жесткую тень (поскольку цель состоит в том, чтобы показать точную зону охвата)
Я планировал сделать такой проектор, помещая точечный свет внутрь коробки с прямоугольным отверстием. Я собирался динамически сделать точную согласованную коробку в соответствии со свойствами видеонаблюдения выше: диапазон. вертикальный и горизонтальный угол. Но если точечный свет такой, я не могу этого сделать.
Мой шейдер (я не хочу называть его МОЙ шейдер, потому что я только что добавил строку в шейдер по умолчанию, как уже упоминал)
- I changed light mode to deferred in player setting
- Шейдер по умолчанию DEFERRED изменен на мой пользовательский шейдер в папке ресурсов (Internal-DeferredShading.shader). Но я не менял код в этом файле.
- Скопируйте файл UnityDeferredLibrary.cginc в мои ресурсы и добавьте строку
Это код шейдера
// spot light case
#if defined (SPOT)
float3 tolight = _LightPos.xyz - wpos;
half3 lightDir = normalize (tolight);
float4 uvCookie = mul (_LightMatrix0, float4(wpos,1));
float atten = tex2Dproj(_LightTexture0, UNITY_PROJ_COORD(uvCookie)).w;
atten *= uvCookie.w < 0;
float att = dot(tolight, tolight) * _LightPos.w;
// as you can notice, this is A line I added
att = att *att *att *att*att *att *att *att*att *att *att *att * att *att *att *att*att *att *att *att*att *att *att *att * att *att *att *att*att *att *att *att*att *att *att *att;
atten *= tex2D (_LightTextureB0, att.rr).UNITY_ATTEN_CHANNEL;
atten *= UnityDeferredComputeShadow (wpos, fadeDist, uv);
Сейчас я действительно в отчаянии и тороплюсь. Мне действительно нужна помощь. Я даже готов заплатить, если кто-то сделает такой проектор...
Еще раз спасибо всем. Я действительно ценю.
эталонные изображения