Render.ru

Есть ли какой-нибудь Script для 3dmax что бы создавать фрактальные формы?

SAS_RUS

Активный участник
Рейтинг
5
#1
Как в 3Dmax можно создать фрактальную фигуру? Можно ли написать какой нить script для этого что бы например тыкнул на фигуру и по ней создалась фрактальная структура?
 

SAS_RUS

Активный участник
Рейтинг
5
#3
хоть какой нибудь алгоритм фрактала, например пирамида, состоящая из таких же пирамид при чем эти пирамиды выстраивают более большую пирамиду и в таком духе... но что бы это был скрипт который будет создавать такой фрактал из любой фигуры.
Например Script: который на отслеживает грани фигуры и на них наслаивает уменьшенные копии этой фигуры и таким образом получается некий фрактал.
 

maiden666

Мастер
Рейтинг
112
#4
И после 10-й итерации система у тебя зависнет
в книге "Deconstructing the elements with 3ds max" есть урок по созданию изморози на стекле, это тоже фрактал, причём без всяких формул, а как в природе, берётся PFlow, частицы случайным образом сталкиваются, размсножаются и происходит процесс кристаллизации, если у тебя суперкомпьютер, можешь повторить
 

maiden666

Мастер
Рейтинг
112
#6
пфе, алгоритм там очень простой, я делал программку на паскале(для 2д-фракталов, конечно) а подгонять его под конкретные нужды - типа строить пирамидки, никто не станет, надо учить скрипты, наверное, и самому...
 

Savin Denis

Модератор форума
Команда форума
Рейтинг
138
#7
Набросал скрипт для простейшего случая - размножает объекты по вершинам с заданной глубиной рекурсии.
Дальше сами поиграйтесь с настройками а алгоритмами.

Код:
fn getVNormal obj vnum =
(
	local vertFaces = polyOp.getFacesUsingVert obj (#{vnum})
	local tNormal = [0,0,0]
	for i in vertFaces do tNormal += polyOp.getFaceNormal obj i
	return (tNormal / vertFaces.numberSet)
)
fn objFractal obj scaleFactor isOrient depth =
(
	if depth < 1 do return true
	local num = polyop.getNumVerts obj
	for i = 1 to num do
	(	
		local obj2 = copy obj
		local pos = in coordsys world polyop.getVert obj i
		local normal = if isOrient == true then getVNormal obj i else [0,0,1]
		obj2.wirecolor	= obj.wirecolor
		obj2.scale = 	obj.scale * scaleFactor	
		obj2.pos = pos
		obj2.dir = normal	
		objFractal obj2 scaleFactor isOrient (depth - 1)
	)
)

obj = $
depth = 4
scaleFactor = .5
isOrient = false
obj = convertToPoly obj
objFractal obj scaleFactor isOrient depth
 
Сверху