Render.ru

Как сделать шейдер, смотрящий в камеру?

Misst

Пользователь сайта
Рейтинг
2
#1
Друзья, подскажите, пожалуйста, как сделать шейдер, "смотрящий" все время на тебя? То есть у меня есть текстурка - буква на обычном красном, например, фоне. Объект - сфера. Я хочу, чтобы с какой бы точки я ни делал рендер, буква смотрела бы прямо на меня (то есть в камеру). Что-то может с Sampler Info, узел Ray Direction наверное, только вот я не соображу к чему его коннектить?
 

Миша Ершов

Модератор форума
Рейтинг
314
#2
Мне приходят в голову два способа решения проблемы.
1 - добиться направления текстуры в камеру с помощью узла place3dTexture, который соединить с нужным нам объектом констрейном aim. Аттрибут center камеры коннектим к place3dTextur.translate. В общем смотрите рисунок. Тормозит, кстати, очень сильно :)
2 - это управление uv координатами. Но этот способ очень кривой будет, и наврятли кому-то подойдёт :)
 

Вложения

eranicle

Знаток
Рейтинг
28
#3
а если попробывать написать скрипт, который с каждым изменением transorm камеры или же с каждым новым кадром будет проецировать текстуру планарно через камеру (polyUV>planar>mappingDirection = camera) ?
 

Ghostfly

Активный участник
Рейтинг
19
#4
to eranicle да скрипт наверно не понадобиться - достаточно просто завязать куда надо положение плоскости проекции - она же по истории крутиться
 

Misst

Пользователь сайта
Рейтинг
2
#5
Поясните, пожалуйста, вашу схему 1. Я попытался воссоздать но видимо без понимания полного что за что отвечает. В частности, что делают у нас aim и projection, не могли бы вы чуть более подробно обьяснить? (никогда еще с ними не работал, ни с тем ни с другим, и на примере понять проще, чем по хелпу) Вход файла на projection и выход на шейдер всё я делал по дефолту в коннекшен эдитторе, остальное как вы сказали. Результата нет - шарик просто становится красным, буква исчезает. На последней картинке шейдер просто из самой текстурки с файлом картинки, наложенной на канал цвет и всё. Вот эта буква я хочу чтобы смотрела постоянно на камеру. Вообще это же на самом деле, как блик на шейдере любом типа блинн - смотрит на тебя все время, правильно я понимаю?
 

Вложения

Misst

Пользователь сайта
Рейтинг
2
#6
Изменил проджекшен с планар на перспектив и линк ту камера (перспективу) - там самым вышло что и правда смотрит на камеру моя буква, но токльо в зависимости от расстояния от камеры до обьекта. вблизи всё номарльно, подальше начинаются проблемы - расплывается, исчезает и прочее. Всё это я просто банально тыкал в разыне места, но по-прежнему не очень понимаю, что за что отвечает..
 

Миша Ершов

Модератор форума
Рейтинг
314
#7
Misst сказал(а):
В частности, что делают у нас aim и projection, не могли бы вы чуть более подробно обьяснить?
aim - это констрейн, который заставляет один объект всё время смотреть на другой.
projection - проецирует текстуру на объект по одному из выбранных типов проекции (в нашем случае planar).

Misst сказал(а):
подальше начинаются проблемы - расплывается, исчезает и прочее.
Посмотрел - действительно, проблема присутствует.
Решается довольно просто. Просто назначьте aim констрейн не паре place3dTexture-object, а паре camera-place3dTexture. И соответственно расконнектите камеру с объектом, и сконнектите translate объектa c translate place3dTexture.
Получится, что узел проецирования текстуры будет всё время находится на Вашем объекте, и смотреть в сторону камеры. Т.е. по сути мы его "прилепили" не к камере, а к объекту. И глюка с искажениями уже, конечно, не будет.
 

Вложения

Wolf_N

Активный участник
Рейтинг
5
#10
Срок размещения файла истек и файл был удален.
Не могли-бы выложить еще разок его ....буду оч благодарен
 

Миша Ершов

Модератор форума
Рейтинг
314
#12
2 Wolf_N & all
Выслал, но на будущее для таких просьб существуют личные сообщения.

Предлагаю занести подобное правило в правила форума Maya.
 
Рейтинг
26
#13
По моему текстура Env Ball как раз для подобных целей подойдет. Сама будет все время в камеру смотреть, объект будет не подвижен.
 
Сверху