|
3D-программирование Вопросы, касающиеся программирования 3D мира |
17.01.2012, 22:30
|
#16
|
Разработчик
Регистрация: 12.10.2008
Адрес: Самара
Сообщений: 437
Написано 55 полезных сообщений (для 92 пользователей)
|
Ответ: Как сделать правильнее
буду изучать говнорисование в текстуру
__________________
Пекарня: Intel Core i3 - 3240(3.40Ghz), ram 8 gb, video Gigabyte Nvidia GeForce GTX 650 1gb
Лэптоп : Intel Core i3 - 2365(1.40Ghz), ram 4gb, video Int Intel HD3000(512mb)
Мой набор: 3ds Max 9 + Xors3d(Blitz3d) + Photoshop
|
(Offline)
|
|
17.01.2012, 23:08
|
#17
|
Терабайт исходников
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений (для 6,051 пользователей)
|
Ответ: Как сделать правильнее
да это вообще беспонтовый способ, т.к. текстур не напасёшься на весь уровень.
я делал декали аля хл2, остался код на ксорсе/с++, но он слишком уж говнокод, так что смысла постить его особо нет, в теории работало так:
- мы выстрелили в объект, у нас есть позиция появления декали и нормаль поверхности в этом месте/альтернативно это может быть нормаль полёта пули.
- представляем 4 бесконечных плоскости, равноудалённые от позиции дырки и образующие квадрат размером с декаль, если смотреть в направлении нормали. т.е. по сути это квадрат в пространстве нормали, но вытянутый в глубину бесконечно.
- находим все треугольника объекта, попадающие внутрь этих плоскостей, по дистанции и разнице нормалей ещё можно отсеять повернутые обратной стороной трианглы или слишком далёкие от точки попадания.
- обрезаем найденные трианглы нашими 4мя плоскостями и отодвигаем их чуть-чуть в направлении их нормалей (чтобы избежать z-fighting)
- в пространстве нормали считаем планарные UV на трианглы (там тупо U=X, V=Y + нормализация)
- рисуем полученный меш
- можно объединять все декали одного типа на одном объекте в один меш
- можно не обрезать трианглы и не считать UV, а получать UV в пиксельном шейдере + юзать режим аддресации BORDER, но это потенциально ведёт к overdraw + не особо позволяет сфигачить кучу декалей в 1 меш.
- можно юзать deferred decals (?? не пробовал)
- вышенаписанная фигня про треугольники можнт звучать МЕДЛЕННО, но на практике работало, и я не замечал снижения фпс ваще.
|
(Offline)
|
|
Эти 4 пользователя(ей) сказали Спасибо Mr_F_ за это полезное сообщение:
|
|
19.01.2012, 09:09
|
#18
|
Разработчик
Регистрация: 12.10.2008
Адрес: Самара
Сообщений: 437
Написано 55 полезных сообщений (для 92 пользователей)
|
Ответ: Как сделать правильнее
дабы не постить 100500 тем, спрошу сдесь же - как можно увеличить громкость 3dsound в блице? а то сделал 3д звук, а он какой то тихи даже вблизи... не я конечно знаю о команде но все равно тихо, что посоветуете?
__________________
Пекарня: Intel Core i3 - 3240(3.40Ghz), ram 8 gb, video Gigabyte Nvidia GeForce GTX 650 1gb
Лэптоп : Intel Core i3 - 2365(1.40Ghz), ram 4gb, video Int Intel HD3000(512mb)
Мой набор: 3ds Max 9 + Xors3d(Blitz3d) + Photoshop
|
(Offline)
|
|
19.01.2012, 12:03
|
#19
|
Нуждающийся
Регистрация: 05.10.2011
Адрес: Россия, Южно-Сахалинск
Сообщений: 66
Написано 42 полезных сообщений (для 83 пользователей)
|
Ответ: Как сделать правильнее
интересная тема
Mr_F_ +1
метод с рендером в текстуру может подойти только для специфичных случаем
ибо кроме проблем с уникальными текстурами для декалей (и их большими разрешениями), еще не забывайте что в блице всего два набора текстурных координат, и если первый для [цвета,спекуляра,нормали], а второй например для лайтмапы, то для декалей не остается
юзать первый набор - не факт что развертка равномерная, декали могут деформироваться, как впрочем и для развертки лайтмапы.
слышал про вариант с использованием стенсил-буфера для "обрезки" висячих частей, но думаю это тоже геморно (еще и потому что надо будет очередной DLL-костыль писать)
кстати по поводу способа с копированием и обрезкой геометрии, там тоже проблем полно, например
есть два пересекающихся бокса (два этажа например, соответственно горизонтальный бокс - пол, вертикальный - стена)
зеленым цветом - точка пика и бокс декаля для обрезки
черным цветом - выбраные для обрезки треугольники
после обрезки
синим цветом - нужные треугольники
красным цветом - ненужные треугольники
мне в голову приходит только один вариант - сначала обрезать выбраные треугольники плоскостями других выбраных, а потом уже резать боксом
если есть какие-нибудь другие идеи, буду рад их выслушать
ЗЫ
представляем 4 бесконечных плоскости, равноудалённые от позиции дырки и образующие квадрат
|
кстати по рисунку также можно понять почему резать лучше боксом, а не квадратом
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
19.01.2012, 14:15
|
#20
|
Чудо-кот
Регистрация: 22.02.2011
Сообщений: 901
Написано 480 полезных сообщений (для 1,471 пользователей)
|
Ответ: Как сделать правильнее
Сообщение от Colossus
как можно увеличить громкость 3dsound в блице? а то сделал 3д звук, а он какой то тихи даже вблизи... не я конечно знаю о команде но все равно тихо, что посоветуете?
|
1. - изменить сам файл.
2. - поиграться с параметрами CreateListener
|
(Offline)
|
|
19.01.2012, 14:30
|
#21
|
Терабайт исходников
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений (для 6,051 пользователей)
|
Ответ: Как сделать правильнее
кстати по рисунку также можно понять почему резать лучше боксом, а не квадратом
|
ээ я не очень понял. у тебя картинка вроде сбоку? т.е. декаль как бы там проецируется сверху слева вниз вправо? короче оно бы и квадратом так же обрезалось бы.
а насчёт обозначенной на картинке проблемы - да, не подумал о таком.
интересно найти решение.
в голову приходит только безумный вариант - т.к. проблема аналогична проблеме освещения при отсутствии теней, можно в крохотном разрешении (типа 32х32) растеризовать все отобранные треугольники с позиции прожектора декали, рисуя в 2д массив глубину (как при software occlusion culling) и потом сравнить все трианглы с записанной глубиной, узнав, есть ли перекрытие (отсеяв то, что у тебя на картинке красное).
но это чёто уже черезчур тормозно звучит)
|
(Offline)
|
|
19.01.2012, 16:15
|
#22
|
Нуждающийся
Регистрация: 05.10.2011
Адрес: Россия, Южно-Сахалинск
Сообщений: 66
Написано 42 полезных сообщений (для 83 пользователей)
|
Ответ: Как сделать правильнее
Сообщение от Mr_F_
ээ я не очень понял. у тебя картинка вроде сбоку?
|
Ага, сбоку
Сообщение от Mr_F_
т.е. декаль как бы там проецируется сверху слева вниз вправо?
|
Вообще только сверху (пикнули в зеленой точке и проекция по нормали пола), но т.к. декаль заходит частично на стену, то и на нее нужно тоже.
Сообщение от Mr_F_
короче оно бы и квадратом так же обрезалось бы.
|
Не, тогда бы по вертикали скопировалась вся стена (плоскости же бесконечны по нормали), вот примерно как на картинке, в 3д лучше будет видно
так же как и на предыдущей картинке точка пика, 4 плоскости квадрата в пространстве нормали и получаемые вертексы
а если боксом, то стена и по вертикали обрежется как раз по размеру декаля
Хотя может лучше тогда брать плоскости по вектору пика? Но опять таки если пикнем сверху получим такую же картину
Сообщение от Mr_F_
в голову приходит только безумный вариант - т.к. проблема аналогична проблеме освещения при отсутствии теней, можно в крохотном разрешении (типа 32х32) растеризовать все отобранные треугольники с позиции прожектора декали, рисуя в 2д массив глубину (как при software occlusion culling) и потом сравнить все трианглы с записанной глубиной, узнав, есть ли перекрытие (отсеяв то, что у тебя на картинке красное).
но это чёто уже черезчур тормозно звучит)
|
Ну тогда уж volume декали юзать кажись у Хумуса эту технику видел. Только вот к блицу это не применимо к сожалению, надо как-то по другому извращаться
ЗЫ
Точно у хумуса, третья снизу
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
19.01.2012, 20:13
|
#23
|
Терабайт исходников
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений (для 6,051 пользователей)
|
Ответ: Как сделать правильнее
гляжу, в UE тоже боксом:
http://udn.epicgames.com/Three/UsingDecals.html
думаю дальше по поводу проблемы с декалированием левых мест. что если
- определяем все точки пересечения меша с боксом
- если у нас есть точки с одинаковым XY но разной глубиной в пространстве прожектора - оставляем только самые ближние. это должно выкинуть точки пересечения с низом вертикальной стены и даже низом горизонтальной (не требуется проверка по нормали)
- находим треугольники, которым принадлежат оставшиеся точки пересечения
- обрезаем, делаем UV итд
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 17:25.
|