< HomePage
!!! Понеже знам, че много от вас попадат тук търсейки за съвет свързан с хард- и софтуер вижте Компютърни Хитринки за именно тези постове в блога !!!
<- Предишен запис (2007-10-31) | Дневника | Следващ запис (2007-11-02) ->

Архив

Четвъртък, 1 Ноември 2007

Винаги съм се чудил как се правят добри 3D ефкти на огън. В 2D е лесно - има си простата формула - "температурата на пиксела е функция на тези около него от предишния фрейм и просто е въпрос на избор кои ще изберем и как ще ги комбинираме за да се получи сносен макар и неестествен пламък. Естествено може да се ползва и наслагане на анимации на реален пламък и при добър подбор пак ефекта е супер за сметка на малко повече памет. Нещата обаче стоят доста по-различно при третото измерение, защото пламъка може да бъде наблюдаван не само директно отстрани, ами и отгоре и отвътре дори. Това създава проблема, че пламъка не се разпространява в равнина а във пространството. Днес преди лягане се зачетох в книгата GPU Gems на NVidia Press, в която са представени много алгоритми за реалистичен рендеринг, предвидени главно за изпълнение на GPU-то на съвременни карти. МИсля да разкажа тук на български накратко, какво научих за генерирането на качествена анимация на 3D пламък от една глава в тази книга, и по ози начин и за себе си да си систематизирам нещата, че кой знае кога ще намеря време да ги пробвам.

Естествено най-добрия начин да се генерира реалистичен пламък е да се създаде триизмерна процедурна тектура на пламък, следвайки законите за движение на флуидите и термодинамиката добре познати ни (е добре де "ви") от физиката. Това би трябвало да не е супер трудно, но дори и да се преборите с тоновете диференциални уравениня накрая ще имате красив пламък които рендерва с 0,0001 фреима в час. По-добре да направим пламъка толкова жив, че никой, дори и най-заклетия ядрен физик да не ни мъмри за тотално нереалното му поведение. Затова хората предлагат да се ползват praticles които да са двуизмерни текстури на пламък, предварително анимирани и то за различни ракурси. Те ползват две анимации - една отстрани и една отгоре но и техни смесвания. За целта са създали една обемна текстура, която да съдържа двете анимации като слайсове от z измерението и една анимация за дим процедурно генерирана. Така могат да въртят анимацията като просто сменят едната координата на текстурата. За да стане цялото по бързо пламъците се рендерирата в по ниска резолюция от тази на цялата картина и се блендват после със помощта, на Z-Buffer-а и алфа канала на текстурата с пламъците. За да се наслагват добре пламъците, хората препоръчват да се ползват истински текстури с алфа канал, а не просто с OR да се наслагват текстурите защото ставал много изкуствен пламъка. Освен това за да се държи естествено при движение на неговия източник, пламъка трябва да се се мести след него, но и до някъде да остава да изтлее на старите места, за да не се претоварва машината с прекалено много частици (е добре де как да преведа particles), са приложили следния трик - всяка частица има като параметър привързаността си към източника на пламъка, ако е силно привързана то пламъка се тътри след източника, ако е слабо остава където е - тоест със времето частиците остават да си висят във въздуха докато не изфирясат. Това е доста реалистично, защото вихрите които би създал движещ се във въздух обект създават подобен ефект и в действителност.

И това е май цялата философия представена супер на кратко, че и да не ме омъмрят за нарушаване на аторските права - приевете го за нещо като преглед на главата. Иначе като цяло GPU Gems е жестока поредица, а преди дни излезе и третата част, нямам търпение да ми попадне в ръчичките и вече е поръчана на работа.

[ Добави коментар ]
Valid XHTML 1.0! Valid CSS!