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

again about texture mapping

Тема в разделе "RenderMan", создана пользователем -, 23 янв 2002.

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

    Вот мой объект -

    AttributeBegin
    Attribute "identifier" "name" [""]
    Color [ 1 1 1 ]
    Opacity [ 1 1 1 ]
    Attribute "visibility" "integer camera" [ 1 ]
    Attribute "visibility" "integer reflection" [ 1 ]
    Attribute "visibility" "integer shadow" [ 1 ]
    Sides [ 1 ]
    Surface "supertexmap"
    "string Csmapname" [ "grid.tx" ]
    "string Csproj" [ "planar" ]
    "float Csmx[16]" [ 0.055 0 0 0 0 0.055 0 0 0 0 1 0 0 0 0 1 ]
    CoordinateSystem "object"
    AttributeBegin
    геометрия
    AttributeEnd
    AttributeEnd

    Сделал текстуру: mkmip -mode clamp -resize up- ....
    смасштабировал - Csmx[16] - ....

    Получаю - http://www.rooc.com.ua/temp/render1.jpg
    вид сверху

    теперь двигаю объект -
    http://www.rooc.com.ua/temp/render2.jpg

    то бишь текстура стоит четко в начале координат, вне зависимости где объект.

    Вопросы:
    1. Как указать для текстуры локальную систему координат?
    2. Как положить текстуру планарно в XZ, ZY и так далее?
    3. Как в Shaderman'е к текстуре прицепить тип проекции и матрицу преобразования?

    К сожалению Арман еще не дочитал до нужного места :(
     
  2. Guest

    Вопросы:
    1. Как указать для текстуры локальную систему координат?

    Перенеси CoordinateSystem "object" вверх, до вызова текстуры.

    2. Как положить текстуру планарно в XZ, ZY и так далее?

    В данном случае - только через Csmx.

    3. Как в Shaderman'е к текстуре прицепить тип проекции и матрицу преобразования?

    Пока никак - ручками через s, t. В тестируемой версии есть манифолды, как в RAT'е. Я все еще не придумал, как это сделать по-человечески, и чтобы не было так сильно похоже на RAT ;-)
     
  3. Guest

    > Перенеси CoordinateSystem "object" вверх, до вызова текстуры.

    Не помогает.

    Очень жду ShaderMan'а с этим фичером, и документации :)
     
  4. Guest

    Ты б не рыбу а текст шейдера постил.
    Если я правильно понял то в данном случае преобразование в планар
    делается на основе P взятой в current (по умолчанию) или world space.
    Оттого она и плывет. Нужно предварительно трансформить P в
    object или shader space.
     
  5. Guest

    Понимаешь, я дизайнер, для меня редактировать или писать шейдер задача непростая, тем более для такой банальной задачи.
    Мне проще переложить геометрию в LightWave и сделать это тремя кликами.
    Но тем не менее я хочу разобраться.

    Вот если бы вы мне сделали шейдер(ы), а еще лучше брики для ShaderMan, которые просто по умолчанию проектируют текстуру планарно на объект, я был бы счастлив:)
     
  6. Guest

    /*---------------------------------------------------------------------------*
    * MayaPlanarMap.sl *
    * 2000/09/11 ver 1.1 *
    * Copyright (c) by Shouichi Matsubar *
    * /Shirogumi Inc/ *
    * *
    * mail to : show@annie.ne.jp *
    *---------------------------------------------------------------------------*/

    point map_proj_transform( point pos; point trans; point rot; point scal; )
    {
    point tpos;
    float x, y, z;
    float co, si, rad;
    float rx = xcomp( rot ), ry = ycomp( rot ), rz = zcomp( rot );
    /*** Translate XYZ ***/
    tpos = point(pos - trans);
    /*** Rotate Z ***/
    if ( rz != 0.0 ) {
    rad = radians( rz );
    co = cos( rad );
    si = sin( rad );
    x = xcomp( tpos );
    y = ycomp( tpos );
    setxcomp( tpos, ( x * co ) + ( y * si ) );
    setycomp( tpos, ( -x * si ) + ( y * co ) );
    }
    /*** Rotate Y ***/
    if ( ry != 0.0 ) {
    rad = radians( ry );
    co = cos( rad );
    si = sin( rad );
    x = xcomp( tpos );
    z = zcomp( tpos );
    setxcomp( tpos, ( x * co ) - ( z * si ) );
    setzcomp( tpos, ( x * si ) + ( z * co ) );
    }
    /*** Rotate X ***/
    if ( rx != 0.0 ) {
    rad = radians( rx );
    co = cos( rad );
    si = sin( rad );
    y = ycomp( tpos );
    z = zcomp( tpos );
    setycomp( tpos, ( y * co ) + ( z * si ) );
    setzcomp( tpos, ( -y * si ) + ( z * co ) );
    }
    /*** Scale XYZ ***/
    tpos = tpos / scal;
    return ( tpos );
    }

    void maya_plane_map_proj( point pos; output float uu, vv; )
    {
    uu = (xcomp( pos )+1)/2;
    vv = (-ycomp( pos )+1)/2;
    }

    surface MayaPlanarMap(
    float Ks = 1;
    float Kd = 1;
    float Ka = 0.2;
    float roughness = 0.1;
    float metalness = 0.6;
    string texname = "";
    point trans = point (0, 0, 0);
    point rot = point (0, 0, 0);
    point scal = point (1, 1, 1);
    float local = 0;
    )
    {
    vector Ni;
    normal Nf;
    float ss, tt;
    point PP;
    color cs;
    string map_space = ((local != 0)?"shader":"world");

    PP = map_proj_transform( transform(map_space, P ),
    transform("shader", trans ),
    transform("shader", rot ),
    transform("shader", scal ) );
    maya_plane_map_proj( PP, ss, tt );
    if ( texname != "" )
    cs = color texture( texname, ss, tt );
    else
    cs = Cs;
    Nf = faceforward( normalize( N ), I );
    Ni = normalize( I );
    Oi = Os;
    Ci = Os * ( ( cs * ( Ka * ambient() + Kd * diffuse(Nf)) ) +
    ( Ks * specular(Nf, -Ni, roughness))*
    ( ( cs * metalness ) + ( 1.0 - metalness ) )
    );
    }
     
  7. Guest

    Yes!!
    Оно - большое, блин, спасибо! - (http://www.mult.ru/3/)
     
Модераторы: Moderator.

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