Neet.理想のグラフィックツールについて当ブログで用いる図はinkscapeを使って作成している。それまでドロー系ツールを使ったことなど全くなかったが、使ってみてやはり自分が理想としている形には程遠いと確信した。俺が求めているものはグラフィック表示用スクリプト言語のグラフィカルなエディタであってドロー系グラフィックツールではないのだ。なんとなく俺の思い描くグラフィックツールの仕様メモを公開してみようと思う。本来はこういうものは自分でプログラミングするべきものなのだろうが、生憎そんな力など持ちえていない駄目人間なもので。★概要ドロー系グラフィックツールのようにグラフィカルな作業でグラフィック表示スクリプトを制作するシステム。スクリプトを直接入力することも出来る。一般的なドロー系との違いはスクリプトがユーザー定義の関数も使えるオブジェクト指向の言語だと言う点にある。(ただし本格的なオブジェクト指向ではなくjavascript程度)これによりグラフィックツールでありながら、引数を加工して座標などを作り出す関数が扱えるわけである。顔描画の関数で顔の左右傾きぐあいを引数とする場合に、大きな傾きの違いは範囲ごとに別の描画処理に分岐するようにしつつ、細かな傾きの違いは座標を加工するようにすることが出来る。上手な絵を描くということは特別な技能であり、その技能を一般人が再利用する手段が現状限られすぎている。一度描かれた絵は座標加工をうまく使って何度も再利用した方が効率がよいだろう。★ウィンドウ完成グラフィック画面と線表示されたグラフィカルエディト用画面、それにスクリプトエディタ画面の3つが基本画面。スクリプトエディタは関数単位でのみ使え、スクリプト全体の表示はできない。グラフィカルエディト用画面の座標系はグラフィック関数ごとにフルサイズに引き伸ばすことを推奨。フルサイズは暫定的に縦横ともに-4095から+4095までの8191×8191とする。(注意:当方は実はオブジェクト指向に明るくありませんのでおかしい点があるかもしれません。まずい点があればご指摘ください)基本的にはjavascriptやphpなどを参考にしつつ独自仕様を盛り込んでいく方針。最重要点としてはmainなどの関数もまたオブジェクトであり、特別な宣言方法を用いた関数は行単位ですべての変数値やグラフィック描画用データが記録されていくという点にある。これにより描画済みの座標データは利用しようと思えばいつでも利用できることになる。これは関数の呼び出し元が同じでも行が違えば別のデータに、同じ行の繰り返しでも別のデータに(配列のように扱う)なるわけで、すべての関数でこれを行うと膨大なメモリを消費することにもなりかねない。描画データを再利用したいものに限ることが推奨される。関数オブジェクト内で記録されたデータを親階層関数などですべて破棄することも出来る。★描画命令群POINT:点描画LINE:線分描画FIELD:領域描画TOFIELD:前回の領域から今回指定の領域までの間を描画F2FIELD:二つの指定領域の間を描画、FIELD命令とTOFIELD命令が一体化したものCIRCLE:円、楕円描画POLY:正多角形描画BOX:長方形描画ここでのF2FIELDの使用例として、たとえばふくらはぎや乳房のテカリを描くときに領域を複数に階層分けして別のフィールドと見なし、白に透明度をグラデーションをつけて描けばかなりシンプルに再現できる。グラデーション形状は複数選べるが、基本はフィールド1を円形変形させたものにフィールド2を円形変形させて対応座標を特定する。特定したら始点と終点が決まるわけで、それをもとにグラデーション描画が可能になる。領域の階層分けについてわかりやすく説明すると、たとえば二重丸記号「◎」の内側の円と外側の円は階層で分かれていると見なせる。内側の円と外側の円の間はF2FIELDで描画できるということ。:行ラベル情報、奥行き、各命令種別とそれに必要な情報から構成される。F2FIELD命令実行情報:領域情報1、領域情報2、内部グラデーション情報から構成される。TOFIELD命令実行情報:領域情報、内部グラデーション情報ぁら構成される。FIELD命令実行情報:領域情報、内部グラデーション情報から構成される。LINE命令実行情報:線分情報から構成される。POINT命令実行情報:点情報、ペン情報から構成される。CIRCLE,POLY,BOXにも命令実行情報はあるが割愛。点情報から構成される。線分情報:線用ペン情報、奥行き情報、複数の点情報から構成される。ペン情報:ペン形状(ミリペン、つけペン、毛筆、エアブラシなど)、ペン着色情報から構成される。点情報:点ラベル情報、点タイプ(直点or曲点)、座標情報(X座標、Y座標)、点単位ペン情報(筆圧、傾き)から構成される。ペン着色情報:色情報、インク消耗率から構成される。色指定形式情報:色指定形式(RGB、YUV、グレイスケール、タイルパターンデータなど)、グラデーションフラグから構成される。内部グラデーション情報:色情報2つ、内部グラデーション形状選択から構成される。基本形状は円の内から外へと向かう線形グラデを領域の形に合わせて変形させたもの。最低幅保障有無:縮小表示時に切り上げする線の幅、切捨てする線の幅。これによりどれだけ縮小しても絶対に描くべき線や一定以上縮小したら消え去る線が指定できる。タイプにおいて、直前の座標から今回の座標までの線が直線になる点をとりあえず本稿では暫定的に「直点」と呼ぶことにする。今回描画する線が曲線になる点も暫定的に「曲点」と呼ぶ。注意点としては言語仕様としてはベジェ曲線描画をすることはできない事が挙げられる。スプライン曲線描画のみである。グラフィカルな作業によってベジェ曲線を描くことでスクリプト上では細かく分割されたスプライン曲線に変換されるようにして作業者の負担を減らすようにする。ベジェ曲線をスクリプト上で扱わないのは座標点の再利用が困難なためである。引数が省略された場合は基本的に前回使用値をそのまま用いる。#@:pointlabelstrラベル類はすべて英数字のみ使える。行ラベルは座標再利用時に関数内行番号を指定しなくてもよいようにするため。行ラベルはローカル変数名などと重複してはいけない点ラベルもこれがないと再利用時に行内点番号を指定しなくてはいけなくなる。F2FIELDグラディーション時には点ラベルがあれば2つの領域間で同一名義のものが優先的に対応されることになる。点ラベルは行ラベルの階層下にあるのでローカル変数名などとも重複して良い。gx#=65536;デフォルト値がないと関数単位でのグラフィカルな座標修正ができない場合が出て来る。.........グラフィック描画を含む関数の宣言。グラフィック関数オブジェクトとして扱われ、描画情報が行の実行ごとに保存されていく。.........グラフィック描画を含む関数の宣言だが、グラフィック関数オブジェクトとしては扱われず。描画情報は保存されない。.........行ごとの変数値がすべて保存される関数の宣言。データ保存関数オブジェクトとして扱われる。.........gfunctionとvfunctionの合体。データ保存グラフィック関数オブジェクトとして扱われる。.........グラフィック関数宣言時の修飾子。宣言時にこれが使われている関数はグラフィカルな座標編集ができない。...グラフィック関数オブジェクト内部の座標情報を破棄する関数。...データ保存関数オブジェクトに保存された変数情報を破棄する関数。...データ保存グラフィック関数オブジェクトに保存された情報を破棄する関数。グラフィック描画を使う関数はできるだけgfunctionかgvfunction宣言を用いる。保存データが不要なときはすぐに親階層で破棄するようにする。グラフィカルな座標編集ができるのはgfunctionかgvfunction、gnfunctionに限られる。頭部描画関数の下にある顔描画関数の下にある目描画関数の下にあるハイライト描画関数の指定行ラベル内の指定点ラベルの点情報を取り出す。pointinfo=main->headfunc->facefunc->eyefunc->highlightfunc->linelabelname->pointlabelname;注意:点ラベルは行ラベルの真下の階層にあるわけではない。情報と一致する名義を探して下階層に向かって探索するということである。最初に見つかったもののみが有効。関数ごとに独立しており、常に完全に再現される。再現性をなくすためには関数内で乱数系列を時間などから設定する必要がある。乱数系列の初期値はスクリプト名と関数名とスクリプト作成者名によって決まる。★応用例2つのスクリプトを見比べて、関数の階層構造と行ラベルと点ラベルが一致している場合にモーフィングを容易に作成することが出来る。不足している点情報は自動補完させればいい。アニメの中割りに利用できる可能性もある。階層の一致している点ラベル名の座標値群からスプライン補完で中割座標を補完したらなめらかな動きが作り出せるかもしれない。★名称とりあえずDOLES(DrawingObjectLaungageEditSystem)...ドレスというのをシステムの仮名にしておきます。スクリプト言語の方はDOL(ドール)で。|プロフィールAuthor:しめすへんどこにでもいるようなダメ人間。派遣切りで無職になったのでのたれ死ぬ前にとオタク関係のブログを開始する。gmailのアカウントはshimesuhentwitterのアカウントもshimesuhenコメント欄にてhttpを禁止しています。(11/04)最新コメント:萌えオタクの正体はマイルドヤンキーである。(02/24):萌えオタクの正体はマイルドヤンキーである。