Войти
ПрограммированиеФорумГрафика

Текстурирование сферы.

Страницы: 1 2 Следующая »
#0
21:24, 27 авг. 2019

Мне надо сгенерировать текстуру и отобразить ее на сфере в VR.  Текстура очень большая (8192х4096) и герерируется долго, потому я делаю ее кусками по 512х256 пикселей. Получается всего 16х16=256 кусков. Поскольку для меня важнее всего то, что расположено перед глазами, а задняя часть не столь критична, то сначала я генерирую фронтальную часть состоящую из 3х5=15 кусков, потом постепенно заполняю остальное. Но есть одно но. Если я смотрю на экватор - все отлично, эти 15 кусков покрывают практически всю видимую область. Но если смотреть на полюса, то там видны уже как минимум 48 сегментов, которые придется считать в 3 раза дольше, кроме того центральные 16 сегментов занимают площадь как 2 на экваторе, т.е налицо явный оверхед.
 
Вот картинка:
pic1 | Текстурирование сферы.

Отсюда вопрос - в существует ли в природе какой-либо продвинутый алгоритм текстурирования сферы? Дабы площадь сегментов была более-менее равномерно расположена по всей сфере а не концентрировалась на полюсах.


#1
21:31, 27 авг. 2019

san
> Отсюда вопрос - в существует ли в природе какой-либо продвинутый алгоритм
> текстурирования сферы?
Геосфера (Octahedron Sphere), но там проблем выше крыши.
http://i.stack.imgur.com/5MPgZ.jpg

еще такой вариант есть:
https://shiva-engine.com/knowledgebase/single-drawcall-skybox/

#2
21:35, 27 авг. 2019

прямоугольную текстуру ты изящно не натянешь

#3
21:39, 27 авг. 2019

Без существенных искажений(равномерные 15% по всей поверхности) текстуру на сферу можно натянуть если сферу делать из икосаэдра, а развертка будет из треугольников.
Изображение

Для текстуры Земли существует бесшовная(для суши) развертка Dymaxion/fuller map.

+ Показать

Больше информации здесь: http://vterrain.org/Textures/spherical.html

#4
21:42, 27 авг. 2019

ктстать, нельзя ли перед генерацией просто повернуть сферу экватором в камеру?

#5
22:04, 27 авг. 2019

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

Fantom09
> Геосфера (Octahedron Sphere), но там проблем выше крыши
Так у меня и так геосфера. Но это имеет отношение к вертексам а не к текстурным координатам.

Джек Аллигатор
> Без существенных искажений(равномерные 15% по всей поверхности) текстуру на сферу можно натянуть если сферу делать из икосаэдра, а развертка будет из треугольников.
Хм.. Не очень понимаю как это практически реализовать. Попробую разобраться что они предлагают.

#6
22:12, 27 авг. 2019

san
> Так у меня и так геосфера. Но это имеет отношение к вертексам а не к текстурным
> координатам.
Посмотри на картинки, ту что я приложил и ту что Джек Аллигатор.
Там сфера генерируется тесстеляцией икосаэдра, таким образом плотность расположения полигонов на такой сфере и их площадь постоянные. Но там возникает проблема с текстурированием, которая решается только для процедурного текстурирования, и для конкретного случая текстурирования земли (развертка Dymaxion/fuller map).

В твоем случае возможно практичнее будет юзать вариант с нормализованным кубом, там текстурирование идет по кубической карте, нелинейные искажения на краях можно компенсировать. В этом случае сетка так же будет примерно равномерной.
san
> Хм.. Не очень понимаю как это практически реализовать.
просто погугли:
geosphere mesh

#7
22:14, 27 авг. 2019

san
> Не очень понимаю как это практически реализовать.
1. взять икосаэдр, прописать ему текстурные координаты
2. тесселировать его до приемлемого уровня
3. текстурировать, опираясь на изначальную развертку икосаэдра

Получаем сферу, равномерно разбитую на треугольные сегменты.
Красным обозначил границы сегментов:
segments | Текстурирование сферы.

Fantom09
> Но там возникает проблема с текстурированием, которая решается только для
> процедурного текстурирования, и для конкретного случая текстурирования земли
> (развертка Dymaxion/fuller map).
Можно поподробнее?

#8
22:16, 27 авг. 2019

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

#9
22:21, 27 авг. 2019

Джек Аллигатор
> 1. взять икосаэдр, прописать ему текстурные координаты
> 2. тесселировать его до приемлемого уровня
> 3. текстурировать, опираясь на изначальную развертку икосаэдра

Ага. Понял. Надо попробовать. Что до "тесселировать его до приемлемого уровня" то я и так исходную геосферу тесселирую практически до размера пикселя, это нужно для позиционного варпинга, так что тут и делать ничего не надо :)

#10
22:36, 27 авг. 2019

Джек Аллигатор
> Можно поподробнее?
По построению Джек уже все расписал.
По проблемах - там проблема бесшовного текстурирования, выглядит это примерно так:
Изображение

Туда же:
https://i.stack.imgur.com/wA3pv.png
https://i.stack.imgur.com/gcAz8.png
https://answers.unity.com/storage/temp/64649-screen-shot-2016-02-… at-164041.png

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

Вот вроде есть скриптик для генерации текстур под икосаэдр:
https://www.alexisgiard.com/icosahedron-sphere/

#11
22:51, 27 авг. 2019

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

#12
13:59, 28 авг. 2019

san

https://en.m.wikipedia.org/wiki/Quadrilateralized_spherical_cube

#13
16:59, 28 авг. 2019

Ghost2
Пожалуй куб это то, что мне надо. Делаю куб со скажем 1024 полигонов на грань. Текстурирую его в компактную текстуру 3х2. Заполняю грани кусками, как я делал раньше. При выводе дополнительно тесселирую его и превращаю в сферу на которую ложится сгенерированная текстура. Если заполнять текстуру традиционным растровым методом, то вылезут искажения на гранях, но я формирую картинку в полярных координатах, так что по идее все должно лечь идеально. Вроде все просто, попробую.

#14
22:18, 28 авг. 2019

Кто бы мог подумать, что это сфера...

pic2 | Текстурирование сферы.

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

Страницы: 1 2 Следующая »
ПрограммированиеФорумГрафика

Тема в архиве.