/*------------------------------------------------------------ Iwa_PNPerspectiveFx PerlinNoise/SimplexNoiseパターンを生成、透視投影する ------------------------------------------------------------*/ #ifndef IWA_PN_PERSPECTIVE_H #define IWA_PN_PERSPECTIVE_H #include "tfxparam.h" #include "stdfx.h" #include "tparamset.h" struct float2 { float x, y; }; struct float3 { float x, y, z; }; struct float4 { float x, y, z, w; }; /*計算に用いるパラメータ群*/ struct PN_Params { int renderMode; int noiseType; /* 0:Perlin, 1: Simplex */ float size; /* 第1世代のノイズサイズ */ int octaves; /* 世代数 */ float2 offset; /* 第1世代のオフセット */ float p_intensity; /* 世代間の強度比 */ float p_size; /* 世代間のサイズ比 */ float p_offset; /* 世代間のオフセット比 */ float2 eyeLevel; /* 視点位置 */ int drawLevel; /* 描画範囲の下からの距離 描画を開始するスキャンライン位置 */ bool alp_rend_sw; float waveHeight; /* warpHV / フレネル反射のときのみ使う */ float fy_2; float A; float3 cam_pos; float base_fresnel_ref; /* フレネル反射のときのみ使う */ float int_sum; float a11, a12, a13; float a21, a22, a23; float time; float p_evolution; }; class Iwa_PNPerspectiveFx : public TStandardZeraryFx { FX_PLUGIN_DECLARATION(Iwa_PNPerspectiveFx) TIntEnumParamP m_renderMode; /* 描画モード - 強度 - 強度(リサンプルなし) - WarpHV用オフセット - フレネル反射 */ TIntEnumParamP m_noiseType; /* ノイズのタイプ - Perlin Noise - Simplex Noise */ TDoubleParamP m_size; /* ベースとなる大きさ */ TDoubleParamP m_evolution; /* 展開 */ TIntEnumParamP m_octaves; /* 世代数 */ TPointParamP m_offset; /* ノイズのオフセット */ TDoubleParamP m_persistance_intensity; /* 次の世代での振幅の倍率 */ TDoubleParamP m_persistance_size; /* 次の世代での波長の倍率 */ TDoubleParamP m_persistance_evolution; /* 次の世代での展開周期の倍率 */ TDoubleParamP m_persistance_offset; /* 次の世代でのオフセット距離の倍率 */ TDoubleParamP m_fov; /* カメラ画角 */ TPointParamP m_eyeLevel; /* 消失点の位置 */ TBoolParamP m_alpha_rendering; /* アルファチャンネルもノイズを与えるかどうか */ TDoubleParamP m_waveHeight; /* 波の高さ */ /* 出力結果をChannel値に変換して格納 */ template void setOutputRaster(float4 *srcMem, const RASTER dstRas, TDimensionI dim, int drawLevel, const bool alp_rend_sw); /* PerlinNoiseのパラメータを取得 */ void getPNParameters(TTile &tile, double frame, const TRenderSettings &settings, PN_Params ¶ms, TDimensionI &dimOut); /* 通常のノイズのCPU計算 */ void calcPerinNoise_CPU(float4 *out_host, TDimensionI &dimOut, PN_Params &p, bool doResample); /* WarpHVモード、Fresnel反射モード */ void calcPNNormal_CPU(float4 *out_host, TDimensionI &dimOut, PN_Params &p, bool isSubWave = false); public: Iwa_PNPerspectiveFx(); bool doGetBBox( double frame, TRectD &bBox, const TRenderSettings &info); bool canHandle( const TRenderSettings &info, double frame); void doCompute( TTile &tile, double frame, const TRenderSettings &rend_sets); void doCompute_CPU(TTile &tile, double frame, const TRenderSettings &settings, float4 *out_host, TDimensionI &dimOut, PN_Params &pnParams); void getParamUIs(TParamUIConcept *&concepts, int &length); }; #endif