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

Идея быстрой и грязной повершинной AO для моделей

#0
(Правка: 17:58) 17:53, 31 окт. 2018

..короче, думал я, гадал, как обойтись задёшево на directx9 железе, получить что-то-типа-вроде-похоже-на-AO-если-зажмуриться. То есть, без дорогостоящих проходов типа ssao, чтоб, значит, на говне мамонта летало. И вот, что надумалось:

В данном конкретном случае, берём модель, предполагая, что она уже оптимально тесселирована в нужных местах.
- трактуем меш, как резиновую плёнку, где вершины притягивает друг к другу (и тем сильнее, чем больше площадь треугольника). И при этом каждая вершина притягивается резиночкой к вершине исходного меша.
- выполняем суммирование сил, сдвигаем вершины (безынерционно), повторяем два-три прохода.
- получаем поверхность, втянувшуюся внутрь выпуклостей и натянувшуюся, как старые рейтузы в промежности, на впуклостях.
- вычисляем для каждой вершины косинус угла между вектором отклонения и вектором нормали. Для положительных выставляем ненулевой параметр самозатенения, пропорциональный оттягу поверхности
- PROFIT!

Имеем для модели что-то вроде AO - не учитывающего самозатенение за счёт, например, руки, прижатой к боку, но ппц какого дешёвого.

Что думаете?
Мне зудит проверить, но движок пока не готов, там всё вздрючено и в переработке.

Потом возьму свою старую md2 манкубуса, окучу подобным образом и покажу, что получится. Но это - потом. А идея чешется уже сейчас.

З.Ы. Можно и *с* самозатенением от других частей тела и даже соседних объектов, если:
- последние аппроксимированы наборами сфер и плоскостями, обладающими силой притяжения, оттягивающими вершины резинового меша на себя.
Но насколько дорого это будет?


#1
18:32, 31 окт. 2018

Не знаю на счет резиновых мешей на dx9 но я сделал повертексный АО на CPU , результат рвет в клочья любое скринспейс гавно.

http://polyflow3d.tr.dn.ua/WebGL/Towers/

Если кто то готов переложить этот алгоритм на GPU - могу рассказать как надо делать правильно. В первую очередь меня интересует люди которые уже имееют наработки по трассировке, но их не устраивает производительность. 

#2
18:58, 31 окт. 2018

[восхищённое повизгивание]

..и летает на моём древнебуке с intel HD 3000...

#3
19:00, 31 окт. 2018

Это запеченное АО, забыл уточнить. Но это кстати один из ключиков к быстрому рейтрейсу ( у кого мозг есть)

#4
19:35, 31 окт. 2018

>Это запеченное АО
Не особо важно, я собираюсь использовать формат, похожий на md2, с запечёными базовыми анимациями - включающими повершинное AO для каждого кадра. Всё загнанное в текстуру для межкадровой интерполяции в вершинном шейдере.
И только для ближних/важных анимировать честно в рилтайме.

>один из ключиков к быстрому рейтрейсу
Ээээ...

#5
20:37, 31 окт. 2018

Cheb

Ээээ...

ну многие пытаются отреалтаймить всю статику, а потом громко  жалуются .
И только для ближних/важных анимировать честно в рилтайме.

ну вот у тебя значит мозг есть.
#6
10:20, 4 ноя. 2018

Cheb
> как обойтись задёшево на directx9 железе
его еще где-то делают?
Или просто мечта такая ?

#7
17:31, 4 ноя. 2018

Cheb
Какая-то глупость. Что мешает по нормальному запечь повертексный AO, что захотелось городить такие, мягко говоря костыли?

#8
21:31, 4 ноя. 2018

>Что мешает по нормальному запечь повертексный AO,
Во первых, запекание будет происходить во время первой загрузки (с кешированием на будущее), не хотелось бы тянуть кота за яйца.
В идеале, модель хранится в формате "скелет + физический скиннинг" для уменьшения размера дистрибутива. Физический скиннинг дорогой, поэтому 95% объектов используют усечённый набор предзапечённых анимаций (как в md2, только 16 бит на координату) запнутых в память gpu и беромых оттуда вершинным шейдером.

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

В третьих, минимальные системные требования при этом: Raspberry Pi 2 или WinXP/Core 2 Duo 2GHz/Ge Force 700 series/512Mb RAM - и на этом должно порхать на 60 кадрах в секунду

>его еще где-то делают?
>Или просто мечта такая ?
У меня то-ли два, то ли три гроба такого класса (точно скажу когда проверю, сколько из них дохлые).
Я хочу доказать, что для настоящей крутизны достаточно GL 2.1/GLES2 (в просторечии называется железом DirectX 9 класса), а всё, что свыше - тлен и суета.

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