Mayaには、SetRangeがありますが、自前でやる方法です。
似たような説明は省きますので、以前の記事をご参照ください。
http://takkun.nyamuuuu.net/blog/archives/category/maya/mentalray
古い範囲を、新しい範囲にする式は以下のとおりです。比率の計算です。
result = Min’ + ( ( Input – Min ) / ( Max – Min ) ) * ( Max’ – Min’ )
1)ti_FacingRatio.hと、ti_FacingRatio.cppを作成してください。
2)ti_FacingRatio.hの記述
//==============================================================================
//
// Set Range
//
//------------------------------------------------------------------------------
#include <shader.h>
#if defined __cplusplus
extern "C" {
#endif
// バージョン
#define SETRANGE_VERSION 1
// パラメータ
typedef struct setRangeParameter
{
miVector input;
miVector oldMin;
miVector oldMax;
miVector newMin;
miVector newMax;
}setRangeParameter;
// バージョン応答
DLLEXPORT int ti_SetRange_version();
// メイン
DLLEXPORT miBoolean ti_SetRange( miVector *outValue, miState *state, setRangeParameter *paras );
#if defined __cplusplus
} // extern "C"
#endif
3)ti_FacingRatio.cppの記述
//==============================================================================
//
// Set Range
//
//------------------------------------------------------------------------------
#include <math.h>
#include "ti_SetRange.h"
//==============================================================================
//
// バージョン応答
//
//------------------------------------------------------------------------------
DLLEXPORT int ti_SetRange_version( void )
{
return SETRANGE_VERSION;
}
//==============================================================================
//
// メイン
//
//------------------------------------------------------------------------------
DLLEXPORT miBoolean ti_SetRange(
miVector *outValue,
miState *state,
setRangeParameter *paras
)
{
// アトリビュートの取得
miVector input = *mi_eval_vector( ¶s->input );
miVector oldMin = *mi_eval_vector( ¶s->oldMin );
miVector oldMax = *mi_eval_vector( ¶s->oldMax );
miVector newMin = *mi_eval_vector( ¶s->newMin );
miVector newMax = *mi_eval_vector( ¶s->newMax );
// 計算
outValue->x = newMin.x + ( ( input.x - oldMin.x ) / ( oldMax.x - oldMin.x ) ) * ( newMax.x - newMin.x );
outValue->y = newMin.y + ( ( input.y - oldMin.y ) / ( oldMax.y - oldMin.y ) ) * ( newMax.y - newMin.y );
outValue->z = newMin.z + ( ( input.z - oldMin.z ) / ( oldMax.z - oldMin.z ) ) * ( newMax.z - newMin.z );
return miTRUE;
}
4)ti_FacingRatio.miの記述
declare shader
vector "ti_SetRange"
(
vector "input",
vector "oldMin", #:default 0.0 0.0 0.0
vector "oldMax", #:default 1.0 1.0 1.0
vector "newMin", #:default 0.0 0.0 0.0
vector "newMax" #:default 1.0 1.0 1.0
)
#: nodeid 123455
version 1
apply texture
end declare
プロジェクトデータ
ti_SetRange.zip
最近のコメント