Render.ru

Как сделать много дешевой травы?

3rr0r

Знаток
Рейтинг
71
#1
Поделитесь опытом, как засадить большое поле травой, и чтобы рендер занимал разумное время.
Пробовал шерстью (трава пресет) - получается красиво, рендерится очень долго, причем засадил для теста процентов 20 площади.
Пробовал пэинт эффектами. Сделал один густой сегмент (сконвертив в поли), сделал из него mip_binaryproxy, размножил где-то тоже процентов на 20. Рендерится раза в 3 быстрее, но тоже слишком долго. Для сравнения: без травы сцена рендерится 2 минуты, с травой - 20 минут. И это я максимально сцену упростил, спрятав большинство элементов.
В сцене использую sun&sky, поэтому включен final gather, а для воды еще и каустика. Понимаете, что всё это обходится довольно дорого.
Есть вариант отрендерить много-примного пэинтэффектной травы софтварным рендером и прилепить её потом на композе, но качество травы-то уже не то получится, хотя оставлю как запасной вариант.

Что скажете? Как это правильно делается в майе?
 

3rr0r

Знаток
Рейтинг
71
#2
Ах да. Поле покрыто короткой травой типа "газон" :) Так что она должна быть очень густая. Вот, как сделать здоровенный густой газон?
 

Skif

Администратор 3D галереи
Команда форума
Рейтинг
584
#3
мультискаттер в руки. он и ментал и вирей прокси юзает. трава - реальные геометрические объекты. но там можено делать зависимость от камеры. тоесть чем бальше тем толще и количество меньше. в целом выигрыш примерно 30% по времени
 

3rr0r

Знаток
Рейтинг
71
#4
Спасибо, конечно, но multiscatter только для Макса. Я не случайно написал в форум Майи. Есть ли способ сотворить подобное http://vimeo.com/6312200 в Майе не прибегая к использованию рендерферм?
Но копая гугл нашел подсказку Maya globals->Options->Performance->Export objects on demand. Попробую сегодня. Плюс попробую уменьшить количество полигонов на мазке, увеличив плотность. И увеличить количество проксей. Прокси у меня неплохо справляются с большим количеством кустов, например.
 

Annuran

Активный участник
Рейтинг
14
#6
смотря для чего опять же.... можно сделать комбинацию травы любой стандартной и из пайнта или фуром + текстура травы. При рендере будет выглядеть нормально, при условии что текстура хорошо подобрана и выглядит как травинки, получится такой типа псевдообманчик. Но суперски такую траву не сделаеш. Повторюсь смотря какая задача
 

iNOD

Активный участник
Рейтинг
18
#8
Я делаю траву пейнт эффектом, нарисовал где нужно сконвертировал полигоны, ну а потом сделал бинарПрокси, Иногда в сцене более 5-6 млн. полигонов травы. В зависимости от расстояния травы от камеры ставишь сегменс от 1 до 3-5, ну и когда конвертируешь поставь галочку квад аутпут,

Вот тебе кстате кисть травы что я использую, кидаешь в скрипт эдитор, выделяешь весь код и с зажатым колесиком перетаскиваешь на шелф:

Код:
brushPresetSetup();
bPset "time" 1; 
bPset "globalScale" 0.5; 
bPset "depth" 1; 
bPset "modifyDepth" 1; 
bPset "modifyColor" 1; 
bPset "modifyAlpha" 1; 
bPset "illuminated" 1; 
bPset "castShadows" 1; 
bPset "lightingBasedWidth" 0; 
bPset "branches" 1; 
bPset "twigs" 0; 
bPset "buds" 0; 
bPset "leaves" 0; 
bPset "flowers" 0; 
bPset "brushType" 0; 
bPset "brushWidth" 1.6; 
bPset "screenspaceWidth" 0; 
bPset "distanceScaling" 0; 
bPset "minPixelWidth" 0; 
bPset "maxPixelWidth" 1000; 
bPset "stampDensity" 4; 
bPset "softness" 0.05692; 
bPset "edgeAntialias" 1; 
bPset "edgeClip" 0; 
bPset "edgeClipDepth" 0.1; 
bPset "occlusionWidthScale" 0; 
bPset "blurIntensity" 4; 
bPset "color1R" 0.4588230252; 
bPset "color1G" 0.4666666687; 
bPset "color1B" 0.2470588237; 
bPset "color2R" 0.1294117719; 
bPset "color2G" 0.7176470757; 
bPset "color2B" 0.2627451122; 
bPset "transparency1R" 0; 
bPset "transparency1G" 0; 
bPset "transparency1B" 0; 
bPset "transparency2R" 0; 
bPset "transparency2G" 0; 
bPset "transparency2B" 0; 
bPset "incandescence1R" 0; 
bPset "incandescence1G" 0; 
bPset "incandescence1B" 0; 
bPset "incandescence2R" 0; 
bPset "incandescence2G" 0; 
bPset "incandescence2B" 0; 
bPset "specularColorR" 0.9177373648; 
bPset "specularColorG" 1; 
bPset "specularColorB" 0.7933692932; 
bPset "specular" 0.30098; 
bPset "specularPower" 30; 
bPset "translucence" 0.55; 
bPset "glow" 0; 
bPset "glowColorR" 0.4941176474; 
bPset "glowColorG" 0.4941176474; 
bPset "glowColorB" 0.4941176474; 
bPset "glowSpread" 1; 
bPset "shaderGlow" 0; 
bPset "hueRand" 0.0244; 
bPset "satRand" 0.05692; 
bPset "valRand" 0.01626; 
bPset "rootFade" 0; 
bPset "tipFade" 0.03252; 
bPset "fakeShadow" 0; 
bPset "shadowOffset" 0.5; 
bPset "shadowDiffusion" 0.1; 
bPset "shadowTransparency" 0.8; 
bPset "backShadow" 0.36894; 
bPset "brightnessRand" 0.7864; 
bPset "centerShadow" 0; 
bPset "depthShadowType" 0; 
bPset "depthShadow" 0.6602; 
bPset "depthShadowDepth" 0.30098; 
bPset "realLights" 1; 
bPset "lightDirectionX" 0.5; 
bPset "lightDirectionY" -0.5; 
bPset "lightDirectionZ" -0.5; 
bPset "gapSize" 0; 
bPset "gapSpacing" 1; 
bPset "gapRand" 1; 
bPset "flowSpeed" 0; 
bPset "textureFlow" 1; 
bPset "timeClip" 0; 
bPset "strokeTime" 0; 
bPset "startTime" 0; 
bPset "endTime" 1000; 
bPset "tubes" 1; 
bPset "tubeCompletion" 1; 
bPset "tubesPerStep" 8; 
bPset "tubeRand" 1; 
bPset "startTubes" 0; 
bPset "lengthMax" 0.5882302974; 
bPset "lengthMin" 0.2941176487; 
bPset "segments" 2; 
bPset "tubeWidth1" 0.05808823029; 
bPset "tubeWidth2" 0.02941176468; 
bPset "widthRand" 0.4779411768; 
bPset "widthBias" -0.3088230302; 
bPset "lengthFlex" 0; 
bPset "segmentLengthBias" 0; 
bPset "segmentWidthBias" 0.42276; 
bPset "tubeDirection" 0; 
bPset "elevationMin" 0.4769230773; 
bPset "elevationMax" 0.6666666664; 
bPset "azimuthMin" 0.23; 
bPset "azimuthMax" -0.2307692305; 
bPset "flatness1" 0.79612; 
bPset "flatness2" 0.82524; 
bPset "twist" 0; 
bPset "twistRate" 0.41464; 
bPset "twistRand" 1; 
bPset "spiralMin" 0; 
bPset "spiralMax" 0; 
bPset "spiralDecay" 0; 
bPset "bend" 0; 
bPset "bendBias" 0; 
bPset "displacementDelay" 0.2; 
bPset "wiggle" 0; 
bPset "wiggleFrequency" 5; 
bPset "wiggleOffset" 0; 
bPset "curl" 0; 
bPset "curlFrequency" 1; 
bPset "curlOffset" 0; 
bPset "noise" 0; 
bPset "noiseFrequency" 0.2; 
bPset "noiseOffset" 0; 
bPset "splitMaxDepth" 0; 
bPset "splitRand" 0; 
bPset "splitAngle" 13.17; 
bPset "splitSizeDecay" 0.87806; 
bPset "splitBias" 0; 
bPset "splitTwist" 0.5; 
bPset "startBranches" 3; 
bPset "numBranches" 2; 
bPset "branchDropout" 0.2439; 
bPset "middleBranch" 0; 
bPset "minSize" 0.0001; 
bPset "pathFollow" 0.02617801079; 
bPset "pathAttract" 0; 
bPset "curveFollow" 0.7643979057; 
bPset "curveAttract" 0.643979057; 
bPset "curveMaxDist" 0; 
bPset "uniformForceX" 0; 
bPset "uniformForceY" 0; 
bPset "uniformForceZ" 0; 
bPset "turbulenceType" 0; 
bPset "turbulenceInterpolation" 2; 
bPset "turbulence" 0.1165; 
bPset "turbulenceFrequency" 0.7864; 
bPset "turbulenceSpeed" 0.5; 
bPset "turbulenceOffsetX" 0; 
bPset "turbulenceOffsetY" 0; 
bPset "turbulenceOffsetZ" 0; 
bPset "random" 0.1256544499; 
bPset "gravity" 0.08376963309; 
bPset "momentum" 1; 
bPset "deflection" 0; 
bPset "deflectionMin" 0; 
bPset "deflectionMax" 0.3; 
bPset "sunDirectionX" 0; 
bPset "sunDirectionY" 0; 
bPset "sunDirectionZ" 0; 
bPset "twigsInCluster" 1; 
bPset "twigDropout" 0; 
bPset "twigAngle1" 90; 
bPset "twigAngle2" 80; 
bPset "twigTwist" 0; 
bPset "twigLength" 0.5; 
bPset "twigStart" 0.5; 
bPset "numTwigClusters" 4; 
bPset "twigBaseWidth" 0.4; 
bPset "twigTipWidth" 0.2; 
bPset "twigStiffness" 0.5; 
bPset "branchAfterTwigs" 0; 
bPset "leavesInCluster" 1; 
bPset "leafLocation" 0; 
bPset "leafDropout" 0; 
bPset "leafAngle1" 75; 
bPset "leafAngle2" 25; 
bPset "leafTwist" 0; 
bPset "leafBend" 0; 
bPset "leafCurl[0].leafCurl_Position" 0; 
bPset "leafCurl[0].leafCurl_FloatValue" 0.5; 
bPset "leafCurl[0].leafCurl_Interp" 1; 
bPset "leafTwirl" 0; 
bPset "leafFaceSun" 0; 
bPset "leafSegments" 5; 
bPset "leafStart" 0.5; 
bPset "numLeafClusters" 3; 
bPset "leafFlatness" 1; 
bPset "leafLength" 0.3; 
bPset "leafBaseWidth" 0.15; 
bPset "leafTipWidth" 0.05; 
bPset "leafSizeDecay" 0.7; 
bPset "leafTranslucence" 0.3; 
bPset "leafSpecular" 0.30098; 
bPset "terminalLeaf" 0; 
bPset "leafColor1R" 0.200000003; 
bPset "leafColor1G" 0.6000000238; 
bPset "leafColor1B" 0.3000000119; 
bPset "leafColor2R" 0.400000006; 
bPset "leafColor2G" 0.6000000238; 
bPset "leafColor2B" 0.3000000119; 
bPset "leafHueRand" 0; 
bPset "leafSatRand" 0; 
bPset "leafValRand" 0; 
bPset "leafUseBranchTex" 1; 
bPset "leafStiffness" 0.5; 
bPset "budSize" 0.03; 
bPset "budColorR" 0.400000006; 
bPset "budColorG" 0.8000000119; 
bPset "budColorB" 0.200000003; 
bPset "petalsInFlower" 1; 
bPset "flowerLocation" 0; 
bPset "petalDropout" 0; 
bPset "flowerAngle1" 75; 
bPset "flowerAngle2" 25; 
bPset "flowerTwist" 0.23; 
bPset "petalBend" 0; 
bPset "petalCurl[0].petalCurl_Position" 0; 
bPset "petalCurl[0].petalCurl_FloatValue" 0.5; 
bPset "petalCurl[0].petalCurl_Interp" 1; 
bPset "petalTwirl" 0; 
bPset "flowerFaceSun" 0; 
bPset "petalSegments" 5; 
bPset "flowerStart" 1; 
bPset "numFlowers" 10; 
bPset "petalFlatness" 1; 
bPset "petalLength" 0.2; 
bPset "petalBaseWidth" 0.05; 
bPset "petalTipWidth" 0.1; 
bPset "flowerSizeDecay" 0.7; 
bPset "flowerTranslucence" 0.3; 
bPset "flowerSpecular" 0.30098; 
bPset "petalColor1R" 0.8000000119; 
bPset "petalColor1G" 0.200000003; 
bPset "petalColor1B" 0.1000000015; 
bPset "petalColor2R" 1; 
bPset "petalColor2G" 1; 
bPset "petalColor2B" 1; 
bPset "flowerHueRand" 0; 
bPset "flowerSatRand" 0; 
bPset "flowerValRand" 0; 
bPset "flowerUseBranchTex" 1; 
bPset "flowerStiffness" 0.5; 
bPset "simplifyMethod" 2; 
bPset "colorLengthMap" 0; 
bPset "transpLengthMap" 0; 
bPset "incandLengthMap" 0; 
bPset "widthLengthMap" 1; 
bPset "splitLengthMap" 0; 
bPset "mapColor" 0; 
bPset "mapOpacity" 0; 
bPset "mapDisplacement" 0; 
bPset "textureType" 0; 
bPset "mapMethod" 2; 
bPset "texColorScale" 1; 
bPset "texColorOffset" 0; 
bPset "texOpacityScale" 1; 
bPset "texOpacityOffset" 0; 
bPset "displacementScale" 1; 
bPset "displacementOffset" 0; 
bPset "bumpIntensity" 1; 
bPset "bumpBlur" 0.5; 
bPset "luminanceIsDisplacement" 1; 
bPset "texColor1R" 1; 
bPset "texColor1G" 1; 
bPset "texColor1B" 1; 
bPset "texColor2R" 0; 
bPset "texColor2G" 0; 
bPset "texColor2B" 0; 
bPset "texAlpha1" 0; 
bPset "texAlpha2" 1; 
bPset "texUniformity" 0.5; 
bPset "fringeRemoval" 1; 
bPset "repeatU" 1; 
bPset "repeatV" 1; 
bPset "offsetU" 0; 
bPset "offsetV" 0; 
bPset "blurMult" 1; 
bPset "smear" 0.1; 
bPset "smearU" 0; 
bPset "smearV" 0; 
bPset "useFrameExtension" 0; 
bPset "frameExtension" 1; 
bPset "fractalRatio" 0.7; 
bPset "fractalAmplitude" 1; 
bPset "fractalThreshold" 0; 
bPset "multiStreaks" 0; 
bPset "multiStreakSpread1" 0.2; 
bPset "multiStreakSpread2" 0.2; 
bPset "multiStreakDiffuseRand" 0; 
bPset "multiStreakSpecularRand" 0; 
bPset "multiStreakLightAll" 0; 
bPset "singleSided" 0; 
bPset "tubeSections" 3; 
bPset "subSegments" 1; 
bPset "perPixelLighting" 0; 
bPset "widthScale[0].widthScale_Position" 0; 
bPset "widthScale[0].widthScale_FloatValue" 0.5; 
bPset "widthScale[0].widthScale_Interp" 1; 
bPset "widthScale[1].widthScale_Position" 0.6347826123; 
bPset "widthScale[1].widthScale_FloatValue" 1; 
bPset "widthScale[1].widthScale_Interp" 1; 
bPset "widthScale[2].widthScale_Position" 1; 
bPset "widthScale[2].widthScale_FloatValue" 0; 
bPset "widthScale[2].widthScale_Interp" 1; 
bPset "leafWidthScale[0].leafWidthScale_Position" 0; 
bPset "leafWidthScale[0].leafWidthScale_FloatValue" 1; 
bPset "leafWidthScale[0].leafWidthScale_Interp" 1; 
bPset "petalWidthScale[0].petalWidthScale_Position" 0; 
bPset "petalWidthScale[0].petalWidthScale_FloatValue" 1; 
bPset "petalWidthScale[0].petalWidthScale_Interp" 1; 
bPset "twigLengthScale[0].twigLengthScale_Position" 0; 
bPset "twigLengthScale[0].twigLengthScale_FloatValue" 1; 
bPset "twigLengthScale[0].twigLengthScale_Interp" 1; 
bPset "branchThorns" 0; 
bPset "twigThorns" 0; 
bPset "leafThorns" 0; 
bPset "flowerThorns" 0; 
bPset "thornDensity" 10; 
bPset "thornLength" 0.5; 
bPset "thornBaseWidth" 0.05; 
bPset "thornTipWidth" 0.01; 
bPset "thornElevation" 0.6; 
bPset "thornSpecular" 0.4; 
bPset "thornBaseColorR" 0.5; 
bPset "thornBaseColorG" 0.5; 
bPset "thornBaseColorB" 0.5; 
bPset "thornTipColorR" 0.5; 
bPset "thornTipColorG" 0.5; 
bPset "thornTipColorB" 0.5; 
bPset "environment[0].environment_Position" 0.200000003; 
bPset "environment[0].environment_ColorR" 0; 
bPset "environment[0].environment_ColorG" 0; 
bPset "environment[0].environment_ColorB" 0.150000006; 
bPset "environment[0].environment_Interp" 1; 
bPset "environment[1].environment_Position" 0.5; 
bPset "environment[1].environment_ColorR" 0.4799999893; 
bPset "environment[1].environment_ColorG" 0.5500000119; 
bPset "environment[1].environment_ColorB" 0.6999999881; 
bPset "environment[1].environment_Interp" 1; 
bPset "environment[2].environment_Position" 1; 
bPset "environment[2].environment_ColorR" 0; 
bPset "environment[2].environment_ColorG" 0.1000000015; 
bPset "environment[2].environment_ColorB" 0.4499999881; 
bPset "environment[2].environment_Interp" 1; 
bPset "reflectionRolloff[0].reflectionRolloff_Position" 0; 
bPset "reflectionRolloff[0].reflectionRolloff_FloatValue" 1; 
bPset "reflectionRolloff[0].reflectionRolloff_Interp" 1; 
bPset "branchReflectivity" 0; 
bPset "leafReflectivity" 0; 
bPset "flowerReflectivity" 0; 
bPset "forwardTwist" 0; 
bPset "leafForwardTwist" 0; 
bPset "petalForwardTwist" 0; 
bPset "endCaps" 0; 
bPset "hardEdges" 0; 
rename (getDefaultBrush()) grass_small_01;
 

3rr0r

Знаток
Рейтинг
71
#9
Skif, спасибо за наводку на скрипт. Работает. Он никак, конечно, не способствует ускорению рендера, но очень облегчает рисование проксями.
iNod, так и делал. Думал, что есть какой-нть еще способ ускорения рендера травы. И спасибо за пресет. Отличная трава! :)
Annuran, fur рендерится намного дольше конверченной геометрии из пэинт эффетов, так что смысл с ним смешивать не вижу.
 

iNOD

Активный участник
Рейтинг
18
#10
Есть но ты его описывал, то есть сделать фрагмент травы, и размножить бинарпрокси этого фрагмента. Да процесс трудоемкий, по этому делаю скрипт один, но никак не доделаю)).
Да еще хотел спросить, ты не пробовал использовать GI+FG я так делаю, то есть есть Sun&Sky добавляешь еще один направленный источник, ставишь в тоже положении что и сан но интенсити ставишь на 0 выставляешь фотоны(от 30к и до 1кк, мне и 30к хватает), в закладке ФГ ставишь галочку юз ГИ фотон, уменьшаешь плотность ФГ лучей(по умолчанию стоит 1, я ставлю 0,256, а акурасити 256(фанат 2 в разных степенях :) ). Попробуй так, время рендера должно сократиться.
 
Рейтинг
47
#11
У меня есть несколько вопросов касающихся Paint effectov.

1) Можно ли сперва создать кривую, а потом уже к ней применить прессет который любезно предоставил iNod. Я понимаю что такой метод противоречит самому названию эффекта (Paint). Просто "засеять" одним мазком весь газон у меня не получается, а делая много маленьких, каждый приходится потом настаивать.
2) V-Ray понимает и рендерит паинт эффекты, но при конвертации в поли, красота травы ухудшается (рис.). Так вот вопрос в том, "аппетитно" ли рендерит Mental Ray конвертированные эффекты? Или ухудшение качества при конвертации это специфика Вирея?
 

Вложения

iNOD

Активный участник
Рейтинг
18
#12
К кривой применить нельзя, сам искал такой способ, хотя мб я мало искал) По поводу мазков, рисуешь сколько тебе нужно потом можно создать пресет, выделить все свои мазки и в пересетах выбираешь свой пресет который ты создал и жмешь реплейс алл селектед, и все готово! Когда конвертируешь в поли то текстура не та что лежит на пейнт эффекте по этому можно настроить свою и сохранить, для дальнейшего использования, а разница в том что в текстуре пейнт эффекта на кончиках травы стоит прозрачность, по этому она и выглядит такой мягкой и аппетитной.

PS. То что я предоставил, то скорее не пресет а готовая кисть которой можно сразу рисовать.
 

Strahovid

Активный участник
Рейтинг
11
#13
Прошу прощения, если вмешиваюсь не в свое дело, но почему бы не применить в этом деле скрипт?
Создать модель травинки, а затем размножить её. В любых диапозонах разброса, поворота и размера.
Код:
string $list[] = `ls -sl`;
int $i;
float $x, $y, $z, $x1, $y1, $z1, $x2, $y2, $z2;
for($i = 0; $i <100; $i++)
{
	select -r $list;
	duplicate -rr;
	$x = rand (-100, 100) ;
	$z = rand (-10, 10) ;
	$y1 = rand ( 0, 360) ;
	$x2 = rand ( 0.8, 2) ;
	$y2 = rand ( 0.5, 1.5) ;
	$z2 = rand ( 0.5, 1.5) ;
	move -r $x 0 $z;
	rotate -r 0 $y1 0;
	scale -r $x2 $x2 $x2;
}
 

iNOD

Активный участник
Рейтинг
18
#15
Можно же не только траву пейнтом делать, а и цветы и растения разные, крапиву например или бурьян какой нить, кусты деревья что угодно. Я кстате думаю урок сделать по теме пейнтов, а то уроков по нему нету, сам разбирался, и хочу поделиться своим опытом. Но никак не соберусь( Что очень печально.
 

Владимир Забелин

Активный участник
Рейтинг
17
#16
на любую заранее нарисованную кривую можно навесить любой строук. смотрите внимательнее документацию.

у альвареса есть очень хорошие уроки по паинт эффекту
 
Сверху