тайлинг биллбордов
От: IPv6 Казахстан  
Дата: 18.09.06 14:34
Оценка:
Привет всем!
Помогите с такой проблемой. рисую несколько билбордов (квадрат из двух треугольников смотрящий всегда в камеру то есть), на них части одной большой текстуры (т.е. большая картинка порезана на несколько мелких кускочков — каждый на свой биллборд). биллборды спозиционированы стык в стык — т.е. где заканчивается один начинается другой. но вот при отпределенных растояниях (причем расстояния разные в зависимости от разрешения) между границами биллбордов просвечивает фон! одна тонкая полоска в пиксель, такое ощущение что луч света просвечивает через края биллборда. думаю понятно что имеется в виду. анаолгичные проблемы я видел со скайбоксами в некоторых играх — под определенными углами между квадратами скайбокса светит полоса цвета фона в один пиксел.
собственно вопрос — как с этим бороться?
Re: тайлинг биллбордов
От: casual  
Дата: 18.09.06 15:34
Оценка:
OpenGL? DirectX? может вобще софтверный рендерер?
Re[2]: тайлинг биллбордов
От: Selevan  
Дата: 19.09.06 02:45
Оценка:
Здравствуйте, casual, Вы писали:

C>OpenGL? DirectX? может вобще софтверный рендерер?


сорри! дирекс-х 8
а с опенглем такого не бывает?
Re[2]: тайлинг биллбордов
От: IPv6 Казахстан  
Дата: 19.09.06 05:50
Оценка:
Здравствуйте, casual, Вы писали:

C>OpenGL? DirectX? может вобще софтверный рендерер?


Тьфу ты блин. это был я. увольняясь с предыдущей работы взял себе другой ник чтобы не засветьится у начальства читающего эти же форумы... прошу прощения, на разных компах разные куки оказались
Re: тайлинг биллбордов
От: Аноним  
Дата: 19.09.06 07:56
Оценка:
Здравствуйте, IPv6, Вы писали:

IP>Привет всем!

IP>Помогите с такой проблемой. рисую несколько билбордов (квадрат из двух треугольников смотрящий всегда в камеру то есть), на них части одной большой текстуры (т.е. большая картинка порезана на несколько мелких кускочков — каждый на свой биллборд). биллборды спозиционированы стык в стык — т.е. где заканчивается один начинается другой. но вот при отпределенных растояниях (причем расстояния разные в зависимости от разрешения) между границами биллбордов просвечивает фон! одна тонкая полоска в пиксель, такое ощущение что луч света просвечивает через края биллборда. думаю понятно что имеется в виду. анаолгичные проблемы я видел со скайбоксами в некоторых играх — под определенными углами между квадратами скайбокса светит полоса цвета фона в один пиксел.
IP>собственно вопрос — как с этим бороться? :???

а если вершины соприкасаемых сторон билбордов позырить? различаются хоть в одном бите? тогда копировать одни в другие чтобы не различались
если не различаются, будем думать
Re: тайлинг биллбордов
От: WolfHound  
Дата: 19.09.06 09:55
Оценка:
Здравствуйте, IPv6, Вы писали:

IP>собственно вопрос — как с этим бороться?

Если под Д3Д то посмотри IDirect3DDevice9::SetRenderState и D3DRS_LASTPIXEL.
Под OGL тоже что-то подобное должно быть
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re: тайлинг биллбордов
От: Аноним  
Дата: 19.09.06 18:28
Оценка:
Здравствуйте, IPv6, Вы писали:

IP>Привет всем!

IP>Помогите с такой проблемой. рисую несколько билбордов (квадрат из двух треугольников смотрящий всегда в камеру то есть), на них части одной большой текстуры (т.е. большая картинка порезана на несколько мелких кускочков — каждый на свой биллборд). биллборды спозиционированы стык в стык — т.е. где заканчивается один начинается другой. но вот при отпределенных растояниях (причем расстояния разные в зависимости от разрешения) между границами биллбордов просвечивает фон! одна тонкая полоска в пиксель, такое ощущение что луч света просвечивает через края биллборда. думаю понятно что имеется в виду. анаолгичные проблемы я видел со скайбоксами в некоторых играх — под определенными углами между квадратами скайбокса светит полоса цвета фона в один пиксел.
IP>собственно вопрос — как с этим бороться?
Увеличь размеры билбордов на небольшую величину
Re[2]: тайлинг биллбордов
От: IPv6 Казахстан  
Дата: 20.09.06 07:07
Оценка: 7 (4)
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, IPv6, Вы писали:


IP>>Привет всем!

IP>>Помогите с такой проблемой. рисую несколько билбордов (квадрат из двух треугольников смотрящий всегда в камеру то есть), на них части одной большой текстуры (т.е. большая картинка порезана на несколько мелких кускочков — каждый на свой биллборд). биллборды спозиционированы стык в стык — т.е. где заканчивается один начинается другой. но вот при отпределенных растояниях (причем расстояния разные в зависимости от разрешения) между границами биллбордов просвечивает фон! одна тонкая полоска в пиксель, такое ощущение что луч света просвечивает через края биллборда. думаю понятно что имеется в виду. анаолгичные проблемы я видел со скайбоксами в некоторых играх — под определенными углами между квадратами скайбокса светит полоса цвета фона в один пиксел.
IP>>собственно вопрос — как с этим бороться?
А>Увеличь размеры билбордов на небольшую величину

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

попробовал:
— LASTPIXEL — не помогло
— координаты стык в стык — не помогло
— соотв. увеличить биллборды/расположить их в нахлест — не помогло + появляются видимые искажения в общей картинке (которая как раз на соствные биллборды и порезана).

но зато это навело на мысль, которая помогла побороть проблему — похимичить с текстурными координатами.
в результате установки координат (на каждом тайле) вместо (0,0)-(1,1) в (0.001,0.001)-(0.999,0.999) полосы по краям исчезли!
еще не проверял под всеми разрешениями но видимо растеризатор странно себя ведет когда край текстуры совпадает с краем триангла.
Спасибо!
Re[3]: тайлинг биллбордов
От: spbAngel  
Дата: 22.09.06 08:09
Оценка:
Здравствуйте, Selevan, Вы писали:

S>Здравствуйте, casual, Вы писали:


C>>OpenGL? DirectX? может вобще софтверный рендерер?


S>сорри! дирекс-х 8

S>а с опенглем такого не бывает?

Бывает. Но я встречал исключительно при "неявных стыках". Например, ребро образуется тремя (!!!) полигонами:

* вклад первого полигона — ребро с координатами (0, 0, 0) — (200, 0, 0)
* вклад второго полигона — ребро с координатами (0, 0, 0) — (100, 0, 0)
* вклад третьего полигона — ребро с координатами (100, 0, 0) — (200, 0, 0)

Просвет будет почти всегда. Хотя, вроде и не должно быть...
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[3]: тайлинг биллбордов
От: spbAngel  
Дата: 22.09.06 08:16
Оценка:
Здравствуйте, IPv6, Вы писали:

А>>Увеличь размеры билбордов на небольшую величину


IP>но зато это навело на мысль, которая помогла побороть проблему — похимичить с текстурными координатами.

IP>в результате установки координат (на каждом тайле) вместо (0,0)-(1,1) в (0.001,0.001)-(0.999,0.999) полосы по краям исчезли!
IP>еще не проверял под всеми разрешениями но видимо растеризатор странно себя ведет когда край текстуры совпадает с краем триангла.

Не скажу, что это выход. Проблемы на лицо — неточности. Если это допускается, то можно и пропустить. Но не всегда можно их допустить
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: тайлинг биллбордов
От: Vain Россия google.ru
Дата: 26.09.06 20:21
Оценка:
Здравствуйте, IPv6, Вы писали:

IP>Привет всем!

IP>Помогите с такой проблемой. рисую несколько билбордов (квадрат из двух треугольников смотрящий всегда в камеру то есть), на них части одной большой текстуры (т.е. большая картинка порезана на несколько мелких кускочков — каждый на свой биллборд). биллборды спозиционированы стык в стык — т.е. где заканчивается один начинается другой. но вот при отпределенных растояниях (причем расстояния разные в зависимости от разрешения) между границами биллбордов просвечивает фон! одна тонкая полоска в пиксель, такое ощущение что луч света просвечивает через края биллборда. думаю понятно что имеется в виду. анаолгичные проблемы я видел со скайбоксами в некоторых играх — под определенными углами между квадратами скайбокса светит полоса цвета фона в один пиксел.
Это текстуртайлинг называется.
IP>собственно вопрос — как с этим бороться?
Выключи интерполяцию.
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re[3]: тайлинг биллбордов
От: Vain Россия google.ru
Дата: 28.09.06 16:54
Оценка: 2 (2)
Здравствуйте, IPv6, Вы писали:

IP>но зато это навело на мысль, которая помогла побороть проблему — похимичить с текстурными координатами.

IP>в результате установки координат (на каждом тайле) вместо (0,0)-(1,1) в (0.001,0.001)-(0.999,0.999) полосы по краям исчезли!
IP>еще не проверял под всеми разрешениями но видимо растеризатор странно себя ведет когда край текстуры совпадает с краем триангла.
Нормально он себя ведёт, с чем по вашему должны интерполироваться цвета краевых пикселов?
Если хотите задавать вручную (как раз ваш случай) CLAMP EDGE, создаёте текстуру размером (N+2) на (M+2), т.е. по краям на 1 пиксел больше и заполняете эджи цветами соседних краевых пикселов ваших биллбордов. И как вы заметили, нужно установить правильные текстурные координаты, к примеру, для верхнего левого угла они будут такие:
U = 1/(N+2);
V = 1/(M+2);
Для правого нижнего, соответственно:
U = 1-1/(N+2);
V = 1-1/(M+2);
Тогда биллборды будут правильно интерполироваться между собой.
Но есть небольшая тонкость, к примеру, эджи вообще крайних биллбордов должны заполняться цветами краевых пикселов этого же биллборда, а угловые пиксела на этих эджах — не у гловыми краевыми пикселами этого билборда, а угловыми краевымм пикселами смежных с ним.

      <Freespace>

Billboard1    Billboard2
---------+    +---------
1231231 3|<-->|1 3453453  <- программный CLAMP EDGE или просто едж/бордер
-------+ |    | +-------
1231231|3|<-->|1|3453453  <- краевые пикселы, полезная область текстуры

Числами показаны цвета пикселов.

Но вот если ещё будет включён MIPMAP, то начнутся проблемы, т.к. нет способа устанавливать разные кроп координаты для разных уровней мипмапа.
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re[4]: тайлинг биллбордов
От: IPv6 Казахстан  
Дата: 10.10.06 11:49
Оценка:
Здравствуйте, Vain, Вы писали:

V>Здравствуйте, IPv6, Вы писали:


Спасибо! Принцип понял. дейтсвительно оно!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.