СообщенияДата

Актуальные конфигурации компьютеров

Цитата Yehat: Давай к нам на тёмную сторону)) у нас есть жертвы и можно в соточку уложиться 4 плашки по 32 залезут в мать с 3900х, но больше уже слотов нет. Если взять днищенский ссд Кингстон (7 лет живёт у меня один такой, не помер) и выкинуть хдд, то можно натянуть 64гб в 100 тыр, а там разжиться со временем. Ну или двадцатку сверху накинуть сразу за память. SSD у меня есть, его не надо) Нужно без жертв все оборудование,проц, хорошую мать, с заделом на будущее, а не впритык) Оперативка, которая заведется сразу без копания в биосе со сбросами частот и проч. хрени, ясно что по 32гб, тк там 4 слота, хорошее охлаждение, ну тут я смотрю в сторону Noctua NH-D15 Тут вопрос не стоит, как и на чем сэкономить, вопрос в рациональном вложении денег, если разница между 3900х и 3950х незначительная, не вижу смысла переплачивать 30 тыщ. 
27.08.2020

Актуальные конфигурации компьютеров

Цитата Revered: Я б на риперовскую платформу тогда наверное ориентировался, с 8 слотами под память... Дорого, но time-proof. Хотя с другой стороны как они всех с TR4 накололи... задумаешься поневоле. дорого...если смотреть на STRX4
26.08.2020

Актуальные конфигурации компьютеров

Хочу сделать апгрейд компа, посоветуйте пожалуйста сборку 100+ Склоняюсь к 3900х Изначально смотрел в сторону 3950х но переплата в почти 30 тыщ за мизерный прирост..не вдохновляет. Собирать планирую в регарде, бюджетные комплектующие не интересны, хочу собрать с заделом на будущее, если вдруг выйдет более интересный проц 4 серии. Нужна мать, оперативка 128гб, которая встанет без танцев с бубном, охлаждение и сам процессор конечно. Все остальное перейдет со старого компа. Корпус закрытый и под столом, поэтому всякие подсветки и тп не интересны вообще.
26.08.2020

Зависает комп. при рендеринг в 3d max..

Я бы для начала потестил работу с одной планкой памяти, потом бы добавлял одинаковые. Возможно дело в ней.
02.01.2018

Railclone , виснет и закрывается макс

Цитата Nebrovt: Да именно в этом вопрос, а они не будут считать что это уже второй комп , а не тот самый, только  после форматa ? ведь я при покупке выбираю one seats ? Никогда не слышал о таких проблемах. Вы же не будете каждый день ставить программу на новый комп...Когда приобретете другой, программа на него встанет без проблем. Вообщем если не пытаться надурить систему, проблем не будет. В конце-концов у вас будет свой личный кабинет, техподдержка проблемы решает очень быстро.
08.08.2017

Railclone , виснет и закрывается макс

Цитата Nebrovt: Да несомненно , согласно , просто я всегда думала, а что будет после формата компа  ? ну если я выбираю при покупки только один комп . , может вопрос звучит туповат )) но всё таки так же, как с любым лицензионным продуктом, активируете заново
08.08.2017

Права покупателя на купленные PRO-модели

https://3ddd.ru/forum/thread/show/vopros_po_pravam_ispol_zovaniia_chuzhikh_modieliei#post976137
15.06.2017

Вопрос по ForestPack и маскам RenderID и MatID =)

форест не поддерживает ObjID, я так понимаю вы задаете каждому объекту свой ID.А если еще точнее сказать он не поддерживает это в вирее или наоборот вирей)))в короне все работает.
10.06.2017

Белый список исполнителей

Идея может и хорошая, но получится как всегда) Друг попросил друга и еще одного друга и друзья друзей..)Это примерно, как с конкурсами, первые голосуют друзья)))
09.06.2017

Работа с Максом с сетевого диска

проверьте скорость чтение-запись мелких+больших файлов. На сервак в папку с компьютера гига например 4 покидайте туда и обратно и посмотрите скорость записи. Возможно сервер-диск попросту на большее не способен.
31.05.2017

Помогите решить загадку знатоки

Нетривиальная задача это сделать тень от объекта, при этом его не освещая))) а тут казалось бы все элементарно, в любом ИС есть exclude - include для объектов. С какой целью разработчик решил этой функцией вкл - выкл. объект из освещения, при этом сохраняя от него тень, это за гранью моего понимания)
16.05.2017

Помогите решить загадку знатоки

в короне не работает корректно exclude - include, тень остается от объекта. Когда сталкивался с этим, нашел древний ответ на форуме, мол наш рендер не для фейков, бла-бла-бла...
16.05.2017

Нету большинства материалов Vray

Цитата EugeneTheModeler: Здраствуйте, есть проблема : при выборе в списке доступных материалов во вкладке Vray доступны только три материала, как видно на скриншоте. А где  vrayblendmtl и другие? Крякнут врей нормально, выбран рендерером. Вот зацепка: сразу после установки vray в 3ds max начинает постоянно выскакивать ошибка при запуске(второй скриншот) код ошибки выкладываю вконце include "$startupScripts\\vrayutils.ms" -- You can call this on any built-in value that will properly convert to a string -- without any extra work...like floats ints bools strings... fn value_to_xml value container out = ( if container != undefined then( format "<%><%></%>\n" container value container to:out )else( format "%" value to:out ) ) fn value_to_xml_string value container  =(     s = stringstream ""     value_to_xml value container s     return s as string ) -- Generic parameter - all inputs are expected to be strings --Makes parameter element of <parameters>..</parameters> section of xml --paramType:- bool, integer, float, string, vector, acolor texture, float texture, color, list, componentTransform, transform, output vector texture, output float texture, output acolor texture, plugin --paramValue:- if there is parameter value it's nested in <value>..</value> element --out:- output stream(file) --gammaCorrect:- true if exists such parameter attribute.  It is boolean flag tells us whether a given parameter needs gamma correction before being sent to V-Ray.  --handler:- ComboBoxHandler, FileBrowserHandler, TextureTransformHandler, CheckBoxHandler, DoubleSpinBoxHandler, ColorTexFrameHandler, FloatTexFrameHandler, TextureHandler, LockButtonHandler, UVWHandler --isUserData:-  true if exists such parameter attribute. This is helper param for the UI and will not be sent to V-Ray. fn make_parameter_xml paramName paramType paramValue out gammaCorrect:undefined handler:"default" isUserData:undefined=( userDataString="" gammaCorrectString="" handlerName = handler if gammaCorrect != undefined then( gammaCorrectString = " gammaCorrect=\"1\"" ) if isUserData != undefined then( userDataString=" isUserData=\"1\"" ) format "\t\t\t\t\t<parameter%% handler=\"%\" name=\"%\" type=\"%\">\n\t\t\t\t\t\t<value>%</value>\n\t\t\t\t\t</parameter>\n" userDataString gammaCorrectString handlerName paramName paramType paramValue  to:out ) --Makes list parameter element of <parameters>..</parameters> section of xml --listType:- it is the type of parameter stored in the list --paramType:- bool, integer, float, string, vector, acolor texture, float texture, color, list, componentTransform, transform, output vector texture, output float texture, output acolor texture, plugin --listOfValues:- container of values. Each value nested in <entry>..</entry> element compaund <list>..</list> element  --out:- output stream(file) --gammaCorrect:- true if exists such parameter attribute.  It is boolean flag tells us whether a given parameter needs gamma correction before being sent to V-Ray.  --handler:- ComboBoxHandler, FileBrowserHandler, TextureTransformHandler, CheckBoxHandler, DoubleSpinBoxHandler, ColorTexFrameHandler, FloatTexFrameHandler, TextureHandler, LockButtonHandler, UVWHandler --isUserData:-  true if exists such parameter attribute. This is helper param for the UI and will not be sent to V-Ray. fn make_list_parameter_xml paramName listType paramType listOfValues out gammaCorrect:undefined handler:"default" isUserData:undefined=( userDataString="" gammaCorrectString="" handlerName = handler if gammaCorrect != undefined then( gammaCorrectString = " gammaCorrect=\"1\"" ) if isUserData != undefined then( userDataString=" isUserData=\"1\"" ) formatedentry = stringstream "" entry = "\t\t\t\t\t\t\t\t<entry>%</entry>\n" numOfValues = listOfValues.count for i=1 to numOfValues - 1 do ( format entry listOfValues[i] to:formatedentry ) entry = "\t\t\t\t\t\t\t\t<entry>%</entry>" if numOfValues > 0 then ( format entry listOfValues[numOfValues] to:formatedentry ) else ( format entry "" to:formatedentry ) paramValue = formatedentry as string format "\t\t\t\t\t<parameter%% handler=\"%\" name=\"%\" listType=\"%\" type=\"%\">\n\t\t\t\t\t\t<value>\n\t\t\t\t\t\t\t<list>\n%\n\t\t\t\t\t\t\t</list>\n\t\t\t\t\t\t</value>\n\t\t\t\t\t</parameter>\n" userDataString gammaCorrectString handlerName paramName listType paramType paramValue  to:out ) --The next four functions surve bool/color type parameter creation which need of additional work around convertion to string fn boolToInteger paramVal = ( val = 0     if paramVal != false then(         val = 1 ) return val ) fn make_bool_parameter_xml paramName paramVal out isUserData:undefined handler:"default"=(     val = boolToInteger( paramVal ) return make_parameter_xml paramName "bool" (value_to_xml_string val undefined )  out isUserData:isUserData handler:handler ) fn vraymax_color_to_xml_string val =( s = stringstream "" format "<r>%</r><g>%</g><b>%</b>" (val.r as float/255.0f) (val.g as float/255.0f) (val.b as float/255.0f) to:s return s as string ) fn vraymax_colorwithalpha_to_xml_string val =( s = stringstream "" format "<r>%</r><g>%</g><b>%</b><a>%</a>" (val.r as float/255.0f) (val.g as float/255.0f) (val.b as float/255.0f) (val.a as float/255.0f) to:s return s as string ) fn make_color_parameter_xml paramName val out gammaCorrect:undefined isUserData:undefined handler:"default" bAlpha:false=( if bAlpha == true then ( make_parameter_xml paramName "color" (vraymax_colorwithalpha_to_xml_string val ) out gammaCorrect:gammaCorrect isUserData:isUserData handler:handler ) else ( make_parameter_xml paramName "color" (vraymax_color_to_xml_string val ) out gammaCorrect:gammaCorrect isUserData:isUserData handler:handler ) ) fn make_acolortexture_parameter_xml paramName val out gammaCorrect:undefined isUserData:undefined handler:"default" bAlpha:false=( if bAlpha == true then ( make_parameter_xml paramName "acolor texture" (vraymax_colorwithalpha_to_xml_string val ) out gammaCorrect:gammaCorrect isUserData:isUserData handler:handler  ) else ( make_parameter_xml paramName "acolor texture" (vraymax_color_to_xml_string val ) out gammaCorrect:gammaCorrect isUserData:isUserData handler:handler ) ) --Generally open_tag and close_tag methods are used for creating root nodes fn open_tag tag out tabs:""=( format "%<%>\n" tabs tag to:out ) fn close_tag tag out tabs:""=( format "%</%>\n" tabs tag  to:out ) --begin_asset and end_asset are responsible for Asset element creation --Assets mach  V-Ray plugins --url: - a scene-unique string identifier for the asset --pluginType: - generally the same as the underlying V-Ray Plugin's type.  --pluginFamily: - usually it is the same as pluginType --layout: -  this lets us know what user interface layout knows how to deal with this kind of asset --out: - output file fn begin_asset url pluginType pluginFamily layout out =( format "\t<Asset url=\"%\" type=\"%\" layout=\"%\" renderer=\"vray\">\n\t\t<plugin>\n\t\t\t<vrayplugin name=\"%\" type=\"%\">\n\t\t\t\t<parameters>\n" url pluginFamily layout pluginType pluginFamily to:out ) fn end_asset out =( close_tag "parameters" out tabs:"\t\t\t\t" close_tag "vrayplugin" out tabs:"\t\t\t" close_tag "plugin" out tabs:"\t\t" close_tag "Asset" out tabs:"\t" ) -- listOfMAPCoordsStyles = #("Point3", "UV") fn dumpComponentTransformParameterForMapCoords paramName map out=( s= stringstream "" local uvMap if ((classof map) == VRayHDRI ) then uvMap = map.UVGen else uvMap = map.coords -- We don't fully support all the rotation, etc, in our material editor at this point. So I can set these values but they will not be editable. -- At this time I am just bringing over values that will show up and be editable in our material editor. format "\n" to:s tabs ="\t\t\t\t\t\t\t\t" format "\t\t\t\t\t\t\t<componentTransform>\n" to:s format "%<x_rotation>%</x_rotation>\n"  tabs uvMap.u_angle to:s format "%<y_rotation>%</y_rotation>\n"  tabs uvMap.v_angle to:s local wRot = uvMap.w_angle local sign = 1 if wRot < 0 then sign = -1 if abs(wRot) > 360 then ( wRot = abs(wRot) - 360 wRot = sign * wRot ) if wRot > 0 then ( wRot = 360 - wRot ) else if wRot < 0 then ( wRot = -1 * wRot ) format "%<z_rotation>%</z_rotation>\n"  tabs wRot to:s format "%<x_offset>%</x_offset>\n" tabs uvMap.UVTransform[4][1] to:s format "%<y_offset>%</y_offset>\n" tabs uvMap.UVTransform[4][2] to:s format "%<z_offset>%</z_offset>\n"  tabs uvMap.UVTransform[4][3] to:s --width = map.coords.realWorldWidth --height = map.coords.realWorldHeight --if not map.coords.realWorldScale then( --width = 1.0 / width --height = 1.0 / height --) format "%<x_scale>%</x_scale>\n" tabs uvMap.U_Tiling to:s format "%<y_scale>%</y_scale>\n" tabs uvMap.V_Tiling to:s format "%<z_scale>1</z_scale>\n"  tabs to:s format "%<x_mirror>%</x_mirror>\n" tabs (boolToInteger uvMap.u_mirror ) to:s format "%<y_mirror>%</y_mirror>\n" tabs (boolToInteger uvMap.v_mirror ) to:s format "%<z_mirror>0</z_mirror>\n"  tabs to:s format "\t\t\t\t\t\t\t</componentTransform>\n" to:s format "\t\t\t\t\t\t" to:s make_parameter_xml paramName "componentTransform" (s as string) out handler:"TextureTransformHandler" ) fn dumpComponentTransformParameterForPoint3MapCoords paramName map out=( s= stringstream "" local uvMap if ((classof map) == VRayHDRI ) then uvMap = map.UVGen else uvMap = map.coords -- We don't fully support all the rotation, etc, in our material editor at this point. So I can set these values but they will not be editable. -- At this time I am just bringing over values that will show up and be editable in our material editor. format "\n" to:s tabs ="\t\t\t\t\t\t\t\t" format "\t\t\t\t\t\t\t<componentTransform>\n" to:s format "%<x_rotation>%</x_rotation>\n"  tabs uvMap.angle.x to:s format "%<y_rotation>%</y_rotation>\n"  tabs uvMap.angle.y to:s format "%<z_rotation>%</z_rotation>\n"  tabs uvMap.angle.z to:s format "%<x_offset>%</x_offset>\n" tabs uvMap.offset.x to:s format "%<y_offset>%</y_offset>\n" tabs uvMap.offset.y to:s format "%<z_offset>%</z_offset>\n"  tabs uvMap.offset.z to:s format "%<x_scale>%</x_scale>\n" tabs uvMap.tiling.x to:s format "%<y_scale>%</y_scale>\n" tabs uvMap.tiling.y to:s format "%<z_scale>%</z_scale>\n"  tabs uvMap.tiling.z to:s format "%<x_mirror>0</x_mirror>\n" tabs to:s format "%<y_mirror>0</y_mirror>\n" tabs to:s format "%<z_mirror>0</z_mirror>\n"  tabs to:s format "\t\t\t\t\t\t\t</componentTransform>\n" to:s format "\t\t\t\t\t\t" to:s make_parameter_xml paramName "componentTransform" (s as string) out handler:"TextureTransformHandler" ) -- If you want to manually specify the url you can but be careful that it is unique for the vismat you are exporting. fn dumpUVWGenChannelForMap parentURL map style out uvwURL: undefined =( if uvwURL == undefined then( uvwURL = parentURL + "/UVWGenChannel" ) local uvMap if ((classof map) == VRayHDRI ) then uvMap = map.UVGen else uvMap = map.coords begin_asset uvwURL "UVWGenChannel" "UVW" "" out  make_parameter_xml "uvw_channel" "integer" (uvMap.mapChannel as string) out  if style == listOfMAPCoordsStyles[1] then( dumpComponentTransformParameterForPoint3MapCoords "uvw_transform" map out ) else( if (uvMap.U_Tile) then ( make_parameter_xml "wrap_u" "integer" (1 as string) out make_parameter_xml "crop_u" "integer" (0 as string) out ) else ( make_parameter_xml "wrap_u" "integer" (0 as string) out make_parameter_xml "crop_u" "integer" (1 as string) out ) if (uvMap.V_Tile) then ( make_parameter_xml "wrap_v" "integer" (1 as string) out make_parameter_xml "crop_v" "integer" (0 as string) out ) else ( make_parameter_xml "wrap_v" "integer" (0 as string) out make_parameter_xml "crop_v" "integer" (1 as string) out ) make_parameter_xml "wrap_mode" "integer" (1 as string) out dumpComponentTransformParameterForMapCoords "uvw_transform" map out ) end_asset out   return uvwURL ) fn dumpUVWGenObjectForMap parentURL map style out uvwURL: undefined =( if uvwURL == undefined then( uvwURL = parentURL + "/UVWGenObject" ) begin_asset uvwURL "UVWGenObject" "UVW" "" out  make_parameter_xml "duvw_scale" "float" (1.0 as string) out  if style == listOfMAPCoordsStyles[1] then( dumpComponentTransformParameterForPoint3MapCoords "uvw_transform" map out ) else( dumpComponentTransformParameterForMapCoords "uvw_transform" map out ) end_asset out   return uvwURL ) fn dumpUVWGenChannel parentURL map_channel out uvwURL: undefined =( if uvwURL == undefined then( uvwURL = parentURL + "/UVWGenChannel" ) begin_asset uvwURL "UVWGenChannel" "UVW" "" out  make_parameter_xml "uvw_channel" "integer" (map_channel as string) out  end_asset out   return uvwURL ) fn dumpUVWGenObjectScale parentURL map_scale out uvwURL: undefined =( if uvwURL == undefined then( uvwURL = parentURL + "/UVWGenObject" ) begin_asset uvwURL "UVWGenObject" "UVW" "" out  make_parameter_xml "duvw_scale" "float" (map_scale as string) out  end_asset out   return uvwURL ) fn dumpBitmapBuffer parentURL map out =( bitmapURL = parentURL +"/BitmapBuffer" begin_asset bitmapURL "BitmapBuffer" "bitmap" "" out  resolvedPath = filenamefrompath map.fileName --print "dumpBitmapBuffer------------------------------------->" --print "saveDirForBMPFiles:" --print saveDirForBMPFiles --if saveDirForBMPFiles != undefined then( --resolvedPath = saveDirForBMPFiles + "\\" + resolvedPath --) gammaval = vrayGetBitmapGamma map make_parameter_xml "file" "string" resolvedPath out handler:"FileBrowserHandler" -- The bitmap buffer filter type is in a different order than listed in the 3dsmax ui. It goes "No Filter", "Pyramid", "Summed area" bitmap_buffer_filter_remap= #( 1, 2, 0 ) -- The +1 is to account for 3dsmax 1-based array index math make_parameter_xml "filter_type" "integer"  bitmap_buffer_filter_remap[map.filtering+1] out handler:"ComboBoxHandler" make_parameter_xml "filter_blur" "float"  map.coords.blur out make_parameter_xml "color_space" "integer" 1 out if (gammaval != undefined) then ( make_parameter_xml "gamma" "float"  (1.0/gammaval) out ) end_asset out  return bitmapURL ) fn dumpTexCombineColor url colorVal texUrl texMult texOn out isColor:true=( begin_asset url "TexCombineColor" "texture" "" out if isColor then( make_color_parameter_xml "color" colorVal out )else( colorVal = colorVal * 255 floatColor = Color colorVal colorVal colorVal make_color_parameter_xml "color" floatColor out ) if (texUrl != undefined) and (texOn) then( make_parameter_xml "texture" "acolor texture" texUrl out )else( make_parameter_xml "texture" "acolor texture" "" out ) make_parameter_xml "texture_multiplier" "float" texMult out end_asset out ) fn dumpTexVRayHDRI=undefined fn dumpTexMulti=undefined fn dumpTexFalloff=undefined fn dumpTexChecker=undefined arrBitMapTxtPaths = #() listNormalBumpFeatures = #() --saveDirForBMPFiles = undefined -- Right now we are only going to be handling basic bitmaps -- parentURL is the url of our parent -- mapUse is a string to help us come up with unique urls...an example would be passing "Diffuse" if this was a diffuse map or "Reflection" if this was a map being used for reflection fn dumpMap map parentURL mapUse out =( if map == undefined then( return undefined ) --clOfMAP = classof map --clOf = classof clOfMAP --print "dumpMap----classof map METHOD:" --print clOfMAP --print clOf mapUrl = parentURL + "/Texture" case (classof map) of ( Bitmaptexture:( --resolvedPath = filenamefrompath map.fileName --filename = resolvedPath --FileResolutionManager.getFullFilePath &resolvedPath #Bitmap resolvedPath = mapPaths.getFullFilePath map.fileName --print "Source path for bitmap file:" --print resolvedPath if resolvedPath != "" then ( appendIfUnique arrBitMapTxtPaths resolvedPath ) else ( print "WARNING!" format "Unresolved path for %\n" map.fileName ) --print filename dumpTexBitmap mapUrl map out ) Speckle:( dumpTexSpeckle mapUrl map out ) Bricks:( dumpTexTiles mapUrl map out ) Mix:( dumpTexMix mapUrl map out ) Noise:( dumpTexNoiseMax mapUrl map out ) Cellular:( dumpTexCellular mapUrl map out ) VRayCompTex:( dumpTexCompMax mapUrl map out ) Color_Correction:( dumpTexColorCorrection mapUrl map out ) VRayMultiSubTex:( dumpTexMulti mapUrl map out ) VRayNormalMap:( dumpMap map.normal_map parentURL mapUse out ) Normal_Bump:( listNormalBumpFeatures = #(map.normal_map,map.map1on,map.mult_spin,map.method) ) Checker:( dumpTexChecker mapUrl map out ) Falloff:( dumpTexFalloff mapUrl map out ) VRayHDRI:( resolvedHDRIPath = mapPaths.getFullFilePath map.HDRIMapName if resolvedHDRIPath != "" then ( appendIfUnique arrBitMapTxtPaths resolvedHDRIPath ) else ( print "WARNING!" format "Unresolved path for %\n" map.HDRIMapName ) dumpTexVRayHDRI mapUrl map out ) default:( format "Map of type %: " (classof map) format "Unknown map - skipped\n" ) ) ) -- url will be used as the TexBitmap url we don't build  url because this gets done in dumpMap  fn dumpTexBitmap url map out =( uvwURL = "" if map.coords.mapping == 0 then( uvwURL = dumpUVWGenChannelForMap url map listOfMAPCoordsStyles[2] out ) else if map.coords.mapping == 2 then( uvwURL = dumpUVWGenObjectForMap url map listOfMAPCoordsStyles[2] out ) bitmapURL = dumpBitmapBuffer url map out  begin_asset url "TexBitmap" "texture" "" out make_parameter_xml "uvwgen" "plugin" uvwURL out make_parameter_xml "bitmap" "plugin" bitmapURL out  -- Placement type in TexBitmap has 3 options, "Whole texture", "Crop", and "Place". I am not sure how "Whole texture" is possible in 3dsmax -- so this will actually only allow "crop" or "place". We add 1 to bypass "Whole texture", map.cropPlace 0 for crop, 1 for place make_parameter_xml "placement_type" "integer" (map.cropPlace + 1) out handler:"ComboBoxHandler" if map.apply then ( make_parameter_xml "u" "float" map.clipu out make_parameter_xml "v" "float" map.clipv out make_parameter_xml "w" "float" map.clipw out make_parameter_xml "h" "float" map.cliph out if map.cropPlace == 1 and map.useJitter then ( make_parameter_xml "jitter" "float" map.jitter out ) ) if map.coords.Noise_On then ( make_bool_parameter_xml "uv_noise_on" map.coords.Noise_On out make_bool_parameter_xml "uv_noise_animate" map.coords.Noise_Animate out make_parameter_xml "uv_noise_amount" "float" map.coords.Noise_Amount out make_parameter_xml "uv_noise_levels" "float" map.coords.Noise_Levels out make_parameter_xml "uv_noise_size" "float" map.coords.Noise_Size out make_parameter_xml "un_noise_phase" "float" map.coords.phase out ) make_parameter_xml "alpha_from_intensity" "integer" map.alphaSource out make_acolortexture_parameter_xml "nouvw_color" (Color 0 0 0 0) out bAlpha:true end_asset out  ) fn dumpTexSpeckle url map out =( uvwURL = "" if map.coords.coordType == 2 then( uvwURL = dumpUVWGenChannelForMap url map listOfMAPCoordsStyles[1] out ) else if map.coords.coordType == 0 then( uvwURL = dumpUVWGenObjectForMap url map listOfMAPCoordsStyles[1] out ) finalUrl1 = url + "/color1" texUrl1 = undefined if map.map1 != undefined then( --print "dumpTexSpeckle" --print map.map1 texUrl1 = finalUrl1 + "/Texture" dumpMap map.map1 finalUrl1 "color1" out ) finalUrl2 = url + "/color2" texUrl2 = undefined if map.map2 != undefined then( texUrl2 = finalUrl2 + "/Texture" dumpMap map.map2 finalUrl1 "color2" out ) dumpTexCombineColor finalUrl1 map.color1 texUrl1 1.0 map.map1On out dumpTexCombineColor finalUrl2 map.color2 texUrl2 1.0 map.map2On out begin_asset url "TexSpeckle" "texture" "" out make_parameter_xml "uvwgen" "plugin" uvwURL out make_parameter_xml "size" "float" map.size out make_parameter_xml "color1" "acolor texture" finalUrl1 out make_parameter_xml "color2" "acolor texture" finalUrl2 out end_asset out  ) fn dumpTexTiles url map out =( uvwURL = "" if map.coords.mapping == 0 then( uvwURL = dumpUVWGenChannelForMap url map listOfMAPCoordsStyles[2] out ) else if map.coords.mapping == 2 then( uvwURL = dumpUVWGenObjectForMap url map listOfMAPCoordsStyles[2] out ) mapMortar = map.Mortar_Map mapTiles = map.Bricks finalUrl1 = url + "/color_mortar" texUrl1 = undefined if mapMortar != undefined then( texUrl1 = finalUrl1 + "/Texture" dumpMap mapMortar finalUrl1 "color_mortar" out  ) finalUrl2 = url + "/color_tiles" texUrl2 = undefined if mapTiles != undefined then( texUrl2 = finalUrl2 + "/Texture" dumpMap mapTiles finalUrl2 "color_tiles" out  ) --dumpTexCombineColor url colorVal texUrl texMult texOn out isColor:true mortarColor = map.Mortar_Color tilesColor = map.Brick_Color dumpTexCombineColor finalUrl1 mortarColor texUrl1 1.0 true out dumpTexCombineColor finalUrl2 tilesColor texUrl2 1.0 true out begin_asset url "TexTiles" "texture" "" out  make_parameter_xml "texture_multiplier_mode" "integer" "1" out handler:"ComboBoxHandler" isUserData:true make_parameter_xml "uvwgen" "plugin" uvwURL out  --dumpTextureParamsListVals parentURL baseParamName out listOfVals isColor:true shouldGammaCorrect:false dumpTextureParamsListVals url "color_mortar" out #(mortarColor, mapMortar, 1.0, true) isColor:true dumpTextureParamsListVals url "color_tiles" out #(tilesColor, mapTiles, 1.0, true) isColor:true make_parameter_xml "horizontal_count" "float" map.Horizontal_Count out make_parameter_xml "vertical_count" "float" map.Vertical_Count out make_parameter_xml "color_variance" "float" map.Color_Variance out make_parameter_xml "fade_variance" "float" map.Fade_Variance out make_parameter_xml "horizontal_gap" "float" map.Horizontal_Gap out make_parameter_xml "vertical_gap" "float" map.Vertical_Gap out make_parameter_xml "holes" "integer" map.Holes out make_parameter_xml "edge_roughness" "float" map.Edge_Roughness out make_parameter_xml "random_seed" "integer" map.Random_Seed out make_parameter_xml "line_shift" "float" map.Line_Shift out make_parameter_xml "random_shift" "float" map.Random_Shift out make_parameter_xml "row_modify" "bool" map.Use_Row_Edit out make_parameter_xml "per_row" "integer" map.Per_Row out make_parameter_xml "row_change" "float" map.Change_Row out make_parameter_xml "column_modify" "bool" map.Use_Column_Edit out make_parameter_xml "per_column" "integer" map.Per_Column out make_parameter_xml "column_change" "float" map.Change_Column out end_asset out  ) fn dumpTexMix url map out =( map1 = map.map1 map2 = map.map2 mixMap = map.mask finalUrl1 = url + "/color1" texUrl1 = undefined if map1 != undefined then( texUrl1 = finalUrl1 + "/Texture" dumpMap map1 finalUrl1 "color1" out  ) finalUrl2 = url + "/color2" texUrl2 = undefined if map2 != undefined then( texUrl2 = finalUrl2 + "/Texture" dumpMap map2 finalUrl2 "color2" out  ) finalUrl3 = url + "/mix_map" texUrl3 = "" if mixMap != undefined then( texUrl3 = finalUrl3 + "/Texture" dumpMap mixMap finalUrl3 "mix_map" out  ) mapColor1 = map.color1 mapColor2 = map.color2 mixColor = ( Color 0.5 0.5 0.5 ) map1On = map.map1Enabled map2On = map.map2Enabled mixOn = map.maskEnabled dumpTexCombineColor finalUrl1 mapColor1 texUrl1 1.0 map1On out dumpTexCombineColor finalUrl2 mapColor2 texUrl2 1.0 map2On out dumpTexCombineColor finalUrl3 mixColor texUrl3 1.0 mixOn out begin_asset url "TexMix" "texture" "" out dumpTextureParamsListVals url "color1" out #(mapColor1, map1, 1.0, map1On) isColor:true dumpTextureParamsListVals url "color2" out #(mapColor2, map2, 1.0, map2On) isColor:true dumpTextureParamsListVals url "mix_map" out #(mixColor, mixMap, 1.0, mixOn) isColor:true make_parameter_xml "mix_amount" "float" ( map.mixAmount as float/100.0 ) out useCurveVal =  boolToInteger(map.useCurve) make_parameter_xml "use_curve" "integer" useCurveVal out make_parameter_xml "transition_lower" "float" map.lower out make_parameter_xml "transition_upper" "float" map.upper out end_asset out  ) fn dumpTexNoiseMax url map out =( --uvwURL = dumpUVWGenChannel url map.coords.mapChannel out uvwURL = "" if map.coords.coordType == 2 then( uvwURL = dumpUVWGenChannelForMap url map listOfMAPCoordsStyles[1] out ) else if map.coords.coordType == 0 then( uvwURL = dumpUVWGenObjectForMap url map listOfMAPCoordsStyles[1] out ) map1 = map.map1 map2 = map.map2 finalUrl1 = url + "/color1" texUrl1 = undefined if map1 != undefined then( texUrl1 = finalUrl1 + "/Texture" dumpMap map1 finalUrl1 "color1" out  ) finalUrl2 = url + "/color2" texUrl2 = undefined if map2 != undefined then( texUrl2 = finalUrl2 + "/Texture" dumpMap map2 finalUrl2 "color2" out  ) mapColor1 = map.color1 mapColor2 = map.color2 map1On = map.map1Enabled map2On = map.map2Enabled dumpTexCombineColor finalUrl1 mapColor1 texUrl1 1.0 map1On out dumpTexCombineColor finalUrl2 mapColor2 texUrl2 1.0 map2On out begin_asset url "TexNoiseMax" "texture" "" out make_parameter_xml "uvwgen" "plugin" uvwURL out dumpTextureParamsListVals url "color1" out #(mapColor1, map1, 1.0, map1On) isColor:true dumpTextureParamsListVals url "color2" out #(mapColor2, map2, 1.0, map2On) isColor:true make_parameter_xml "size" "float" map.size out make_parameter_xml "phase" "float" map.phase out make_parameter_xml "iterations" "float" map.levels out make_parameter_xml "low" "float" map.thresholdLow out make_parameter_xml "high" "float" map.thresholdHigh out make_parameter_xml "type" "integer" map.type out end_asset out  ) fn dumpTexFalloff url map out =( map1 = map.map1 map2 = map.map2 finalUrl1 = url + "/color1" texUrl1 = undefined if map1 != undefined then( texUrl1 = finalUrl1 + "/Texture" dumpMap map1 finalUrl1 "color1" out  ) finalUrl2 = url + "/color2" texUrl2 = undefined if map2 != undefined then( texUrl2 = finalUrl2 + "/Texture" dumpMap map2 finalUrl2 "color2" out  ) mapColor1 = map.color1 mapColor2 = map.color2 mapMult1 = map.map1Amount as float/100.0 mapMult2 = map.map2Amount as float/100.0 map1On = map.map1On map2On = map.map2On dumpTexCombineColor finalUrl1 mapColor1 texUrl1 mapMult1 map1On out dumpTexCombineColor finalUrl2 mapColor2 texUrl2 mapMult2 map2On out begin_asset url "TexFalloff" "texture" "" out dumpTextureParamsListVals url "color1" out #(mapColor1, map1, mapMult1, map1On) isColor:true dumpTextureParamsListVals url "color2" out #(mapColor2, map2, mapMult2, map2On) isColor:true make_parameter_xml "type" "integer" map.type out if map.direction == 4 then ( make_parameter_xml "direction_type" "integer" 3 out ) else if map.direction == 3 then ( make_parameter_xml "direction_type" "integer" 4 out ) else ( make_parameter_xml "direction_type" "integer" map.direction out ) make_parameter_xml "fresnel_ior" "float" map.ior out make_bool_parameter_xml "dist_extrapolate" map.extrapolateOn out make_parameter_xml "dist_near" "float" map.nearDistance out make_parameter_xml "dist_far" "float" map.farDistance out end_asset out  ) fn dumpTexChecker url map out =( if map.coords.mappingType > 0 then return undefined uvwURL = "" if map.coords.mapping == 0 then( uvwURL = dumpUVWGenChannelForMap url map listOfMAPCoordsStyles[2] out ) else if map.coords.mapping == 2 then( uvwURL = dumpUVWGenObjectForMap url map listOfMAPCoordsStyles[2] out ) map1 = map.map1 map2 = map.map2 finalUrl1 = url + "/black_color" texUrl1 = undefined if map1 != undefined then( texUrl1 = finalUrl1 + "/Texture" dumpMap map1 finalUrl1 "black_color" out  ) finalUrl2 = url + "/white_color" texUrl2 = undefined if map2 != undefined then( texUrl2 = finalUrl2 + "/Texture" dumpMap map2 finalUrl2 "white_color" out  ) mapColor1 = map.color1 mapColor2 = map.color2 map1On = map.map1Enabled map2On = map.map2Enabled dumpTexCombineColor finalUrl1 mapColor1 texUrl1 1.0 map1On out dumpTexCombineColor finalUrl2 mapColor2 texUrl2 1.0 map2On out begin_asset url "TexChecker" "texture" "" out make_parameter_xml "uvwgen" "plugin" uvwURL out dumpTextureParamsListVals url "white_color" out #(mapColor2, map2, 1.0, map2On) isColor:true dumpTextureParamsListVals url "black_color" out  #(mapColor1, map1, 1.0, map1On) isColor:true make_parameter_xml "uv_noise_on" "integer" (boolToInteger map.coords.Noise_On) out make_parameter_xml "uv_noise_amount" "float" map.coords.Noise_Amount out make_parameter_xml "uv_noise_levels" "float" map.coords.Noise_Levels out make_parameter_xml "uv_noise_size" "float" map.coords.Noise_Size out make_parameter_xml "un_noise_phase" "float" map.coords.phase out end_asset out  ) fn dumpTexCellular url map out =( uvwURL = "" if map.coords.coordType == 2 then( uvwURL = dumpUVWGenChannelForMap url map listOfMAPCoordsStyles[1] out ) else if map.coords.coordType == 0 then( uvwURL = dumpUVWGenObjectForMap url map listOfMAPCoordsStyles[1] out ) mapCell = map.cellMap mapDiv1 = map.divMap1 mapDiv2 = map.divMap2 finalUrl1 = url + "/center_color" texUrl1 = "" if mapCell != undefined then( texUrl1 = finalUrl1 + "/Texture" dumpMap mapCell finalUrl1 "center_color" out  ) finalUrl2 = url + "/edge_color" texUrl2 = "" if mapDiv1 != undefined then( texUrl2 = finalUrl2 + "/Texture" dumpMap mapDiv1 finalUrl2 "edge_color" out  ) finalUrl3 = url + "/bg_color" texUrl3 = "" if mapDiv2 != undefined then( texUrl3 = finalUrl3 + "/Texture" dumpMap mapDiv2 finalUrl3 "bg_color" out  ) mapCellColor = map.cellColor mapDiv1Color = map.divColor1 mapDiv2Color = map.divColor2 mapCellOn = map.map1Enabled mapDiv1On = map.map2Enabled mapDiv2On = map.map3Enabled dumpTexCombineColor finalUrl1 mapCellColor texUrl1 1.0 mapCellOn out dumpTexCombineColor finalUrl2 mapDiv1Color texUrl2 1.0 mapDiv1On out dumpTexCombineColor finalUrl3 mapDiv2Color texUrl3 1.0 mapDiv2On out begin_asset url "TexCellular" "texture" "" out make_parameter_xml "uvwgen" "plugin" uvwURL out dumpTextureParamsListVals url "center_color" out #(mapCellColor, mapCell, 1.0, mapCellOn) isColor:true dumpTextureParamsListVals url "edge_color" out #(mapDiv1Color, mapDiv1, 1.0, mapDiv1On) isColor:true dumpTextureParamsListVals url "bg_color" out #(mapDiv2Color, mapDiv2, 1.0, mapDiv2On) isColor:true make_parameter_xml "size" "float" map.size out make_parameter_xml "spread" "float" map.spread out make_parameter_xml "type" "integer" map.type out make_bool_parameter_xml "fractal" map.fractal out make_parameter_xml "fractal_iterations" "float" map.iteration out make_parameter_xml "fractal_roughness" "float" map.roughness out make_parameter_xml "low" "float" map.lowThresh out make_parameter_xml "middle" "float" map.midThresh out make_parameter_xml "high" "float" map.highThresh out end_asset out  ) fn dumpTexCompMax url map out =( mapSourceA = map.sourceA mapSourceB = map.sourceB finalUrl1 = url + "/sourceA" texUrl1 = "" if mapSourceA != undefined then( texUrl1 = finalUrl1 + "/Texture" dumpMap mapSourceA finalUrl1 "sourceA" out  ) finalUrl2 = url + "/sourceB" texUrl2 = "" if mapSourceB != undefined then( texUrl2 = finalUrl2 + "/Texture" dumpMap mapSourceB finalUrl2 "sourceB" out  ) begin_asset url "TexCompMax" "texture" "" out make_parameter_xml "sourceA" "acolor texture" texUrl1 out handler:"TextureHandler" make_parameter_xml "sourceB" "acolor texture" texUrl2 out handler:"TextureHandler" make_parameter_xml "operator" "integer" map.operator out end_asset out ) fn dumpTexColorCorrection url map out =( colcormap = map.map finalUrl = url + "/texture_map" texUrl = "" if colcormap != undefined then( texUrl = finalUrl + "/Texture" dumpMap colcormap finalUrl "texture_map" out  ) begin_asset url "ColorCorrection" "texture" "" out make_parameter_xml "texture_map" "acolor texture" texUrl out handler:"TextureHandler" make_color_parameter_xml "source_color" map.color out gammaCorrect:false make_parameter_xml "rewire_red" "integer" map.rewireR out make_parameter_xml "rewire_green" "integer" map.rewireG out make_parameter_xml "rewire_blue" "integer" map.rewireB out make_parameter_xml "rewire_alpha" "integer" map.rewireA out make_parameter_xml "hue_shift" "float" map.hueShift out make_parameter_xml "saturation" "float" map.saturation out make_color_parameter_xml "hue_tint" map.tint out gammaCorrect:false make_parameter_xml "tint_strength" "float" map.tintStrength out make_parameter_xml "brightness" "float" map.brightness out make_parameter_xml "contrast" "float" map.contrast out make_parameter_xml "lightness_mode" "integer" map.lightnessMode out end_asset out  ) fn dumpTexAColorFromColor url inColor out=( begin_asset url "TexAColor" "texture" "" out make_parameter_xml "texture" "acolor texture" (vraymax_color_to_xml_string inColor) out handler:"ColorPickerHandler" end_asset out  ) fn dumpTexMulti url map out =( mapDefault = map.default_texmap finalUrl = url + "/default_texture" texUrl = "" if mapDefault != undefined then( texUrl = finalUrl + "/Texture" dumpMap mapDefault finalUrl "default_texture" out  ) local listOfTexMaps = map.texmap local finalURLList = #() local texURLList = #() local entry = "multitex%" s= stringstream "" for i=1 to listOfTexMaps.count do ( format entry map.texmap_id[i] to:s ifinalUrl = url + "/" + (s as string) itexUrl = "" if listOfTexMaps[i] != undefined then( itexUrl = ifinalUrl + "/Texture" dumpMap listOfTexMaps[i] ifinalUrl (s as string) out  ) append finalURLList ifinalUrl append texURLList itexUrl free s ) mapDefaultColor = map.default_color mapDefaultMult = map.default_texmap_mult / 100.0f mapDefaultOn = map.default_texmap_on dumpTexCombineColor finalUrl mapDefaultColor texUrl mapDefaultMult mapDefaultOn out for i=1 to listOfTexMaps.count do ( dumpTexCombineColor finalURLList[i] map.texmap_color[i] texURLList[i] (map.texmap_mult[i] / 100.0f) map.texmap_mapOn[i] out ) begin_asset url "TexMulti" "texture" "" out make_parameter_xml "mode" "integer" map.fro-m_id out dumpTextureParamsListVals url "default_texture" out #(mapDefaultColor, mapDefault, mapDefaultMult, mapDefaultOn) isColor:true make_list_parameter_xml "ids_list" "integer" "list" map.texmap_id out make_list_parameter_xml "textures_list" "plugin" "list" finalURLList out end_asset out  ) fn dumpTexVRayHDRI url map out =( uvwURL = "" if map.UVGen.mapping == 0 then( uvwURL = dumpUVWGenChannelForMap url map listOfMAPCoordsStyles[2] out ) else if map.UVGen.mapping == 2 then( uvwURL = dumpUVWGenObjectForMap url map listOfMAPCoordsStyles[2] out ) --dump BitmapBuffer local bitmapURL = url +"/TexBitmap/BitmapBuffer" begin_asset bitmapURL "BitmapBuffer" "bitmap" "" out  resolvedPath = filenamefrompath map.HDRIMapName make_parameter_xml "file" "string" resolvedPath out handler:"FileBrowserHandler" -- The bitmap buffer filter type is in a different order than listed in the 3dsmax ui. It goes "No Filter", "Pyramid", "Summed area" --bitmap_buffer_filter_remap= #( 1, 2, 0 ) -- The +1 is to account for 3dsmax 1-based array index math make_parameter_xml "filter_type" "integer"  1 out handler:"ComboBoxHandler" make_parameter_xml "filter_blur" "float"  map.UVGen.blur out make_parameter_xml "color_space" "integer" 0 out make_parameter_xml "gamma" "float"  1.0 out end_asset out  local multiplier = map.multiplier * map.renderMultiplier local colorspace = map.color_space local custgamma = 1.0 if colorspace == 3 then ( local filetype = getFilenameType map.HDRIMapName if toLower(filetype) ==  ".exr" then ( colorspace = 0 custgamma = 1.0 ) else ( colorSpace=1; custgamma = vrayGetBitmapGamma map if (gammaval != undefined) then ( custgamma = 1.0 / custgamma ) else ( custgamma = 1.0 ) ) ) if colorspace == 1 then ( custgamma = map.gamma ) --If we have any modifications to the color space or the gamma, apply a TexMaxGamma local texMaxGammaCreate = (colorspace!=0 or abs(custgamma-1.0)>1e-6 or abs(multiplier-1.0)>1e-6) local texBitmapURL = url if texMaxGammaCreate then texBitmapURL = url +"/TexBitmap" begin_asset texBitmapURL "TexBitmap" "texture" "" out make_parameter_xml "uvwgen" "plugin" uvwURL out make_parameter_xml "bitmap" "plugin" bitmapURL out  -- Placement type in TexBitmap has 3 options, "Whole texture", "Crop", and "Place". I am not sure how "Whole texture" is possible in 3dsmax -- so this will actually only allow "crop" or "place". We add 1 to bypass "Whole texture", map.cropPlace 0 for crop, 1 for place local mapCropPlace = 0 if map.cropplace_on then ( case cropplace_mode of ( 0: ( mapCropPlace = 1 ) 1: ( mapCropPlace = 2 ) ) ) make_parameter_xml "placement_type" "integer" mapCropPlace out handler:"ComboBoxHandler" make_parameter_xml "alpha_from_intensity" "integer" map.alphaSource out make_acolortexture_parameter_xml "nouvw_color" (Color 0 0 0 0) out bAlpha:true end_asset out if texMaxGammaCreate then ( begin_asset url "TexMaxGamma" "texture" "" out make_parameter_xml "input" "acolor texture" texBitmapURL out handler:"TextureHandler" make_parameter_xml "multiplier" "float"  map.multiplier out make_parameter_xml "color_space" "integer"  colorspace out make_parameter_xml "gamma" "float"  custgamma out end_asset out ) ) fn getParamType param =( case( classof param) of ( Color:( return "color" ) worldUnits:( return "float" ) Float:( return "float" ) BooleanClass:( return "bool" ) integer:( return "integer" ) default:( return "plugin" ) ) ) -- If you need to manually specify the type you can pass in the V-Ray parameter type otherwise we'll just try to get it from the classof param fn dumpParam param paramName out paramType:undefined paramValue:undefined gammaCorrect:undefined isUserData:undefined handler:"default"= ( if param == undefined  then return undefined paramType = paramType if paramType == undefined then( paramType = getParamType param  ) case( paramType ) of( "color":( make_color_parameter_xml paramName param out gammaCorrect:gammaCorrect isUserData:isUserData handler:handler ) "plugin":( -- to make this a bit easier I'm going to make sure I pass the url  if paramValue != undefined then( make_parameter_xml paramName "plugin" paramValue out gammaCorrect:gammaCorrect isUserData:isUserData handler:handler ) ) "bool":( -- bools don't go into integers without a bit of coercion. make_bool_parameter_xml paramName param out isUserData:isUserData handler:handler ) default:( -- most of our types can just be made generically in their string form make_parameter_xml paramName paramType (param as string) out gammaCorrect:gammaCorrect isUserData:isUserData handler:handler ) ) ) -- Some of our color/tex param names don't follow the same protocol so we need to account for them if we want this automated -- I couldn't see a way to make a lookup table, so I am just using 2 arrays and making sure I place the related names at the same index in each param_lookup=#("roughness", "hilightGlossiness", "reflectionGlossiness", "reflectionIOR", "refractionGlossiness", "refractionIOR", "translucent", "translucency") color_lookup=#("diffuse_roughness", "hilight_glossiness", "reflection_glossiness", "reflection_ior", "refraction_glossiness", "refraction_ior", "translucency_color", "translucency") vraymtl_params = getPropNames(VRayMtl) vray2sidedmtl_params = getPropNames(VRay2SidedMtl) -- Some helpers that exist in our userdata params for BRDFVRayMtl do not actually exist as 3dsmax params, so we need to set defaults or our TexCombineColor  -- may not get setup properly -- although the name is "color", in the case of float params it does expect a float default_color_names=#("opacity", "environment", "translucency") default_color_values=#( 1.0,  (Color 0 0 0 ),  (Color 0 0 0 ) ) -- This will evaluate mat.property  -- mat should be a VRayMtl instance -- property should be a string fn execVRayMtlParam mat property=( -- execute only works on global scope global execParam_current_object execParam_current_object =  mat specialParamIndex = findItem param_lookup property -- some of our params don't follow the naming protocol that others follow if specialParamIndex > 0 then( property = color_lookup[specialParamIndex]  ) propIdx = findItem vraymtl_params (property as name) if propIdx <= 0 then( return undefined ) --return execute( "execParam_current_object." + property ) return getproperty mat property ) fn execVRay2SidedMtlParam mat property=( specialParamIndex = findItem param_lookup property -- some of our params don't follow the naming protocol that others follow if specialParamIndex > 0 then( property = color_lookup[specialParamIndex]  ) propIdx = findItem vray2sidedmtl_params (property as name) if propIdx <= 0 then( return undefined ) return getproperty mat property ) -- This will return a list that contains the colorVal / floatVal, the texture, the tex mult, and the  tex on flag fn getTextureParamList mat maxParamName isColor:true=( --print "getTextureParamList START" --print mat --print (classof mat) --print maxParamName case( classof mat )of( VRayMtl:( colorVal = execVRayMtlParam mat maxParamName --print colorVal texVal = execVRayMtlParam mat ("texmap_" + maxParamName) --print texVal texOnVal = execVRayMtlParam mat ("texmap_" + maxParamName + "_on" ) texMultVal = execVRayMtlParam mat ("texmap_" + maxParamName + "_multiplier" ) ) VRay2SidedMtl:( colorVal = execVRay2SidedMtlParam mat maxParamName --print colorVal texVal = execVRay2SidedMtlParam mat ("texmap_" + maxParamName) --print texVal texOnVal = execVRay2SidedMtlParam mat ("texmap_" + maxParamName + "_on" ) texMultVal = execVRay2SidedMtlParam mat ("texmap_" + maxParamName + "_multiplier" ) ) Standardmaterial:( if maxParamName == undefined then ( colorVal = (Color 0 0 0) texVal = undefined texOnVal = undefined texMultVal = undefined ) else( colorVal = getproperty mat maxParamName texVal = getproperty mat (maxParamName + "Map") texOnVal = getproperty mat (maxParamName + "MapEnable") texMultVal = getproperty mat (maxParamName + "MapAmount") ) ) default:( ) ) -- We default to texture on as true, texture mult as 1.0 and color as black  if texOnVal == undefined then( texOnVal = true ) if texMultVal == undefined then( texMultVal = 100 ) if colorVal == undefined then ( defColorIndex = findItem default_color_names maxParamName if defColorIndex > 0 then( colorVal = default_color_values[defColorIndex] )else( format "unknown default color value for parameter \"%\"\n" maxParamName ) ) return #(colorVal, texVal, texMultVal, texOnVal ) ) -- url will be the total top-level url,  -- paramName is the name of BRDFVRayMtl parameter -- mat is the VRayMtl -- maxParamName is the name of the parameter in the 3dsmax VRayMtl  -- specify isColor:false for float parameters fn dumpColorTexHandlerParam url paramName mat maxParamName out isColor:true=( finalUrl = url + "/" + paramName paramVals = getTextureParamList mat maxParamName isColor:isColor colorVal = paramVals[1] texVal = paramVals[2] texMultVal = paramVals[3] texOnVal = paramVals[4] texUrl = undefined if texVal != undefined then( texUrl = finalUrl + "/Texture" ) dumpMap texVal finalUrl paramName out  dumpTexCombineColor finalUrl colorVal texUrl  (texMultVal as float / 100.0) texOnVal out isColor:isColor ) -- This function dumps the 4 userdata params that are plugged into a TexCombineColor. -- Generally, there will be a color/float, a texture, a texture multiplier, and a texture enable value.  -- The final parameter set will reference the TexCombineColor asset that reduces to the actual BRDFVRayMtl parameter fn dumpTextureParams parentURL baseParamName mat maxParamName out isColor:true shouldGammaCorrect:false=( texCombineColorUrl = (parentURL + "/" + baseParamName) handlerName = "" colorParamName = "" paramType = "" if isColor then( handlerName = "ColorTexFrameHandler" colorParamName = baseParamName +"_color" paramType = "acolor texture" )else( handlerName = "FloatTexFrameHandler" colorParamName = baseParamName +"_float" paramType = "float texture" ) gammaCorrectValue = undefined if shouldGammaCorrect then( gammaCorrectValue = true ) -- Our actual tex combine url make_parameter_xml baseParamName paramType texCombineColorUrl out gammaCorrect:gammaCorrectValue handler:handlerName -- the 3dsmax parameter values paramVals = getTextureParamList mat maxParamName isColor:isColor  colorVal = paramVals[1] texVal = paramVals[2] texMultVal = paramVals[3] texOnVal = paramVals[4] -- the underlying userdata params we use in our xml to store the info that will be fed to the TexCombineColor texParamName = baseParamName+ "_tex"  texMultParamName = baseParamName + "_tex_mult"  texOnParamName = baseParamName + "_tex_on" -- And the userdata params we use to setup the TexCombineColor texUrl = "" if texVal != undefined then( texUrl = (texCombineColorURL+"/Texture" ) ) dumpParam texUrl texParamName out paramType:"acolor texture" paramValue:texUrl isUserData:true handler:"TextureHandler" dumpParam (texMultVal as float / 100.0f) texMultParamName out isUserData:true  dumpParam texOnVal texOnParamName out isUserData:true  dumpParam colorVal colorParamName out isUserData:true ) fn dumpTextureParamsListVals parentURL baseParamName out listOfVals isColor:true shouldGammaCorrect:false=( texCombineColorUrl = (parentURL + "/" + baseParamName) handlerName = "" colorParamName = "" paramType = "" if isColor then( handlerName = "ColorTexFrameHandler" colorParamName = baseParamName +"_color" paramType = "acolor texture" )else( handlerName = "FloatTexFrameHandler" colorParamName = baseParamName +"_float" paramType = "float texture" ) gammaCorrectValue = undefined if shouldGammaCorrect then( gammaCorrectValue = true ) -- Our actual tex combine url make_parameter_xml baseParamName paramType texCombineColorUrl out gammaCorrect:gammaCorrectValue handler:handlerName colorVal = listOfVals[1] texVal = listOfVals[2] texMultVal = listOfVals[3] texOnVal = listOfVals[4] -- the underlying userdata params we use in our xml to store the info that will be fed to the TexCombineColor texParamName = baseParamName+ "_tex"  texMultParamName = baseParamName + "_tex_mult"  texOnParamName = baseParamName + "_tex_on" -- And the userdata params we use to setup the TexCombineColor texUrl = "" if texVal != undefined then( texUrl = (texCombineColorURL+"/Texture" ) ) dumpParam texUrl texParamName out paramType:"acolor texture" paramValue:texUrl isUserData:true handler:"TextureHandler" dumpParam texMultVal texMultParamName out isUserData:true  dumpParam texOnVal texOnParamName out isUserData:true  dumpParam colorVal colorParamName out isUserData:true ) -- This function actually writes out the Texture plugins, it needs to be called prior to serializing the owner asset -- mat is the VRayMtl to grab maps from -- parentURL is the url to use as the parent of the textures fn dumpVRayMtlTexmaps mat parentURL out isTexValOpacity:true doExportEnvironment:false=( if mat == undefined then( return undefined ) dumpColorTexHandlerParam parentURL "diffuse" mat "diffuse" out dumpColorTexHandlerParam parentURL "roughness" mat "roughness" out isColor:false dumpColorTexHandlerParam parentURL "reflect" mat "reflection" out  dumpColorTexHandlerParam parentURL "hilight_glossiness" mat "hilightGlossiness" out  isColor:false dumpColorTexHandlerParam parentURL "reflect_glossiness" mat "reflectionGlossiness" out isColor:false dumpColorTexHandlerParam parentURL "anisotropy" mat "anisotropy" out isColor:false dumpColorTexHandlerParam parentURL "anisotropy_rotation" mat "anisotropy_rotation" out isColor:false dumpColorTexHandlerParam parentURL "fresnel_ior" mat "reflectionIOR" out  isColor:false dumpColorTexHandlerParam parentURL "refract" mat "refraction" out  dumpColorTexHandlerParam parentURL "refract_glossiness" mat "refractionGlossiness" out  isColor:false dumpColorTexHandlerParam parentURL "refract_ior" mat "refractionIOR" out  isColor:false dumpColorTexHandlerParam parentURL "translucency_color" mat "translucent" out if isTexValOpacity then( dumpColorTexHandlerParam parentURL "opacity" mat "opacity" out isColor:false ) if doExportEnvironment then( dumpColorTexHandlerParam parentURL "environment_override" mat "environment" out  ) dumpUVWGenChannel parentURL mat.anisotropy_channel out uvwURL:(parentURL + "/AnisoUVWGen")  -- These would actually require separate materials they are not currently supported as vismats --.texmap_bump : texturemap --.texmap_displacement : texturemap -- maps --dumpMap mat.texmap_environment  parentURL "Environment" out     --dumpMap mat.texmap_opacity  parentURL "Opacity" out    ) -- This function fills out the parameters for the BRDFVRayMtl itself fn dumpBRDFVRayMtl mat out basemat:undefined = ( if mat == undefined then( return undefined ) local brdfURL = "" if (basemat != undefined) then ( brdfURL = "/" + basemat + "/BRDFVRayMtl" ) else ( brdfURL = "/" + mat.name + "/BRDFVRayMtl" ) -- params not in BRDFVRayMtl --.option_traceDiffuse : boolean --.effect_id : integer --.override_effect_id : boolean --.option_clampTextures : boolean texVal = execVRayMtlParam mat "texmap_opacity" texValEnvironment = execVRayMtlParam mat "texmap_environment" --print "######################dumpBRDFVRayMtl#########################" --format "material % diffuse color: % \n" mat.name mat.diffuse --format "material % diffuse texmap multiplier: % \n" mat.name mat.texmap_diffuse_multiplier --print texVal bTexVal = (texVal != undefined) bExportEnvironment = (texValEnvironment != undefined) --print bTexVal -- Need to look for texmaps and write them out before we write out our brdf dumpVRayMtlTexmaps mat brdfURL out isTexValOpacity:bTexVal doExportEnvironment:bExportEnvironment begin_asset brdfURL "BRDFVRayMtl" "BRDF" "BRDFVRayMtlLayout" out  -- reflection dumpParam mat.reflection_subdivs "reflect_subdivs" out  dumpParam mat.reflection_fresnel "fresnel" out  dumpParam mat.reflection_maxDepth "reflect_depth" out  dumpParam mat.reflection_exitColor "reflect_exit_color" out dumpParam mat.reflection_fresnel "fresnel" out  dumpParam mat.reflection_useInterpolation "refl_interpolation_on" out dumpParam mat.reflection_lockGlossiness "hilight_glossiness_lock" out  dumpParam mat.reflection_lockIOR "fresnel_ior_lock" out  dumpParam mat.reflection_dimDistance "reflect_dim_distance" out  dumpParam mat.reflection_dimDistance_on "reflect_dim_distance_on" out  dumpParam mat.reflection_dimDistance_falloff "reflect_dim_distance_falloff" out  dumpParam mat.reflection_affectAlpha "reflect_affect_alpha" out     -- refraction dumpParam mat.refraction_subdivs "refract_subdivs" out dumpParam mat.refraction_fogColor "fog_color" out  dumpParam mat.refraction_fogMult "fog_mult" out  dumpParam mat.refraction_fogBias "fog_bias" out  dumpParam mat.refraction_affectShadows "refract_affect_shadows" out  dumpParam mat.refraction_affectAlpha "refract_affect_alpha" out  dumpParam mat.refraction_maxDepth "refract_depth" out  dumpParam mat.refraction_exitColor "refract_exit_color" out  dumpParam mat.refraction_useExitColor "refract_exit_color_on" out  dumpParam mat.refraction_useInterpolation "refr_interpolation_on" out  dumpParam mat.refraction_dispersion "dispersion" out  dumpParam mat.refraction_dispersion_on "dispersion_on" out  dumpParam mat.translucency_on "translucency" out  dumpParam mat.translucency_thickness "translucency_thickness" out  dumpParam mat.translucency_scatterCoeff "translucency_scatter_coeff" out  dumpParam mat.translucency_fbCoeff "translucency_scatter_dir" out  dumpParam mat.translucency_multiplier "translucency_light_mult" out     -- brdf dumpParam mat.brdf_type "brdf_type" out dumpParam mat.anisotropy_derivation "anisotropy_derivation" out  dumpParam mat.anisotropy_axis "anisotropy_axis" out  -- we build a uvwgenchannel based on mat.anisotropy_channel in our dumpMaps function make_parameter_xml "anisotropy_uvwgen" "plugin"  (brdfURL + "/AnisoUVWGen")  out  dumpParam mat.soften "hilight_soften" out  -- options dumpParam mat.brdf_fixDarkEdges "option_fix_dark_edges" out  dumpParam mat.option_traceReflection "reflect_trace" out  dumpParam mat.option_traceRefraction "refract_trace" out  dumpParam mat.option_doubleSided "option_double_sided" out  dumpParam mat.option_reflectOnBack "option_reflect_on_back" out  dumpParam mat.option_useIrradMap "option_use_irradiance_map" out  dumpParam mat.refraction_fogUnitsScale_on "fog_unit_scale_on" out  dumpParam mat.option_cutOff "option_cutoff" out  dumpParam mat.preservationMode "option_energy_mode" out  dumpParam mat.option_environment_priority "environment_priority" out  dumpParam mat.option_traceDiffuseAndGlossy "option_glossy_rays_as_gi" out -- This is a userdata param that marks this material as 3dsmax compatible, it uses multipliers as a blend amount, not a scalar multiplier make_parameter_xml "texture_multiplier_mode" "integer" "1" out handler:"ComboBoxHandler" isUserData:true -- interpolation dumpParam mat.reflect_minRate "refl_imap_min_rate" out      dumpParam mat.reflect_maxRate "refl_imap_max_rate" out      dumpParam mat.reflect_interpSamples "refl_imap_samples" out  dumpParam mat.reflect_colorThreshold "refl_imap_color_thresh" out  dumpParam mat.reflect_normalThreshold "refl_imap_norm_thresh" out     dumpParam mat.refract_minRate "refr_imap_min_rate" out      dumpParam mat.refract_maxRate "refr_imap_max_rate" out      dumpParam mat.refract_interpSamples "refr_imap_samples" out  dumpParam mat.refract_colorThreshold "refr_imap_color_thresh" out  dumpParam mat.refract_normalThreshold "refr_imap_norm_thresh" out  -- maps   dumpTextureParams brdfURL "diffuse" mat "diffuse" out shouldGammaCorrect:true dumpTextureParams brdfURL "roughness" mat "roughness" out isColor:false dumpTextureParams brdfURL "reflect" mat "reflection" out  dumpTextureParams brdfURL "hilight_glossiness" mat "hilightGlossiness" out  isColor:false dumpTextureParams brdfURL "reflect_glossiness" mat "reflectionGlossiness" out isColor:false dumpTextureParams brdfURL "anisotropy" mat "anisotropy" out isColor:false dumpTextureParams brdfURL "anisotropy_rotation" mat "anisotropy_rotation" out isColor:false dumpTextureParams brdfURL "fresnel_ior" mat "reflectionIOR" out  isColor:false dumpTextureParams brdfURL "refract" mat "refraction" out  dumpTextureParams brdfURL "refract_glossiness" mat "refractionGlossiness" out  isColor:false dumpTextureParams brdfURL "refract_ior" mat "refractionIOR" out  isColor:false dumpTextureParams brdfURL "translucency_color" mat "translucent" out  if bTexVal then( dumpTextureParams brdfURL "opacity" mat "opacity" out isColor:false ) if bExportEnvironment then( dumpTextureParams brdfURL "environment_override" mat "environment" out shouldGammaCorrect:true ) -- The following maps would require additional material types / support that is currently not available for our material editor. We can add it in the future --.texmap_bump : texturemap --.texmap_bump_on : boolean --.texmap_bump_multiplier : float --.texmap_displacement : texturemap --.texmap_displacement_on : boolean --.texmap_displacement_multiplier : float      end_asset out return brdfURL ) fn dumpBRDFDiffuse mat out basemat:undefined =( if mat == undefined then( return undefined ) local brdfURL = "" if (basemat != undefined) then ( brdfURL = "/" + basemat + "/BRDFDiffuse" ) else ( brdfURL = "/" + mat.name + "/BRDFDiffuse" ) --print "Enter dumpBRDFDiffuse" colorVal = getproperty  mat "diffuse" --format "diffuse color: %\n" colorVal texColorVal = getproperty  mat "diffuseMap" texColorValMult = getproperty  mat "diffuseMapAmount" --format "diffuse map amount: %\n" texColorValMult texColorValOn = getproperty  mat "diffuseMapEnable" local texUrl = "" if texColorVal != undefined then( texUrl = (brdfURL+"/color/Texture") dumpMap texColorVal (brdfURL+"/color") "color_tex" out ) --dumpColorTexHandlerParam brdfURL "roughness" mat "diffuseRoughness" out isColor:false begin_asset brdfURL "BRDFDiffuse" "BRDF" "DiffuseLayer" out make_color_parameter_xml "color" colorVal out gammaCorrect:true make_parameter_xml "color_tex" "acolor texture" texUrl out gammaCorrect:true make_parameter_xml "color_tex_mult" "float" (texColorValMult as float / 100.0f) out make_color_parameter_xml "transparency" (Color 0 0 0) out gammaCorrect:true --dumpTextureParams brdfURL "roughness" mat "diffuseRoughness" out isColor:false end_asset out return brdfURL ) fn dumpMtlSingleBRDF url brdfURL out =( begin_asset url "MtlSingleBRDF" "material" "MtlSingleBRDFLayout" out make_parameter_xml "brdf" "plugin" brdfURL out  end_asset out ) fn dumpVRayMtl mat out basemat:undefined =( if mat == undefined then return undefined -- We are going to write our VRayMtl out as a BRDFVRayMtl wrapped in a MtlSingleBRDF local baseMtlURL=undefined local singleMatURL = "" if (basemat != undefined) then ( baseMtlURL = (basemat + "_" + mat.name) singleMatURL = baseMtlURL ) else ( singleMatURL = mat.name ) --open_tag "vismat" out brdfURL = dumpBRDFVRayMtl mat out basemat:baseMtlURL singleMatURL = ("/" + singleMatURL) dumpMtlSingleBRDF  singleMatURL brdfURL out  --close_tag "vismat" out return singleMatURL ) fn dumpSubMaterial mat out basemat:undefined = ( local mtlURL = undefined case( classof mat )of( VRayMtl:( local defDispl = mat.texmap_displacement local defBump = mat.texmap_bump if defDispl == undefined and defBump == undefined then( mtlURL = dumpVRayMtl mat out basemat:basemat ) else( mtlURL =dumpMtlASGVIS mat out basemat:basemat ) ) Standardmaterial:( mtlURL = dumpMtlASGVIS mat out basemat:basemat ) VRayMtlWrapper:( mtlURL = dumpVRayMtlWrapper mat out basemat:basemat ) Multimaterial:( mtlURL = dumpMultiMtl mat out basemat:basemat ) VRay2SidedMtl:( mtlURL = dumpVRay2SidedMtl mat out basemat:basemat ) default:( if ( mat != undefined ) do ( print "WARRNING!" format "Unsupported material % of class % - skipped\n" mat.name ((classof mat) as string) ) ) ) return mtlURL ) fn dumpVRay2SidedMtl mat out basemat:undefined =( if mat == undefined then return undefined local matURL = "" local baseMtlURL = undefined if (basemat != undefined) then ( if (basemat == "") then baseMtlURL = mat.name else baseMtlURL = basemat + "_" + mat.name matURL = baseMtlURL ) else ( matURL = mat.name ) local frontMaterialURL = "" case( classof mat.frontMtl )of( VRayMtl:( local defDispl = mat.frontMtl.texmap_displacement local defBump = mat.frontMtl.texmap_bump if defDispl == undefined and defBump == undefined then( frontMaterialURL = dumpVRayMtl mat.frontMtl out basemat:baseMtlURL ) else( frontMaterialURL =dumpMtlASGVIS mat.frontMtl out basemat:baseMtlURL ) ) Standardmaterial:( frontMaterialURL = dumpMtlASGVIS mat.frontMtl out basemat:baseMtlURL ) VRayMtlWrapper:( frontMaterialURL = dumpVRayMtlWrapper mat.frontMtl out basemat:baseMtlURL ) Multimaterial:( frontMaterialURL = dumpMultiMtl mat.frontMtl out basemat:baseMtlURL ) default:( if ( mat.frontMtl != undefined ) do ( print "WARRNING!" format "Unsupported front material % for VRay2SidedMtl with name % - skipped\n" mat.frontMtl.name mat.name ) ) ) local backMaterialURL = "" case( classof mat.backMtl )of( VRayMtl:( local defDispl = mat.backMtl.texmap_displacement local defBump = mat.backMtl.texmap_bump if defDispl == undefined and defBump == undefined then( backMaterialURL = dumpVRayMtl mat.backMtl out basemat:baseMtlURL ) else( backMaterialURL =dumpMtlASGVIS mat.backMtl out basemat:baseMtlURL ) ) Standardmaterial:( backMaterialURL = dumpMtlASGVIS mat.backMtl out basemat:baseMtlURL ) VRayMtlWrapper:( backMaterialURL = dumpVRayMtlWrapper mat.backMtl out basemat:baseMtlURL ) Multimaterial:( backMaterialURL = dumpMultiMtl mat.backMtl out basemat:baseMtlURL ) default:( if ( mat.backMtl != undefined ) do ( print "WARRNING!" format "Unsupported back material % for VRay2SidedMtl with name % - skipped\n" mat.backMtl.name mat.name ) ) ) matURL = ("/" + matURL) --dumpParam param paramName out paramType:undefined paramValue:undefined gammaCorrect:undefined isUserData:undefined handler:"default" --dumpTextureParams parentURL baseParamName mat maxParamName out isColor:true shouldGammaCorrect:false paramType = getParamType mat.translucency --print paramType strColorTrans = vraymax_color_to_xml_string mat.translucency --print strColorTrans finalUrl = matURL + "/translucency" texUrl = "" if mat.texmap_translucency != undefined then( texUrl = finalUrl + "/Texture" dumpMap mat.texmap_translucency finalUrl "translucency" out  ) begin_asset  matURL "Mtl2Sided" "material" "TwoSidedMatLayout" out --make_parameter_xml paramName paramType paramValue out gammaCorrect:undefined handler:"default" isUserData:undefined make_parameter_xml "front" "plugin" frontMaterialURL out handler:"MaterialPickerHandler" make_parameter_xml "back" "plugin" backMaterialURL out handler:"MaterialPickerHandler" make_color_parameter_xml "translucency" mat.translucency out make_parameter_xml "translucency_tex" "acolor texture" texUrl out make_parameter_xml "translucency_tex_mult" "float" (mat.texmap_translucency_multiplier as float / 100.0f) out dumpParam mat.force1SidedSubMtls "force_1sided" out end_asset out return matURL ) fn dumpMtlASGVIS mat out basemat:undefined =( if mat == undefined then return undefined local brdfURL=undefined local baseMtlURL=undefined local asgvismatURL = "" if (basemat != undefined) then ( baseMtlURL = (basemat + "_" + mat.name) asgvismatURL = baseMtlURL ) else ( asgvismatURL = mat.name ) local listOfBumpProps = #() case( classof mat )of( VRayMtl:( brdfURL = dumpBRDFVRayMtl mat out basemat:baseMtlURL listOfBumpProps = #("texmap_bump","texmap_bump_multiplier","texmap_bump_on") ) Standardmaterial:( brdfURL = dumpBRDFDiffuse mat out basemat:baseMtlURL listOfBumpProps = #("bumpMap","bumpMapAmount","bumpMapEnable") ) default:( format "Unsupported material % wrapped in MtlASGVIS - skipped\n" mat.name ) ) texBumpVal = getproperty  mat listOfBumpProps[1] texBumpValMult = getproperty  mat listOfBumpProps[2] texBumpValOn = getproperty  mat listOfBumpProps[3] asgvismatURL = ("/" + asgvismatURL) local bumptexUrl = "" listNormalBumpFeatures = #() if texBumpVal != undefined then ( bumptexUrl = (asgvismatURL+"/Texture") dumpMap texBumpVal asgvismatURL "bump_tex" out if (listNormalBumpFeatures.count>0 ) then ( dumpMap listNormalBumpFeatures[1] asgvismatURL "bump_tex" out ) ) --dumpParam param paramName out paramType:undefined paramValue:undefined gammaCorrect:undefined isUserData:undefined handler:"default" --dumpTextureParams parentURL baseParamName mat maxParamName out isColor:true shouldGammaCorrect:false begin_asset  asgvismatURL "MtlASGVIS" "material" "defvrmat" out --make_parameter_xml paramName paramType paramValue out gammaCorrect:undefined handler:"default" isUserData:undefined --make_list_parameter_xml paramName listType paramType listOfValues out gammaCorrect:undefined handler:"default" isUserData:undefined make_list_parameter_xml "brdfs" "plugin" "list" #(brdfURL) out if (listNormalBumpFeatures.count>0 ) then ( make_parameter_xml "bump_tex" "plugin" bumptexUrl out handler:"TextureHandler" make_parameter_xml "map_type" "integer" (listNormalBumpFeatures[4]+1) out make_parameter_xml "bump_tex_mult" "float" listNormalBumpFeatures[3] out make_bool_parameter_xml "bump_on" listNormalBumpFeatures[2] out ) else ( make_parameter_xml "bump_tex" "plugin" bumptexUrl out handler:"TextureHandler" make_parameter_xml "bump_tex_mult" "float" (texBumpValMult as float / 100.0f) out make_bool_parameter_xml "bump_on" texBumpValOn out ) end_asset out return asgvismatURL ) fn dumpVRayMtlWrapper mat out basemat:undefined =( if mat == undefined then return undefined local baseMtlURL = undefined local wrapMtlURL = "" if (basemat != undefined) then ( if (basemat == "") then baseMtlURL = mat.name else baseMtlURL = basemat + "_" + mat.name wrapMtlURL = baseMtlURL ) else ( wrapMtlURL = mat.name ) -- We are going to write our VRayMtl out as a BRDFVRayMtl wrapped in a MtlSingleBRDF --wrapMtlURL = ("/" + mat.name) --singleMatURL = ("/" + mat.baseMtl.name) --open_tag "vismat" out local brdfURL=undefined case( classof mat.baseMtl )of( VRayMtl: ( local defDispl = mat.baseMtl.texmap_displacement local defBump = mat.baseMtl.texmap_bump if defDispl == undefined and defBump == undefined then( brdfURL = dumpVRayMtl mat.baseMtl out basemat:baseMtlURL ) else( brdfURL =dumpMtlASGVIS mat.baseMtl out basemat:baseMtlURL ) ) Standardmaterial: brdfURL = dumpMtlASGVIS mat.baseMtl out basemat:baseMtlURL VRay2SidedMtl:( brdfURL = dumpVRay2SidedMtl mat.baseMtl out basemat:baseMtlURL ) Multimaterial:( brdfURL = dumpMultiMtl mat.baseMtl out basemat:baseMtlURL ) default:( if ( mat.baseMtl != undefined ) do ( print "WARRNING!" format "Unsupported base material % for VRayMtlWrapper with name % - skipped\n" mat.baseMtl.name mat.name ) ) ) wrapMtlURL = "/" + wrapMtlURL begin_asset  wrapMtlURL "MtlWrapper" "material" "MtlWrapperLayout" out make_parameter_xml "base_material" "plugin" brdfURL out handler:"MaterialPickerHandler" dumpParam mat.generateGIMult "generate_gi" out  dumpParam mat.receiveGIMult "receive_gi" out --dumpParam mat.generateCaustics "generate_caustics" out --bool/float dumpParam mat.causticsMult "receive_caustics" out dumpParam mat.matteSurface "matte_surface" out --dumpParam mat.secondaryMatte "matte_for_secondary_rays" out --bool/int dumpParam mat.alphaContribution "alpha_contribution" out dumpParam mat.matteSurface "matte_surface" out dumpParam mat.matte_shadows "shadows" out dumpParam mat.matte_shadowsAffectAlpha "affect_alpha" out dumpParam mat.matte_shadowColor "shadow_tint_color" out dumpParam mat.matte_shadowBrightness "shadow_brightness" out dumpParam mat.matte_reflectionMultiplier "reflection_amount" out dumpParam mat.matte_refractionMultiplier "refraction_amount" out dumpParam mat.matte_giMultiplier "gi_amount" out dumpParam mat.matte_noGIOnOtherMattes "no_gi_on_other_mattes" out dumpParam mat.matte_giSurfaceID "gi_surface_id" out end_asset out return wrapMtlURL )  fn dumpMultiMtl mat out basemat:undefined =( if mat == undefined then return undefined local baseMtlURL = undefined local multiMtlURL = "" if (basemat != undefined) then ( if (basemat == "") then baseMtlURL = mat.name else baseMtlURL = basemat + "_" + mat.name multiMtlURL = baseMtlURL ) else ( multiMtlURL = mat.name ) local listMtlMulti = mat.materialList local urlList = #() for i=1 to listMtlMulti.count do ( local brdfURL=undefined case( classof listMtlMulti[i] )of( VRayMtl: ( local defDispl = listMtlMulti[i].texmap_displacement local defBump = listMtlMulti[i].texmap_bump if defDispl == undefined and defBump == undefined then( brdfURL = dumpVRayMtl listMtlMulti[i] out basemat:baseMtlURL ) else( brdfURL =dumpMtlASGVIS listMtlMulti[i] out basemat:baseMtlURL ) ) Standardmaterial: brdfURL = dumpMtlASGVIS listMtlMulti[i] out basemat:baseMtlURL VRay2SidedMtl:( brdfURL = dumpVRay2SidedMtl listMtlMulti[i] out basemat:baseMtlURL ) default:( if ( listMtlMulti[i] != undefined ) do ( print "WARRNING!" format "Unsupported material % for MtlMulti with name % - skipped\n" (listMtlMulti[i]).name mat.name ) ) ) append urlList brdfURL ) multiMtlURL = "/" + multiMtlURL begin_asset  multiMtlURL "MtlMulti" "material" "MultiMatLayout" out --make_parameter_xml paramName paramType paramValue out gammaCorrect:undefined handler:"default" isUserData:undefined --make_list_parameter_xml paramName listType paramType listOfValues out gammaCorrect:undefined handler:"default" isUserData:undefined make_list_parameter_xml "ids_list" "integer" "list" mat.materialIDList out make_list_parameter_xml "mtls_list" "plugin" "list" urlList out end_asset out return multiMtlURL ) fn dumpVRayBRDFLayered mat out basemat:undefined =( if mat == undefined then return undefined local brdfLayeredURL = "" if (basemat != undefined) then ( brdfLayeredURL = basemat + "/BRDFLayered" ) else ( brdfLayeredURL = mat.name + "/BRDFLayered" ) local listCoatBlendTexMaps = mat.texmap_blend local listCoatBlendColors = mat.blend local listCoatBlendTexMultipliers = mat.texmap_blend_multiplier local paramName = "" local finalUrl = "" local texURL = "" local brdfURL = "" local urlList = #() local texURLList = #() local listCoatAvailableMtls = for availMtl in mat.coatMtl where availMtl != undefined collect availMtl for i=listCoatAvailableMtls.count to 1 by -1 do ( paramName = "texmap_blend_" + ((i-1) as string) finalUrl = "/" + brdfLayeredURL + "/" + paramName texURL = finalUrl + "/Texture" if ( listCoatBlendTexMaps[i] == undefined ) then ( dumpTexAColorFromColor texURL listCoatBlendColors[i] out append texURLList texURL ) else ( dumpMap listCoatBlendTexMaps[i] finalUrl paramName out  dumpTexCombineColor finalUrl listCoatBlendColors[i] texURL  (listCoatBlendTexMultipliers[i] as float / 100.0) true out append texURLList finalUrl ) brdfURL=dumpSubMaterial listCoatAvailableMtls[i] out basemat:basemat append urlList brdfURL ) brdfURL=dumpSubMaterial mat.baseMtl out basemat:basemat append urlList brdfURL append texURLList "" brdfLayeredURL = "/" + brdfLayeredURL begin_asset brdfLayeredURL "BRDFLayered" "BRDF" "BRDFLayeredLayout" out make_list_parameter_xml "weights" "plugin" "list" texURLList out make_list_parameter_xml "brdfs" "plugin" "list" urlList out make_bool_parameter_xml "additive_mode" mat.additiveMode out end_asset out return brdfLayeredURL ) fn dumpVRayBlendMtl mat out basemat:undefined =( if mat == undefined then return undefined -- We are going to write our VRayBlendMtl out as a BRDFLayered wrapped in a MtlSingleBRDF local baseMtlURL = undefined local singleMatURL = "" if (basemat != undefined) then ( if (basemat == "") then baseMtlURL = mat.name else baseMtlURL = basemat + "_" + mat.name singleMatURL = baseMtlURL ) else ( singleMatURL = mat.name ) local brdfURL = dumpVRayBRDFLayered mat out basemat:baseMtlURL singleMatURL = ("/" + singleMatURL) dumpMtlSingleBRDF  singleMatURL brdfURL out  return singleMatURL )   -- for now we only work on VRayMtl types fn dumpMaterials = ( saveDir = getSavePath caption:"Vismat Export Directory"  if saveDir == undefined then( return undefined ) format "Exporting scene materials...\n" for i=1 to 24 do ( m = meditmaterials[i] case( classof m )of( VRayMtl:( format "Processing %: " m.name fileName =  (saveDir + "\\" + m.name + ".vismat") format "saving vismat to %\n" fileName f = openFile fileName mode:"w" open_tag "vismat" f dumpVRayMtl m f close_tag "vismat" f flush f close f ) VRay2SidedMtl:( format "Processing %: " m.name fileName =  (saveDir + "\\" + m.name + ".vismat") format "saving vismat to %\n" fileName f = openFile fileName mode:"w" open_tag "vismat" f dumpVRay2SidedMtl m f close_tag "vismat" f flush f close f ) default:( ) ) ) format "Done\n" ) fn clearArrBitMapTxtPaths = ( arrBitMapTxtPaths = #() ) fn createBmpFilesInVismatFolder saveDir = ( if saveDir == undefined then( return undefined ) --print arrBitMapTxtPaths.count for i=1 to arrBitMapTxtPaths.count do ( bmpFile = filenamefrompath arrBitMapTxtPaths[i] --print "File name:" --print bmpFile bmpFileTargetPath = saveDir + "\\" + bmpFile --print "Target path:" --print bmpFileTargetPath --print (doesFileExist bmpFileTargetPath) if (doesFileExist bmpFileTargetPath) then deleteFile bmpFileTargetPath copyresult = copyFile arrBitMapTxtPaths[i]  bmpFileTargetPath if copyresult then format "copying the file % \n from % \n to % \n was Successfully \n" bmpFile (getFilenamePath arrBitMapTxtPaths[i]) saveDir else format "copying the file % \n from % \n to % \n was NOT Successfully \n" bmpFile (getFilenamePath arrBitMapTxtPaths[i]) saveDir ) ) fn openVismatTag f = ( open_tag "vismat" f ) fn closeVismatTag f = ( close_tag "vismat" f ) fn dumpSelectedMaterial mat f  vismatmode:undefined= ( if mat == undefined then return undefined case( classof mat )of( VRayMtl:( defDispl = mat.texmap_displacement defBump = mat.texmap_bump if defDispl == undefined and defBump == undefined then( dumpVRayMtl mat f ) else( dumpMtlASGVIS mat f ) ) VRay2SidedMtl:( if vismatmode == undefined then dumpVRay2SidedMtl mat f else dumpVRay2SidedMtl mat f basemat:"" ) VRayMtlWrapper:( if vismatmode == undefined then ( dumpVRayMtlWrapper mat f ) else dumpVRayMtlWrapper mat f basemat:"" ) Standardmaterial:( dumpMtlASGVIS mat f ) Multimaterial:( dumpMultiMtl mat f ) VRayBlendMtl:( if vismatmode == undefined then dumpVRayBlendMtl mat f else dumpVRayBlendMtl mat f basemat:"" ) default:( format "Convertion for % is not done: " mat.name format "Unknown material - skipped\n" ) ) ) macroScript ExportVismats category:"VRay"  buttontext:"Export VRMAT from scene materials" tooltip:"Exports vrmat files" ( dumpMaterials() ) fn registerMenuItems = ( if menuMan.registerMenuContext 0x67e0e9ff then( local quadMenu=menuMan.getViewportRightClickMenu #nonePressed if (quadMenu!=undefined) do ( local menu=quadMenu.getMenu 1 ) local menuIndex if (menu!=undefined) do ( menuIndex=findMenuItemIdx menu "V-Ray scene converter" appendMenuItem menu "ExportVismats" "VRay" ) ) ) --registerMenuItems() Yehat правильно написал
05.05.2017

Развёртка через Unwrap UVW в 3ds maks

Цитата DoCentttt: Мне кажется, нету смысла морочиться. Один объект - одна развертка. Всё. Если дом большой, всё равно один меш и одна развёртка. Всё зависит от того, на каком расстоянии его будут рассматривать. Ну а если сильно вблизи на него будут палить - то есть смысл разбить его на меши отдельные, раз такое дело. И у каждого меша своя текстура 4096 на 4096, к примеру. Плясать от целей нужно, а не "чтоб было". Все случаи применения для модели не учтёшь. А если на весь экран будет огромная стена - то есть ли смысл вопще использовать сабстанс? Не проще ли масками и дёртами в самом максе поиграться? На крайняк в фотошопе что-то ляпнуть. сабстанс очень гибок, в этом его фишка, что там я могу без мороки с масками навести "красоту".  Но для больших объектов он не подходит, опять же в развертку упирается. Делать на все 4к не вариант, мыло. пробовал. Будут и близкие ракурсы и дальние. Вообще если бы о последних речь шла, то плевать, все равно она не читается на расстоянии.
04.05.2017

Развёртка через Unwrap UVW в 3ds maks

тоже спрошу, т.к не понял как же все же делать.  условно есть большое здание, со множеством различных деталей, балконы, решетки и проч., крыши и части геометрии одним мешем со стенами и тд., просто разбиты на айди, где пойдет текстура стены, крыши и проч.В сабстане планирую затекстурить.Сделать единой разверткой, нереально, на выходе даже 4к не даст детализацию.Раздетачить по айди можно, но тогда детали будут без толщины и все равно та же стена на условной модели, если развернуть, то детализация будет плохая, стена то огромная того же первого этажа. Ясно что можно использовать для основных материалов тайл текстуру, но как рисовать подтеки в сабстене, узоры и проч, на что хватит фантазии. Опять же упирается в развертку, и что будет на выходе. может сумбурно написал, но думаю смысл вопроса ясен.
04.05.2017

Railclone новый плагин

Цитата xpp_nd_ruphus: ganibal 200 евро - это первоначальная покупка лицензии с годовой подпиской, продление подписки стоит 50 евро в год, а не 200 цену за продление я не писал) сам продукт 200 стоит.Может каламбурно вышло, абзацы слетают))
04.05.2017

Railclone новый плагин

200 евро он стоит, что примерно 12500руб. год, это поддержка, т.е вы сможете в течении года обновлять продукт, если вышла новая версия. Через год так же сможете им пользоваться, все будет работать. Появится новая версия, которая вас заинтересует ( какие то новые плюшки в ней) можете купить продление поддержки еще на год например.Лицензия жестко привязывается к компу, в складчину не получится.
04.05.2017

Как создать рендер модели, чтобы он прошёл модерацию?

Цитата JEKSON777: Народ, не проходит эта модель в PRO плоско смотрится, модель отличная, маты.. возможно тоже, но они не читаются из-за освещения и ракурс первой картинки неудачный. Где дом полубоком, на мой взгляд выглядит интересней. В стекла добавить отражения и поэкспериментировать со светом, появятся блики. Все это позволит проявить детали и будет поинтересней.
22.04.2017

Использование моделей на youtube

Цитата xpp_nd_ruphus: ganibal ну так ютуб то не фотосток и человек то видосы продавать не планирует я к тому что запрещено не только распространение самой модели. Цитата dvnt: Просто научно-популярные ролики. С несколькими секундами 3d анимации в каждом.   В чем проблема спросить разрешение у автора модели, если сомневаетесь? Большинству будет все равно, но кто знает что там у автора в голове.
21.04.2017

Использование моделей на youtube

Цитата xpp_nd_ruphus: dvnt правилами не запрещено, запрещено только распространение самой модели, бесплатно, или за деньги а вот и нет, где то админ отвечал, что модель можно использовать только для личных целей.не совсем то, но смысл схож: http://3ddd.ru/forum/thread/show/vopros_po_pravam_ispol_zovaniia_chuzhikh_modieliei#post976137
21.04.2017

Компьютер выключился во время работы

Да, похоже видяха коротнула, сделаете как Parik написал и будет видно
08.04.2017

На счет Авторских прав 3d моделей

Цитата Gunya_Funt: Вопрос: Возможно ли получить "страйк или посылку в суд"(или как оно называется) за использование бесплатных 3d моделей?  при желании автора, можно. модель можно использовать только для личных нужд) как это?...ну вот как то так)))подобная тема, администрация ответила, нет, даже для продажи картинки этой модели http://3ddd.ru/forum/thread/show/vopros_po_pravam_ispol_zovaniia_chuzhikh_modieliei#post976137
30.03.2017

Это развод? =)

развод или нет..да кто ж его знает, когда меня просили сделать сортир, узнавал его метраж, нюансы и выставлял на него фиксированный ценник, в 99% на этом и заканчивалось, ну или возмущения, что дорого) а мне не выгодно было его считать по метражу, возни много, выхлопа ноль.  В остальных случаях, можно хоть с кладовки начать, но свои 50-70% предоплаты за весь предполагаемый метраж, получал. С обещаниями, что после сортира будут златые горы, это к студентам))
23.03.2017

Плагин GrowFX - где скачать???

Вам нужно на оф. форуме спрашивать, а не в магазине. У меня у знакомого так лицензию заблокировали, которую он купил на работе, когда начальник на несколько компов брал. Уволился, а через какое то время все. Через знакомых узнал, что конторе трындец, а начальник видимо покупной софт перепродал, про него наверное и забыл уже давно. Тут иначе, но смысл в том, что владельцем ключа все равно будет кто то один, кто будет производить расчет, на него лицензия и даже раздав всем пароль, нет гарантии, что кто то его не сменит, а остальные в пролете. И решай потом проблему.. Ну или один накосячит, блокирнут всех. 
22.03.2017

Загрузка ЧУЖИХ или ОДИНАКОВЫХ моделей

Цитата снежнолай: Дублирую сюда. Вопрос к админам. Как это понимать?! http://3ddd.ru/3dmodels/show/3d_paniel_soliaris  вижу по сетке, что моя модель. человек просто выложил её с другим превью и вы позволяете это. Модераторы конечно разберутся, но как он мог загрузить вашу модель раньше вас?)
17.03.2017

Раскладка тротуарной плитки по криволинейной поверхности.

я бы использовал railclone, там есть функция проецировать на поверхность геометрию http://docs.itoosoft.com/display/RAILCLONE/Surface+Base+Objects
04.03.2017

Накипело.

За такие деньги вообще нужно  радоваться, что модель открывается, а тут еще какие то претензии к  накрученным сабдивам, настройкам матов и тп))) про бесплатные модели вообще молчу. Цитата Nightt: вы, если хлеб купите с крысиными хвостами, будете довольны? а чо, стоит то рублей 20-50 Хлеб щас и без хвостов не вызывает удовольствия, мягко говоря)) поэтому я ем печеньки) и пытаюсь научицца печь сама
22.02.2017

Вопрос модераторам

Доброго.Если я когда то получил статус про, соответственно для его продления на данный момент мне необходимо пройти переаттестацию прислав 1 модель которая получит ПРО, но сейчас хочу удалить часть своих моделей или допустим решил удалить вообще все, как потом, нужно будет заново получать про статус прислав 15 моделей или все останется по прежнему, т.е. пройти только переаттестацию?
19.01.2017

[Администрация] Pro-light (LT)

Цитата SPoG: В общем я так вижу ситуацию, чтобы не увеличивать список уже существующих акк про, сделали так сказать слив остальных претендентов на статус лайт, пытаются таким образом 1. увеличить продажи, за счет не увеличения списка про акк. 2. привлечь моделеров, которые будут получать деньги не получая статуса про. 3. уменьшить количество "предъяв". Главный бонус получат те кто уже со статусом про, конкуренты будут слиты в лайт. Хотя как по мне все уже изобретено. 1. мин цена на модель (достойная, все знают сколько) 2. никаких акк про. 3 все заливают и все покупают. Ну это все мечты)) Не судите строго Давно об этом говорю, в итоге, судя по тенденциям, к этому сайт и придет. Пока видимо админы боятся столь кардинальных перемен. Главное движуха на сайте есть и это радует)))
30.12.2016

Актуальные конфигурации компьютеров

подскажите пожалуйста,что нужно отрубить в биосе, чтобы частота не падала на одно ядро на мамкеASUS Z10PE-D16 WS а то остается 1 бакет и висит долго, смотрю, а частота до 1.5 падает
16.12.2016