Я не знаю, как использовать прожектор в необычной ситуации с экстремальным нефизическим углом

введите здесь описание изображения

Я установил угол прожектора на 150 градусов. Но это не то, на что я надеюсь в этой необычной ситуации.

Это просто.

Если я установлю угол точечного света на 150 градусов, то он должен осветить область на 150 градусов. но, как вы можете видеть выше, свет достигает только небольшой области в центре (может быть, как 24-градусная область??)

Почему это происходит? и как я могу это исправить?

Я знаю, что могу увеличить диапазон до 5000, чтобы решить проблему. Но я должен довести прожектор до максимальной дальности. А на максимальной дальности свет должен распространяться точно по углу. Свет должен РАСПРОСТРАНЯТЬСЯ НА МАКСИМАЛЬНОЙ ДАЛЬНОСТИ.

Расстояние между прожектором и плоскостью равно 50, а диапазон прожектора равен 51. Я переопределил шейдер по умолчанию, чтобы изменить затухание света на очень низкое, чтобы свет достигал почти максимального диапазона.

Спасибо.


Добавлено назначение моего приложения и шейдера


ХОРОШО. Прежде всего, спасибо всем за ваше время, чтобы помочь мне. Действительно .. Я действительно ценю всех.

Я довольно опытный программист полного стека, но действительно новичок в 3D-графике и шейдерах. Поэтому я не думаю, что смогу сделать проектор самостоятельно за короткое время без длительного изучения программирования шейдеров.

Тем не мение,

  1. Цель моего приложения

    • Я имитирую размещение видеонаблюдения, и мне нужно визуализировать точную зону охвата видеонаблюдения. Вот почему мне нужно что-то вроде стандартного проектора Unity. НО! UNITY PROJECTOR не может создать тень и даже осветить заднюю сторону сетки, что совершенно не имеет смысла и не может быть использовано для моей цели. Как упоминалось в ответах, я знаю, что делаю что-то очень нереальное. Чтобы визуализировать точную зону покрытия видеонаблюдения, мне нужен небольшой свет, который идет только до определенного диапазона. Итак, чтобы пояснить, что я пытаюсь сделать, я перечислю свойства, которым должен удовлетворять мой проектор.

    • Возможно управление вертикальным и горизонтальным углом. (Проектор Unity может)

    • Прямоугольная форма, которую видят камеры видеонаблюдения (думаю, печенье может решить)
    • Можно контролировать максимальную дальность (свет или камеры всегда имеют опцию дальности)
    • Свет должен достигать максимальной дальности и равномерно распределяться в максимальной дальности. (Это начало темы)
    • Проектор должен создавать жесткую тень (поскольку цель состоит в том, чтобы показать точную зону охвата)

Я планировал сделать такой проектор, помещая точечный свет внутрь коробки с прямоугольным отверстием. Я собирался динамически сделать точную согласованную коробку в соответствии со свойствами видеонаблюдения выше: диапазон. вертикальный и горизонтальный угол. Но если точечный свет такой, я не могу этого сделать.

  1. Мой шейдер (я не хочу называть его МОЙ шейдер, потому что я только что добавил строку в шейдер по умолчанию, как уже упоминал)

    • 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);

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

Еще раз спасибо всем. Я действительно ценю.

эталонные изображения

введите здесь описание изображения введите здесь описание изображения


person Myeong-jae Kim    schedule 25.01.2016    source источник
comment
Может попробовать сделать это без вашего шейдера? Если световой диапазон будет хорошим, то проблема в вашем шейдере.   -  person Jerry Switalski    schedule 25.01.2016
comment
Конечно, у вас будет этот эффект, если вы установите свой диапазон на 51. Представьте, что воздушный шар касается стены. В вашем примере воздушный шар едва касается стены, но сделайте его больше, и площадь касания увеличится. То же самое с вашим светом, измените его на 200, и все будет в порядке.   -  person Łukasz Motyczka    schedule 25.01.2016
comment
Спасибо за хорошее объяснение использования воздушного шара. Но не имеет смысла то, что точечный свет должен распространяться под определенным углом. Я допускаю, что интенсивность света уменьшается с расстоянием, но почему форма точечного света выглядит как воздушный шар? Это не точечный свет.   -  person Myeong-jae Kim    schedule 25.01.2016


Ответы (1)


Чтобы исправить это, вам нужно иметь большую дальность прожектора.

  1. Диапазон встречает самолет. 1

  2. Более высокий диапазон 2

Это связано с тем, что шейдер имеет очень низкий тест на цвет во внешних областях, так как тип света Spotlight имеет градиентный свет от центра к внешнему краю.

person Jerry Switalski    schedule 25.01.2016
comment
Спасибо за ваше время, но я предлагаю вам внимательно прочитать мой пост. - person Myeong-jae Kim; 25.01.2016
comment
Извините, теперь я понимаю вашу точку зрения. Но ответ остается, если вы не покажете шейдер, как будто он должен показывать полную интенсивность на внешнем ободе, тогда он просто не работает. Во всяком случае, я вижу градиентную заливку в вашем шейдере прожектора. Я предлагаю использовать не прожектор в этом случае, а любой другой проектор. Если вам не нужно это как прожектор. - person Jerry Switalski; 25.01.2016
comment
Спасибо, Джерри. Я много гуглил, но думаю, что не могу найти ответ на свою проблему. Я хочу сделать настоящий проектор с отбрасыванием теней. Я положу этот прожектор в коробку с дыркой. Мой шейдер не относится к этому точечному источнику света. Я переопределил шейдер света по умолчанию, чтобы контролировать затухание точечного света. Я просто добавил строку. Я не думаю, что мой код шейдера связан с моей проблемой. - person Myeong-jae Kim; 25.01.2016
comment
Я знаю, что в стандартном активе есть готовый проектор. Проблема этого проектора активов в том, что он не может отбрасывать тени. И он также освещает обратную сторону сетки. Это неправильно. Что я делаю, так это показываю зону покрытия видеонаблюдения точно с вертикальным, горизонтальным углом и диапазоном камеры. Вот почему точечный свет не должен выходить за пределы максимальной дальности, а свет должен распространяться до максимальной дальности. - person Myeong-jae Kim; 25.01.2016
comment
Хорошо, я понимаю, но я все еще думаю, что проблема в шейдере. Я вижу, что он работает очень похоже на стандартный, так как мы видим градиент. В этом случае он будет работать очень похоже на стандартный шейдер и не будет рисовать с этим диапазоном внешние области. Попробуйте полностью убрать оценку в этом свете. - person Jerry Switalski; 25.01.2016
comment
Что я делаю, так это показываю зону покрытия видеонаблюдения точно с вертикальным, горизонтальным углом и диапазоном камеры. ты НЕ сможешь сделать это с прожектором, Ким. Прожектор — это очень тщательно спроектированная система, ПРЕДНАЧЕННАЯ ДЛЯ РАБОТЫ — КАК ПРОЖЕКТОР (!). Обратите внимание, что В РЕАЛЬНОЙ ЖИЗНИ вы НЕ МОЖЕТЕ сделать это с прожектором. Вам понадобится некоторое пользовательское кодирование на каком-то уровне. - person Fattie; 25.01.2016