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

Frustum intance grass. Рисовать в области видимости камеры.

Страницы: 1 2 Следующая »
#0
(Правка: 22:36) 6:57, 5 мая 2021

Суть такова.
Я не хочу делать массив (например 4000 участков травы) и проверять каждый на CPU Frustum Culling PosXYZ , типа он виден на экране или нет.
Не делать текстур\масок для instance травы и не делать отсечение для большого числа объектов.
Не делать инверсий матрицы камеры.
Не надо ни каких массивов XYZ координат травы.
Не делать построение деревьев (когда объекты в уровне разбиты на группы, и каждая группа в своей небольшой локации 3д уровня)

3Д камера от первого лица. Как в шутере.

А хочу определять по позиции 3д камеры и вектору взгляда 3д координаты где рисовать instance траву. Так за 1 раз и быстро мы узнаем координаты травы где её видит игрок на экране и где она будет рисоваться.

Вот только как это правильно сделать ?

Я думаю тут вообще можно проще сделать, у камеры можно по углу поворота определять куда она смотрит. И в это место рисовать intance grass.

Например вокруг камеры нарисовать 8 боксов и зная 3д координаты каждого бокса , я буду знать куда  смотрит камера.
И связать это с углом поворота камеры. И вот таким экспериментом подогнать\определить 3д координаты под угол поворота камеры.


#1
7:49, 5 мая 2021

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

если кратко,
12:12
можно использовать маску на шейдере, которую поворачивать в зависимости от угла камеры.

В общем то всё видео по вашей теме и там описано как и что они делают.

#2
(Правка: 9:04) 8:13, 5 мая 2021

Это типо сделать "мнимую" карту с объектами и проверять их на дальность? Я не понимаю английского. Но я понимаю, что как ни старайся, в любом случае каждый объект проверять надо. Но есть достаточно много способов просто обойти все просчёты.

Делаем объекты "примитивами": куб, эллипс, пирамида, шар и прочее и проверяем столкновения - трассировку лучей.
Если попали в объект записываем его и записываем дальность до него. И так пока не кончатся объекты. Выбираем ближний и уже более конкретно вычисляем, точно попали или нет. И так пока точно не попадём или не закончатся объекты в которые попали.

На первой стадии отсеется основная масса объектов.

Зачастую, проще отдать всё видеокарте, там уже всё за тебя сделано. )))

#3
(Правка: 8:28) 8:18, 5 мая 2021

Salamandr это не то.
Это для художников и level дизайнеров. И как они с помощью текстур определяют где что рисовать по маске.

У меня все гораздо проще.
Тупо получить 3д координаты мира XYZ(в которые сейчас смотрит 3д камера). И в них рисовать траву.
Все просто. И без всяких дополнительных текстур\масок и лишних действий в шейдере.

#4
(Правка: 8:32) 8:31, 5 мая 2021

Если всё что есть в игре представить в виде одной картинки (или в некотором секторе нахождения игрока, тут уж от желания зависит)
обратите внимание на слово Placement Trees
Изображение
то тогда мы добавив нашу маску, получим новую картинку (из старой) которая сама отсечёт то, что нам не надо отображать.
слева маска, справа результат.
cam_mask | Frustum intance grass. Рисовать в области видимости камеры.

Картинкой ли будут объекты или массивом данных - значения не имеет.

#5
(Правка: 8:37) 8:33, 5 мая 2021

Salamandr то что ты показываешь, взято для Юнити или Унриала.
А там уже скрыто делается этими движками отсечение.
То есть художник и левел дизайнер об этом не заботятся, все скрытно и автоматом делается на CPU  или GPU.

А текстуры\маски это как раз тот инструмент , который позволит художнику и левел дизайнеру определить что и где будет рисоваться в 3д уровне. Где трава , а где деревья.
Это не совсем то, чего хочу я.

Я свой движок делаю на Directx 12. Потому мне надо это писать и самому проектировать алгоритмы действия моего движка.

#6
(Правка: 8:40) 8:38, 5 мая 2021

ronniko
> то что ты показываешь
сделано ребятами в своё собственном движке. Игра была для PS only.
и лишь с недавних пор они выпустили PC версию, которую специально делали на UE.
к слову, разница в 5-6 лет. в 2015 я получил эту игру вместе с покупной приставкой.

#7
(Правка: 8:42) 8:39, 5 мая 2021

Например я тоже использую текстуры\маски что бы быстро в 2д редакторе раставить деревья и камни в 3д уровне.
Что бы не сидеть и руками не расставлять каждое дерево в 3д уровне. Что может занять несколько часов или пол дня.

Но в этой теме я говорю не про это.
А про другое. Как написано в нуль посте.

к слову, разница в 5-6 лет. в 2015 я получил эту игру вместе с покупной приставкой.

Это все очень замечательно :)
Но не для этой темы.

#8
(Правка: 8:44) 8:41, 5 мая 2021

я помню что у тебя свой движок, пытаюсь просто заставить тебя смотреть на задачу шире. И как мне кажется - проще. Их решение более простое, чем твоё.
Надеюсь просто что однажды ты вспомнишь о нём ;)
Только из благих побуждений, можешь не обращать внимание)

#9
(Правка: 9:55) 8:44, 5 мая 2021
И как мне кажется - проще. Их решение более простое, чем твоё.

Нет. Оно проще по пониманию и эта простота обманчива.
Что бы такое сделать надо делать и отсечение 3д объектов тоже.

Я же не делаю текстур\масок для instance травы и не делаю отсечение для большого числа объектов.
Не делаю инверсий матрицы камеры.
Не надо ни каких массивов XYZ координат травы.
Не делаю построение деревьев (когда объекты в уровне разбиты на группы, и каждая группа в своей небольшой локации 3д уровня)

Тупо пару сложений и получаем XYZ в 3д мире(XYZ я передаю в шейдер для травы).
Просто по углу поворота камеры. А эти данные есть. Всего 3 float числа.
То есть математика на уровне 2+2 и в пару асм команд.

Куда уж проще то ?

Вот он мой профит. И это как раз отлично для 3д камеры от первого лица, для шутера.
А то надо много травы рисовать , что бы красивее было.

+ Показать
#10
9:48, 5 мая 2021

ronniko
> Тупо пару сложений и получаем XYZ в 3д мире(XYZ я передаю в шейдер для травы).
> Просто по углу поворота камеры. А эти данные есть. Всего 3 float числа.
> То есть математика на уровне 2+2 и в пару асм команд.
Если 2+2 и пара асм команд, то зачем ты спрашиваешь? Сделай 2+2 да пару асм команд и все. А всякие лохи пусть используют построение по фрустуму и сплаткартам, раз не могут понять XYZ и 2+2.

#11
(Правка: 9:58) 9:51, 5 мая 2021
XYZ и 2+2.

Как тонко. 

то зачем ты спрашиваешь?

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

#12
10:00, 5 мая 2021

Ты спрашивал цитирую
> Вот только как это правильно сделать ?
В Хорайзоне сделано правильно. Потому что работает. Работает быстро и красиво. И сделано гораздо умнее. Процедурная отрисовка на основе сплаткарты, а не по XYZ и 2+2.
А твой xyz и 2+2 ничего не знает об уровне. Хотя ты конечно можешь взять свой xyz и начать рейкастить уровень, чтобы разместить траву. Вперед и с песней. Никого не слушай, ты все делаешь правильно.

#13
(Правка: 10:06) 10:05, 5 мая 2021
А твой xyz и 2+2 ничего не знает об уровне. Хотя ты конечно можешь взять свой xyz и начать рейкастить уровень, чтобы разместить траву. Вперед и с песней.

Там принцип softparticles определяет где траву рисовать по Depth.

Трава рисуется там где нет объектов (типа дерево, здание , забор, большие камни)

#14
10:06, 5 мая 2021

ronniko
> Там принцип softparticles определяет где траву рисовать по Depth.
Удачи в размещении травы на горизонтально расположенной пушке.

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