2014年12月11日木曜日

memo : UE4 : UE4のShading Modelを拡張

隣の畑のメモ

UE4のShading Modelを拡張して独自のライティングや描画機能を追加する方法を公開するよ!

最近のTLではUE4の方が勢いがある感じがします。
自分としても、高速にC++を使って処理出来る UE4に興味アリなのですが
(C++の習得にも)

もうすこしUnityさんと仲良くしていこうと思います。

※Unityも中間言語から 高速な言語に変換可能になってくるようではありますが(眉唾)
なかなか面白いアプローチだと思います

近況

研究と趣味を兼ねたゲムは時間泥棒なので
活動方面を映画館に変更中。
インターステーラー、フューリーをみてきました。
どちらも良質 :p

満足度高いし、1000円ちょいだし(ナイター)、3時間ほどだし
安い、旨い、早いの三拍子でわりと良いかも

作業時間が確保出来てる気がします。
(FarCry4と、The Witcher3 はやりたいぞーーー)

仕事の方は、キャラモデリングに注力中。
年末年始の休みを利用して仕上げたい所

習得の方は、まだエフェクトの要望があるので
・UnityのShaderを進める

・エフェクトの為にHoudiniを習得
 sBlogより
 ・Houdini Learning(基本編1)
 ・Houdini Learning(基本編2)
 前回はHoudiniの習得が間に合わずほとんど使えなかったので
 もう少し実用化したい所です


最近感じた事

どの技術も、付け焼き刃ではどうにもならない〜〜〜 当然だ。

2014年12月3日水曜日

Application : Anime : CACANi

シンガポール製の2D、ベクター線のアニメツール CACANi

以前からチェックしてたのですが、
販売サイトがあるなんて初めて気がつきました。

サイト

現在セール中で30%Off わりと安価ですね。
うーん、欲しいかも

使う所無いですが :p


雑感

チュートリアルを見てみたのですが、
ベクター線をモーフするタイプですね。

長さ、制御点数は補完してるのですが、
ストローク順だったり制限があります
太さは変えられないのかな?


後ろになる部分をどうするのかと思ってましたが、

見えなくなる部分も描く必用があるようです。


線が出たり、無くなったりするタイプは難しそうですね
エフェクトとかは使いにくいかな〜


近況

とりあえず、エフェクトの仕事は一段落、
最終調整中

キャラクターのモデリングは継続。
ツールはSI,Photoshop,Mari
もうちょっとペースをあげたい

Unityの方は、ポストエフェクトのラインを調査中

昼休みはC/C++アルゴリズムの本を読んでます。
現在リスト。むちゃくちゃ基本なところではありますが、
少しでも理解を深めたいとあがいてます

Houdiniは、ちょっとお預け中 :p

2014年11月26日水曜日

メモ : ADX2 LE

エフェクト作ってて、〜感のあるエフェクト。
という注文があるのですが、
どうしてもそれっぽくならない。

そんなときは、SEと合ってないかも
というわけで、効果音をちょっと調査中。

仮だとしても、ちょっとした事なら自分で出来るようになっておきたい



2014年11月21日金曜日

Houdini : 稲妻 Lightning Bolts

Houdini 稲妻 Lightning Bolts.md—/Users/kawabata_imac/Dropbox/Blog/Houdini

Houdini : 稲妻 Lightning Bolts

稲妻を制作しようと思います。
電撃びりびりっすね。

サンプルを探してみたのですが、このサイトにありました。
Approaches to Lightning in Houdini

Tool

・Houdini 13

大まかな内容

・Nullを二つ用意 ・L-System の最初、最後の頂点の位置をNullに合わせる

vopsopノード


上流が、Nullの位置
下流が、LSystemのポイントの位置です

  • それぞれの距離を算出
  • スケール
  • それぞれのベクトルのノーマルを算出
  • Alignでそろえる

と言った所がポイントのようです

Python Script

スクリプト化してみました

#Create Lightning Bolts
#Ver0.1
#2014 11 20

import hou

#Global
gPosA = (3,0,0)
gPosB = (0,0,0)
isGrow = True
isRender = True
gCicle = 30

gLineWidth = 0.02


#L-SystemParam

gLSParamContext = "F+-"
gLSParamPremise = "A"
gLSParamRule = ['A=-F+A:0.45',"A=+F-A:0.45",'A=~(30)[--"!A]A:0.05','A=[++"!A]A:0.05']

def setVopSopParameters(n,null1,null2):
    g = n.node("global1")
    o = n.node("output1")

    #Add Nodes
    add1 = n.createNode("add")
    ali1 = n.createNode("align")
    div1 = n.createNode("divide")
    imp1 = n.createNode("importattrib")
    imp2 = n.createNode("importattrib")
    len1 = n.createNode("length")
    len2 = n.createNode("length")
    mul1 = n.createNode("multiply") 
    mul2 = n.createNode("multiply")
    nor1 = n.createNode("normalize")
    nor2 = n.createNode("normalize")
    pos1 = n.createNode("parameter","pos1")
    pos2 = n.createNode("parameter","pos2")
    ptnum = n.createNode("constant","ptnum")
    subc1 = n.createNode("subconst")
    sub1 = n.createNode("subtract")
    sub3 = n.createNode("subtract")
    sub4 = n.createNode("subtract")

    #Connect Nodes
    o.setInput(0,add1,0)
    add1.setInput(0,pos2,0)
    add1.setInput(1,mul1,0)
    mul1.setInput(0,mul2,0)
    mul1.setInput(1,ali1,0)
    mul2.setInput(0,sub3,0)
    mul2.setInput(1,div1,0)
    div1.setInput(0,len1,0)
    div1.setInput(1,len2,0)
    len1.setInput(0,sub4,0)
    len2.setInput(0,sub1,0)
    sub4.setInput(0,pos1,0)
    sub4.setInput(1,pos2,0)
    ali1.setInput(0,nor1,0)
    ali1.setInput(1,nor2,0)
    nor2.setInput(0,sub4,0)
    nor1.setInput(0,sub1,0)
    sub1.setInput(0,imp2,1)
    sub1.setInput(1,imp1,1)
    imp2.setInput(2,subc1,0)
    imp1.setInput(2,ptnum,0)
    subc1.setInput(0,g,11)
    sub3.setInput(0,g,0)
    sub3.setInput(1,imp1,1)

    #SetParameter
    ptnum.parm("consttype").set(1) #integer
    ptnum.parm("constname").set("ptnum")
    imp1.parm("attrib").set("P")
    imp2.parm("attrib").set("P")
    pos1.parm("parmname").set("Pos1")
    pos1.parm("parmlabel").set("Pos1")
    pos1.parm("parmtype").set(6) #Vector
    pos2.parm("parmname").set("Pos2")
    pos2.parm("parmlabel").set("Pos2")
    pos2.parm("parmtype").set(6) #Vector

    #setVopSopParam
    n.parm("Pos11").setExpression('origin("","' + null1.path() + '","TX")')
    n.parm("Pos12").setExpression('origin("","' + null1.path() + '","TY")')
    n.parm("Pos13").setExpression('origin("","' + null1.path() + '","TZ")')
    n.parm("Pos21").setExpression('origin("","' + null2.path() + '","TX")')
    n.parm("Pos22").setExpression('origin("","' + null2.path() + '","TY")')
    n.parm("Pos23").setExpression('origin("","' + null2.path() + '","TZ")')

    return True


def setLSystemParameters(lSys):
    lSys.parm("generations").set(30)

    lSys.parm("randseed").setExpression('int(($F - 1)/ ' + str(gCicle) + ")" )

    #int( ($F - 1)  / 5 )

    if(isGrow):
        lSys.parm("pointwidth").set(1)

    lSys.parm("stepinit").set(0.03)
    lSys.parm("stepscale").set(0.9)
    lSys.parm("angleinit").set(13)
    lSys.parm("anglescale").set(0.9)

    lSys.parm("context").set(gLSParamContext)
    lSys.parm("premise").set(gLSParamPremise)
    lSys.parm("rule1").set(gLSParamRule[0])
    lSys.parm("rule2").set(gLSParamRule[1])
    lSys.parm("rule3").set(gLSParamRule[2])
    lSys.parm("rule4").set(gLSParamRule[3])

    return True;


def createBrastOp(n):
    folderName = "folder"
    gNode = n.createOutputNode("blast","grow")

    p = hou.FloatParmTemplate("grow_dist","Grow Dist",1)
    folder = hou.FolderParmTemplate("myfolder","myfolder")

    folder.addParmTemplate( p )

    group = gNode.parmTemplateGroup()   
    group.append(folder) 

    gNode.setParmTemplateGroup(group)

    #"@arc>`ch('./grow_dist')`"
    gNode.parm("group").set("@arc>`ch('./grow_dist')`")
    gNode.parm("grouptype").set(3)
    gNode.parm("grow_dist").setExpression( "($F -1) %" + str(gCicle) +" * " + str( 1.0 / (gCicle) ) + "+" + str( + 1.0 / (gCicle) ) )

    gNode.setDisplayFlag(True) 

    return True

def setRenderNode(vopsopNode):

    node = vopsopNode

    if(isGrow):
        node = node.outputs()[0]

    node = node.createOutputNode("ends")
    node = node.createOutputNode("attribcreate::2.0")
    node.parm("name1").set("width")
    node.parm("value1v1").set(gLineWidth)

    return True

def main():

    obj = hou.node("/obj")

    #nullを作成する
    null1 = obj.createNode("null","null_to")
    null2 = obj.createNode("null","null_from")

    null1.setPosition([1,2])
    null2.setPosition([3,2])

    null1.parmTuple("t").set(gPosA)
    null2.parmTuple("t").set(gPosB)

    #Lsystemを作成する
    geo = obj.createNode("geo","lightningBolts")
    geo.node("file1").destroy()
    lSys = geo.createNode("lsystem")
    setLSystemParameters(lSys)

    geo.setPosition([2,0])

    #Vop Sopを作成する
    vopsop = lSys.createOutputNode("vopsop")
    vopsop.setDisplayFlag(True) 
    setVopSopParameters(vopsop,null1,null2)

    vopsop.setPosition([0,-1])

    #GrowChack
    if(isGrow):
        createBrastOp(vopsop)

    #Render
    if(isRender):
        setRenderNode(vopsop)

    return True;


main()

感想

とりあえず作っただけで、制御らしいことは出来てないですね。
L-Systemも良くわかってないし

Houdini Procedural Animation Techniques という有償チュートリアルのは、
ポリメッシュに生成するので都合が良さそうです。

2014年11月12日水曜日

Unity Shader : ユニティちゃんのステージエフェクト

i-saintさんの Unityちゃんステージデータの処理解説

unity3d-jp/unitychan-crs

最近忙しくて解析もまだなんだけど、
激しくメモ


Shaderでのマスク処理、六角形の制作など、非常に興味ある記事
後で参考にするっす


Unityのシェーダーもコツコツやってるんですが、
やっと、ゆがみシェーダーが出来たと言った所。
しかし、歪ませたシェーダーの透明度が設定できずに困ってますん

2014年10月27日月曜日

Shader : volume light

リアルタイムの、ボリュームライトって良くわかんないんだよね

メモブログ : スポットライト(円錐)とレイの衝突判定について


近況
やっとShurikenのパラメータをScriptで入力出来るようになった。
  ParticleSystem system = go.GetComponent()
  SerializedObject so = new SerializedObject(system);
  SerializedProperty sp = so.FindProperty("lengthInSec");
  sp.floatValue = 5.0;
  so.ApplyModifiedProperties();
このPropertyを名前で指定しないと行けないのがキモ、
とりあえず、これで、パラメータの入力はいけそう

2014年10月22日水曜日

ヤコビアンIK

Mukai Laboratory
東海大の研修室らしい


何故興味があったかというと、ヤコビアンIKの記載があったため
逆運動学 (Legacy)

CEDECにて、モーションの剣の軌跡を変更する際に、
このIKを利用して、体制を制御してた。
全く理解は出来ないけど、とりあえずメモ :p


"プログラミングの為の線形代数"を読んでるのだけど。
さっぱりだ〜 :p
ちょっと飽きて来たので、クォータニオンも調べたんだけど、
これもさっぱり :p

実際の所、TAは構造を知らずとも、
その機能を使えれば良い*1 と思うんだけど、
構造を知らない物はあまり使いたくないよね・・・。


マトリックスと、クオータニオン、なかなか難物です


※1 エンジンの構造知らなくてもアクセル踏めば車走るじゃん、っていうアレ

2014年10月16日木曜日

Unity : Visual Studio

Visual Studio Tools for Unity ( UnityVS ) で Unity 開発/デバッグの生産性を上げよう

以前うちの環境で試したら上手く行かなかった
もう一回やってみるか?

Unity Effect : Shuriken : Scriptでパーティクルの速度を増加

UnityのShurikenを使ってて、思うんですが
個々のパーティクルの速度の変化が
出来ないという問題があります。

だんだん速度を早くしたかったんですよ。
※Limit Velocityは速度を遅くすることは出来ますが
速くは出来ません



やってみた結果
・プレイしてみないと結果が見えない
・Scriptでの評価は絶対遅い

など、使えないって感じです :p

開発側に要望出した方が確実ですね orz

using UnityEngine;
using System.Collections;

[RequireComponent(typeof(ParticleSystem))]
public class ShurikenAddVelocity : MonoBehaviour {

 public ParticleSystem ps;
 public ParticleSystem.Particle[] particles;
 private Vector3 v;
 
 // Use this for initialization
 void Start () {
  ps = gameObject.particleSystem;
  Debug.Log(ps.name);

  particles = new ParticleSystem.Particle[ps.maxParticles];

  if ( ps == null ){
   Debug.Log("not have Particle");
   return;
  }
  else{
   Debug.Log(ps.name);
  }
 }
 
 // Update is called once per frame
 void Update () {

  ps.GetParticles(particles);

  for( long i = 0; i < ps.particleCount; ++i)
  {
   v = particles[i].velocity;
   v = (float)1.05 * v;
   particles[i].velocity = v;
  }
  ps.SetParticles(particles,ps.particleCount);
 
 }
}


参考サイト

メッシュのUV調整も行なっている
Particle System - set emitter's mesh via script

もはや目的が違う
Graphs, visualizing data

2014年10月15日水曜日

memo : 鏡裕之のゲームシナリオバイブル

鏡裕之のゲームシナリオバイブル

最近TLで、エロゲーの話題が流れてますが、
その中でもシナリオに言及した物があったのでメモです

一時ハマってましたが、

プレイ時間やら、お金が無くなくて遠ざかった気がします


余裕ができたら復帰したい所ですねw :p

2014年10月9日木曜日

2014年10月8日水曜日

Substance Designer : FXMapで花

最近 Substance Designer を良く使ってます。
パーツを作るのに便利なんですね。

といっても、エフェクトの丸とか、
グラデとかそういった、単純なものですが。

ノイズが手ごろなのも便利です


で、プロシージャルの要となるFX-Mapノードなんですが、
イテレーターの使い方を覚えたので、
カスタムな使い方を模索中です


一応の成果

単体で弾幕エフェクトが作れそうです。


あれ?
エフェクトの発光素材を作ろうとしたんだけど、
変なところに着地した orz

2014年10月6日月曜日

Substance Designer : Unity : 炎

アニメーションが出来る事は知ってたけど、
いまいち使い方が分からなかったので習作

変数に$Timeをつかって、
炎を作ってみた



ノード群


Unityでも使えるように、
グレースケールで計算し、なるべく軽くした上で
最後に色をつけた。

しかし、Unityで軽いかというと、微妙かも。
ゆがみとか重かろうな ;o

やってる事は単純で、下から上に$Timeを使ってスライド
ゆがみのエフェクトは上から下にスライド
上下でグラデーションでマスク。
色付けといったもの。

火の粉は別に同じような処理をして、加えた。
このあたりはパーティクルでやった方がそれっぽいかも



Unityに取り込んでみた。

Unity上でパラメータでの制御が可能
シーンを見ながら調節が出来る

また、パラメータを動的に扱えれば、
少しずつ火の勢いを増すといった、
扱いが可能かと思われる

この辺りは検証していないが、
Substanceのデモで、やってたので問題ないかも

2014年9月28日日曜日

Houdini Indy


Houdini で初爆発
Houdiniのパラメータの調整は一切しておりません


かなり良い感触かも :p

Indyライセンス買っちゃった。

2014年9月24日水曜日

Memo : PopcornFx

Memo : PopcornFx
なんて リアルタイム FXミドルウェアがあるみたい
Bishamonの海外版かしら。
派手さはありそう。

Unity版があるが、まだ価格の提示は無し。

2014年9月18日木曜日

雑記 : シムソフト選び

Choose Sim.md—/Users/kawabata_imac/Dropbox/Blog

シムソフト選び

検証中・・・。 20140918

※検証時間と、あまりお金が用意出来ない
TERAの戯言です。読む価値はあまりない。

ポイント
リアルタイムの素材出し用
小規模で良い物の、速度が求められる

  • GPUシムが出来るか
  • マシンの占有はされるか?(ネットワークが可能か
  • エミッターの制御は出来るか?

MAYA

GPUシム NO
マシン占有 占有される
Emitter ICEで制御可能

基本Fulidでもある程度の事はいけそう
シム等でマシンを占有してしまう

Blender

GPUシム NO
マシン占有 サブマシンで解決(ライセンス不要
Emitter ▲ICEで制御可能

制御が問題。
Emitterを ICE > Binファイルで持ち込める物の、
サブフレームの制御が出来ない(現段階では)

Fume FX

以前よりあるプラグイン、
歴史と実績を兼ね備えた鉄板

MAYA Plugin

GPUシム NO
マシン占有 サブマシンにシムを投げる事が出来る
Emitter エクスプレッションで制御?

Emitter をSI ICEでの制御が出来れば良いのだけど
ICEからインポートしたPointCloudを認識出来てないっぽい
ちょっと惜しい

MAX Plugin

GPUシム NO
マシン占有 サブマシンにシムを投げる事が出来る
Emitter TP

元々MAXのプラグインだけはあって、
性能は良い。
シムの早さもCPUとしては早い感じ

TurbulenceFD

GPUでシムを行なうので超早い。
現在シングルGPUでしか対応してないが
マルチGPUのロードマップあり

※難点として、GPUのメモリが許す限りという条件が入る
メモリが足らなくなると、GPU > CPUに自動きりかえ

LightWave Plugin

GPUシム YES
マシン占有 △GPU演算が早いので問題無し、○アプリが別なのでサブマシン可能
Emitter LWの内部パーティクル

LWのパーティクルが限界値

C4D Plugin

GPUシム YES
マシン占有 △GPU演算が早いので問題無し、○アプリが別なのでサブマシン可能
Emitter Studioを購入していれば TP

C4Dのプラグイン。 能力はLWと同等だが、上位Verだと、
TPがEmitterとして使えるので MAXと同じような制御が可能。
しかしながら、C4D自体が高価 orz

Houdini

GPUシム NO
マシン占有 ○アプリが別なのでサブマシン可能
Emitter Houdiniのノード

Volumeのノーマルを出力出来る
自由度は高いが、習熟が難しいのが難点

まとまらない

まとまんないっす。

一番早いのがGPUでシム出来る
TurbulenceFDなんだけど
LWはコントロール
c4Dは価格とレンダリングがネック(上手い合成が見れなかった

Fumeは平均が高くで実績もあるんだが、
MAYA版がICEでの制御がムリっぽ、
MAX版が鉄板なんだろうが、
MAYA主体でいこうと思うと、MAXは難しい

費用対効果でBlenderもあがるが、
これも制御に難が。

最近様子を見始めたHoudiniが
Indy ライセンスを出したので大注目中
しかしながら、情報が少ない

実際はこの上にレンダラーがかかわってくるのだが
お金がないのであえて無視

どれにするにせよ、
シムに膨大な時間がかかるのが、
ネックすぎる。

マシンパワー(金がひつようですな orz

ゲムエフェクト

大きなサイズのテクスチャが必用かと思ったけど、
上下の移動があり、かつ高速移動なゲムの場合は、
ビルボードが非常に目立ちやすい。

小さなサイズで、数を多くコントロールした方が、
よいのでは無いかと思う

しかし、Unityでコレだって言うエフェクト見ないなぁ orz

2014年9月12日金曜日

memo : GGXとか マイクロファセットとか

さっぱりわからんちんなのですが、メモしておきます

GGXなPre-Filterなキューブマップを作りたいけどなんか新しいツールが出てる

GGXってなんぞ?って調べてみたのがここ
2013-05-11 マイクロファセットの分布関数 D(m) について


うーん、滑らかさによる、反射率の分布の計算法の気がスルんだが分からん。

3年後ぐらいには必用になる&コード記載のすばらしいサイトなので
調べた事だけ覚えておく。


Unity Shader
UnityのSurfaceShaderは、記載が簡単なようにしてあるが、 そのぶん、中で何をやってるかがさっぱり分からない。

ShaderCookBookをみて、調査してる物の
実際はUnityのHelp、サンプルチュートリアルが
一番良い気がして来たw

そこに気づいた :p
(あまり進んでない

2014年9月4日木曜日

memo : Unity Shader

良いブログがあったのでメモ

Unityシェーダ入門

Unity の Shader (ShaderLab) 知識ざっくりメモ


このあたりが手がかりになりそう
http://docs-jp.unity3d.com/Documentation/Components/SL-VertexFragmentShaderExamples.html


Unityで複数ライトによるライティングを行う方法
逆にライトを指定したいんだよね :p


こういう時は公式見れ
Forward Renderingパスの詳細 / Forward Rendering Path Details
複雑だった・・・ orz

2014年9月3日水曜日

memo : Unity Shader ステンシル

Unityでステンシルを用いたアウトライン表現

アウトラインの描画で考えるのが、
膨張させた、法線反転なんだけど、

外だけ描画する、ステンシルって言うのがあるみたい。
レイヤーみたいな感じだね。

メモしておこう


2014年8月21日木曜日

Maya 2015 : メンタレが見つからない問題

MAYA2015 メンタレが見つからないと言う問題が(汗





サービスパックの確認

SPをすべて当てているつもりだったが 2015 SP1 で止まっていた

AutoDesk Application Maneger を確認したところ
MAYA SP2 をなぜか飛ばしてた(SP 3はインストールされていた

ぜんぜんマネージしてない orz



MAYAのヘルプから、SP2を適用しようとするも、失敗 orz

サイトに行ってSP2 を DL、手動インストール


と、サイトに行って気づいたのだが、
メンタレ別ファイル扱い!?

SP2から、別ファイル扱いになっとる orz


とりあえず、SP2のUpdateをあて、
そのままSP3も当てなおす
MAYA2015SP3 のアップデートを確認


が、メンタルレイは反応せず


メンタレを別途インストール

SP3にも別ファイルのメンタレがあるので、それをDL Autodesk_Maya_2015_SP3_English_Japanese_SimplifiedChinese_Win.msp
インストール


MayaでPluginのメンタレを有効化する

どうやら、プラグイン扱いになっていて、そのままでは使えないらしい。



プラグインマネージャーで MayaToMrを発見
チェックを入れ、


確認

お疲れ様でした・・・

2014年8月20日水曜日

Photoshop CC 2014 : Extantion が利用できない問題<未解決>

うーん、Photoshopを2014にVerUPしてみたのですが、
エクステンションに問題があるようです。

Photoshop CC 2014 Plug-ins>Panels 表示されない

自分の環境としては
・Adobe Configurator 3 を利用してカスタムパネルを作成していたのですが
Photoshop CC 2014では、エクステンションがグレーアウトのままでした


原因は上記にある、
"FlashやFlexを利用しているプラグインが利用できなくなってしまってる"
に該当する物と思われます。


Adobe ConfiguratoreのVerが 3 だったので 4 に移行した物の、
CC2014対応の表記はなし、結果としてやはりダメでした


というわけで、
Photoshop CC 2014はインストールした物の 実作業は、無印CCで行きます


しかし、Adobeさんはカスタムフィルターである、
PixelBenderを廃止したり、
開発に一貫性が無いですね orz

HTML5の勢いに勝てず、Flashから、
撤退の方向で動いているのかもしれません


まあ、古さを捨てると言うのもいいですが、
そろそろスクリプトの難解さもどうにかしてくれればと思います



おまけ
CustomPanelでBrush登録



よく見たら、アクションにアイコンを付けてただけでした :p

2014年8月19日火曜日

宣伝 : UNDER NIGHT IN-BIRTH Exe:Late 

こちらも宣伝



UNDER NIGHT IN-BIRTH Exe:Late

PS3 用格ゲーです。
こちらの背景も数ステージ分、制作しております。


初のコンシューマー :p

2014年8月18日月曜日

宣伝 : インフィニットストラトス 3D対戦アクション

公式で発表されましたので、こちらでも宣伝 :p


公式サイト


YNPさんのところでお手伝いさせてもらってます

主にISのモデリングと、
エフェクトがその作業内容です。


個人的にハマってましたので、
機会に恵まれてよかったです :p


版元のライセンスを頂いてるので、
なかなか、刺激のある作業でした。


勉強になったのは、アニメのデータを提供していただいた事です :p
無念なのは、声優さんにセリフのオーダーしておけば良かった(チャンスはあったのに) orz


発売は冬らしいので、
しばしお待ちくださいませ :p

2014年8月6日水曜日

MAYAのFluidのCameraNormalをレンダリングしてみる(検証中)

煙のノーマルをレンダリングしたい

Unityに限った事ではないのだけど
ゲームの素材で使う場合

煙のエフェクトで

・ノーマルの情報
・頂点カラー

だけで制御出来れば、
汎用性が高くて良さそうだ。と狙ってるのだけど
煙の連番エフェクトのノーマルなんておいそれと用意出来ない。

とりあえずMAYAのFluidのノーマルが欲しかった

それこそ、アナログよろしくライトを3灯たいて、カメラ軸で当てるとか、
掲示板で書いてあったけど、めんどくさいので最終手段にしておきましょう(汗


参考動画

という訳でチュートリアルを見つけてやってみた
参考にしたチュートリアルはコレ

・・・解像度低くて見えにくいけど




検証

Fluidのカラーを
情報サンプル
CameraNormal の軸をそれぞれ RGBに突き刺す


結果をレンダリングしてみたのだが、
上手く行ってるようには見えないんだよね
煙のあからさまな凹凸は消えてるっぽいし、
-1〜0はクリッピングされてる。

はて、どうしますかね :p


雑記

流体についてはBlenderのSmokeを調査、
Blenderの物理レンダーのCyclesが晴れて対応。
超期待してたのだけど、
肝心のGPUレンダリングは出来なかった。 orz

MAYAの標準が思いのほか、高機能だったので、現在研究中。
その過程で、Blenderについてももうちょっとやり方があるんじゃないかと
思い始めた。

プラグインである、Fumeは欲しいのだが、
エフェクトを続ける訳ではないし、
回収出来そうにないので見送り

TVPaintがセールしてたので
Pro版に移行・・・か、金が orz

2014年7月17日木曜日

memo : スクールガールストライカーズの 内製クライアントエンジン

内製エンジンで作られたゲムの話

デュープリズムを作った人のようです
個人的にデュープリズムとプリンセスクラウンはバイブルです :p


スクールガールストライカーズの 内製クライアントエンジン
ちょっと凄すぎて理解出来ない

・yaml > XMLみたいなもの
・CPUのハード的構造、アセンブラは理解しておいたほうがいい

って感じました うーん。精進します orz

Camera : Luxi

iPhoneにつけれる 露出計
便利かもね〜

http://www.esdevices.com/collections/all/products/luxi

2014年7月15日火曜日

MAX Plugin : Light Painter 1.0


6.99ドル

すぐ回収出来そうなほど、安い :p
・・・メモ

2014年7月11日金曜日

memo : Tutorial : Modeling : チュートリアル集

CGトラッキングさんより、モデリングノです
アップ動画51本!総尺88時間!ゲーム向けCGモデリングチュートリアルが集まった動画チャンネル『LiveWorkshop』




おお、これはいいチュートリアル。
UVめんどくさそうですがw

どうしてもSoftimageの
ワークフローに目がいってしまうのは性か

Dota2のモデリング風景っぽいです。

モデリング + UV はSoftimage
ディティールの追加はZBrushです。
リトポを使わずに頂点をぽちぽちおいて行く方法ですね。
最小のポリで、最終データの形状を確認しながら作業出来ますので、
確実なモデリングが出来ます :p

ちょっと時間がかかりそうだけど
非常に丁寧な仕事です :p

Dota2 シェーダーも凄いんですよね。

しかし、ショートカットを左手に集めているのか、
キーボードの右とか使用してませんね。
どうなってるんだか。


■近況
最後の一体を提出、直しがなければコレで終わり。
もっともっとかまっていたかったんだけどねw
モデリング + リダクションは一段落。

次はエフェクトと、モデリング
そろそろSIは最終になるかもしれんなぁ。


■MAYA
マニュアル読むのが面倒になって来たというか、
頭から読んでも、未使用な用語がたくさん出て来て効率が悪い。

チュートリアルを進める事に。
これが2015を使いながら 2014のチュートリアルなので、
メニュー,ツール等が違っていて、
思うように行かなくてストレスががが。

2014年7月3日木曜日

Tutorial : ZBrush Create an Intricate Mayan Flower using ZBrush

レリーフのチュートリアル
Create an Intricate Mayan Flower using ZBrush

こういったものはZBrushのほうが良いのかなぁ。
ぜんぜん使ってないです :p

もう少しモデリング orz

2014年6月20日金曜日

Unity Memo : Unity講習会(初級)

Unity講習会(初級)
めもめもなー




■近況
モデル提出ーーー。
相変わらず大変だった。


次でモデリング(修正)は最後、
その後はまたエフェクトに


あ、エフェクト本購入しました。
amazonで売り切れたので地元を車でぐるぐるまわりましたよ・・・。
なんとか確保出来て良かったです :p


Mayaはぼちぼち説明書を読んでます、
まだ、コンポーネントの軸移動のとこら当たり。
こっちは、初めてツールを触る感じで、ショートカット等SI風にせず、
ゆっくりと覚えて行きます。

memo : LWトゥーンシェーダー

LWトゥーンシェーダーのTipsなんだけど、
使えないかと思ってメモ

リンク


ラインの出し方が面白い

2014年6月9日月曜日

Metasequia Script : UVStitch

メタセコイア 4.2がでましたね〜
FaceなどのSnapが今回の目玉でしょうか。

64bitOSで、32bit版のMetasequiaが動く

知りませんでした> アフォすぎる。
プラグインも32bit版のものも動くようです

ずっと基本機能で 64bit版使ってたよ orz


UV Stitich

UVPowerTools Plugin
残念ながら64bit化しておりません。

誰かが作ってくれるのを待ってる訳ですが
神は訪れず


スクリプトエディッタ上でのPythonの調査
Classの練習がてら、つらつらコードを書いてたのですが、
なんとなく、必要な情報がそろいましたので

選択UVを縫い合わせるスクリプトを作ってみました。

#UVStitch
#選択したUVを縫い合わせる

app = MQSystem; log = app.println
debug = False

def dlog( string ):
 if debug == True:
  log ( string )
  

class pairValue:
 def __init__(self,face,line):
  self.face = face
  self.line = line

   
class UVNode:
 def __init__(self,index,obj,objID,faceID,faceVertexID,vertexID,UVType,isSelected,UVCoord):
  self.index = index
  self.obj = obj
  self.objectID = objID
  self.faceID = faceID
  self.faceVertexID = faceVertexID
  self.vertexID = vertexID
  self.UVType = UVType
  self.isSelected = isSelected
  self.uvCoordinate = UVCoord
  
 def uvSelfTranslate(self):
  self.obj.face[ self.faceID ].setCoord( self.faceVertexID, self.uvCoordinate)
  
 def uvTranslate(self,uValue,vValue):
  uv = app.newCoordinate(uValue,vValue)
  self.obj.face[ self.faceID ].setCoord( self.faceVertexID, uv)
  

class objInfo:
 def __init__(self,obj,oi):
  doc = app.getDocument()
  materials = doc.material
  self.obj = obj
  self.vertCount = obj.numVertex
  self.faceCount = obj.numFace
  self.face2MatID = []
  self.UVNodeList = []
  self.nodeCount= 0
  
  self.vertex2Node = []
  for vi in range(self.vertCount):
   self.vertex2Node.append([])
   
  
  for fi in range( self.faceCount ):
   face = obj.face[fi]
   self.face2MatID.append(face.material)
   mat = materials[face.material]
   mapType = mat.mapType
   verteciesIDs = face.index
   
   for fvi in range(face.numVertex):
    sel = doc.isSelectUVVertex(oi, fi,fvi)
    index = self.nodeCount
    vertexID = verteciesIDs[fvi]
    self.vertex2Node[vertexID].append(index) # vertex2Node
    #log(str(fi))
    self.UVNodeList.append( UVNode( index, self.obj, oi, fi, fvi,vertexID, mapType, sel, face.getCoord(fvi) ) )
    self.nodeCount += 1
  
 def infoView(self):
  log("")
  log( "UVInfo" )
  log("objectName : "+ str( self.obj.name ))
  log("nodeCount  : " + str ( self.nodeCount) )
  
  log("vertex2Node")
  for i in range(len(self.vertex2Node)):
   log("vertexID : " + str( i ) + " : " +str(self.vertex2Node[i]) )
  
  for ni in range(self.nodeCount):
   node = self.UVNodeList[ni]
   log(
    "Node :" + str(node.index) +  ",   " +
    "oi,fi,fvi : " + str(node.objectID ) + "," +  str(node.faceID) + "," + str(node.faceVertexID) + ",  " +
    "vID : " + str(node.vertexID) + ",   " +
    "Sel : " + str(node.isSelected)
    )
  log("---UV info END ---")
    

#選択したUVを縫い合わせる
def uvStitch(in_ObjectInfo,in_oi):
 dlog("----- uvStich -----")

 info = in_ObjectInfo
 obj = in_ObjectInfo.obj
 oi = in_oi
 
 nodes = info.UVNodeList
 
 
 #ノードのチェックリストを作成
 isChkedNodeList = []
 for ni in range(info.nodeCount ):
  isChkedNodeList.append(False)
  
 #vertexIDのチェックリストを作成
 isChkedVertexIDs = []
 for vi in range( info.vertCount ):
  isChkedVertexIDs.append( False )
   
 #ノードごとにチェックする
 #選択していないものは動かないのでチェック済みに入れる
 for ni in range(info.nodeCount ):
  if nodes[ni].isSelected == 0:
   isChkedNodeList[ni] = True
 
 dlog(str(isChkedNodeList))
 
 #チェック済み評価
 for ni in range( info.nodeCount ):
 
  #チェックしてない
  if( isChkedNodeList[ ni ] == False):
   node = nodes[ ni ]
  
   moveNodeGroupIDs = []
   uMin = node.uvCoordinate.u
   uMax = node.uvCoordinate.u
   vMin = node.uvCoordinate.v
   vMax = node.uvCoordinate.v
   
   serchUnionUV = False
   
   moveVertexNodeCount = 0
  

   #共通する頂点を持ったノードを探す
   vertex2Nodes = info.vertex2Node[node.vertexID]
    
   #共通の頂点をもつノードを精査
   for subi in vertex2Nodes:
   
    # チェック済みであれば次へ
    if isChkedNodeList[subi] == True:
     continue;
     
    #mapTypeがUVでなければ次へ
    if node.UVType != 0:
     continue
    
    tNode = nodes[subi]
   
    #チェック済みに
    isChkedNodeList[subi] = True
    
    #移動用のアレイに入れる
    moveNodeGroupIDs.append(subi)
   
    #座標をbBoxチェックに
    if uMin > tNode.uvCoordinate.u:
     uMin = tNode.uvCoordinate.u
    if uMax < tNode.uvCoordinate.u:
     uMax = tNode.uvCoordinate.u
    if vMin > tNode.uvCoordinate.v:
     vMin = tNode.uvCoordinate.v
    if vMax < tNode.uvCoordinate.v:
     vMax = tNode.uvCoordinate.v
     
    moveVertexNodeCount += 1
    
    #頂点内はすべて終わった 
    serchUnionUV = True
   
   #移動数が2以上でなければ
   if moveVertexNodeCount < 2:
    continue
    
   #頂点内がすべて終わっていれば
   if serchUnionUV == True:
    dlog("serched")
   
    #BBOXの平均を出す
    uv = app.newCoordinate( uMin + ( uMax - uMin) *0.5 , vMin + ( vMax - vMin ) * 0.5 )
    
    #各NodeのUVを更新
    for nid in moveNodeGroupIDs:
     dlog(str(nodes[nid].uvCoordinate ))
     nodes[nid].uvCoordinate = uv
   
     dlog(str(nodes[nid].uvCoordinate ))
   
 #UVを実移動する
 
 for node in nodes:
  #dlog("UVTrans")
  node.uvSelfTranslate()


def main():
 log("")
 log( "----- ScriptStarts -----" )
 doc = app.getDocument()
 num = doc.numObject
 currentObjectID = doc.currentObjectIndex
 materials = doc.material
 
 for oi in range(num):
 
  #カレントオブジェクトかどうか(不格好だが、複数アイテムに対応しやすいため
  if oi != currentObjectID :
   continue

  obj = doc.object[oi]
  if obj is None: continue
  
  info = objInfo(obj,oi)
  
  #info.infoView()
  
  uvStitch(info,oi)
  
  
 log( "----- Finish -----" )
  
 
 
main()
スクリプトエディッタにコピペして実行してください
対応したUVが縫い合わされるはずです。


きゃー
Pythonで初クラス
とりあえず動くまではいけました。

いや、MAYAの習得の方が先ですよね、わかってます orz

2014年5月31日土曜日

UE4 : 木とか葉っぱのアニメーション

最近の草木てどうやって揺らしてるんだろうね?
頂点シェーダーでしょ?
じゃあ、揺らす情報はどうやってわたすの?
という答えがここに


Pivot Painter Tool

https://docs.unrealengine.com/latest/JPN/Engine/Rendering/Materials/Functions/Reference/PivotPainter/index.html

MAXのScriptも込みであるのね。
すごいなUE4,
また、SteamでCryEngine
月10ドル程度で提供とかとか

好みとしてはCryEngineなんだけど、
どっちかまよっちゃう :p


・・・現在、モデリングに忙しすぎて全くそれどころじゃないんだけどね orz


でも、いまのモデリング超楽しいわ〜 :p
モデリングツールが "SI" ってところが将来的に不安だけど


ヨメ候補
MAXマニュアルも読まずにモデリングして
苦労をしたので、
反省しMayaのマニュアル読み中。

ほとんど進んでないけど orz

Blog : Blender Addon : Blender Sushi :Sverchok tools

あり? BlenderってICEみたいなノードエディッタあったんだっけか?

とても良いサイト
http://blendersushi.blogspot.jp/


追記 20140531

このノードエディッタ、Sverchok tools っていうAddonのようです
どおりでBlendrがわでの説明を見た事無いはずだ

ぱっと見た機能では、シムのない、ICEっぽい感じ、
ちょっと、調査してみたいな

2014年5月14日水曜日

Softimage 2015 Windows仮想環境でのコンポーネント選択の不具合の回避

Softimage 2015 Parallels 仮想環境でのコンポーネント選択の不具合の回避.md—/Users/kawabata_imac/Dropbox/Blog

環境

  • MAC OSX 10.8.2 iMAC
  • Parallels Desktop 9
  • Windows 64bit 8.0
  • Softimage 2015

不具合

コンポーネントを選択すると、
全て選択される

致命的です

回避法

Softimage 2015 環境変数
C:\Program Files\Autodesk\Softimage 2015\Application\bin\setenv.bat

テキストファイル等で開き
環境変数に以下を追加

set XSI_DISABLE_NEW_PICK=1

保存してSoftimageを起動
ウマー

教えていただいた nabeさんに感謝