Сообщения | Дата |
---|
Актуальные конфигурации компьютеров
Цитата 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 |
Цитата xpp_nd_ruphus:
ganibal 200 евро - это первоначальная покупка лицензии с годовой подпиской, продление подписки стоит 50 евро в год, а не 200
цену за продление я не писал) сам продукт 200 стоит.Может каламбурно вышло, абзацы слетают))
| 04.05.2017 |
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 |