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

менталовские фукции

Тема в разделе "Mental Ray", создана пользователем -, 19 фев 2004.

Модераторы: Alex Kras
  1. Guest

    Только начал разбиратся с менталом...поэтому сори
    за серию возможно тупых вопросов.
    Некоторые функции жестко повязаны на state структуру
    (такие как фреснел итп)
    Что если мне нужно посчитать фреснел меж двумя
    произвольными векторами?
    Забэкапить state, тупо вмешаться перезаписав state->dir, state->normal
    а потом восстановить старые значения???
    Или может есть какие более цивилизованые методы?
    Рэйтрейсовы функции например в рендермене имеют
    такую рульку как bias во избежании selfintersection...
    А как и где подобная фишка рулится в менталовских шейдерах?
    Можно ли в ментале попросить рэйтрейсовы функции
    игнорить все объекты кроме того с которого стрельнули
    рэйпробу?
     
  2. Puppet

    Puppet Активный участник

    С нами с:
    20.05.2004
    Сообщения:
    545
    Симпатии:
    17
    Баллы:
    19
    Первое, думаю на этом форуме тебе никто ничего не подскажет.
    Вообще я удивлен появлению такого вопроса здесь :)

    Второе,
    Что значит: "посчитать фреснел меж двумя произвольными векторами"?
    И что значит: "Забэкапить state, тупо вмешаться перезаписав state->dir, state->normal а потом восстановить старые значения"?
    Не совсем понятно.

    Когда трейсится луч можно обратится с самому объекту
    state->...
    обратится к объекту, который был пересечен лучем, то
    state->child->...

    Биас в рейтрейсинге это нонсанс, маразм... такое встречал только в рендермане. В ментале разумеется ничего подобного нету.

    Извеняюсь, а зачем тогда рейпроб если все объекты игнорировать?

    Напиши подробнее что ты хочешь получить.

    P.S. фреснель считается так:
    miVector dir, nrm;
    mi_point_to_camera(state, &dir, &state->point);
    mi_vector_normalize(&dir);
    mi_vector_to_camera(state, &nrm, &state->normal);
    mi_vector_normalize(&nrm);
    float r = mi_vector_dot(&dir, &nrm);
    r = -r;
    if (r < 0)
    r = 0;
    соответственно можно подставить все что душе угодно.

    Удачи.
     
  3. Guest

    Ок. Встречный вопрос...есть ли где рускоязычный форум
    где могут ответить на подобные вопросы?
    По теме:
    Для неких фэйковых целей мне нужно посчитать
    фреснел коефициент относительно нормали и вектора
    исходящщего из текущщей точки в камеру (прощще говоря (-dir))
    Но библиотечная фукция mi_fresnel_reflection
    жестко повязана на нормаль и дир.
    Поэтому пришлось сделать примерно так:

    miVector OldDir;
    miVector NewDir;
    niScalar Kr;

    OldDir = NewDir = state->dir;
    mi_vector_neg(&NewDir);
    mi_vector_normalize(&NewDir); /* не уверен...а надо ли...но на всякий случай*/
    state->dir = NewDir;
    Kr = mi_fresnel_reflection(state,1,ior);
    state->dir = OldDir;

    Это впринципе работает.

    Что хочу...пытаюсь реализовать single scattering фичу
    по Henrik Wann Jensenсовским докам.
    В процессе рэймарша по рефрактовому вектору из произвольной точки
    находящейся на этом рефрактовом векторе
    стрелять рэйпробами в направлении текущщего источника света
    с целью выщщимить координаты точки выхода из объекта и нормаль в точке выхода
    ну и естественно пройденую дистанцию.
    Тоесть меня интересует столкновение рэйпробы с внутренней стенкой самого объекта
    а все посторонние объекты мне нужно игнорить (ну малоли там чего залетело
    внутрь...или дырка в объекте и проба ушла гулять по сцене)
    На гудиньском VEX это выглядит примерно так
    string MyName = getobjectname();
    float HitDist = rayhittest(Pin,Lin,&Phit,&Nhit,bias,"scope",MyName);

    Просто как бы еще не совсем въехал в идеологию ментала
    и продожаю мыслить категориями более дружественных языков шадерайтества
    и некоторые менталовские фичи как бы совершенно в диковинку:)
     
  4. Puppet

    Puppet Активный участник

    С нами с:
    20.05.2004
    Сообщения:
    545
    Симпатии:
    17
    Баллы:
    19
    По поводу русскоязычных форумов это на вряд ли...
    Дельно могут подсказать на форуме mentalimages
    http://www.mentalimages.com/2_1_5_forum/index.html
    разумеется только на английском языке.

    К сожалению не знаком с данной докой, поэтому не совсем понятно как и чего.

    Стрелять рейпробами из произвольной точки вектора на вряд ли получится, потому что это уже относится к Volume шейдеру.

    Не знаю, функция miBoolean mi_trace_light() не подайдет?

    К сожаления я сам слабо знаком с шейдерописанием.

    P.S. А существующий шейдер скаттеринга чем не подходит или это просто спортивный интерес?
     
  5. Guest

    Хакей будем разбираться :)
    Да тут чисто спортивный интерес:)
     
  6. Anton Golovatuk

    Anton Golovatuk Знаток

    С нами с:
    15.12.2003
    Сообщения:
    20
    Симпатии:
    0
    Баллы:
    37
    привет всем , кто может дать почитать чего по менталу
    а то просто рендерю , а с шейдерами проблем, и вобще помогите кто чем может
     
  7. Guest

    увы и ах...чтива по менталу мало.
    Те 2 книжки об которых так много говорили большевики представляют собой:
    1 том - описалово менталовского движка в общих чертах...полезная книженция но не более.
    2 том - фактически распечатаный вариант менталовского мануала...
    того который идет вместе с менталом...
     
  8. Anton Golovatuk

    Anton Golovatuk Знаток

    С нами с:
    15.12.2003
    Сообщения:
    20
    Симпатии:
    0
    Баллы:
    37
    привет всем , кто может дать почитать чего по менталу
    а то просто рендерю , а с шейдерами проблем, и вобще помогите кто чем может
     
Модераторы: Alex Kras

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