Quantcast
Channel: ポリめりMMD
Viewing all articles
Browse latest Browse all 1308

【*MMD*】.-ColorShift collection-.

$
0
0

今回はMMDエフェクトColorShiftの

パラメータでカラーバリエーションを

作ってみるお話です。





< ColorShiftとは>


色ずれ効果を表現するエフェクトです。

ColorShift(そぼろ様)


MMDに適用するとモデル輪郭線エッ

ジの周りにRGBに色分解された線が

描画されます。





- 色ずれエフェクトColorShift適用例 -




113gradationb109-2AEdotharfmeri200-2.png




モデルの髪の毛や目元、メガネなど

輪郭が赤・ピンク・黃・黄緑・水色・青

で描画されてるところが色ずれエフェ

クト適用箇所です。



他のエフェクトと組み合わせれば

3色分解したRGBの一部の色のみ

指定した部位にだけ描画するコトも

可能です。





- 色ずれエフェクト+他エフェクト -




113gradationb109-2AEdotharfmeri200.png




色ずれエフェクトは適用すると全体に

効果が出てしまう為、エフェクト効果

解除Excludeやエフェクト合成M4

Layer(0:通常)と併用すると使い

勝手がよくなります。


MMD画像作成で使う機会の多

い色ずれエフェクトColorShift

ですが、エフェクトFXファイルの

パラメータで色指定出来るか試し

てみました。




<ColorShift collection>



①basic

return float4(R,G,B,1);



[ColorShift.fx記述内容]


////////////////////////////////////////////////////////////////////////////////////////////////
// ユーザーパラメータ

//ずれ範囲
float Extent
<
string UIName = "Extent";
string UIWidget = "Slider";
bool UIVisible = true;
float UIMin = 0.00;
float UIMax = 0.01;
> = float( 0.007 );

//ずれ方向
float2 VecR = float2(0, 1);
float2 VecG = float2(1, -1);
float2 VecB = float2(-1, -1);

//背景色
float4 ClearColor
<
string UIName = "ClearColor";
string UIWidget = "Color";
bool UIVisible = true;
> = float4(0,0,0,0);

///////////////////////////////////////////////////////////////////////////////////


float Script : STANDARDSGLOBAL <
string ScriptOutput = "color";
string ScriptClass = "scene";
string ScriptOrder = "postprocess";
> = 0.8;


// マテリアル色
float4 MaterialDiffuse : DIFFUSE < string Object = "Geometry"; >;
static float alpha1 = MaterialDiffuse.a;

float scaling0 : CONTROLOBJECT < string name = "(self)"; >;
static float scaling = scaling0 * 0.1;

// スクリーンサイズ
float2 ViewportSize : VIEWPORTPIXELSIZE;

static float2 ViewportOffset = (float2(0.5,0.5)/ViewportSize);

static float2 SampStep = (float2(Extent,Extent)/ViewportSize*ViewportSize.y) * scaling;

// レンダリングターゲットのクリア値
float ClearDepth = 1.0;

// 深度バッファ
texture2D DepthBuffer : RENDERDEPTHSTENCILTARGET <
float2 ViewPortRatio = {1.0,1.0};
string Format = "D24S8";
>;

// オリジナルの描画結果を記録するためのレンダーターゲット
texture2D ScnMap : RENDERCOLORTARGET <
float2 ViewPortRatio = {1.0,1.0};
int MipLevels = 1;
string Format = "A8R8G8B8" ;
>;
sampler2D ScnSamp = sampler_state {
texture = <ScnMap>;
MinFilter = LINEAR;
MagFilter = LINEAR;
MipFilter = NONE;
AddressU = CLAMP;
AddressV = CLAMP;
};

////////////////////////////////////////////////////////////////////////////////////////////////
// 共通頂点シェーダ
struct VS_OUTPUT {
float4 Pos : POSITION;
float2 Tex : TEXCOORD0;
};

VS_OUTPUT VS_passDraw( float4 Pos : POSITION, float4 Tex : TEXCOORD0 ) {
VS_OUTPUT Out = (VS_OUTPUT)0;

Out.Pos = Pos;
Out.Tex = Tex + ViewportOffset;

return Out;
}

////////////////////////////////////////////////////////////////////////////////////////////////
// 色ずれ

float4 PS_ColorShift( float2 Tex: TEXCOORD0 ) : COLOR {
float R = tex2D( ScnSamp, Tex + (VecR * Extent * scaling) ).r;
float G = tex2D( ScnSamp, Tex + (VecG * Extent * scaling) ).g;
float B = tex2D( ScnSamp, Tex + (VecB * Extent * scaling) ).b;

return float4(R,G,B,1);
}


////////////////////////////////////////////////////////////////////////////////////////////////

technique ColorShift <
string Script =

"RenderColorTarget0=ScnMap;"
"RenderDepthStencilTarget=DepthBuffer;"
"ClearSetColor=ClearColor;"
"ClearSetDepth=ClearDepth;"
"Clear=Color;"
"Clear=Depth;"
"ScriptExternal=Color;"

"RenderColorTarget0=;"
"RenderDepthStencilTarget=;"
"ClearSetColor=ClearColor;"
"ClearSetDepth=ClearDepth;"
"Clear=Color;"
"Clear=Depth;"
"Pass=ColorShiftPass;"
;

> {
pass ColorShiftPass < string Script= "Draw=Buffer;"; > {
AlphaBlendEnable = FALSE;
VertexShader = compile vs_2_0 VS_passDraw();
PixelShader = compile ps_2_0 PS_ColorShift();
}
}
////////////////////////////////////////////////////////////////////////////////////////////////

------ココまで--------



→パラメータ変更は99行目の1行を

変更するだけと時間もかからないので

いくつかバリエーションを作ってます。





②red-light blue


→99行目: return float4(R,B,B,1);




113gradationb109-3AEdotharfmeri200.png




本来G(緑)の値が入るところを

B(青)に変更すると赤系と水色

の2色になりました。

R→R、G→B、B→B


(他のエフェクトとの兼ね合いで同じ

パラメータでも見た目の結果が変わ

る場合もあります。)


この色は3D立体視用アナグリフ

画像にわりと近い色かなと思います。






③pink-green


→ return float4(R,B,G,1);




113gradationb109-4AEdotharfmeri200.png




G(緑)とB(青)を入れ替えすると

ピンクが目立つようになりました。

R→R、G→B、B→G


色ずれエフェクトColorShiftは

重ねがけしていくと色ずれのズレ

幅が広がっていきます。

アクセサリ操作のSi値でもズレの

大きさを変更出来ます。




④purple-green


→return float4(G,B,R,1);




113gradationb109-5AEdotharfmeri200.png




RGBの順番全て入れ替えで先ほどより

紫がかった色合いです。

R→G、G→B、B→G


そう言えばめりに紫はあまり使わない

かも、、

この色は赤と青の中間でどっちつかず

な面に野暮ったさが出る気がして好き

な色ですが自分はうまく使いこなせな

いですね。





⑤yellow-blue


→return float4(R,R,B,1);




113gradationb109-6AEdotharfmeri200.png




G(緑)をR(赤)にチェンジで黃青の

2色カラーリングです。

R→R、G→R、B→B


次は同じ2色の反転バージョンに

なってます。





⑥blue-yellow


→return float4(B,B,G,1);




113gradationb109-7AEdotharfmeri200.png




RGB全て入れ替わりでR→B、G→B、

B→Gの変化で青黃2色となりました。

メインとサブの色交換だけでも雰囲気

変わりますね。



あと4パターン残ってますが、ココか

らは色ずれエフェクト複数適用も

紹介していきたいと思います。





⑦ ⑥blue-yellow+light blue-pink


→1番目  return float4(B,B,G,1);

 2番目  return float4(B,G,R,1);




113gradationb109-8AEdotharfmeri200.png




最初に⑥を適用して次にR→B、G→G、

B→Rに変更したlight blue-pinkを

読み込んだ結果が上の画像です。


こうして異なるパラメータ同士掛け

あわせてどうなるか予測がつかな

いのも面白いですね。





⑧blue


→return float4(0.1*R,0.1*G,B,1);




113gradationb109-9AEdotharfmeri200.png




これまでと趣向を変えてRGBそれぞれの

強さを変更したケースです。

R×0.1、G×0.1、Bと言う事で赤と緑を

減らした設定にすると画面全体が暗くなり

青で塗りつぶされます。

(上のサンプル画像は背景変更してます。)


発色はクリアでなかなかよさげですが

色調補正や着色と違いあくまでも色

ずれ効果であるというところがポイント

ですかね。




⑨gray


→return float4(R,R,R,1);




113gradationb109-10AEdotharfmeri200.png




RGBを全て単一色で指定すると無彩色

になりましたね。

R→R、G→R、B→R



次で最後です。

ラストは複数重ねバージョンその2

みたいなカンジです。




⑩mix color


→1番目  return float4(R,R,R,1); ⑨

 2番目   return float4(R,G,B,1); ①

 3番目   return float4(G,B,R,1); ④

 4番目   return float4(R,B,G,1); ③




113gradationb109-11AEdotharfmeri200.png




色々足してみたらこうなったという

見本です。

スフィアの入った髪の毛のハイライト

に乗せてあげると発光してる風蛍光

色表現になって幻想的なイメージも

出せますね。



なんでこんな実験をしたかの理由は

そもそも色ずれ表示される色の黃と

緑ナシにしたい、ところから始まって

ます。


RGBではGが黄と緑なのでGを置き

替えてみてそれでも黄と緑が出て

しまうのでRGBの組み合わせを

増やしていったらバリエーションぽ

くなりました。



今回作った中で画像としていいな

と思ったのは⑦でしたが、プリセット

がこれだけストック出来たので他の

に関しても今後活用していきたいと

考えてます。




長めの記事になっちゃいましたね、

お疲れ様でした。





113gradationb105mix2d-2d0-8-3.png







Viewing all articles
Browse latest Browse all 1308

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>