Войти
UnityФорумПрограммирование

Unity3D: возможно ли менять запеченную текстуру теней в Runtime? (8 стр)

Страницы: 13 4 5 6 7 8
#105
21:40, 30 июня 2020

foxes
> Особенно на примере с kd-tree, он таки быстро работает в динамике.

Разбирался с ним, оно же вроде как работает с точками, а не с boundingBox-ами?
Или можно представить вершины AABB в виде точек и делать 4 проверки?

Я нагуглил BVH (bounding volume hierarchy). Не подскажете, он лучше будет для поиска пересечения  triangle3D и AABB???
Ну или можно triangle3D представить в виде triangleAABB и искать пересечения AABB с AABB.


#106
(Правка: 22:42) 22:10, 30 июня 2020

Alerr
> Или можно представить вершины AABB в виде точек и делать 4 проверки?
Там пространство делиться пространство чередованием по горизонтали/вертикали (можно сделать дополнительную ветку для AABB которые по центру линии), в данной реализации по точкам, а в твоей по боксам, без "в виде точек и делать 4 проверки". Просто разберись в алгоритме. Его можно сравнить с нерегулярной сеткой quad/octo-tree. Но как уже говорилось он слабо эффективен. Используй его как пример для твиков своего алгоритма.

#107
(Правка: 14:41) 13:53, 4 июля 2020

Ребят, в общем давно столкнулся, сейчас пытаюсь понять как исправить этот косяк.
У меня ест меши из блендера и над их UV2 (в шейдере это uv1) делаю такое:

commandBuffer.DrawRenderer ( m_Renderers[i], worldPosMaterial, submeshIndex );
И этот код записвает worldPos обьектов в текстуру. Разноцветные контуры получаются.

Есть вот эта штука, которая группирует меши и выдает итоговый меш:

mesh_.CombineMeshes()
После нее я генерирую uv2 для нового меша так:
Unwrapping.GenerateSecondaryUVSet ( mesh_ )
Потом я присваиваю этот меш модели + это меш сохраняю его в файлах проекта.

И проблема в том, что commandBuffer.DrawRenderer не выдает ничего в текстуру от такого меша.
Что только я не делал и настройки Unwrapping менял так:

UnwrapParam param = new UnwrapParam ();
        param.packMargin = 0.1f;
        param.angleError = 0.01f;
        param.areaError = 0.01f;
        param.hardAngle = 45f;
Unwrapping.GenerateSecondaryUVSet ( mesh, param );
Ничего не помогает.

Потом я создал дубликат-меш, делал над ним Unwrapping.GenerateSecondaryUVSet и присвоил его uv2 нужному мне мешу.
Заметил, что как только я меняю uv2 меша, так сразу же commandBuffer.DrawRenderer перестает рендерить мой меш. Не знаю почему. Идеи?
Никто не знает как commandBuffer.DrawRenderer работает внутри?

Update:
Скорее всего здесь проблема в модели. Что-то не так с uv2. Когда задал шейдеру в i2v вместо texcoord1, texcoord0, то в текстуру записалась информация. Но все равно непонятно что с uv2. C ней на вид все хорошо. Нет overlap и зазоры между полигонами большие сделал.

Вот так выглядит запеченная карта теней для процедурной модели:

+ Показать

Страницы: 13 4 5 6 7 8
UnityФорумПрограммирование