2013年9月17日火曜日
MEMO : IES,ImageMagick,衛星画像
とりあえずメモ
照明データとTools
日本語の説明ページ
コマンドラインでの画像コンバーター、サイズの変更などが出来る
MAYAのimconvertがコレにあたるらしい
よく、Blogなどで画像処理をするのがこの手のソフトらしい。
なるほどね、
最近扱う画像、データが膨大になって、
自動処理を行わないと間に合わず、
さらに、それを整理するべく
データーベース等活用しないとマズイ気がしてきた
というか、DTPで活用してないのが不思議だな > オレ orz
ちょっと画像の調べ物をしてて、思い出したのでメモ
衛星画像は異なる波長を複数とらえるので、RGBよりも数が多い
・・・地形制作の人は知っていてもそんは無いかも
驚くべき計画都市、モヘンジョ・ダロ
こんな記載が
可視域の
バンド3 (630~690ナノメートル)、
バンド2 (520~600ナノメートル)、
バンド1 (450~520ナノメートル)
に赤、緑、青色を割り当ててカ ラー合成したので、
肉眼で見たのと同じ色合いとなります。
だそうです。かっこいいぜ人工衛星 :p
ちなみに標高はどうやって測るんだろうね?
もう一機の人工衛星と3点測定?
IES
CGcompo IES照明データとTools
ImageMagick
ImageMagick日本語の説明ページ
コマンドラインでの画像コンバーター、サイズの変更などが出来る
MAYAのimconvertがコレにあたるらしい
よく、Blogなどで画像処理をするのがこの手のソフトらしい。
なるほどね、
最近扱う画像、データが膨大になって、
自動処理を行わないと間に合わず、
さらに、それを整理するべく
データーベース等活用しないとマズイ気がしてきた
というか、DTPで活用してないのが不思議だな > オレ orz
ランドサット衛星画像
ランドサット衛星画像を使うちょっと画像の調べ物をしてて、思い出したのでメモ
衛星画像は異なる波長を複数とらえるので、RGBよりも数が多い
・・・地形制作の人は知っていてもそんは無いかも
驚くべき計画都市、モヘンジョ・ダロ
こんな記載が
可視域の
バンド3 (630~690ナノメートル)、
バンド2 (520~600ナノメートル)、
バンド1 (450~520ナノメートル)
に赤、緑、青色を割り当ててカ ラー合成したので、
肉眼で見たのと同じ色合いとなります。
だそうです。かっこいいぜ人工衛星 :p
ちなみに標高はどうやって測るんだろうね?
もう一機の人工衛星と3点測定?
EF-12 : [TGSにあなたのキャラ/ステージを一緒に出そう!]コンテスト 結果発表!
背景部門で、2位でした ドンドン
EF-12 TGSコンテスト
キャラクター部門の一位は
3D人の中の人 ymt3Dさん
安定のクオリティです
背景部門の一位は Alidadeさん、
溶岩ステージですね〜。
どうやって作ったんだろ〜
自分の場合、モデリングは極力シンプルに(手を抜いて
テクスチャで使って勝負(dDo任せ orz
との目標でしたが、画角、サイズ等の調査ミスで、
すり鉢上の内部はほとんど表示されないという
なんとも残念な状態になってしまいました。 orz
コレに懲りず、
いろいろやってみたいと思います。
EF-12 TGSコンテスト
キャラクター部門の一位は
3D人の中の人 ymt3Dさん
安定のクオリティです
背景部門の一位は Alidadeさん、
溶岩ステージですね〜。
どうやって作ったんだろ〜
自分の場合、モデリングは極力シンプルに(手を抜いて
テクスチャで使って勝負(dDo任せ orz
との目標でしたが、画角、サイズ等の調査ミスで、
すり鉢上の内部はほとんど表示されないという
なんとも残念な状態になってしまいました。 orz
コレに懲りず、
いろいろやってみたいと思います。
2013年9月13日金曜日
SubstanceDesigner : 導入その一
あいかわらずチラシのウラです
どんなツール?
プロシージャルテクスチャツール
・ノードベース
・3Dでの使用も可能?
・ペイントツールがついてた(bitmap)
・Photoshopと連携
・.sbsファイルを作成し、それを各アプリで読み込める。(それ自体がテクスチャ)
・.sbsにはあとで、変更可能なパラメータを埋め込める。
・MAYA,3dsMax,Unity,UnRealが対応
・テクスチャのデータサイズが縮小する
おとつい購入した3.6が3.7になった :p
ダイアログからアップデートをチェックDL > インストールで3.7
インストール等は他のサイトを参考に。
特に問題になるような事は無かった

起動時にサンプルを選択すると、フォルダ選択ダイアログが現れる
インストールフォルダに該当するSampleフォルダがあり、
指定してみたが上手く行かず
HELPも新しくフォルダを作るとか書いてあってチンプンかんぷん
画像リンクも外れてる :p

かなり高機能ですしかし以下の操作がありません。
・Undo(バグ?)
・レイヤー機能
Plugin 2012verはあるのに 2014?とかは?
2012のPluginを2014に入れられるか謎
データをどこに置くかが問題
テクスチャ画像と同じように考えていいのかしら
・sbs (未コンパイル)は使えない
・sbsar (コンパイル済み)が利用できる(プリセットには入っている)
※要確認 sbsarの作り方
・publish select element(s) で行けた。 保存、Player、パブリッシュの所にある。(2015 09 20追記)
・適用は問題なし
・terrainでは利用できなかった。プロシージャルテクスチャに対応してない?
せっかく3Dの要素があるのだから対応して欲しいものだ。
・ダブルクリックでSubstanceDesignerが立ち上がる。便利
が、立ち上がってくるのは .sbsarなので編集の余地無し・・・おおう orz
適用の仕方

・Assetsに追加(.sbsar)
・一度小さい三角をクリック、開いてから、中のテクスチャをD&D
(わからずに困ってた)
雑感
プリセットだと簡単すぎる。
同じような画面のゲムがあふれるだろうな~ orz
あと、プレビューまでが非常に簡単なので、
一覧表を作るのには向いているかも
プリセット、3.6 -> 3.7 で変換が必要になる
随時更新が必要かもな〜
どんなツール?
プロシージャルテクスチャツール
・ノードベース
・3Dでの使用も可能?
・ペイントツールがついてた(bitmap)
・Photoshopと連携
・.sbsファイルを作成し、それを各アプリで読み込める。(それ自体がテクスチャ)
・.sbsにはあとで、変更可能なパラメータを埋め込める。
・MAYA,3dsMax,Unity,UnRealが対応
・テクスチャのデータサイズが縮小する
おとつい購入した3.6が3.7になった :p
ダイアログからアップデートをチェックDL > インストールで3.7
インストール
という訳で導入インストール等は他のサイトを参考に。
特に問題になるような事は無かった
Sample : 保留

起動時にサンプルを選択すると、フォルダ選択ダイアログが現れる
インストールフォルダに該当するSampleフォルダがあり、
指定してみたが上手く行かず
HELPも新しくフォルダを作るとか書いてあってチンプンかんぷん
画像リンクも外れてる :p
2D Paint
普通に導入されてました。知らなかった。
かなり高機能ですしかし以下の操作がありません。
・Undo(バグ?)
・レイヤー機能
3dsMAX : 部分保留
3dsMax2014では標準でサポートしているので、特に問題無しPlugin 2012verはあるのに 2014?とかは?
2012のPluginを2014に入れられるか謎
データをどこに置くかが問題
テクスチャ画像と同じように考えていいのかしら
Unity : テスト
マニュアルの該当ページ・sbs (未コンパイル)は使えない
・sbsar (コンパイル済み)が利用できる(プリセットには入っている)
※要確認 sbsarの作り方
・publish select element(s) で行けた。 保存、Player、パブリッシュの所にある。(2015 09 20追記)
・適用は問題なし
・terrainでは利用できなかった。プロシージャルテクスチャに対応してない?
せっかく3Dの要素があるのだから対応して欲しいものだ。
・ダブルクリックでSubstanceDesignerが立ち上がる。便利
が、立ち上がってくるのは .sbsarなので編集の余地無し・・・おおう orz
適用の仕方

・Assetsに追加(.sbsar)
・一度小さい三角をクリック、開いてから、中のテクスチャをD&D
(わからずに困ってた)
雑感
プリセットだと簡単すぎる。
同じような画面のゲムがあふれるだろうな~ orz
あと、プレビューまでが非常に簡単なので、
一覧表を作るのには向いているかも
250のプリセットの把握 : 未
出来る訳が無い。なんらかのツールが必要だ orzプリセット、3.6 -> 3.7 で変換が必要になる
随時更新が必要かもな〜
2013年9月10日火曜日
memo : こだわり物理エンジン
こだわり物理エンジン
MITライセンスで自由に使えるんだって :p
UnityとC#のコードらしい・・・。
C#かーーー。 < 良くわかってない。
近況
キャラのモデリングをしたり、
エフェクト調べたり。
あとAllegorithmicがセール(2013 09 15まで)をしてたのでセット購入
・Substance Designer
・BitMap2Material
・250のセットなど
690ドルなり
EF-12の作業をやってみて、
マルチテクスチャのめんどくささを知った。
正直なところ、手がかかる。
これは、制作コストが上がるはずだ
背景となると、制作リソースは限られるので、
なるべく早期に完成へ近づけ、
あとはブラッシュアップに回したい。
テクスチャも下地だけでも自動化したい所。
Substance Designerについては
以前から情報を追っており、
一月ほど前、Steamで非商用版を買っていた。
BitMap2Materialsも欲しかったので、
コレを機に買ってしまった
(無駄になったけど)
MAYA,MAX,Unityが対応(SIが無いが)
というのも大きい
dDoはあれど、あれは速度が遅く、
サイズの大きな建物は苦手で、
車以下のサイズが望ましいように思える
(基本がPhotoshopのフィルタなどで、小さい影響範囲とか難しい
フィルタ系を調整すれば良いのだが、
今度は速度がネックで
時間がかかってそれどころではなかったり
時間があるときにプリセットを作っておくと便利
あと、リピートが考慮されないため
大規模なタイルパターンには向いてなかった orz
AutoDeskの保守費が消えたという
言い訳を述べてみた
MITライセンスで自由に使えるんだって :p
UnityとC#のコードらしい・・・。
C#かーーー。 < 良くわかってない。
近況
キャラのモデリングをしたり、
エフェクト調べたり。
あとAllegorithmicがセール(2013 09 15まで)をしてたのでセット購入
・Substance Designer
・BitMap2Material
・250のセットなど
690ドルなり
EF-12の作業をやってみて、
マルチテクスチャのめんどくささを知った。
正直なところ、手がかかる。
これは、制作コストが上がるはずだ
背景となると、制作リソースは限られるので、
なるべく早期に完成へ近づけ、
あとはブラッシュアップに回したい。
テクスチャも下地だけでも自動化したい所。
Substance Designerについては
以前から情報を追っており、
一月ほど前、Steamで非商用版を買っていた。
BitMap2Materialsも欲しかったので、
コレを機に買ってしまった
(無駄になったけど)
MAYA,MAX,Unityが対応(SIが無いが)
というのも大きい
dDoはあれど、あれは速度が遅く、
サイズの大きな建物は苦手で、
車以下のサイズが望ましいように思える
(基本がPhotoshopのフィルタなどで、小さい影響範囲とか難しい
フィルタ系を調整すれば良いのだが、
今度は速度がネックで
時間がかかってそれどころではなかったり
時間があるときにプリセットを作っておくと便利
あと、リピートが考慮されないため
大規模なタイルパターンには向いてなかった orz
AutoDeskの保守費が消えたという
言い訳を述べてみた
2013年9月6日金曜日
GameEngine : neoaxis
NeoAxisという、ゲムエンジンがあるようです。
とはいっても自分が気にしたのは
Align ツールの機能の一部。
スクリーンショットがあったので
ツール制作に流用出来ないかチェックします
・ランダム
・垂直方向へのそろえ
・StepMove(そろえもあり)
垂直方向にそろえるとか便利ですね〜
いつも手作業でやってますが、
こういった繰り返しの多いツールが
作業効率を上げるんですな。
GameEngineは進化が早く、
大規模背景等、作業量も多いので
こういった最適化は必須意ですね。
DCCツールもなるべく効率化出来るよう、
改造したいですね。:p
とはいっても自分が気にしたのは
Align ツールの機能の一部。
スクリーンショットがあったので
ツール制作に流用出来ないかチェックします
・ランダム
・垂直方向へのそろえ
・StepMove(そろえもあり)
垂直方向にそろえるとか便利ですね〜
いつも手作業でやってますが、
こういった繰り返しの多いツールが
作業効率を上げるんですな。
GameEngineは進化が早く、
大規模背景等、作業量も多いので
こういった最適化は必須意ですね。
DCCツールもなるべく効率化出来るよう、
改造したいですね。:p
2013年9月2日月曜日
Photoshop Script : EF-12 DDS書き出しツール
最近のシェーダーは複数のテクスチャを利用し、
表現力をあげるのですが、
EF-12も例外ではありません
EF-12 スタンダーとマテリアルの設定
リンク先にあるように非常にたくさんの設定があります。
が、以下の作業がとても面倒でした。
異なるテクスチャ素材から、目的のフォーマットのDDSを制作する
スーパー超絶面倒。
なのでPhotoshopのスクリプトで自動化します
EF-12より、この辺りの作業です
・Photoshop CS5(スクリプトが使えれば多分OK) ・Photoshop Plugin Nvidia DDS PluginであるNvidiaのDDSツールもスクリプトから制御出来ました。 超便利。コレだけでも調査したかいがあった〜
画面の開発環境はCS6です、実行はCS5でした :p
Photoshopで以上の6種類のテクスチャを開きます。 で、こういった順で処理をします。 _dnttテクスチャの作成 _h > dnt の Rチャンネルに _ao > dnt のBチャンネルに _dnt > DDS(DTX5_NM形式) で保存 _glossテクスチャの作成 _s >glossのRチャンネルに _pow > glossのBチャンネルに _gloss > DDS(DTX5_NM形式) で保存 _d > DDS(可変あり) で保存 _n > DDS(DTX5_NM形式) で保存 です。計6種類のテクスチャを
4種のDDSテクスチャにまとめ書き出しました
アフォすぎる w
まあ、とりあえずコンテストに応募しました :p
背景ですので、競合は少ないと思いますがw
一番開発に必要なのは
スケジューリングでしたとさw
こんな便利なツールが・・・。
QSM
Quick Save Maps v0.6.4 日本語版 - 勝手に制作!Photoshopにて複数テクスチャを手軽に書き出せる拡張ツール
もうコレで良いよね orz
情報を制したものが強い :p ってことでした。 コード参考にしよう orz
目的
Photoshopで異なる複数のテクスチャから、 目的のDDSを書き出す
EF-12より、この辺りの作業です
ツール
・Windows (Nvidiaのツールが動くのがWIndowsなので)・Photoshop CS5(スクリプトが使えれば多分OK) ・Photoshop Plugin Nvidia DDS PluginであるNvidiaのDDSツールもスクリプトから制御出来ました。 超便利。コレだけでも調査したかいがあった〜
素材
以下のテクスチャ素材 そのままDDSに書き出す素材 ・_d デカール ・_n ノーマル Dentに合成するテクスチャ ・_h 高さ ・_ao 遮蔽 Glossに合成するテクスチャ ・_s 輝度 ・_pow 硬度 です。ちょっとここらアタリ、調査不足でしたので命名規則は適当です orz流れ
画面の開発環境はCS6です、実行はCS5でした :p
Photoshopで以上の6種類のテクスチャを開きます。 で、こういった順で処理をします。 _dnttテクスチャの作成 _h > dnt の Rチャンネルに _ao > dnt のBチャンネルに _dnt > DDS(DTX5_NM形式) で保存 _glossテクスチャの作成 _s >glossのRチャンネルに _pow > glossのBチャンネルに _gloss > DDS(DTX5_NM形式) で保存 _d > DDS(可変あり) で保存 _n > DDS(DTX5_NM形式) で保存 です。計6種類のテクスチャを
4種のDDSテクスチャにまとめ書き出しました
Photoshop Script
そのコードです 1日で作った付け焼き刃ですので、 エラー処理など、効率化などはしておりません サンプルとして見てください
//mergeTex
//20120831 savedds
//EF12用にカスタム
debug = true
// 初期設定===========================================================
ex1 = ["dnt","h","ao","",""]
ex2 = ["gloss","s","pow","",""]
strDeffuse = "d"
strNormal = "n"
DXT1_RGB = 0;
DXT1_RGBA_1Bit = 1;
DXT5_RGBA = 3;
DXT5_NM = 24;
closeNewDoc = true;
function log(in_data){
if (debug ) alert(in_data)
}
//SAVEDDS =======================================================
function saveDDS(in_path,in_ddsType){
var idsave = charIDToTypeID( "save" );
var desc14 = new ActionDescriptor();
var idAs = charIDToTypeID( "As " );
var desc15 = new ActionDescriptor();
var idbarF = charIDToTypeID( "barF" );
desc15.putBoolean( idbarF, true );
var idfdev = charIDToTypeID( "fdev" );
desc15.putDouble( idfdev, 3.000000 );
var idfbia = charIDToTypeID( "fbia" );
desc15.putDouble( idfbia, 0.000000 );
var idurad = charIDToTypeID( "urad" );
desc15.putDouble( idurad, 5.000000 );
var iduamo = charIDToTypeID( "uamo" );
desc15.putDouble( iduamo, 0.500000 );
var iduthr = charIDToTypeID( "uthr" );
desc15.putDouble( iduthr, 0.000000 );
var idxstf = charIDToTypeID( "xstf" );
desc15.putDouble( idxstf, 1.000000 );
var idxthf = charIDToTypeID( "xthf" );
desc15.putDouble( idxthf, 1.000000 );
var idqual = charIDToTypeID( "qual" );
desc15.putInteger( idqual, 71 );
var iderdi = charIDToTypeID( "erdi" );
desc15.putBoolean( iderdi, false );
var iderdw = charIDToTypeID( "erdw" );
desc15.putInteger( iderdw, 1 );
var idusfa = charIDToTypeID( "usfa" );
desc15.putBoolean( idusfa, false );
var idtxfm = charIDToTypeID( "txfm" );
desc15.putInteger( idtxfm, in_ddsType );//ddsType
var idweig = charIDToTypeID( "weig" );
desc15.putInteger( idweig, 0 );
var idtmty = charIDToTypeID( "tmty" );
desc15.putInteger( idtmty, 0 );
var idmmty = charIDToTypeID( "mmty" );
desc15.putInteger( idmmty, 32 );
var idsmip = charIDToTypeID( "smip" );
desc15.putInteger( idsmip, 0 );
var idbina = charIDToTypeID( "bina" );
desc15.putBoolean( idbina, false );
var idprem = charIDToTypeID( "prem" );
desc15.putBoolean( idprem, false );
var idfilm = charIDToTypeID( "film" );
desc15.putBoolean( idfilm, false );
var idalpb = charIDToTypeID( "alpb" );
desc15.putBoolean( idalpb, false );
var idbord = charIDToTypeID( "bord" );
desc15.putBoolean( idbord, false );
var idbrdr = charIDToTypeID( "brdr" );
desc15.putDouble( idbrdr, 0.000000 );
var idbrdg = charIDToTypeID( "brdg" );
desc15.putDouble( idbrdg, 0.000000 );
var idbrdb = charIDToTypeID( "brdb" );
desc15.putDouble( idbrdb, 0.000000 );
var idmmft = charIDToTypeID( "mmft" );
desc15.putInteger( idmmft, 2 );
var idfdcl = charIDToTypeID( "fdcl" );
desc15.putBoolean( idfdcl, false );
var idfdaf = charIDToTypeID( "fdaf" );
desc15.putBoolean( idfdaf, false );
var idftworl = charIDToTypeID( "f2rl" );
desc15.putDouble( idftworl, 0.500000 );
var idftwogl = charIDToTypeID( "f2gl" );
desc15.putDouble( idftwogl, 0.500000 );
var idftwobl = charIDToTypeID( "f2bl" );
desc15.putDouble( idftwobl, 0.500000 );
var idftwoal = charIDToTypeID( "f2al" );
desc15.putDouble( idftwoal, 0.500000 );
var idfddl = charIDToTypeID( "fddl" );
desc15.putInteger( idfddl, 0 );
var idfafm = charIDToTypeID( "fafm" );
desc15.putDouble( idfafm, 0.150000 );
var idbafh = charIDToTypeID( "bafh" );
desc15.putDouble( idbafh, 0.500000 );
var iddthc = charIDToTypeID( "dthc" );
desc15.putBoolean( iddthc, false );
var iddthzero = charIDToTypeID( "dth0" );
desc15.putBoolean( iddthzero, false );
var idsmth = charIDToTypeID( "smth" );
desc15.putInteger( idsmth, 0 );
var idfilg = charIDToTypeID( "filg" );
desc15.putDouble( idfilg, 2.200000 );
var idfieg = charIDToTypeID( "fieg" );
desc15.putBoolean( idfieg, false );
var idfilw = charIDToTypeID( "filw" );
desc15.putDouble( idfilw, 10.000000 );
var idover = charIDToTypeID( "over" );
desc15.putBoolean( idover, false );
var idfblr = charIDToTypeID( "fblr" );
desc15.putDouble( idfblr, 1.000000 );
var idnmcv = charIDToTypeID( "nmcv" );
desc15.putBoolean( idnmcv, false );
var idncnv = charIDToTypeID( "ncnv" );
desc15.putInteger( idncnv, 1009 );
var idnflt = charIDToTypeID( "nflt" );
desc15.putInteger( idnflt, 1040 );
var idnmal = charIDToTypeID( "nmal" );
desc15.putInteger( idnmal, 1033 );
var idnmbr = charIDToTypeID( "nmbr" );
desc15.putBoolean( idnmbr, false );
var idnmix = charIDToTypeID( "nmix" );
desc15.putBoolean( idnmix, false );
var idnmiy = charIDToTypeID( "nmiy" );
desc15.putBoolean( idnmiy, false );
var idnmiz = charIDToTypeID( "nmiz" );
desc15.putBoolean( idnmiz, false );
var idnmah = charIDToTypeID( "nmah" );
desc15.putBoolean( idnmah, true );
var idnswp = charIDToTypeID( "nswp" );
desc15.putBoolean( idnswp, false );
var idnmsc = charIDToTypeID( "nmsc" );
desc15.putDouble( idnmsc, 4.000000 );
var idnmnz = charIDToTypeID( "nmnz" );
desc15.putInteger( idnmnz, 0 );
var idusbi = charIDToTypeID( "usbi" );
desc15.putBoolean( idusbi, false );
var idlien = charIDToTypeID( "lien" );
desc15.putBoolean( idlien, false );
var idshdi = charIDToTypeID( "shdi" );
desc15.putBoolean( idshdi, false );
var idshfi = charIDToTypeID( "shfi" );
desc15.putBoolean( idshfi, false );
var idshmm = charIDToTypeID( "shmm" );
desc15.putBoolean( idshmm, true );
var idshan = charIDToTypeID( "shan" );
desc15.putBoolean( idshan, true );
var idclrc = charIDToTypeID( "clrc" );
desc15.putInteger( idclrc, 0 );
var idvdxone = charIDToTypeID( "vdx1" );
desc15.putBoolean( idvdxone, true );
var idvdxtwo = charIDToTypeID( "vdx2" );
desc15.putBoolean( idvdxtwo, true );
var idvdxthree = charIDToTypeID( "vdx3" );
desc15.putBoolean( idvdxthree, true );
var idvdxfive = charIDToTypeID( "vdx5" );
desc15.putBoolean( idvdxfive, true );
var idvfourfourfour = charIDToTypeID( "v444" );
desc15.putBoolean( idvfourfourfour, true );
var idvfivefivefive = charIDToTypeID( "v555" );
desc15.putBoolean( idvfivefivefive, true );
var idvfivesixfive = charIDToTypeID( "v565" );
desc15.putBoolean( idvfivesixfive, true );
var idveighteighteight = charIDToTypeID( "v888" );
desc15.putBoolean( idveighteighteight, true );
var idalph = charIDToTypeID( "alph" );
desc15.putBoolean( idalph, false );
var idusra = charIDToTypeID( "usra" );
desc15.putBoolean( idusra, false );
var idusfs = charIDToTypeID( "usfs" );
desc15.putInteger( idusfs, 0 );
var idprev = charIDToTypeID( "prev" );
desc15.putBoolean( idprev, false );
var idrdep = charIDToTypeID( "rdep" );
desc15.putInteger( idrdep, 3000 );
var idlomm = charIDToTypeID( "lomm" );
desc15.putBoolean( idlomm, false );
var idsflp = charIDToTypeID( "sflp" );
desc15.putBoolean( idsflp, false );
var idlflp = charIDToTypeID( "lflp" );
desc15.putBoolean( idlflp, false );
var idscar = charIDToTypeID( "scar" );
desc15.putDouble( idscar, 1.000000 );
var idscag = charIDToTypeID( "scag" );
desc15.putDouble( idscag, 1.000000 );
var idscab = charIDToTypeID( "scab" );
desc15.putDouble( idscab, 1.000000 );
var idscaa = charIDToTypeID( "scaa" );
desc15.putDouble( idscaa, 1.000000 );
var idbiar = charIDToTypeID( "biar" );
desc15.putDouble( idbiar, 0.000000 );
var idbiag = charIDToTypeID( "biag" );
desc15.putDouble( idbiag, 0.000000 );
var idbiab = charIDToTypeID( "biab" );
desc15.putDouble( idbiab, 0.000000 );
var idbiaa = charIDToTypeID( "biaa" );
desc15.putDouble( idbiaa, 0.000000 );
var idsiar = charIDToTypeID( "siar" );
desc15.putDouble( idsiar, 1.000000 );
var idsiag = charIDToTypeID( "siag" );
desc15.putDouble( idsiag, 1.000000 );
var idsiab = charIDToTypeID( "siab" );
desc15.putDouble( idsiab, 1.000000 );
var idsiaa = charIDToTypeID( "siaa" );
desc15.putDouble( idsiaa, 1.000000 );
var idbiir = charIDToTypeID( "biir" );
desc15.putDouble( idbiir, 0.000000 );
var idbiig = charIDToTypeID( "biig" );
desc15.putDouble( idbiig, 0.000000 );
var idbiib = charIDToTypeID( "biib" );
desc15.putDouble( idbiib, 0.000000 );
var idbiia = charIDToTypeID( "biia" );
desc15.putDouble( idbiia, 0.000000 );
var idoutw = charIDToTypeID( "outw" );
desc15.putBoolean( idoutw, false );
var idclcL = charIDToTypeID( "clcL" );
desc15.putBoolean( idclcL, true );
var idNVIDIADthreeD_DDS = stringIDToTypeID( "NVIDIA D3D/DDS" );
desc14.putObject( idAs, idNVIDIADthreeD_DDS, desc15 );
var idIn = charIDToTypeID( "In " );
desc14.putPath( idIn, new File( in_path ) );
executeAction( idsave, desc14, DialogModes.NO );
}
// メモ===========================================================
function folderserch(in_folderPath,aTex,bTex){
}
function OpneFile(){
filename = "Macintosh HD:ps_text:headline.txt";
fileObj = new File(filename);
flag = fileObj.open("r");
if (flag == true)
{
alert("ファイルを開きました");
fileObj.close();
}else{
alert("ファイルが開けませんでした");
}
}
// チャンネルの移動===========================================================
function moveChannel(sDoc, tDoc, tChan)
{
app.activeDocument = sDoc
//ソースのドキュメントの複製
dupDoc = activeDocument.duplicate();
//log(dupDoc.name)
//統合
dupDoc.flatten();
//グレースケール
dupDoc.changeMode(ChangeMode.GRAYSCALE);
//コピー
dupDoc.selection.selectAll();
dupDoc.activeLayer.copy();
//閉じる
dupDoc.close(SaveOptions.DONOTSAVECHANGES);
//移動
//ターゲットをアクティブドキュメントに
app.activeDocument = tDoc
//チャンネルを指定
if(tChan == "r") app.activeDocument.activeChannels = [app.activeDocument.channels.getByName( localize('$$$/ColorModes/RGB/ChannelName/Red=Red'))]
else if(tChan == "g") app.activeDocument.activeChannels = [app.activeDocument.channels.getByName( localize('$$$/ColorModes/RGB/ChannelName/Green=Green'))]
else if(tChan == "b") app.activeDocument.activeChannels = [app.activeDocument.channels.getByName( localize('$$$/ColorModes/RGB/ChannelName/Blue=Blue'))]
else if(tChan == "a") { activeDocument.channels.add() }
//app.activeDocument.activeChannels = activeDocument.channels.length - 1
//ペースト
activeDocument.paste()
return true
}
// ターゲドキュメント作成===========================================================
function createTragetDoc(in_name)
{
preferences.rulerUnits = Units.PIXELS;
w = activeDocument.width.value;
h = activeDocument.height.value;
tagetDoc = documents.add(w,h,72,in_name);
return tagetDoc;
}
// ソースファイルの取得===========================================================
function getSorceDoc(in_name){
docs = documents;
for ( var i = 0; i < docs.length; i++){
var dName = docs[i].name
dName = dName.substring( 0, dName.lastIndexOf(".") );
if( dName == in_name){
return docs[i]
}
}
return false
}
// マージのメイン関数===========================================================
function merge(base,r,g,b,a,outname,fPath){
//最初にドキュメントを作成する
var newDocName = base + "_" + outname
var targetDoc = createTragetDoc(newDocName)
var sorceDoc = false
//r を移動
if ( r != ""){
sorceName = base + "_" + r;
sorceDoc = getSorceDoc(sorceName);
if ( sorceDoc ){
moveChannel(sorceDoc,targetDoc,"r")
}
}
//g を移動
if ( g != ""){
sorceName = base + "_" + g;
sorceDoc = getSorceDoc(sorceName);
if ( sorceDoc ){
moveChannel(sorceDoc,targetDoc,"g")
}
}
//b を移動
if ( b != ""){
sorceName = base + "_" + b;
sorceDoc = getSorceDoc(sorceName);
if ( sorceDoc ){
moveChannel(sorceDoc,targetDoc,"b")
}
}
//a を移動
if ( a != ""){
sorceName = base + "_" + a;
sorceDoc = getSorceDoc(sorceName);
if ( sorceDoc ){
moveChannel(sorceDoc,targetDoc,"a")
}
}
//savedds
savePath = fPath + "\\" + base + "_" + outname + ".dds";
//log(savePath)
if ( a == "" && b == ""){
saveDDS(savePath,DXT5_NM);
}
else if (a == "") {
saveDDS(savePath,DXT1_RGB);
}
else {
svaDDS(savePath,DXT5_RGBA);
}
//ddsを閉じる
if(closeNewDoc) activeDocument.close();
return true
}
// sorce2ddsSave dds保存===========================================================
function sorce2ddsSave(baseName, dds,in_prefix, fPath){
targetName = baseName + "_" + in_prefix;
sorceDoc = getSorceDoc(targetName);
if(sorceDoc == false) return;
//アクティブドキュメントの変更(おまじない)
app.activeDocument = sorceDoc;
//ddsのチェック
ddsType = 3
if(String(dds) == "DXT1_RGB") ddsType = DXT1_RGB;
if(String(dds) == "DXT1_RGBA_1Bit") ddsType = DXT1_RGBA_1Bit;
if(String(dds) == "DXT5_RGBA") ddsType = DXT5_RGBA;
if(String(dds) == "DXT5_NM") ddsType = DXT5_NM;
//log(ddsType)
//複製
dupDoc = activeDocument.duplicate()
//保存
savePath = fPath + "\\" + targetName + ".dds";
saveDDS(savePath,ddsType)
//ddsを閉じる
if(closeNewDoc) activeDocument.close();
return true
}
// メイン===========================================================
function main(){
if (app.documents.length ==0){
alert("Cancel No Docment")
return;
//ドキュメントが開かれていない場合処理なし
}
try { fPath = activeDocument.path }
catch ( e ) { alert("pleas saveDocments"); return }
dName = activeDocument.name
dName = dName.substring( 0, dName.lastIndexOf(".") );
dName = dName.substring( 0, dName.lastIndexOf("_") );
uDlg = new Window('dialog','サンプル',[200,100,580,380]);
uDlg.sText = uDlg.add("statictext",[10,10,275,10+45], "BaseName"); uDlg.eText = uDlg.add("edittext",[100,10,275,10+20], dName);
uDlg.cBox1 = uDlg.add("checkbox",[10,50,275,50+25], "Merge 1");
uDlg.r1 = uDlg.add("edittext",[020,80,020+30,080+20], ex1[1]);
uDlg.g1 = uDlg.add("edittext",[070,80,070+30,080+20], ex1[2]);
uDlg.b1 = uDlg.add("edittext",[120,80,120+30,080+20], ex1[3]);
uDlg.a1 = uDlg.add("edittext",[170,80,170+30,080+20], ex1[4]);
uDlg.out1 = uDlg.add("edittext",[220,80,220+60,080+20], ex1[0]);
uDlg.cBox2 = uDlg.add("checkbox",[10,120,275,120+25], "Merge 2");
uDlg.r2 = uDlg.add("edittext",[020,150,020+30,150+20], ex2[1]);
uDlg.g2 = uDlg.add("edittext",[070,150,070+30,150+20], ex2[2]);
uDlg.b2 = uDlg.add("edittext",[120,150,120+30,150+20], ex2[3]);
uDlg.a2 = uDlg.add("edittext",[170,150,170+30,150+20], ex2[4]);
uDlg.out2 = uDlg.add("edittext",[220,150,220+60,150+20],ex2[0]);
uDlg.cBox3 = uDlg.add("checkbox",[10,180,100,180+25], "ddsSave");
uDlg.deffuse = uDlg.add("edittext",[80,180,80+30,180+20], strDeffuse);
uDlg.dList3 = uDlg.add("dropdownlist",[130,180,130+200,180+25],["DXT1_RGB","DXT1_RGBA_1Bit","DXT5_RGBA","DXT5_NM"]);
uDlg.dList3.selection = 0;
uDlg.cBox4 = uDlg.add("checkbox",[10,210,100,210+25], "ddsSave");
uDlg.normal = uDlg.add("edittext",[80,210,80+30,210+20], strNormal);
uDlg.dList4 = uDlg.add("dropdownlist",[130,210,130+200,210+25],["DXT1_RGB","DXT1_RGBA_1Bit","DXT5_RGBA","DXT5_NM"]);
uDlg.dList4.selection = 3
uDlg.okBtn = uDlg.add("button",[220,240,320,240+25], "Create", { name:"ok"});
//ボタンを押されたときの設定
//view_1
uDlg.okBtn.onClick = function (){
if(uDlg.cBox1.value) merge(uDlg.eText.text,uDlg.r1.text, uDlg.g1.text, uDlg.b1.text, uDlg.a1.text, uDlg.out1.text,fPath);
if(uDlg.cBox2.value) merge(uDlg.eText.text,uDlg.r2.text, uDlg.g2.text, uDlg.b2.text, uDlg.a2.text, uDlg.out2.text,fPath);
if(uDlg.cBox3.value) sorce2ddsSave(uDlg.eText.text, uDlg.dList3.selection, uDlg.deffuse.text, fPath);
if(uDlg.cBox4.value) sorce2ddsSave(uDlg.eText.text, uDlg.dList4.selection, uDlg.normal.text, fPath);
refresh();
uDlg.close()
alert("Finish")
}
uDlg.show();
}
main()
これで、テクスチャの作業に集中出来ます。
といっても、PSD1枚からの必要テクスチャの書き出しが必要かもしれませんが(w
まとめ
で、完成したのが9/1でコンテスト提出日の早朝でした :pアフォすぎる w
まあ、とりあえずコンテストに応募しました :p
背景ですので、競合は少ないと思いますがw
一番開発に必要なのは
スケジューリングでしたとさw
追記
3D人さんから教わったんだけど。こんな便利なツールが・・・。
QSM
Quick Save Maps v0.6.4 日本語版 - 勝手に制作!Photoshopにて複数テクスチャを手軽に書き出せる拡張ツール
もうコレで良いよね orz
情報を制したものが強い :p ってことでした。 コード参考にしよう orz
ラベル:
EF-12,
Photoshop Script,
QSM
登録:
投稿 (Atom)