これは Google に保存されている http://www15.atpages.jp/ganoux/ppblog/index.php?mode=tags&aim=%BF%B7%B4%A9 のキャッシュです。 このページは 2010年11月20日 10:46:11 GMT に取得されたものです。 そのため、このページの最新版でない場合があります。 詳細

フルバージョン
ハイライトされているキーワード: 初心者 数学 このページへのリンクにだけ含まれているキーワード: dash2  
初心者dasH2’

[ Tags :: 新刊 ]

おはよう!今日も数学がタノシイネ☆

ひとつ思うのは、大学時代にちゃんと3Dを勉強していればもう少し数学について深く考えられたのではないかということ。
高校では統計や幾何を省いたカリキュラムだったわけですが、やる気さえあればテキストを読み解くこともできた筈。
ちゅーことで、全国のHentai数学教師のみなさま、3Dを使って遊びながら数学を学ぶという授業とかやってみません?
ようやく右手をぐりぐり回しながら右ネジ回転とかベクトルあわせで変換行列を読めるようになってきましたよっという素人が通りますよっと(**!)
ヘンタイ・・・オイシイデス(^q^)

座標変換

キター。みんな大好きMatrixのおじかんですよ☆ワカンネーからといってすっ飛ばすのは勿体ない。
あとで図を書いてもうちょいわかりやすくしてみるから、待ってて欲しいんだな。
きゃー、また間違ってるしー。SB3Uで入力しながらやるべきなのね。ハンセー。
.xxFile内のObjectTreeタブで編集できるデータについて解説する。
●WorldCoordinate/ワールド座標とは何か
複数のObjectを配置するとき、配置するための場所と位置情報が必要となる。
各Objectの座標(=ローカル座標)に「まとめ」座標変換を行い、ワールド座標を計算する。
ExportingOptionにWorldCoordinateとあるのは、世界に表示されたときの位置で出力するため。
OptionをOffにするとローカル座標で出力される。
「SCENE_ROOTを拡大すれば人工さんを巨大化できる」というのは
まさにこのTree最上階の変換式によってすべて(人工さん)を拡大する操作である。
順を追って、変換方法の説明をする。
●TransformMatrix/変換行列を見る
SB3Uのv0.9.6ではMatrixの持つ要素を分解し「translate/平行移動する,
rotate/回転する,scale/縮尺を合わせる」として表示している為、直感的に操作しやすいが
その反面本来の意味がわからなくなっている。
そのためこの項ではMatrixを表示できるSB3Uv0.6Pre21で解説する。
FileOpen>.pp>.xx>ObjectTree>ExpandAllの手順で開いた
TreeのFrame(Name)をクリック選択すると右窓FrameタブにFrameName等の情報が表示される。
中央にどーんと表示されている数列がMatrixである。
4列×4行の行列なので4x4Matrixと呼ぶこともある。
Matrixの下にあるボタンは
「Identify/単位行列にする,Combined/ワールド変換行列を求める,Invert/逆行列を求める」
となる。すべて数学用語なので後述することとする。
●姿勢変換行列を読みとる
3Dモデルを操作するということは、Meshを構成する各頂点について
座標変換を行うということである。
4次正方行列(square matrix)Mを用いて座標(x,y,z)→(x',y',z')とするとき、
任意の数w(計算を楽にするため通常0か1を代入する)を用いて
(x',y',x',w')=(x,y,z,w)Mのように表せる。
任意の座標に対してつねに(x,y,z)=(x,y,z)Mとなるとき、
行列Mは単位行列(identity matrix)である。
すなわち、単位行列(対角成分=左上~右下が1でその他すべて0)をいくら掛けても、
座標は変化しない。
行列をベクトルの合成と考えると、右端w要素を除外し、上から順に
Vx(x,y,z)-Vy(x,y,z)-Vz(x,y,z)-translate(x,y,z)のように分解でき、
変換後のX軸、Y軸、Z軸ベクトル及び原点座標と直感的に理解できる。
この意味から姿勢変換行列とも呼ばれる。
各ベクトルの長さが1以外なら縮尺が掛っていると考えられる。
ローカル軸P(x,y,z)を正規化したベクトルP'|x',y',z'|=1について
aP'=P(ax',ay',az')が成り立つとき、aはその軸のScale/縮尺である。
もちろんaは正の実数でなければならない。
●特殊な変換行列
※SB3Uでは入力しても反映されないかもしれない。
【ミラーリング】では、aが負の実数である場合、どのような変換になるか?
例えばX軸ベクトルについてスケールが×-1であるとき、X軸ベクトルを法線とする
平面YZについて鏡像となる。
この変換をreflection/鏡映またはmirroring/鏡像化という。
AP設定を誤ってスケールが負の値になったときなど、逆さまの暗い世界に
迷い込むことがあるが、それは鏡映のためである。
左右や前後や上下を反転させるため、意図的に迷路を作ることもできる。
【正投影】では、aが0の場合はどうなるか。
X軸ベクトルについてスケール0を掛けた場合、YZ平面上の二次元図形への変換となる。
つまり、真横から光を当てた壁への影のようになる。
SB3Uでは近似値(例えば正の最小値1.4013E-45)のみ入力可能。
【せん断】二次元空間では正方形を平行四辺形に変形させるように、
面積と体積は変えずに形状や角度を変え歪める変換をせん断という。
せん断行列HはX軸にY,Z成分s,tを加え、大きさ1のX軸ベクトルを
ベクトルh(0,s,t)だけずらす意味合いをもつ。
せん断と縮尺を組み合わせることで回転と同じ変形ができる。
●回転の向き
DirectXにおける正方向の回転は「原点の方向を見て時計回りが正の回転」と決められている。
右手座標系では右ネジとか、右手で回転軸を捕まえて正の方向に親指を向ければ、
掴む4指の巻きつく方向である。
軸単位での回転では、Z-左方向側転(roll)、X-前転(pitch)、Y-反時計回りスピン(yaw)
とあらわせる。
また、左手座標系では左ネジとなり、右手座標系とは逆回転になる。
*図挿入*
三角関数は円上の座標と中心とのなす角θについて相互変換する関数である。
平面座標X-Yにおいて半径r=1、原点(0.0)、X軸(1,0)となす角θである円上の点(x,y)は
それぞれx=cosθ,y=sinθであらわせる。
すなわち(1.0)を原点(0,0)中心にθ回転させた座標は(cosθ,sinθ)となる。
●オイラー角による回転行列
Meshの頂点座標をTranslation/平行移動、Scaling/拡大・縮小、Rotation/回転によって
変えることをアフィン変換と呼ぶ。
また、X-Y-Z軸方向それぞれに回転角をsetし姿勢をあらわす方法をオイラー角と呼ぶ。
4×4Matrixでオイラー角による回転を表現するとき、Direct3Dでは
軸の回転順をZ-X-Yとしているため、行列Aを回転させる行列は下記のようになる。
A * rot-Z * rot-X * rot-Y
回転の順序を変えると座標が変わってしまうことがあるので注意。
*図挿入*
・X軸回転(Pitch)の場合、X軸のベクトルは(1,0,0)になる
 :軸回転においては、回転軸のベクトルはそのままX-Y-Z方向となる。
・X軸回転の場合、Y,Zともx成分は0となる。
 :Y軸回転においてはy成分が0となり、Z軸回転においてはz成分が0となる。
・X軸回転の場合、Y軸のベクトルはYZ平面上で(1,0)からθ回転するため(sinθ,cosθ)となる。
・X軸回転の場合、Z軸のベクトルはYZ平面上で(0,1)からθ回転するため、
原点からの角度になおすと(θ+90°) = (θ+π/2)となり、
余角公式から(-sinθ,cosθ)となる。
・Y軸回転(Yaw)の場合、X軸のベクトルはXZ平面上で(1,0)から-θ回転するので負角公式から(cosθ,-sinθ)
となり、Z軸のベクトルは(0,1)からθ回転するため同様に(sinθ,cosθ)となる。
・Z軸回転(Roll)の場合、XY平面上でθ回転するのでX軸(1,0)→(cosθ,sinθ)となり、
Y軸(0,1)→(-sinθ,cosθ)となる。
*回転行列の表示*
●行列の積と移動行列
加法定理によりsinαcosβ+cosαsinβ=sin(α+β)、また
cosαcosβ-sinαsinβ=cos(α+β)となることから、回転角αの回転行列Aと
回転角βの回転行列Bの積ABは回転角(α+β)の回転行列に等しい。
Translate/平行移動の変換は単位行列I最下行のx,y,zに移動値を入力すればよい。
移動行列同士の積によって、x,y,z値はどう変化するか?Translate(1,2,3)に
Translate(1,2,3)を掛けるとTranslate(2,4,6)となる。
すなわち移動値は、移動行列の積によって加算される。
単純変換ならば足し算で済むが、回転や縮尺が絡むので行列積を計算する必要がある。
人工3ではScaleはほとんど使われておらず、Rotate及びTranslateに気をつければよい。
Excelでは行列の積を計算することができる。
関数はMMULT(配列1,配列2)で、行列(4×4までがよい)を指定するのだが、
このままでは結果が1マスしか表示されない。左上をMMULT関数とし4×4領域を選択
>F2>Ctrl+Shift+Enterで結果が4×4で表示される。
実際に数値を入力し、行列の積を計算することが変換行列の意味を知る助けとなるだろう。
●ワールド変換行列
これまでのまとめをすると、頂点座標のアフィン変換・オイラー角による行列の積は
縮尺a×縮尺b  :縮尺 a×b・・・乗算
回転角α×回転角β:回転角α+β・・・加算
移動A×移動B  :移動 A+B・・・加算
となる。通常はScale→Rotate→Translateの順に掛け算を行う。
行列Aの姿勢を行列Bの座標軸に変換する場合は積ABとなり、子/Chird→親/Parentの順に掛ける。
この変換を末端MeshFrameMatrixからワールド座標まで積み重ねた行列積の計算結果を
WorldTransformMatrix/ワールド変換行列という。
SB3UではCombinedボタンにより一発で計算できる。
ここでいうワールドとは実際のワールドではなく.xxFile内での
最上階(SCENE_ROOTやAll_Root)を指す。
*ObjectFrameの図*
末端のMeshローカル座標をMeshFrameから最上階まで子×親の行列積によって変換し、
WorldCoordinateを求める行列がワールド変換行列である。
●Ex)Matrixを入力し実際に「らみえる」を変形してみよう
1.移動値1=約10cmです。y=10とすると上空100cmを中心とした正八面体となります。
2.Y軸について45度回転するとcosπ/4 = sinπ/4 = 1/√2 ≒ 0.7071となり、
回転行列はこのようになります。
*図挿入*
Applyで◆面が正面になりました。
3.各軸について拡大縮小してみよう。どうです、おっきくなっちゃった?
(^q^)<すごく・・・おおきいです・・・
すごく・・・数学です・・・
フツーの足し算引き算掛け算のほかに、三角関数と幾何(ベクトル)と線形代数が出てきました。もし教科書をもっている人がいれば、読みながらSB3Uをいじってみるといいかもね。
SB3Uv6派の人のキモチがちょっとわかったかも。まあ、バイナリ手打ちしてしまえばカンケイナインダケドネー^^;
本日は原稿締め切り日です。明日、Bone-Weightについて仕上がった原稿を掲載し、編集作業に入りたいと思います。色々修正しながら掲載しているので、Blogで間違っている部分もありますが(昨日のバイナリとかひでぇ間違いがいっぱいだったのよねー)暇になったら修正かけます。
ま、Boneとか、Matrixの説明が終わればちょちょいのチョイだよね。

3 Comments [+]

— posted by ウチエダ了 at 09:19 am   commentComment [3]  pingTrackBack [0]

まだだ、まだおわら・・・ッー!

わーいコメントうれしいなっ♪とかいいつつ、表面下ではぐつぐつと数学で脳が煮え滾っているガノなのでした。
ベクトルの外積・・・そして回転・・・その道程は長く険しく、もし自分が理解できたとしても読者にもそれが伝わるかっていえばそういうわけでもないしネー。
TransformMatrixの文献漁りながらExcelで行列積を計算してみる。明日には完成できるといいなぁ。いや、やってみせるさ!
てなわけで今日の公開記事はサラっとバイナリについて書いてみたものです。

バイナリいじり隊っ☆

某板のやり取りを見て・・・やっぱ初心者にバイナリいじらせるのは危険じゃね?と思ったり。
でもそのやり取りから、バイナリ基礎知識について書いておいてヨカッタナーと思うのでした。
●バイナリ基礎知識
PCの情報処理は最小単位(1bit)がON/OFFに依る。
数字で表すとON=1、OFF=0となる。
10100010110...となる信号の羅列を二進数(binary)として認識すれば、
我々が日頃親しんでいる十進数に変換できる。
通常、バイナリとは生データを指すが、一般的にバイナリエディタとは
二進数ではなく16進数(Hexadecimal/Hex)で表示・編集するツールを指す。
十進数データは~d、16進数データは~hあるいは0x~と表記することがある。
●bit反転
bitについては前項で述べたので、bit反転について述べる。
00000000⇔11111111前後でbit反転である。
16進数表記では0xFF⇔0x00、0x56⇔0xA9となる。
0123456789ABCDEF  bit反転Hex早見表
FEDCBA9876543210  上下で相互変換
illusionのBR2を除く.pp格納データではbit反転によって文字列を隠していることが多い。
人工君→人工さんの単純変換では.xxFileをbit反転しs01_J_をa01_J_と置換し
再反転するというオモシロい改造ができたりする
(このデータは差し替えではなく、一部利用とすべし。名前以外も色々違うからね)。
この手法は.xaFileや.kysFileなど利用範囲が大きい。
例えばするメや勇者逃の顔xaを差し替えるときはものすごくラクに変換できてよい。
●bit shift = X2
00000001→00000010→00000100→00001000→00010000
を16進数表記になおすと01→02→04→08→10(16d)となり、
bitを左側にshiftする(ずらす)と倍に、右側にshiftすると半分になる。
テクスチャサイズを16のbit shiftした数値にする理由は、計算がラクになるからである。
十進数表記では16→32→64→128→256→512→1024→2048...
16進数表記では0x0010→0x0020→0x0040→0x0080→0x0100→0x0200→0x0400→0x0800...
となるワケ。
●LittleEndianと浮動小数点/float
現在一般的には8bitを1Byteと定義している(オクテット)。
次にWordを2Byte、Dwordを4Byteと決め、LittleEndianについて説明する。
データの並びがそのまま左→右に並ぶものはBigEndianと呼ばれる。
裏を返せば、そのままの並びではないデータの並べ方があるのだ。
LittleEndianとは、2Byte以上のデータを、
特定の単位毎に最下位→最上位のようにひっくり返す並べ方をいう。
Word単位の例 :01 23 45 67 → 23 01 67 45
Dword単位の例:01 23 45 67 → 67 45 23 01
これまでの説明は、バイナリデータから小数点つきデータを読むためのものである。
.xxFile内で小数点データはLittle Endian-Dword-floatである。
float/浮動小数点とはこの場合、IEEE754方式32bit(単精度)実数データを指し、左から「符号部(±)」1bit、「指数部」8bit、「仮数部」23bitで構成される。計算式: (-1) ^符号部×2^(指数部 ‐127)×(1+仮数部)
で表されるが、一部例外があるため最大値、最小値は
±3.402823×10^38(3.402823E+38)となる。
float最大値:0 11111110 11111111111111111111111 toHex→ 7F 7F FF FF toLE→ FF FF 7F 7F
float最小値:1 11111110 11111111111111111111111 toHex→ FF 7F FF FF toLE→ FF FF 7F FF
TSXBINというツールは浮動小数点表示に対応した使いやすいバイナリエディタですので、
バイナリ解析/改造の助けとなってくれるでしょう。勿論電卓も使おう!
※例外の説明もついでに※指数部が11111111(255d)であるとき、
仮数部が0以外なら非数(Not an Number-NaN)、0の場合は無限大となる。
また、すべてのbitが0であるときは±0となる。
●きゃらめいく制限解除
.exeFileの改造として最も有名なのが制限解除である。
「きゃらめいく」各スライダーの0~100制限を解除し、数値入力によって
負の値(マイナス側)や100以上でも設定できるようになる。
Make.exeが「はんなり」では変更されている為
(コーディネートでtextureをくるくる回して選択できるようになったぞ!)、
verにあったパッチを当てないと解除されない。
また、パッチツールが見つからない・使い方がわからない場合は
パッチをテキストエディタで開いて該当箇所を確認し、バイナリエディタで
アドレスジャンプ→修正を繰り返すことで同じ効果が得られる・・・めんどいけど。
説明し忘れていたので補足すると、アドレス(address)とは住所のことではなく、
バイナリデータ(byte)の絶対位置を指す。
例えば00065D39: 35 39 とは、アドレス65D39のデータ35を39に書き換えるという表記。
●ツール編集と精度
ツールを使った改造を説明してきましたが、ツール使用による弊害もあるのです。
その第一が計算精度。DwordFloatという浮動小数点データと比較すれば、
編集後に精度が落ちていることが分かります。
データ形式の変換、Export-Importするのでも精度は落ち、
DirectX形式ではtextデータ(6桁)になる為、どれだけ精度が落ちているかわかるでしょう。Metasequoia形式でx10optionがあるのは、ひとえに精度を維持するため(不十分だけど)。
xx→toystudio→mqoとした場合、スケールは一致しても精度が1桁落ちるわけです。
xxFileFormatはかなり解析されているので、バイナリデータを直接いじることで
精度を保った変更が可能です(FileFormat情報はJS3Wに同梱)。
ツール編集によって減ったboneを戻したり、もっと増やしたりする操作は
SB3U上では現状バグが多い為おすすめしません。
まあ、バイナリでいじれない私のようなModderはツール使っとけばいいんだよ。
どうせPCが貧弱すぎて精度落ちてもわかんn(ry

どうなんだろう。バイナリエディタの使い方も入れておくべき?Joe?
エディタの画像とよく使う機能について書いておけばいいんじゃない?Kanann?
駄洒落はこのくらいにして、VectorとMatrixの世界に潜ってきますですー。アディオース:P

— posted by ウチエダ了 at 10:54 pm   commentComment [0]  pingTrackBack [0]

なんだい、シャイボーイ?(挨拶)

いえいえ、某板で続々と「ブログみてますよ~」コメントがね。
だが、待ってほしい。そこは当ブログとはほとんど関係ないんダケドナー?そんな宣伝たのんでないんダケドナー。でもって、根本的な疑問。何故それをここでコメントシナイノカナー?
というわけで標題となるのだった。
あそこの住人(名無し)はツンデレ/突っ込み/シャイボーイしかいないのかいっ!?と問いたい。
まあそういうわけで、ブログには気軽にコメントするように。新刊の目安にもなりますしね。買う予定の名無しさんはコメントしておいた方がいいとオモウヨ?いえいえ、寒いのでカタコトなのです。他意はありませんヨ。
長ったらしい前置き(独り言)はここまで、記事いきます。でも画像はまだつくってません!

透過順位とUnknown Hex

●αチャンネルと透過
tgaは透過情報を持っており、人工少女3で衣装を透過させるとき使用する。
材質のRGBA設定でAを1未満にすると透過がONになる・・・と上手い具合にはいかない。
元々透過情報のなかったオブジェクトを透過させるには
illusionの独自パラメータUnknownHexをいじる必要がある。
JS3Wでも透過ONとの説明付で設定出来るが、今回はSB3Uを例に透過化の手順を説明する。
丸投げコスを部分的に透過させたい場合等で使えるテク。
●透過化/Hex値修正
1.該当.ppFile及び.xxFileを開き、Meshタブから該当Objectをクリック、
 Renderに表示させ確認する。
2.右下のMeshListから該当のMeshをクリック、
 上部Hexの先頭を00or02→0Cor0Eに書き換え
 (First3bytes related to transparency/先頭から3Byte分は透過関連の意)、Setで設定。
3.GotoFrameをクリックし、ObjectTreeタブのFrameHexを変更
 00-00→00-01(2nd byte:EnableDrowOrder/描画順を有効化の意)Applyで適用。
4.透過順位を変える場合は標準で64になっている数値を書き換える。
 (5th byte:DrowOrder/描画順)この順位については後述する。
5.必要ならMaterialのRGBAを調整。textureがbmp等、
 透過情報を持たない場合や描画に不具合が出る場合はA値を1未満にする。
6.save.ppで保存し、ゲームを起動して透過を確認、不具合があればやり直す。
 透過ObjectのHex値を参考にすると失敗が少ない。
※コーディネート中に透過ONにする方法は寄稿記事参照。
●Zバッファと描画順序、チラつきについて
Objectをレンダリング(表示)するには視点情報=カメラが必要である。
ポリゴン空間→カメラ→スクリーン
のルート上で、カメラは奥行き=Z値を計算し、Objectの前後関係から
描画順序を決め、スクリーンに渡す役割がある。最も遠い距離を基準とし、
16bitなら65536分割した値=Zバッファで前後関係を判定する。
(奥行きの最大値が少ない為、人工少女は動作が軽いが、その分表示範囲が狭い)
ObjectのMesh同士があまりにも近い場合、カメラ位置により
Zバッファでの順序判定が前後する為、貧弱貧弱ゥな環境
(PCのハード的に)ほどチラつきが起こる。この問題はMesh位置を
離すことで解消できるが、ハードの買い替えも検討した方がよい。
●αブレンドとtga食われ(欠け)問題
透過Object同士が重なる場合、Zバッファのみではtga食われ(欠け)問題の
解決にならない。αブレンドが介入する為である。
α値*透過Object+(1-α値)*背後Objectのように計算するのが
αブレンドであり、Zバッファで決めた前後位置に従うと背後のObjectが負け、
描画されない為である。
この問題を解決する為、人工3では多段階レンダリングを行っている。
あらかじめ定めた順序によって描画を行い、透過Objectは最後に、
更に透過Object同士の描画順序=透過順位に従う仕様である。
●人工3の透過順位
透過順位とは透過Objectの描画順位であり、Hex値が小さいほど
最後に描画されると覚えること。
A(0x01) →B'(0x05) →C(0x06)→カメラ
B'は非透過、()内は描画順、0x~はHex値とする。この場合、
B'の上にCがブレンドされ、透過は成功したように見える。
B'(0x05) →A(0x01) →C(0x06) →カメラ
の場合、B'の上にはAだけがブレンドされ、Cは表示されない。
Hex値を修正しA(0x07)とすることでB'の上にA、Cがブレンドされ、
透過成功となる。しかし、ことは単純ではなく、Animationで動く
Objectと動かないObjectでは動かないObjectが先に描画される。
主に背景との重なりで問題が生じる為、柔軟に対応すること。
MaterialのA値を1未満にするテクもその一つである。
また、AnimationによってB'→C→Aにもなるような場合は、
同一Objectにまとめる、モデリング修正で透過OFFにする等、
解決方法の見直しが必要となる。
*図挿入*
●その他Hex値の利用
解析されていない部分の多いUnknownHexではあるが、総当たり式や
利用Objectからの逆算によって仕様の判明している部分もある。
作成したModに不具合がある場合は、製品のxxFile内のHex値を比較すると
解決することが多い。
MeshObject-Hexと呼ぶ透過化手順2に既出の先頭Hex値は光0x04or0x06、
影0x08or0x0Aである。左右値の違いは2bit目1が背面カリングONに寄与
しているらしい。背面カリングONでカメラに向いている面のみ表示ON
になる。尚、光と影はいずれも透過となる為注意。
ちなみに1bit目0は表示ONフラグなので、Hex値を奇数にすると非表示になるが、
表示管理によってはON/OFFは無効化されることがある。
一気にHex値を変更したい場合、SB3UのEditHexボタンを活用したい。
できている図といえば・・・

くらいかな。あとは食われてるtgaと、Hex修正箇所の図かな。
透過順位で悩んでいる人のお役に立てれば幸いですよん;-)

5 Comments [+]

— posted by ウチエダ了 at 11:32 pm   commentComment [5]  pingTrackBack [0]

ツールの使い方は簡単なのにっ・・・くやしい、でもビクンビクン

ゲロ吐きそうな気分です。でも某板がスカってていいきもち・・・ダブルスカ! つ ~●●●● 
今日も仕上がった記事を載せていきますので、ご指導ご鞭撻おねがいします(M的に!)
漏れ・・・この記事をかいたら、焼きビーフンつくるんだ・・・フフン・・・

材質×ライト

び、BL的な意味とちゃうねん。あのな、内部的な計算はだいたい掛け算なんやでってことがいいたかってん。
真っ暗とか真っ白が起こるのは×0とか++++で限界突破してるときやな。あえてそんな現象を引き起こしてるのが、3Dふぃぎゅあ系のデジカノSSに見られる影絵とかやねんでー。(さよかー)・・・さむい、この部屋はさむすぎるでー(ジュリー的な意味で)
●数値で色を表現する
光の三原色とはRed/Green/Blueである。
このRGBを最大1~最小0と定義すると黒は(0,0,0)白は(1,1,1)となる。
紙面がモノクロなので申し訳ないが、RGBを増やすと明るくなり減らすと暗くなる。
RGBで黄色を表現すると(1,1,0)で、赤+緑=黄色である。緑+青=(0,1,1)=水色、
赤+青=(1,0,1)=ピンクとなり、絵具とは違うので注意。
RGBによって色を表現し、更に透過情報としてアルファチャンネルを加え、RGBAデータとなる。
αchとは1が非透過、0で透明と定義されている。
.xxFile内ではDwordFloatで各RGBA情報が格納される。
●材質とライトの関係
ライト(光源)によって物質が照らされてはじめて眼に見えるようになる。
この関係はライト→物質→眼の順にRGB情報が渡されると考えられる。
物質が光を反射するとき、材質によってライトと反射光に差が生まれる。
例えば鏡はライトと等しい光を反射するが、ブラックホールから光は返ってこない。
DirectXではそれぞれ光源=light、材質=Materialとして定義され、もう少し複雑な要素に分けられている。
●Material各要素解説
Emissive:自己発光。ライトに左右されないので、
この値を上げると背景から浮いて見え「ペラくね?」となる。
平坦に見せるモニタなどの表現に適している。
Ambient:環境光。ライトのAmbientを反映して全体が照らされる。
この値を上げると影も明るくなる。昼夜で変化すると覚える。
Diffuse:拡散光。ライトの向きによって反射が変わる。
勿論、頂点の向き=法線として計算される為、法線が大事!
Specular:鏡面光。Diffuseを更に鋭利にした反射。
RGBAに加え、独立値Powerによって鋭利さ(角度による減衰)が変化する。
Powerを上げるとSpecular反射する角度が狭くなる。
(※SB3Uのver9ではPower=Shininessと表記)
今思い出してんけどな、大学時代に買わされた本が「物質と光」っていうねん。べ、べつに宗教とかそういうんじゃないんだからねっ!光は波やったり粒子やったりというアレやな。内容は数式や。
ガノな、線形代数学は3回、微分方程式は2回落としててな・・・それで留年した経験をもつねん・・・でもな、数学はやってみると面白いと思うで!
まぁ、センスはないけどな。今ベクトルの引き算が感覚で掴めてきたところや。外積と内積は計算方法と定義だけやわー。わかった!ってならへんとなんか気持ち悪いもんな。ほな、つづきいこかー。
●Light各要素概説
人工さんのライト[.xl]は同名[.xa]によって経時変化アニメーションします。
昼夜の変化がシームレスで、臨場感がうp!そんなLightの概説ですぞ。
Ambient:環境光。他の光源と計算方法が異なる。
Directional:指向性光、平行光。太陽のように無限遠方から照らす光源。
Materialと同様のRGBAに加え、ベクトル角Direction値を持つ。
Pont:点光源。一転から放射状に発光する光源。
件のRGBAに加え、光源の位置Position、有効範囲Range、減衰Attenuation値を持つ。
Spot:スポットライト。点光源の方向を限定し、
内部コーンと外部コーンを組み合わせた二重構造になっている。
件のRGBA、Direction、Position、Range、Attenuationに加えて
内外コーン角度Inner/OuterConeAngle、内外コーン間の輝度減退量Falloff値を持つ為、処理が重い。
※減衰値にはAttenuation0~2があり、A0は基礎、A1は距離の比例係数、
A2は距離二乗の比例係数。A1,A2を0にすると減衰しない。
うん、すまんけどライトは守備範囲外やから仕様だけ解説な。
バイナリでいじりたい人は、デジ彼用のライトが参考になるはずや。
もし解説できるひとがおったら、代わりにたのむわー。

テクスチャとuv

今日も今日とてタダ記事ウマー。印刷所の締め切り調べたら、まだまだ余裕っぽいのですけど、自分に鞭を入れるため、締め切りは変えない!
尚、あとで付け足したくなった記事は、別冊としてコピると思う。いつものパターンでは前日、あるいは当日も作業だ!
年内は地獄だぜェーッ!だが、それが(ry
●Textureの役割
DirectXにおいてTextureとはMesh表面に質感を持たせるために
Material設定し貼りつける画像のことをいう。
人工3では1枚目に.bmpFileか.tgaFileを設定するのが普通だが、
実は.jpgも貼れるのでデータを軽くしたい場合は使うとよい。
DirectXの仕様では動画形式.aviFileも貼れるようだ(尾行3ではモザイク表現に使用)。
サイズは処理過程を鑑み、64x64や128×128等一辺が16×2^nになるようにするとよい。
(バイナリ/bit-shiftを参照)
人工少女3で複数のtextureを指定する場合、コーディネート上の「ツヤ」であることが多い。
ツヤtextureに着色することで金髪を綺麗に見せるテクニックが有名である。
他にはモザイクとしてHシーンのみ4枚のbmp画像を順次切り替え、Animation表現することがある。
ツヤ改造といえば、閃人さんのゴールデンハンマー!やなあ。
モザ改造といえば、少林氏の点滅する目・棒・効果音(の文字)やね!
「はぁ、藻消しぃ!?ば、ばかもの。illusion様がそのような危険なデータを予め入れておくと思うたか。ええい、そこへなおれ。そなたなど、インチキ眼鏡を1マン個買わされてひいひい泣いていればいいのじゃ!(中略)わかったな?」
っていうネタはやめました。C氏に感謝。でもツヤもモザイクも白黒紙面ではわからんのですよ・・・
●UV値の定義
UV座標とはXY座標に置き換えて考えることができる
(アルファベットu,v,w,x,y,zが由来。wについては「座標変換」章で解説する)。
uv座標はスクリーン座標系で表現され、スクリーンの原点同様に
textureの左上を原点(0,0)とし、最大値の右下が(1,1)となる。
しかし、illusionの.xxFileではuv値が1以上であることも珍しくない。
この場合は小数点以下の値に置き換えても問題はない。
metasequoia上でのuv配置確認でrepeatでもはみ出すなどの問題があるようなら
元データを修正するのもひとつの手である。
また、textureサイズによってuv値反映にも誤差が生じる為、ゆとりをもったuv配置が望ましい。
textureサイズを変えずに色境界をくっきりさせたい場合には頂点位置及びuv調整が有効である。
uvをわざとずらしたり、別の材質(texture)を適応するなど、とことんこだわるのもよいだろう。
N氏、uvのくわしい説明さんきゅですー。ここではさわりだけですので、助かりました。
●Ex)らみえるを空模様にする
頂点のuv値がすべて(0,0)に設定されている「らみえる」に模様をつけるには
uv値の適切な設定とmaterialによるtexture指定が必要である。
上端A(0,1,0)のuvを左上(0,0)に、下端F(0,-1,0)のuvを右下(1,1)とし、
上側面と下側面の各4面ずつ同一uvにする。
▲ABC-uvはA(0,0) B(1,0) C(0,1)となり、裏返して△ACB-uvはA(0,0)C(1,0) B(0,1)
 ▽FBC-uvはF(1,1) B(0,1) C(1,0)のように上下面の模様(texture)はシームレスに接続する。
四角面はテクスチャがそのまま貼られるようにし、裏返す。
上図では一部の面を裏返して表示させている。
面が裏返るとtextureは左右逆に貼られている。
人工3で面が裏返るということは、uv座標を頂点に対しても裏返しに
配置する必要があることがおわかりいただけたかと思う。
textureは正方形でなくともよい。sb3u等でtextureを差し替えて遊ぶのも楽しい。→texture置換へ

お次はちょっとややこしい透過(transparency)とZバッファとHexさわりまでいきます。

4 Comments [+]

— posted by ウチエダ了 at 10:33 pm   commentComment [4]  pingTrackBack [0]

少しはできるようになったな(解析というものが)

まだ合否はでていない冬コミですが、そろそろ準備をはじめないと!と思って下書きしたらこの有様だよ!

Link

Link
TSXBIN.exeそれはそれとして↑のツールは便利だお。
PowerWitchTheRoyalと一緒につかえば皆も解析者になれる!
・・・はず。
Link

Link

Link

Link
何もしてなかったわけじゃあ・・・ないんだけどニャー(--)ではでは。

4 Comments [+]

— posted by ウチエダ了 at 03:04 am   commentComment [4]  pingTrackBack [0]

<< 2010.11 >>
SMTWTFS
 1 2 3 4 5 6
7 89 10 11 1213
1415 16 17 18 1920
21222324252627
282930    
 
T: Y: ALL: Online:
ThemeSwitch
Created in 0.0273 sec.
inserted by FC2 system