1. Пользоваться форумом на планшетах и телефонах стало удобнее благодаря Tapatalk

Изменение выходного разрешения в зависимос

Тема в разделе "Общие вопросы", создана пользователем PlutDem, 21 дек 2012.

Модераторы: Артер
  1. PlutDem

    PlutDem Пользователь сайта

    С нами с:
    09.08.2012
    Сообщения:
    8
    Симпатии:
    0
    Баллы:
    2
    Здравствуйте, мне нужно отрендерить несколько разных по размеру объектов ортогональной камерой. При этом плотность пикселей должна быть одинаковой, т.е. если объект больше предыдущего в 2 раза то и разрешение будет больше в 2 раза. Сейчас я отдаляю камеру , что бы охватить весь объект и на глазок подгоняю разрешение выходного файла. Можно ли это как то автоматизировать?
     
  2. igorznag

    igorznag Знаток

    С нами с:
    23.04.2010
    Сообщения:
    1.256
    Симпатии:
    173
    Баллы:
    65
    Что означает ортогональная камера? Каким способом вы ее отдаляете?
    Предоставьте скрин (картинку), чтобы было понятнее о чем идет речь.
    Размер объектов означает размеры (Dimensions) по оси X, Y, Z, которые можно узнать с помощью Utilities > Measure?
     
  3. diwian diwian

    diwian diwian Мастер

    С нами с:
    05.06.2010
    Сообщения:
    4.742
    Симпатии:
    74
    Баллы:
    83
    А не проще ли объект "подогнать" под размер картинки с уже настроенными параметрами разрешения нажав на Zoom Extents Selected (на панели навигаций-при выделенном объекте) макс сам разместит объект в центре экрана (в любой проекции) .Естественно вид должен быть не из камеры.
     
  4. PlutDem

    PlutDem Пользователь сайта

    С нами с:
    09.08.2012
    Сообщения:
    8
    Симпатии:
    0
    Баллы:
    2
    Ортографическая

    Для примера:
    Есть ящик метр на метр при рендере получаем его изображение 100х100 пикселей.
    Есть другой ящик два на два метра и он уже не влезает в объектив камеры как первый ящик. Значит нужно изменить размер линзы, что бы он полностью влез в объектив, а также выходное разрешение в зависимости от того на сколько увеличилась площадь охватываемая камерой. В дам случае это будет 200х200 пикселей.

    В этом случае все равно придется на глазок выставлять разрешение, а нужно это делать точно.
     
  5. igorznag

    igorznag Знаток

    С нами с:
    23.04.2010
    Сообщения:
    1.256
    Симпатии:
    173
    Баллы:
    65
    Попробуйте такой способ:
    1. Вместо ортографической камеры используем вид User/Orthographic, Front, Back, Top, Bottom, Left, Right.
    2. Включаем Safe Frames (Shift+F). Подгоняем объект вручную с помощью Zoom, Zoom Region.
    3. Запускаяем скрипт. В новом окне нажимаем кнопку Apply.
    Из-за округлений, Image Aspect будет немного меняться, но если хотите, то можете добавить его в код скрипта.
    Код:
    rollout igorznag_view_rez "View rez"
    (
    button btn_apply "Apply" pos:[50,50]
    spinner sp_view_units "View units:" fieldWidth:60 range:[0, 1e9,100] pos:[5,5] type:#worldunits
    spinner sp_render_pixels "Render pixels:" fieldWidth:45 range:[1, 32768,100] pos:[5,30] type:#integer
    on btn_apply pressed do
    (
    views_array=#(#view_iso_user,#view_top,#view_bottom,#view_right,#view_left,#view_front,#view_back)
    vt=viewport.getType()
    if(finditem views_array vt !=0)then
    (
    dsf=displaySafeFrames; displaySafeFrames=true; completeRedraw();
    asp_res=(renderWidth as float)/renderHeight
    view_width=(getViewSize())[1]
    view_height=(getViewSize())[2]
    screen_center=[view_width/2,view_height/2]
    asp_view=(view_width as float)/view_height
    if(asp_res<asp_view)then view_width=view_height*asp_res
    if(asp_res>asp_view)then view_height=view_width/asp_res
    screen_p1=screen_center-[view_width/2,view_height/2]
    screen_p2=screen_center+[view_width/2,view_height/2]
    p1=mapScreenToView screen_p1 0
    p2=mapScreenToView screen_p2 0
    world_width=abs(p2.x-p1.x); 
    world_height=abs(p2.y-p1.y)
    if(sp_view_units.value!=0)then
    (
    asp_pixels_units=(sp_render_pixels.value as float)/sp_view_units.value
    rw=ceil (world_width*asp_pixels_units)
    rh=ceil (world_height*asp_pixels_units)
    if(rw>0 and rw<32768 and rh>0 and rh<32768)then
    (renderWidth=rw; renderHeight=rh)
    )--if(sp_view_units.value!=0)then
    displaySafeFrames=dsf; completeRedraw()
    renderSceneDialog.update()
    )--if(finditem views_array vt !=0)then
    )--on btn_apply pressed do
    ); createDialog igorznag_view_rez 140 80
    Чтобы запустить скрипт нужно:
    1. Создаем текстовый файл (NotePad) и копируем код (текст) скрипта.
    2. Сохраняем текстовый файл с названием "test.ms"
    3. В главное меню MaxScript выбираем пункт Run Script. Выбираем файл "test.ms"
     
Модераторы: Артер

Поделиться этой страницей