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

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

Страницы: 13 4 5 6 7 8 Следующая »
#90
(Правка: 16:29) 16:15, 26 июня 2020

kkolyan
> Какие такие гарантии по многопоточке дает Unity вне своих многопоточных утилит?
Несомненно Unity использует потоки, но гарантии такие что - unity не дает работать со своими объектами в отдельных потоках. В любом случае приходиться работать со "своими" (локальными) классами структурами и данными.
kkolyan
> почему вы постоянно говорите про инициализацию, игнорируя модификацию?
Инициализация подразумевает стартовые процессы необходимые для начала работы с данными. А модификация по задаче не предусматривается. Только промежуточные массивы, взамен которых можно взять потоко-безопасные готовые решения.
kkolyan
> Причем здесь режим ожидания? причем здесь режим выполнения?
У потоков на уроне OS в принципе нет других понятий. Все механики блокировок и синхронизаций реализованы через WaitObject и семафоры. Первое для того чтобы ожидающий поток/процесс не работал в холостую, второе обеспечивает саму работу мютексов и локов.


#91
(Правка: 16:29) 16:28, 26 июня 2020

foxes

+ Флейм
#92
(Правка: 16:37) 16:32, 26 июня 2020

kkolyan
> Модель памяти - она больше о взаимодействии с процессорами.
Вы говорите о работе потока или о памяти?
kkolyan
> никто в треде не говорил ничего противоречащее)
А это что:
kkolyan
> Да и подвижные объекты все-таки тоже есть, хотя и немного.
Как вы будете работать с этими данными если unity этого не позволит. Обращения к полям объектов, в потоке отличного от главного, приводят к исключениям.
kkolyan
> Конечно предвзятое. а у кого нет? я спорю с вами, чтобы лучше понять вопрос,
> "оттачивая об вас" свою несовершенную модель, полную мифов и суеверий.
Для этого люди создают отдельные темы.

#93
(Правка: 17:16) 16:54, 26 июня 2020

foxes

+ Флейм
#94
(Правка: 19:48) 19:06, 26 июня 2020

kkolyan
> эти данные в общее место, например в виде расшаренного между тредами octtree
> (собственно что и хотел изначально сделать Alerr).
Совсем не это. Меш ему нужен для конечного расчета пересечения модели с плоскостью. А до этого в octtree он обходился BoundBox.

kkolyan
> у программиста всегда есть шанс скопировать эти данные в общее место
Я уже это описал чуть ли не в первом сообщении, на которое вы начали писать свои возражения. И также это была строчка:
foxes
> readdata=CreateData();
Ну и главное это то - что текущая задача в рамках одного стоп кадра, а не фоновая работа во время анимации.

kkolyan
> Вы думаете с моей позиции это все выглядит как я пришел к вам за советом?
Вы пришли ко мне с возражением не понимая происходящего. Практически подтвердив то, что делаете это намеренно.

#95
(Правка: 20:27) 20:15, 26 июня 2020

foxes
> Совсем не это.
Какая разница. Alerr хотел зашарить стейт между потоками. А октриии там или нет - какая разница? Мой поинт был в том, что шарить стейт даже для чтения в этой задаче небезопасно. Этот поинт вы успешно оспорили.

> Я уже это описал чуть ли не в первом сообщении на которое вы начали писать свои
> возражения.
и я с вами позже согласился.

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

+ Показать

Давайте-ка на этом закончим.
#96
(Правка: 21:15) 21:13, 26 июня 2020

kkolyan
foxes
Мужики, имеет ли смысл как-то модифицировать Octree, чтобы динамические обьекты можно было находить?

Сейчас занялся динамическими обьектами. Ранее они у меня через самый простой Loop проверялись на пересечение с лучем. Теперь я запихнул их в отдельный Octree. Допустим в сцене 20 динамических обьектов всего. Имеет ли смысл искать их через Octree? Я попробовал перестраивать octree, что-то напряжно это для компа.

В сети нашел на гитхабе какой-то код. Вроде рабочий. Код позволяет Add / Remove из octree.
Потестил код: обновление Octree задал через Add / Remove и получил большой напряг для процессора.

#97
(Правка: 21:17) 21:17, 26 июня 2020

Alerr
как мне кажется - нет, не имеет. 20 проверок AABB в цикле - это копейки.

#98
(Правка: 1:59) 1:39, 27 июня 2020

Alerr
> обновление Octree задал через Add / Remove и получил большой напряг для
> процессора.
В любом случае я думаю стоит заняться оптимизацией дерева.
Для того же unity есть готовые решения которые стоит по изучать и найти твики.

https://forum.unity.com/threads/general-purpose-octree-implementation.245034/
https://forum.unity.com/threads/point-nearest-neighbour-search-class.29923/

Особенно на примере с kd-tree, он таки быстро работает в динамике.
https://gist.github.com/ditzel/194ec800053ce7083b73faa1be9101b0#file-kdtree-cs

Запустить видео по клику - Как делать игрыЗапустить видео по клику - Как делать игры

#99
(Правка: 22:20) 22:20, 29 июня 2020

foxes
Спасибо за информацию по kd-tree.


Ни у кого случайно нет рабочего кода проверки пересечения AABB и треугольника. Честно скажу, разобраться с проекциями не смог (метод проверки пересечения путем проецирования на оси), не понял как и куда проецируется. Хотя, в целом, в общем виде идею понял.
В сети есть примеры кода, разные, но все они иногда не работают. Вот я и не пойму почему. Например вот этот пример кода иногда не находит наличие пересечения:

+ Показать

Этот алгоритм в сети встречается достаточно часто, но кажется в нем есть ошибка

#100
(Правка: 23:15) 22:45, 29 июня 2020

Alerr
> Ни у кого случайно нет рабочего кода проверки пересечения AABB и треугольника
есть :)
https://github.com/jMonkeyEngine/jmonkeyengine/blob/master/jme3-c… ion.java#L137

А если пройдете по цепочке вызовов в это место, еще и BIH Tree обнаружите.

#101
(Правка: 23:56) 23:36, 29 июня 2020

Alerr
> Ни у кого случайно нет рабочего кода проверки пересечения AABB и треугольника.
Тебе же нужен не просто треугольник, а какой то угол?
Alerr
> не понял как и куда проецируется. Хотя, в целом, в общем виде идею понял.
Берешь обычную матрицу перспективной проекции. A,B - лучи, а - угол между ними.

_mProject = Mat4(
  tan(a), 0, 0, 0,   // возможно я тут тангенс с котангенсам перепутал, но это не проблема.
  0, 1, 0, 0,
  0, 0, 1, 0,
  0, 0, 1, 0);
И матрицу поворота "камеры".
tan(a) = Cross(normalize(A),normalize(B))/Dot(normalize(A),normalize(B));
y = normalize(Cross(A,B));
z = normalize(normalize(A)+normalize(B));
x = Cross(y,z);

Умножаешь эту матрицу на 8 вершин AABB. как (x,y,z,1)
Дальше тебе понадобиться только x,y,w результата.
Хоть одно значение "x" должно быть в диапазоне [-w..w], и хотя бы у одного "y" должны быть противоположные знаки или ноль.

Технически W здесь всегда равна Z, так что можно просто брать три координаты (x,y,z), умножить на матрицу поворота, а полученный X умножить на tan(a).

Итого 8x3 дополнительных Dot и 16 проверок.

#102
(Правка: 23:55) 23:53, 29 июня 2020

kkolyan
Спасибо!
Боюсь показаться наглецом, но можете пояснить некоторые детали ( код на непривычной для меня джаве :))

TempVars vars = TempVars.get ();// (1) главный вопрос: что это за инициализация?  что за TempVars?

Vector3 minMax = vars.vect7;// что значат вот такие конструкции? нули присваиваются?

foxes
Спасибо, попробую сперва один вариант, потом другой, если не прокатит.

#103
(Правка: 4:23) 0:55, 30 июня 2020

Alerr

Чтобы прочитать этот код, зная C#, нужно знать всего две вещи:

+ Показать

* * *
Хотя, там в месте вызова этой функции есть комментарий о том, что код портирован вот отсюда http://fileadmin.cs.lth.se/cs/Personal/Tomas_Akenine-Moller/code/tribox3.txt
Возможно, списывать с C будет удобнее.

#104
13:37, 30 июня 2020

kkolyan
foxes
Спасибо. В общем ошибка была в погрешностях на границах. Потому алгоритмы выдавали немного разные варианты наличия/отсутствия пересечения.

На данный момент у меня все статические(неподвижные) обьекты заносятся в octree. Потом octree строятся и для полигонов этих обьектов. В результате O(Log(n)) ощущается. Код более-менее "почищен".

Пока я еще так и не понял технологию, которую обьяснял }:+()___ [Smile]
Он рассказывал как отбрасывать обьекты, которые сзади. Подумаю над его идеями немного позже.

Сейчас KdTree пытаюсь прикрутить к проекту. Код где-то тут был, осталось его доработать и использовать.

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