info@arnoldrender.ru
  • Facebook
  • Google
  • Linked-in
  • Twitter
  • Vimeo
  • Youtube
Arnoldrender
  • Главная
  • Новости
  • Эксклюзивы
  • Галерея
  • Вики
  • Скачать
  • Software
  • Форум
  • Контакты

Форум

Добро пожаловать, гость 

Показать / спрятать

Добро пожаловать, гость! Для участия в форуме требуется регистрация.

Форум » Общие вопросы » Plugins » Arnold Ptex

Страниц: 1 2 3 4 >> Посл.
Автор Тема: Arnold Ptex


гость
Осваивающийся
Сообщения: 44
Arnold Ptex
 20/10/2013 19:06

Вячеслав здравствуйте вопрос к вам как программисту.
На днях собрал AiPtex.cpp наверно видели Ticket #220
в Mtoa добавил выброс Face Ids и в принципе всё работает
но при создании второй AiPtex ноды Ptex фаил почемуто берётся
из первой созданной ноды
код AiPtex.cpp

#include <stdio.h>
#include <string.h>

#include <string>
#include <iostream>

#include <ai.h>

#include <Ptexture.h>

AI_SHADER_NODE_EXPORT_METHODS(SimpleMethods);

enum SimpleParams { filename , p_filterType, p_lerp, p_sharpness, p_width, p_blur };

const char* filter_types[] = {"Point", "Bilinear", "Box", "Gaussian", "Bicubic", "Bspline", "Catmull-Rom", "Mitchell", 0};

struct CPtexDatas
{
PtexCache * cache;
PtexTexture * texture;
PtexFilter * filter;
AtCritSec mycs;
};

static CPtexDatas s_ptexData;

node_parameters
{
AiParameterSTR("filename", "");
AiParameterENUM("filterType", 0, filter_types);
AiParameterBOOL("lerp", false); // Interpolate between mipmap levels.
AiParameterFLT("sharpness", 0.0f); // Filter sharpness, 0..1 (for general bi-cubic filter only).
AiParameterFLT("width", 1.0f); // scale factor for filter width.
AiParameterFLT("blur", 0.0f); // Amount to add to filter width [0..1]
}

node_initialize
{
// FIXME : is it really necessary?
AiCritSecInit(&s_ptexData.mycs);
}

node_update
{
const char* fname = AiNodeGetStr(node, "filename");
// Do we have a name?
if (strcmp(fname,""))
{
Ptex::String error;
// We create a cache. Harcoded default value here
s_ptexData.cache = PtexCache::create( 0, 1024 * 1024 );
// We create a texture
s_ptexData.texture = s_ptexData.cache->get( fname, error );
// Do we have a texture?
if (s_ptexData.texture)
{
// What filter?
int filterTypeValue = AiNodeGetInt(node,"filterType");
PtexFilter::FilterType ptexFilterType = PtexFilter::f_point;
switch (filterTypeValue)
{
case 0: ptexFilterType = PtexFilter::f_point; break;
case 1: ptexFilterType = PtexFilter::f_bilinear; break;
case 2: ptexFilterType = PtexFilter::f_box; break;
case 3: ptexFilterType = PtexFilter::f_gaussian; break;
case 4: ptexFilterType = PtexFilter::f_bicubic; break;
case 5: ptexFilterType = PtexFilter::f_bspline; break;
case 6: ptexFilterType = PtexFilter::f_catmullrom; break;
case 7: ptexFilterType = PtexFilter::f_mitchell; break;
}
// We create a filter
float sharpness = AiNodeGetFlt(node,"sharpness");
bool lerp = AiNodeGetBool(node,"lerp");
PtexFilter::Options opts( ptexFilterType, lerp, sharpness );
s_ptexData.filter = PtexFilter::getFilter( s_ptexData.texture, opts );
}else{
std::cerr << error.c_str() << std::endl;
}
}
}

node_finish
{
// We free our texture
if (s_ptexData.texture)
{
s_ptexData.texture->release();
s_ptexData.texture = 0;
}
// We free our cache
if (s_ptexData.cache)
{
s_ptexData.cache->release();
s_ptexData.cache = 0;
}
// We free our filter
if (s_ptexData.filter)
{
s_ptexData.filter->release();
s_ptexData.filter = 0;
}
// FIXME : is it really necessary?
AiCritSecClose(&s_ptexData.mycs);
}

shader_evaluate
{
// Do we have a filter?
if ( s_ptexData.filter ){
int nchan = s_ptexData.texture->numChannels();
float* pixel = new float[nchan];
// Do we have uniform face id
AtUInt mId;
if (AiUserGetUIntFunc("ufidxs",sg,&mId)){
//
const Ptex::FaceInfo& f = s_ptexData.texture->getFaceInfo(mId);
// FIXME : is it really necessary?
AiCritSecEnter(&s_ptexData.mycs);
// We get our texel out of the ptex file filtered
float width = AiShaderEvalParamFlt(p_width);
float blur = AiShaderEvalParamFlt(p_blur);
//s_ptexData.filter->eval( pixel, 0, nchan, mId, sg->v, sg->u, sg->dudx, sg->dudy, sg->dvdx, sg->dvdy, width, blur );
s_ptexData.filter->eval( pixel, 0, nchan, mId, sg->u, sg->v, sg->dudx, sg->dudy, sg->dvdx, sg->dvdy, width, blur);
// FIXME : same here
AiCritSecLeave(&s_ptexData.mycs);
// Out color
sg->out.RGBA.r = pixel[0];
sg->out.RGBA.g = pixel[1];
sg->out.RGBA.b = pixel[2];
//sg->out.RGBA.a = pixel[3]; // FIXME : perhaps there's something more elegant to do here in the futur
}
// Free memory
delete(pixel);
}
}

node_loader
{
if (i > 0)
return FALSE;
node->methods = SimpleMethods;
node->output_type = AI_TYPE_RGB;
node->name = "aiPtex";
node->node_type = AI_NODE_SHADER;
strcpy(node->version, AI_VERSION);
return TRUE;
}
не подскажите в чём проблема буду очень благодарен



admin
Администратор
Сообщения: 583
Ответ на: Arnold Ptex
 20/10/2013 19:43

Хмм. Щас занят алембиком под Арнольд. Смогу во вторник-среду посмотреть. Но интересно. Это ты шейдер слепил? Прикольно... Я могу эту новость описать на фейсбуке в группе? Или ты сам? Как поправим твой шейдер мы можем здесь на сайте в загрузки его залить? Через месяц я планирую сайт сделать международным - вывесить его наружу. Думаю посетителей станет существенно больше. Всем будет интересно.



гость
Осваивающийся
Сообщения: 44
Ответ на: Arnold Ptex
 20/10/2013 20:05

ну вообще это от сюда https://trac.solidangle.com/mtoa/ticket/220
там просто помимо шейдера Mtoa надо пересобрать но в принципе у кого есть доступ не проблема
но если поправиш код шейдера будет круто



admin
Администратор
Сообщения: 583
Ответ на: Arnold Ptex
 20/10/2013 20:19

я скачал по твоей ссылке исходники. Но тонкость в том что тут не надо собирать МТОА. Тут нужно собрать бибилотеку PTex. Так как этот тикс датируется тремя годами ранее, возможно попробовать библиотеку OpenImageIO она в принципе птекс поддерживает. Ладно. Давай во вторник попробуем. Интересно что выйдет.



admin
Администратор
Сообщения: 583
Ответ на: Arnold Ptex
 20/10/2013 20:22

ты же видел строчки ниже:
Changed 2 years ago by chadrik

OIIO now supports ptex. it would be great if this could be used to add ptex support in a more transparent fashion.



гость
Осваивающийся
Сообщения: 44
Ответ на: Arnold Ptex
 20/10/2013 20:32

МТОА собирать надо по любому чтобы выкидывать Face Ids до момента триангуляции
в принципи могу дать правленую МТОА-0,25,2



admin
Администратор
Сообщения: 583
Ответ на: Arnold Ptex
 20/10/2013 20:33

А... Ясно почему там отдельная библиотека, Brent Burley сделал реализацию лучше:

There's other factors too. Ptex comes with its own cache, whereas OIIO tries to cache images itself too. Last i talked to Brent Burley at Disney (who are using their own custom Arnold/Ptex shader), they suspect their cache is better than OIIO's because it's, well, specially designed for Ptex. I'm inclined to use Ptex directly rather than through OIIO.



гость
Осваивающийся
Сообщения: 44
Ответ на: Arnold Ptex
 20/10/2013 20:57

Это понятно но у меня есть только такой вариант если всё таки
будет интерес старый пач конечно не работает править надо не Geometry.cpp/.h и customAttribute.py
а GeometryTranslator.cpp/.h и customShapeAttributes.py
но код шейдера посмотри пожалуйста



admin
Администратор
Сообщения: 583
Ответ на: Arnold Ptex
 20/10/2013 21:02

ок. Посмотрю.



vladimir.a-
bushinov
Администратор
Сообщения: 15
Ответ на: Arnold Ptex
 20/10/2013 23:22

besha1, если не сложно, можете скинуть ass файл(самый простой), который получается на выходе? очень хочется посмотреть на формат записи шейдера и геометрии с Ptex шейдером.

Страниц: 1 2 3 4 >> Посл.

Все права защищены 2013, логотип и торговая марка Arnold Renderer принадлежит компании SolidAngle. Логотип и торговая марка Maya принадлежит компании Autodesk. Логотип и торговая марка Houdini принадлежит компании Side Effects Software. Копирование любых печатных и визуальных материалов, размещенных на сайте без ссылки на сайт arnoldrender.ru запрещены. Дизайн и разработка: BrainyLab