2013年12月16日月曜日

WindowsAPI : デバイスコンテキストって?

なんか描画するヤツ。

APPがWindowsさんに渡すと、
Windowsさんがせっせと、仕事をしてくれる。
その仲介役 デバイスコンテキスト

//ウィンドウズハンドルから、デバイスコンテキストを作成
HDC dc = GetDC( hwnd );

//ペンを作成
HPEN pen = CreatePen( "わすれた", RGB(255,0,0) );

//ペンの持ち替え、戻り値は現在dcが持っている penらしい。
//そしてなぜか HGDIOBJ型
HGDIOBJ old_pen = SelectObject( dc, pen ) ;

//円を描く命令
BOOL res = Ellips( dc, 10, 50, 200, 150);

//ペンを戻す
SelectObject( dc, oldPen);

//ペンを解放
DeleteObject( pen );

//デバイスコンテキストを解放
ReleaceDC(hwnd, dc);


※中身は適当です


ReleaceDC or DeleteDC?

で、このデバイスコンテキスト
ReleaceDC, とDeleteDC,の時がある
この二つの違いについてわからなかったが
先生のためのExcel Tipsにその内容があった

つまり
GetDC, GetWindowDCのときは
ReleaceDC

CreateDCの時は
DeleteDCである

取得、削除の違いだね。中身がどう変わるかわからんが。


"フルスクラッチによるグラフィックスプログラミング入門"
を参考に読んでるんだけど、
扱っている開発環境が古くて、
そのままでは使えない

いや、内容的にはかなり良い本なのですが :p

必要な所だけ、取り込む形式で読んでいるけど、
クラスが前程だったり、アセンブラがあったりで、かなり難易度が高い

超初心者の本から、初心者、中級者向けのステップアップ本ってなかなか無いよね

まあ、まったりと進めるしかないなぁ

2013年12月10日火曜日

メイキング : 3D > 2D『カルマルカ*サークル』 背景作業工程 (開かずの間

『カルマルカ*サークル』 背景作業工程 (開かずの間
ニコニコ

おお、すばらしい動画。
MAXを下地に 2D背景の仕上げです

上を見上げる場合パースが変わるので、
それをアナログで補正してますね。
このあたり、3Dで行うには逆に大変だったりします。


しかし、レイアウトの変化の少ない場合の
3Dの背景でも嘘パースをがんがんつけます。

まるで舞台のセットみたいですねw


ですが2Dの味のある背景にはなかなか敵いません :p
やはり決め内、手作業での微妙な揺らぎですよね。あふん。


3Dをやりながら、2D背景を羨望の眼差しで見る訳ですよ。

リストもあるみたい。良いですね〜 メモ
http://www.nicovideo.jp/watch/sm22075526



■近況 予定していた背景のお仕事が入ってきました。

一月と短期ではありますが、その分集中です
一端エフェクトについてはお休みです。

いや、背景は表現に慣れてるのか。
楽だわー。楽しいわー。 いまの所は・・・

UnityはShaderを引き続き勉強中。
ポストエフェクトまで来た所です

あとはC#, BISHAMONかなぁ :p

2013年12月5日木曜日

2013年11月30日土曜日

Unity Editor : カスタムウィンドウをマウス位置に表示(PRO)

UnityEditor上で、
マウスの位置にパレットを表示したい

Unity PROなら以下の作業で可能でした


手順

1.C:\Program Files (x86)\Unity\Editor\Data\Mono\lib\mono\2.0
のなかにある"System.Windows.Forms.dll"ファイルを
Assets/Pluginsの中に放り込む

2.以下のコードでマウスの位置を取得する

int x = System.Windows.Forms.Cursor.Position.X;
int y = System.Windows.Forms.Cursor.Position.Y;


おそらく、WindowsAPIを利用してますので、
Windows限定でないかと思います。
Macの方はわかりません

これと、ショートカットを組み合わせると、
マウスの位置にwindowを出現する事が可能になります。

PRO限定ですが orz


サンプル


using UnityEngine;
using UnityEditor;
using System.Collections.Generic;
using System.Collections;


public class ttCustomTools : EditorWindow
{

 [MenuItem("TERA Tools/ ttCustomTools %t")]
    public static void Open()
    {
        ttCustomTools window = EditorWindow.GetWindow();
  
  //Windows System
  int x = System.Windows.Forms.Cursor.Position.X;
  int y = System.Windows.Forms.Cursor.Position.Y;
  window.position = new Rect( x - 100, y - 20, 250, 50);
   
        window.Show();
    }
 

 
    void OnGUI()
    {
   
  //ボタンと他のスクリプトの起動
  if( GUILayout.Button ("Create SimplePlane") )
  {
   Debug.Log("CreateSimplePlane");
   CreateSimplePlane sp = new CreateSimplePlane();
   sp.Create();
   Debug.Log("CreateSimplePlane  Finish");
  }
  
  if( GUILayout.Button("Create Particle") ){
   Debug.Log ("Create Particle system");
   CreateShurikenParticle sp = new CreateShurikenParticle();
   sp.Create();
  }
    }


参考

how to enable System.Windows.Forms for drag and drop functionality with outside applications


■余談
開発の話か、開発ツールの開発の話かわかりにくいw

開発しにくいですw

2013年11月25日月曜日

Panorama : Nex-c3 + Madoka + TomShot360

巷ではリコーの全周囲撮影がはやってますが、
それを横目で見ながら、独自路線を orz

なるべく低コストかつ、
軽量のHDRパノラマです

TomShot360がついたので試写してみました

構成

・NEX-C3(型落ちのピンクw)
Madoka
TomShot360
・三脚

・PTGUI(合成ソフト)


2ショット


2ショット


画像の補正はしてません、
うーん、2ショットはちょっと厳しいかな~


3ショット


3ショット


いけてますね。まったく問題ないようです。
PTGUIまかせで、画質の補正などもしてみました。

7度の角度がついてますので、
足元も撮影しないと全周囲は無理なのですが、
CGライティング用途では、
地面は個別で作るので、そのままで :p


しかし、軽い!
機動性はバッチリですね
解像度も横サイズは 5696ありますし、
必要十分かもしれません。


おまけ

おまけ


MADOKAで撮影したものを,LightRoomで加工してみました。


空だけならNEX+Madokaで十分よ :p



■余談
Photoshop + Lightroom CCが
月額1,000だったので入った :p

2013年11月21日木曜日

Mari Tips : UV ミラー 超限定的

チラシの裏程度のTip


MARIでのUVミラーの仕方(限定的

1.DCCツールで鏡面のUVを +1しておく

2.Mariで作業。右半分をメインとする。

3.Mariで書き出し。Patchの 最初だけつかう :p ウマー


以上です :p


1.DCCツールで鏡面のUVを +1しておく

DCCなんてカッコいいことをいってますが

Softimageさんです:p

こんな感じのオブジェクト


いつも愛想無しでスミマセン


UVはこんな感じで 左のUVを U +1をしてあります

手作業ではめんどくさいのでスクリプト化してあります。
1.-xのポリを削除
2.+xのポリを鏡面化
3.-xのUVのUを+1
という簡単スクリプトです
ウエイトなどには対応しておりません


#QuickLocalSymmetry
app = Application; log = app.LogMessage

def isPolyXCenterThanZERO(in_Polygon,inPntPositionArray):
 oPoints = in_Polygon.Points
 xMin = xMax = inPntPositionArray[0][oPoints[0].Index]
 
 for i in oPoints:
  if xMin < inPntPositionArray[0][i.Index]:
   xMin = inPntPositionArray[0][i.Index]
  if xMax > inPntPositionArray[0][i.Index]:
   xMax = inPntPositionArray[0][i.Index]
 if ( xMax - xMin ) / 2 + xMin <= 0:
  return True
 return False
 
def getRessPolyIDs(oObj,in_LessThan):

 oGeo =  oObj.ActivePrimitive.Geometry
 oPoints =oGeo.Points
 oPositionArray = oPoints.PositionArray
 oPolys = oGeo.Polygons
 oSub = oPolys.SubComponent
 ressPolyIDs = []
 if in_LessThan:
  for i,oPoly in enumerate(oPolys):
   if isPolyXCenterThanZERO(oPoly,oPositionArray):
    ressPolyIDs.append(i)
 else :
  for i,oPoly in enumerate(oPolys):
   if not isPolyXCenterThanZERO(oPoly,oPositionArray):
    ressPolyIDs.append(i)
   
 
 #-X側のみ選択
 
 return ressPolyIDs
 
def moveUV(oSub,uS,vS,uT,vT):
 oObj = oSub.Parent3DObject
 oGeo = oObj.ActivePrimitive.Geometry
 oPolys = oSub.ComponentCollection
 oSampleIDs = []
 for oPoly in oPolys:
  for sample in oPoly.Samples:
   oSampleIDs.append(sample.Index)
 
 oSampleClusters = oGeo.Clusters.Filter("sample")
 for oCls in oSampleClusters:
  for oProp in oCls.Properties:
   if oProp.Type == "uvspace":
    aUV = oProp.Elements.Array
    aUV = [list( aUV[0] ) ,list(aUV[1]), list(aUV[2])]
    for sID in oSampleIDs:
     aUV[0][sID] = aUV[0][sID] * uS + uT
     aUV[1][sID] = aUV[1][sID] * vS + vT
    #log(str(aUV))
    
    oProp.Elements.Array = aUV
   #log(oProp.Type)
  #log(oCls)

def main():
 #選択オブジェクト
 oSels = app.Selection
 for oObj in oSels:
  #log(oObj.Type)
  if oObj.Type == "polymsh":
  
   #-X側のみ
   lessThan = True
   ressPolyIDs = getRessPolyIDs(oObj,lessThan)
   #log(len(ressPolyIDs))

   oGeo =  oObj.ActivePrimitive.Geometry
   oPolys = oGeo.Polygons
   oSub = oPolys.SubComponent
   if len(ressPolyIDs) > 0:
    
    oSub.ElementArray = ressPolyIDs
    #削除
    app.ApplyTopoOp("DeleteComponent", oSub, "siUnspecified", "siPersistentOperation", "")

   #シンメトリー
   #oPolys = oObj.ActivePrimitive.Geometry.Polygons
   op = app.ApplyTopoOp("SymmetrizePolygon", oObj, "siUnspecified", "siPersistentOperation", "")
   op(0).symmetryreference = 1
   op(0).weldtolerance = 0.001
       
     
   #-X側のUVを選択
   ressPolyIDs = getRessPolyIDs(oObj,lessThan)
   oGeo =  oObj.ActivePrimitive.Geometry
   oPolys = oGeo.Polygons
   oSub = oPolys.SubComponent
   oSub.ElementArray = ressPolyIDs
 
   #UVを移動
   uScale = 1
   vScale = 1
   uOffset = 1
   vOffset = 0
   
   moveUV(oSub,uScale,vScale, uOffset,vOffset)

main()


メニューにボタンを作って登録してます


2.Mariで作業。右半分をメインとする。

mariでの作業に入ります

右半分で作業して
左を捨てればいいだけです

MariのUV状態


このまま、作業できればすごいんですが、
経過状態を確認したいかと思います
そのときは Patchのコピーを使います




こんな感じで1001のUVを1002にコピーすれば左右対称になります :p


これもめんどくさいのでスクリプト化します
1.現在のチャンネル
2.すべてのレイヤー
Udim1001 > Udim1002 にコピペ

import mari
print("mirrorPaint")
ver = 0.01

baseUDIM = 0
targetUDIM = 1

def copyUdimToUdim(baseUDIM,targetUDIM,layer_list):

 copy = mari.actions.get('/Mari/Project/Project Explorer/Quick Copy')
 paste = mari.actions.get('/Mari/Project/Project Explorer/Quick Paste')


 for layer in layer_list:
  # un-select layers
  layer.makeCurrent()
  layer.setSelected(False)
  
  layer.makeCurrent()
  mari.geo.current().patch(baseUDIM).setSelected(True)
  copy.trigger()
  mari.geo.current().patch(baseUDIM).setSelected(False)
  mari.geo.current().patch(targetUDIM).setSelected(True)
  paste.trigger()
  mari.geo.current().patch(targetUDIM).setSelected(False)
  layer.setSelected(False)


def main():

    #startUp
 if mari.projects.current() is None:
  mari.utils.message("Please open a project before running.")
  return False
  
  geo = mari.geo.current()
  if geo is None:
   mari.utils.message("Please select an object to copy from.")
   return False
        
  chan = geo.currentChannel()
  if chan is None:
   mari.utils.message("Please select a channel to copy from.")
   return False
            
  if len(chan.layerList()) == 0:
   mari.utils.message("No layers to copy from!")
   return False


 layer_list = mari.geo.current().currentChannel().layerList()
 copyUdimToUdim(baseUDIM,targetUDIM,layer_list)
 
main()

ほとんど人が他人のコードです :p


メニュー登録などは組み入れてません :p


3.Mariで書き出し。Patchの 最初だけつかう :p ウマー

以上です :p


めんせき

このサイトで拾ったスクリプトなどで
起きたあらゆる事象の責をおいません。


メモ

Mariのコマンドの取得は
copy = mari.actions.get('/Mari/Project/Project Explorer/Quick Copy')

発動は
copy.trigger()

2013年11月19日火曜日

Mari Script : Selection Group

MariのSelectionGroup、
便利なんだけど、選択以外を、
ロック、アンロック、表示、非表示を
トグル出来ないかと調査・・・。

Selection Groupは取得出来ないらしい
(2013 / 11現在

Selection Groups - adding and removing objects.

orz

2013年11月15日金曜日

Tools : moma : Mari <> Modo or Maya


moma


なんてツールがあるらしい。

一瞬Foundryの新しいコネクト機能かと思った。

Mariなどの3DPaintToolの難点が、
最終レンダリングに持って行けない事。

これはいくらShaderをカスタマイズしても
最終結果とは異なる。


その垣根を一気に飛び越えた感じ Modoのレンダリング早い :p


まあ、プロダクションがModoや、
Mayaのそのままでレンダリングする事は無いだろうけど
とりあえず驚いた。


Modo も Mayaも持ってないけど、とりあえずベータ参加
Fondryが作るのも間もないかとは思うが・・・。


コードはほぼPython
解析すればSI用も作れない事は無い!?


ちなみにペイントツールと
レンダーがセットになってるのは
・CINEMA4D
・3DsMAX やね。

2013年11月5日火曜日

Blog : Unity : Oculus : プログラミング不要。Unityを使えば誰でも2時間で作れちゃう。OculusRiftでLiveを体感するLukalive!!

プログラミング不要。Unityを使えば誰でも2時間で作れちゃう。OculusRiftでLiveを体感するLukalive!!

だそうです。Oculus早く欲しいね :p


一方Unityでのエフェクト制作は難易度が高いっす。


■余談
まだまだ、製作中に不足物が出てくる状態。
Shurikenは使いづらいし、
EffectEditerとしては最低かも orz

いや、そもそもEffectEditerではないですよね orz



ばしばしアセットを購入して、
調べるのもありだけど、
現在のアセットWFXでも、
得る所が大きい

WFXの仕様を見てみると、
カスタムシェーダを使いUVScrollを実装していた。
このShaderが、ちょっと特殊でShurikenのパラメータを参照してる。

という事は、色の変異はShurikenで行う事が可能ということ。


ようはShurikenのUVScrollの拡張ですな。

とりあえず、改造程度でお茶を濁してるけど。
ちょっと、Shader周りも本気でとりかからないとヤバいかも


しかし、同じようにUVを移動する、
Texture Tile Anime のスクリプトサンプルは、
Shaderではなく、オブジェクトのUVを直接変更させる
スクリプトが多い。


いったいどっちなのだ( * _ *);;;

お絵描きツールの開発はいったん止めて、
コッチに全力でとりかかるるる orz

2013年10月31日木曜日

PaintApp : おきらく お絵描きツール開発 その1

手書きのアニメーションソフトが無い。
ということで、考えついたのが

・Photoshopで出来ないかと考える
・フリーのツールを探す
・Appを買う

でした。

が、時間と効率が必要なので
TVPaintの購入を選択した訳ですが、
もう一つの選択もあります


自分で開発する


非現実的ですが
画像フォーマットの知識、WindowsAPIなど、色々思う所あり、
作ってみる事にしました。



そのなかで今回調べているうちに見つけた本で

"お絵描きソフト作りで学ぶグラフィックスプログラミング入門"


という、なんとも魅力的な本が。

しかし、既に絶版で、古本を買おうにも
プレミア価格になってます。

ぐぞー。こういったのを電子書籍化してくれると嬉しいんだが。
というわけで、泣き泣き購入致しました。

また、こういった絶版、開発本の初心者泣かせな所が、
当時の開発環境がそろわないところです。

ひょっとして無駄になるかな。と思わなかった訳ではありませんが、
MAC上の、Windows8 vs2012Express,でも特に問題なく開発可能でした :p

というわけで、お昼休みを利用して、
ボッチ、ボッチ、開発してます。 orz


とりあえず描けるようになった


とりあえず描けた


余計な説明はいっさい省いてあるので、
なかなか良い本です

定価で買えてたら
もっと良かったんだがなーーー orz


とりあえず保存できた

ペンの太さ、色の変更、消しゴム、
Undo,Redo(1回だけ)という、ギリギリのところですが
とりあえずBMP保存出来るようになりました。


BMP保存


ほとんど入力だけで、内容を把握した訳ではないですが。


今後


目指すは1Bitのアニメーションツールなのですが

次はタブレットに対応させたいね(本の範囲外)

また、それが終わったらコッチも試してみようかと思います
>フルスクラッチによるグラフィックスプログラミング入門

はてさて、どうなることやら〜


まあ、最悪、appは開発出来なくても、
UVのマージに伴って、テクスチャをまとめられるようになったら幸せです :p


■教訓
気になった本があったら買っとけ
・・・いや、当時は気にならなかったし orz


■他
TVPaintの税金の請求がキタ 3000円也 orz

2013年10月30日水曜日

Unity : Shuriken エフェクト調査7 Shurikenあまり使えないね

うーん

結局Unity4.2(現在)の標準のみ、
スクリプトを使わないままでのShurikenは、
使い物にならない。というのが現在までの結論。

結局プログラマーさんにC#で
シェーダー、ツールを作成してもらう事に


C#の開発
自分では時間がかかりすぎるので、
プログラマーさんにお任せする事に

Shurikenの苦手部分

Shurikenでは、UVスクロール、
また、オリジナルのメッシュを取り入れた際の
Texture Sheet Animation(Splite Anime)の非対応など
UV関係の自由度に大きな制限がつきます


Shurikenで、出来る事、出来ない事を
ざっくりとまとめてみました。

本当にざっくりですので、当てにしないでください(w


もっと深く調べれば認識が変わるかもしれませんが、
現状の調査ではこんな感じ






考え違いをしてた :p

Unityはコーディングをしないとダメなツール
逆に、簡単なコーディングが出来れば、
ゲームっぽいものは簡単に


ゲムのルールを覚えるツール
コーディングを覚えるツールとして認識デス


prefabの扱いとか、Unity独特なものがありますが、
(あやまって、削除したり。入れ子にしてしまったり orz

なかなか散々な目にあってますが。

ちと、制作に専念してみます。

2013年10月29日火曜日

Mari : 環境構築、メニュー追加

経緯

起動時のスクリプト実行が上手くいかず、
Script製作まで行き着かなかった。

2年近く放置していたものの、最近、使用頻度があがり、
スクリプトを利用したくなった。


試行錯誤の結果
環境Pathを追加したらいけたのでメモ


フォルダの作成

ドキュメントの"Mari"下に
"Scripts"フォルダを作成する

[User]/Document/Mari/Scripts

※本来ならば、コレでパスを通す必要は無いのだけど。
上手くいかなかったのでさらに環境Pathを作成する


環境パスの設定

環境変数
MARI_SCRIPT_PATH

パス
[User]/Document/Mari/Scripts

環境パスを通しているので、
パスの先はスクリプトがあるフォルダなら
どこでもいいはずなんだけど、
とりあえず、上記のままにした。


起動時実行スクリプトを作成

上記フォルダに_init_.pyファイルを作成する

_init_.py

このスクリプトが起動時に読み込まれる
内部に、メニュー、他スクリプトなどの登録を行うとよい


_init_.pyの記載

同フォルダに addNewMenu.pyがある場合のコード

_init_.py
import addNewMenu


※.pyファイルを保存する際文字コードを"UTF-8"にしないと駄目だった。
このあたりよくわからない


メニュー登録


同フォルダに以下のPython Scriptを作成


addNewMenu.py
import mari
mari.menus.addAction(mari.actions.create('Test Action', 'mari.utils.message("Hello")'), 'MainWindow/Test Menu')


と、なります。再起動を行うと、無事メニュー登録が出来ました


また、メニューから他のスクリプトを呼び出したいときは
同フォルダに"newScript.py"を作成
addNewMenuの内容を以下に変更します

addNewMenu.py
import mari
mari.menus.addAction(mari.actions.create('Test Action', 'import newScript;reload(newScript)'), 'MainWindow/Test Menu')


もっとスマートなやり方があるかもしれませんがとりあえず動いたと言うことで :p


お世話になったサイト

mtazmi-Lab
正直このサイトが無いと、出来る気がしなかった orz


IndyZone mari マニュアル
Mariの半額キャンペーンで購入した代理店さん(珍しく日本代理店を利用)
サポートが早く、不具合対応をしていただいております。


Mari単体での価格、年間保守費はわりと、法外かと思うけど(adobeと同じぐらい) orz
元を取れるように働いてもらいます orz


おまけ、途中で見つけたサイトメモ
Mari Python Script
http://www.sfdm.scad.edu/faculty/mkesson/tech312/wip/best/nicole_keane/index.html

2013年10月25日金曜日

p-diary : 初心わするるべからず

もともとこのp-diary、
picture diaryの略だったりするわけで
いや、paint diaryだったかw?

実はお絵かき(落書き)日記だったりします
せめて、1日5分、もうちょっと練習しよ orz



・右足がおかしい
・左足首がおかしい
・骨盤の位置を見失った :p


多分立体を、立体と正しく描けてない。


2013年10月24日木曜日

TVPaint : TVPaint その2 CreationPack Custom Brush

CreationPackのカスタムブラシ一覧



大量のカスタムブラシ。
まあ、実際に使えるのは少ないだろうけど、
自分でカスタムブラシを作る際の参考


ざっくり落書き

ショートカットの書き出しとか、
操作系のおさらい

残念な画力なので、ソフトの習得よりも、
そっちが先じゃね?
・右目が小さい
・膝の角度がおかしい
・腰の接続があやしい
・あとたくさん orz


絵力をあげるには膨大な時間が必要で、
それを捻出できる時間が無い

重要なタスクではあるけれど、
より重要な案件が多いのよね orz


TVPaintショートカットが独特で、
通常のペイント系ではない。
もともとWindowsじゃなかったんだっけ?

+時間軸があるのでしょうがないんだけど。


実際のところ、今回のエフェクト関係は
輪投げ塗りつぶし機能と、
タイムラインだけの機能があれば良い。

製作するエフェクトはこんな感じ




とりあえずテスト用に作ってみたけど、
Unityに組み込んでみたら、思ったより良かったので。
うまく使えればと思う。

しかし、Unityチャンネル使いすぎだよ orz


背景だけでなく、
アニメーションを視野に入れると、
とたんに世界が広がる。
まあ、時間と言う次元が一つ増えるので当たり前か。

3Dなら、PCが補完してくれるんだが、
脳内補完の、2Dアニメーションの世界はすごすぎる。

あまりにも伊世界すぎて、
正直まね出来ません。

とりあえず本で知識を水増します


・作画汗まみれ
・ディズニー命を吹き込む魔法
・アニメーション知識の大百科
・メイキングオブターザン
・アニメーションのタイミングの技法

・アニメーションスタイル+
・MAYAリギング

・THE GAME EFFECT(同人誌)
・できる! エフェクト for Unity
・特殊効果アニメーションの世界 – エレメンタルマジック

半分ぐらいしか目を通せてないですが・・・。
当分赤字ですなぁ :p


2013年10月23日水曜日

Blog : 試行錯誤

試行錯誤


うおー、良サイトだ。絵心も数学(プログラム)も行けるというのは羨望であります。

2013年10月22日火曜日

TVPaint : TVPaint その1 購入 > インストール

結局 "TVPaint Standard" を購入しました。

Auraをインストールしたり(体験版)で起動
TVPaintの体験版を触ったのが敗因ですねw


Aura、パラレルドングルと 2ショット
もはや、ご先祖様と子孫って感じ


購入

Webサイトから直接購入
本家サイト

日本語が使えますのでさほど難しくはありません。
さすがフランスですねw

Fedexで、現在地も追跡出来ます。
日本の郵送会社もコレで追跡出来ました

追加の税金もかかりませんでした。
この辺りは良くわかりません

後日<2013 10 28>
税金がきました 3k円でございました orz


ライセンス管理

ドングル + UNLOCK CODE

いまさらドングル?
で、ちょっと凹みますが

ドングルでネットワークライセンスも構築可能なようです。
マニュアル > 英語
ストレートPCなどで制作も可能なようです。


Stバージョン、野外では出来るのかな?

これで、Androidなど、タブレット端末での
ライセンスの謎が解けました
ドングルどこに付けるんだろうって思ってました
(オープンベータ、要Proライセンス)


ちょっと構築が難しそうですが orz
まあ、今後必要となれば、チャレンジしてみます


UNLOCK CODE

インストール後にアンロックコードを
申請しなければならないのですが。

ツールから、WEBの登録ページには直接飛べないようです。
エラーが起こります。

出来ない場合はメールでねという表示がありますので、
メールにてアンロックコードの申請を行いました

とりあえず30日は使えますので、よしとします


マニュアル

日本語マニュアルはVer9 まであります
マニュアル > サイト
ただ、すべては訳されてないようです


Standard と PROの違い

割とStdの致命的な点

・32bit版(64bit上でも動く)
・レイヤーの合成方法が選べない


この2点でPRO版が欲しいよね orz


Creation Pack

ちょっと高いけど
クリエーションパックなるものも同時に購入

これもアンロックコードが必要みたい
フランス人、守り堅いな orz


後日

申請から一日でアンロックコードを送ってきました。
アンロックコードとともに、"最新版をDLしてね"案内

最新版をDL、上書きインストールした後に、
ぶじアクチ出来ましたとさ。



ShuttlePro2のジョグホイールにタイムラインを割り振りつつ使用中
やはりこのツール めっさいいわん。


A&Qにシェイプアニメは付けないのですが?
っていうQがあって、その解答が、
手書きに勝るものはありません(意訳)って書いてあってワロタ

おもしろツールです。

2013年10月21日月曜日

Unity : Shuriken : Asset : エフェクト調査6 WarFX編

第6回になりました
だらだら続いてますがそろそろけりをつけたい。


WarFXに必要な表現が入ってるので調査します


1.発砲
2.被弾
3.爆発

デス

色々パラメータはありますが、必要そうな所のみ抜粋します。
というわけで、小さく分解調査


MuzzleFlashes

銃口より表示されるガス、光です。

向き : z 方面
時間 : 1s loop
Emission Rate : 10
LifeTime : 0.05

ということは、10発 / 1s のループってことね

■素材
発砲光 (Glow + Light + 発砲光 + 発砲光 + 発砲光 + ガス) /* 親 (子 + 子 + ・・・) */

親1
a1. 基本的な銃口よりの発砲光
Mesh : Plane 1x1 にテクスチャを張ったもの
Shader : WFX/ Addutuve Alpha8
Texture : 256x256 png File rgba(モノクロに見える) なんで、全チャンネル使うかね(もったいない

子6
b1.Glow 銃口周辺部の明るさのフェイク

Mesh : Billboard
Shader : WFX/ Addutuve Alpha8
Texture : 256x256 png File rgba(モノクロに見える)


b2.Light C#でスクリプト制御
 0.05f 発光しろっていう制御 IEnmurator とかよくわからん前置が出てきた。
 参考 > リンク  正直Unity用語かもしらん、まったく自信が無い

b3.Plane a1の複製 角度対応のための複製 45度 づつ
b4.Plane a1の複製 角度対応のための複製
b5.Plane a1の複製 角度対応のための複製

b6.Sparks 銃口、砲身側面よりでる、ガス
Mesh : Plane 1x1 にテクスチャを張ったもの
Shader : WFX/ Addutuve Alpha8
Texture : 256x256 png File rgba(モノクロに見える)


まとめ
1.複数のパーティクルを使用。親子付けしてあるだけである
謎がひとつ解けた。
SubEmiterでどう処理をしているかと思ったが、使ってない
異なるパーティクルシステムの塊だった罠 orz
親が再生状態に入ると、子も、再生に入る


2.謎
 一つのMeshでやったらどうだろう。
 たとえばa1,b3,b4,b5,b6を一つのMeshで作る。
 問題点
 ・汎用性が乏しくなる
 ・ソートがおかしくなる
 などの弊害はありそうだ。

3.スクリプトの発光が肝


被弾 1

破片が飛び散る。跡は無し

■素材
要素は3つ、煙 ( 破片 + 煙 )


a1 Smoke1、着弾後に上がる煙


b1.Debris 飛び散る破片(今回はコンクリート)
LifeTime 0.5 - 2.0
Speed 2-6
Size 0.004 -0.11

Emission : 20
Shape : Cone
Color Over LifeTime : 最後は透明に
Size Over LifeTime : 中 > 大 > 小
Collision :
Texture Sheat Animation : X3, y3, WhileSeet, 0, 9, Random, 1
Rnderer : Billboard

 Shader : Particles / Alpha blended
Texture : 256x256 png File rgba(モノクロに見える)

b2.Smoke 、着弾後勢い良く上がる煙コンクリートの粉末


被弾 2 (弾痕)

被弾後に破壊された跡。時間制限で消える
要素は一つ増える 煙 ( 破片 + 煙 + 弾痕 )

(略 被弾1 に追加要素

Bullet Hole 弾痕の表示ポリ
Type : Mesh : Plane1x1
Mesh Renderer : CastShadow, ReceiveShadow・・・。
Shader : WFX / TransParentDiffuse
+Scriptで制御
//スクリプトの中身//
・UVを付ける 4分割でランダムで表示
・寿命を設定 10fとする
・フェードアウトのパーセンテージを設定 80%
・フェードアウト時間をすぎるとマテリアルのアルファ値を上げ、
 最終的には見えなくする

イテレーターとか使ってるんで注意な( :p


だんだん消えるMesh!!! これだ!!!


爆発

中規模の爆発 元は地雷を想定
火花:線(火花:粉 + 火花 : 粉大 + 火花 : マルチ + 爆発1 + 爆発2 + 火花 : 線3 + 煙)
多いな orz

SubEmitter使って無い

a1 : 火花(線) 重力ありの線上の火花
Renderer : Stretched Billboard
Shader : WFX/Additive Alpha8
Texture: 横長の棒 128x128 RGB (グレーとして使用)
Script : WFX_Auto Destruct Shuriken (スクリプト) 処理後削除する


b1 : 火花(粉) 火花の粉 セットで使用
Renderer : Billboard
Shader : WFX/Additive Alpha8
Texture: 粉5個 128x128 RGB (グレーとして使用)


b2 : 火花(粉大)重力あり 玉状
Renderer : Stretched Billboard
Shader : WFX/Additive Alpha8
Texture: 粉の玉 64x64 RGB (グレーとして使用)


b3 : 火花(マルチ) 火花の粉 セットで使用
Renderer : Stretched Billboard
Shader : WFX/Multiply Alpha8
Texture: 粉5個 128x128 RGB (グレーとして使用) b1 燃焼済み 灰として使用


b4 : 爆破1 大きな炎の塊
Renderer : Billboard
Shader : WFX/Additive Alpha8
Texture: 炎 256x256 RGB (グレーとして使用) 炎テクスチャ


b5 : 爆破2 大きな炎の塊2
Renderer : Billboard
Shader : WFX/Additive Alpha8
Texture: 炎 256x256 RGB (グレーとして使用) 炎テクスチャ 中心の位置が違う


b6 : 火花(粉) 火花の粉 線状 ちょっとぼかしてる
Renderer : Stretched Billboard
Shader : WFX/Additive Alpha8
Texture: 粉5個 128x128 RGB (グレーとして使用)



b7 : 煙 立ち上る直線状の煙
Renderer : Stretched Billboard
Shader : WFX/Additive(Soft) Alpha8
Texture: 256x256 RGB (グレーとして使用)
向きを下向きにし、サイズの拡大で煙を表現。


総括

・あまり、スプライトのアニメーションは使ってなかった。


Shurikenで出来ない事
・オリジナルメッシュでの、透明度、色等のシェーダーパラメータの変異

Shurikenでないと出来ない事
・時間を利用した、透明度、色等のシェーダーパラメータの変異

どちらにしても出来ない事(スクリプトで出来る)
・UVスクロール
・サイズの変更

など、わりとどっちをとってもイバラ。
で、結局スクリプトを使う事になる。 orz


以下わりと急務だと思われるタスク
・スクリプトの制御 ああん
・ツールの開発   ううん
・シェーダーの拡張 ああん

C#くわー orz

2013年10月18日金曜日

Unity : Shuriken : Asset : エフェクト調査5 Cartoon FX Editor ver1.6

いろいろ調査したものの、

スクリプトで動く系の
エフェクトは遅いとのことで、
Shurikenにもどってまいりました。


ということで、
Assetを購入し、調査を続けます
そろそろ製作に入りたい

Cartoon FX Easy Editor


公式でも推奨されてるそうです。

コレが内包された WarFXなるものを20ドルで購入

WarFXを購入すると
Cartoon FX Easy Editorがついてくるらしいです。
お買い得

機能


Shurikenの補助ツールですね

"Scale Size"
Speed, velocity, gravityなどを変更


"Set Duration"
持続時間の変更 %


"Loop/Unloop Effect"
ループのOnOff


"Set Start Color(s)"
スタート色の変更


"Tint Colors"
色相の変更


"Copy Modules"
パラメータのコピー
values/curves/gradients/etc.


"Include Children"
works for both Properties and Copy Modules sections!


うーん、思った以上に標準機能じゃないの!?ってところですね。
Shiriken調査してて、死にそうだったところです。

これ、ツールの書き方を学ぶしかないなぁ。
生産性低すぎる orz


p.s.
ライセンスの提供をうけたので、
UnityがPRO化した :p
借り物だけどな~

2013年10月17日木曜日

OctaneRender for Softimage

GPUレンダー OctaneRenderが SIについにキタ。
まだ、ベータ版ですが

ということで、即効ぽちりました。
すでにStandard(50ユーロのベータ版で買ってた)
は持っていましたので


SI用プラグインを追加し
+99ユーロです
本体より高かったよ orz



メモ

1.Qキーには未対応
2.RenderTreeは別ノード(組みなおしメドイ)
3.Volume系はまだない。
4.RenderMapは未対応

まあ、早いです。
強いビデオカードが欲しくなります

撮っておいたHDR写真と、
完成しなかったメルカバ戦車

サンプリングを1/100にして
お手軽レンダリング

マテリアルなど一切調整してません orz


・メルカバ
Mrk2を作りたかったのだけど、
Mrk3を見て作ってしまってた
途中でわけがわからなくなって断念w

Arma3でModりたかったんですが。


しかし、サンプルになるような、
ろくなモデルが無いな俺 orz

2013年10月11日金曜日

Unity : Shuriken : エフェクト調査4 手書き(Photoshop編)

はい、今回も題名詐欺です、
Unityは全く出てきません。

エフェクトをShurikenの
Texture Seet Animation
行いたいのだけど

手書きアニメーションを、簡単に作れる
ツールって無いんじゃね?

って話です、アニメ大国なのに :p

紙っすかね?


前回、 Unity : Shuriken : エフェクト調査3 手書き編
という事で、Photoshopにアニメーション機能が
あった事を思い出しました。

いや、本当に失念してて、スクリプトを作ってた orz


ということで、Photoshopの動画関係の
調査を始めたのですが。

結論から言えば、条件付きとはいえ
簡単にできました。


前程

Photoshop CS5 より上のバージョン


空のビデオシーケンスの作成の仕方

いわゆる、ビデオシーケンスレイヤーを作成すれば良いのです。

画面はCS6、英語化しております(日本語だと走らないスクリプト等あったため)

これで、空のビデオレイヤーが作られます。


決まったフレーム数を作りたい場合

最初から、決まったフレーム数を作りたい場合は、
連番の空のPSDを用意しておいて、
それをシーケンスとして読み込めばOKです。


プリセットを保存

どちらにしても、PSD形式で保存出来ますので、
PSDを名前をつけて保存し、
"512x512_24f.psd" とか

テンプレートにしておけばよいかと思います


使い方

フレームを移動しつつ、好き勝手描いてください、
動画を各画像に保存してしまえば、

連番画像の出来上がりです。

Animetion パレットの設定から、

・オニオンスキン
・ショートカットもONにすると、矢印キーでフレームの移動も可能です。


問題点

まあ、問題点が無いという訳でなく、取り回しが酷く煩雑です。

ビデオシーケンスレイヤー1枚として
利用しておけば悪くないでしょうが、

シェイプレイヤーなど、通常のレイヤーを利用すると、
フレーム表示の管理がとたんに煩雑になります

1フレーム 1フレームの表示に向いていない。
この辺りは使ってみればわかるかと思われます。

簡単な手書きに限定して使う分には問題ないかと思います。


まとめ

簡単にまとめると、Photoshopでの手書きアニメは十分可能。
だけど、ちょっと複雑な事をしようとするととても面倒。

補助ツールを開発すれば良いんですが、
それもめんどうです orz

というわけで、Photoshopを使っても行けますよ?
ってことでした。


Tipでも何でも無いです :p

2013年10月10日木曜日

Hard : Eee Slate B121 B121-1A013F

TERAはタブレット持ってません orz

ずっとタブレットを探してたのですが、
なんとなく、予算がまわせず

ワコム待ちではありました。

が、いざ出たもののちょっと高いし
もともと、寿命の短いタブレット
使い捨てとしては高いので回避でございます

結局 型落ちしたEss Slate B121を購入しました。
解像度が低いですが、4万弱です

基本的にそのままで使おうかと思います。
エフェクト、落書きがメインなので、

os7 32bit, i5, SSD64G, Mem4G
なら、このスペックで一杯いっぱいでしょう :p

まあ、どうしても遊びたくなったら、拡張するかもですが

ということで情報を集めてみます

ペン

1.ドライバーの更新
本家 > サイト

2.Windowsの設定(必要があれば)
Windows 7でペンタブレットを使ってお絵かきする時のレスポンスを改善する


どうやら、サイドスイッチがない orz
Wikiがあるや > Wiki
2サイドボタンも、海外にはあるらしい(要調査)


筆圧


256だが、改造出来るらしい
EP121のデジタイザ設定 > サイト
FAQ - タブレット関連 > Q&A

この二つを組み合わせると、設定ファイルを手動で調整行けるってことかな?
この辺りAsusの最新ドライバーで解決してる事もあり、調査が必要。


不具合対応


Asusは仕様と言い張ってるクロックの固定化ですが
んなわけねーだろ。症状が出たら要対応ですね
ThrottleStopを入れ"BD PROCHO" をOFFに

先人様
・ASUS製 Eee Slate B121 Home Premium Model 購入レポート その2


最適化



・RamphantomEX


RamDiskはいつでも使いたいです :p


参考サイト


ASUS eee slate B121 内蔵ディスクの容量アップ、高速化の実験とレビュー
ASUS製 Eee Slate B121 Home Premium Model 購入レポート その1


SDD相性


Memoright MS701 はよさげ。


神ツール


とよばれるツールがあるらしい > リンク


雑感


・速度的には必要十分。
・解像度も低いけど。こんなもんかな?
・標準ではサイドボタンが無く、右クリックが無い 死
・windows7のメリットはでかい。

値段4万 -2年間、使用予定 だと大いにアリかな。
ヨメが後ろで狙ってます。

次はSurfacePro、WacomTabの型落ちでしょうか :p

2013年10月3日木曜日

Unity Asset : Grungifier

Unity、エディットツールとしても、
とても面白い

前作でもコレを使ってれば楽をできたのかも

ライトマップ用の2ndUVを書き出し、
手作業でグランジェテクスチャを作成(汚し)

それをUnityで、ライトマップと合成し、
ライトマップ+汚しテクスチャを作成する

これ、外部出力すればUnityは立派なエディターだなこりゃ。
いや、目からうろこでメモ

Grungifier



しかしUnity, 綺麗にライトマップ用のUV展開するなー
UVの上下はなるべく守っているみたいだし、DCCツール以上だな orz


Objフォーマット、ちょっと調査

そういえば、Objフォーマットて、UVを複数持てた覚えが無い

ZBrushも、Obj形式で書き出せるが、
ポリペイント(頂点カラー)を
特殊な形で出力していた

ひょっとして、このツール > チータ 間も
拡張したObj形式で、書き出してるのかも

UnityにObjファイル書き出しツールを入れて、
検証してみたかったが

そもそもUnityでのLightMapの作り方を知らなかった
(つづくかも)

2013年10月2日水曜日

Unity : Shuriken : エフェクト調査3 手書き編

のっけから謝りますが Unityの話ではありません

今回どうしても手書きでエフェクトを作りたいので調査します

手書きの連番画像の作成に特化として思い浮かぶのが
アニメ製作ツールです、

レタスはあまり評判が高くありませんし、
あそこまでの、専用機能は必要ありません

TVPaintは機能は豊富ですが、
かなり高価になってしまいます

個人的にはTVPaintの前世であるAuraを持っているのですが
32bit環境、パラレルドングルのため、利用できません orz
(機能十分で早いんですがね~ orz)

あと、Pro版を買うとモバイル版も現在ベータでついてくるようです
アンドロイドで動くようです :p
ワコムのアンドロタブ で利用できれば神ツールじゃね?
(30万コース orz)


というわけで広大なネットの海に大航海です


参考サイト


ゲームエフェクトデザイナーのブログ
[エフェクト講座] 手描きアニメの炎
・Flashを利用
・Flashは所持してるもののWEB Premiam Projection Premiamと同居できるか


ねこまたや
PsAxe
・Photoshop plugin(無償)
・オニオンスキン効果を 現在のレイヤーの透明度で表現しているため、透明レイヤーで作業が出来ない
・アニメ製作に特化しているため、機能が多い


覚え書き
Photoshop CS3 Extendedでのアニメ作画
・ ・・・あまり無いのか orz



Photoshop Plugin : EffectMaker(超仮

といわけで、お手軽に出来るよう自分で製作することにしました。

必要な機能
・オニオンスキン
・レイヤーの移動
・レイヤーをタイリングして書き出し


まだ、製作中ですが最低限の動きは確認

EffctMaker

やはりレイヤー操作が重過ぎてつらい orz


※1.連番画像をタイル上に書き出すプラグインはPotoshopの標準についてた
※2.Photoshopのアニメ機能に今気づいた(調査中死ねる)


Photoshopのアニメ機能を調査し
速度が十分あるようでしたら
開発は凍結します

Photoshopのスクリプトで、
他のスクリプトファイルを読み込むことを覚えた(虚勢
Photoshopでオリジナルツールパレットを作成できる「Adobe Configurator」が便利!
・べんり

2013年9月30日月曜日

Unity : Shuriken : エフェクト調査2

さて、Shurikenです
あるぇ、と言った状態です。

スミマセン使いこなせてる訳ではございません。

以下のエフェクトを考えます。

水面に着弾したエフェクトで水柱をあげるです

要素
・水柱
・衝撃波
・水しぶき

最低でもこの三つです
衝撃波は二つ欲しいですね。

水しぶきですから、水面下に隠れるものは必要ありません。
ビルボードは、センターが真ん中限定ですので、
オリジナルのメッシュにしてみます。

>Texture Seat Animationが効かなくなります orz

さて、要素が複数ありますので、
主となるパーティクルを一つ追加し、
SubEffectで、上記の3つを追加して行こうかと思います。
発生時はほぼ同時ですので、誕生時で良いでしょう

>2つまでです orz

という事は

main 水柱
2nd 水しぶき
3rd 衝撃波
3rd 衝撃波

ですか!?
 入れ子いやん orz

わりと厳しいですね〜


やはり、スクリプト等で拡張するしかないようです
お手軽じゃないぜ  > Unity



探したしたサイト

Unityでゲーム作るよ 5
うにばな
[Unity]テクスチャのUV移動について
テクスチャの擬似スクロールと小技


お手軽ツール
Playmaker


参考サイト


とあるプログラマの備忘録
【Unity入門】FPSのゾンビゲー見たいなのを作ってみたい(願望) 第三回「銃弾が撃てるスクリプトが書きたい」
FPS 弾丸発射、着弾時にエフェクト


Unity : Toon Shader : Sugiyama Toon Shader

Unityを調べる毎日です :p

Shader調べていたらToonShaderがひっかかった

Sugiyama Toon Shader なんてあるみたい
40ドルなり


ビックリするほどではないですが、中身が見えたら4000円は安い?
というか、コードみえるじゃろか :p


自主学習の場合

自分で作るとして、Softimageでお勉強するとしたら、ここからかな?

Softimage UsersNotes
この辺りの記事かな

記事


法線反転 + ポストプロセス

さらに高度になると、ポストプロセスとハイブリッドになりますが。
SEGA の ラブ & ベリー があった覚えが

CEDECにPDFが > PDF
コレはラブ&ベリーの次みたいですね。法線反転は使ってないみたい。ポスプロのみか〜。

SCEJ「みんなのスッキリ」、セガ「リルぷりっ ゆびぷるひめチェン!」 プロデューサーと現場開発者の視点から語られる、新タイトルでのチャレンジ

同じくSEGAさんですが、ミクの技術部の方にも似たような話題があったかと思います

公式

「pjd技術部」タグ誕生! :第一回「アンチエイリアシング」
pjd技術部:第二回「カメラモーションブラー」
pjd技術部:第三回「初音ミク Project DIVA Arcadeとミクの日感謝祭とVirtua Fighter 5」
pjd技術部:第四回「ノンフォトリアリスティックレンダリング」

すみません、SEGAマニアなんでw

まあ、やりたい事は目白押しなのです orz


なんか、ラインをパターンマッチで出す方法もどこかで見た気がするけど、
思い出せません orz

これもSEGAだったと思うんだが・・・
リアルタイムじゃなかった、ヘキサゴンの高解像かの話かな?

まあ、そんな感じで記憶の掘り返し :p

ティータイムがなくなっちゃったからねー。


NormalMapを使って、ToonShadingって、
色の変わるエッジの精度が上がると思うんだけど、
テクスチャ2回も参照するから重い?


でも、Unity、モデリングから組み込みまで早いから、燃えるな :p 動かないけど。


追記
shaderXなるものが 1-2まで無料らしい・・・ > リンク

2013年9月27日金曜日

Unity : Effect : 調査01

Unitでエフェクトを始めるにあたって調査中

外部ツール

BISHAMON
インディーズ向けに安価ではあるが、
パフォーマンスも最適化難しいため断念。


Shuriken (標準)

標準のツールであるShurikenを利用して制作を行う。

実際は標準を標準で使うと、かなり制約が厳しく感じた。
オリジナルポリゴンで、マテリアルを付けると、
透明度等の移行が出来ない わりと致命的? orz
(parthicle shader)なら行けるらしい。調べる


拡張として、スクリプトで制御する必要があるらしい。
まあ、これも標準の内かな?
Shurikenでエフェクト色々(サンプル・素材あり)

エフェクト素材を1枚にまとめて使う方法 パフォーマンス向上
【Unity Tips】エフェクトのドローコール考察的な何か。
【Unity Tips】続!エフェクトのドローコール考察的な何か

・UVスクロール(未検証)
うーん、コレが無いと、わりと基本的な事も出来ないなぁ orz

まあ、日本のゲムがエフェクト盛りだくさんなせいもあるんだよねw

以前も紹介したけど
Unite Japan 2013 エフェクト編 その1

はてさて、Unityの無償版で出来る事なのだろうか(汗
機能比較

関連サイト


エフェクトの他、いろいろの情報がありまする
Unityのエフェクトサンプル

炎のチュートリアル。ログインが必要?
UNITY COOKIE

Unityで作ったサンプル動画。コレリアルタイムで作ったんだぜ、すげーだろっていうプロモ
Unity – The Butterfly Effect feature
爆発とか再現出来るんか?


Asset Editor


高機能なEditor
Xffect Editor Pro

コレもわりと良い Editorかも
FX Maker

Editor買ってたら 安くないぞ  > Unity

Asset

60個のエフェクト集 基本はあるようだけどオブジェクトが透明になるエフェクトは無い?
Shuriken Magic

数は少ない、プロシージャル系のエフェクトをどう再現してるのかが気になる。
FT Magic Effects Volume 02

標準の拡張?
CARTOON EX Easy Editorを


チュートリアル

2013年9月26日木曜日

Tutorial : Softimage : RIG

有償チュートリアルですが、コレは欲しい。

購入リスト入りですよ :p
ttp://cmivfx.com/store/567-Softimage+Python+Rigging+Warmup

2013年9月21日土曜日

memo : FlowMap などなど

良く聞くようになったVectorMap

・NormalMap
・Vector Displacement Map
・Flow Map

ベクトルのデータを、画像RGBデータとして
保持するのがVectorMapなんでしょうか?

ちょっと理解が怪しいのです;;;


Normal Map

法線のXYZの情報をRGBとして置き換えます。

ローカル,グローバルがあり、注意が必要です。

リアルタイムでよく使われるのですが、
ローカルのノーマルマップの
Yの方向はポリゴンの法線から導きだせますので
R,B,のみを使う事があります。
余ったGのチャンネルには好きな情報を入れます

多くがマテリアルのマスク情報ではないでしょうか?

また、UV情報と連携しますので、UVが必要となります


Vector Displacement Map

3Dの形状をテクスチャとして格納し、
それを3Dデータとして復元するものです

グレースケール画像を利用する、Displacementは
高さしか格納出来なかったのですが
3D化する事で、切り立った崖の
オーバーバンクを再現する事も出来ます。



モデルに適用、レンダリング時に適用と、
様々な用法は可能ですが

・テクスチャの解像度が伸びてしまう
・形状が把握しにくい

との問題がありますので、
ある程度はモデリング、スカルプトとして活用した方が
理にかなっていると思います。


Flow Map

Flow Mapこれはテクスチャに流れの情報を加えるものです。
NormalMapと同じような作りですが、
法線情報は必要ないため、rgを使います。

こういった表現が可能になります


元サイト
一番表現として大きいのが流れの制御ですね。
いままでは、UVスクロールとして扱っていたのですが、
それで、出来なかった表現が可能になります。
扱いもテクスチャ一枚で良いので簡単です

またコレを、組み合わせて利用した事例としてPortal2があります。
コレの記事がGDC2011でありました
GDC2011
ちと難しい orz


FlowMapを作れるソフト

さて、このFlowMap、どうやって描くんだよ?

とアーティストは悩めるんですが。
もちろん、根性で手でかいてもかまいません。

が、めんどくさいのでツールを利用しましょう

Flowmap Generator
3D人さんで紹介されてました
値段が安いですね :p

スタンドアロン25ドル
Unity 40ドル


Flow Map Painter
現在フリーなのかな?
エカキヤさんのHPでいろいろ使っておられます > リンク
エフェクトの制御に使えるみたい


Mari
かなり高価になりますが、Mariで直接ペイント可能です

What's new in MARI 1.6 from The Foundry on Vimeo.


Mariのチュートリアル


が、利用には、大きくShaderが絡んでくる
可能性があります。

Shaderもツールとして用意してくれれば良いのですががが
なかなか難しいかも orz

2013年9月20日金曜日

Memo : Softimage 日々の作業 :p

Softimage で作業をしててメモ


Softimage Plugin

 Normal Align 0.5
 を入れて使ってみる。UndoするとNullが残る。
 コマンドで、やってる系みたい。


Softimaeg <>3D - Coat

 先方データーのハイモデルをリトポ作業中。
 映像用なので重い重い。
AppLinks
 を取り入れてみた。 なんぞこりゃ。こんなに便利だったんか orz
 UVも3DCoatの方がリアルタイムで更新してくれるので、コッチで良いかも。


Softimage "N"キー とスナップ

 Nキーで新しいポリゴンを作成するとき、
 スナップをさせたとしても、
 3点目でプレーンが決定されるのは仕様?
 リトポの時、スナップでモデリングしたいのだけど、
 4点目でずれる。ガッデム :p
 こういった微妙な仕様わかんないんだよね。

 UKOKUさんに、"平面性の保持のオプションが入ってる"からじゃね?
 との返答。

 スナップのオプションばかり見てました orz
 確かにプリファレンスの ポリゴン の所にオプションがありました

 ありがとうございます


Softimage >Mari


 MariはUVのオーバーラップを認めてない。
 重ねているオブジェクトはペイント出来ないのだ。
 コレで困るのが、左右対称のキャラクター等
 とはいえ半分でペイントするにも忍びない。

 というわけで、
 ポリゴンをミラー複製のスクリプトに、ちょっと追加した。
 やってる事は
・ポリゴンの-Xを削除
・ポリゴンのローカルシンメトリー
・-X座標のポリゴンUVのUを +1

 これで、Mariでは違うパッチとして読み込まれる。

 作業中パッチのコピーで、シンメトリーは出来るし、
 最終の書き出しに不必要なテクスチャを捨てれば良い。


Substance Designer : C++ : Swizzle演算子

SubstanceのパラメータにSwizzle Float なんてデータがある。
Swizzleって、何よ?って思ってたので調査。

どうやら、ベクトルのxyzwの
計算式を扱いやすくするものみたい。
CGとかで見た事がある。

コレをC++での実装を試みたサイトを発見。

swizzle 対応ベクトル演算クラスについて

結局Substanceを使いこなすには数学の知識も必要ってことですね orz
しかしSubstance パラメーターにキーを打てれば、
アニメーションも可能だよな。

単体で出来るんだろうか :p

2013年9月17日火曜日

Memo : C++ : ゲーム開発者のための C++11/C++14



メモー

MEMO : IES,ImageMagick,衛星画像

とりあえずメモ

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

コレに懲りず、
いろいろやってみたいと思います。


2013年9月13日金曜日

SubstanceDesigner : 導入その一

あいかわらずチラシのウラです

どんなツール?
プロシージャルテクスチャツール
・ノードベース
・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の保守費が消えたという
言い訳を述べてみた

2013年9月6日金曜日

GameEngine : neoaxis

NeoAxisという、ゲムエンジンがあるようです。
とはいっても自分が気にしたのは
Align ツールの機能の一部。
スクリーンショットがあったので
ツール制作に流用出来ないかチェックします


・ランダム


・垂直方向へのそろえ


・StepMove(そろえもあり)



垂直方向にそろえるとか便利ですね〜
いつも手作業でやってますが、
こういった繰り返しの多いツールが
作業効率を上げるんですな。


GameEngineは進化が早く、
大規模背景等、作業量も多いので
こういった最適化は必須意ですね。

DCCツールもなるべく効率化出来るよう、
改造したいですね。:p

2013年9月2日月曜日

Photoshop Script : EF-12 DDS書き出しツール

最近のシェーダーは複数のテクスチャを利用し、
表現力をあげるのですが、
EF-12も例外ではありません

EF-12 スタンダーとマテリアルの設定
リンク先にあるように非常にたくさんの設定があります。

が、以下の作業がとても面倒でした。

異なるテクスチャ素材から、目的のフォーマットのDDSを制作する

スーパー超絶面倒。
なのでPhotoshopのスクリプトで自動化します

目的

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

2013年8月30日金曜日

MAC : NASのアクセスの速度を改善する

なんて事が出来るんですね
コレを知らずに数年生きてきましたよ

まさに人のふんどしですが


MacからNASとかWindowsの共有フォルダへのアクセスが妙に遅いのを解決する

Viを開かないで管理者権限のファイルに書き込む


1.ターミナルを立ち上げ

2.su(スーパーユーザー権限に)

3.echo 'net.inet.tcp.delayed_ack=0' | sudo tee -a /etc/sysctl.conf


でいけました :p

1>3でもいけるかもですが、
パスワードを受け付けてくれなくて
2.を入れてみました :p


やべ、超早い。いままでなんだったの orz

EF-12: テクスチャリピートが無い!? 2013 08 30 現在

どうにも上手くいかないので、boxで検証




うーん、対応してないのかも





結果、テクスチャのリピートが出来ないのはバグではなく
仕様でした ずんどこ :p

シェーダーでは表示出来るじゃないですか〜

パラメーターも、ミラーとか、
色々オプションありましたよよよ orz


中の人
1.テクスチャの一部分をリピートさせることはできない
2.UV1以上は使えない
→シンプルなテクスチャリピートのみ対応

だそうです。


シンプルなテクスチャリピートが
いまいちわかりませんでしたけど、
UVは0-1内におさめる事が必要なようです。


一応要望は出しておきましたヨ :p
将来、改善されると良いですね〜

2013年8月28日水曜日

Shader : Unity : Blog : うにばな (エフェクト用途のシェーダに関するアイデア 2)

うにばな (エフェクト用途のシェーダに関するアイデア 2)
メモ
ストライクウィッチーズの3DシューティングをUnityで作っておられる方。
本業の方らしく、内容も高度

プログラムからお絵描きから何でもござい〜
くあーカッケー :p

EF-12 背景を作るのこと その2 とりあえずCubeMap

最遠景であるCubeMapの制作をします

材料は
・全周囲の画像

制作ツールは
・Softimage
AMD CubeMapGen

デス


全周囲画像


全周囲の画像は撮りためてたHDRマップを使います。
ちなみにいままで仕事で一度も使えてません orz

仕様は 8BitRGB なので
Photoshopでトーンを調整しつつ

32bit > 8bitに落とし、
余分なものを削除します。

地面はSIで製作しますので、鏡面にし、リタッチしました。



おおう、我ながらすばらしい。


SoftimageでCubeMap用の背景の作成


キューブマップ用にモデリングします
とはいっても、地面と、天球です。
ちょいちょいと。
天球と地面の接触部、地平線をなじませるため透明度など入れてます
フェイクフェイク。

で、CubeMap用のカメラをスクリプトで作成します。


CubeMapMaker

#Python
#CubeMapMaker
#CubeMapのためのカメラ、Passを製作します
#
#10 16 2012
#

app = Application; log = app.LogMessage

Cameras = ["x","xi","z","zi","y","yi"]
D3D = True
CameraInterPos_D3D = [[1,0,0],[-1,0,0],[0,0,1],[0,0,-1],[0,1,0],[0,-1,0]]
CameraInterPos_OGL = [[1,0,0],[-1,0,0],[0,0,1],[0,0,-1],[0,-1,0],[0,1,0]]
ImageSize = 1024

def createPass(in_Cam):
 oCam = in_Cam
 
 oCurrentPass = app.ActiveProject.ActiveScene.ActivePass
 oPass = app.CreatePass("pass",oCam.Name + "_Pass")(0)
 app.SetValue(str(oPass) + ".Main.Format", "tga", "")
 oPass.Camera = oCam
 oPass.ImageFormatOverride = True
 oPass.ImageFormatPreset = 0
 oPass.ImageLockAspectRatio = False
 oPass.ImagePixelRatio   = 1
 oPass.ImageAspectRatio  = 1
 oPass.ImageWidth  = ImageSize
 oPass.ImageHeight = ImageSize
 return oPass
 
 
def setCamParam(in_Cam):
 oCam = in_Cam
 oCam.std   = 0
 oCam.aspect  = 1
 oCam.pixelratio = 1
 oCam.fov   = 90


def createCubeMapCamera():
 oRoot = app.ActiveSceneRoot
 oModel = oRoot.AddModel("","CubeCameras")
 oPos = XSIMath.CreateVector3()
 oCamColl = XSIFactory.CreateObject("XSI.Collection")
 
 for i,oCamName in enumerate(Cameras):
 
  oCam = oModel.AddCamera("Camera",oCamName)
  oInter = oCam.Interest
  oInter.Name = oCamName + "_Interest"
  if D3D == True:
   oPos.Set(
    CameraInterPos_D3D[i][0],
    CameraInterPos_D3D[i][1],
    CameraInterPos_D3D[i][2])
  else:
   oPos.Set(
    CameraInterPos_OGL[i][0],
    CameraInterPos_OGL[i][1],
    CameraInterPos_OGL[i][2])
   
  oTrans = oInter.Kinematics.Global.Transform
  oTrans.SetTranslation(oPos)
  oInter.Kinematics.Global.Transform = oTrans
  
  #yAxiz upVect
  if i == 4:
   oCam.Kinematics.Global.rotY = 0
  if i == 5:
   oCam.Kinematics.Global.rotY = 0
   
  setCamParam(oCam)
  oCamColl.Add(oCam)  
 return oCamColl


#PPG現在は作成していない
def addCustomProp():
 oRoot = app.ActiveSceneRoot
 for oProp in oRoot.Properties:
  if oProp.Name == "CubeMapPPG":
   return oProp
   
 oProp = oRoot.AddCustomProperty("CubeMapPPG")
 ol = oProp.PPGLayout
 oItem = ol.AddButton("CreateCubeMapCameras")
 oItem = ol.AddButton("RenderCubeMap")
 return oProp
 
 
def main():

 oCams = createCubeMapCamera()
 aPassColl = XSIFactory.CreateObject("XSI.Collection")
 
 for oCam in oCams:
  setCamParam(oCam)
  
 for oCam in oCams:
  oPass = createPass(oCam)
  aPassColl.Add(oPass)
 
# CFrame = app.GetValue("PlayControl.Current")
# for oPass in aPassColl:
#  app.RenderPasses(oPass, CFrame, CFrame, 1, "siRenderVerbosityDefault")
#  
 #app.DeleteObj(aPassColl)

 #oProp = addCustomProp()
 #app.InspectObj(oProp)

 
main()


PPGを作るつもりで、途中で投げてますね
まあ、必要十分ということでさらしておきます :p

6方向それぞれののパスが出来ますので
カレントフレームをAll Passで
レンダリングしていただければOKです


CubeMapGen




ATIのCubeMapGenでレンダリングした画像を読み込み、
dds形式で保存します

おおう、z ,ziが逆ですた :p
CubeMapGenは確認しながら設定できるので楽ですね(ごまかした

というわけで書き出したddsがこちらになります




EF-12に組み込む

ddsの名前をSkyFine.ddsにしたならば、上書きでOKです
stg\userstage\sky\SkyFine
こちらのフォルダのファイルに上書きしちゃいましょう



というわけでCubeMapの検証が取れました :p

おつかれさまでした :p


実は全周囲画像を用意するというのが、一番ハードルが高かったりします orz

2013年8月27日火曜日

2013年8月23日金曜日

Blog : 人型タイプのリグ紹介

人型タイプのリグ紹介

メモ

EF-12 背景を作るのこと その1  とりあえず出力まではいけた

CEDECはじまりましたね〜。
なかなか最先端の技術に触れる事は無いのですが、
とりあえず追っておかないと、
あっという間に振り切られてしまいそうです

実際仕事では、軽量を最優先とした
背景ばかりだったので
Normalを使った事が無い位です :p

制作コストも高いしね。


ですが、いずれは、必要になるので、
習作してみようと思います。

というわけで、EF-12というちょうど良い
格闘ゲムのエンジンがありますので、
コレ用の背景を作ってみようと思います。

シェーダーはかなりハイエンドで、
PS3位の描画力はありますです。

コンテストもあるようなので、
入賞できればウハウハですね


目的

・自分なりのフロー、効率化の確立
・dDoの利用
・Hi Poly > Low Polyへのベイク
・nDoでの、NormalMapの直接描画

 などが目的です


フローの予想

まず試作として舞台となる、床パネルを制作します。

・SIでハイポリ、ローポリを作成

・Ultimapperで、各種 素材テクスチャを作成

・dDoでテクスチャを作成

・dDo内で、nDo2を利用し、ノーマルの2Dによる追加

・書き出し,それぞれのテクスチャを作成 dds化

・Softimageでマテリアルの作成

・組み込みです。


それから

すみません、上手くまとめられれば良かったのですが、
dDoの利用等、上手くいかなかった所があるため、要件証ってことで
とりあえず、表示までたどり着きました



実は表示されるまでが、
一番大変な所なんですよね〜

いつもココで無限の苦しみを味わうのですが、
思った以上にさくっといけました
EF-12やるなw

一段階はとりあえずクリアという事で。

しかし、コンバート、コピーまでなど、めんどくさいですね〜。
このあたりbatを書いて自動化をし、制作に専念したいものです。


次はCubeMapを制作しようかと思います :p

2013年8月20日火曜日

book : Pro Git 日本語版電子書籍公開サイト

Pro Git 日本語版電子書籍公開サイト

メモ!!!

プログラムもしなければならないけど、技術の取得も大切。
というわけで、キャラクター強化にいそしみます :p

ただ、情報だけは収集して行かないとな〜

2013年8月10日土曜日

blog : Unity + Oculus + Macross

正直お前を待ってた
Unity + Oculus + Macross

紹介記事 海外というのがミソだけど


開発者さんのブログ


うーん。CityEngineのネタで調査をしてて見つけたけど
凄いっす


次の開発には oculus使いましょー
って働きかけてはいます :p


oculus早く製品版でないかな〜

Softimage 2014 sp2 インストールを失敗するのこと と 解決

ざっくり .NET Framework 4を
アンインストールしたらインストールできた。

どうもAutoCadなどでも同じ現象があるみたい
うーん、Linux版も出してるんだから、
依存スンナよと思うのだけど orz
インストーラーだけか?

で、.NET Framework 4

って何が使ってたんだよ?
と思いながら

dDoを・・・立ち上がらなかった。

お前かよ orz


というわけで

.NET Framework 4 アンインストール

si 2014 sp1 インストール

.NET Framework 4 インストール

で無事インストール、環境復帰できました。


二日もとられた・・・。がインストールできたのでよしとする
この環境はもうちょっと持ってもらわないと orz

2013年8月9日金曜日

2013年8月1日木曜日

dDo : Manual : New Tutorial

dDoメモ

オンラインマニュアル
マニュアル

NewTutorial


3dsMax + UDK + dDo + nDo



Export


・任意のチャンネルに書き出す事が出来る
 コレによってエンジン、シェーダー間の差異を小さくする事が可能かも

BASE AO AND CAVITY OPACITY
透明度の設定
D AO Deffuse ,Ambiet Occlusion
D CV Deffuse ,Cavity
S AO Specular ,Ambiet Occlusion
S CV Specular ,Cavity

EXPORT ALL/CHECKED
すべてのエキスポート、チェックしたもののエキスポート

EXPORT PATH
出力先 / Xボタンはデフォルトに設定(デフォルトとは、入力パス)

SUFFIX
最後に付け足す文字列

FORMAT
TGA,PNG,TIFF,BMP,JPG
DDSが無い所が痛い所

SIZE
出力サイズ 1/1 1/2 1/4等のサイズを指定可能

SHARPEN
シャープネスの設定


GRAYSCALE
出力をグレイスケールとして出力する

AZ X OF Z
他のテクスチャの任意のチャンネルに保存する事が出来る

SINGLE MAP EXPORT
そのテクスチャだけを出力

MAP TOGGLE
一括出力のON OFF

BUMP INTENSITY
バンプマップの強度


THE ENVIRONMENTAL TAB


CONTEXT MENUS
何も無い所を右クリ表示

SAVE AS ENVIRONMENTAL PRESET
すべてのプリセット保存

ADD DETAIL GROUP
プリセットの追加

SELECT MASTER MASK
マスク選択

TOGGLE MASTER MASK PREVIEW
マスク表示

COPY MASTER MASK EDITS TO ALL OTHER MAPS


ZIP ALL ENVIRONMENTAL GROUPS
 マージ

UNZIP ALL ENVIRONMENTAL GROUPS
 分割


GROUP CONTEXT MENU

 SAVE DETAIL GROUP AS PRESET
 グループ保存

 MOVE TO ACTIVE MATERIAL
 マテリアルグループに移動?

 ADD DETAIL...

 SELECT MASK
TOGGLE MASK PREVIEW
 COPY MASK EDITS TO ALL OTHER MAPS
 ZIP
 マージ、パフォーマスンスが良くなる

 DELETE
 削除

SAVE PROSET
 すべてのプリセットを保存する

LOAD PRESET
 現在のプロジェクトにプリセットをロードする

NEW GROUP
 新しいグループの作成

RENAMING
 名前変更


ENV. GROUP SETTINGS

 ENV. GROUP ADVANCED SETTINGS
  BLENDING MOCDES
  ブレンドの変更

MASKS
 左クリック マスク選択
 Shift +  プレビュー
 Ctrl + すべてのマップに対し

 VISIBILITY TOGGLE
 表示、非表示の切り替え

 DELETE
 削除

 DETAIL GROUP OPACITY SLIDERS
 透明度の変更
 D
 S
 G
 H

ENVIRONMENTAL DETAIL LAYER LIST
 ENV. DETAIL ADVANCED SETTINGS...
 詳細設定
 
 MASK
 マスク

 VISIBLITY
 表示

 DELETE
 削除

 THE SLIDERS
 不透明度の調整
 Shift + 相対移動
 Ctrl +  すべてのパラメータを一致しつつ

 THE SWATCHES
 スポイト

 REARRANGING
 D&Dで上下を変更できる


THE MATERIAL TAB



 COLOR MODE
 カラーモード

 MATERIAL GROUPS

MATERIAL CONTEXT MENUS
マテリアルを右クリックで表示

 SAVE MATERIAL GROUP AS PRESET
 マテリアルを保存

 ADD DETAIL...
 detail loaderの立ち上げ

 SELECT MASK
 マスク選択

 TOGGLE MASK PREVIEW
 マスクの表示の切り替え

 COPY MASK EDITS TO ALL OTHER MAPS
 他のマップに、適用

 ZIP
 マージ パフォーマンスの向上

SAVE PRESET
プリセットの保存

LOAD PRESET
プリセットのロード

COLOR MODE TOGGLE
カラーモードのトグル

MATERIAL GROUP SETTINGS

 RENAMING
 名前の変更

 VISIBILITY TOGGLE
 表示のON/OFF

 MASK
 左クリック マスクの選択
 Shift +
 Ctrl +

 QUICK-REFLECTANCE
 基本素材が有るみたい

 BASE REFLECTANCE SWATCHES
 各色のピッカー
 D Diffuse
 S Specular
 G Gloss

ADD MATERIAL DETAIL...
detail browser を開く

ZIP

MATERIAL DETAIL LAYER LIST
 なんか前と似たようなもの


めんどくさくなったので割愛 :p

2013年7月31日水曜日

雑記 : 納品が終わったのこと

とりあえずおわたー :p

なんとか、納品終了でございます。
今回はキャラクタまわり始めたので、
勝手が分からず、鬼大変ですた。

背景、キャラクター、モーション、
アイデア、デザイン出し、
イメージスケッチ(全然たいしたものじゃない)
など、盛りだくさんでした

いや、イメージスケッチなんて
1時間で描けるものを永遠と
3-4時間こねくり回したんですが

あふん。全く勉強もスキルも追いつきません
ウヒヒ

はてさて、次のプロジェクト自体は
決まっているようですが
本格的に参加の呼び声がかかるまでは、
自主学習ですな :p

2013年7月23日火曜日

Photoshop : Texture Tutorial : Projection texturing

以前も張った気がするんだけど、
TLに流れてきたのでもう一度

Projection texturing (part 1) from Slipgatecentral on Vimeo.




Projection texturing (part 2) from Slipgatecentral on Vimeo.




Photoshop使ってるんだよなぁ。
カメラ操作が苦手で使って無いのが本音 :p

でも、一番使用頻度が高いのもPhotoshopなんだよなぁ。
3DPaintに愛を注いでくれたら、CCはいるのに


Mariさんだと、小回りが効かない事が多いのよ orz

2013年7月20日土曜日

SoftimageSDK Tips : 緑のタイムライン

アニメーションを扱うのにジョグコンを買ってみました。

が、SIさんはマウスオペレーター用に
UIで特殊な割当をしてあり。

キーボードショートカットを送信する
ジョグコンとは、あまり相性が良くありません。

例えば、
タイムラインを中ドラッグすると、
アニメーションを更新せずに
フレームだけを変更できるんです。

これ、かなり便利でSIさんスバラシーと
思う機能なんですが、

いかんせんキーボードショートカットのない場合
ジョグコンでは使えません

また、キーボードショートカットにアタッチしようとしても
コマンドすらありません ; <

ログすら出ないのでスクリプトで
作れないかと思ってたのですが

天のお助けが・・・。

anamorphobiaさんが
作ってくれました

リンク > GitHub

2011位から挙動が怪しいそうですが、
同じパイソンなので、
必要な所を解析したいと思います

すげーーーありがたい :p
ありがとうございます!!!


ウマウマウマ

近況


現在、かつて無い修羅場を体験中!!!

スクリプトを駆使して、制作中!!!

2013年7月17日水曜日

Photoshop : Plugin開発環境の構築の仕方

Photoshopのスクリプトがどうしても遅いので、
C++の開発環境をまったりと探してたんだけど
網に引っかかったのでGet

Nanashi-soft

2013年6月28日金曜日

Blender : Modeling Tutorial

Blenderのチュートリアル集
クオリティ高い


BlenderGuru
BLENDER COOKIE


その中で建物関係を集めてみた

Create a High Rise Building









How to Create a City




Modeling a building in Blender




パネル

ちょっと違うけどパネル作成 :p

ttp://cgcookie.com/blender/2011/07/22/creating-a-sci-fi-panel-part-1/

2013年6月26日水曜日

GameDev : シェーダ体系の話

セガ の 大森 克彦さん の 
GCS2013 SIG-TA講演でのスライド

難しいー。
が、距離による質感の調整は、
非常に悩むところであります。

こんな高度なシェーダーは使ってない :p

かなり読み応えのある内容でした
1 / 3 位? 理解できたの
オススメ

2013年6月21日金曜日

雑記 : 平たく言えばエロ可愛い女の子を描きたい

とりあえず背景の仕事が終了
月に1点仕上げるハイペースでしたが
無事終了しました
ひゅーどんどん

当初、2点のはずだったのですが
ありがたい事に1点多くもらえました。
稼働したら報告できるかもです。


そして、そのまま次の仕事に。

今回は、キャラクターの
担当をさせてもらってます
(頼みこみました)

スケジュールがタイトですががが :p
ノリノリで作業中です・・・。

既にRIGは存在してますので、
モデリング > アニメーションのみですが

この次はRIGを含めて挑戦したいものです。

しかし、今更ながら絵力の
必要性を感じております。


平たく言えばエロ可愛い女の子を描きたいですネ! :p


いつも描いてて不細工&バランスが
取れなくて断念しちゃうんですが
もう一度挑戦してみようかと思いますヨ

2013年6月1日土曜日

PhotoshopScript : SwitchLayers v01 レイヤーの表示切り替え

相変わらず忙しいので、いつもながらチラ裏です スミマセン
いつかまともなサイトを作りたい物です・・・


今回もPhotoshopのスクリプトです


Photoshopで画像の差分制作を行います

エロではありません。
いや、むしろエロでつかったら俺にください!!!


・・・というわけで、差分のレイヤー表示を簡単に
するべく作ったスクリプトです


説明


命名法則により、表示、非表示を
一括で切り替えるスクリプトです

■Unhide
名前がマッチした場合、表示する

■Hide Group
名前がマッチした場合、非表示にする
※表示に入っている場合は無視されます

■その他
・その他のレイヤーの表示は変更しません
・レイヤーセットの名前が適合した場合、
 それ以下のレイヤーの表示は変更しません


SwitchLayers


//SwitchLayers
// 05 28 2013

//Global
var LEFT = 20
var TOP  = 20
var BUTTON_W = 100
var OFFSET_W = 125
var BUTTON_H = 25
var OFFSET_H = 40

//初期に設定されるグループネーム
var textChkGroupName = "p1,p2,p3,p4,p5,p6,p7,p8,p9";
var gUnHideObjectName = "homhom"
var gHideObjectNameGroup = ["hamham"]


//レイヤーに対するアクションA
function layerActionA( in_Layer ){
    //alert( "ActionA Match " + in_Layer.name )
    in_Layer.visible = true
    }


//レイヤーに対するアクションB
function layerActionB( in_Layer ){
    //alert( "ActionB GMatch " + in_Layer.name )    
    in_Layer.visible = false
    }


//名前検索(グループ)
function chkNameGroup( trget_Name )
{
    for ( var i = 0; i < gHideObjectNameGroup.length; i++)
    {
        if (trget_Name.match( gHideObjectNameGroup[i] ) ){
            return true
            }
        }
    return false
    }


//名前検索
function chkName( trget_Name ){
    //alert(gUnHideObjectName)
    if ( trget_Name.match( gUnHideObjectName ) ){
        return true
        }
    return false
    }


//再帰関数
function getAllLayer(parent){
    //alert(gUnHideObjectName)
 var ChildLayers= parent.layers;
 for (var i = 0; i < ChildLayers.length; i++){
  if (ChildLayers[i].typename == "LayerSet"){
   //レイヤーセットの場合の処理            
             //alert("LayerSet Name = " + ChildLayers[i].name)
             if( chkName( ChildLayers[i].name ) ){
                layerActionA( ChildLayers[i] )
                continue;
                }
                else{
                    //該当する名前がグループのみにあった場合
                    if ( chkNameGroup( ChildLayers[i].name) ){
                        layerActionB( ChildLayers[i] )
                        continue;
                        }
                    }
   //再帰処理
   getAllLayer(ChildLayers[i]);
  }else{
            //通常のレイヤーの場合の処理
           // alert("Layer    Name = " + ChildLayers[i].name)
            if( chkName( ChildLayers[i].name ) ){
                layerActionA( ChildLayers[i] )
                }else{
                    //該当する名前がグループのみにあった場合
                    if ( chkNameGroup( ChildLayers[i].name) ){
                        layerActionB( ChildLayers[i] )
                        }
                }
            }
 }
}


function switchLayers(uDlg){
    //alert("changeViewVis")
    
    //ダイアログからグローバル変数の設定
    gUnHideObjectName = uDlg.unhideName.text
    gHideObjectNameGroup =  uDlg.hideGroupName.text.split(",")
    
    //alert(gUnHideObjectName)
    //for ( var i = 0; i < gHideObjectNameGroup.length;i++)
    //    alert(gHideObjectNameGroup[i])
    
    
    //実作業
    var parent = activeDocument;//作業するドキュメントの参照
    getAllLayer(parent);
    
    
    refresh();
    }



function main(){
 
    app.bringToFront();
    //ドキュメントが開かれているかどうか判別
    if (app.documents.length ==0){
        alert("No Docment")
        return;
        //ドキュメントが開かれていない場合処理なし
    }
    var uDlg = new Window('dialog','switchLayers');
    uDlg.bounds = [200,300,580,420];   
    //uDlg.opacity = .9;

    
    uDlg.sText = uDlg.add("statictext",      [ 20, 10, 140, 10 + BUTTON_H], "UnHide (Unique)");
    uDlg.unhideName = uDlg.add("edittext",   [150, 10, 250, 10 + BUTTON_H], "p1");
    
    uDlg.sText = uDlg.add("statictext",      [ 20, 40, 140, 40 + BUTTON_H], "HideGroup(split(','))");
    uDlg.hideGroupName = uDlg.add("edittext",[150, 40, 360, 40 + BUTTON_H], textChkGroupName);
    
    uDlg.btnCancel = uDlg.add("button",      [150, 70, 250, 70 + BUTTON_H], "Close");
    uDlg.btn00 = uDlg.add("button",          [270, 70, 360, 70 + BUTTON_H], "Apply");

    uDlg.btnCancel.onClick = function () {
        //alert("キャンセルされました。");
        uDlg.close();
    }


    //ボタンを押されたときの設定
    uDlg.btn00.onClick = function ()
    {
        //switchLayers(uDlg);
        activeDocument.suspendHistory('switchLayers', 'switchLayers(uDlg)'); //margin(gap);
    }

    uDlg.show()
    
    //alert("finish")
    }

main()


展望


現在、表示レイヤーをtga保存する
ところまでいけました
次は一括出力です。
この手の作業はなるべく自動化しておきたい物ですヨ