Таро Теней — Значения карт. Построение теней при помощи теневых карт (shadow maps)

Мне нужно было для нашей игрушки построить тени, которые темны, густы и зловещи. При этом в тени менгиров должны обязательно стонать проклятые души. Для этой непростой задачи я выбрала карты теней (shadowmaps). Почему именно их? Мне нужно смоделировать тени от удаленного источника света, лучи идут параллельно. Это я о солнце. При этом местность открытая. Идеальная ситуация для карт теней.
Алгоритм построения карт теней был предложен Лансом Виллиамсом (Lance Williams) в 1978 году. Его работа по этому поводу называлась "Наложение изогнутых теней на изогнутые поверхности" (Casting curved shadows on curved surfaces).

Классические карты теней вкратце
Они строятся в два прохода. В первый рендерится собственно сама тень. Во второй рендерится сцена с наложенной на нее тенью из предыдушего этапа.

  1. Перемещаем камеру в положение источника света. Рендерим то, что отбрасывает тень.
  2. Потом возвращаем камеру обратно и рендерим сцену, накладывая на нее тень. Тень при этом придется хитрым образом преобразовать. Повернуть там, растянуть. В конце поста приведены ссылки где есть необходимые матрицы.
При наложении надо учитывать глубину, то бишь сравнивать Z координату со стороны источника света и со стороны камеры. Иначе тени будут отбрасываться совсем не туда, куда хотелось бы. Вон, глядите как она по склону вверх карабкается...

Это был вариант без учета глубины. Просто отрендерила в картинку и наложила поверх сцены.

Тень отрендеренная со стороны источника света

+ (накладывается на сцену)


= (получаем сцену с тенью)

Наложение с анализом глубины уберет лишнее:

Я пользуюсь возможностями карточек GeForce, которые позволяют делать текстуры глубины (DepthTextures). Создаю D3DUSAGE_DEPTHSTENCIL текстуру, ставлю ее в качестве Z-буфера, для изображения ставлю обычную текстуру. Цвет пишу серый, при этом объекты можно не текстурировать. Потом получившуюся текстуру накладываю, используя в качестве маски текстуру глубины. Вроде как ATI мне такое делать не позволит, надо будет проверить. Но на ATI можно использовать шейдеры. В любом случае, такое точно не пройдет на GeForce2 и на Intel 8XX, а я хотела, чтобы тени работали и на них.
В своих поисках я наткнулась на весьма экзотический метод построения карт теней с помощью буфера, изначально предназначенного для тумана . Можно попробовать, но фпс у автора метода весьма низкий получается.
Смотрела индексные карты теней , которые у меня заработали даже на Riva TNT2 Ultra, но у меня их использовать не получится, тень из вышеприведенного примера не построишь с их помощью.
Если кто делал тени на карточках класса GeForce2 и ниже, поделитесь опытом, плз.

Карта теней вероятно, самая трудная часть в создания визуального представления объекта. Мы используем их, чтобы получить запеченные свет и тень.
Они должны быть однозначно развернуты, так что каждая часть модели имеет свое собственное место в UV пространстве, чтобы в итоге получать корректную информацию о свете и тени.
Важно помнить, что разрешение карты теней крошечное по сравнению с размером UV пространства.
Важно также понимать, что чем больше уровень должен быть оптимизирован тем ниже дизайнер уровней должен использовать разрешение на лайтмапах, иногда доходя до 8 на 8 или 16 на 16 в случае с более мелкими объектами.
Эта тенденция требует, чтобы мы оставили много дополнительного пространства вокруг каждой секции из развертки объекта так, чтобы области, которые являются темными,
не воздействовали на светлые и не уничтожали иллюзию визуальной корректности теней в игре.

Есть 3 основных способа создания такой развертки:

BOX UNWRAP

Часто это самый надежный метод создания развертки объекта, поскольку большинство моделей окружающей среды близки по форме к блокам, которые объединены в некую структуру.
Непрерывный меш (меш в которой нет отстоящих от основной частей) часто бывает очень полезным решением при построении развертки,
это решение поможет обеспечить более эффективное распределение сетки геометрии в UV пространстве.
Это так же будет хорошо работать даже при низком разрешении карты теней, поскольку тогда она образует единый градиент от темного к светлому.
В отличии от фрагментированной развертки где результат покажется более неоднозначным и может потребоваться повысить разрешение карты теней для парирования эффекта резких переходов.
Мы должны стараться избегать этого там где мы можем. К сожалению иногда нет возможности использовать пониженное разрешение или единую развертку геометрии.

PLANAR UNWRAP

Этот способ особенно полезен для плоских конструкций, таких как стены с несколькими фасками или выдавливаниями. Это также очень полезно для больших частей фасадов зданий, таких как, например, многоквартирные дома.
Planar будет разворачивать значительно лучше если использовать неразрывную геометрию, потому что здесь вопрос будет стоять лишь в “расслаблении” сетки развертки.
Иногда так же хорошее правило заключается в том, чтобы убедиться, что на подобной развертке больше места по горизонтали, чем по вертикали, так как отбрасывание теней, как правило, происходит со стороны при слегка повышенном угле,
а не прямо вниз. Так, большее горизонтальное пространство даёт более широкие возможности для построения более резкой тени, из-за тенденции выбора дизайнерами освещения под углом,
чтобы создать более интересные тени, чем при освещении сверху вниз.

CYLINDRICAL UNWRAP

Большинство других форм можно представить как вариации цилиндрической формы, если конечно они не близки к параллелепипедам или плоскостям.
Цилиндрическую развертку хорошо использовать для многих конструкций которые имеют переднюю и боковые части, но не имеют задней, иначе мы бы использовали метод BOX UNWRAP .

Примеры

Это был неразрывный меш так что его легко было развернуть при помощи BOX UNWRAP и просто разложить его горизонтально, чтобы использовать как можно больше пространства карты теней.
Нижние поверхности, которые могли бы быть видны на среднем изображении, удалены, так как они почти всегда будут черными,
и если бы они были связаны с остальной разверткой, тени от них просто бы просачивались темными пятнами на стены там, где этого не должно быть. Это же верно и для верхних граней.
За исключением того что они всегда были бы светлыми.


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


Здесь мы видим что необходимо использовать максимально возможное пространство, так как карта теней в любом случае покроет всю развертку.
По этому между соотношением сторон объекта 1 к 1 и 1 к 7 вы увидите сещественную разницу. Так же вы видите что здесь отделены некоторые части развертки и отодвинуты от основной сетки.
Это сделано потому как эти части всегда останутся в тени. Они не должны воздействовать на остальную карту теней.


Даже на больших фасадах как этот, Planar показывает хороший результат. Этот меш является неразрывным, что помогает нашей работе,
но в данном случае всё работало бы так же даже если бы развертка была разделена на несколько вертикальных или горизонтальных полос, хотя и потребовалось сделать небольшие отступы между ними.


Вы можете видеть, что здесь, плотно прилегающая геометрия позволила легко уложить UV. Так же вы видите что здесь сделаны отступы между частями развертки что бы темные области не воздействовали на светлые.
Чем меньше разрешение карты, тем больше необходимо брать отступ.


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


У некоторых проектов не выходит следовать этим простым правилам, как на скриншоте ниже.


Когда имеется так много отдельных элементов у нас нет иного выбора, кроме как повысить разрешение текстур иначе мы бы тратили очень много места на отступах между элементами развертки, это бы выглядело ужасно в игре.
Так что разрешение карт теней было поднято до 128 на 128, однако это всё еще не выглядит безупречно, но всё же не на столько что бы полностью разрушить визуальный образ объекта в игре.


Иногда развернуть объект легко, достаточно разбить его на несколько обоснованных частей. А затем просто “расслабить” развертку. Отличный пример объект ниже.


Такая конструкция является по существу цилиндром с плоским основанием поэтому здесь используются эти два основных метода развертки объекта.
Planar разворачивает части геометрии вниз по оси Z, а затем применяется модификатор “расслабления” и немного регулируется положение вершин чтобы убедиться, что ничего не получает слишком мало покрытия.
В середине схожий с основанием случай, здесь центральная часть разделена и использован Planar вместо Cylindrical для того что бы обеспечить большую зону покрытия.
Как всегда, мы больше озабочены охватом, чем чем соотношением сторон 1 на 1. Большим преимуществом будет располагать швы в их реальных местах, это позволит выглядеть теням более естественно.
Если на вашем объекте есть глубокие вырезы, крайне резкие стыки геометрии то это отличное место что бы здесь проложить шов, если конечно он требуется.

Lightmap Coordinates Index

По умолчанию, первый набор UV (индекс 0) статик меша будет использоваться при создании карты теней для статического освещения.
Это означает, что один и тот же набор координат, который используется для нанесения материалов на меш, так же будет использован для статического освещения.
Этот метод довольно часто не является идеальным. Одной из причин этого является то, что UV, используемые для генерации карты теней должны быть уникальными,
а это означает, что каждая грань сетки не должна перекрывать любую другую поверхность в UV пространстве. Причина этого достаточно очевидна: если фейсы перекрывают друг друга на UV развертке,
часть карты теней, соответствующая этому пространству будет применяться к обеим граням. Это приведет к неправильному освещению, появлению теней там где их в принципе быть не должно.
Статик меши имеют свойство LightmapCoordinateIndex , которое позволяет использовать заданную UV развертку под карту теней. Установите это свойство, чтобы указать на набор UV, который правильно настроен для освещения.

UV чарты и отступы

Группы обособленных треугольников с сопредельными UVs называются UV чарты (charts).

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

  1. Потраченный впустую отступ
  2. Необходимый отступ

Это означает, что для карты теней разрешением 32, отступы между частями UV развертки должны быть 12,5% от всего UV-пространства.
Однако, имейте в виду, что использование слишком больших отступов между частями UV развертки приведет к трате памяти, отведенной на карту теней, впустую на более высоких разрешениях.
Чем ближе ближе вы сможете расположить UV чарты, тем лучше. Это позволит уменьшить количество растраченной впустую памяти.


Это далеко не идеальная развертка.

Одним из примеров проблем с разверткой служит чрезмерная фрагментация. Вы видите как тени что должны оставаться на внутренних частях объекта дают затенение и на внешние грани.
Другой потенциальный ловушкой полагается на автоматический разворачивать, так как это тоже может привести к тем же проблемам.


Лучший способ создания развертки для карты теней является моделирование всего меша как одного непрерывного элемента или создание развертки вручную.


Это даст единую развертку, на которой почти нет швов и которая гораздо более эффективна.

Конечным результатом является меш, который освещается должным образом без каких — либо артефактов.


Дополнительным преимуществом этого метода является то, что он также обычно сокращает число вершин и треугольников, необходимых для данной модели.


Помимо классической колоды карт Таро существует еще множество других, ярких, красочных, современных и старинных, отличающихся точностью и легкостью восприятия, или же подходящих только для опытных тарологов.

Колода Теней карт Таро относится к категории оккультных. Она появилась на свет в 2003 году , благодаря талантливому сотрудничеству известного в России таролога Скляровой В.А. и художнику Васильченко О.

Эти карты уникальны и по своей характеристике и по стилистике. Гадание на картах Теней под силу знатокам карт Таро, начинать с этой колодой будет сложно.

Колода карт Теней Таро

Вера Склярова, автор колоды, опытный таролог, на счету которого несколько работ по технике гадания на картах Таро и изданных под ее авторством новых колод. Колода Теней позволяет точно ответить на волнующие вопросы, понять причины преследующих человека неудач, установить воздействие темных сил на судьбу человека.

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

Автор вложил в карты весь свой опыт и знания в этой области. Колода состоит из 78 арканов и не делится по мастям, как это происходит в классическом варианте Таро. На самом деле, колоду карт Теней сложно сравнивать с классическим Таро.

Младшие арканы

По-большому счету карты Теней исполняют роль оракула. Это отличный инструмент для профессиональных гадалок при необходимости узнать о магическом воздействии. Деления на младшие арканы и старшие здесь не предусмотрено, так как колода состоит из 78 арканов , каждый из которых имеет свое значение и значимость.

Каждая карта в колоде имеет уникальное изображение и уникальное толкование. В колоде карт Таро многие арканов из колоды карт Теней вы найдете. Карты Таро Теней являются на сегодняшний день уникальной колодой, сразу же получившей популярность среди профессионалов.

Расклады на личность и ситуацию

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

  • Карта “Сатана” – если расклад проводится на личность человека, то перед вами удачливый и привлекательный человек. Он может произвести приятное впечатление практически всегда. Он успешен и вызывает у окружающих уважение и зависть. Но это лишь внешнее проявление личности человека, на самом деле он вспыльчив и неуравновешен, может быть жестоким и проявлять приступы агрессии. Если карта выпадает в раскладе на ситуации, то она предупреждает вас об осторожности в отстаивании своей позиции. Возможно вы выступаете слишком жестко и вам стоит подумать о том, чтобы в чем-то уступить или согласиться на компромисс. Карта также может указывать на то, что над человеком был произведен обряд разрушения на что именно можно будет понять по другим картам в раскладе. Обряд может быть проведен на разрушение отношений, карьеры и даже здоровья. В раскладе на отношения карта говорит о том, что вы под властью более сильного партнера. Может также являться предвестником болезненного разрыва.
  • Аркан под номером два – Лилит. Эта карта обычно олицетворяет сильную женщину. Эта женщина умеет добиваться своего и в делах любовных и в делах материальных. Она красива, влиятельна, ее отличает сильный характер. Если карта выпадает мужчине, то она указывает на зависимость от женщины в любой возможной форме. Это может быть зависимость страстная от любимой женщины, может быть зависимость от материнской любви. В раскладе на отношения указывает на то, что доминирует в них женщина. В раскладе на дела и ситуацию карта обещает удачу и успех женщине, а вот для мужчины означает что ему пора стать жестче, его позиция слишком мягкая и не внятная.
  • Третья карта колоды Теней – это Геката . Эта карта также говорит о стремлении к независимости, но движет этим стремлением вовсе не сильный характер волевой женщины, а потворство своим желаниям и эгоизм. Часто карта может указывать на ветреность натуры. Олицетворяя женщину, карта указывает на ее привлекательность, но при этом говорит о ее несерьезности и стремлению к выгоде. Возможно, что алчность проявляется конкретно в данной ситуации. Если карта выпадает в раскладе мужчине, то это является предупреждением. В ближайшем будущем вам не стоит конкурировать или вступать в серьезный спор с особой женского пола. Вас ожидает проигрыш. Если карта выпадает женщине, то она предвещает победу и удачу. В раскладе на отношения карта говорит о потребительском отношении одного из партнеров к другому. Подчеркивает несерьезность связи и поверхностность чувств.
  • Четвертый аркан Люцифер предостерегает от поспешности в любых ситуациях. Если вы примете решение необдуманно, то рискуете иметь неприятные последствия. Лучше остановиться, потянуть время, подумать несколько раз, посоветоваться с близкими людьми и только затем сделать свой выбор. В спешке таится опасность. При раскладе на личность карта указывает на уравновешенного, логичного, твердого в своих убеждениях человека. Этот человек кажется сильным и надежным. Он способен контролировать свои эмоции, хотя по своей сути является человеком темпераментным. В раскладах на отношения может указывать на наличие серьезного покровителя, на то, что вторая половинка является для вас надежной опорой во всех делах и невзгодах.
  • Аркан под номером пять носит название “Ариман” . Аркан очень интересен в том плане, что носит магический отпечаток. Эта карта может выпадать в раскладе человеку, который в настоящий период своей жизни расплачивается за свое поведение. Иначе говоря, карта несет отпечаток возмездия, кары судьбы за неверные поступки или плохие черты характера. Но при этом, в сочетании с некоторыми картами может указывать на то, что на человека была наведена порча или был проведен обряд мести. В раскладах на личность эта карта выпадает тем людям, которые отличаются особенно низкими поступками или наделены низкими качествами характера. Карта указывает на подлость, лицемерие, агрессию, излишнюю подверженность страстям, азартным играм, эгоизм. В целом крайне негативный аркан. Он предвещает провал в любых начинаниях, проблемы в делах, появление болезни, финансовую несостоятельность. В раскладах на отношения говорит о болезненной любви или страсти, разрыве, потере любимого.
  • Шестой аркан тоже можно назвать удивительным и уникальным. Речь идет о карте “Ваалверит, Владыка соглашений” . Эта карта выпадает в раскладе на личность, указывая на крайнюю степень подавленности человека. Возможно, что человек подвержен суицидальным мыслям. Может говорить о недавней утрате близкого человека, крупной финансовой потере, близкой к банкротству. Карта выпадает в том случае, когда в сложившейся бедственной ситуации виновен сам человек.

Расклады для карт Теней Таро

Для карт Теней предусмотрены совершенно иные расклады нежели для классических Таро. Один из простых раскладов всего лишь на четыре карты при гадании на личность человека представляет собой следующее: первая карта говорит о хороших качествах человека, вторая карта указывает на отрицательные стороны его личности, третья карта раскрывает самую большую его тайну, а четвертая карта говорит о его страхах.

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

Можно заранее подготовить список вопросов , ответы на которые вам необходимо узнать и таким образом создать собственный расклад.

Кроме метода теневых объемов (требующего предварительной обработки геометрии и работы в трехмерном пространстве) есть еще один довольно простой метод для получения теней - использование так называемых теневых карт ().

Данный метод работает не в исходном трехмерном пространстве, а в картинной плоскости (и поэтому ему свойственны ошибки дискретизации - aliasing artifacts ), но зато он крайне прост, не требует специальной обработки геометрии сцены и может использовать альфа-канал текстуры для создания "дырок".

В основе этого метода лежит крайне простая идея, что освещенные фрагменты - это те фрагменты, которые видны из положения источника света.

Поэтому, если мы расположим камеру в положении источника света и отрендерим сцену при помощи этой камеры, то мы получим все освещенные фрагменты.

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

Рис 1. Рендеринг из положения источника света.

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

Подобно тому, как это делалось при построении отражения в текстуру, можно подобрать такой способ вычисления текстурных координат (s,t,r) , при котором первые две компоненты (s,t) определяют проекцию соответствующего фрагмента на картинную плоскость при рендеринге из положения источника света (т.е. являются индексом в текстуру глубины), а третья компонента r является глубиной фрагмента относительно источника света.

Тогда для определения видимости источником света данного фрагмента достаточно просто сравнить значение глубины depthMap(s,t) и r . Если первая величина больше или равна второй, то данный фрагмент проходит тест глубины для источника света и, следовательно, освещен.

При этом текстурные координаты (s,t,r) фактически являются координатами фрагмента в системе координат камеры, использованной для рендеринга из положения источника света (с точностью до отображения куба [-1,1] 3 в 3).

Поэтому данные текстурные координаты могут быть получены путем умножения пространственных координат на произведение модельной и проектирующей матриц, использованных при рендеринге из положения источника света. Как и при рендеринге отражения в текстуру необходимо домножение этого произведения на матрицу преобразования, переводящую куб [-1,1] 3 в 3).

Рис 2. Координаты в относительно источника света.

Рассмотрим, что необходимо для практической реализации данного метода.

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

Во-вторых, необходим быстрый способ вычисления depthMap(s,t)<=r (хотя это может быть легко реализовано при помощи фрагментной программы).

Первая возможность предоставляется расширением ARB_depth_texture (или SGIX_depth_texture, расширением которого оно является).

Данное расширение вводит новый формат текстуры (для использования в командах glGetTexImage, glTexImage1D, glTexImage2D, glTexSubImage1D и glTexSubImage2D) - GL_DEPTH_COMPONENT.

Также данное расширение вводит несколько внутренних форматов для функций glTexImage1D, glTexImage2D, glCopyTexImage1D и glCopyTexImage2D - GL_DEPTH_COMPONENT, GL_DEPTH_COMPONENT16_ARB, GL_DEPTH_COMPONENT24_ARB и GL_DEPTH_COMPONENT32_ARB.

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

Если к такой текстуре происходит обращение, подразумевающее получение цветового значения, то текстура трактуется как текстура типа GL_LUMINANCE.

Вторая возможность предоставляется расширением ARB_shadow (или SGIX_shadow).

Данное расширение вводит новые значения для параметра pname функций glTexParamerteri, glTexParameterf, glTexParameteriv и glTexParameterfv - GL_TEXTURE_COMPARE_MODE_ARB и GL_TEXTURE_COMPARE_FUNC_ARB.

Также вводится константа GL_COMPARE_R_TO_TEXTURE_ARB, которое может быть использовано в качестве параметра param у функций glTexParamerteri и glTexParameterf при значении pname равном GL_TEXTURE_COMPARE_MODE_ARB.

Поделиться: