Showing posts with label softimage. Show all posts
Showing posts with label softimage. Show all posts

XSI PPG for Cpp

うーむ、イベントよくわかんのぅ

PPGEventContext使わない?
というわけで中途半端にうp


#define READONLY (siReadOnly | siPersistable)
#define ANIMATABLE (siAnimatable | siPersistable | siKeyable)

static Application app;
static Factory factory = app.GetFactory();

... 他省略 ...

XSIPLUGINCALLBACK CStatus hoge_Execute( CRef& in_ctxt )
{
 Context ctxt( in_ctxt );
 CValueArray args = ctxt.GetAttribute(L"Arguments");

 // 
 // TODO: Put your command implementation here.
 CustomProperty oPSet = factory.CreateObject(L"CustomProperty");
 oPSet.PutName(L"hoge");
 oSel = app.GetSelection().GetItem(0);
 app.LogMessage(oSel.GetAsText());

 Parameter oParam;
 Parameter txtParam;
 Parameter btnParam;
 oPSet.AddParameter(L"Instance", CValue::siString, READONLY, L"", L"", L"instance here.", txtParam);
 oPSet.AddParameter(L"Count", CValue::siInt2, ANIMATABLE, L"", L"", 0, oParam);
 oPSet.AddParameter(L"Position", CValue::siInt1, siPersistable, L"", L"", 0, btnParam);

 PPGLayout oLayout = oPSet.GetPPGLayout();

 oLayout.Clear();
 oLayout.AddGroup(L"Duplicate");
 oLayout.AddItem(L"Instance", L"Target");
 oLayout.AddItem(L"Count", 0);
 oLayout.EndGroup();

 CValueArray radio(6);
 radio[0] = L"Left"; radio[1] = 0;
 radio[2] = L"Center"; radio[3] = 1;
 radio[4] = L"Right"; radio[5] = 2;
 oLayout.AddGroup(L"Position");
 oLayout.AddEnumControl(L"Position", radio, L"Change", siControlRadio);
 oLayout.EndGroup();

 // Logic
 oLayout.PutLanguage(L"JScript");
 oLayout.PutLogic(L"LogMessage(\"test\");");

 CValueArray wParam(5);
 wParam[0] = oPSet;
 wParam[1] = L"Duplicate Item";
 wParam[2] = (LONG)siRecycle;
 wParam[3] = false;
 CValue retval;
 app.ExecuteCommand(L"InspectObj", wParam, retval);

 // 
 // Return a value by setting this attribute:
 ctxt.PutAttribute( L"ReturnValue", true );

 // Return CStatus::Fail if you want to raise a script error
 return CStatus::OK;
}

XSI JScript - Get FCurve

アニメートされたオブジェクトからFカーブを取得するだけのもの

オブジェクトが選択されてない場合、ピックさせるようにする処理を追加

var HogeFCurve = function() { this.init(); }

/////////////////////////////////////////////////////////
// initialize class
/////////////////////////////////////////////////////////
HogeFCurve.prototype.init = function() {
 this.oPSet = XSIFactory.CreateObject("CustomProperty");
 this.oPSet.Name = "Test FCurve Param";
 this.oSel = Application.Selection(0);
 this.oParam = this.oPSet.AddFCurveParameter("TestFCurve");
 this.oFc = this.oParam.Value;
 this.oKey = this.oFc.Keys;
 try {
  this._checkSelection();
  var fcx = this.oSel.posx.Source;
  var fcy = this.oSel.posy.Source;
  var fcz = this.oSel.posz.Source;
  
  var datax = this.GetFCurveFromSource(fcx);
  var datay = this.GetFCurveFromSource(fcy);
  var dataz = this.GetFCurveFromSource(fcz);
  
  this.oFc.SetKeys(datax);
  
  LogMessage("x = " + datax + ", y = " + datay + ", z = " + dataz);
  
  //this.printInfo(fcx);
  //this.printInfo(fcy);
  //this.printInfo(fcz);
 } catch(err) {
  LogMessage(err.message);
  return false;
 }
}

HogeFCurve.prototype._checkSelection = function() {
 if(ClassName(this.oSel) != "X3DObject") {
  var oPick = PickObject("Select Object");
  var oRet = oPick.Value("ButtonPressed");
  LogMessage("Result = " + oRet);
  if(oRet) this.oSel = oPick.Value("PickedElement");
 }
 if(!this.oSel.IsClassOf(siX3DObjectID)) throw "Select or Pick Object.";
}

/////////////////////////////////////////////////////////
// show PPG
/////////////////////////////////////////////////////////
HogeFCurve.prototype.show = function() {
 try {
  this._checkSelection();
  InspectObj(this.oPSet, null, "", siRecycle, false);
 } catch(err) {
  LogMessage(err.message);
 }
 return this;
}

/////////////////////////////////////////////////////////
// 
// @param in_fc Parameter - Source property of KinematicState
// @return Array - 
/////////////////////////////////////////////////////////
HogeFCurve.prototype.GetFCurveFromSource = function(in_fc) {
 if(ClassName(in_fc) != "FCurve") throw "You passed me an a(n) " + ClassName(in_fc) + "istead of an FCurve.";
 data = []
 fckeys = in_fc.Keys;
 for(var i = 0, j = 0, k = 1; i < fckeys.Count; ++i, j+=2, k+=2) {
  data[j] = fckeys(i).Time;
  data[k] = fckeys(i).Value;
 }
 return data;
}

HogeFCurve.prototype.printInfo = function(in_fc) {
 if(ClassName(in_fc) != "FCurve") throw "You passed me an a(n) " + ClassName(in_fc) + "istead of an FCurve.";
 LogMessage("FCurve for parameter:" + in_fc.Parent);
 LogMessage("Number of keys:" + in_fc.GetNumKeys());
 LogMessage("Is the FCurve begin editing? ..." + in_fc.IsEditing());
 
 data = []
 fckeys = in_fc.Keys;
 for(var i = 0; i < fckeys.Count; ++i) {
  data[i] = fckeys(i).Value;
  LogMessage("Key[" + i + "] set at frame " + fckeys(i).Time + " = " + fckeys(i).Value);
 }
 LogMessage("data = " + data)
}

/////////////////////////////////////////////////////////
// Get current frame of scene.
// @return Double - current frame number.
/////////////////////////////////////////////////////////
HogeFCurve.prototype.currentFrame = function() {
 var remote = Dictionary.GetObject("PlayControl");
 var cur = remote.Parameters("Current");
 return cur.Value;
}

HogeFCurve.prototype.play = function(in_start, in_loop) {
 var is_start = in_start || false;
 var is_loop = in_loop || false;
 if(is_start) PlayForwardsFromStart();
 else PlayForwards();
 if(is_loop) SetValue("PlayControl.Loop", true, null);
 else SetValue("PlayControl.Loop", false, null);
 return this;
}

new HogeFCurve().show().play();

Softimage 7 - ICE

追記:シーン開き直したらアニメーションが外れたw これはダメってか

回してみた

初期化のツリーはvimeo.comを参考にしました。














Softimage: Customize tool bar

update on 2010.3.10
ダイキンさんのところが参考になります。

カスタムツールバーを整理したい。

左図のようにラベル付きのセパレータをつけてみる。
※ラベルなしできるのかな?面倒くさいので試してませんw
スクリプトベースでやります。










  • 1. 新規ツールバー作成
    [View] -> [New Custom Tool Bar...]

  • 2. 登録する外部スクリプトを1.で作成したツールバーへドラッグドロップ。
    入力項目がいろいろでますが、とりあえずOKを押してツールバーへ登録します。
    [Ctrl + S]で名前を決めて保存します。

  • 3. xsitbファイルの確認
    下記ディレクトリ内に、保存されたファイルが格納されていると思います。
    C:\(User Name)\Softimage\(XSI_VERSION)\Application\toolbars


  • 4. xsitbファイルの編集
    2.で保存したファイル名をテキストエディタ等で開きます。
    中身はXML形式で記述されています。
    下記ノードを探します。

    <item type="script" name="****" cmdid="{****}"></item>
    そして、以下の一行を追加することでセパレータが表示されます。

    <item type="separator" mode="group_header" group_name=""></item>
    <item type="script" name="****" cmdid="{****}"></item>

ICE simulation is working blizzard not yet


         葉っぱが舞うようなICETreeてすつ。ぐわし

よくある葉っぱが舞い散るようなシーン作成をICEで表現しようとしたんですが、
シミュレーションも難しい分野ですね。
今日はここまで。

Softimage PPGテスト

mental rayかhardwareでレンダリングするかどうかのPPGテスツです。
実行結果はこんな感じ。
以下ソースコードをマルっとごりっと貼り付け
var renderArr = new Array(
 "Hardware Renderer", "Hardware Renderer",
 "mental ray",   "mental ray"
);

var typeArr = new Array(
 "Wireframe",   "wireframe",
 "Depth cue",   "depthcue",
 "Hidden-line removal", "hiddenline",
 "Constant",    "constant",
 "Sharded",    "shaded",
 "Texture",    "textured",
 "Textured Decal",  "texturedecal",
 "DirectX9",    "DirectX9",
 "OpenGL",    "OpenGL"
);

Main();

function Main() {
 var prop = XSIFactory.CreateObject("CustomProperty");
 prop.name = "Renderer Setting";
 prop.addParameter3("Scene", siString, renderArr[2]);
 prop.addParameter3("Type", siString, typeArr[16]);
 prop.addParameter3("fR", siFloat, 0, 0, 1, false);
 prop.addParameter3("fG", siFloat, 0, 0, 1, false);
 prop.addParameter3("fB", siFloat, 0, 0, 1, false);
 prop.addParameter3("fA", siFloat, 0, 0, 1, false);
 
 
 var layout = prop.PPGLayout;
 layout.addGroup("Scene Renderer");
 layout.addEnumControl("Scene", renderArr, "Scene Renderer", siControlCombo);
 layout.endGroup();
 layout.addGroup("Hardware Renderer");
 layout.addEnumControl("Type", typeArr, "Renderer Type", siControlCombo);
 layout.addColor("fR", "Baclground Color", false);
 layout.endGroup();
 
 layout.Logic = OnInit.toString()
  + Type_OnChanged.toString()
  + Scene_OnChanged.toString()
  + fR_OnChanged.toString()
  + fG_OnChanged.toString()
  + fB_OnChanged.toString()
 layout.Language = "JScript";
 
 InspectObj(prop, "", "", siLock, false);
}

function OnInit() {
 SetValue("Passes.RenderOptions.Renderer", "mental ray", null);
 SetValue("Passes.HardwareRenderer.RenderType", "OpenGL");
 SetValue("Passes.HardwareRenderer.BackgroundColorRed", 0.0, null);
 SetValue("Passes.HardwareRenderer.BackgroundColorGreen", 0.0, null);
 SetValue("Passes.HardwareRenderer.BackgroundColorRed", 0.0, null);
}

function Scene_OnChanged() {
 var scn_val = PPG.Scene.value;
 SetValue("Passes.RenderOptions.Renderer", scn_val, null);
 LogMessage("Scene Renderer = " + scn_val);
}

function Type_OnChanged() {
 var type_val = PPG.Type.value;
 // Setting Hardware Renderer Type.
 SetValue("Passes.HardwareRenderer.RenderType", type_val);
 LogMessage("Hardware Renderer = " + type_val);
}

function fR_OnChanged() {
 var r = PPG.fR.value;
 SetValue("Passes.HardwareRenderer.BackgroundColorRed", r, null);
}

function fG_OnChanged() {
 var g = PPG.fG.value;
 SetValue("Passes.HardwareRenderer.BackgroundColorGreen", g, null);
}

function fB_OnChanged() {
 var b = PPG.fB.value;
 SetValue("Passes.HardwareRenderer.BackgroundColorBlue", b, null);
}

顔とトルソ部分

FC2のID/PW忘れたのでここでw

未だにキャラクタ制作は不慣れなので、妥協点が見つからず
時間だけが過ぎてる現状を打破したいところ・・・。

送信者 キャラクタ - 途中

先日26日に行われたMotionGraphicsセミナーに恐れ多くも参加しました。
今回は2つのセッションでした。
 1:WOWのメイキング。
SIGGRAPH2009Asiaで出展したものですかね。マスク使ったモーションなど魅せ方がとてもうまいし参考になるところが多かったです。また、柴田氏による「The Light of Life」のMotionGraphicsも参考になりました。UVの関係で、会場を盛り上げるなどwさすが大御所といったところでしょうかw

2:キャビアからtamdemユニットのメイキング。
若者受けしそうなMotionGraphicsでした。若くないかもしれないけど、うちは好きなほうですw
3Dツールの経験が無いにも関わらず、2週間足らずで作り上げたというすごいレベルでしたw
裏話も泣ける話でしたよw

C4DとMoGraphにちょっと揺れたましたがね、XSIでがんばってみるよ!
ちなみに、70円引きになってもCGWはスルーしましたw金欠です><

またこうゆうセミナーがあれば参加したいですね。