Как да си направим Манделбул

Mandelbulb е триизмерен фрактал, който става все по-популярен в 3D изкуство и VFX. В тази статия ще разгледам как бързо да направите Манделбул Худини , използвайки SDF (подписан обем на полето за разстояние).

Във всеки воксел SDF съхранява разстоянието до най-близката точка на повърхността. Худини може да интерпретира тези разстояния и да визуализира получената повърхност като 3D геометрия. Това е много удобно, тъй като повечето фрактални формули приемат формата на „функция за оценка на разстоянието“ - като се има предвид точка в пространството, функцията връща разстоянието до най-близката точка на фракталната имплицитна повърхност. Това означава, че можете да поставите резултатите от фракталната функция директно във всеки воксел и той просто ще работи!



01. Създайте празен том

Създайте празна лента с инструменти за обем



Щракнете върху иконата в горния десен ъгъл, за да увеличите изображението

Първо, създайте празен том (Volume SOP), който да запълните със стойности на разстоянието - дайте му името „повърхност“. Добър фрактал за тестване е Mandelbulb и по подразбиране е широк около 2,5 единици, така че задайте размера на силата на звука на 2,5, 2,5, 2,5. Можете да промените разделителната способност на силата на звука, за да компенсирате скоростта спрямо качеството; добра отправна точка би могло да бъде задаването на Uniform Sampling на By Size, с размер на разделението 0,01. Режимът по подразбиране за визуализиране на обем в Houdini е обем за мъгла, но можете да го промените, за да се покаже като твърда гранична повърхност, като промените режима на показване на Isosurface (в раздела Properties).

02. Добавете код

Добавете лента с инструменти за код



Щракнете върху иконата в горния десен ъгъл, за да увеличите изображението

Тогава става въпрос за запълване на вокселите със стойности на разстоянието. Използвайте този VEX код в SOP на спор за обем, за да стартирате формулата на Mandelbulb за воксел:

vector p = v@P; float dr = 1; float r = 0.0; float power = chf(“power”); for (int i = 0; i 1.5) break; // convert to polar coordinates float theta = acos(p.z/r); float phi = atan(p.y, p.x); dr = pow( r, power-1.0)*power*dr + 1.0; // scale and rotate the point float zr = pow(r, power); theta *= power; phi *= power; // convert back to cartesian coordinates p = zr*set(sin(theta)*cos(phi), sin(phi)*sin(theta), cos(theta)); p += v@P; } f@surface = 0.5*log(r)*r/dr;

03. Въведете препратки към параметри

3D фрактал

Щракнете върху иконата в горния десен ъгъл, за да увеличите изображението

Houdini ви позволява да добавяте свои собствени резервни параметри към потребителския интерфейс на отделен възел. Нашият VEX код съдържа препратки към параметри ( chf () функции), за да ни позволи да контролираме аспекти на формулата с параметри в потребителския интерфейс. Тези параметри няма да съществуват по подразбиране, но можете да ги създадете, като натиснете бутона Създаване на резервни параметри вдясно на прозореца на кода.



В този случай параметърът Iterations ще контролира нивото на детайлност на Mandelbulb - започнете с 5 или 6. Мощността ще контролира формата на Mandelbulb - типичната форма се появява около Power 8.0.

04. Преобразуване в полигони

конвертиране в полигони

Щракнете върху иконата в горния десен ъгъл, за да увеличите изображението

За да преобразувате повърхността в многоъгълници, следвайте пререканието на тома с преобразуване на SOP за обем. Използвайте режим Invert, защото той се интерпретира като подписано поле за разстояние и ще получите подробна фрактална форма, заплетена във форма на многоъгълник. На практика режимът Invert обръща нормалите на повърхността и посоката на навиване на полигоните.

05. Направете вашата Mandelbulb

рендериране на мандебул

Щракнете върху иконата в горния десен ъгъл, за да увеличите изображението

След това можете да го направите по същия начин, както бихте направили всяка друга мрежа, но тъй като е толкова подробно, няма да можете лесно да го разгънете с UV - помислете за използването на процедурни техники, за да го извадите на повърхността, например, засенчване въз основа на неговата кривина.

Тази статия първоначално е публикувана в 3D свят , най-продаваното списание в света за художници на CG. Купува брой 237 или Абонирай се .

Прочетете още: