<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>AEP Project &#187; TUTORIALS</title>
	<atom:link href="http://ae-users.com/jp/category/tutorials/feed/" rel="self" type="application/rss+xml" />
	<link>http://ae-users.com/jp</link>
	<description>After Effects ユーザーコミュニティ</description>
	<lastBuildDate>Tue, 27 Jul 2010 09:38:56 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<image>
  <link>http://ae-users.com/jp</link>
  <url>http://ae-users.com/jp/../images/icon_32.png</url>
  <title>AEP Project</title>
</image>
		<item>
		<title>RGB2CMY</title>
		<link>http://ae-users.com/jp/resources/2010/07/rgb2cmy/</link>
		<comments>http://ae-users.com/jp/resources/2010/07/rgb2cmy/#comments</comments>
		<pubDate>Tue, 06 Jul 2010 08:25:52 +0000</pubDate>
		<dc:creator>t_e_t_s_u_o</dc:creator>
				<category><![CDATA[RESOURCES]]></category>
		<category><![CDATA[TUTORIALS]]></category>

		<guid isPermaLink="false">http://ae-users.com/jp/?p=4819</guid>
		<description><![CDATA[
RGB分離して、スクリーン合成すると元に戻りますが、今回はRGBをCMYにして、乗算合成して元に戻す方法についてです

CMYはRGBの補色ということなのですが、色を反転するだけではなく、明るさも反転しないとただの反転 [...]]]></description>
			<content:encoded><![CDATA[<p>
RGB分離して、スクリーン合成すると元に戻りますが、今回はRGBをCMYにして、乗算合成して元に戻す方法についてです<br />
<br />
CMYはRGBの補色ということなのですが、色を反転するだけではなく、明るさも反転しないとただの反転になってしまいます。<br />
<br />
ここでチャンネルコンバイナーを使用してまずはRをCに変えます。<br />
チャンネルコンバイナーの変更オプションを赤にして、ターゲットを明度のみに、その下の反転スイッチをONにします<br />
これで赤の明るさの逆ができたので、この白部分をシアンにすればいいことになります。<br />
方法はなんでもいいのですが、ここではUnmultを使用して、明るさからアルファチャンネルを作成して、シアンで塗りつぶしてみます。<br />
Unmultがない場合はチャンネルコンバイナーでも明るさからアルファを作れるので、もう一度チャンネルコンバイナーを適用して、変更オプションを明度、ターゲットをアルファのみにしてもいいと思います<br />
またはシアン平面を作成して、ルミナンスマットしてもいいと思います。<br />
<img src="http://ae-users.com/jp/wp-content/uploads/2010/07/CMY_02.png" alt="" title="CMY_02" width="334" height="380" class="alignleft size-full wp-image-4824" />
<img src="http://ae-users.com/jp/wp-content/uploads/2010/07/CMY_C.png" alt="" title="CMY_C" width="300" height="300" class="alignleft size-full wp-image-4828" />
<hr /><br />
このようにして残りのGからM、BからYを作成します。<br />
<br />
最後に3つをまとめて乗算合成します。<br />
白平面を作成して一番下に配置すると、元通りになっていると思います。<br />
<br />
印刷っぽくしたければ、CMYそれぞれのコンポ内で網点を作成するなどすれば、それっぽくなるかも。<br />
調整は難しいかもしれませんが、いろいろ試してみてください～<br />
<img src="http://ae-users.com/jp/wp-content/uploads/2010/07/CMY_dot.png" alt="" title="CMY_dot" width="500" height="500" class="alignleft size-full wp-image-4822" />
<hr /><br />
このCMYは厳密に印刷の色にはならないので注意してください。あくまでも雰囲気です<br />
<object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/b07VLpKFClA&#038;fs=1" /><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><embed src="http://www.youtube.com/v/b07VLpKFClA&#038;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object><br />
<hr /><br />
サンプルプロジェクトはAE7.0<br />
プラグインはUnmult、Formを使用しています<br />
<br />
<a class="dl" href="http://ae-users.com/jp/wp-content/uploads/2010/07/RGB2CMY.zip">ダウンロード</a><br />
<br />
<br />
</p>
この投稿にタグはありません。タグはどなたでも追加出来ます！<span id="addbt">[<a onclick="jQuery('p#addtags').slideDown('fast');jQuery('#addbt').fadeOut('fast');">タグを追加する</a>]</span>
	<h4>関連する投稿</h4>
	<ul class="st-related-posts">
	<li>関連する投稿は見つかりませんでした。</li>
	</ul>

]]></content:encoded>
			<wfw:commentRss>http://ae-users.com/jp/resources/2010/07/rgb2cmy/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>エクスプレッションでつくるロゴデザイン「LogoTransform」</title>
		<link>http://ae-users.com/jp/tips/2010/07/%e3%82%a8%e3%82%af%e3%82%b9%e3%83%97%e3%83%ac%e3%83%83%e3%82%b7%e3%83%a7%e3%83%b3%e3%81%a7%e3%81%a4%e3%81%8f%e3%82%8b%e3%83%ad%e3%82%b4%e3%83%87%e3%82%b6%e3%82%a4%e3%83%b3%e3%80%8clogotransform/</link>
		<comments>http://ae-users.com/jp/tips/2010/07/%e3%82%a8%e3%82%af%e3%82%b9%e3%83%97%e3%83%ac%e3%83%83%e3%82%b7%e3%83%a7%e3%83%b3%e3%81%a7%e3%81%a4%e3%81%8f%e3%82%8b%e3%83%ad%e3%82%b4%e3%83%87%e3%82%b6%e3%82%a4%e3%83%b3%e3%80%8clogotransform/#comments</comments>
		<pubDate>Sat, 03 Jul 2010 16:24:58 +0000</pubDate>
		<dc:creator>Toyo</dc:creator>
				<category><![CDATA[RESOURCES]]></category>
		<category><![CDATA[TIPS 全般]]></category>
		<category><![CDATA[TUTORIALS]]></category>
		<category><![CDATA[エクスプレッション]]></category>
		<category><![CDATA[エフェクト]]></category>

		<guid isPermaLink="false">http://ae-users.com/jp/?p=4788</guid>
		<description><![CDATA[ロゴを変形させるエフェクトの紹介です。エクスプレッション製ですので、改変等自由に行えます。]]></description>
			<content:encoded><![CDATA[<p>
<a href="http://ae-users.com/jp/wp-content/uploads/2010/07/c87657c554bba34604b1ce8f70794d62.png" class="sb-img" rel="shadowbox[post-4788];player=img;"><img src="http://ae-users.com/jp/wp-content/uploads/2010/07/c87657c554bba34604b1ce8f70794d62-650x406.png" alt="" width="650" height="406" class="alignnone size-large wp-image-4789" /></a><br />
<br />
<object width="400" height="300"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=12986370&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=12986370&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="300"></embed></object><br /><br />
お久しぶりです。とよです。<br />
今回は、ロゴがバラバラの状態から徐々に組み上がって行く演出をする為のエフェクトを、<br />
エクスプレッションを使用して作ってみました。<br />
具体的な使い方および、エクスプレッションの解説はニコニコ動画上で行っています。<br />
アカウントをお持ちでない方もいらっしゃると思うので、<br />
動画を貼付けたブログのURLを貼っておきます。<br />
<br />
<a href="http://toa-cinematograph.blogspot.com/2010/07/logotransform.html">ブログ：cinema+graph</a><br />
<br />
ダウンロードファイルはアニメーションプリセットのデータです。<br />
AEのプリセットフォルダに入れてください。CS４環境で制作しています。<br />
<a class="dl" href='http://ae-users.com/jp/wp-content/uploads/2010/07/LogoTransform.zip'>LogoTransform</a><br />
</p>

	タグ : <a href="http://ae-users.com/jp/tag/%e3%82%a8%e3%82%af%e3%82%b9%e3%83%97%e3%83%ac%e3%83%83%e3%82%b7%e3%83%a7%e3%83%b3/" title="エクスプレッション" rel="tag nofollow">エクスプレッション</a>, <a href="http://ae-users.com/jp/tag/%e3%82%a8%e3%83%95%e3%82%a7%e3%82%af%e3%83%88/" title="エフェクト" rel="tag nofollow">エフェクト</a><span id="addbt">[<a onclick="jQuery('p#addtags').slideDown('fast');jQuery('#addbt').fadeOut('fast');">タグを追加する</a>]</span><br />

	<h4>関連する投稿</h4>
	<ul class="st-related-posts">
	<li><a href="http://ae-users.com/jp/resources/2010/05/%e7%94%bb%e9%9d%a2%e3%81%ab%e9%9b%a8%e7%b2%92%e3%81%8c%e5%bd%93%e3%81%9f%e3%82%8b%e8%a1%a8%e7%8f%be/" title="画面に雨粒が当たる表現 (2010/5月/28)">画面に雨粒が当たる表現</a> (3)</li>
	<li><a href="http://ae-users.com/jp/tips/2009/04/%e3%82%a8%e3%82%af%e3%82%b9%e3%83%97%e3%83%ac%e3%83%83%e3%82%b7%e3%83%a7%e3%83%b3%e5%88%b6%e5%be%a1%e3%81%ae%e7%b5%90%e5%90%88/" title="エクスプレッション制御の結合 (2009/4月/16)">エクスプレッション制御の結合</a> (5)</li>
	<li><a href="http://ae-users.com/jp/tips/2010/04/%e3%82%a8%e3%82%af%e3%82%b9%e3%83%97%e3%83%ac%e3%83%83%e3%82%b7%e3%83%a7%e3%83%b3%e3%81%a7%e3%81%a4%e3%81%8f%e3%82%8b%e6%8c%af%e5%8b%95%e3%82%a8%e3%83%95%e3%82%a7%e3%82%af%e3%83%88%e3%80%8cpuyo/" title="エクスプレッションでつくる振動エフェクト「Puyo」 (2010/4月/16)">エクスプレッションでつくる振動エフェクト「Puyo」</a> (14)</li>
	<li><a href="http://ae-users.com/jp/resources/2009/12/%e8%8b%b1%e8%aa%9e%e7%89%88%e3%82%a8%e3%83%95%e3%82%a7%e3%82%af%e3%83%88%e5%90%8d%e3%82%92%e6%97%a5%e6%9c%ac%e8%aa%9e%e7%89%88%e3%81%a7%e4%bd%bf%e7%94%a8/" title="英語版エフェクト名を日本語版で使用するプリセット集 (2009/12月/28)">英語版エフェクト名を日本語版で使用するプリセット集</a> (12)</li>
	<li><a href="http://ae-users.com/jp/tips/2010/05/%e6%89%8b%e4%bb%98%e3%81%91%e3%81%a7%e3%81%af%e7%b5%b6%e5%af%be%e3%81%ab%e4%bd%9c%e3%82%8a%e3%81%9f%e3%81%8f%e3%81%aa%e3%81%84%e5%8b%95%e7%94%bb/" title="手付けでは絶対に作りたくない動画 (2010/5月/27)">手付けでは絶対に作りたくない動画</a> (11)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://ae-users.com/jp/tips/2010/07/%e3%82%a8%e3%82%af%e3%82%b9%e3%83%97%e3%83%ac%e3%83%83%e3%82%b7%e3%83%a7%e3%83%b3%e3%81%a7%e3%81%a4%e3%81%8f%e3%82%8b%e3%83%ad%e3%82%b4%e3%83%87%e3%82%b6%e3%82%a4%e3%83%b3%e3%80%8clogotransform/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>アニメ制作者のためのAfterEffectsプラグイン作成入門(第６回)　Effectプラグインの構造・ユーザーインターフェース</title>
		<link>http://ae-users.com/jp/resources/2010/06/%e3%82%a2%e3%83%8b%e3%83%a1%e5%88%b6%e4%bd%9c%e8%80%85%e3%81%ae%e3%81%9f%e3%82%81%e3%81%aeaftereffects%e3%83%97%e3%83%a9%e3%82%b0%e3%82%a4%e3%83%b3%e4%bd%9c%e6%88%90%e5%85%a5%e9%96%80%e7%ac%ac-7/</link>
		<comments>http://ae-users.com/jp/resources/2010/06/%e3%82%a2%e3%83%8b%e3%83%a1%e5%88%b6%e4%bd%9c%e8%80%85%e3%81%ae%e3%81%9f%e3%82%81%e3%81%aeaftereffects%e3%83%97%e3%83%a9%e3%82%b0%e3%82%a4%e3%83%b3%e4%bd%9c%e6%88%90%e5%85%a5%e9%96%80%e7%ac%ac-7/#comments</comments>
		<pubDate>Sat, 12 Jun 2010 16:18:16 +0000</pubDate>
		<dc:creator>bry-ful</dc:creator>
				<category><![CDATA[RESOURCES]]></category>
		<category><![CDATA[TUTORIALS]]></category>
		<category><![CDATA[program]]></category>
		<category><![CDATA[プラグイン]]></category>

		<guid isPermaLink="false">http://ae-users.com/jp/?p=4661</guid>
		<description><![CDATA[
Effectプラグイン
今回はEffectプラグインについて解説します。
第２回の投稿でEffectプラグインの概要を説明していますので、まずそれに目を通しておいてください。今回はその補足的な内容になり、主にエフェクト [...]]]></description>
			<content:encoded><![CDATA[<p>
<h4>Effectプラグイン</h4>
今回はEffectプラグインについて解説します。<br />
第２回の投稿でEffectプラグインの概要を説明していますので、まずそれに目を通しておいてください。今回はその補足的な内容になり、主にエフェクトコントロールに表示されるインターフェースについてがメインとなります。<br />
<h4>EventCheckプラグイン</h4>
Effectプラグインは最初に<strong>EntryPointFunc</strong>関数が呼び出され、引数のセレクタ(PF_Cmd)によって処理を分岐させて実行します。この詳細はドキュメントに説明されていますが、あまり実感できなかったので、それを確認するプラグインを作成してみました。<br />
<br />
EventCheckのダウンロード<br />
<a class="dl" href="http://bry-ful.ddo.jp/BRY/software/ap/06/EventCheck.zip">EventCheck.zipのダウンロード</a><br />
<br />
このプラグインは特に解説することはありません。単純にセレクタ毎にダイアログに最低限の情報を表示するだけのエフェクトです。ソースも入っていますが、とりあえず<strong>EventCheck-MT.aex</strong>をインストールして動作を確認してみてください。<br />
Effectプラグインの各イベントがどのようなタイミングで発生しているか体感できます（滅茶苦茶うっとおしいので、体感できたらアンインストールしましょう）<br />
<br />
ダイアログの表示はWindows APIを直接呼び出して表示しています。<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/06/eventcheck.png" class="sb-img" rel="shadowbox[post-4661];player=img;"><img class="aligncenter size-full wp-image-4668" src="http://ae-users.com/jp/wp-content/uploads/2010/06/eventcheck.png" alt="" width="281" height="245" /></a><br />
<br />
<strong>out_flags</strong>に<strong>PF_OutFlag_I_DO_DIALOG</strong>を設定してありますので、エフェクトコントロールに<strong>オプション</strong>がっ表示されています。<strong>PF_Cmd_DO_DIALOG</strong>セレクタでダイアログを表示させれば、オプションダイアログを表示できます。僕はDebug時変数の表示とかさせるときによく使ってます。<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/06/eventcheck02.png" class="sb-img" rel="shadowbox[post-4661];player=img;"><img class="aligncenter size-full wp-image-4669" src="http://ae-users.com/jp/wp-content/uploads/2010/06/eventcheck02.png" alt="" width="338" height="79" /></a><br />
<br />
このプラグインを登録した状態でAfter Effectsをいろいろ操作していると、思いがけないタイミングでいろいろなイベントがプラグインに発生してることが体感できます。<br />
<br />
極稀に、登録した後エフェクトコントロールから削除してもイベントが発生し続ける事があります。流石にプロジェクト自体を新たに作成すればイベントはなくなりますが、キャシュのタイミングはなかなか予測しづらいので困ります。<br />
<h4>エフェクトコントロール</h4>
エフェクトコントロールに表示されるインターフェースは、<strong>ParamsSetup</strong>で設定します。<br />
<br />
インターフェースの構築はプラットホーム依存があり、Windows APIを直接呼び出さないといけない事やコールバック関数を多用しないといけないこともありかなり難易度が高いです。そのためSDKでは簡単に作成できるように基本となるコントロールが用意されています。<br />
<br />
<strong>Param_Utils.h</strong>でマクロ定義されていて、実際には<strong>add_param</strong>コールバック関数を呼び出すことで実装されています。これらを使えば、Windows/Macintosh両方で使えるコントロールが容易に使うことができます。<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/06/control00.png" class="sb-img" rel="shadowbox[post-4661];player=img;"><img class="aligncenter size-full wp-image-4674" src="http://ae-users.com/jp/wp-content/uploads/2010/06/control00.png" alt="" width="331" height="247" /></a><br />
<br />
サンプルとして第３回で作成した<strong>スケルトン</strong>を使います。上の図は<strong>MySkeleton.aex</strong>のエフェクトコントロールで、今回説明するコントロールがすべて設定されています。<br />
また、プログラマが自由にインターフェースを作成出来るカスタムコントロールもSDKには用意されていますが、かなり複雑でWindows/Macで別のコードを作成する必要があります。今回カスタムコントロールの作成には触れません（僕自身作ったことがないので^^;）<br />
<h4>PF_ADD_COLOR</h4>
色を指定するコントロールを登録します。カラーピッカーを表示させたり、スポイトで色を拾う事ができます。<br />
<strong>Param_Utils.h</strong>で定義されたこれらのマクロは、<strong>PF_ParamDef	 def</strong>構造体変数を内部で使用しています。def変数は使いまわすので、AEFX_CLR_STRUCTマクロで毎回初期化します。<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/06/control01_color.png" class="sb-img" rel="shadowbox[post-4661];player=img;"><img class="aligncenter size-full wp-image-4675" src="http://ae-users.com/jp/wp-content/uploads/2010/06/control01_color.png" alt="" width="326" height="116" /></a><br />
<table border="1">
<tbody>
<tr>
<th>引数ナンバー</th>
<th>型</th>
<th>説明</th>
</tr>
<tr>
<td>第１引数</td>
<td>char配列(文字列)</td>
<td>表示されるキャプション文字列</td>
</tr>
<tr>
<td>第２引数</td>
<td>A_char</td>
<td>デフォルトの色のR値</td>
</tr>
<tr>
<td>第３引数</td>
<td>A_char</td>
<td>デフォルトの色のG値</td>
</tr>
<tr>
<td>第４引数</td>
<td>A_char</td>
<td>デフォルトの色のB値</td>
</tr>
<tr>
<td>第５引数</td>
<td>A_long</td>
<td>パラメータコントロールのインデックス値</td>
</tr>
</tbody>
</table>
ここの色はPF_Pixel(8bit)カラーになります。残念ながらPF_Pixel16(16bit)カラーのパラメータを扱う方法は不明です。一部のプラグインで実装している物がありますが、多分カスタムパラメータを独自に作成しているのだと思われます。<br />
まぁ、現在のところディスプレイが24bitのものしか表示できないのでPF_Pixel16(16bit)カラー無駄っぽいです。<br />
<br />
パラメータの獲得はRender関数で以下のように行います。<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/06/control01_color_get.gif" class="sb-img" rel="shadowbox[post-4661];player=img;"><img class="aligncenter size-full wp-image-4684" src="http://ae-users.com/jp/wp-content/uploads/2010/06/control01_color_get.gif" alt="" width="399" height="30" /></a><br />
<br />
params配列には、ParamSetupで登録された順番でパラメータの値がありますので、同じインデックス値を指定して構造体のメンバから値を取り出します。<br />
<h4>PF_ADD_SLIDER</h4>
整数値を指定するスライダを表示するコントロールを登録します。<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/06/control02_slider.png" class="sb-img" rel="shadowbox[post-4661];player=img;"><img class="aligncenter size-full wp-image-4678" src="http://ae-users.com/jp/wp-content/uploads/2010/06/control02_slider.png" alt="" width="430" height="144" /></a><br />
<table border="1">
<tbody>
<tr>
<th>引数ナンバー</th>
<th>型</th>
<th>説明</th>
</tr>
<tr>
<td>第１引数</td>
<td>char配列(文字列)</td>
<td>表示されるキャプション文字列</td>
</tr>
<tr>
<td>第２引数</td>
<td>A_long</td>
<td>数値入力する場合の最小値</td>
</tr>
<tr>
<td>第３引数</td>
<td>A_long</td>
<td>数値入力する場合の最大値</td>
</tr>
<tr>
<td>第４引数</td>
<td>A_long</td>
<td>スライダーでの最小値</td>
</tr>
<tr>
<td>第５引数</td>
<td>A_long</td>
<td>スライダーでの最大値</td>
</tr>
<tr>
<td>第６引数</td>
<td>A_long</td>
<td>デフォルトの値</td>
</tr>
<tr>
<td>第７引数</td>
<td>A_long</td>
<td>パラメータコントロールのインデックス値</td>
</tr>
</tbody>
</table>
整数値の範囲は、-32000から32000の間になります。型をA_longとしてますが、内部的にはPF_Fixedで処理されているらしくA_shortになります。範囲外の数値は無視されるようです。<br />
<br />
パラメータの獲得は以下のとおりです。<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/06/control02_slide_get.gif" class="sb-img" rel="shadowbox[post-4661];player=img;"><img class="aligncenter size-full wp-image-4697" src="http://ae-users.com/jp/wp-content/uploads/2010/06/control02_slide_get.gif" alt="" width="378" height="39" /></a><br />
<h4>PF_ADD_FIXED</h4>
固定小数を指定するコントロールを登録します。<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/06/control03_fixed.png" class="sb-img" rel="shadowbox[post-4661];player=img;"><img class="aligncenter size-full wp-image-4683" src="http://ae-users.com/jp/wp-content/uploads/2010/06/control03_fixed.png" alt="" width="429" height="190" /></a><br />
<table border="1">
<tbody>
<tr>
<th>引数ナンバー</th>
<th>型</th>
<th>説明</th>
</tr>
<tr>
<td>第１引数</td>
<td>char配列(文字列)</td>
<td>表示されるキャプション文字列</td>
</tr>
<tr>
<td>第２引数</td>
<td>double</td>
<td>数値入力する場合の最小値</td>
</tr>
<tr>
<td>第３引数</td>
<td>double</td>
<td>数値入力する場合の最大値</td>
</tr>
<tr>
<td>第４引数</td>
<td>double</td>
<td>スライダーでの最小値</td>
</tr>
<tr>
<td>第５引数</td>
<td>double</td>
<td>スライダーでの最大値</td>
</tr>
<tr>
<td>第６引数</td>
<td>double</td>
<td>デフォルトの値</td>
</tr>
<tr>
<td>第７引数</td>
<td>A_long</td>
<td>表示される小数部の桁数</td>
</tr>
<tr>
<td>第８引数</td>
<td>A_long</td>
<td>１で％を表示する</td>
</tr>
<tr>
<td>第９引数</td>
<td>A_long</td>
<td>不明</td>
</tr>
<tr>
<td>第１０引数</td>
<td>A_long</td>
<td>パラメータコントロールのインデックス値</td>
</tr>
</tbody>
</table>
引数はdouble扱いですが、内部でPF_Fixed(A_long)へ変換されています。<br />
<br />
パラメータの獲得は以下のとおりです。<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/06/control03_fixed_get.gif" class="sb-img" rel="shadowbox[post-4661];player=img;"><img class="aligncenter size-full wp-image-4698" src="http://ae-users.com/jp/wp-content/uploads/2010/06/control03_fixed_get.gif" alt="" width="384" height="35" /></a><br />
<h4>PF_ADD_PERCENT</h4>
パーセントを指定するコントロールを登録します。実際は<strong>PF_ADD_FIXED</strong>と同じものです。<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/06/control04_per.gif" class="sb-img" rel="shadowbox[post-4661];player=img;"><img class="aligncenter size-full wp-image-4699" src="http://ae-users.com/jp/wp-content/uploads/2010/06/control04_per.gif" alt="" width="296" height="101" /></a><br />
<table border="1">
<tbody>
<tr>
<th>引数ナンバー</th>
<th>型</th>
<th>説明</th>
</tr>
<tr>
<td>第１引数</td>
<td>char配列(文字列)</td>
<td>表示されるキャプション文字列</td>
</tr>
<tr>
<td>第２引数</td>
<td>double</td>
<td>デフォルトの値</td>
</tr>
<tr>
<td>第３引数</td>
<td>A_long</td>
<td>パラメータコントロールのインデックス値</td>
</tr>
</tbody>
</table>
パラメータの獲得方法は<strong>PF_ADD_FIXED</strong>と同じです。<br />
<h4>PF_ADD_CHECKBOX</h4>
チェックボックスを登録します。<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/06/control04_cb1.gif" class="sb-img" rel="shadowbox[post-4661];player=img;"><img class="aligncenter size-full wp-image-4713" src="http://ae-users.com/jp/wp-content/uploads/2010/06/control04_cb1.gif" alt="" width="220" height="137" /></a><br />
<table border="1">
<tbody>
<tr>
<th>引数ナンバー</th>
<th>型</th>
<th>説明</th>
</tr>
<tr>
<td>第１引数</td>
<td>char配列(文字列)</td>
<td>表示されるキャプション文字列</td>
</tr>
<tr>
<td>第２引数</td>
<td>char配列(文字列)</td>
<td>チェックボックスのキャプションの文字列</td>
</tr>
<tr>
<td>第３引数</td>
<td>PF_Boolean</td>
<td>デフォルトの値。TRUEでON</td>
</tr>
<tr>
<td>第４引数</td>
<td>A_long</td>
<td>不明</td>
</tr>
<tr>
<td>第５引数</td>
<td>A_long</td>
<td>パラメータコントロールのインデックス値</td>
</tr>
</tbody>
</table>
パラメータの獲得は以下のとおりです。<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/06/control04_cb_get.gif" class="sb-img" rel="shadowbox[post-4661];player=img;"><img class="aligncenter size-full wp-image-4707" src="http://ae-users.com/jp/wp-content/uploads/2010/06/control04_cb_get.gif" alt="" width="454" height="37" /></a><br />
<br />
何故か型キャストをしないとエラーになります。<br />
<h4>PF_ADD_ANGLE</h4>
角度入力のUIを登録します。<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/06/control05_rot.gif" class="sb-img" rel="shadowbox[post-4661];player=img;"><img class="aligncenter size-full wp-image-4716" src="http://ae-users.com/jp/wp-content/uploads/2010/06/control05_rot.gif" alt="" width="252" height="97" /></a><br />
<table border="1">
<tbody>
<tr>
<th>引数ナンバー</th>
<th>型</th>
<th>説明</th>
</tr>
<tr>
<td>第１引数</td>
<td>char配列(文字列)</td>
<td>表示されるキャプション文字列</td>
</tr>
<tr>
<td>第２引数</td>
<td>PF_Fixed</td>
<td>デフォルトの値。TRUEでON</td>
</tr>
<tr>
<td>第３引数</td>
<td>A_long</td>
<td>パラメータコントロールのインデックス値</td>
</tr>
</tbody>
</table>
パラメータの獲得は以下のとおりです。<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/06/control05_rot_get.gif" class="sb-img" rel="shadowbox[post-4661];player=img;"><img class="aligncenter size-full wp-image-4719" src="http://ae-users.com/jp/wp-content/uploads/2010/06/control05_rot_get.gif" alt="" width="386" height="35" /></a><br />
<br />
型はPF_Fixedの値となっています。<br />
<h4>PF_ADD_POPUP</h4>
ポップアップメニューを登録します。<br />
<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/06/control06_pop.gif" class="sb-img" rel="shadowbox[post-4661];player=img;"><img class="aligncenter size-full wp-image-4720" src="http://ae-users.com/jp/wp-content/uploads/2010/06/control06_pop.gif" alt="" width="361" height="116" /></a><br />
<table border="1">
<tbody>
<tr>
<th>引数ナンバー</th>
<th>型</th>
<th>説明</th>
</tr>
<tr>
<td>第１引数</td>
<td>char配列(文字列)</td>
<td>表示されるキャプション文字列</td>
</tr>
<tr>
<td>第２引数</td>
<td>A_long</td>
<td>ポップアップメニューの要素数</td>
</tr>
<tr>
<td>第３引数</td>
<td>A_long</td>
<td>ポップアップメニューのデフォルト値</td>
</tr>
<tr>
<td>第４引数</td>
<td>char配列(文字列)</td>
<td>ポップアップメニューに表示される文字列</td>
</tr>
<tr>
<td>第５引数</td>
<td>A_long</td>
<td>パラメータコントロールのインデックス値</td>
</tr>
</tbody>
</table>
第４引数は”AAAA|BBBB|CCC&#8221;といった表記になります。第３引数は、１から始まるインデックスになります。<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/06/control06_pop2.gif" class="sb-img" rel="shadowbox[post-4661];player=img;"><img class="aligncenter size-full wp-image-4721" src="http://ae-users.com/jp/wp-content/uploads/2010/06/control06_pop2.gif" alt="" width="258" height="56" /></a><br />
<br />
獲得は以下のとおりです。<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/06/control06_pop_get.gif" class="sb-img" rel="shadowbox[post-4661];player=img;"><img class="aligncenter size-full wp-image-4722" src="http://ae-users.com/jp/wp-content/uploads/2010/06/control06_pop_get.gif" alt="" width="392" height="39" /></a><br />
<br />
これも１から始まるインデックス値となります。<br />
<h4>PF_ADD_POINT</h4>
位置指定のUIを登録します。<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/06/control07_pos.gif" class="sb-img" rel="shadowbox[post-4661];player=img;"><img class="aligncenter size-full wp-image-4723" src="http://ae-users.com/jp/wp-content/uploads/2010/06/control07_pos.gif" alt="" width="458" height="121" /></a><br />
<table border="1">
<tbody>
<tr>
<th>引数ナンバー</th>
<th>型</th>
<th>説明</th>
</tr>
<tr>
<td>第１引数</td>
<td>char配列(文字列)</td>
<td>表示されるキャプション文字列</td>
</tr>
<tr>
<td>第２引数</td>
<td>PF_Fixed</td>
<td>デフォルト位置のX座標をパーセントで指定</td>
</tr>
<tr>
<td>第３引数</td>
<td>PF_Fixed</td>
<td>デフォルト位置のY座標をパーセントで指定</td>
</tr>
<tr>
<td>第４引数</td>
<td>PF_Boolean</td>
<td>パラメータの値を画面内に収めるか、画面外を許すか決めるフラグ。 TRUEで画面内に収まる。</td>
</tr>
<tr>
<td>第５引数</td>
<td>A_long</td>
<td>パラメータコントロールのインデックス値</td>
</tr>
</tbody>
</table>
獲得は以下のとおりです。<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/06/control07_pos_get.gif" class="sb-img" rel="shadowbox[post-4661];player=img;"><img class="aligncenter size-full wp-image-4724" src="http://ae-users.com/jp/wp-content/uploads/2010/06/control07_pos_get.gif" alt="" width="405" height="57" /></a><br />
<br />
値はPF_Fixed(固定小数)なので注意してください。位置を決めるピッカーは、画面が拡大表示されている場合は小数有りで値が帰ってきます。<br />
<h4>PF_ADD_TOPIC / PF_END_TOPIC</h4>
コントロールをグループ表示するマクロです。<strong>PF_ADD_TOPIC</strong>と<strong>PF_END_TOPIC</strong>に挟まれて登録されたUIはグループ化しされて、表示・非表示を切り替えられます。<br />
<br />
グループ開始は以下のように登録します。<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/06/control08_topic.gif" class="sb-img" rel="shadowbox[post-4661];player=img;"><img class="aligncenter size-full wp-image-4725" src="http://ae-users.com/jp/wp-content/uploads/2010/06/control08_topic.gif" alt="" width="337" height="101" /></a><br />
<br />
グループ終了は以下のように登録します。<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/06/control08_topic_end.gif" class="sb-img" rel="shadowbox[post-4661];player=img;"><img class="aligncenter size-full wp-image-4726" src="http://ae-users.com/jp/wp-content/uploads/2010/06/control08_topic_end.gif" alt="" width="271" height="55" /></a><br />
<br />
このマクロにはパラメータがありませんので、獲得はないです。<br />
<h4>エクスプレッション制御</h4>
Effectプラグインの中でちょっと変わったもので<strong>エクスプレッション制御</strong>関係のプラグインがあります（標準プラグイン）<br />
これらは画像エフェクトは無く、ただエクスプレッション用のパラメータを実装するためだけのプラグインです。<br />
<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/06/exctrl.png" class="sb-img" rel="shadowbox[post-4661];player=img;"><img src="http://ae-users.com/jp/wp-content/uploads/2010/06/exctrl.png" alt="" width="372" height="106" class="aligncenter size-full wp-image-4731" /></a><br />
<br />
今まで僕はこのプラグインはout_flagsかコールバック関数を使って画面描画を停止した特別なプラグインだと思っていました。今回調べてわかったのですが、実はしっかりRenderイベントが発生していて、描画用のoutput画像が確保されているようです。ちゃんと32bit描画まで対応してました。<br />
このプラグインは単純に画像のコピー(PF_COPYかな）を行うプラグインに適当な入力パラメータを登録したもので<strong>普通のEffectプラグイン</strong>でした。<br />
<br />
描画対象のレイヤにこのプラグインを登録すると、描画時に無駄なメモリが消費されるって意味でもあります。<br />
ヌルレイヤか、ガイドレイヤに登録しないとかなりもったいないというか、レンダリング時に不安定な動作を起こす原因にも成りかねません(実際はキャッシュの関係でそこまでは深刻でないと思いますけど）<br />
<hr /><br />
エクスプレッション制御関係のプラグインがただのEffectプラグインならば、多分初心者が一番作りやすく、有効な使い道に出来るネタになります。<br />
スクリプトを作成する時に一番面倒なのがユーザーインターフェースで、エクスプレッション制御を多用しがちですが、汎用コントロール故に結構使いづらかったので、そこをプラグインで作っておけば、使用時に楽になるかなぁとか。<br />
というわけで、エクスプレッション制御のプラグインとして <strong>ColorControls</strong>と<strong>画面動制御</strong>の二つのサンプルプラグインを作ってみました。<br />
<h4>エクスプレッション制御を作る ColorControls</h4>
<strong>ColorControls</strong>は、複数のカラーパラメータをもったプラグインです。標準の「カラー制御」を１０個並べた物と同じ機能になります。<br />
<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/06/colorcontrols.png" class="sb-img" rel="shadowbox[post-4661];player=img;"><img src="http://ae-users.com/jp/wp-content/uploads/2010/06/colorcontrols.png" alt="" width="387" height="315" class="aligncenter size-full wp-image-4732" /></a><br />
<br />
スクリプト作成時に色の置き場に使えるものです。おまけで画面に色をサンプル表示する機能もつけてあります。<br />
さすがに簡単なプラグインなので説明はなしで、詳細はソースを参照してください。<br />
<br />
ColorControlsのソース<br />
<a class="dl" href="http://bry-ful.ddo.jp/BRY/software/ap/06/ColorControls.zip">ColorControls.zipのダウンロード</a><br />
<h4>エクスプレッション制御を作る 画面動制御 ShakeControl</h4>
<strong>画面動制御</strong>プラグインは、スクリプトで画面動を実装するときに必要なパラメータをまとめたものです。専用なのでユーザーが使い易くなると思います。<br />
 <a href="http://ae-users.com/jp/wp-content/uploads/2010/06/shakecontrol.png" class="sb-img" rel="shadowbox[post-4661];player=img;"><img src="http://ae-users.com/jp/wp-content/uploads/2010/06/shakecontrol.png" alt="" width="378" height="243" class="aligncenter size-full wp-image-4739" /></a><br />
<br />
これも簡単なプラグインなので、詳細はソースを参照してください。ただ、そのままビルドすると問題が発生します。<br />
画面動制御のソース<br />
<a class="dl" href="http://bry-ful.ddo.jp/BRY/software/ap/06/ShakeControl.zip">ShakeControl.zipのダウンロード</a><br />
<h4>プラグインの日本語表示</h4>
<strong>画面動制御</strong>プラグインは、僕がほとんどやらない日本語表示のプラグインです。単純に、PiPLリソース定義ファイルのName要素を<strong>&#8220;画面動制御&#8221;</strong>にしただけですが、普通にビルドすると下図のように文字化けが発生します。<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/06/shakecontrol_miss.png" class="sb-img" rel="shadowbox[post-4661];player=img;"><img src="http://ae-users.com/jp/wp-content/uploads/2010/06/shakecontrol_miss.png" alt="" width="381" height="187" class="aligncenter size-full wp-image-4744" /></a><br />
<br />
cppのコードから設定したパラメータの文字列は正常ですが、PiPLリソース関係の文字列はすべて文字化けします。<br />
原因はリソース作成時に使うPiPLtool.exeが日本語に対応していないというとっても素敵な物です。こいつのおかげでプラグイン作成を挫折した人はかなり多そうです。<br />
ビルドを行ってから、VSのソリューションに登録されているｒｃファイルを右クリックしてコード表示させると、<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/06/rc_miss.gif" class="sb-img" rel="shadowbox[post-4661];player=img;"><img src="http://ae-users.com/jp/wp-content/uploads/2010/06/rc_miss.gif" alt="" width="295" height="321" class="aligncenter size-full wp-image-4745" /></a><br />
<br />
見事に文字化けしています。<br />
<br />
対処はちょっと面倒ですが可能です。以下の手順で正常に日本語を表示させることができます。<br />
<ol>
<li>まず、リビルドを行う。<br />
rファイルに定義されているコマンドラインでrcファイルを更新させます。<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/06/sc01.png" class="sb-img" rel="shadowbox[post-4661];player=img;"><img src="http://ae-users.com/jp/wp-content/uploads/2010/06/sc01.png" alt="" width="286" height="79" class="aligncenter size-full wp-image-4746" /></a><br />
</li>
<li>ｒｃファイルを右クリックしてコードの表示。<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/06/sc02.png" class="sb-img" rel="shadowbox[post-4661];player=img;"><img src="http://ae-users.com/jp/wp-content/uploads/2010/06/sc02.png" alt="" width="407" height="135" class="aligncenter size-full wp-image-4748" /></a><br />
</li>
<li>文字化している箇所を特定して、正常な物に書き換える。<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/06/sc03.png" class="sb-img" rel="shadowbox[post-4661];player=img;"><img src="http://ae-users.com/jp/wp-content/uploads/2010/06/sc03.png" alt="" width="188" height="33" class="aligncenter size-full wp-image-4749" /></a><br />
<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/06/sc04.png" class="sb-img" rel="shadowbox[post-4661];player=img;"><img src="http://ae-users.com/jp/wp-content/uploads/2010/06/sc04.png" alt="" width="184" height="34" class="aligncenter size-full wp-image-4750" /></a><br />
<br />
目安として文字列の先頭に&#8221;￥ｘ０？&#8221;という文字があり、末尾には&#8221;￥０&#8221;が０個から３個あるはずなので、その間を書き換えます。<br />
</li>
<li>ビルドを行う。(リビルドではない。間違えてリビルドしたら最初からやり直し)<br />
rcファイルのみが更新されているので、それのみがビルドされてaexファイルが出力される。<br />
</li>
</ol>
<br />
これで文字化けは治るはずですが、リビルドするとまたもとに戻ってしまうので注意が必要です。<br />
<h4>PiPltoolX.exe</h4>
上記の手順があまりにも面倒なので、PiPLtool.exeと同様な機能を持つコマンドを作成しました。<br />
<br />
PiPltoolX.exeのダウンロード (実行には.NetFramework3.5のインストールが必要)<br />
<a class="dl" href="http://bry-ful.ddo.jp/BRY/software/ap/06/PiPltoolX.zip">PiPltoolX.zipのダウンロード</a><br />
PiPltoolX.exeのソースのダウンロード(VC# 2008で作成 )<br />
<a class="dl" href="http://bry-ful.ddo.jp/BRY/software/ap/06/PiPltoolX_src.zip">PiPltoolX_src.zipのダウンロード</a><br />
<br />
使い方は、PiPLtool.exeと同じフォルダに移動します（Examples\Resourcesフォルダ）<br />
次に、日本語表示を行いたいリソース定義ファイルをVC++のIDEで右クリック。プロパティのカスタムビルドステップ：コマンドラインの項目を表示させます。<br />
<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/06/PiPLx.png" class="sb-img" rel="shadowbox[post-4661];player=img;"><img src="http://ae-users.com/jp/wp-content/uploads/2010/06/PiPLx.png" alt="" width="562" height="298" class="alignnone size-full wp-image-4765" /></a><br />
<br />
このコマンドラインでPiPLToolが指定されているので、これをPiPLToolXに修正すれば、あとは普通にリビルドすればOKになります。<br />
<br />
あと、<strong>PiPLToolX.exe</strong>はリソース定義のすべてには対応していませんので注意してください。日本語表示を行わない限りはなるべく標準のPiPLTool.exeを使用してください。<br />
<h4>PixelReplace.aex　/ PixelSelector.aex</h4>
今回これだけだと寂しいのでパラメータインターフェースのサンプルとして<strong>PixelReplace.aex</strong>と<strong>PixelSelector.aex</strong>も作成しました。<br />
<br />
PixelReplaceはF&#8217;s ColorChangeと同じ機能、PixelSelectorはF&#8217;s SelectColorと同じ機能を持つものです。違いは入力系のコーディングを工夫してパラメータの数を自由に出来るようにしたものです。<br />
ターゲットの色が８色から２４色へ増やしています。若干ですが実行速度も最適化してあります。置き換える色の不透明度もいじれるようにもしてあります。<br />
<br />
プログラム自体はこれも簡単なものなのでソースを参照してください。<br />
<br />
PixelReplace<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/06/PixelReplace.png" class="sb-img" rel="shadowbox[post-4661];player=img;"><img src="http://ae-users.com/jp/wp-content/uploads/2010/06/PixelReplace.png" alt="" width="437" height="545" class="alignnone size-full wp-image-4776" /></a><br />
PixelReplaceのダウンロード<br />
<a class="dl" href="http://bry-ful.ddo.jp/BRY/software/ap/06/PixelReplace.zip">PixelReplace.zipのダウンロード</a><br />
<br />
<br />
PixelSelector<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/06/PixelSelector.png" class="sb-img" rel="shadowbox[post-4661];player=img;"><img src="http://ae-users.com/jp/wp-content/uploads/2010/06/PixelSelector.png" alt="" width="328" height="338" class="alignnone size-full wp-image-4777" /></a><br />
PixelSelectorのダウンロード<br />
<a class="dl" href="http://bry-ful.ddo.jp/BRY/software/ap/06/PixelSelector.zip">PixelSelector.zipのダウンロード</a><br />
<br />
この二つはもう少し修正してF&#8217;s Pluginに加える予定です。実は上のサンプルコードは既に16Bit対応は完了したものになってますので、普通に業務に使えるはずです。<br />
<h4>次回予告</h4>
前回・前々回と難しめな内容だったので、今回は簡単な内容にしてみました。その分解説も端折りました。もしもっと詳しい解説が欲しいと要望があれば、追加説明もするつもりです。<br />
<br />
予定していた「Effectsプラグインのユーザーインターフェース」は今回でやってしまったので、次回は<strong>「プラグイン作成時のTips」</strong>です。</p>

	タグ : <a href="http://ae-users.com/jp/tag/program/" title="program" rel="tag nofollow">program</a>, <a href="http://ae-users.com/jp/tag/%e3%83%97%e3%83%a9%e3%82%b0%e3%82%a4%e3%83%b3/" title="プラグイン" rel="tag nofollow">プラグイン</a><span id="addbt">[<a onclick="jQuery('p#addtags').slideDown('fast');jQuery('#addbt').fadeOut('fast');">タグを追加する</a>]</span><br />

	<h4>関連する投稿</h4>
	<ul class="st-related-posts">
	<li><a href="http://ae-users.com/jp/resources/2010/06/%e3%82%a2%e3%83%8b%e3%83%a1%e5%88%b6%e4%bd%9c%e8%80%85%e3%81%ae%e3%81%9f%e3%82%81%e3%81%aeaftereffects%e3%83%97%e3%83%a9%e3%82%b0%e3%82%a4%e3%83%b3%e4%bd%9c%e6%88%90%e5%85%a5%e9%96%80%e7%ac%ac-6/" title="アニメ制作者のためのAfterEffectsプラグイン作成入門(第５回)　スパッタリングプラグインを作成 (2010/6月/04)">アニメ制作者のためのAfterEffectsプラグイン作成入門(第５回)　スパッタリングプラグインを作成</a> (13)</li>
	<li><a href="http://ae-users.com/jp/resources/2010/05/%e3%82%a2%e3%83%8b%e3%83%a1%e5%88%b6%e4%bd%9c%e8%80%85%e3%81%ae%e3%81%9f%e3%82%81%e3%81%aeaftereffects%e3%83%97%e3%83%a9%e3%82%b0%e3%82%a4%e3%83%b3%e4%bd%9c%e6%88%90%e5%85%a5%e9%96%80%e7%ac%ac-5/" title="アニメ制作者のためのAfterEffectsプラグイン作成入門(第４回)　オリジナルノイズフィルタを作ってみよう！ (2010/5月/23)">アニメ制作者のためのAfterEffectsプラグイン作成入門(第４回)　オリジナルノイズフィルタを作ってみよう！</a> (5)</li>
	<li><a href="http://ae-users.com/jp/resources/2010/05/%e3%82%a2%e3%83%8b%e3%83%a1%e5%88%b6%e4%bd%9c%e8%80%85%e3%81%ae%e3%81%9f%e3%82%81%e3%81%aeaftereffects%e3%83%97%e3%83%a9%e3%82%b0%e3%82%a4%e3%83%b3%e4%bd%9c%e6%88%90%e5%85%a5%e9%96%80%e7%ac%ac-3/" title="アニメ制作者のためのAfterEffectsプラグイン作成入門(第２回)　とりあえず作ってみよう！ (2010/5月/09)">アニメ制作者のためのAfterEffectsプラグイン作成入門(第２回)　とりあえず作ってみよう！</a> (6)</li>
	<li><a href="http://ae-users.com/jp/tutorials/2010/05/%e3%82%a2%e3%83%8b%e3%83%a1%e5%88%b6%e4%bd%9c%e8%80%85%e3%81%ae%e3%81%9f%e3%82%81%e3%81%aeaftereffects%e3%83%97%e3%83%a9%e3%82%b0%e3%82%a4%e3%83%b3%e4%bd%9c%e6%88%90%e5%85%a5%e9%96%80%e7%ac%ac-2/" title="アニメ制作者のためのAfterEffectsプラグイン作成入門(第１回)　SDKをコンパイルしてみよう! (2010/5月/05)">アニメ制作者のためのAfterEffectsプラグイン作成入門(第１回)　SDKをコンパイルしてみよう!</a> (8)</li>
	<li><a href="http://ae-users.com/jp/tutorials/2010/05/%e3%82%a2%e3%83%8b%e3%83%a1%e5%88%b6%e4%bd%9c%e8%80%85%e3%81%ae%e3%81%9f%e3%82%81%e3%81%aeaftereffects%e3%83%97%e3%83%a9%e3%82%b0%e3%82%a4%e3%83%b3%e4%bd%9c%e6%88%90%e5%85%a5%e9%96%80%e7%ac%ac/" title="アニメ制作者のためのAfterEffectsプラグイン作成入門(第０回) (2010/5月/05)">アニメ制作者のためのAfterEffectsプラグイン作成入門(第０回)</a> (10)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://ae-users.com/jp/resources/2010/06/%e3%82%a2%e3%83%8b%e3%83%a1%e5%88%b6%e4%bd%9c%e8%80%85%e3%81%ae%e3%81%9f%e3%82%81%e3%81%aeaftereffects%e3%83%97%e3%83%a9%e3%82%b0%e3%82%a4%e3%83%b3%e4%bd%9c%e6%88%90%e5%85%a5%e9%96%80%e7%ac%ac-7/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>アニメ制作者のためのAfterEffectsプラグイン作成入門(第５回)　スパッタリングプラグインを作成</title>
		<link>http://ae-users.com/jp/resources/2010/06/%e3%82%a2%e3%83%8b%e3%83%a1%e5%88%b6%e4%bd%9c%e8%80%85%e3%81%ae%e3%81%9f%e3%82%81%e3%81%aeaftereffects%e3%83%97%e3%83%a9%e3%82%b0%e3%82%a4%e3%83%b3%e4%bd%9c%e6%88%90%e5%85%a5%e9%96%80%e7%ac%ac-6/</link>
		<comments>http://ae-users.com/jp/resources/2010/06/%e3%82%a2%e3%83%8b%e3%83%a1%e5%88%b6%e4%bd%9c%e8%80%85%e3%81%ae%e3%81%9f%e3%82%81%e3%81%aeaftereffects%e3%83%97%e3%83%a9%e3%82%b0%e3%82%a4%e3%83%b3%e4%bd%9c%e6%88%90%e5%85%a5%e9%96%80%e7%ac%ac-6/#comments</comments>
		<pubDate>Thu, 03 Jun 2010 16:48:36 +0000</pubDate>
		<dc:creator>bry-ful</dc:creator>
				<category><![CDATA[RESOURCES]]></category>
		<category><![CDATA[TUTORIALS]]></category>
		<category><![CDATA[program]]></category>
		<category><![CDATA[プラグイン]]></category>

		<guid isPermaLink="false">http://ae-users.com/jp/?p=4544</guid>
		<description><![CDATA[
スパッタリングとは
この業界に入って知ったテクニックで驚いたのが、「画面動」・「サブリナ」・「スパッタリング」

新人時代、動画の出来があまり良くない爆発のカットを、演出さんが「画面動」・「サブリナ」・「スパッタリング [...]]]></description>
			<content:encoded><![CDATA[<p>
<h4>スパッタリングとは</h4>
この業界に入って知ったテクニックで驚いたのが、「画面動」・「サブリナ」・「スパッタリング」<br />
<br />
新人時代、動画の出来があまり良くない爆発のカットを、演出さんが「画面動」・「サブリナ」・「スパッタリング」を追加することでびっくりするほど見栄えのいいものに変えていたのに凄い衝撃を受けたことがあります。最近ではいろいろな事情があってサブリナが使われなくなり、デジタルになってからスパッタリングもほとんど見られなくなりました。<br />
<br />
と、言う事で今回のネタは「スパッタリング」<br />
知らない人の為に説明すると、細かい網に絵の具を乗せてブラシでこすって細かな粒をセルに吹き付けるテクニックのことで、昔は爆発とかには必ず入ってたものです（水面の波とか、雨しぶきとかにも）<br />
<h4>プラグインの仕様を考える</h4>
アルゴリズムとしてはかなり簡単なもので以下のようになります。<br />
<ol>
	<li>描画位置を決める。</li>
	<li>決めた描画位置付近に適当な数の粒を描画する。</li>
	<li>以上の描画を適当な回数繰り返す。</li>
</ol>
というように簡単ですが、それゆえにパラメータ化するのは結構面倒です。<br />
今回のプラグインは、描画位置を決める方法を３種類としてプラグインを分けて作成します。<br />
実際に業務で使う時に楽になるように以下の方法で描画位置を決めます。<br />
<ul>
	<li>範囲で指定。<br />
TopLeft/BottomRightの２点の位置パラメータから</li>
	<li>範囲の中心で指定。<br />
中心位置・半径等のパラメータから</li>
	<li>画像のアルファー情報から<br />
画像のアルファーの値から描画する位置を決める。</li>
</ul>
その描画位置から複数の粒を描画する方法は、予め粒子のデータを作成しておいて単純にコピーするにします。粒子の描画のアルゴリズムを考えるより現実的な手段をとります。<br />
<h4>sputteringRect</h4>
まずは、矩形範囲にスパッタリングするプラグイン「<strong>sputteringRect</strong>」について説明します。<br />
<br />
まずは、ソースのダウンロード。<br />
<a class="dl" href="http://bry-ful.ddo.jp/BRY/software/ap/05/sputteringRect_src.zip">sputteringRect_src.zipのダウンロード</a><br />
<br />
<hr />パラメータは以下のようにしてあります。<br />
<table border="1">
<tbody>
<tr>
<th>パラメータ名</th>
<th>型</th>
<th>説明</th>
</tr>
<tr>
<td>seed</td>
<td>A_long</td>
<td>乱数の初期化の数値。</td>
</tr>
<tr>
<td>value</td>
<td>A_long</td>
<td>粒子の発生起点の数</td>
</tr>
<tr>
<td>opacity_rand</td>
<td>PF_Fixed</td>
<td>粒子の不透明度の最大値</td>
</tr>
<tr>
<td>TopLeft</td>
<td>PF_Point</td>
<td>発生範囲の左上の座標</td>
</tr>
<tr>
<td>BottomRight</td>
<td>PF_Point</td>
<td>発生範囲の右下の座標</td>
</tr>
<tr>
<td>point_value</td>
<td>A_long</td>
<td>一つの発生起点から描画される粒子の数</td>
</tr>
<tr>
<td>point_length</td>
<td>A_long</td>
<td>一つの発生起点から描画される粒子の位置の最大距離</td>
</tr>
<tr>
<td>size</td>
<td>A_long</td>
<td>粒子の大きさ（小のみ・中のみ・大のみ・小＋中・小＋中＋大の５種類あり）</td>
</tr>
<tr>
<td>color1 &#8211; 4</td>
<td>PF_Pixel</td>
<td>粒子の色（最大４色）</td>
</tr>
<tr>
<td>color_Max</td>
<td>A_long</td>
<td>粒子の色の最大数の指定</td>
</tr>
<tr>
<td>Blend with original</td>
<td>PF_Booleanl</td>
<td>元画像を表示するかしないか</td>
</tr>
</tbody>
</table>
<a href="http://ae-users.com/jp/wp-content/uploads/2010/06/rect01.png" class="sb-img" rel="shadowbox[post-4544];player=img;"><img class="aligncenter size-full wp-image-4559" src="http://ae-users.com/jp/wp-content/uploads/2010/06/rect01.png" alt="" width="634" height="347" /></a><br />
<br />
<hr />描画のメインコードは以下の通り。いろいろ見慣れない変数・関数名がありますが、後で説明します。<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/06/rect02.gif" class="sb-img" rel="shadowbox[post-4544];player=img;"><img class="aligncenter size-full wp-image-4562" src="http://ae-users.com/jp/wp-content/uploads/2010/06/rect02.gif" alt="" width="510" height="874" /></a><br />
メイン(MainRender8)から描画用のコードは分離して関数化してあります。その際にパラメータの記述を簡潔にするためにパラメータはすべて構造体として、ポインター渡しにしてあります。<br />
<br />
<strong>sputDrawPrm</strong>は、粒子描画関数(SputDataDraw)のパラメータ用の構造体。<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/06/rect03.gif" class="sb-img" rel="shadowbox[post-4544];player=img;"><img class="aligncenter size-full wp-image-4567" src="http://ae-users.com/jp/wp-content/uploads/2010/06/rect03.gif" alt="" width="249" height="156" /></a><br />
<strong>rotPrm</strong>は、角度計算関数(rotCalc)のパラメータ用の構造体。<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/06/rect04.gif" class="sb-img" rel="shadowbox[post-4544];player=img;"><img class="aligncenter size-full wp-image-4568" src="http://ae-users.com/jp/wp-content/uploads/2010/06/rect04.gif" alt="" width="247" height="103" /></a><br />
<br />
特に難しいコードではありませんが、補足説明します。<br />
<br />
194行目の無駄っぽいループは、案の定rand関数が変な結果を出したので追加したものです。<br />
<br />
203行目は回転の乱数を求めている部分ですが、固定小数の桁あふれ防止のためちょっと変な感じになってます。<br />
<br />
205行目の処理は、あまりにも丸く綺麗に粒子が並んでしまったので、乱雑さを出すために5分の1の確率で距離を2倍にしています。本当はパラメータ化した方が良さそうな部分です。<br />
<h4>SputDataDraw8 粒子の描画</h4>
粒子の描画は、<strong>SputDataDraw</strong>関数が行っています。<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/06/rect05.gif" class="sb-img" rel="shadowbox[post-4544];player=img;"><img class="aligncenter size-large wp-image-4571" src="http://ae-users.com/jp/wp-content/uploads/2010/06/rect05-650x512.gif" alt="" width="650" height="512" /></a><br />
<strong>spudDrawPrm</strong>構造体のメンバは以下のとおりで、描画に必要な最低限のパラメータをまとめてあります。<br />
<table border="1">
<tbody>
<tr>
<th>メンバ名</th>
<th>型</th>
<th>説明</th>
</tr>
<tr>
<td>data</td>
<td>PF_PixelPtr</td>
<td>描画画面の先頭アドレス</td>
</tr>
<tr>
<td>width</td>
<td>A_long</td>
<td>描画画面の横幅ピクセル</td>
</tr>
<tr>
<td>widthTrue</td>
<td>A_long</td>
<td>描画画面の実際の横幅ピクセル</td>
</tr>
<tr>
<td>height</td>
<td>A_long</td>
<td>描画画面の縦幅ピクセル</td>
</tr>
<tr>
<td>ｘ</td>
<td>A_long</td>
<td>粒子を描画するX座標(整数値)</td>
</tr>
<tr>
<td>y</td>
<td>A_long</td>
<td>粒子を描画するY座標(整数値)</td>
</tr>
<tr>
<td>opa</td>
<td>PF_Fixed</td>
<td>描画する粒子の不透明度</td>
</tr>
<tr>
<td>sptIdx</td>
<td>A_long</td>
<td>描画する粒子のデータ配列のインデックス</td>
</tr>
</tbody>
</table>
描画する色は、8bit/16bitで分けたかったので、構造体に入れていません。<br />
<br />
<strong>sptIdx</strong>は粒子のパターンデータ配列のインデックスで、今回50個のデータを用意してあります。<br />
50以上の値は、1ピクセルの点として扱うことにしています。135行目からのコードがそれに相当します。<br />
<br />
<strong>opa</strong>は、不透明度は桁あふれ防止のため、呼び出す前に4ビットシフトしてあるので、ここでは12ビットシフトになっています(8bitサイズなので本当は必要ないけど、念のため)<br />
<br />
<strong>SPT_SIZE</strong>と<strong>SPT_VALUE</strong>は、粒子のパターンデータ配列にアクセスするためのマクロです、<strong>sputteringData.h</strong>で定義してあります。<br />
<br />
後は、単純に二重ループでデータの転送を行っています。<br />
今回合成先・合成元のピクセルデータのアルファー値は最大値でないので、ピクセル同士のブレンド合成を行っています。<br />
<h4>ピクセルの合成（通常） blendPixel</h4>
ピクセルの合成は、アルファーの値がどちらかが最大値ならば計算は楽ですが、お互いが透明な場合は少し考える必要があります。僕は全然検討もつかずハマってましたが、googleで検索してやっと見つけました。<br />
<br />
<a href="//d.hatena.ne.jp/GOCHA/20071027/alphablend">悟茶辞苑ッの2007-10-27 土曜日「RGBAのアルファブレンドに感激 -続・レイヤー処理- 」の記事</a><br />
<br />
このHPにそのものズバリがあり、そのままコーディングしたものが以下のものです。<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/06/rect06.gif" class="sb-img" rel="shadowbox[post-4544];player=img;"><img class="aligncenter size-full wp-image-4574" src="http://ae-users.com/jp/wp-content/uploads/2010/06/rect06.gif" alt="" width="496" height="396" /></a><br />
除算が3回も入っていてまだ最適化の余地はありそうですが、特に問題なく使ってます。<br />
<h4>粒子データを用意する</h4>
粒子データは本当は、実際にスパッタリングした物をスキャンして使おうと思っていましたが、近所の文房具屋にはスパッタリングの道具が打っていなかったので、Photoshopで手書きしました。（僕が小学校の頃は図工の時間でやっていて文房具屋でも売ってましたが最近はやらないみたいです）<br />
<br />
データが用意できたらそれをCで扱える形式に変換します。今回は、C#で簡単なツールを作成したので、それで変換します。<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/06/rect07.png" class="sb-img" rel="shadowbox[post-4544];player=img;"><img class="aligncenter size-full wp-image-4577" src="http://ae-users.com/jp/wp-content/uploads/2010/06/rect07.png" alt="" width="600" height="479" /></a><br />
<br />
粒子データはギリギリのサイズに切り出しておいてください。その時縦横のサイズは同じにしておきます。<br />
Exportすれば、以下のファイルが出力されます。<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/06/rect08.gif" class="sb-img" rel="shadowbox[post-4544];player=img;"><img class="aligncenter size-full wp-image-4578" src="http://ae-users.com/jp/wp-content/uploads/2010/06/rect08.gif" alt="" width="519" height="482" /></a><br />
<br />
面倒だったので、マクロ定義なども出力しています。<br />
<br />
実行ファイル<strong>pic2c.exe</strong><br />
<a class="dl" href="http://bry-ful.ddo.jp/BRY/software/ap/05/pic2c.zip">pic2c.zipのダウンロード</a><br />
ソース（C# 2008 express editionで作成）<br />
<a class="dl" href="http://bry-ful.ddo.jp/BRY/software/ap/05/pic2c_src.zip">pic2c_src.zipのダウンロード</a><br />
<h4>テーブル参照</h4>
ここで僕が多用している<strong>テーブル参照</strong>のテクニックについて説明します。<br />
<br />
テーブル参照のメリットは<br />
<ol>
	<li>計算を予め終わらせておくので、高速化が望める。</li>
	<li>ソースを簡略化して簡単にコーディングできるようになる。</li>
</ol>
とあります。<br />
しかし、最近のPCでは除算とか小数の計算とかびっくりするほど早くて高速化のメリットはかなり無くなりました。逆にCPUのキャッシュの恩恵を受けられないので、かえって遅くなる場合も多々あります。<br />
そのため僕は主にコーディングを楽にするために使ってます。デメリットは、実行バイナリのファイルサイズが増えるとかテーブルサイズが意外とバカに出来ないサイズになってしまいメモリが勿体無いとか、そもそもテーブル作るのが面倒とかあります。<br />
<br />
具体的に説明するためにAfter Effects用のjavaScriptを作成してみます。<br />
<br />
<strong>AfterEfefctsとじゃんけんゲーム</strong><br />
<a class="dl" href="http://bry-ful.ddo.jp/BRY/software/ap/05/jyan_jsx.zip">jyan_jsx.zipのダウンロード</a><br />
アーカイブに二つスクリプトがはいってますが、動作は同じものになります。<br />
グー・チョキ・パーの3個のボタンがあるダイアログが表示されるので、適当に選ぶとジャンケンの結果が表示されます。<br />
<br />
その１のジャンケン判定のコードは、以下の通り。<br />
<br />

<div class="wp_syntax"><div class="code"><pre class="expression" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">function</span> jyanStr<span style="color: #009900;">&#40;</span>v<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	<span style="color: #003366; font-weight: bold;">var</span> ss <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;&quot;</span><span style="color: #339933;">;</span>
	<span style="color: #F0A090; font-weight: bold;">switch</span> <span style="color: #009900;">&#40;</span>v<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		<span style="color: #F0A090; font-weight: bold;">case</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">:</span> ss <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;グー&quot;</span><span style="color: #339933;">;</span>break<span style="color: #339933;">;</span>
		<span style="color: #F0A090; font-weight: bold;">case</span> <span style="color: #CC0000;">1</span><span style="color: #339933;">:</span> ss <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;チョキ&quot;</span><span style="color: #339933;">;</span>break<span style="color: #339933;">;</span>
		<span style="color: #F0A090; font-weight: bold;">case</span> <span style="color: #CC0000;">2</span><span style="color: #339933;">:</span> ss <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;パー&quot;</span><span style="color: #339933;">;</span>break<span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #F0A090; font-weight: bold;">return</span> ss<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #003366; font-weight: bold;">var</span> dlg <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> jyankenDialog<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;AfteEffectsとじゃんけんゲーム その１&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">var</span> player <span style="color: #339933;">=</span> dlg.<span style="color: #660066;">execute</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><span style="color: #006600; font-style: italic;">// 0:グー 1:チョキ 2:パー</span>
<span style="color: #F0A090; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #009900;">&#40;</span>player<span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;=</span><span style="color: #CC0000;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;&amp;</span>amp<span style="color: #339933;">;</span><span style="color: #009900;">&#40;</span>player<span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;</span><span style="color: #CC0000;">3</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #003366; font-weight: bold;">var</span> computer <span style="color: #339933;">=</span> Math.<span style="color: #660066;">floor</span><span style="color: #009900;">&#40;</span>Math.<span style="color: #660066;">random</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">*</span> <span style="color: #CC0000;">12</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">%</span> <span style="color: #CC0000;">3</span><span style="color: #339933;">;</span> <span style="color: #006600; font-style: italic;">//0-2の整数を返す</span>
&nbsp;
	<span style="color: #003366; font-weight: bold;">var</span> kekka <span style="color: #339933;">=</span> <span style="color: #339933;">-</span><span style="color: #CC0000;">1</span><span style="color: #339933;">;</span> <span style="color: #006600; font-style: italic;">// 0:引き分け 1:palyer勝利 2:player負け</span>
	<span style="color: #F0A090; font-weight: bold;">switch</span> <span style="color: #009900;">&#40;</span>player<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #F0A090; font-weight: bold;">case</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">:</span> <span style="color: #006600; font-style: italic;">// グー</span>
			<span style="color: #F0A090; font-weight: bold;">switch</span> <span style="color: #009900;">&#40;</span>computer<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
				<span style="color: #F0A090; font-weight: bold;">case</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">:</span> kekka <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span> <span style="color: #F0A090; font-weight: bold;">break</span><span style="color: #339933;">;</span>
				<span style="color: #F0A090; font-weight: bold;">case</span> <span style="color: #CC0000;">1</span><span style="color: #339933;">:</span> kekka <span style="color: #339933;">=</span> <span style="color: #CC0000;">1</span><span style="color: #339933;">;</span> <span style="color: #F0A090; font-weight: bold;">break</span><span style="color: #339933;">;</span>
				<span style="color: #F0A090; font-weight: bold;">case</span> <span style="color: #CC0000;">2</span><span style="color: #339933;">:</span> kekka <span style="color: #339933;">=</span> <span style="color: #CC0000;">2</span><span style="color: #339933;">;</span> <span style="color: #F0A090; font-weight: bold;">break</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
			<span style="color: #F0A090; font-weight: bold;">break</span><span style="color: #339933;">;</span>
		<span style="color: #F0A090; font-weight: bold;">case</span> <span style="color: #CC0000;">1</span><span style="color: #339933;">:</span> <span style="color: #006600; font-style: italic;">// チョキ</span>
			<span style="color: #F0A090; font-weight: bold;">switch</span> <span style="color: #009900;">&#40;</span>computer<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
				<span style="color: #F0A090; font-weight: bold;">case</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">:</span> kekka <span style="color: #339933;">=</span> <span style="color: #CC0000;">2</span><span style="color: #339933;">;</span> <span style="color: #F0A090; font-weight: bold;">break</span><span style="color: #339933;">;</span>
				<span style="color: #F0A090; font-weight: bold;">case</span> <span style="color: #CC0000;">1</span><span style="color: #339933;">:</span> kekka <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span> <span style="color: #F0A090; font-weight: bold;">break</span><span style="color: #339933;">;</span>
				<span style="color: #F0A090; font-weight: bold;">case</span> <span style="color: #CC0000;">2</span><span style="color: #339933;">:</span> kekka <span style="color: #339933;">=</span> <span style="color: #CC0000;">1</span><span style="color: #339933;">;</span> <span style="color: #F0A090; font-weight: bold;">break</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
			<span style="color: #F0A090; font-weight: bold;">break</span><span style="color: #339933;">;</span>
		<span style="color: #F0A090; font-weight: bold;">case</span> <span style="color: #CC0000;">2</span><span style="color: #339933;">:</span> <span style="color: #006600; font-style: italic;">// パー</span>
			<span style="color: #F0A090; font-weight: bold;">switch</span> <span style="color: #009900;">&#40;</span>computer<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
				<span style="color: #F0A090; font-weight: bold;">case</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">:</span> kekka <span style="color: #339933;">=</span> <span style="color: #CC0000;">1</span><span style="color: #339933;">;</span> <span style="color: #F0A090; font-weight: bold;">break</span><span style="color: #339933;">;</span>
				<span style="color: #F0A090; font-weight: bold;">case</span> <span style="color: #CC0000;">1</span><span style="color: #339933;">:</span> kekka <span style="color: #339933;">=</span> <span style="color: #CC0000;">2</span><span style="color: #339933;">;</span> <span style="color: #F0A090; font-weight: bold;">break</span><span style="color: #339933;">;</span>
				<span style="color: #F0A090; font-weight: bold;">case</span> <span style="color: #CC0000;">2</span><span style="color: #339933;">:</span> kekka <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span> <span style="color: #F0A090; font-weight: bold;">break</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
			<span style="color: #F0A090; font-weight: bold;">break</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #003366; font-weight: bold;">var</span> s <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;じゃんけん勝負<span style="color: #000099; font-weight: bold;">\n</span><span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
	s <span style="color: #339933;">+=</span><span style="color: #3366CC;">&quot;;Palyer : &quot;</span> <span style="color: #339933;">+</span>jyanStr<span style="color: #009900;">&#40;</span>player<span style="color: #009900;">&#41;</span><span style="color: #339933;">+</span><span style="color: #3366CC;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
	s <span style="color: #339933;">+=</span><span style="color: #3366CC;">&quot;;AfterEfefcts : &quot;</span> <span style="color: #339933;">+</span>jyanStr<span style="color: #009900;">&#40;</span>computer<span style="color: #009900;">&#41;</span><span style="color: #339933;">+</span><span style="color: #3366CC;">&quot;<span style="color: #000099; font-weight: bold;">\n</span><span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
	<span style="color: #F0A090; font-weight: bold;">switch</span><span style="color: #009900;">&#40;</span>kekka<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		<span style="color: #F0A090; font-weight: bold;">case</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">:</span> s <span style="color: #339933;">+=</span> <span style="color: #3366CC;">&quot;引き分け<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>break<span style="color: #339933;">;</span>
		<span style="color: #F0A090; font-weight: bold;">case</span> <span style="color: #CC0000;">1</span><span style="color: #339933;">:</span> s <span style="color: #339933;">+=</span> <span style="color: #3366CC;">&quot;あなたの勝ち<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>break<span style="color: #339933;">;</span>
		<span style="color: #F0A090; font-weight: bold;">case</span> <span style="color: #CC0000;">2</span><span style="color: #339933;">:</span> s <span style="color: #339933;">+=</span> <span style="color: #3366CC;">&quot;あなたの負け<span style="color: #000099; font-weight: bold;">\n</span>”;break;
	}
	alert(s);
}</span></pre></div></div>

<br />
<br />
見やすいようにswitch文で処理してますが、if分で書いても多少短くなる程度です。<br />
その2はテーブル参照でジャンケン判定を実装したもので以下のようになります。<br />
<br />

<div class="wp_syntax"><div class="code"><pre class="expression" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> dlg <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> jyankenDialog<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;AfteEffectsとじゃんけんゲーム その２&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #003366; font-weight: bold;">var</span> player <span style="color: #339933;">=</span> dlg.<span style="color: #660066;">execute</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><span style="color: #006600; font-style: italic;">// 0:グー 1:チョキ 2:パー</span>
<span style="color: #F0A090; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #009900;">&#40;</span>player<span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;=</span><span style="color: #CC0000;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;&amp;</span>amp<span style="color: #339933;">;</span><span style="color: #009900;">&#40;</span>player<span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;</span><span style="color: #CC0000;">3</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #003366; font-weight: bold;">var</span> computer <span style="color: #339933;">=</span> Math.<span style="color: #660066;">floor</span><span style="color: #009900;">&#40;</span>Math.<span style="color: #660066;">random</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">*</span> <span style="color: #CC0000;">12</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">%</span> <span style="color: #CC0000;">3</span><span style="color: #339933;">;</span> <span style="color: #006600; font-style: italic;">//0-2の整数を返す</span>
&nbsp;
	<span style="color: #003366; font-weight: bold;">var</span> kekkaTbl <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> Array<span style="color: #009900;">&#40;</span><span style="color: #CC0000;">0</span><span style="color: #339933;">,</span><span style="color: #CC0000;">1</span><span style="color: #339933;">,</span><span style="color: #CC0000;">2</span><span style="color: #339933;">,</span><span style="color: #CC0000;">2</span><span style="color: #339933;">,</span><span style="color: #CC0000;">0</span><span style="color: #339933;">,</span><span style="color: #CC0000;">1</span><span style="color: #339933;">,</span><span style="color: #CC0000;">1</span><span style="color: #339933;">,</span><span style="color: #CC0000;">2</span><span style="color: #339933;">,</span><span style="color: #CC0000;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #003366; font-weight: bold;">var</span> kekkaStrTbl <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> Array<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;引き分け&quot;</span><span style="color: #339933;">,</span><span style="color: #3366CC;">&quot;あなたの勝ち&quot;</span><span style="color: #339933;">,</span><span style="color: #3366CC;">&quot;あなたの負け&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #003366; font-weight: bold;">var</span> jyanTbl <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> Array<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;グー&quot;</span><span style="color: #339933;">,</span><span style="color: #3366CC;">&quot;チョキ&quot;</span><span style="color: #339933;">,</span><span style="color: #3366CC;">&quot;パー&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #003366; font-weight: bold;">var</span> s <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;じゃんけん勝負<span style="color: #000099; font-weight: bold;">\n</span><span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
	s <span style="color: #339933;">+=</span> <span style="color: #3366CC;">&quot;Palyer : &quot;</span> <span style="color: #339933;">+</span> jyanTbl<span style="color: #009900;">&#91;</span>player<span style="color: #009900;">&#93;</span><span style="color: #339933;">+</span><span style="color: #3366CC;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
	s <span style="color: #339933;">+=</span> <span style="color: #3366CC;">&quot;AfterEfefcts : &quot;</span>  <span style="color: #339933;">+</span> jyanTbl<span style="color: #009900;">&#91;</span>computer<span style="color: #009900;">&#93;</span><span style="color: #339933;">+</span><span style="color: #3366CC;">&quot;<span style="color: #000099; font-weight: bold;">\n</span><span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
	s <span style="color: #339933;">+=</span> kekkaStrTbl<span style="color: #009900;">&#91;</span>kekkaTbl<span style="color: #009900;">&#91;</span>player <span style="color: #339933;">*</span> <span style="color: #CC0000;">3</span> <span style="color: #339933;">+</span> computer<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">+</span><span style="color: #3366CC;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
	<span style="color: #F0A090;">alert</span><span style="color: #009900;">&#40;</span>s<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<br />
<br />
なんと、半分以下になっています。テーブルを作成するのが面倒ですが便利な関数を呼び出す気分で使えます。<br />
このスクリプトではテーブル参照を２重で行ってますが、それをひとつにまとめればさらに短いコードに変えられます。<br />
<br />
余談ですが、AfterEfefctsは意外とジャンケンが強いです。作成時10回連続で負けたので、バグがあるのかとハマってましたが、単純に運の問題でした。<br />
<h4>粒子をランダムに選び出す。</h4>
描画する粒子を選ぶ方法は、要素数２００のジャンプテーブル(<strong>sputteringCircle_Params</strong>の<strong>sputRandTable</strong>)に５１種類のインデックス番号を適当に配置してランダムに選び出すことで実装しています。<br />
sizeパラメータは、ジャンプテーブルへの配置の仕方を変えているだけで、描画関数内ではただランダムに選ぶだけです。<br />
<br />
<strong>sputteringRect.cpp</strong>の<strong>SetupSputData</strong>関数でジャンプテーブルの初期化を行っています。<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/06/rect09.gif" class="sb-img" rel="shadowbox[post-4544];player=img;"><img class="aligncenter size-medium wp-image-4607" src="http://ae-users.com/jp/wp-content/uploads/2010/06/rect09-223x400.gif" alt="" width="223" height="400" /></a><br />
<br />
for文の嵐になってますが、<strong>size</strong>のパラメータに合わせて適当な数値を入力しているだけです。<br />
<br />
同様に粒子の色も配列で確保しておいて、ランダムに選び出してます。<br />
<h4>乱数</h4>
スパッタリングでは粒子の描画のばらつき具合が重要なので、乱数発生に注意しています。<br />
今回<strong>FR_RAND(LO,HI)</strong>・<strong>FM_RAND</strong>の二つのマクロを定義しています。<br />
<br />
#define FR_RAND(LO,HI) (A_long)( F_RAND() * (HI &#8211; LO + 1.0) / (1.0 + F_RAND_MAX))<br />
#define FM_RAND(HI) (A_long)( F_RAND() * (HI + 1.0) / (1.0 + F_RAND_MAX))<br />
<br />
この公式は乱数発生の基本的なもので、FR_RANDは範囲乱数を求めるもの、FM_RANDは最大数値を指定するものです。<br />
精度を上げる為実数計算を含んでいるのですこし実行速度が遅くなりますが、まあ無視していいレベルです。実はまだ精度的に納得できないモノですが、速度との折り合いで僕は我慢して使っています。<br />
<br />
乱数発生は画像処理ではかなり根底問題で毎回苦労します。<br />
<br />
F&#8217;s ScreenShakeDir.aexでは自前で乱数テーブルを用意しています。画面動では精度の良い乱数であっても見た目のばらつきと一致しないので、テーブルの数値は計算で求めないで実際の画面動を見ながら手で入力しました。実際に見てもらえばわかりますが、範囲も100までで(8Bit長も使っていない)乱数テーブルとしてはかなりいい加減なものですが、結果的に一番満足しています。<br />
<br />
有名な<a href="http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/mt.html">Mersenne Twister</a>の乱数発生アルゴリズムも試した事がありますが、かなり精度の良い乱数は得られますが、それが画面には反映されずかえってばらつきが均一になり見た目の乱雑さが失われしまいました。結局速度のことを考えて標準関数で乱雑さをアルゴリズムで補ってます。<br />
<br />
乱数とアニメ撮影技術の関わりを考えていくと、人間工学やらエントロピーとか難しい所に到達してもう僕のスキルでは手に負えません。最近ではすぐに諦めて簡単な方法に走ってしまいます。<br />
<br />
今回の<strong>sputteringRect</strong>では、粒子の大きさの発生ではジャンプテーブルで発生分布をばらつかせていたり、粒子の発生距離は、適当な確率でパラメータ自身を変化させて見た目のバラつきを発生させています。<br />
<h4>sputteringCircle</h4>
<strong>sputteringCircle</strong>はスパッタリングの描画範囲を、その中心位置・半径パラメータで決めているもので描画事態は<strong>sputteringRect</strong>と同じものです。<br />
<br />
パラメータは以下の通りです。<br />
<table border="1">
<tbody>
<tr>
<th>パラメータ名</th>
<th>型</th>
<th>説明</th>
</tr>
<tr>
<td>seed</td>
<td>A_long</td>
<td>乱数の初期化の数値。</td>
</tr>
<tr>
<td>value</td>
<td>A_long</td>
<td>粒子の発生起点の数</td>
</tr>
<tr>
<td>opacity_rand</td>
<td>PF_Fixed</td>
<td>粒子の不透明度の最大値</td>
</tr>
<tr>
<td>Pos</td>
<td>PF_Point</td>
<td>発生範囲の中心位置</td>
</tr>
<tr>
<td>Radius</td>
<td>A_long</td>
<td>発生範囲の半径の最大値</td>
</tr>
<tr>
<td>Aspect</td>
<td>PF_Fixed</td>
<td>発生範囲の縦横比</td>
</tr>
<tr>
<td>length_scale</td>
<td>PF_Fixed</td>
<td>発生点と中心との距離のスケール率</td>
</tr>
<tr>
<td>Anchor_enabled</td>
<td>PF_boolean</td>
<td>スケールの中心を有効にする</td>
</tr>
<tr>
<td>Anchor</td>
<td>PF_Point</td>
<td>スケールの中心</td>
</tr>
<tr>
<td>point_value</td>
<td>A_long</td>
<td>一つの発生起点から描画される粒子の数</td>
</tr>
<tr>
<td>point_length</td>
<td>A_long</td>
<td>一つの発生起点から描画される粒子の位置の最大距離</td>
</tr>
<tr>
<td>size</td>
<td>A_long</td>
<td>粒子の大きさ（小のみ・中のみ・大のみ・小＋中・小＋中＋大の５種類あり）</td>
</tr>
<tr>
<td>color1 &#8211; 4</td>
<td>PF_Pixel</td>
<td>粒子の色（最大４色）</td>
</tr>
<tr>
<td>color_Max</td>
<td>A_long</td>
<td>粒子の色の最大数の指定</td>
</tr>
<tr>
<td>Blend with original</td>
<td>PF_Booleanl</td>
<td>元画像を表示するかしないか</td>
</tr>
</tbody>
</table>
<a href="http://ae-users.com/jp/wp-content/uploads/2010/06/rect11.png" class="sb-img" rel="shadowbox[post-4544];player=img;"><img class="aligncenter size-full wp-image-4619" src="http://ae-users.com/jp/wp-content/uploads/2010/06/rect11.png" alt="" width="636" height="383" /></a><br />
length_scaleとAnchorのパラメータは爆発なんかに適応させる場合にこのパラメータだけで指定できれば楽そうだなって意図で採用してあります。<br />
<br />
アルゴリズムは以下のようになります。<br />
<ol>
	<li>Posの位置からRadius(半径の距離)Aspect(縦横比)とlength_scale/Anchorを考慮して描画点決める。</li>
	<li>描画点から最大point_lengthの位置にpoint_value分の粒子を描画。</li>
	<li>上の描画をvalue回繰り返す。</li>
</ol>
第3回目の記事で作成した<strong>Firework</strong>プラグインとほぼ同じアルゴリズムになっています。<br />
以下は<strong>MainRender</strong>関数の重要な部分を抜き出したものです。<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/06/rect10.gif" class="sb-img" rel="shadowbox[post-4544];player=img;"><img class="aligncenter size-large wp-image-4614" src="http://ae-users.com/jp/wp-content/uploads/2010/06/rect10-650x525.gif" alt="" width="650" height="525" /></a><br />
<h4>sputteringAlpha</h4>
<strong>sputteringAlph</strong>aはスパッタリングの描画範囲を、画像のAlpha値で求めるもので描画事態は<strong>sputteringRect</strong>と同じものです。<br />
Alphaが決められた閾値以上のピクセルを対象に適当な確率で描画点を発生させています。そのままだと細い線とか面積の少ない部分にあまり描画が行われなくなってしまうので、境界部分は個別に発生の確率を変えられるようにしてあります。<br />
<br />
パラメータは以下の通りです。<br />
<table border="1">
<tbody>
<tr>
<th>パラメータ名</th>
<th>型</th>
<th>説明</th>
</tr>
<tr>
<td>seed</td>
<td>A_long</td>
<td>乱数の初期化の数値。</td>
</tr>
<tr>
<td>value(%)</td>
<td>PF_Fixed</td>
<td>不透明部分の粒子の発生確率</td>
</tr>
<tr>
<td>edge_value(%)</td>
<td>PF_Fixed</td>
<td>境界部分の粒子の発生確率</td>
</tr>
<tr>
<td>opacity_rand</td>
<td>PF_Fixed</td>
<td>粒子の不透明度の最大値</td>
</tr>
<tr>
<td>point_value</td>
<td>A_long</td>
<td>一つの発生起点から描画される粒子の数</td>
</tr>
<tr>
<td>point_length</td>
<td>A_long</td>
<td>一つの発生起点から描画される粒子の位置の最大距離</td>
</tr>
<tr>
<td>size</td>
<td>A_long</td>
<td>粒子の大きさ（小のみ・中のみ・大のみ・小＋中・小＋中＋大の５種類あり）</td>
</tr>
<tr>
<td>color1 &#8211; 4</td>
<td>PF_Pixel</td>
<td>粒子の色（最大４色）</td>
</tr>
<tr>
<td>color_Max</td>
<td>A_long</td>
<td>粒子の色の最大数の指定</td>
</tr>
<tr>
<td>Blend with original</td>
<td>PF_Booleanl</td>
<td>元画像を表示するかしないか</td>
</tr>
</tbody>
</table>
<a href="http://ae-users.com/jp/wp-content/uploads/2010/06/rect12.png" class="sb-img" rel="shadowbox[post-4544];player=img;"><img class="aligncenter size-large wp-image-4626" src="http://ae-users.com/jp/wp-content/uploads/2010/06/rect12-650x294.png" alt="" width="650" height="294" /></a><br />
<br />
このプラグインでは、境界線を識別して保存するために1画面分の配列を作成しています。少しでもメモリを節約するためにA_u_charの配列にしています。<br />
<strong>sputteringAlpha.cpp</strong>の<strong>Render</strong>で配列用のメモリを確保しています。<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/06/rect13.gif" class="sb-img" rel="shadowbox[post-4544];player=img;"><img class="aligncenter size-full wp-image-4629" src="http://ae-users.com/jp/wp-content/uploads/2010/06/rect13.gif" alt="" width="625" height="419" /></a><br />
<br />
境界線の識別は<strong>sputteringAlphaMain8.cpp</strong>の<strong>MainRender8</strong>関数で行っています。高速化のの為に上下左右1ピクセルは無視して識別を行い、境界線・不透明部分と数値を分けて退避用の外列に値を書きこみます。アドレス計算はオフセット値を予め計算してジャンプテーブルを作成して行っています。<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/06/rect14.gif" class="sb-img" rel="shadowbox[post-4544];player=img;"><img class="aligncenter size-full wp-image-4632" src="http://ae-users.com/jp/wp-content/uploads/2010/06/rect14.gif" alt="" width="566" height="738" /></a><br />
<br />
描画はNoise04Lvと同じようなコーディングになっています。<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/06/rect15.gif" class="sb-img" rel="shadowbox[post-4544];player=img;"><img class="aligncenter size-full wp-image-4637" src="http://ae-users.com/jp/wp-content/uploads/2010/06/rect15.gif" alt="" width="528" height="807" /></a><br />
<h4>このサンプルプラグインについて （F&#8217;s Pluginsへ）</h4>
この３個のプラグインはパラメータの扱いが違うだけで描画ルーチンは同じものです。何故分けたかというと、実際にスパッタリングを行う場面を考えて使いやすいように考えたからです。<br />
プログラム的には一つにすることは可能ですが、エフェクトコントロールがこれ以上増えて見づらくなるのが嫌いという理由もあります。<br />
<br />
あと、このプラグインはサンプル用に作ったもので、よく見れば<strong>Firework</strong>/<strong>Noise04Lv</strong>を少し修正しただけに過ぎません。でも、意外と業務に使えそうな雰囲気になってきたので<strong>sputRandTable</strong>をもっとましにするとか、16bit化するとかしてからF&#8217;s Pluginsとして公開配布するつもりです。<br />
<br />
2010/06/05追記<br />
早速作りました。<br />
Windows版 F&#8217;s sputtering<br />
<a class="dl" href="http://bry-ful.ddo.jp/BRY/software/FsPlugins/FsSputtering.zip">FsSputtering.zipのダウンロード</a><br />
Maｃintosh版 F&#8217;s sputtering(beta)<br />
<a class="dl" href="http://bry-ful.ddo.jp/BRY/software/FsPlugins/FsSputtering-Mac.dmg">FsSputtering-Mac.dmgのダウンロード</a><br />
<br />
AEP projectサンプル版から以下の項目を修正してあります。<br />
<ul>
	<li>16Bit対応</li>
	<li>粒子のテクスチャを修正。<br />
50個から60個へ増やした。サイズを修正。</li>
	<li>sizeのパラメータを修正。</li>
	<li>suputteringSplashを追加。</li>
	<li>MT版とMacintosh版を作成</li>
</ul>
ソース・プロジェクトはWindows版のアーカイブ内に入っています。<br />
<h4>次回予告</h4>
次回は予定通り「<strong>Effectsプラグインの構造</strong>」です。<br />
<br />
この記事は全部で全10回と予定してましたが、少し短くなって全８回程度になります。</p>

	タグ : <a href="http://ae-users.com/jp/tag/program/" title="program" rel="tag nofollow">program</a>, <a href="http://ae-users.com/jp/tag/%e3%83%97%e3%83%a9%e3%82%b0%e3%82%a4%e3%83%b3/" title="プラグイン" rel="tag nofollow">プラグイン</a><span id="addbt">[<a onclick="jQuery('p#addtags').slideDown('fast');jQuery('#addbt').fadeOut('fast');">タグを追加する</a>]</span><br />

	<h4>関連する投稿</h4>
	<ul class="st-related-posts">
	<li><a href="http://ae-users.com/jp/resources/2010/06/%e3%82%a2%e3%83%8b%e3%83%a1%e5%88%b6%e4%bd%9c%e8%80%85%e3%81%ae%e3%81%9f%e3%82%81%e3%81%aeaftereffects%e3%83%97%e3%83%a9%e3%82%b0%e3%82%a4%e3%83%b3%e4%bd%9c%e6%88%90%e5%85%a5%e9%96%80%e7%ac%ac-7/" title="アニメ制作者のためのAfterEffectsプラグイン作成入門(第６回)　Effectプラグインの構造・ユーザーインターフェース (2010/6月/13)">アニメ制作者のためのAfterEffectsプラグイン作成入門(第６回)　Effectプラグインの構造・ユーザーインターフェース</a> (4)</li>
	<li><a href="http://ae-users.com/jp/resources/2010/05/%e3%82%a2%e3%83%8b%e3%83%a1%e5%88%b6%e4%bd%9c%e8%80%85%e3%81%ae%e3%81%9f%e3%82%81%e3%81%aeaftereffects%e3%83%97%e3%83%a9%e3%82%b0%e3%82%a4%e3%83%b3%e4%bd%9c%e6%88%90%e5%85%a5%e9%96%80%e7%ac%ac-5/" title="アニメ制作者のためのAfterEffectsプラグイン作成入門(第４回)　オリジナルノイズフィルタを作ってみよう！ (2010/5月/23)">アニメ制作者のためのAfterEffectsプラグイン作成入門(第４回)　オリジナルノイズフィルタを作ってみよう！</a> (5)</li>
	<li><a href="http://ae-users.com/jp/resources/2010/05/%e3%82%a2%e3%83%8b%e3%83%a1%e5%88%b6%e4%bd%9c%e8%80%85%e3%81%ae%e3%81%9f%e3%82%81%e3%81%aeaftereffects%e3%83%97%e3%83%a9%e3%82%b0%e3%82%a4%e3%83%b3%e4%bd%9c%e6%88%90%e5%85%a5%e9%96%80%e7%ac%ac-3/" title="アニメ制作者のためのAfterEffectsプラグイン作成入門(第２回)　とりあえず作ってみよう！ (2010/5月/09)">アニメ制作者のためのAfterEffectsプラグイン作成入門(第２回)　とりあえず作ってみよう！</a> (6)</li>
	<li><a href="http://ae-users.com/jp/tutorials/2010/05/%e3%82%a2%e3%83%8b%e3%83%a1%e5%88%b6%e4%bd%9c%e8%80%85%e3%81%ae%e3%81%9f%e3%82%81%e3%81%aeaftereffects%e3%83%97%e3%83%a9%e3%82%b0%e3%82%a4%e3%83%b3%e4%bd%9c%e6%88%90%e5%85%a5%e9%96%80%e7%ac%ac-2/" title="アニメ制作者のためのAfterEffectsプラグイン作成入門(第１回)　SDKをコンパイルしてみよう! (2010/5月/05)">アニメ制作者のためのAfterEffectsプラグイン作成入門(第１回)　SDKをコンパイルしてみよう!</a> (8)</li>
	<li><a href="http://ae-users.com/jp/tutorials/2010/05/%e3%82%a2%e3%83%8b%e3%83%a1%e5%88%b6%e4%bd%9c%e8%80%85%e3%81%ae%e3%81%9f%e3%82%81%e3%81%aeaftereffects%e3%83%97%e3%83%a9%e3%82%b0%e3%82%a4%e3%83%b3%e4%bd%9c%e6%88%90%e5%85%a5%e9%96%80%e7%ac%ac/" title="アニメ制作者のためのAfterEffectsプラグイン作成入門(第０回) (2010/5月/05)">アニメ制作者のためのAfterEffectsプラグイン作成入門(第０回)</a> (10)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://ae-users.com/jp/resources/2010/06/%e3%82%a2%e3%83%8b%e3%83%a1%e5%88%b6%e4%bd%9c%e8%80%85%e3%81%ae%e3%81%9f%e3%82%81%e3%81%aeaftereffects%e3%83%97%e3%83%a9%e3%82%b0%e3%82%a4%e3%83%b3%e4%bd%9c%e6%88%90%e5%85%a5%e9%96%80%e7%ac%ac-6/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>光沢のある球面の表現</title>
		<link>http://ae-users.com/jp/tutorials/2010/06/coated_ball/</link>
		<comments>http://ae-users.com/jp/tutorials/2010/06/coated_ball/#comments</comments>
		<pubDate>Mon, 31 May 2010 15:40:53 +0000</pubDate>
		<dc:creator>yama_ko</dc:creator>
				<category><![CDATA[TUTORIALS]]></category>
		<category><![CDATA[デフォルトプラグインのみ]]></category>
		<category><![CDATA[標準エフェクトのみ]]></category>
		<category><![CDATA[鏡面反射]]></category>

		<guid isPermaLink="false">http://ae-users.com/jp/?p=4520</guid>
		<description><![CDATA[光沢のある球面の表現方法をご紹介します。AfterEffects完結、標準プラグインのみです。アプローチ・考え方に重点を置きます。]]></description>
			<content:encoded><![CDATA[<p>
AEP Night vol.2のプチコンペティション応募作品を題材に、そのアプローチと実際の方法をご紹介します。<br />
<object width="400" height="300"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=12069906&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=12069906&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="300"></embed></object><br /><br />
今回とりあげるのはこのシーンの球面の表現です。こちらはAfterEffects完結（標準プラグインのみ）で作っています。エフェクト一つ一つは単純ですし、複雑なエクスプレッションを書いてるわけでもありません。表面的な部分よりも内面的なアプローチ・考え方を重点的に扱います。<br />
<p style="text-align: center"><img class="size-full wp-image-4522  aligncenter" src="http://ae-users.com/jp/wp-content/uploads/2010/05/coated_ball_00.jpg" alt="" width="640" height="360" /></p>
汎用性を度外視しているので実用的ではないかもしれませんが、お役に立てれば幸いです。<br />
<h3>アプローチ</h3>
「それっぽく見えれば良い」が基本方針です。手を抜いてもよいという意味ではありません。<br />
この表現の目的は「リアル感」です。このとき、重視すべきは「リアルに近いか」ではなく、「視聴者がリアルと感じやすいかどうか」というのがポイントです。場合によっては3Dのレイトレーシングや実写より効果的な表現もあるでしょう。<br />
<h3>球を作る</h3>
まずは球の形状を感じさせるため、以下のステップを踏むことにしました。実際はこれに到るまで写真や3DCG等をよく見比べ、なぜ球と感じるかを考えます。実物のビー玉などがあれば理想的です。<br />
私は光学やレンダリングに詳しくないので誤解を招く表現かもしれませんが、仮に各ステップを以下のように呼びます。<br />
<ul>
	<li>基本色</li>
	<li>アンビエントライト</li>
	<li>ハイライト</li>
	<li>映り込み</li>
</ul>
<img class="aligncenter size-full wp-image-4523" src="http://ae-users.com/jp/wp-content/uploads/2010/05/coated_ball_01.jpg" alt="" width="640" height="320" />
<br />
AfterEffectsの機能は主にカラーカーブ、CC Sphereを使います。<br />
<h4>基本色</h4>
球そのものの色です。光源を意識しつつ、カラーカーブの放射状をベースに適当に作ります。<br />
<p style="text-align: center"><img class="size-full wp-image-4524  aligncenter" src="http://ae-users.com/jp/wp-content/uploads/2010/05/coated_ball_02.jpg" alt="" width="320" height="320" /></p>
<br />
<h4>アンビエントライト</h4>
こちらも円とカラーカーブで。モードを加算にしています。<br />
周りがある程度明るいという前提が元になります。ちなみに個人的には4つのステップのうち最も納得しづらかった部分です。いわゆるWeb2.0風アイコンやMacOSのUIなど、認識が記号化されているのかもしれません。<br />
<p style="text-align: center"><img class="size-full wp-image-4525  aligncenter" src="http://ae-users.com/jp/wp-content/uploads/2010/05/coated_ball_03.jpg" alt="" width="320" height="320" /></p>
<br />
<h4>ハイライト</h4>
白色の平面を引き、適当にマスクを切ります。電気や太陽など、一点の光源を見慣れているという前提を用います。<br />
<p style="text-align: center"><img class="size-full wp-image-4526  aligncenter" src="http://ae-users.com/jp/wp-content/uploads/2010/06/coated_ball_04.jpg" alt="" width="320" height="320" /></p>
<br />
<h4>映り込み</h4>
映り込ませる画像を別コンポ作り、CC Sphereで丸めます。この画像のアスペクト比を2:1にすると扱い易いです。解像度はかなり大きめに。<br />
画像内容は情報がないので、正解がありません。<br />
まず窓や建物など、四角形のものが身の回りに多いという前提で、平面にCC Grid Wipeをかけたものを置いています。<br />
加えて付近の別の球を想定し、似たような円を作っておきます。このとき左右反転をしておきましょう。また、文字などなるべく「左右逆になっている」ことがわかりやすい情報をもたせると効果的です。<br />
<p style="text-align: center">
<img class="size-full wp-image-4528       aligncenter" style="margin-left: auto;margin-right: auto;border: 0px initial initial" src="http://ae-users.com/jp/wp-content/uploads/2010/06/coated_ball_06.jpg" alt="" width="640" height="320" /></p>
<p style="text-align: left">これらは独立しているので、それらが独立していることを認識させるために多少ばらばらに動かします。</p>
<p style="text-align: left">透明度やCC Sphereの回転も基本的にトライアンドエラーで調整していきます。</p>
<p style="text-align: center"><img class="size-full wp-image-4527  aligncenter" src="http://ae-users.com/jp/wp-content/uploads/2010/06/coated_ball_05.jpg" alt="" width="320" height="320" /></p>
<br />
<h3>球の凹みをつくる</h3>
次に凹み部分を作るため、以下のステップを踏みます。<br />
<ul>
	<li>境界付近の反射の歪み</li>
	<li>凹み部分</li>
	<li>文字部分</li>
</ul>
主にCC RadialWipeと3Dレイヤーを使います。<br />
<h4>境界付近の反射の歪み</h4>
今回、最も印象を左右するポイントです。<br />
調整レイヤーで全体にCC Radial Wipeをかけ、穴をあけます。この効果によって歪みを認識させ、centerを動かすことで擬似的に球の回転を認識させます。もちろん動かせる範囲が限られますし、パースもかかりません。一次近似になります。振り子の運動は単振動と扱えるのと同じです。<br />
ハイライトや映り込みを巻き込むような動きになると効果的です。<br />
<p style="text-align: center"><img class="size-full wp-image-4529  aligncenter" src="http://ae-users.com/jp/wp-content/uploads/2010/06/coated_ball_07.jpg" alt="" width="320" height="320" /></p>
<br />
<h4>凹み部分</h4>
円を作り、cc Radial Wipeの Centerに重ね、穴が見えなくなるよう動かします。「円」エフェクトを使い、エクスプレッションでそれぞれのcenterを揃えると調整しやすいです。<br />
境界部分をぼかし、色の変化もトライアンドエラーでつけていきます。<br />
<p style="text-align: center"><img class="size-full wp-image-4530  aligncenter" src="http://ae-users.com/jp/wp-content/uploads/2010/06/coated_ball_08.jpg" alt="" width="320" height="320" /></p>
<br />
<h4>文字部分</h4>
この部分だけ3Dレイヤーの回転を使っています。<br />
先程のcenterと見た目上の動きを揃えます。<br />
文字にベベルをかけて、文字が刻み込まれていることを認識させます。（今回は「ベベルアルファ」を使っています）<br />
最終的にわずか数1,2pxの線になりますが、印象が大きく異なるポイントです。<br />
徐々に光源の相対角度が変わることになるので、それを相殺するようにベベルの角度を変化させるとベターです。<br />
<p style="text-align: center"><img class="size-full wp-image-4531  aligncenter" src="http://ae-users.com/jp/wp-content/uploads/2010/06/coated_ball_09.jpg" alt="" width="320" height="320" /></p>
<br />
<h3>おわりに</h3>
最後にコンポを複製し、環境光的な要素は全て同じに、互いの映り込みや回転は独立に動きをつけていきます。被写界深度や色調補正も重要な要素です。<br />
ある表現を狙うとき、なぜそのような認識に繋がるのかを常に考えることが大切なのではないかと思います。<br />
<br />
他のシーンについて<br />
<a href="http://www.yama-ko.net/blog/?p=181">http://www.yama-ko.net/blog/?p=181</a><br />
これを作ることになった経緯みたいなもの<br />
<a href="http://www.yama-ko.net/blog/?p=178">http://www.yama-ko.net/blog/?p=178</a><br />
<br />
<a class="dl" href="http://ae-users.com/jp/wp-content/uploads/2010/06/coated-ball.zip">Download</a><br />
<ul>
	<li>Version: AfterEffects CS4</li>
	<li>License: Free for all</li>
</ul></p>

	タグ : <a href="http://ae-users.com/jp/tag/%e3%83%87%e3%83%95%e3%82%a9%e3%83%ab%e3%83%88%e3%83%97%e3%83%a9%e3%82%b0%e3%82%a4%e3%83%b3%e3%81%ae%e3%81%bf/" title="デフォルトプラグインのみ" rel="tag nofollow">デフォルトプラグインのみ</a>, <a href="http://ae-users.com/jp/tag/%e6%a8%99%e6%ba%96%e3%82%a8%e3%83%95%e3%82%a7%e3%82%af%e3%83%88%e3%81%ae%e3%81%bf/" title="標準エフェクトのみ" rel="tag nofollow">標準エフェクトのみ</a>, <a href="http://ae-users.com/jp/tag/%e9%8f%a1%e9%9d%a2%e5%8f%8d%e5%b0%84/" title="鏡面反射" rel="tag nofollow">鏡面反射</a><span id="addbt">[<a onclick="jQuery('p#addtags').slideDown('fast');jQuery('#addbt').fadeOut('fast');">タグを追加する</a>]</span><br />

	<h4>関連する投稿</h4>
	<ul class="st-related-posts">
	<li><a href="http://ae-users.com/jp/resources/2009/03/chromatic-abberation/" title="カメラの色収差をエクスプレッションで簡易再現 (2009/3月/25)">カメラの色収差をエクスプレッションで簡易再現</a> (4)</li>
	<li><a href="http://ae-users.com/jp/resources/2009/04/sp_wave/" title="うねうねとすすむパイプ (2009/4月/17)">うねうねとすすむパイプ</a> (4)</li>
	<li><a href="http://ae-users.com/jp/tutorials/2009/09/%e3%80%8cuse-the-forcemotionblurluke%e3%80%8d/" title="「Use the ForceMotionBlur,Luke」 (2009/9月/26)">「Use the ForceMotionBlur,Luke」</a> (7)</li>
	<li><a href="http://ae-users.com/jp/tutorials/2010/01/particleline/" title="3D空間を進む光線 without Particular (2010/1月/03)">3D空間を進む光線 without Particular</a> (14)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://ae-users.com/jp/tutorials/2010/06/coated_ball/feed/</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
		<item>
		<title>画面に雨粒が当たる表現</title>
		<link>http://ae-users.com/jp/resources/2010/05/%e7%94%bb%e9%9d%a2%e3%81%ab%e9%9b%a8%e7%b2%92%e3%81%8c%e5%bd%93%e3%81%9f%e3%82%8b%e8%a1%a8%e7%8f%be/</link>
		<comments>http://ae-users.com/jp/resources/2010/05/%e7%94%bb%e9%9d%a2%e3%81%ab%e9%9b%a8%e7%b2%92%e3%81%8c%e5%bd%93%e3%81%9f%e3%82%8b%e8%a1%a8%e7%8f%be/#comments</comments>
		<pubDate>Fri, 28 May 2010 14:17:39 +0000</pubDate>
		<dc:creator>e_san</dc:creator>
				<category><![CDATA[RESOURCES]]></category>
		<category><![CDATA[TUTORIALS]]></category>
		<category><![CDATA[Expression]]></category>
		<category><![CDATA[Expressions]]></category>
		<category><![CDATA[Trapcode]]></category>
		<category><![CDATA[Trapcode Particular]]></category>
		<category><![CDATA[エクスプレッション]]></category>
		<category><![CDATA[エフェクト]]></category>
		<category><![CDATA[カメラ]]></category>
		<category><![CDATA[水]]></category>

		<guid isPermaLink="false">http://ae-users.com/jp/?p=4473</guid>
		<description><![CDATA[


カメラのレンズやガラス板に水滴（雨粒）が当たるような表現を作成しました。

AEのCS4とTrapcode Particular2.0を使用しています。

外部リンクとなりますが、ソースファイルと、肝になる部分の簡 [...]]]></description>
			<content:encoded><![CDATA[<p>
<a href="http://ae-users.com/jp/wp-content/uploads/2010/05/thumbnail.jpg" class="sb-img" rel="shadowbox[post-4473];player=img;"><img class="alignright size-thumbnail wp-image-4474" src="http://ae-users.com/jp/wp-content/uploads/2010/05/thumbnail-190x190.jpg" alt="画面に雨粒が当たる表現" width="190" height="190" /></a><br />
<br />
カメラのレンズやガラス板に水滴（雨粒）が当たるような表現を作成しました。<br />
<br />
AEのCS4とTrapcode Particular2.0を使用しています。<br />
<br />
外部リンクとなりますが、ソースファイルと、肝になる部分の簡易な解説を以下のページに公開しています。<br />
<br />
<a href="http://e-san.net/contents/100523raindrops/">http://e-san.net/contents/100523raindrops/</a><br />
<br />
また、完成動画のみとなりますが、ニコニコ動画にも映像をアップしています。<br />
<br />
<a href="http://www.nicovideo.jp/watch/sm10673843">http://www.nicovideo.jp/watch/sm10673843</a><br />
<br />
ぜひ利用してやってください。</p>

	タグ : <a href="http://ae-users.com/jp/tag/expression/" title="Expression" rel="tag nofollow">Expression</a>, <a href="http://ae-users.com/jp/tag/expressions/" title="Expressions" rel="tag nofollow">Expressions</a>, <a href="http://ae-users.com/jp/tag/trapcode/" title="Trapcode" rel="tag nofollow">Trapcode</a>, <a href="http://ae-users.com/jp/tag/trapcode-particular/" title="Trapcode Particular" rel="tag nofollow">Trapcode Particular</a>, <a href="http://ae-users.com/jp/tag/tutorials/" title="TUTORIALS" rel="tag nofollow">TUTORIALS</a>, <a href="http://ae-users.com/jp/tag/%e3%82%a8%e3%82%af%e3%82%b9%e3%83%97%e3%83%ac%e3%83%83%e3%82%b7%e3%83%a7%e3%83%b3/" title="エクスプレッション" rel="tag nofollow">エクスプレッション</a>, <a href="http://ae-users.com/jp/tag/%e3%82%a8%e3%83%95%e3%82%a7%e3%82%af%e3%83%88/" title="エフェクト" rel="tag nofollow">エフェクト</a>, <a href="http://ae-users.com/jp/tag/%e3%82%ab%e3%83%a1%e3%83%a9/" title="カメラ" rel="tag nofollow">カメラ</a>, <a href="http://ae-users.com/jp/tag/%e6%b0%b4/" title="水" rel="tag nofollow">水</a><span id="addbt">[<a onclick="jQuery('p#addtags').slideDown('fast');jQuery('#addbt').fadeOut('fast');">タグを追加する</a>]</span><br />

	<h4>関連する投稿</h4>
	<ul class="st-related-posts">
	<li><a href="http://ae-users.com/jp/tips/2010/05/%e6%89%8b%e4%bb%98%e3%81%91%e3%81%a7%e3%81%af%e7%b5%b6%e5%af%be%e3%81%ab%e4%bd%9c%e3%82%8a%e3%81%9f%e3%81%8f%e3%81%aa%e3%81%84%e5%8b%95%e7%94%bb/" title="手付けでは絶対に作りたくない動画 (2010/5月/27)">手付けでは絶対に作りたくない動画</a> (11)</li>
	<li><a href="http://ae-users.com/jp/resources/2009/04/%e3%83%9f%e3%83%a9%e3%83%bc%e3%83%9c%e3%83%bc%e3%83%ab/" title="ミラーボール (2009/4月/13)">ミラーボール</a> (8)</li>
	<li><a href="http://ae-users.com/jp/resources/2009/05/sp_wave2/" title="トンネルの中でうねうね (2009/5月/15)">トンネルの中でうねうね</a> (6)</li>
	<li><a href="http://ae-users.com/jp/resources/2009/03/chromatic-abberation/" title="カメラの色収差をエクスプレッションで簡易再現 (2009/3月/25)">カメラの色収差をエクスプレッションで簡易再現</a> (4)</li>
	<li><a href="http://ae-users.com/jp/tips/2009/04/%e3%82%a8%e3%82%af%e3%82%b9%e3%83%97%e3%83%ac%e3%83%83%e3%82%b7%e3%83%a7%e3%83%b3%e5%88%b6%e5%be%a1%e3%81%ae%e7%b5%90%e5%90%88/" title="エクスプレッション制御の結合 (2009/4月/16)">エクスプレッション制御の結合</a> (5)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://ae-users.com/jp/resources/2010/05/%e7%94%bb%e9%9d%a2%e3%81%ab%e9%9b%a8%e7%b2%92%e3%81%8c%e5%bd%93%e3%81%9f%e3%82%8b%e8%a1%a8%e7%8f%be/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>アニメ制作者のためのAfterEffectsプラグイン作成入門(第４回)　オリジナルノイズフィルタを作ってみよう！</title>
		<link>http://ae-users.com/jp/resources/2010/05/%e3%82%a2%e3%83%8b%e3%83%a1%e5%88%b6%e4%bd%9c%e8%80%85%e3%81%ae%e3%81%9f%e3%82%81%e3%81%aeaftereffects%e3%83%97%e3%83%a9%e3%82%b0%e3%82%a4%e3%83%b3%e4%bd%9c%e6%88%90%e5%85%a5%e9%96%80%e7%ac%ac-5/</link>
		<comments>http://ae-users.com/jp/resources/2010/05/%e3%82%a2%e3%83%8b%e3%83%a1%e5%88%b6%e4%bd%9c%e8%80%85%e3%81%ae%e3%81%9f%e3%82%81%e3%81%aeaftereffects%e3%83%97%e3%83%a9%e3%82%b0%e3%82%a4%e3%83%b3%e4%bd%9c%e6%88%90%e5%85%a5%e9%96%80%e7%ac%ac-5/#comments</comments>
		<pubDate>Sun, 23 May 2010 10:10:26 +0000</pubDate>
		<dc:creator>bry-ful</dc:creator>
				<category><![CDATA[RESOURCES]]></category>
		<category><![CDATA[TUTORIALS]]></category>
		<category><![CDATA[program]]></category>
		<category><![CDATA[プラグイン]]></category>

		<guid isPermaLink="false">http://ae-users.com/jp/?p=4244</guid>
		<description><![CDATA[
Noise01Test その１　簡単なノイズフィルタ
今回のネタは「ノイズフィルタ」
ノイズは簡単に作成出来る割に、奥の深いエフェクト処理です。簡単にアルゴリズムを説明すると、ピクセルの値にランダムの数値を加算するもの [...]]]></description>
			<content:encoded><![CDATA[<p>
<h4>Noise01Test その１　簡単なノイズフィルタ</h4>
今回のネタは「ノイズフィルタ」<br />
ノイズは簡単に作成出来る割に、奥の深いエフェクト処理です。簡単にアルゴリズムを説明すると、ピクセルの値にランダムの数値を加算するもので、RGBチャンネルに同じ数値ならばモノクロノイズ、個別の数値ならばカラーノイズになります。<strong>SDK_noise</strong>が参考になります。<br />
<br />
まず作るノイズフィルタは、量と強さと二つのパラメータを持つシンプルなものから作成して、少しづつ機能を追加していきます。<br />
パラメータは以下の意味になります。<br />
<ul>
<li><strong>value(%)</strong><br />
ランダムノイズを発生させる確率(%)です。０でなし。１００で必ずランダムの数値を加算します。具体的にはピクセルごとに乱数を発生させ、いのパラメータより乱数が小さい場合にのみピクセルにランダムな数値を加算します。<br />
</li>
<li><strong>&#8220;strong(%)</strong><br />
ノイズの強さをパーセントで指定します。１００％にしても数値自体はランダムなので最大値に鳴らない可能性があり、数値の範囲を200%まで指定できます。加算するランダムな数値の値をこのパラメータで強弱をつけます。<br />
</li>
<li><strong>&#8220;used_color_noise</strong><br />
ノイズをカラーにするかモノクロにするか指定します。</li>
</ul>
<br />
とりあえずソースです。<br />
<a class="dl" href="http://bry-ful.ddo.jp/BRY/software/ap/04/Noise01Test.zip">Noise01Test.zipのダウンロード</a><br />
<hr /><br />
前回まで画像のコピーをAfterEffectsのコールバック関数で行っていましたが、ちょっと気まぐれで自前のコピー関数を作成してあります。<br />
<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/05/Noise01Test_copy.gif" class="sb-img" rel="shadowbox[post-4244];player=img;"><img src="http://ae-users.com/jp/wp-content/uploads/2010/05/Noise01Test_copy.gif" alt="" width="367" height="408" class="alignnone size-full wp-image-4250" /></a><br />
<br />
ただの画像のコピーですが、画像データ処理の最も基本的なコーディングになっています。縦・横方向の２重ループでピクセルへアクセスしinput画像をoutput画像へコピーしています。アドレス計算は1ピクセルごとの加算、ラインごとに横幅の補正を行っています。ほとんどのエフェクト処理も同様なコーディングになります。<br />
<hr /><br />
以下のコードがノイズ処理のメインとなっています。既にoutputに画像が入っている前提のコーディングで、先に説明したノイズのアルゴリズム実装したものです。<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/05/Noise01Test_main.gif" class="sb-img" rel="shadowbox[post-4244];player=img;"><img src="http://ae-users.com/jp/wp-content/uploads/2010/05/Noise01Test_main.gif" alt="" width="602" height="841" class="alignnone size-full wp-image-4257" /></a><br />
補足として、８７行目の<strong>F_SRAND</strong>関数は、Macとの互換性をとるためにマクロ定義したもので、実体は標準関数の<strong>srand</strong>です。<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/05/Noise01Test_rand.gif" class="sb-img" rel="shadowbox[post-4244];player=img;"><img src="http://ae-users.com/jp/wp-content/uploads/2010/05/Noise01Test_rand.gif" alt="" width="303" height="152" class="alignnone size-full wp-image-4274" /></a><br />
RAND_MAXの値がWindowsとMacと異なり、移植の際に苦労したので、マクロで再定義してあります。Windowsオンリならば標準関数そのまま使用してこのマクロを使う必要はありません。<br />
srandには、カレントフレームの値をいれてランダムパターンをフレームごとに同じになるようにしています。<br />
<br />
９０行目の無駄っぽいループは、何故かランダム関数が一定パターンの繰り返しになってノイズというか格子状のパターンが出てしまったので、対処するために入れてあります。標準の<strong>rand</strong>関数は、かなり品質が悪いのでいつも悩みます。<br />
<br />
１１０行目に計算が終わった値の範囲が<strong>unsigned char</strong>に収まるよう処理しています。ピクセルの値の計算時は必ず範囲のチェックを行う必要があります。<br />
<h4>Noise01_Test 問題点 out_flagsの設定</h4>
とりあえず、Noise01Test.aexをリビルドして作成し、動作確認を行います。<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/05/Noise01Test_result.png" class="sb-img" rel="shadowbox[post-4244];player=img;"><img src="http://ae-users.com/jp/wp-content/uploads/2010/05/Noise01Test_result.png" alt="" width="616" height="373" class="alignnone size-full wp-image-4280" /></a><br />
ノイズは問題なく表示されますが、静止フッテージ画像に対してこのプラグインを適応させラムプレビューをしてみてください。ラムプレビューを行うと分かりますが、<strong>ノイズが動きません</strong>。<br />
フレーム番号でランダム関数の初期化を行ってるはずなので、これはおかしな結果です。<br />
<br />
これはコーディングの問題ではなく、パラメータの変化がないため、AfterEffectsはキャシュされた画像を描画に使用してプラグインを呼び出さないのが原因です。<br />
パラメータの変化がなくてもプラグインを毎フレームごとに呼び出すようにするには、<strong>out_flags</strong>のフラグ値を設定する必要があります。<br />
<br />
設定はすでにソースコードにコメントとしてあります。<strong>Noise01Test.cpp</strong>の以下の部分を修正し、それに応じて<strong>Noise01TestPiPL.r</strong>の修正を行ってください。<br />
<br />
<strong>Noise01Test.cppのGlobalSetup</strong><br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/05/Noise01Test_gs.gif" class="sb-img" rel="shadowbox[post-4244];player=img;"><img src="http://ae-users.com/jp/wp-content/uploads/2010/05/Noise01Test_gs.gif" alt="" width="493" height="524" class="alignnone size-full wp-image-4281" /></a><br />
<br />
<strong>Noise01TestPiPL.rのAE_Effect_Global_OutFlags</strong><br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/05/Noise01Test_gs2.gif" class="sb-img" rel="shadowbox[post-4244];player=img;"><img src="http://ae-users.com/jp/wp-content/uploads/2010/05/Noise01Test_gs2.gif" alt="" width="301" height="57" class="alignnone size-full wp-image-4282" /></a><br />
<br />
コメントアウトされているところを入れ替えリビルドを行ったものであれば、期待通りにラムプレビューでノイズが動いてくれるようになります。<br />
<br />
このようにホスト(After Effects)の動作を設定する為に<strong>out_flags</strong>の値を変更する必要があります。<br />
<strong>out_flags</strong>の値は、<strong>AfterEffect.h</strong>で定義されていて、コメントで説明されていますので、一度目を通しておいた方が良いです。<br />
<br />
まぁ、通常のエフェクトプラグインならば今回用意した二つの値のどちらかで対応できます。<br />
しかし、作ったプラグインの動作がおかしい場合は<strong>out_flags</strong>の値を確認してみると良いです。<br />
<h4>AE_out_flags.exe</h4>
<strong>out_flags</strong>の値は、GlobalSetup関数とリソース定義ファイルの２箇所に記述しますが、リソース定義ファイルには、マクロ定数では無く値そのものを記述しなければいけないのが非常に面倒です。<br />
いちいち計算するのが馬鹿らしいので専用ツールを作成しました。<br />
<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/05/ae_out_flags_exe.png" class="sb-img" rel="shadowbox[post-4244];player=img;"><img src="http://ae-users.com/jp/wp-content/uploads/2010/05/ae_out_flags_exe-400x212.png" alt="" width="400" height="212" class="aligncenter size-medium wp-image-4285" /></a><br />
<br />
<a class="dl" href="http://bry-ful.ddo.jp/BRY/software/ap/04/AE_out_flags.zip">AE_out_flags.zipのダウンロード</a><br />
<a href="http://bry-ful.ddo.jp/BRY/software/ap/04/AE_out_flags_src.zip">ソース</a>は、VC# 2008 express editionで作成ビルドしてあります。<br />
<h4>AE_Effect_Version.exe</h4>
ヘッダーで定義しているプラグイン自体のバージョンも、out_flagsと同様に記述が必要なので、こちら用にも専用ツールを作成しました。<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/05/ae_version.png" class="sb-img" rel="shadowbox[post-4244];player=img;"><img src="http://ae-users.com/jp/wp-content/uploads/2010/05/ae_version.png" alt="" width="300" height="287" class="aligncenter size-full wp-image-4288" /></a><br />
<br />
<a class="dl" href="http://bry-ful.ddo.jp/BRY/software/ap/04/AE_Effect_Version.zip">AE_Effect_Version.zipのダウンロード</a><br />
<a href="http://bry-ful.ddo.jp/BRY/software/ap/04/AE_Effect_Version_src.zip">ソース</a>は、同様にVC# 2008 express editionで作成ビルドしてあります。<br />
<h4>プラグインの名前 Tips</h4>
ここで余談ですか、プラグインの名称について。<br />
メニューに表示されるプラグインの名称は、リソース定義ファイルの、<strong>Name</strong>で設定できます。サブメニューの名前は<strong>Category</strong>になります。<br />
（昔は、日本語表記にするだけでいろいろ障害がでましたが、最近では特に問題ないようです。まぁ、僕自身はもう日本語プラグイン名は懲り懲りなので似非英単語を採用してます）<br />
<br />
唯一注意する点は、<strong>プラグイン名の末尾に半角数字をつけてはいけない</strong>ことです。同じプラグインが登録された場合、末尾に数字をつけて区別できるように自動的にリネームされます。そのせいで元が半角数字で終わっているとその数字がただインクリメントされて、プラグインの名前が混乱してしまう事が多発します。<br />
昔この為エライ苦労したことがります（市販のプラグインで一見半角数字で終わってるものがあったりしますが、こっそり末尾にピリオド入ってたりとか苦労の跡が見えて笑ってしまうこともあります）<br />
バージョン管理為に、表示名にバージョン入れるとかすると結構はまります。最近では僕は、表示名ではなくカテゴリ名（サブメニュー名）に情報を入れて管理してます。<br />
<h4>Noise02Iterate PF_ITERATE</h4>
Noise01Teast.aexでは、アドレスの計算を自前のコードで行ってますが、AdobeのSDKではなるべく直接画像にアクセスしないで、<strong>Iterate</strong>というコールバック関数を介してピクセルにアクセスしなさいという記述があります。<br />
僕は好みで上記の方法で画像処理していますが、<strong>Iterate</strong>を使ったアクセス方法も覚えておいた方がいいのでここで説明します。<br />
<br />
とりあえず、以下にNoise01Teastを単純に<strong>Iterate</strong>を使ったものに変えたもの(Noise02Iterate)をあげます。<br />
<br />
<a class="dl" href="http://bry-ful.ddo.jp/BRY/software/ap/04/Noise02Iterate.zip">Noise02Iterate.zipのダウンロード</a><br />
機能はNoise01Testとまったく同じです。<br />
<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/05/Noise02Iterate_mr.gif" class="sb-img" rel="shadowbox[post-4244];player=img;"><img src="http://ae-users.com/jp/wp-content/uploads/2010/05/Noise02Iterate_mr.gif" alt="" width="602" height="463" class="aligncenter size-full wp-image-4293" /></a><br />
以上が<strong>Iterate</strong>の使用サンプルです。一見するとよくわかりませんが、まぁ要するに適当なパラメータを与えて実行すれば全ピクセルへのアクセスを自動的にするって機能です。<br />
ピクセル単位の処理は別に関数で実装し、その関数ポインタを引数の一つとしています。<br />
<br />
関数ポインタはここでは説明しませんので、適当に調べてください。かなり便利な機能で覚えるとプラグインの高速化等で役に立ちます。<br />
<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/05/Noise02Iterate_sub.gif" class="sb-img" rel="shadowbox[post-4244];player=img;"><img src="http://ae-users.com/jp/wp-content/uploads/2010/05/Noise02Iterate_sub.gif" alt="" width="567" height="622" class="aligncenter size-full wp-image-4296" /></a><br />
以上が<strong>Iterate</strong>で呼び出される関数です。引数・引数の変数型は変更できません、<br />
<table border="1">
<tr><th>引数順</th><th>引数の型</th><th>引数の説明</th></tr>
<tr><th>第１引数</th><th>A_long refcon</th><th>A_longですが、実際はポインタ。<br />
PF_ITERATEの第5引数で指定された変数の先頭アドレスになります。</th></tr>
<tr><th>第２引数</th><th>A_long x</th><th>ターゲットピクセルのX座標</th></tr>
<tr><th>第３引数</th><th>A_long y</th><th>ターゲットピクセルのY座標</th></tr>
<tr><th>第４引数</th><th>PF_Pixel 　*inP</th><th>インプット画像のターゲットピクセルへのポインタ</th></tr>
<tr><th>第５引数</th><th>PF_Pixel 　*outP</th><th>アウトプット画像のターゲットピクセルへのポインタ</th></tr>
</table>
<br />
refconに必要なパラメータを収納した変数（構造体）を設定すれば、動作に必要なパラメータをこの関数へ引き渡すことができます。<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/05/Noise02Iterate_info.gif" class="sb-img" rel="shadowbox[post-4244];player=img;"><img src="http://ae-users.com/jp/wp-content/uploads/2010/05/Noise02Iterate_info.gif" alt="" width="248" height="143" class="aligncenter size-full wp-image-4299" /></a><br />
<br />
<strong>Iterate</strong>を使った処理はポインタを理解してないとただ面倒なだけですが、実際はかなり効率的でスマートな操作をユーザーに提供します。<br />
アドレスの計算をやってくれる他にも、After Effectsのいろいろな機能に自動的に対応しますので、なるべく使ったほうがよいです。<br />
<br />
まぁこの講座では、基本の説明ため<strong>Iterate</strong>はほぼ使いません。<br />
<h4>Noise03Lv</h4>
<strong>Noise01Test</strong>はあまりにも簡単なので、もう少し凝った機能を実装してみます。<br />
という事で、<strong>Noise03Lv</strong>は元画像の明るさに応じてノイズの強さを変えられるプラグインにします。<br />
（昔、画面の明るいところと暗いところでノイズの強さを変えてくれというオーダーがあり、面倒なコンポジションを組んだ事を思い出したので）<br />
<br />
とりあえず、ソース。<br />
<a class="dl" href="http://bry-ful.ddo.jp/BRY/software/ap/04/Noise03Lv.zip">Noise03Lv.zipのダウンロード</a><br />
<hr /><br />
パラメータは四つ。<br />
<ul>
<li>value(%)<br />
これはNoise01Testのものと同じもの。<br />
</li>
<li>hi(%)<br />
明るい部分のノイズの強さ。<br />
</li>
<li>mid(%)<br />
中間部分のノイズの強さ。<br />
</li>
<li>low(%)<br />
暗い部分のノイズの強さ。<br />
</li>
</ul>
カラーノイズはあまり必要そうでないことと、コーディングの都合（後で説明）で無しになっています。<br />
<hr /><br />
アルゴリズムは以下の様に。<br />
<ol>
	<li>画像の明るさを識別するために3個のテーブル用配列を確保。</li>
	<li>テーブルの初期化</li>
	<li>ピクセルの明るさを計算</li>
	<li>ピクセルの明るさをテーブル参照で、明るい部分の強度・中間部分の強度・暗い部分の強度を求める</li>
	<li>おのおのの強度とパラメータの数値を考慮して、そのピクセルのノイズの強さを計算</li>
	<li>ノイズを描画</li>
	<li>３以後の処理を全ピクセルで実行</li>
</ol>
って感じになります。<br />
テーブルとは、ピクセルの強さから明暗を識別する計算をあらかじめ終わらせておいて、配列にまとめたものになります。通常は高速化のテクニックの一つですが今回はコーディングの量を減らすために使ってます。<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/05/Noise03Lv_mr.gif" class="sb-img" rel="shadowbox[post-4244];player=img;"><img src="http://ae-users.com/jp/wp-content/uploads/2010/05/Noise03Lv_mr.gif" alt="" width="637" height="687" class="aligncenter size-full wp-image-4322" /></a><strong><br />
MainRender</strong>では、テーブル用のメモリを動的に確保しています。メモリ確保に使うコールバック関数<strong>PF_NEW_HANDLE</strong>は、バイト数でメモリを確保して、確保されたメモリの先頭アドレスを<strong>ハンドル</strong>（ポインタのポインタ）で返します。<strong>ハンドル</strong>はかなり難しい概念ですがでここではこんな感じに使うって覚えれば大丈夫です。<br />
3個のテーブルを準備してますが、<strong>PF_NEW_HANDLE</strong>で三つ分まとめて確保して、先頭アドレスを修正して三個の変数に割り振るっています。<br />
使い終わったら<strong>PF_DISPOSE_HANDLE</strong>でメモリを開放しています。JavaScriptのような便利な言語だとガベレージ機能で勝手に開放してくれますが、C/C++の場合はちゃんと自分で管理しないといけません。<br />
<hr /><br />
テーブルの初期化では、以下の定数を設定しています。<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/05/Noise03Lv_tbl.gif" class="sb-img" rel="shadowbox[post-4244];player=img;"><img src="http://ae-users.com/jp/wp-content/uploads/2010/05/Noise03Lv_tbl.gif" alt="" width="293" height="100" class="aligncenter size-full wp-image-4325" /></a><br />
<ul>
<li><strong>LV_LOW_OVR</strong><br />
完全に暗い明るさ。２５％に設定。<br />
</li>
<li><strong>LV_MID_TOP</strong><br />
中間職の始まりの明るさ。４０％に設定。<br />
</li>
<li><strong>LV_MID_BTM</strong><br />
中間職の終わりの明るさ。７０％に設定。<br />
</li>
<li><strong>LV_HI_OVR</strong><br />
完全に明るい明るさ。８０％に設定。<br />
</li>
<li><strong>LV_MAX</strong><br />
テーブルの数値の最大値1024に設定。<br />
</li>
</ul>
この数値は特に検証したものではなく、適当に設定してます。<br />
以上の数値を使いテーブルを初期化します。<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/05/Noise03Lv_mktblgif.jpg" class="sb-img" rel="shadowbox[post-4244];player=img;"><img src="http://ae-users.com/jp/wp-content/uploads/2010/05/Noise03Lv_mktblgif-388x399.jpg" alt="" width="388" height="399" class="aligncenter size-medium wp-image-4326" /></a><br />
テーブルの数値は、明るい部分の強度・中間部分の強度・くらい部分の強度をピクセルの明るさの数値全て(8bitの場合256）で計算したものです。<br />
16bit化を考えて定数をパーセントとして設定していますので、8Bitの場合の数値に変換し、適当にリニア補完で計算しています。<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/05/tbl_image.png" class="sb-img" rel="shadowbox[post-4244];player=img;"><img src="http://ae-users.com/jp/wp-content/uploads/2010/05/tbl_image.png" alt="" width="600" height="301" class="aligncenter size-full wp-image-4369" /></a><br />
<hr /><br />
以下がノイズ処理のメインです。<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/05/Noise03Lv_mr8.gif" class="sb-img" rel="shadowbox[post-4244];player=img;"><img src="http://ae-users.com/jp/wp-content/uploads/2010/05/Noise03Lv_mr8-650x544.gif" alt="" width="650" height="544" class="aligncenter size-large wp-image-4331" /></a><br />
１２１行目でピクセルの明るさを計算しています。今回はYUV変換のYの値を明るさとしています。この辺のことは<strong>YUV</strong>を検索すれば詳細な解説があるHPを見つけられます。<br />
<br />
124行目でランダムな数値を計算していて、数値は-255から255の間としています。<br />
<br />
１２６行目で明るさの数値をテーブル参照・パラメータの数値から各レベルの強度を計算しています。１３０行目で判定を行っていて、一番強度を強いものを採用しています。<br />
<br />
１３１行目でランダムの数値を130行目で求めた強度で補正しています。<br />
<br />
132行目でランダム処理です。Noise01Testと同じ処理ですが、関数化してシンプルにしてます。<br />
<br />
所々に入っている<strong>F_RAND</strong>関数は、条件分岐によって分岐されてもF_RANDの実行回数が変わらないようにするためのものです、。<br />
<hr /><br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/05/Noise03Lv_fin.png" class="sb-img" rel="shadowbox[post-4244];player=img;"><img src="http://ae-users.com/jp/wp-content/uploads/2010/05/Noise03Lv_fin.png" alt="" width="633" height="420" class="aligncenter size-full wp-image-4336" /></a><br />
<br />
上図がカラーカーブで作成したグラデーションに適応させた物になります。<br />
<br />
<h4>Noise04Lv 　改造</h4>
<strong>Noise03Lv</strong>は解説用に作ったとはいえ、かなりの問題があります。<br />
具体的には、以下の2点があげられます。<br />
<ol>
<li><strong>明るさの閾値が固定でかついい加減</strong><br />
明るさの識別処理はあまりにもシンプルすぎて、実際の使用には耐えられそうに無い。<br />
</li>
<li><strong>ノイズの品質が悪い</strong><br />
基本的に1ピクセルのノイズなので、パラメータを強くするとギザギザしたジャギっぽい質感になり、弱くすると最近のHD画像では消えてしまう可能性がある。<br />
</li>
</ol>
明るさの識別はそれだけで一つの大きなテーマになってしまいますので今回はパスします（パラメータとしてユーザーが調整できるようにするだけでも、十分に実用になると思いますが）<br />
ここでは、ノイズの品質にのみ対処してみます。といっても、複雑なことはしないで、ノイズに軽くぼかし処理を加えるだけの簡単な処理してみます。<br />
<hr /><br />
で、作成したものがこれになります。<br />
<a class="dl" href="http://bry-ful.ddo.jp/BRY/software/ap/04/Noise04Lv.zip">Noise04Lv.zipのダウンロード</a><br />
変更点は、手順を変えてノイズの数値だけを元画像と加算しないでとりあえずアウトプット画像に描画し、ノイズのみにぼかし処理を加え、その後に元画像と合成したことです。<br />
<hr /><br />
まず、ノイズの値を全ピクセル分計算しておきます。<br />
ノイズの値を一時退避としてアウトプット画面に代入しています。値の範囲は-255から255の間となるのでredとgreenの2チャンネル分使って保存しています。値がマイナスなら、redへプラスならgreenへ値を書き込んでおきます。<br />
Noise3Lvでカラーノイズをなくしたのはこの処理を想定していたからです。RGB個別のノイズを行う場合にはもうメモリが足りないので、ノイズの値を小さくするか、作業バッファーを別に作成する必要があります。<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/05/Noise04Lv_001.gif" class="sb-img" rel="shadowbox[post-4244];player=img;"><img src="http://ae-users.com/jp/wp-content/uploads/2010/05/Noise04Lv_001.gif" alt="" width="616" height="531" class="aligncenter size-full wp-image-4349" /></a><br />
本来なら、退避用のメモリを確保するところですが、メモリ節約のためこのような処理にしています。<br />
<br />
ちなみに、アウトプット画面はこのような使い方をしても大丈夫ですが、インプット画面ではいろいろと制約があります。インプット画面はAfter Effectsのイメージキャッシュそのものなので、インプット画面に書き込みを行うと、描画がおかしくなります。一応、out_flagsでフラグを設定することで回避できますが、イメージキャッシュを毎回クリアされてしまうので、効率悪くなるので使うなとSDKでは明記されてます。<br />
<hr /><br />
全画面分のノイズの値にぼかし処理を加えます。red/greenチャンネルの値を処理して計算結果をblue/aplhaのチャンネルに書きこみます。<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/05/Noise04Lv_002.gif" class="sb-img" rel="shadowbox[post-4244];player=img;"><img src="http://ae-users.com/jp/wp-content/uploads/2010/05/Noise04Lv_002.gif" alt="" width="386" height="574" class="aligncenter size-full wp-image-4354" /></a><br />
<br />
ぼかしのアルゴリズムは、ピクセルの周囲９ピクセル分の平均を求める簡単なものですが、一応ピクセルの位置によって重み付けを変えて計算しています。<br />
<br />
また、９ピクセル分ほとんど同じコードが並ぶことになるので、マクロで<strong>NOISE_BLUE</strong>を定義してコーディング量を減らしています。関数化しても同様な事は行えますが、繰り返しが多くなる画像処理ではオーバーヘッドによる速度低下を防ぐ意味でも、マクロ定義は有効です。<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/05/Noise04Lv_003.gif" class="sb-img" rel="shadowbox[post-4244];player=img;"><img src="http://ae-users.com/jp/wp-content/uploads/2010/05/Noise04Lv_003.gif" alt="" width="514" height="115" class="aligncenter size-full wp-image-4355" /></a><br />
<hr /><br />
ノイズにぼかしを加えたら、元画像と合成して終了です。<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/05/Noise04Lv_004.gif" class="sb-img" rel="shadowbox[post-4244];player=img;"><img src="http://ae-users.com/jp/wp-content/uploads/2010/05/Noise04Lv_004.gif" alt="" width="522" height="300" class="aligncenter size-full wp-image-4360" /></a><br />
After Effectsで動作を確認してみます。<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/05/Noise04Lv_005.png" class="sb-img" rel="shadowbox[post-4244];player=img;"><img src="http://ae-users.com/jp/wp-content/uploads/2010/05/Noise04Lv_005.png" alt="" width="600" height="407" class="aligncenter size-full wp-image-4365" /></a><br />
単純なぼかしですが、見た目はかなり変わりました。Noise03Lvと比較してみると以下のようになります。<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/05/Noise04Lv_006.png" class="sb-img" rel="shadowbox[post-4244];player=img;"><img src="http://ae-users.com/jp/wp-content/uploads/2010/05/Noise04Lv_006.png" alt="" width="593" height="293" class="aligncenter size-full wp-image-4366" /></a><br />
比べてみると、品質を上げたというより、単純にぼかしただけって印象になってますが（プログラムもそのとおり）、HDサイズで作業していて放送・販売時にSDサイズにダウンコンされる場合には、効果があるというかダウンコンによる印象の変化が少なくなると思います。<br />
<h4>次回予告</h4>
次回は、画像の描画を詳しく説明しようと思ってます。<br />
<strong>「簡易スッパッタリング描画フィルタを作ってみよう！」</strong>です。</p>

	タグ : <a href="http://ae-users.com/jp/tag/program/" title="program" rel="tag nofollow">program</a>, <a href="http://ae-users.com/jp/tag/%e3%83%97%e3%83%a9%e3%82%b0%e3%82%a4%e3%83%b3/" title="プラグイン" rel="tag nofollow">プラグイン</a><span id="addbt">[<a onclick="jQuery('p#addtags').slideDown('fast');jQuery('#addbt').fadeOut('fast');">タグを追加する</a>]</span><br />

	<h4>関連する投稿</h4>
	<ul class="st-related-posts">
	<li><a href="http://ae-users.com/jp/resources/2010/06/%e3%82%a2%e3%83%8b%e3%83%a1%e5%88%b6%e4%bd%9c%e8%80%85%e3%81%ae%e3%81%9f%e3%82%81%e3%81%aeaftereffects%e3%83%97%e3%83%a9%e3%82%b0%e3%82%a4%e3%83%b3%e4%bd%9c%e6%88%90%e5%85%a5%e9%96%80%e7%ac%ac-7/" title="アニメ制作者のためのAfterEffectsプラグイン作成入門(第６回)　Effectプラグインの構造・ユーザーインターフェース (2010/6月/13)">アニメ制作者のためのAfterEffectsプラグイン作成入門(第６回)　Effectプラグインの構造・ユーザーインターフェース</a> (4)</li>
	<li><a href="http://ae-users.com/jp/resources/2010/06/%e3%82%a2%e3%83%8b%e3%83%a1%e5%88%b6%e4%bd%9c%e8%80%85%e3%81%ae%e3%81%9f%e3%82%81%e3%81%aeaftereffects%e3%83%97%e3%83%a9%e3%82%b0%e3%82%a4%e3%83%b3%e4%bd%9c%e6%88%90%e5%85%a5%e9%96%80%e7%ac%ac-6/" title="アニメ制作者のためのAfterEffectsプラグイン作成入門(第５回)　スパッタリングプラグインを作成 (2010/6月/04)">アニメ制作者のためのAfterEffectsプラグイン作成入門(第５回)　スパッタリングプラグインを作成</a> (13)</li>
	<li><a href="http://ae-users.com/jp/resources/2010/05/%e3%82%a2%e3%83%8b%e3%83%a1%e5%88%b6%e4%bd%9c%e8%80%85%e3%81%ae%e3%81%9f%e3%82%81%e3%81%aeaftereffects%e3%83%97%e3%83%a9%e3%82%b0%e3%82%a4%e3%83%b3%e4%bd%9c%e6%88%90%e5%85%a5%e9%96%80%e7%ac%ac-3/" title="アニメ制作者のためのAfterEffectsプラグイン作成入門(第２回)　とりあえず作ってみよう！ (2010/5月/09)">アニメ制作者のためのAfterEffectsプラグイン作成入門(第２回)　とりあえず作ってみよう！</a> (6)</li>
	<li><a href="http://ae-users.com/jp/tutorials/2010/05/%e3%82%a2%e3%83%8b%e3%83%a1%e5%88%b6%e4%bd%9c%e8%80%85%e3%81%ae%e3%81%9f%e3%82%81%e3%81%aeaftereffects%e3%83%97%e3%83%a9%e3%82%b0%e3%82%a4%e3%83%b3%e4%bd%9c%e6%88%90%e5%85%a5%e9%96%80%e7%ac%ac-2/" title="アニメ制作者のためのAfterEffectsプラグイン作成入門(第１回)　SDKをコンパイルしてみよう! (2010/5月/05)">アニメ制作者のためのAfterEffectsプラグイン作成入門(第１回)　SDKをコンパイルしてみよう!</a> (8)</li>
	<li><a href="http://ae-users.com/jp/tutorials/2010/05/%e3%82%a2%e3%83%8b%e3%83%a1%e5%88%b6%e4%bd%9c%e8%80%85%e3%81%ae%e3%81%9f%e3%82%81%e3%81%aeaftereffects%e3%83%97%e3%83%a9%e3%82%b0%e3%82%a4%e3%83%b3%e4%bd%9c%e6%88%90%e5%85%a5%e9%96%80%e7%ac%ac/" title="アニメ制作者のためのAfterEffectsプラグイン作成入門(第０回) (2010/5月/05)">アニメ制作者のためのAfterEffectsプラグイン作成入門(第０回)</a> (10)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://ae-users.com/jp/resources/2010/05/%e3%82%a2%e3%83%8b%e3%83%a1%e5%88%b6%e4%bd%9c%e8%80%85%e3%81%ae%e3%81%9f%e3%82%81%e3%81%aeaftereffects%e3%83%97%e3%83%a9%e3%82%b0%e3%82%a4%e3%83%b3%e4%bd%9c%e6%88%90%e5%85%a5%e9%96%80%e7%ac%ac-5/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>アニメ制作者のためのAfterEffectsプラグイン作成入門(第3回)　プラグインの改造（修正) スケルトンの作成</title>
		<link>http://ae-users.com/jp/resources/2010/05/%e3%82%a2%e3%83%8b%e3%83%a1%e5%88%b6%e4%bd%9c%e8%80%85%e3%81%ae%e3%81%9f%e3%82%81%e3%81%aeaftereffects%e3%83%97%e3%83%a9%e3%82%b0%e3%82%a4%e3%83%b3%e4%bd%9c%e6%88%90%e5%85%a5%e9%96%80%e7%ac%ac3/</link>
		<comments>http://ae-users.com/jp/resources/2010/05/%e3%82%a2%e3%83%8b%e3%83%a1%e5%88%b6%e4%bd%9c%e8%80%85%e3%81%ae%e3%81%9f%e3%82%81%e3%81%aeaftereffects%e3%83%97%e3%83%a9%e3%82%b0%e3%82%a4%e3%83%b3%e4%bd%9c%e6%88%90%e5%85%a5%e9%96%80%e7%ac%ac3/#comments</comments>
		<pubDate>Sat, 15 May 2010 15:32:27 +0000</pubDate>
		<dc:creator>bry-ful</dc:creator>
				<category><![CDATA[RESOURCES]]></category>
		<category><![CDATA[TUTORIALS]]></category>
		<category><![CDATA[program]]></category>
		<category><![CDATA[プラグイン]]></category>

		<guid isPermaLink="false">http://ae-users.com/jp/?p=4051</guid>
		<description><![CDATA[
プラグインの改造（修正)　PSET.aexの16bit化
今回は、PSET.aexの改造（修正)を行い、ついでにスケルトンプラグラムの紹介までやってみます。
予定ではC/C++の事をするつもりでしたが、この投稿はプログ [...]]]></description>
			<content:encoded><![CDATA[<p>
<h4>プラグインの改造（修正)　PSET.aexの16bit化</h4>
今回は、<strong>PSET.aex</strong>の改造（修正)を行い、ついでにスケルトンプラグラムの紹介までやってみます。<br />
予定ではC/C++の事をするつもりでしたが、この投稿はプログラム講座ではなくAEプラグインの作成が目的なので、端折ります。（まぁプログラムの話ばかりだと面白くないってのが、本音ですが^^;）<br />
<br />
まず、16bitへの対応から始めます。簡単で結構重要な修正です。<br />
<h4>16bit対応の手順</h4>
PSET.aexは8bitオンリーのプラグインですが、以下の項目を変更することで16bit対応になります。これは他のプラグインでも同様です。やる気があれば32bitにも対応可能です。<br />
<ul>
<li><strong>GlobalSetup</strong>で、<strong>out_flags</strong>に<strong>PF_OutFlag_DEEP_COLOR_AWARE</strong>を追加。<br />
out_flagsでこのプラグインが16bitに対応していることをホスト(AfterEffects)へ通達します。<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/05/PSET16_out_flags.png" class="sb-img" rel="shadowbox[post-4051];player=img;"><img src="http://ae-users.com/jp/wp-content/uploads/2010/05/PSET16_out_flags.png" alt="" width="468" height="44" class="alignnone size-full wp-image-4059" /></a><br />
忘れすにPiPLリソースも変更しておきます。<br />
</li>
<li>画像の色深度を確認。<br />
実際にホストから渡された画像が8bitか16bitか調べます。これはマクロが用意されていて、<strong>PF_WORLD_IS_DEEP(output)</strong>で判別できます。<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/05/PSET16_deps.png" class="sb-img" rel="shadowbox[post-4051];player=img;"><img src="http://ae-users.com/jp/wp-content/uploads/2010/05/PSET16_deps.png" alt="" width="511" height="57" class="alignnone size-full wp-image-4067" /></a><br />
他にもAEGPの<strong>PF_WorldSuite2</strong>の<strong>PF_GetPixelFormat</strong>でもっと詳細な情報(8/16/32bit)が得られます。32bit対応の場合はこちらで判別します。<br />
</li>
<li>8bit/16bitで画像の実サイズの計算が違う。<br />
画像の実サイズは、<strong>PF_EffectWorld</strong>の<strong>rowbytes</strong>を1ピクセルのバイト数で割ることで求めていますので、対処します。<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/05/PSET16_width.png" class="sb-img" rel="shadowbox[post-4051];player=img;"><img src="http://ae-users.com/jp/wp-content/uploads/2010/05/PSET16_width.png" alt="" width="601" height="117" class="alignnone size-full wp-image-4070" /></a><br />
</li>
<li>8bit/16bitで処理コードを変える。<br />
C++の機能で同一コードで対応してもいいですが、オーバーヘッドで処理速度がイマイチなので、僕は8bit/16bitで処理コードを分けてコーディングしています。<br />
</li>
<li>画像データをキャストしなおす。<br />
画像データはの型は<strong>PF_PixelPtr</strong>で、8Bitの場合そのまま扱えますが、16bit時は<strong>(PF_Pixel16 *)</strong>へキャストし直します。<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/05/PSET16_cast.png" class="sb-img" rel="shadowbox[post-4051];player=img;"><img src="http://ae-users.com/jp/wp-content/uploads/2010/05/PSET16_cast.png" alt="" width="521" height="163" class="alignnone size-full wp-image-4062" /></a></li>
</ul>
<br />
以上の項目で16bit対応ができます。<br />
ちょっとプログラムのこと（ポインタとか）が分からないとちんぷんかんだと思いますが、慣れればたいしたことないです。<br />
<br />
参考に16bit対応済みのソースです。修正前のソースと比較した方がわかりやすかもしれません<br />
<br />
<a class="dl" href="http://bry-ful.ddo.jp/BRY/software/ap/03/PSET_16Bit.zip">PSET_16Bit.zipのダウンロード</a><br />
<h4>画像の扱い。その１　ピクセル(PF_Pixel)</h4>
以上の16bit対応の説明は、わかる人には簡単だがそうでない人には？って感じだと思います。基本的な画像処理についての知識が有るか無いかで分かれると思います。<br />
ここでは、Effectプラグイン作成では流石に避けて通れない画像処理の基本を説明します。<br />
<br />
まず、<strong>ピクセル</strong>から。<br />
AfterEffectsを触ってる人なら<strong>ピクセル</strong>って概念はわかると思いますが、プログラム的にピクセルとはどんな意味でしょうか？<br />
<br />
<a href="http://ja.wikipedia.org/wiki/%E3%83%94%E3%82%AF%E3%82%BB%E3%83%AB">ウィキペディア</a>で調べるとピクセルとは「<strong>情報(色調や階調)を持つ最小単位</strong>」って定義されてます（今では無意味となったドットとピクセルの違いとか思い出しますな）<br />
普通の画像処理ソフトをを作る場合は、まずピクセルの定義から始めますが、AEプラグインの場合はすでにSDKの中で既に定義されています（これは結構幸せな事です）<br />
<br />
<strong>PF_Pixel</strong>がピクセルを定義した型になります。具体的には以下のように定義された構造体変数にしかすぎません。<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/05/pf_pixel.gif" class="sb-img" rel="shadowbox[post-4051];player=img;"><img src="http://ae-users.com/jp/wp-content/uploads/2010/05/pf_pixel.gif" alt="" width="305" height="69" class="alignnone size-full wp-image-4123" /></a><br />
<br />
<strong>A_u_char</strong>は符号なし8bitサイズの変数で、それが４つ（alpha/red/green/blue)のメンバとなっています。ごく普通の変数です。画像処理といっても実は別に特別な事はしてません。ごく普通に値を代入したり、計算することができます。<br />
<br />
メンバの型を<strong>A_u_short(unsigned short)</strong>に変えたものは<strong>PF_Pixel16</strong>と定義されていてこれが16bit画像のピクセルになります。AfterEffectsは他にも<strong>A_FpShort(float)</strong>の<strong>PF_Pixel32</strong>もあります。(AfterEffect.hを確認のこと）　<br />
これらのピクセル構造体に適当な値を入れて処理すれば、それが画面に描画されます。AfterEffectsのプロジェクト設定の色深度の設定は、内部で扱うピクセルの型（サイズ)を切り替えているって事になります。<br />
<br />
各メンバの最大値は、AfterEffect.hで定義されていています。コード内に直接数値を打ち込むより、この定数マクロをなるべく使った方が幸せになります（8bitのコードから16bitへ変換が簡単な置換でできる）<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/05/pf_mac_chan.gif" class="sb-img" rel="shadowbox[post-4051];player=img;"><img src="http://ae-users.com/jp/wp-content/uploads/2010/05/pf_mac_chan.gif" alt="" width="297" height="65" class="alignnone size-full wp-image-4132" /></a><br />
<br />
ちなみにPF_Pixelのサイズは4Byte・PF_Pixel16のサイズは8BytePF_Pixel32のサイズは16Byteとなり、16bitモードでは2倍、floatモードでは４倍のメモリ消費量になります。<br />
<h4>画像の扱い。その２　画像データへのアクセス</h4>
ピクセルについて簡単に説明した後は、具体的な画像について。<br />
<br />
AfterEfefctsの画像を扱うための型にはPF_InData/PF_OutData/PF_EffectWorldと３種類あり、それぞれインプット画面の情報・アウトプット画面の情報・画像データそのもの型となってます。<br />
インプット画像とは、Effectをかける元画像でAfterEffectsはこれを作成してプラグインに渡します。PF_InDataは画像データでなくコールバック関数の呼び出しアドレスやらプラグインの動作に必要な情報が入っている構造体です。<br />
アウトプット画面はエフェクトを処理が終わった画像をいれるところで、この画面に描画を行いプラグインのRender関数を正常終了すれば、必要なレイヤ合成を行い画面に表示します。PF_OutDataはプラグインからホスト(AfterEffects)へ動作を設定したりするための構造体となります。(out_flags等)<br />
<br />
なんだか言葉で説明してもよくわからないですな^^;　<br />
実は僕もよくわかってなかったりします。必要になったらその定義を見て対処する程度の認識でいいです。しっかりと覚えないといけないのが<strong>PF_EffectWorld</strong>です。（定義では<strong>PF_LayerDef</strong>なので注意してね）<br />
二つのPF_EffectWorld（画像データ）とインプット用の情報(PF_InData)とアウトプット用の情報(PF_OutData)があるって覚えるだけで、詳細は作っていく過程でなんとなくわかればいいです。<br />
<br />
<strong>PF_EffectWorld（PF_LayerDef）</strong>が画像データそのものの型で、そのメンバの<strong>data</strong>に、画像配列の先頭アドレスが収納されています。<br />
<br />
ここからその画像配列の説明をします。<br />
<br />
以下の図は5Pixelｘ5Pixelサイズの画像の画像配列データのイメージになります。<br />
画像配列は、PF_Pixelの1次元配列で左上(x0,y0)の位置を起点にして並んでいます。この図で(x?,y?)はXY座標・大きい二桁の数字は画像配列のインデックスを意味してます。<br />
<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/05/EW_image.png" class="sb-img" rel="shadowbox[post-4051];player=img;"><img src="http://ae-users.com/jp/wp-content/uploads/2010/05/EW_image.png" alt="" width="573" height="478" class="alignnone size-full wp-image-4168" /></a><br />
<br />
任意の位置(XY座標)にアクセスするためには、XY位置を1次元インデックスに変換する必要があります。しかし、AfterEffectsの画像は扱いを楽にするために適当なサイズに切り上げます。イメージ画像で右側の白い円（ピクセル）がそれに相当します。なんか一見無駄に感じますが、切りの良いサイズ(32bitの整数倍・64bitの整数倍とか)にすればCPUは高速にデータを転送します（つまり実行速度が早くなる）実は、windows BMPファイルの内部データも同じだったりします。<br />
<br />
具体的には画像配列へのアクセスは、<br />
<strong>画像配列のインデックス ＝　横Xの位置 　＋　（縦Yの位置 ×　実際の横幅）</strong><br />
という計算式で求められます。（位置のスタートは０です）<br />
プラグインでは高速化のため最適化して計算をしないようにするのでわかりづらいですが、これが基本となります。<br />
Cのコードだと、<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/05/pic_ac.gif" class="sb-img" rel="shadowbox[post-4051];player=img;"><img src="http://ae-users.com/jp/wp-content/uploads/2010/05/pic_ac.gif" alt="" width="532" height="136" class="alignnone size-full wp-image-4146" /></a><br />
と入った感じになります。<br />
Cの参考書で、ポインターとキャスト及び配列へのアクセスを勉強するのが習得への近道です。<br />
<h4>スケルトンプログラム</h4>
PSET.aexのソースは説明には都合が良いが普通にプラグインを作るときには手間が増えるので、少し直してスケルトンプログラムへ改造しました。<br />
改造と言っても、ほとんど作り直し状態になってますが、基本的には変わっていません。<br />
<br />
ということで、今回作成したAEプラグイン作成用のスケルトンプラグインです。<br />
<br />
<a class="dl" href="http://bry-ful.ddo.jp/BRY/software/ap/03/MySkeleton.zip">MySkeletonのダウンロード</a><br />
<br />
(追記)<br />
構成を追加した物に差し替えました(2010/5/2)<br />
<br />
ファイルの構成は以下の通り。<br />
<table border="1">
<tr><th>ファイル名</th><th>説明</th></tr>
<tr><td>MySkeleton.h</td><td>プラグインのヘッダーファイル。各種の定義。プロトタイプ宣言</td><tr>
<tr><td>MySkeleton.cpp</td><td>プラグインのメイン</td><tr>
<tr><td>MySkeletonMain.cpp</td><td>プラグイン描画関係のコード用</td><tr>
<tr><td>MySkeletonPiPL.r</td><td>PiPLリソース定義ファイル</td><tr>
<tr><td>Win/MySkeleton.vcproj</td><td>プロジェクトファイル。</td><tr>
<tr><td>Win/MySkeleton.sln</td><td>ソリューションファイル。複数のプロジェクトを管理できる。</td><tr>
<tr><td>Win/MySkeletonPiPL.rc</td><td>リソース作成時の中間ファイル</td><tr>
</table>
<br />
MySkeletonMain.cppはソースをわかりやすくするために、描画関係のコードをMySkeleton.cppから分離したものです。最初から8bit/16bit対応をさせてあります。<br />
<br />
重要な箇所は次の通り。<br />
<ol>
	<li><strong>MySkeleton.h パラメータUIのインデックス</strong><br />
<strong>enum</strong>定義されたパラメータUIのインデックス定数。<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/05/MyS_enum.png" class="sb-img" rel="shadowbox[post-4051];player=img;"><img src="http://ae-users.com/jp/wp-content/uploads/2010/05/MyS_enum.png" alt="" width="339" height="279" class="alignnone size-full wp-image-4083" /></a><br />
<strong>enum</strong>は並べて定義するだけで、自動に数値を定義できる便利な機能で、順番が重要な定数定義を行う場合便利です。<br />
INPUTとNUM_PARAMSの間に自分が定義したい項目を追加していきます。<br />
</li>
<li><strong>MySkeleton.h 文字列・その他定数の定義</strong><br />
<strong>#define</strong>で定数の定義を行っています。スケルトンでは、パラメータUIの表示文字列の定義とかバージョンの定義とか行っています。<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/05/MyS_define.png" class="sb-img" rel="shadowbox[post-4051];player=img;"><img src="http://ae-users.com/jp/wp-content/uploads/2010/05/MyS_define.png" alt="" width="579" height="254" class="alignnone size-full wp-image-4084" /></a><br />
defineは定数の定義だけではなく<strong>マクロ定義</strong>も行えます。これはかなり使えますので、Cの参考書等で覚えましょう。<br />
</li>
<li><strong>MySkeleton.h　AE_params構造体</strong><br />
このスケルトンの重要な項目です。プラグインの画像描画に必要な変数を構造体にまとめたものです。<br />
typedef structで構造体を定義しています。<br />
<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/05/MyS_AE_params.png" class="sb-img" rel="shadowbox[post-4051];player=img;"><img src="http://ae-users.com/jp/wp-content/uploads/2010/05/MyS_AE_params.png" alt="" width="371" height="325" class="alignnone size-full wp-image-4085" /></a><br />
<br />
各メンバの説明は次の通り。<br />
構造体のサイズを無理やり64Byteにするために最後に適当なメンバが二つ入れてあります。ただし、PF_Booleanのサイズは2Byteなのでプロジェクトのプロパティで構造体のアライメントを4Byteにしておかないと行けない（構成プロパティ:C/C++:コード生成]構造体メンバのアライメントを4バイト(/Zp4)に設定)<br />
<br />
<table border="1">
<th>メンバ名</th><th>型</th><th>説明</th></tr>
<td>in_data</td><td>PF_InData *</td><td>インプット画像情報の構造体のポインタ</td></tr>
<td>out_data</td><td>PF_OutData *</td><td>アウトプット画像情報の構造体のポインタ</td></tr>
<td>input</td><td>PF_EffectWorld *</td><td>インプット画像の構造体のポインタ</td></tr>
<td>output</td><td>PF_EffectWorld *</td><td>アウトプット画像の構造体のポインタ</td></tr>
<td>inData</td><td>PF_PixelPtr</td><td>インプット画像データの先頭アドレス</td></tr>
<td>outData</td><td>PF_PixelPtr</td><td>アウトプット画像データの先頭アドレス</td></tr>
<td>is16Bit</td><td>PF_Boolean</td><td>16bitならTRUE。8bitならFALSE</td></tr>
<td>width</td><td>A_long</td><td>画像の横ピクセル</td></tr>
<td>height</td><td>A_long</td><td>画像の縦ピクセル</td></tr>
<td>inWidth</td><td>A_long</td><td>インプット画像データの実際の横ピクセル</td></tr>
<td>outWidth</td><td>A_long</td><td>アウトプット画像データの実際の横ピクセル</td></tr>
<td>offsetInWidth</td><td>A_long</td><td>インプット画像データの横幅のオフセット。 (inWidth &#8211; width)の値</td></tr>
<td>offsetOutWidth</td><td>A_long</td><td>アウトプット画像データの横幅のオフセット。 (outWidth &#8211; width)の値</td></tr>
<td>currentFrame</td><td>A_long</td><td>Renderが呼び出されたタイムライン上のフレーム。（０スタート)</td></tr>
<td>reserve1</td><td>A_long</td><td>穴埋め</td></tr>
<td>reserve2</td><td>A_long</td><td>穴埋め</td></tr>
</table>
<br />
MySkeleton.cppのGetAE_Params関数で処理を行っていますので、このスケルトンをつかえば、以上の情報は簡単に獲得できるようになります。<br />
<br />
<strong>PF_</strong>で始まる型は、SDKで定義されているAfterEffects独自の型。<strong>A_</strong>で始まる型は<strong>A.h</strong>で定義されているMac/Windowsや32bit/64bitアプリケーション作成時の変数の互換性を保つために定義されているものです。<br />
<br />
</li>
<li><strong>MySkeleton.h MySkeleton_params構造体</strong><br />
プラグイン独自のパラメータをまとめた構造体。<br />
<strong>MySkeleton.cpp</strong>の<strong>Get_MySkeleton_Params</strong>関数で処理を行ってます。<br />
MySkeletonの文字列は、後で説明する<strong>AE_ProjectRename.exe</strong>でリネームを行うと同時に変更されるので注意のこと。<br />
<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/05/MyS_params.png" class="sb-img" rel="shadowbox[post-4051];player=img;"><img src="http://ae-users.com/jp/wp-content/uploads/2010/05/MyS_params.png" alt="" width="272" height="202" class="alignnone size-full wp-image-4086" /></a><br />
</li>
<li><strong>MySkeleton.h 関数のプロトタイプ宣言</strong><br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/05/MyS_proto.png" class="sb-img" rel="shadowbox[post-4051];player=img;"><img src="http://ae-users.com/jp/wp-content/uploads/2010/05/MyS_proto.png" alt="" width="471" height="55" class="alignnone size-full wp-image-4087" /></a><br />
<br />
MySkeleton.cppとMySkeletonMain.cppと分離したため、MySkeletonMain.cppのMainRender関数をMySkeleton.cppから呼び出せるように宣言を行っています。<br />
<br />
</li>
<li><strong>MySkeleton.cpp　GlobalSetup</strong><br />
バージョンとout_flagsの設定を行っています。<br />
スケルトンではout_flagの値を２種類用意してあります。通常のプラグインならばこの２種類でほとんど用が足ります。<br />
</li>
<li><strong>MySkeleton.cpp　ParamsSetup</strong><br />
パラメータUIのセットアップを行っています。<br />
スケルトンでは、色(PF_Pixel)・整数のスライダ(A_long)・固定小数のスライダ(PF_Fixed)・チェックボックス(PF_Boolean)・角度(PF_Fixed)・ポップアップメニュー(PF_Fixed)・位置のUIを登録してあります。<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/05/MyS_ui.png" class="sb-img" rel="shadowbox[post-4051];player=img;"><img src="http://ae-users.com/jp/wp-content/uploads/2010/05/MyS_ui.png" alt="" width="337" height="331" class="alignnone size-full wp-image-4149" /></a><br />
</li>
<li><strong>MySkeleton.cpp　GetAE_Params</strong><br />
AE_Params構造体の各メンバの値を獲得します。<br />
このスケルトンを使う限りこの部分は変更する必要がありません。<br />
</li>
<li><strong>MySkeleton.cpp　GetMySkeleton_Params</strong><br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/05/MyS_get.png" class="sb-img" rel="shadowbox[post-4051];player=img;"><img src="http://ae-users.com/jp/wp-content/uploads/2010/05/MyS_get.png" alt="" width="513" height="479" class="alignnone size-full wp-image-4088" /></a><br />
<br />
My_Sketeton構造体へUIから得られた数値を獲得します。<br />
各UIからの獲得方法のサンプルになっています。<br />
</li>
<li><strong>MySkeleton.cpp　ERRマクロ</strong><br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/05/MyS_err.png" class="sb-img" rel="shadowbox[post-4051];player=img;"><img src="http://ae-users.com/jp/wp-content/uploads/2010/05/MyS_err.png" alt="" width="455" height="44" class="alignnone size-full wp-image-4089" /></a><br />
<br />
ERRマクロは、<strong>AE_Macros.h</strong>で定義されている便利なマクロです。変数<strong>PF_Err　err</strong>を使っていて、関数がエラーを戻したときにERRマクロを使っていれば以後の関数の呼び出しをキャンセルできます。コーディングのタイプ量をかなり減らせます。<br />
<br />
この他にもSDKには便利なマクロがいっぱい定義されているので、積極的に使いましょう。<br />
</li>
<li><strong>MytSkeletonMain.cpp</strong><br />
ソースをわかりやすくするために、描画関係のコードをMytMySkeleton.cppから分離しました。まぁ、このスケルトンには描画コードは一切入っていませんが^^;<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/05/MyS_main.png" class="sb-img" rel="shadowbox[post-4051];player=img;"><img src="http://ae-users.com/jp/wp-content/uploads/2010/05/MyS_main.png" alt="" width="491" height="539" class="alignnone size-full wp-image-4105" /></a><br />
</li>
</ol>
<h4>MytSkeleton 構成プロパティ</h4>
MytSkeletonは、三つの構成を用意してあります。<br />
<ol>
<li><strong>Debug</strong><br />
Debug用のランタイム等をリンクしてある構成。<br />
デバッカーの設定はしてませんので、デバッカーを使用するときは一部設定を変更する必要があります。<br />
</li>
<li><strong>Release</strong><br />
Relese用のランタイム等をリンクしてある構成。ただし、ランタイムパッケージを必要とする物になります。<br />
ランタイムを要求する代わりにファイルサイズが小さくなります。<br />
</li>
<li><strong>Release-MT</strong><br />
Relese用のランタイム等をリンクしてある構成。ただし、ランタイムパッケージを必要しないものです。<br />
ランタイムが要らない代わりに、ファイルサイズがでかい。ちょっと遅くて、メモリも少し多く使う（最近のPCでは無視していいレベル）<br />
</li>
</ol>
構成ごとに出力されるaexファイル名を変えていますので、注意です。<br />
<h4>プロジェクトのリネーム</h4>
スケルトンから新しいプロジェクトを作るのは第２回目の投稿で行った手順でできますが、かなり面倒なので専用のツールを作成しました。<br />
<br />
使い方は簡単で、スケルトンの入ったフォルダごと適当に複製してから、（僕はスケルトンをフォルダごとZIP圧縮しておいて使うときに展開してます）このツールのウィンドウにドラッグ＆ドロップするか、選択ボタンを押してファイル選択ダイアログで適当なファイルを選びます。<br />
<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/05/AE_PR.png" class="sb-img" rel="shadowbox[post-4051];player=img;"><img src="http://ae-users.com/jp/wp-content/uploads/2010/05/AE_PR-400x209.png" alt="" width="400" height="209" class="alignnone size-medium wp-image-4096" /></a><br />
<br />
上の図のように読み込まれますので、後は新しい名前を入力し実行するだけです。<br />
ファイル名の変更とファイルの中身の<strong>古い名前</strong>を<strong>新しい名前</strong>にすべて置換します。<br />
ただし、フォルダの名前は変えませんので、手動でお願いします。<br />
<br />
<a class="dl" href="http://bry-ful.ddo.jp/BRY/software/ap/03/AE_ProjectRename.zip">AE_ProjectRename.zipのダウンロード</a><br />
ソースコードは<a href="http://bry-ful.ddo.jp/BRY/software/ap/03/AE_ProjectRename_src.zip">ここ</a>からダウンロードできます（C# 2008 express editionで作成）<br />
C#は、ちょっとしたツールを作るのにすごく便利です。機会があればC#も覚えると幸せになれます。<br />
昔はborland Delphiがオススメだったのですが、最近Delphi無料版の使用制限が厳しすぎてほとんどまともなツールが作れなくなったので。<br />
<h4>ちょっと作った。 Firework.aex</h4>
今回これだけだと寂しかったので、スケルトンから一つプラグインを作ってみました。<br />
単純に適当なアルゴリズムで点を打つプラグインで、パーティクルもどきです。<br />
<br />
<a class="dl" href="http://bry-ful.ddo.jp/BRY/software/ap/03/Firework.zip">Firework.zipのダウンロード</a><br />
<br />
パラメータはこんな感じ。<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/05/Firework_ui.png" class="sb-img" rel="shadowbox[post-4051];player=img;"><img src="http://ae-users.com/jp/wp-content/uploads/2010/05/Firework_ui.png" alt="" width="332" height="160" class="alignnone size-full wp-image-4152" /></a><br />
<br />
追加したコードは主に二つ。<br />
<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/05/Firework_mr8.png" class="sb-img" rel="shadowbox[post-4051];player=img;"><img src="http://ae-users.com/jp/wp-content/uploads/2010/05/Firework_mr8.png" alt="" width="616" height="464" class="alignnone size-full wp-image-4153" /></a><br />
描画のメイン。ソースとしてはこれだけ。ポイントは乱数の発生をフレームごとに固定化してると,<strong>lMin</strong>を計算しているところの計算順。固定小数の桁あふれが起きてしまったので、計算の順番を変えて対処してある。<br />
<br />
次に角度と距離をXY方向へ変換する関数。パラメータ構造体を定義している。あとコールバック関数を呼び出すサンプルにもなっている。<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/05/Firework_getDir.gif" class="sb-img" rel="shadowbox[post-4051];player=img;"><img src="http://ae-users.com/jp/wp-content/uploads/2010/05/Firework_getDir.gif" alt="" width="362" height="533" class="alignnone size-full wp-image-4154" /></a><br />
<br />
詳しいアルゴリズムはソースコードから追って欲しい。この短さなら十分に理解できると思う。<br />
<br />
FireworkMain.cppではわざと16bit対応のコードを書いていないが、out_flagsでは16bitと設定しているので、16bitモードにすると単純に描画されなくなる。<br />
ここまであれば簡単なので、16bit対応の練習用に使って欲しい。<br />
<h4>さらに作った。 aeGraphicsクラス</h4>
本当はC++の説明用に作ったモノだけどここで紹介します。<br />
<br />
<strong>PF_EfefctsWorld</strong>を引数にして作成する<strong>aeGraphics</strong>クラス。<br />
<br />
<a class="dl" href="http://bry-ful.ddo.jp/BRY/software/ap/03/MyGraphics.zip">MyGraphics.zipのダウンロード</a><br />
<br />
C++の機能で具体的には、acGraphics.hをインクルードするだけで使えるようになる（インライン機能）<br />
使い方は簡単で、以下のように使う。<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/05/aeGraph.gif" class="sb-img" rel="shadowbox[post-4051];player=img;"><img src="http://ae-users.com/jp/wp-content/uploads/2010/05/aeGraph.gif" alt="" width="403" height="455" class="alignnone size-full wp-image-4155" /></a><br />
<br />
線を描画したり、枠線を描いたり、四角を描く事がBASIC位の気分で行えます。拡張すればN88-BASICのグラフィックと同等くらいの機能は簡単に追加できるでしょう。<br />
acGraphics.hにすべてのコードが入っているのでC++と画像処理の基本の勉強位にはなるので目を通しておいてください。<br />
<br />
<h4>今回のまとめ</h4>
C/C++の事はスルーする言いながら、今回は殆どCの説明でした。C++は流石にやらなかったけど、aeGraphicsクラスのサンプルを見てもらえば分かりますが、覚えると確実に楽になります。<br />
予定してたことでできなかった事にビット演算がありますが、結構面白いので別の機会に説明したいと思います。画像処理を行う上でポインタと同じくらい絶対に覚えないと事ですので。<br />
<br />
今後も必ず一回の投稿でサンプルのプラグインを必ず作ってそれをネタにして説明していきたいと思ってます。<br />
<br />
次は予定では<strong>「PiPLリソースについて」</strong>でしたが、<strong>「オリジナルノイズフィルタを作ってみよう！」</strong>にします。<br />
今回作ったスケルトンを使った簡単なエフェクトフィルタを作成してみます。こっそりPiPlリソースの説明もしますが^^;<br />
</p>

	タグ : <a href="http://ae-users.com/jp/tag/program/" title="program" rel="tag nofollow">program</a>, <a href="http://ae-users.com/jp/tag/%e3%83%97%e3%83%a9%e3%82%b0%e3%82%a4%e3%83%b3/" title="プラグイン" rel="tag nofollow">プラグイン</a><span id="addbt">[<a onclick="jQuery('p#addtags').slideDown('fast');jQuery('#addbt').fadeOut('fast');">タグを追加する</a>]</span><br />

	<h4>関連する投稿</h4>
	<ul class="st-related-posts">
	<li><a href="http://ae-users.com/jp/resources/2010/06/%e3%82%a2%e3%83%8b%e3%83%a1%e5%88%b6%e4%bd%9c%e8%80%85%e3%81%ae%e3%81%9f%e3%82%81%e3%81%aeaftereffects%e3%83%97%e3%83%a9%e3%82%b0%e3%82%a4%e3%83%b3%e4%bd%9c%e6%88%90%e5%85%a5%e9%96%80%e7%ac%ac-7/" title="アニメ制作者のためのAfterEffectsプラグイン作成入門(第６回)　Effectプラグインの構造・ユーザーインターフェース (2010/6月/13)">アニメ制作者のためのAfterEffectsプラグイン作成入門(第６回)　Effectプラグインの構造・ユーザーインターフェース</a> (4)</li>
	<li><a href="http://ae-users.com/jp/resources/2010/06/%e3%82%a2%e3%83%8b%e3%83%a1%e5%88%b6%e4%bd%9c%e8%80%85%e3%81%ae%e3%81%9f%e3%82%81%e3%81%aeaftereffects%e3%83%97%e3%83%a9%e3%82%b0%e3%82%a4%e3%83%b3%e4%bd%9c%e6%88%90%e5%85%a5%e9%96%80%e7%ac%ac-6/" title="アニメ制作者のためのAfterEffectsプラグイン作成入門(第５回)　スパッタリングプラグインを作成 (2010/6月/04)">アニメ制作者のためのAfterEffectsプラグイン作成入門(第５回)　スパッタリングプラグインを作成</a> (13)</li>
	<li><a href="http://ae-users.com/jp/resources/2010/05/%e3%82%a2%e3%83%8b%e3%83%a1%e5%88%b6%e4%bd%9c%e8%80%85%e3%81%ae%e3%81%9f%e3%82%81%e3%81%aeaftereffects%e3%83%97%e3%83%a9%e3%82%b0%e3%82%a4%e3%83%b3%e4%bd%9c%e6%88%90%e5%85%a5%e9%96%80%e7%ac%ac-5/" title="アニメ制作者のためのAfterEffectsプラグイン作成入門(第４回)　オリジナルノイズフィルタを作ってみよう！ (2010/5月/23)">アニメ制作者のためのAfterEffectsプラグイン作成入門(第４回)　オリジナルノイズフィルタを作ってみよう！</a> (5)</li>
	<li><a href="http://ae-users.com/jp/resources/2010/05/%e3%82%a2%e3%83%8b%e3%83%a1%e5%88%b6%e4%bd%9c%e8%80%85%e3%81%ae%e3%81%9f%e3%82%81%e3%81%aeaftereffects%e3%83%97%e3%83%a9%e3%82%b0%e3%82%a4%e3%83%b3%e4%bd%9c%e6%88%90%e5%85%a5%e9%96%80%e7%ac%ac-3/" title="アニメ制作者のためのAfterEffectsプラグイン作成入門(第２回)　とりあえず作ってみよう！ (2010/5月/09)">アニメ制作者のためのAfterEffectsプラグイン作成入門(第２回)　とりあえず作ってみよう！</a> (6)</li>
	<li><a href="http://ae-users.com/jp/tutorials/2010/05/%e3%82%a2%e3%83%8b%e3%83%a1%e5%88%b6%e4%bd%9c%e8%80%85%e3%81%ae%e3%81%9f%e3%82%81%e3%81%aeaftereffects%e3%83%97%e3%83%a9%e3%82%b0%e3%82%a4%e3%83%b3%e4%bd%9c%e6%88%90%e5%85%a5%e9%96%80%e7%ac%ac-2/" title="アニメ制作者のためのAfterEffectsプラグイン作成入門(第１回)　SDKをコンパイルしてみよう! (2010/5月/05)">アニメ制作者のためのAfterEffectsプラグイン作成入門(第１回)　SDKをコンパイルしてみよう!</a> (8)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://ae-users.com/jp/resources/2010/05/%e3%82%a2%e3%83%8b%e3%83%a1%e5%88%b6%e4%bd%9c%e8%80%85%e3%81%ae%e3%81%9f%e3%82%81%e3%81%aeaftereffects%e3%83%97%e3%83%a9%e3%82%b0%e3%82%a4%e3%83%b3%e4%bd%9c%e6%88%90%e5%85%a5%e9%96%80%e7%ac%ac3/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>アニメ制作者のためのAfterEffectsプラグイン作成入門(第２回)　とりあえず作ってみよう！</title>
		<link>http://ae-users.com/jp/resources/2010/05/%e3%82%a2%e3%83%8b%e3%83%a1%e5%88%b6%e4%bd%9c%e8%80%85%e3%81%ae%e3%81%9f%e3%82%81%e3%81%aeaftereffects%e3%83%97%e3%83%a9%e3%82%b0%e3%82%a4%e3%83%b3%e4%bd%9c%e6%88%90%e5%85%a5%e9%96%80%e7%ac%ac-3/</link>
		<comments>http://ae-users.com/jp/resources/2010/05/%e3%82%a2%e3%83%8b%e3%83%a1%e5%88%b6%e4%bd%9c%e8%80%85%e3%81%ae%e3%81%9f%e3%82%81%e3%81%aeaftereffects%e3%83%97%e3%83%a9%e3%82%b0%e3%82%a4%e3%83%b3%e4%bd%9c%e6%88%90%e5%85%a5%e9%96%80%e7%ac%ac-3/#comments</comments>
		<pubDate>Sat, 08 May 2010 17:19:04 +0000</pubDate>
		<dc:creator>bry-ful</dc:creator>
				<category><![CDATA[RESOURCES]]></category>
		<category><![CDATA[TUTORIALS]]></category>
		<category><![CDATA[program]]></category>
		<category><![CDATA[プラグイン]]></category>

		<guid isPermaLink="false">http://ae-users.com/jp/?p=3705</guid>
		<description><![CDATA[
とりあえず作ってみよう！
今回はオリジナルのEffectプラグインのコーディングを行い、作成手順の説明及びソースの解説をしていきます。

入門用のプラグインなので超簡単なものとして、PSET.aexというのを仕事の空き [...]]]></description>
			<content:encoded><![CDATA[<p>
<h4>とりあえず作ってみよう！</h4>
今回はオリジナルのEffectプラグインのコーディングを行い、作成手順の説明及びソースの解説をしていきます。<br />
<br />
入門用のプラグインなので超簡単なものとして、<strong>PSET.aex</strong>というのを仕事の空き時間でさくっと作ってみました。<br />
とりあえずソースコード一式です。<br />
<br />
<a class="dl" href="http://bry-ful.ddo.jp/BRY/software/ap/02/PSET.zip">PSET.zipのダウンロード</a><br />
<br />
作業時間は大体15分位。機能は指定した場所に1ピクセルの点を描画するもので、Effectsプラグインとしてはもっともシンプルなものですが、入門用としてSDKのサンプルでよくある意味不明な(本当は重要で意味がある)コードをなるべく省いています。<br />
<h4>作成準備</h4>
コーディングを始める前に以下の準備を行います。<br />
本来ならVC++の新規プロジェクトで作り始めたいのですが、僕はテンプレートの作り方を知らないので以下の手順で作成しています（もしわかる人がいたら教えてほしいなぁ)<br />
<ol>
	<li><strong>まず、作業用のホームフォルダを作成します。</strong><br />
Examplesフォルダの中に&#8221;MyPlugins&#8221;フォルダを作ります。これは今後プラグイン作成のホームとなるフォルダになります。好みの名称しても可ですが、フォルダの位置は変えないように。プロジェクトファイルは相対パスでヘッダーファイルの位置が指定されているので注意です。<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/05/my_plugins.gif" class="sb-img" rel="shadowbox[post-3705];player=img;"><img class="alignnone size-thumbnail wp-image-3780" src="http://ae-users.com/jp/wp-content/uploads/2010/05/my_plugins-190x190.gif" alt="" width="190" height="190" /></a></li>
	<li><strong>適当なソースをコピーする。</strong><br />
ソースコードを最初から作るのは流石に大変なので、Effectsフォルダから適当なソースをフォルダごとコピーします。今回はSDK_Noiseフォルダを丸ごとMyPluginsへコピーしました。</li>
	<li><strong>ファイルをリネーム。中身も置換する。</strong><br />
手作業てファイル名の&#8221;SDK_Noise&#8221;の部分を&#8221;PSET&#8221;へリネームします。<br />
ファイルの中身もテキストエディタで同様に置換します。ソリューションファイルやプロジェクトファイルも忘れずに書き換えます。<br />
この作業はVC++のIDEでやるよりエディタで一括置換した方が間違いが無いです。</li>
</ol>
これで、準備完了です。<br />
ここではSDK_Noiseを複製しましたが、自分専用のスケルトンを用意しておいた方が効率的です。<br />
<h4>コーディング。覚えておいた方がいいVisual Studioの機能</h4>
後は、コーディングするだけです。<br />
ここでは、覚えておいた方がいいIDEの使い方を説明します。<br />
<ul>
	<li><strong>最低限の設定</strong><br />
「ツール」メニュー「オプション」の、「環境」 : 「スタートアップ」 で「スタートアップ時」の設定を「空の環境の表示」に。<br />
これで起動がかなり短縮され、快適になります。<br />
その他の設定も自分の好みに合わせて設定しておきましょう。</li>
	<li><strong>行番号を表示させる。</strong><br />
「ツール」メニュー「オプション」の、「テキストエディタ」 : 「C/C++」 :「 全般」で行番号をONにします。<br />
これは特に必要ないですが、行番号を表示しておくとなんだかプログラムしてるって気分が盛り上がります。</li>
	<li><strong>選択範囲を右クリックで定義を表示。</strong><br />
わからない変数の型やマクロ定義や関数は、選択して右クリックして「定義へ移動」を行えば、その項目を定義した場所を表示してくれます。<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/05/ide_mrc1.jpg" class="sb-img" rel="shadowbox[post-3705];player=img;"><img class="alignnone size-full wp-image-3774" src="http://ae-users.com/jp/wp-content/uploads/2010/05/ide_mrc1.jpg" alt="" width="269" height="97" /></a><br />
<br />
ここでは、<strong>PF_Pixel</strong>を選択して、実行すると、<br />
<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/05/ide_mrc2.jpg" class="sb-img" rel="shadowbox[post-3705];player=img;"><img class="alignnone size-full wp-image-3775" src="http://ae-users.com/jp/wp-content/uploads/2010/05/ide_mrc2.jpg" alt="" width="332" height="101" /></a><br />
<br />
と<strong>AfterEffects.h</strong>の定義場所を開いてくれます。<br />
<br />
Visual StudioにはSDKのヘルプが無いので、この機能がヘルプの代わりになります。<br />
SDKのソースはコメント（英語）がかなりしっかりしてますの、After_Effects_SDK_Guide.pdfをほとんど見る必要はありません。というかソースにしか書いてない事が多いです。<br />
<br />
一般的なプログラムの事ならば、F1キーでヘルプを呼び出せます。</li>
	<li><strong>Ctrl + Space で入力候補を表示</strong><br />
関数名やメンバ名・変数名は、先頭の２・３文字を入力した後、Ctrl+Spaceで入力候補を表示させるとタイプミスを防ぐ事が出来ます。</li>
</ul>
<h4>PSET.aexの実行</h4>
コーディングが終わったら、動作確認を行います。<br />
まぁ、今回は僕のソースをダウンロードしてリビルド行うだけですけど:-)<br />
<br />
今回のプロジェクトにはRelease構成の設定も入れてありますので、構成マネージャでReleaseをアクティブにしてからリビルドしてもかまいません。<br />
<br />
出来たバイナリをAfter Effectsにインストールしてみましょう。<br />
<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/05/pset_menu.png" class="sb-img" rel="shadowbox[post-3705];player=img;"><img class="alignnone size-full wp-image-3788" src="http://ae-users.com/jp/wp-content/uploads/2010/05/pset_menu.png" alt="" width="350" height="49" /></a><br />
<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/05/pset_ec.png" class="sb-img" rel="shadowbox[post-3705];player=img;"><img class="alignnone size-full wp-image-3789" src="http://ae-users.com/jp/wp-content/uploads/2010/05/pset_ec.png" alt="" width="397" height="136" /></a><br />
<br />
エフェクトコントロールには、上の図のように位置と色のパラメータが表示されているはずです。そして、プレビュー画面には１ピクセルの点が描画されていると思います。<br />
<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/05/pset_pr.png" class="sb-img" rel="shadowbox[post-3705];player=img;"><img class="alignnone size-full wp-image-3790" src="http://ae-users.com/jp/wp-content/uploads/2010/05/pset_pr.png" alt="" width="287" height="227" /></a><br />
<h4>ソースの解説 PSET.h</h4>
さてここからが今回のハイライト。具体的なソースの解説です。<br />
まず、PSET.h。ヘッダーファイルです。<br />
<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/05/pset_h.gif" class="sb-img" rel="shadowbox[post-3705];player=img;"><img class="alignnone size-full wp-image-3739" src="http://ae-users.com/jp/wp-content/uploads/2010/05/pset_h.gif" alt="" width="610" height="870" /></a><br />
<br />
７行目の#programaと８・９・６１行目の#で始まるコマンドはヘッダーを二度読みされないようにする為のヘッダーファイルでよく使われるものです。<br />
<br />
SDKのヘッダーをインクルードした後に、いろいろな定義を行っています。<br />
<br />
特に重要なものは、バージョン定義とパラメータ用のenum定義された定数。これはプラグイン毎に設定します。SDKのサンプルではパラメータ定義をPF_ADD_PARAM用と読み込み用で分けて定義していますが、ここでは兼用しています。<br />
<br />
バージョンは、<strong>PiPLリソース</strong>（重要）にも同じ数値を定義する必要があります。異なっているとAfterEffectsの起動時にエラーとなります。<br />
<br />
通常のヘッダーファイルならば、ここに関数等のプロトタイプ宣言がありますが、今回はパスカル方式を採用して省略してあります。<br />
同一ファイル内ならば関数等のコードがそれを呼び出している箇所より先頭にあれば宣言を省略できます。SDKでも結構多用されてますが、ソースコードが複数になる場合は、しっかり宣言しましょう。<br />
<br />
<strong>EntryPointFunc</strong>関数のみ、cppのソースからc形式の関数を使用するために、(extern &#8220;C&#8221;)宣言しています。<br />
<h4>PSET.cppの解説　その１ include/EntryPointFunc</h4>
PSET.cppは、プラグインのメインとなるソースです。入門用になるべくシンプルにと考えてコーディングしたら自分でもびっくりするくらい短い行数になりました（普段書いてるスクリプトの行数より少ない）<br />
<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/05/pset_cpp_001.gif" class="sb-img" rel="shadowbox[post-3705];player=img;"><img class="alignnone size-full wp-image-3793" src="http://ae-users.com/jp/wp-content/uploads/2010/05/pset_cpp_001.gif" alt="" width="590" height="99" /></a><br />
<br />
まず最初にPSET.hをincludeしてます。<br />
<br />
ソースの一番後ろにあるEntryPointFunc関数は、標準Cでいうmain関数に相当します。<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/05/pset_cpp_006.gif" class="sb-img" rel="shadowbox[post-3705];player=img;"><img class="alignnone size-full wp-image-3794" src="http://ae-users.com/jp/wp-content/uploads/2010/05/pset_cpp_006.gif" alt="" width="522" height="420" /></a><br />
<br />
Effectプラグインは必ずこの関数から実行され、引数のセレクタ(PF_Cmd)に応じたイベント（関数）を実行するように作ります。<br />
PSET.cppは最低限のセレクタにしか対応させていませんが、普段僕の作ってるものもコレくらいです。<br />
<br />
PF_Cmdについては、付属のドキュメントに詳しい記述があるので、目を通しておくといいと思います。<br />
<h4>PSET.cppの解説　その２ About</h4>
<a href="http://ae-users.com/jp/wp-content/uploads/2010/05/pset_cpp_002.gif" class="sb-img" rel="shadowbox[post-3705];player=img;"><img class="alignnone size-full wp-image-3797" src="http://ae-users.com/jp/wp-content/uploads/2010/05/pset_cpp_002.gif" alt="" width="595" height="267" /></a><br />
<br />
セレクタ<strong>PF_Cmd_ABOUT</strong>で呼び出される関数です。<br />
エフェクトコントロールの”情報”ボタンをクリックすると呼び出されます。この関数では情報ダイアログの表示を行います。<br />
<br />
<strong>PF_SPRINT</strong>は、ダイアログを表示するコールバック関数をマクロ定義したもので、AfterEffectCB.hで定義されています。<br />
大文字のコマンドはほとんどマクロ定義なので注意しましょう（マニュアル見ても絶対に分からない）<br />
右クリックして定義を見ると以下のようにになっています。<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/05/pset_PF_SPRINTF.gif" class="sb-img" rel="shadowbox[post-3705];player=img;"><img class="alignnone size-full wp-image-3802" src="http://ae-users.com/jp/wp-content/uploads/2010/05/pset_PF_SPRINTF.gif" alt="" width="516" height="52" /></a><br />
<br />
<strong>&#8220;PF_Indata *in_data&#8221;</strong>という変数があるのが前提のマクロですので注意してください。適当な関数にこのマクロをいきなり書いてもエラーです。<br />
<br />
<strong>PF_SPRINT</strong>自体はCの標準関数のsprintfとほぼ同じ使い方ができます。結果はコンソールではなく、ダイアログが作成され内容を表示します。<br />
<h4>PSET.cppの解説　その３　GlobalSetup</h4>
セレクタ<strong>PF_Cmd_GLOBAL_SETUP</strong>で呼び出される関数です。<br />
ホスト(AfterEfefcts)が起動時にプラグインを読み込んだと時に呼び出されます。<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/05/pset_cpp_003.gif" class="sb-img" rel="shadowbox[post-3705];player=img;"><img class="alignnone size-full wp-image-3805" src="http://ae-users.com/jp/wp-content/uploads/2010/05/pset_cpp_003.gif" alt="" width="602" height="321" /></a><br />
<br />
ホスト(AfterEffects)にプラグインのバージョンと、out_flagsの値を戻して終了しています。<br />
ホストはPiPLリソースの値と比較して違っていた場合はエラーとしてこのプラグインの読み込みを中止します。<br />
<br />
out_flagsは、ホスト(AfterEffects)の動作を指定するもので、描画のタイミングやその他多くの設定を指定するものです。<br />
数値は、<strong>AfterEffect.h</strong>で定義されていて、コメントでその詳細も明記されてあります（だれかout_flagsの説明を和訳してくれる人いないかなぁ？僕自身分からないところでもあります）<br />
<br />
プラグインのバージョンout_flagsはPiPLリソースにも同じ数値を記述する必要があります。<br />
out_flags2は最近のバージョンになってフラグの数が足りなくて拡張したものです。out_flagsと基本的に同じものです。僕はほとんど使ったことがないので、今回もPF_out_flag_NONE(つまり０)を指定してあります。<br />
<br />
<h4>PSET.cppの解説　その４　ParamsSetup</h4>
セレクタ<strong>PF_Cmd_PARAMS_SETUP</strong>で呼び出される関数です。<br />
レイヤにこのプラグインを登録した時呼び出されます。すでに登録されているプロジェクトファイルを読み込んだ時にも呼び出されます。<br />
ホストのエフェクトコントロールパネルへの登録と初期化をここで行います。<br />
<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/05/pset_cpp_004.gif" class="sb-img" rel="shadowbox[post-3705];player=img;"><img class="alignnone size-full wp-image-3808" src="http://ae-users.com/jp/wp-content/uploads/2010/05/pset_cpp_004.gif" alt="" width="497" height="492" /></a><br />
<br />
PF_ParamDef def変数に表示させるコントロールのパラメータを入れて、コールバック関数の<strong>add_param</strong>でパラメータUIの登録を行います。<br />
ここはかなり複雑なので、<strong>Util/Param_Utils.h</strong>で定義されているマクロを使えば簡単に行うことができます。<br />
<br />
PSET.cppでは位置パラメータと色パラメータの二つを登録しています。変数defは、マクロをつかって初期化しています。<br />
最後にパラメータの総数を通達して、この関数での処理は終わりです。<br />
注意点としては、パラメータの登録順が、PSET.hで定義されている定数(PSET_INPUTから始まるenum定義されているもの)と順番が同じになってないとダメです。<br />
<br />
他のパラメータUIを追加したいときは、<strong>Util/Param_Utils.h</strong>で定義された各種マクロを使えば結構簡単にインターフェースを構築できます。<br />
逆を言えば、ここで定義されていないカスタムUIを作成するときは、かなり面倒な事になりま。プラットホーム依存が確実に発生します。<br />
<h4>PSET.cppの解説　その５　Render</h4>
セレクタ<strong>PF_Cmd_RENDER</strong>で呼び出される関数です。<br />
ここはホストが描画準備を完了し、プラグインに描画させたいときに呼び出されます。<br />
<p style="padding-left: 30px"><span style="text-decoration: underline"><strong>この関数が、プラグインの描画のメインとなります。</strong></span></p>
<a href="http://ae-users.com/jp/wp-content/uploads/2010/05/pset_cpp_005.gif" class="sb-img" rel="shadowbox[post-3705];player=img;"><img class="alignnone size-full wp-image-3824" src="http://ae-users.com/jp/wp-content/uploads/2010/05/pset_cpp_005.gif" alt="" width="650" height="587" /></a><br />
<ol>
	<li><strong>プラグインパラメータの獲得。</strong><br />
タイムラインのカレントのパラメータの数値を引数のPF_ParamDefポインタ配列から獲得します。<br />
ここらへんはもう構造体の嵐でパッと見良く分からない感じですが、ほとんど決まりきった表記なので適当なSDKのソースからコピペで対応出来ます。<br />
位置パラメータは固定小数値なので、今回は単純にシフトして整数値のみにしてあります。<br />
<br />
</li>
	<li><strong>画像の情報を獲得。</strong><br />
画像のサイズ等、描画に必要な情報を獲得します。<br />
獲得する情報は、<br />
<ul>
	<li>入力画像構造体(PF_EffectWorld)</li>
	<li>画像の横サイズ</li>
	<li>画像の縦サイズ</li>
	<li>実際の画像の横サイズ</li>
	<li>入力画像データの先頭アドレス</li>
	<li>出力画像データの先頭アドレス</li>
	<li>その他必要な情報</li>
</ul>
となります。<br />
ここで、注意する点は、元の画像がが入った入力画像(input)と処理が終わった画像を入れる出力画像(output)と扱う画像が二つあることです。このことは後で説明します。<br />
</li>
	<li><strong>実際の描画を行う。</strong><br />
あとは、プラグイン独自の描画を行うだけです。<br />
<br />
とりあえず、今回は出力画像に入力画像を単純にコピーします。専用のコールバック関数(PF_COPY)を呼び出して簡単に行っています。<br />
<br />
次に画像に点を打つコードを記述します。<br />
<br />
まず、パラメータのチェックを行います。指定された位置が画面内にあることを確認してから以下のコードを実行します。<br />
<p style="padding-left: 30px"><strong>outData[psetX + psetY * outWidth] = psetCol;</strong></p>
<br />
outDataはPF_Pixelの１次元配列で、psetX はX座標・psetYはY座標・psetColはPF_Pixelのピクセルデータの変数です。<br />
outWIdthは出力画像の実際の横幅です。XとYの値から１次元配列のアドレス位置を計算しています。<br />
<br />
横幅は表示サイズとデータ内でのサイズと異なる場合がほとんどなので注意してください。データ内では効率化・ハードウエアの都合等の理由でだいたい４の倍数とかに切り上げられています。<br />
<br />
</li>
</ol>
<h4>PSETPiPL.r</h4>
PSETPiPL.rは、PiPLリソースを作成するためのリソース定義ファイルです。<br />
<br />
PiPLリソースは、ホスト(AfterEffects)が起動時にプラグインの情報を得るためのデータが入っています。起動ごとににプラグインのバイナリを実行するのはかなり大変なことなので作られているものです。昔のMacではごく普通のスタイルでAfterEffectsが最初Macで開発されていた時の名残みたいなものです。そのため通常のWindowsコンパイラではPiPLリソースは作成できないのでSDKでは、専用のツールが付属しています。<br />
ちなみにAdobe製品はすべてPiPLリソースを持っています。各製品のSDKには必ずPiPLリソースのドキュメントが付属しています。<br />
<br />
プロジェクトでは、カスタムビルドステップでそのツールを呼び出すコマンドラインが設定されています（PSETPiPL.rを右クリックしてプロパティを表示すると確認できます）<br />
<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/05/pset_r.gif" class="sb-img" rel="shadowbox[post-3705];player=img;"><img src="http://ae-users.com/jp/wp-content/uploads/2010/05/pset_r.gif" alt="" width="363" height="911" class="alignnone size-full wp-image-3837" /></a><br />
<br />
ここではPiPLの要素で必要なもののみ説明します（その他のリソースの詳細は説明しませんし、あまり覚える必要もありません）<br />
<table border="1">
<th>要素</th><th>説明</th><th>値</th></tr>
<tr><td>Kind</td><td>プラグインの種類。</td><td>AEEffect</td></tr>
<tr><td>Name</td><td>プラグインのメニューに表示されるプラグイン自体の名称</td><td>PSET</td></tr>
<tr><td>Category</td><td>このプラグインが表示されるサブメニューの名称</td><td>Sample AEP Project</td></tr>
<tr><td>AE_Effect_Version</td><td>GlobalSetupで設定しているプラグインのバージョン。AfterEffects自身のバージョンではないので注意！</td><td>524288</td></tr>
<tr><td>AE_Effect_Global_OutFlags</td><td>GlobalSetupで設定しているout_flagsの値</td><td>1024</td></tr>
<tr><td>AE_Effect_Global_OutFlags_2</td><td>GlobalSetupで設定しているout_flags2の値</td><td>0</td></tr>
<tr><td>AE_Effect_Match_Name</td><td>プラグインの識別名。同じ識別名のプラグインがあった場合エラーとなる</td><td>AEP Project PSET</td></tr>
</table>
<br />
AE_Effect_Version/AE_Effect_Global_OutFlags/AE_Effect_Global_OutFlags_2は、整数値を直接記入する必要があり、計算が結構面倒です。<br />
cppのソース内ではマクロでうまく処理させてますが、ここで再計算するのが面倒なので僕は専用のアプリを作って計算させています。<br />
<br />
◎<a href="http://bry-ful.ddo.jp/BRY/software/FsAE_tools.zip"><strong>FsAE_tools.zip</strong></a><br />
<br />
このアーカイブ内にあるAE_Utils.exeは、バージョンとout_flagsの計算を行うもので、AE_ProjectRename.exeは、ソースコードのプロジェクト名を一括リネームするものです。<br />
どちらもかなり前に作成したものなので、機会があったら作り直すつもりです。<br />
<br />
<h4>最後に</h4>
今回はかなりの量があって大変でした。１５分で作ったプラグインの解説にまる二日かかって仕舞いました。仕事もかなり厳しい状態だったので参りました。<br />
<br />
ところどころにいきなり説明されいない単語がありますが、SDKのヘッダやサンプル・ドキュメントに載っているものなので暇があったら調べてみてください。いずれ記事として投稿するつもりですが、慣れれば簡単に見つけられるものばかりです。<strong>SDKに慣れるつもりでお願いします。</strong><br />
<br />
次は、C言語の記事にしようと思ってましたが、僕自身あまり言語に詳しくなくて正確なことを書くためにちょっといろいろ調べることがいっぱい出てしまいました。投稿の間隔が開くのが嫌なので、予定を変更して今回作ったPSET.aexをちょっと改造してみようと思ってます。<br />
<br />
ということで次回は<strong>「プラグインに機能を追加してみよう！」</strong>となります。<br />
<br />
<h4>おまけ</h4>
あまりにも簡単なプラグインなのでおまけの機能をつけてます。<br />
PSET.cppの１１７行から始まるコメントアウトさせてある部分を復活させてみてください。<br />
<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/05/pset_cpp_007.gif" class="sb-img" rel="shadowbox[post-3705];player=img;"><img src="http://ae-users.com/jp/wp-content/uploads/2010/05/pset_cpp_007.gif" alt="" width="474" height="296" class="alignnone size-full wp-image-3846" /></a><br />
<br />
1ピクセルでは無く、指定した位置を中心にしたクロス線の描画に変わります。<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/05/pset_pre2.png" class="sb-img" rel="shadowbox[post-3705];player=img;"><img src="http://ae-users.com/jp/wp-content/uploads/2010/05/pset_pre2.png" alt="" width="249" height="276" class="alignnone size-full wp-image-3847" /></a><br />
<br />
</p>

	タグ : <a href="http://ae-users.com/jp/tag/program/" title="program" rel="tag nofollow">program</a>, <a href="http://ae-users.com/jp/tag/%e3%83%97%e3%83%a9%e3%82%b0%e3%82%a4%e3%83%b3/" title="プラグイン" rel="tag nofollow">プラグイン</a><span id="addbt">[<a onclick="jQuery('p#addtags').slideDown('fast');jQuery('#addbt').fadeOut('fast');">タグを追加する</a>]</span><br />

	<h4>関連する投稿</h4>
	<ul class="st-related-posts">
	<li><a href="http://ae-users.com/jp/resources/2010/06/%e3%82%a2%e3%83%8b%e3%83%a1%e5%88%b6%e4%bd%9c%e8%80%85%e3%81%ae%e3%81%9f%e3%82%81%e3%81%aeaftereffects%e3%83%97%e3%83%a9%e3%82%b0%e3%82%a4%e3%83%b3%e4%bd%9c%e6%88%90%e5%85%a5%e9%96%80%e7%ac%ac-7/" title="アニメ制作者のためのAfterEffectsプラグイン作成入門(第６回)　Effectプラグインの構造・ユーザーインターフェース (2010/6月/13)">アニメ制作者のためのAfterEffectsプラグイン作成入門(第６回)　Effectプラグインの構造・ユーザーインターフェース</a> (4)</li>
	<li><a href="http://ae-users.com/jp/resources/2010/06/%e3%82%a2%e3%83%8b%e3%83%a1%e5%88%b6%e4%bd%9c%e8%80%85%e3%81%ae%e3%81%9f%e3%82%81%e3%81%aeaftereffects%e3%83%97%e3%83%a9%e3%82%b0%e3%82%a4%e3%83%b3%e4%bd%9c%e6%88%90%e5%85%a5%e9%96%80%e7%ac%ac-6/" title="アニメ制作者のためのAfterEffectsプラグイン作成入門(第５回)　スパッタリングプラグインを作成 (2010/6月/04)">アニメ制作者のためのAfterEffectsプラグイン作成入門(第５回)　スパッタリングプラグインを作成</a> (13)</li>
	<li><a href="http://ae-users.com/jp/resources/2010/05/%e3%82%a2%e3%83%8b%e3%83%a1%e5%88%b6%e4%bd%9c%e8%80%85%e3%81%ae%e3%81%9f%e3%82%81%e3%81%aeaftereffects%e3%83%97%e3%83%a9%e3%82%b0%e3%82%a4%e3%83%b3%e4%bd%9c%e6%88%90%e5%85%a5%e9%96%80%e7%ac%ac-5/" title="アニメ制作者のためのAfterEffectsプラグイン作成入門(第４回)　オリジナルノイズフィルタを作ってみよう！ (2010/5月/23)">アニメ制作者のためのAfterEffectsプラグイン作成入門(第４回)　オリジナルノイズフィルタを作ってみよう！</a> (5)</li>
	<li><a href="http://ae-users.com/jp/tutorials/2010/05/%e3%82%a2%e3%83%8b%e3%83%a1%e5%88%b6%e4%bd%9c%e8%80%85%e3%81%ae%e3%81%9f%e3%82%81%e3%81%aeaftereffects%e3%83%97%e3%83%a9%e3%82%b0%e3%82%a4%e3%83%b3%e4%bd%9c%e6%88%90%e5%85%a5%e9%96%80%e7%ac%ac-2/" title="アニメ制作者のためのAfterEffectsプラグイン作成入門(第１回)　SDKをコンパイルしてみよう! (2010/5月/05)">アニメ制作者のためのAfterEffectsプラグイン作成入門(第１回)　SDKをコンパイルしてみよう!</a> (8)</li>
	<li><a href="http://ae-users.com/jp/tutorials/2010/05/%e3%82%a2%e3%83%8b%e3%83%a1%e5%88%b6%e4%bd%9c%e8%80%85%e3%81%ae%e3%81%9f%e3%82%81%e3%81%aeaftereffects%e3%83%97%e3%83%a9%e3%82%b0%e3%82%a4%e3%83%b3%e4%bd%9c%e6%88%90%e5%85%a5%e9%96%80%e7%ac%ac/" title="アニメ制作者のためのAfterEffectsプラグイン作成入門(第０回) (2010/5月/05)">アニメ制作者のためのAfterEffectsプラグイン作成入門(第０回)</a> (10)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://ae-users.com/jp/resources/2010/05/%e3%82%a2%e3%83%8b%e3%83%a1%e5%88%b6%e4%bd%9c%e8%80%85%e3%81%ae%e3%81%9f%e3%82%81%e3%81%aeaftereffects%e3%83%97%e3%83%a9%e3%82%b0%e3%82%a4%e3%83%b3%e4%bd%9c%e6%88%90%e5%85%a5%e9%96%80%e7%ac%ac-3/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>アニメ制作者のためのAfterEffectsプラグイン作成入門(第１回)　SDKをコンパイルしてみよう!</title>
		<link>http://ae-users.com/jp/tutorials/2010/05/%e3%82%a2%e3%83%8b%e3%83%a1%e5%88%b6%e4%bd%9c%e8%80%85%e3%81%ae%e3%81%9f%e3%82%81%e3%81%aeaftereffects%e3%83%97%e3%83%a9%e3%82%b0%e3%82%a4%e3%83%b3%e4%bd%9c%e6%88%90%e5%85%a5%e9%96%80%e7%ac%ac-2/</link>
		<comments>http://ae-users.com/jp/tutorials/2010/05/%e3%82%a2%e3%83%8b%e3%83%a1%e5%88%b6%e4%bd%9c%e8%80%85%e3%81%ae%e3%81%9f%e3%82%81%e3%81%aeaftereffects%e3%83%97%e3%83%a9%e3%82%b0%e3%82%a4%e3%83%b3%e4%bd%9c%e6%88%90%e5%85%a5%e9%96%80%e7%ac%ac-2/#comments</comments>
		<pubDate>Tue, 04 May 2010 19:30:41 +0000</pubDate>
		<dc:creator>bry-ful</dc:creator>
				<category><![CDATA[TUTORIALS]]></category>
		<category><![CDATA[program]]></category>
		<category><![CDATA[プラグイン]]></category>

		<guid isPermaLink="false">http://ae-users.com/jp/?p=3626</guid>
		<description><![CDATA[
開発環境 Cコンパイラ
今回はVisual C++ 2008 Express Edition SP1を使ってプラグイン作成を行います。僕は通常VisualStudio 2005を使用してますが、入門という事で無料の V [...]]]></description>
			<content:encoded><![CDATA[<p>
<h3>開発環境 Cコンパイラ</h3>
今回はVisual C++ 2008 Express Edition SP1を使ってプラグイン作成を行います。僕は通常VisualStudio 2005を使用してますが、入門という事で無料の VC++2008です。ちなみに最新版はVisual Studio 2010になります。実はコンパイラはプラグイン開発では特に何でもいいです。作成されるバイナリコードのターゲットが変わるだけでBCCでもGNU-Cでも作成は可能です(makefile作るのが非常に面倒ですが)<br />
<br />
Visual C++ 2008 Express Edition SP1のダウンロードは<a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=3254c868-bcb9-412c-95c6-d100c872ec60&amp;DisplayLang=ja" target="_blank">ここ</a>から出来ます。Visual Studio 2008 SP1でかなり大きなファイルになります。<br />
<br />
Visual C++の使い方は必要なものしか説明しません。<br />
インストールは特に問題はないと思いますが、C++は当然としてC#もインストールしておけば、後々楽になります。これら以外はインストールする必要はありません。<br />
<h3>AfterEffects SDKの入手</h3>
SDKはAdobeのサイトから入手可能です。<br />
できれば可能な限りのすべてのバージョンのSDKを入手しておきましょう。最新になればなるほど基本機能の解説が省かれているので古いバージョンのドキュメントが結構役に立ちます。3.1付属のSDKが一番分かりやすかったですが、6.5のSDKからがあれば十分です。<br />
<br />
<a href="http://www.adobe.com/devnet/aftereffects/sdk/cs5/">AE CS5 sdk</a><br />
<a href="http://www.adobe.com/devnet/aftereffects/sdk/cs4/">AE CS4 sdk</a><br />
<a href="http://www.adobe.com/devnet/aftereffects/sdk/cs3/">AE CS3 sdk</a><br />
<a href="http://www.adobe.com/devnet/aftereffects/sdk/7/">AE7 sdk</a><br />
<a href="http://www.adobe.com/devnet/aftereffects/sdk/6_5/">AE6.5 sdk</a><br />
<br />
今回は<strong>SDK CS3</strong>をターゲットにします。<br />
SDK CS4へはソース変更なしで対応可能ですので、必要な人はCS4でもOKです。CS5はまだ未確認ですが、かなり問題が発生すると思います(64bitアプリ対応のため)<br />
<h3>SDKのインストール</h3>
<a href="http://ae-users.com/jp/wp-content/uploads/2010/05/SDKCS3.png" class="sb-img" rel="shadowbox[post-3626];player=img;"><img class="alignnone size-medium wp-image-3647" src="http://ae-users.com/jp/wp-content/uploads/2010/05/SDKCS3-400x306.png" alt="" width="400" height="306" /></a><br />
インストールはデフォルトでかまいません。CドライブのProgram Filesへインストールされるのが嫌な人は、違うパスを指定してください。特に問題はありません。<br />
<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/05/SDK_root.png" class="sb-img" rel="shadowbox[post-3626];player=img;"><img class="alignnone size-full wp-image-3660" src="http://ae-users.com/jp/wp-content/uploads/2010/05/SDK_root.png" alt="" width="205" height="225" /></a><br />
Documentaionフォルダには唯一の資料であるSDK_Guide.pdfがExamplesフォルダにはプログラムに必要なヘッダー・ソースコードがあります。<br />
<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/05/SDK_Examples.png" class="sb-img" rel="shadowbox[post-3626];player=img;"><img class="alignnone size-full wp-image-3661" src="http://ae-users.com/jp/wp-content/uploads/2010/05/SDK_Examples.png" alt="" width="353" height="299" /></a><br />
Examplesフォルダは、インストール直後のものをバックアップしておきましょう。<br />
プラグイン作成に必要な情報はすべてこの中にあります。特にHeadersフォルダ内のファイルにはコメントとして必要な情報があります。SDK_Guide.pdfには載っていないので注意です。<br />
<h3>さあ！コンパイルだ!!</h3>
今回のターゲットはEffectフォルダ内にある<strong>SDK_Noise</strong>をコンパイルしてみます。Effectsプラグインの勉強するならまずこのプラグインを攻略するのが近道です。というかほかのプラグインサンプルは必要があれば見る程度でOKです。<br />
<br />
よくSDKのサンプルがコンパイルできないと相談受けますが、安心してください。僕もすべてのソースをコンパイルできません（まぁ原因がはっきりしてるので無視してるだけです。原因はSDKにはありませんのでAdobeのせいにしないように）<br />
<br />
以下のリストがSDK_Noiseの全ソースファイルです。<br />
<table style="padding-left: 30px">
<tbody>
<tr>
<td>SDK_Noise.h</td>
<td>ヘッダーファイル。</td>
</tr>
<tr>
<td>SDK_Noise.cpp</td>
<td>C++のソースコード。プラグインのメイン。</td>
</tr>
<tr>
<td>SDK_NoisePiPL.r</td>
<td>リソースファイル。PiPLリソースを作成する為の定義ファイル。</td>
</tr>
<tr>
<td>win/SDK_Noise.vcproj</td>
<td>VC++のプロジェクトファイル</td>
</tr>
<tr>
<td>win/SDK_Noise.sln</td>
<td>VC++のソリューションファイル。</td>
</tr>
<tr>
<td>win/SDK_NoisePiPL.rc</td>
<td>rファイルをコンパイルして作成された中間ファイル。</td>
</tr>
</tbody>
</table>
winフォルダにはプラットフォーム依存のソースが入ってます。SDKでは機種依存のコードをフォルダ分けして区別してます。ファイルの説明は次回以降にします。<br />
<br />
ソリューションファイルをVC++で開くと<strong>Visual Studio変換ウィザード</strong>が表示されますので、変換してください。<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/05/vc_update.png" class="sb-img" rel="shadowbox[post-3626];player=img;"><img class="alignnone size-medium wp-image-3672" src="http://ae-users.com/jp/wp-content/uploads/2010/05/vc_update-400x313.png" alt="" width="400" height="313" /></a><br />
<br />
途中バックアップをとるか聞かれますが、どちらでもかまいません。完了ボタンでウィザードを終了します。<br />
<br />
次にプロジェクトのプロパティを修正します。<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/05/vc_proj_prop.png" class="sb-img" rel="shadowbox[post-3626];player=img;"><img class="alignnone size-full wp-image-3673" src="http://ae-users.com/jp/wp-content/uploads/2010/05/vc_proj_prop.png" alt="" width="251" height="340" /></a><br />
リンカ・全般の出力ファイルを&#8221;..¥SDK_Noise.aex&#8221;に書き換えます。<br />
デフォルトでは環境変数で指定されたパスへ作成されたバイナリを保存してますが、ここでは、SDK_Noiseフォルダへ保存するように相対パスで指定します。<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/05/vc_prop_linker.png" class="sb-img" rel="shadowbox[post-3626];player=img;"><img class="alignnone size-medium wp-image-3674" src="http://ae-users.com/jp/wp-content/uploads/2010/05/vc_prop_linker-400x227.png" alt="" width="400" height="227" /></a><br />
<br />
これで準備は完了です。<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/05/vc_rebuild.png" class="sb-img" rel="shadowbox[post-3626];player=img;"><img class="alignnone size-full wp-image-3675" src="http://ae-users.com/jp/wp-content/uploads/2010/05/vc_rebuild.png" alt="" width="265" height="253" /></a><br />
<br />
リビルドを実行しエラーが無ければコンパイルは成功です。といいたいのですが、実はこの段階でよく分からないエラーでコンパイル後のリンクが失敗する事があります。<br />
<br />
win/Debug/BuildLog.htmを見ると分かるのですが、リソースのコンパイル時に使用するPiPLtool.exeが実行時にエラーを起こしてるはずです。出力logには表示されないのではまりがちですが、PiPLtool.exeがVC++ 2003のランタイムライブラリ（msvcr71.dll）を呼び出す為です。msvcr71.dllは、”Program Files/Adobe”の中を検索するといっぱいあるのSYSTEM32フォルダか”Examples\Resources”へコピーしてください。<br />
<br />
これで、<strong>SDK_Noise</strong>は無事にコンパイルできるはずです。<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/05/vc_buldOK.png" class="sb-img" rel="shadowbox[post-3626];player=img;"><img class="alignnone size-medium wp-image-3682" src="http://ae-users.com/jp/wp-content/uploads/2010/05/vc_buldOK-400x114.png" alt="" width="400" height="114" /></a><br />
<br />
出力パネルが上記の通りになっていれば、フォルダの中にSDK_Noise.aexが作成されています。<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/05/vc_final.png" class="sb-img" rel="shadowbox[post-3626];player=img;"><img class="alignnone size-full wp-image-3683" src="http://ae-users.com/jp/wp-content/uploads/2010/05/vc_final.png" alt="" width="214" height="360" /></a><br />
<br />
失敗する場合は、出力パネルのエラー表示とwin/Debug/BuildLog.htmを確認してください。<br />
<h3>プラグインの動作確認</h3>
作成されたSDK_Noise.aexをAfterEffectsのPlug-insフォルダへコピーして動作確認をします。<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/05/SDK_Noise_011.png" class="sb-img" rel="shadowbox[post-3626];player=img;"><img src="http://ae-users.com/jp/wp-content/uploads/2010/05/SDK_Noise_011.png" alt="" width="370" height="94" class="alignnone size-full wp-image-3688" /></a><br />
<br />
<a href="http://ae-users.com/jp/wp-content/uploads/2010/05/SDK_Noise_02.png" class="sb-img" rel="shadowbox[post-3626];player=img;"><img class="alignnone size-full wp-image-3685" src="http://ae-users.com/jp/wp-content/uploads/2010/05/SDK_Noise_02.png" alt="" width="370" height="118" /></a><br />
上記の様に表示されれば成功です。<br />
<br />
ここまで出来れば、プラグイン開発の準備はほとんど終了です。<br />
画像処理プログラムの経験があれば、もうソースをどんどん弄ってプラグインを作りましょう。<br />
<h3>注意！</h3>
SDKのサンプルではプロジェクトの構成（ターゲット）がDebugになっています。Debugでコンパイルされたプラグインバイナリは、VC++がインストールされているPCでしか実行できません。公開配布は絶対にしないように（過去間違えて配布してしまって偉い目にあった）<br />
<br />
また、VC++ 2008で作られたプログラムバイナリは実行時に<strong>Microsoft Visual C++2008 再頒布可能パッケージ</strong>が必要になります。それはVC++がインストールされたフォルダ(C:\Program Files\Microsoft Visual Studio 9.0\VC\redist)か<a href="http://www.microsoft.com/downloads/details.aspx?familyid=9b2da534-3e03-4391-8a4d-074b9f2bc1bf&amp;displaylang=ja">ここ</a>からダウンロードできます。<br />
<br />
<h3>まとめ</h3>
今回はプログラム経験者なら無視してもいいレベルの内容ですね。まぁ僕のところにくる問い合わせメールの内容がほとんどコンパイルの仕方なので。<br />
<br />
この記事を読んでコンパイルが出来なかったらメールかコメントください。僕自身が見逃している部分があるかもしれませんので。<br />
<br />
次回は、超簡単なプラグインを実際に作ってみます。<br />
</p>

	タグ : <a href="http://ae-users.com/jp/tag/program/" title="program" rel="tag nofollow">program</a>, <a href="http://ae-users.com/jp/tag/%e3%83%97%e3%83%a9%e3%82%b0%e3%82%a4%e3%83%b3/" title="プラグイン" rel="tag nofollow">プラグイン</a><span id="addbt">[<a onclick="jQuery('p#addtags').slideDown('fast');jQuery('#addbt').fadeOut('fast');">タグを追加する</a>]</span><br />

	<h4>関連する投稿</h4>
	<ul class="st-related-posts">
	<li><a href="http://ae-users.com/jp/resources/2010/06/%e3%82%a2%e3%83%8b%e3%83%a1%e5%88%b6%e4%bd%9c%e8%80%85%e3%81%ae%e3%81%9f%e3%82%81%e3%81%aeaftereffects%e3%83%97%e3%83%a9%e3%82%b0%e3%82%a4%e3%83%b3%e4%bd%9c%e6%88%90%e5%85%a5%e9%96%80%e7%ac%ac-7/" title="アニメ制作者のためのAfterEffectsプラグイン作成入門(第６回)　Effectプラグインの構造・ユーザーインターフェース (2010/6月/13)">アニメ制作者のためのAfterEffectsプラグイン作成入門(第６回)　Effectプラグインの構造・ユーザーインターフェース</a> (4)</li>
	<li><a href="http://ae-users.com/jp/resources/2010/06/%e3%82%a2%e3%83%8b%e3%83%a1%e5%88%b6%e4%bd%9c%e8%80%85%e3%81%ae%e3%81%9f%e3%82%81%e3%81%aeaftereffects%e3%83%97%e3%83%a9%e3%82%b0%e3%82%a4%e3%83%b3%e4%bd%9c%e6%88%90%e5%85%a5%e9%96%80%e7%ac%ac-6/" title="アニメ制作者のためのAfterEffectsプラグイン作成入門(第５回)　スパッタリングプラグインを作成 (2010/6月/04)">アニメ制作者のためのAfterEffectsプラグイン作成入門(第５回)　スパッタリングプラグインを作成</a> (13)</li>
	<li><a href="http://ae-users.com/jp/resources/2010/05/%e3%82%a2%e3%83%8b%e3%83%a1%e5%88%b6%e4%bd%9c%e8%80%85%e3%81%ae%e3%81%9f%e3%82%81%e3%81%aeaftereffects%e3%83%97%e3%83%a9%e3%82%b0%e3%82%a4%e3%83%b3%e4%bd%9c%e6%88%90%e5%85%a5%e9%96%80%e7%ac%ac-5/" title="アニメ制作者のためのAfterEffectsプラグイン作成入門(第４回)　オリジナルノイズフィルタを作ってみよう！ (2010/5月/23)">アニメ制作者のためのAfterEffectsプラグイン作成入門(第４回)　オリジナルノイズフィルタを作ってみよう！</a> (5)</li>
	<li><a href="http://ae-users.com/jp/resources/2010/05/%e3%82%a2%e3%83%8b%e3%83%a1%e5%88%b6%e4%bd%9c%e8%80%85%e3%81%ae%e3%81%9f%e3%82%81%e3%81%aeaftereffects%e3%83%97%e3%83%a9%e3%82%b0%e3%82%a4%e3%83%b3%e4%bd%9c%e6%88%90%e5%85%a5%e9%96%80%e7%ac%ac-3/" title="アニメ制作者のためのAfterEffectsプラグイン作成入門(第２回)　とりあえず作ってみよう！ (2010/5月/09)">アニメ制作者のためのAfterEffectsプラグイン作成入門(第２回)　とりあえず作ってみよう！</a> (6)</li>
	<li><a href="http://ae-users.com/jp/tutorials/2010/05/%e3%82%a2%e3%83%8b%e3%83%a1%e5%88%b6%e4%bd%9c%e8%80%85%e3%81%ae%e3%81%9f%e3%82%81%e3%81%aeaftereffects%e3%83%97%e3%83%a9%e3%82%b0%e3%82%a4%e3%83%b3%e4%bd%9c%e6%88%90%e5%85%a5%e9%96%80%e7%ac%ac/" title="アニメ制作者のためのAfterEffectsプラグイン作成入門(第０回) (2010/5月/05)">アニメ制作者のためのAfterEffectsプラグイン作成入門(第０回)</a> (10)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://ae-users.com/jp/tutorials/2010/05/%e3%82%a2%e3%83%8b%e3%83%a1%e5%88%b6%e4%bd%9c%e8%80%85%e3%81%ae%e3%81%9f%e3%82%81%e3%81%aeaftereffects%e3%83%97%e3%83%a9%e3%82%b0%e3%82%a4%e3%83%b3%e4%bd%9c%e6%88%90%e5%85%a5%e9%96%80%e7%ac%ac-2/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
	</channel>
</rss>
