2019年12月21日土曜日

SecondLifeでBlender使ってなんかやる場合のお話 その2 初動編

第一回はここ

https://ueponya.blogspot.com/2019/12/secondlifeblender.html

本が二冊ある前提での話とします

本の内容的に

blenderを2バージョン使う必要があり
なのでzipでダウンロードしてくる必要がある


で2.79bはここ

特に問題なければ windows 64bit を選択
https://download.blender.org/release/Blender2.79/

2.81はここ

https://www.blender.org/download/

zipを解凍するのにアプリが必要な場合はこれ


でフォルダつきで解凍して
適当なところに配置する

デスクトップとかでいい



でとりあえずどっちかを起動する
設定は右クリック選択にしろ 一番不具合がない

それぞれのバージョンの設定は
本を参照でいい とりま日本語化する程度でOK


次にプラグイン(textools)のインストール
インストール自体は別にUV作業開始する前でもいい

正式版はこれ 今の所2.78までの対応
http://renderhjs.net/textools/blender/
有志による2.8対応版
https://github.com/SavMartin/TexTools-Blender/releases

インストールは 設定のプラグインから行う

解説はこのへんを参照のこと
基本的なやり方や文言はバージョンごとで変わらん


注意点としては

プラグインのパネルの場所が
2.79では左側
2.81では右側になるので

そこだけ注意

あとMagicUVというネ申プラグインもあるからそれも有効にしとけ

とりま初動はこの辺

以上

2019年12月13日金曜日

SecondLifeでblender使ってなんかやる場合の現状での一式セット

話はシンプル

まず3000円の本を二冊買うのだ
こういう本は新品買っとけてのが基本だけど

ディスクが付属してるとかそういうのないから
ガチでお金ないなら別に中古でもいいけどまぁそこはお好みで

推奨は新品 忘れないことだ


イルカ本 blender2.7だが内容はまとまっている


箱うし本 現状手に入る最新で一番簡単なblender2.8本


とりまこれ買っとけばあとは読んどけ でいいんだけど
それだとまぁあまりにも突き放しすぎてるので

blender2.79aのダウンロードはここから

https://download.blender.org/release/Blender2.79/

blender2.8はここ 2.81aとかになってるけど 気にするな

https://www.blender.org/download/

あと神ツールである textools

正式版はこれ 今の所2.78までの対応
http://renderhjs.net/textools/blender/
有志による2.8対応版
https://github.com/SavMartin/TexTools-Blender/releases


※ダウンロード時の注意点
BlenderはSteam版やインストール版はダメ
複数バージョン共存ならzip版

※操作はキーボードで覚えろ

でまぁ 読む前に
ここにポストイット入れとけという
SLでやるのに重要で具体的なページ番号



まずイルカ本

p008 基本操作の章
p028 第一章 ロボットのモデリング
p076 第二章 サブサーフとミラーでのイルカのモデリング
p169 第二章-3 ボーンとウェイト SLだと絶対にAvastar使うから参考程度に
p192 3-1 カーブを使ったモデリング 建築だとチェーンやワイヤー類とかで使う
p218 3-2 文字の立体形状を作る これ案外多用するんだよなと
p262   4-1 マテリアルの基本
p309 4-4 シーム切りとUV展開 これが出来ないと話にならん

とりまSL向けでの初動学習ならここまででいい
これ以外のレンダリングとかシェーダーの細かい設定の話は
正直2.8が出た現在ではあんまり意味のある情報でもないんだが

3Dモデリング全体としてはある程度有用なので目を通すだけでもやっとけ



次 箱うし本 SL用だと使うページは更に少ないが
とはいえ最新のかなり重要な情報がいくつも入ってる

p009 blenderのセットアップ
p024 アウトライナーの役割 ある程度複雑なもん作るときに必須になる
p030 1-1 移動/回転/拡大縮小
    ぶっちゃけこの3要素さえわかれば3dモデラーの9割は使えると思っていい
p40 ショートカット 暗記する必要はない 多用してりゃ体が覚える
p45 ショートカット 以下略
P60   1-3 ペアレント SLの場合リンクオブジェクトとしてアップロード出来る
p71   1-4 原点の設定 これも複合オブジェクト作る際に多用する
p83   1-5 ペアレントを用いた歩行アニメーション
   この辺は組立状態と解体状態の切り替えとかで便利
p116 三章 ボーンとウェイト 参考程度に 操作方法を覚えるのが目的
   繰り返すがSLの場合Avastar使う前提なので
   直接的な方法としてはあまり関係ないっちゃない
p156 3-2 IKのお話 知ってる前提で話がされることがよくある話
p198 4-1 パーティクル SLのパーティクルと直接の関係はないが一応
p223 クロス 置物系で使えると便利なシチュエーションが結構ある

p252 モデリング おまけ程度の内容ではあるが
    イルカ本と組み合わせると見えるものがあるだろう
p269 レンダリングエンジンの話
    これもSLとは直接的には関係ないが 知ってる前提で話が進む事が多いので
    一応目は通しておけ 具体的な操作は必要なときにまた本を見ればいい

本の中身に関してはとりまこのくらいかなぁ




正直なところSLでモデリングやるばあいのセオリーということでなら
サブディビジョンサーフェスは使うな
と言っちゃってもええんだけど

実際のところは使い方全く知らないとそれはそれで詰むから
結構難しいお話なんだよねぇと

あと動画での参考ということだと
通称 ワニ動画 というのが存在する
これだ
vrchatとSLはある程度共通点があって
UV展開してテクスチャを作れって部分 ここはもう基本だと思っとけばいい

でテクスチャのペイントやベイクをする方法というのは
まぁ色々とあるのだ とりま今回の記事では
UV展開は義務 と認識すればいい

大体このへんかねぇ

以上

2019年4月27日土曜日

LSLバックステージがネット上から消えたので 要約掲載 高速化編

のでまぁテクニックのところだけでも抜粋して
何回かに分けて乗っけとくこととする

でまぁ更に適当に抜粋に抜粋して要約する

3.1高速化手法

3.1.1定数演算は演算結果を書く

なんかLSLコンパイラで計算結果が変わらない定数演算も
そのままアセンブラコードにしちゃうらしいので
定数計算はコメントアウトして計算結果だけ代入しとけとのこと

ただこれも過剰にやると可読性が死ぬので
秒単位で演算時間が変わるような長大ループとか

ミリ秒単位で処理時間圧縮したい場合に有用

ワイの場合メモリに余裕あれば初期化処理してグローバル変数にぶっこむかな

変数間移動とハードコーディング数値の代入では前者が早い

3.1.2ループ中で計算結果の変わらない異処理はループの外に出す

for文とかで比較対象の固定数値をいちいちllList2とか使うと
なんかループの回数分list2が実行されちゃうらしく

先に変数に代入しとけということのようだ

これはllList2系命令の処理の食われ方からしても妥当やな


まぁこれもうちょい短縮方法ある

Listに対して固定でなんかするループ処理の場合
リスト長の変数自体をインクリメントなりデクリメントなりして
whileでぶん回すと結構な短縮になる

llist length = llGetListLength(Holge);

do{
    (何らかの処理)
    --length;
}while(hoge>-1);

これまぁリンクセットダンプとかでも使える


3.1.3 短い処理は インライン展開

なんでもかんでも関数定義して投げるなって話っぽい

概ね10演算子辺りがボーダーらしいので

複数箇所から呼び出すことがわかってる処理以外は
可能な限りユーザー関数使うなみたいな感じだな

これも秒オーダーで処理時間変わるループや
ミリ秒オーダーでイベント終わらせる必要がある場合以外は
割と無視していいが 最後の詰めに使えるな


3.1.4 インクリメント・デクリメント

i++;
より
++i;
の方がアセンブラコードになったときに2命令文圧縮できるとのこと
これは普段使いではくせにしちゃっていいと思う

で更に

ビット反転した後に符号反転すると+1したことになるとかで

a=-(~a); // ++a と等価

符号反転してからビット反転すると-1したことになるとかで

b=~(-b); // --b と等価


という記述方法が紹介されているけど
これも山ほど動かしたり
ミリ秒オーダーじゃないかぎりそこまでは不要かなぁ


3.1.5 ローカル変数は宣言時に初期化する

これはまぁちょっとわかりにくいな

ゼロやNULLで宣言しておく分には関係ない話
特定の数値代入して初期化する際に
宣言と代入と分けずに 宣言即代入したほうが早い

integer i;
i=5;

とするより

integer i =5;

こっちのほうが2命令文早いとのこと

これもミ(ry

3.1.6 同じ値を複数の変数に代入

同じ数値なら=でチェーン記述したほうがええということらしい

a = 0;
b = 0;

よりも

a = b = 0;

のほうが効率的とのこと

3.1.7 ローカル変数VSグローバル変数

ローカル変数の方が確保と開放の処理分ちょい重いとのこと

これは体感としてスタックヒープコリジョンの対策でちょい有効
ループカウンタの変数とか文字列入れる一時変数とか
その辺をグローバル定義するとメモリ圧縮になることもなる


3.1.8 リストへの値の追加

リストへ値を一つ追加する場合は []で囲わなくても
そのまま+=でいけるとのこと

これもリスト初期化処理とかで便利かなぁというところだけど
可読性とのトレードオフがあるから使い所は選ぶね

3.1.9 文字列定数、リスト定数のグローバル変数宣言

これもあれだな グローバル変数定義だと
ローカル変数定義時みたいに確保と削除が無い分

ポインタ参照的な挙動になって高速化するというやつだな

1.0.10 ビット演算を用いた、条件判定の高速化

ちょっとこれ要約するの無理だなぁ
integer値が32までならビット演算で複数の範囲判定が同時に行えるという話

3.1.11 list の長さの非0 判定

listの長さがゼロで無い判定
(lst!=[])
listの長さがゼロの判定
(lst==[])

3.1.12 llGetListLength() [互換性に注意]

ちょっとこれ衝撃だなぁ

integer len = llGetListLength(a);
これは
integer len = (a != []);

こう置き換え可能で listの!=演算が単純なブーリアン値ではなく
リストの長さの差分を計算するプログラムになってるんだってさ

で更に空リストをグローバル変数定義すれば高速化するとのこと

list null_list = []; // グローバル変数として宣言しておく
integer len = (a!=null_list);

ただしこの処理自体を関数化すると相殺されるらしいので
使い所ってことだと結構微妙かなぁ

でまぁこれこれちょっと今使えるかどうかわかんないなぁ


//-------------------------------------------------------------------------------

高速化の章の話はこれで終わり

常用するのはインクリメント・デクリメントと
あと代入処理のチェーンくらいかなぁ

計算結果定数の記述はまぁ詰めでやるくらいでいいかねと


以上

2019年4月1日月曜日

20191031 [怪文書]コンテンツ業界における貨幣経済圏と感情経済圏のお話

くっそ長くなったので怪文書として04/01投稿とする

--------------------------------

正直ソーシャルベースでの
コンテンツの話ということだとねぇ

買う側が許容するクオリティの最低ラインて
案外高いのよ

でまぁそれ未満だとそもそも相手にされなくて
じゃぁどうすればええのかって話だと

一部のオタクさん方面の人らが
”ごまかし”とか”ズル”とか
言っちゃうような手法が必要になる

--------------------------------

アマチュアクリエイティブの周りだと
そういうハックやテックを
極端に嫌う人たちがおって

じゃそういう人らが作るもんが
売れるようなコンテンツになってるかというと
ならねぇのよね 工数ベースで既に赤字だから

ほいでまぁそこで面倒な話になる

--------------------------------

要はなんでそういうの使わないのかという話

そういうの使うとね
対象市場がグローバルになっちゃってさ

世界のトップランナーと戦うことを強いられるの
戦うステージが上がっちゃうのよね

クラスやサークルで一番絵がうまい程度の人間でも
pixivランキングとかだと100位入れない的な話

--------------------------------

なのでやり方としては

”やり方を評価するニッチなコミュニティ”や
”そもそものコンテンツが少ないジャンル”
に向けてコンテンツ供給するという
生存戦略が考えられるわけなんだけど

そもそもそんな小規模なところで
生きられるだけの対価が得られるのか?と

--------------------------------

そのへんでまぁお話としては
仮の話としてなんだけど

”貨幣経済圏”と”感情経済圏”が大雑把にあるの

両方ともある程度等価交換が成立するの
でまぁ代表例としてあくまで現状での話ということだと

MMDは感情経済圏で
VRChatは大筋で貨幣経済圏なのよ

でまぁなんというかそこでも面倒な話がある

--------------------------------

感情経済圏ってさ

得られる対価で物理身体の維持が出来ねぇのよ
というか貨幣経済的な対価を得ることが

現状の法律や各種コンテンツガイドラインや
慣例では実質的に不可能なのよ

だから感情経済圏って名称を仮で使うわけなのだが
じゃぁ具体的な対価と価格って何よ?という話

--------------------------------

ほんともう大雑把に大げさに表現するけど

星での5段階評価が存在します

星0は興味なし 星1は25点 星2は50点
星3は100点 星4は400点 星5は5000兆点

でこれには実際のところマイナスの星もあるのだが
”感情の振れ幅”ということだと
マイナスの星もそれはそれで価値が存在するの

--------------------------------

でまぁ基本 感情経済圏では

そもそもの評価基準が個人で違うわけよ
等価交換という話だと星4以上のものにしか
価値があるように見えないように見えて

実際には5000兆点が1単位として取引されてるのね

いいねが+5000兆点 badが-5000兆点 興味なしが0

で最近のトレンドは”表示しない”手法

--------------------------------

要は 5000兆点以外の評価ボタンが存在しないの

等価交換の手法として
そもそも5000兆点の評価を対価として出さないやつには
コンテンツを供給しません

という感じの話になる
まぁちょっとこの辺は面倒な話だなぁと

ちなみに感情経済圏での
個人資産額は∞です 無限大

---------------------------------

ほんで 感情経済圏で活動する人間に対して

物理身体を維持するコストを賄う方法として

太古から存在する
パトロン制度とかそういうお話なわけよと

自分の経済状況から可能な限りの”全て”を
貨幣経済的な対価で支払うという仕組み

なので本来そこに”コスパ”みたいなのは存在しない

---------------------------------

随分話が長くなっちゃったねぇ

まぁ要は 実際のところの話としては

感情経済圏の話ということだと
どんな値札がついていようが
買うか 買わないか 以外の選択肢がないの
財布は常に無限大なので

でまぁ 貨幣経済的に困窮していて
買えない というのはもちろんあるんだけど
それは別のお話なの

----------------------------------

感情経済圏の財布は実質無限大で
そもそもの値札が存在しない
という話をしたところで

貨幣経済圏の話だと

”買うに値するかどうか”を値踏みするようになる
でまぁそうなると

そこで星の5段階評価が出てくるわけよ
要は貨幣経済圏のコンテンツに関しては
”タダでも要らない”が出てくるわけさという

----------------------------------

もちろんあれよ
”タダでも要らないが仕方なく使ってやる”
みたいなことを
コンテンツに関して言う連中は
相手にしちゃダメよそもそも

ほいでまぁ貨幣経済圏だと
金払うのは最低限の礼儀で
”二度目はない”って切るのもそれはそれで正当なのよ

後払い方式は無理だねぇそういう意味だと

2019年3月7日木曜日

BENTOでのハンドコントロールについて

まぁ何をいまさらという感じですが
実際に制御ロジック組んでみての話

BENTOのハンドやグローブを作って売る場合には

「BENTOハンド対応のAO使う前提」

最低限の知識としてこれは覚えておいたほうがいい
あるいは売るほうが説明する必要があるなという感じ


理由は
既存のアニメの様に
「アニメ停止したらニュートラルポジションに自動で戻る」なんて
そんな親切な仕組みはない
アニメ停止したら停止したときのフレームで止まりっぱなしになる


ほんじゃなんでそんなとこになるのかというと

既存のSLアニメは任意アニメ停止すると

即Internal Animation(システム標準アニメ)で上書きされるんだわ
ほんでSLのInternal AnimationにはBENTOで新規追加されたボーンに関して
全くのノータッチなので

BENTOハンドのアニメを停止すると文字通りの”停止”になり
ニュートラルに復帰しない
AO無しでリログすると実際ハンドがパーの形になる



なのでまぁこれの解決策はいくつかあるんだが
一番簡単なのは「BENTOハンド対応のAOを使うこと」なんだよねぇと

ハンド自体にアニメとスクリプトを組み込む方法は推奨しない

現状市販されているBENTOハンドやグローブを観測した結果
全部が左右別オブジェクト扱いで装着させてるので
両方にニュートラルにするだけのスクリプト入れたらそれこそクソオモになる


大体この辺かねぇ

以上