とあるプログラマーのブログ -2ページ目

とあるプログラマーのブログ

Unityやblender、Live2Dについて書いていきます!

WebGLでフレームバッファ切り替える時、以下のエラーでハマって「前にあったな。なんだっけ?」となるのでメモ

glDrawElements: Source and destination textures of the draw are the same
エラー内容としては、シーン内に使っているテクスチャに書き込もうとするんじゃねぇってという内容。
activeTexture メソッド内で指定している「テクスチャユニット番号」とuniform1i メソッドの第二引数に指定する「整数値」が一致していない時に起きる。
つまり解決法としては、アクティブのテクスチャを変えてやればいい。

間違いコード
function render(){
   ・
   ・
// uniform変数にテクスチャ1を登録
gl.activeTexture(gl.TEXTURE1);
// フレームバッファのテクスチャ参照
gl.bindTexture(gl.TEXTURE_2D, ftexture[0]); 
gl.uniform1i(uniLocation[1], 0);
	// 描画
gl.drawElements(gl.TRIANGLES, index.length, gl.UNSIGNED_SHORT, 0);
// 繰り返し
requestAnimationFrame(render);
}

正しいコード
function render(){
   ・
   ・
// uniform変数にテクスチャ0を登録
gl.activeTexture(gl.TEXTURE0);
// フレームバッファのテクスチャ参照
gl.bindTexture(gl.TEXTURE_2D, ftexture[0]); 
gl.uniform1i(uniLocation[1], 0);
	// 描画
gl.drawElements(gl.TRIANGLES, index.length, gl.UNSIGNED_SHORT, 0);
// 繰り返し
requestAnimationFrame(render);
}


ちなみに以下のエラーはIBOの登録時のエラーの場合によく見るやつです。
vertexAttribPointer: index out of range
gl.getAttribLocationで紐付けた変数がシェーダー側に登録されていない時に起きる。
vertexシェーダーやfragmentシェーダーに登録すればOK!

WebGL: enablevertexattribarray index out of range

今年も何をしてきたか振り返ってみました
1年間を振り返って何ができたかを確認するのは大事だと思うので。
ちなみに去年はこんな事を書いてました → 2014に出来たこと

2015年の目標は3DCGプログラミング3DCGモデリング強化、あと展示会へ出展と書いてました...。しかし、3DCGプログラミング強化しかできてないという

結構、頑張ったつもりなんですがいまいちですね


1)勉強会の主催やLT
Live2Dについては、今年は2回しか主催してないです(去年の1/3)
ちなみに会社から頼まれたとかでなく、個人で計画してやってます。

 ・pixivでLive2Dモデリング部(4/25)
 ・mixiでLive2Dプログラミング部(5/9)

blenderの方は、大阪と東京でLTしました。
ぶっちゃけblenderの界隈の方がTwitterと顔が一致してたりしますw
定期的にプレゼンしないとLTスキル弱くなるので、回数としてはまぁまぁかな。



2)勉強会やセミナーの参加
アンリアルフェス大阪・横浜に参加しました。
最近あんまりUE4いじれてないので、来年は頑張ろうかと。
(というかUE4が動くPCがお亡くなりになったのでSuface Book早く発売して)

あとは、HTML5カンファ、WebGLスクールGLSLスクールに参加しました。
ちょうどシェーダーやフレームバッファで困っていたので、本当に助かりました
合わせてUnityのシェーダーも理解が進みました。


3)プラグイン開発
WebGLとUnityのADVゲーム用のプラグインが作れました。
元々は個人でやろうと計画していたので、仕事でやらせてもらえて助かりました。
あと、blenderのWebGLプラグインはまだ開発中です...。


4)Live2Dのブログを結構書いた
34記事ほど書きました。ほぼ個人の時間で調べてプログラミングしてます。
(仕事でしても怒られないと思うけど、家で実装してる方が作業が進むので)
主にUnityユーザーが困らないように、はまる所を重点的に書きました。
フォーラムに投稿してくれる人は、本当にごく一部の人でググって情報なければ投げ出す人も結構いるんじゃないかなと思います。
だから、中の人もみんなブログを書いてくれれば助かるのになぁって前から思っています。

あとアドベントカレンダーも7記事ほど書きました。
毎年どこかに参加してるけど、年々書く記事が増えているというww

 ・Live2D Advent Calender 2015 → 5記事書いた
 ・WebGL Advent Calender 2015の13日目
 ・blender Advent Calender 2015の20日目


5)仕事について
イベントや展示会などプログラミング以外での苦労が多かった気がする
まぁ、来年はその経験を活かせると良いかなと思います。
あとLive2Dのプログラミング周りの情報が少ないので、個人で研究して増やしてましたね。


来年の目標
家でプログラミングする頻度は落として、モデリングに力いれようと思います。
あとお絵描きを半年ほどサボり中なので、来年はまた再開しようかと。
合わせてLive2Dモデリングを強化して、クオリティアップしたモデルを配布したい!
あとzbrushも買ったまま塩漬け状態なので、有効活用しようかと思います。
(オリジナルで書いた女忍者と妖怪を作りたい)

ちなみに、モデリング部も2月ぐらいから毎月開催しようかと思っています。
10名規模ぐらいでLive2D&3DCG&お絵描きをメインにする感じです。
(セミナーではないので、何も創作活動しない人や話を聞きたいだけの人は勘弁ね)

あとはUE4の方を本格的に力を入れる分、UnityやWebGLはゆるめる感じです。
目標としては、UE4コンテストやワンフェスなどに参戦です

でわでわ、来年も宜しくお願いします!
Blender Advent Calendar 2015の20日目の記事です

4ヶ月前のBlender+αの大発表会3で「WebGLアドオン作り始めました!」というネタでLTしました。

目的としては、NativeなWebGLにて簡単に3Dモデルを扱えるようにしたかったから(あとは自分の3DCG研究のため)


そしてアドカレ期限が迫ってきて、思い出したようにここ数日開発してましたが・・・
「ほとんど成果をあげられませんでしたっ!」

とりあえず、現状の進捗は以下の感じです。
(進捗をアップする事でやるやる詐欺しないようにしようかと)


現在の進捗状況
まずは、blenderでトーラスを作ってエクスポートします

そうすると頂点情報がjs出力されます

これをhtmlのscriptタグで指定します

WebGLのコードもthree.jsを使わず自前でこんな感じです。
(頂点カラーは適当につけてます)

あとワイヤーフレーム表示ができます

現在、blenderでインデックスバッファの取得に手間取ってます

前に発表したスライド見てたら「テクスチャマッピングまでできたら公開!」と書いてたので、年内か年明け目標でgithubにアップしようと思います

次回のアドカレは、nbngさん宜しくお願いしまーす
Windows7 ProでTotoiseGitを更新したら、右クリック後のコンテキストメニュー表示が4秒ぐらいかかるようになった...。

以下のブログにあるようにレジストリをいじって修正しました。
http://blogs.msdn.com/b/shintak/archive/2014/11/04/10569441.aspx


・デスクトップで何もないところで右クリックが遅い場合
HKEY_CURRENT_USER\Software\Classes\Directory\Background\shellex\ContextMenuHandlers
Git-Cheetah

アイコン・フォルダ右クリックが遅い場合
HKEY_CLASSES_ROOT\*\shellex\ContextMenuHandlers\Git-Cheetah
Git-Cheetah

HKEY_CLASSES_ROOT\Directory\Background\shellex\ContextMenuHandlers\
TotoiseGit

放置していて1週間ぐらいイライラしてましたが、やっと開放されました

OpenGLで詰まってたので、原点に返ってWebGL入門してみました~。
WebGL入門記事を見てソースコードは写経ですが、生WebGLでUnityちゃんを表示できた

生WebGL入門:初音ミクの美麗3Dモデルを表示する(前編)


本コンテンツは、『ユニティちゃんライセンス条項』に基づいて公開・配布されるものです。
本コンテンツをご利用される場合は、ユニティ・テクノロジーズ・ジャパン合同会社が定める『キャラクター利用のガイドライン』をお守りいただく必要があります。


開発環境
blender2.73 → 2.73から正しくFBXインポートできる!
Brackets → Webサーバが簡単起動できるエディタ!


1)まずはblenderにFBXインポート
 テクスチャ関連付けしないとOBJ出力時にファイルパスが出力されません。
 以前書いた記事を参考に関連付けてから出力して下さい

 blenderでSD版Unityちゃんインポート


2)blenderでOBJ出力
 WebGLは三角形が基本なので三角面化しときましょう
 

 あと必ず出力したOBJを再インポートして確認しましょう


3)テクスチャをコピーしてきてmtlファイルを修正
 画像ファイルが絶対パスで出力されてるので修正します
 

 今回はunitychanフォルダを作ったので、mtlにunitychanパスを書きます
 



4)miku.jsのパスを修正



5)写経したコードだと表示サイズが小さいので修正
 ・123行目を修正
  mat4.frustum(proj_mat, -1, 1, -1, 1, 3, 10);
       ↓
  mat4.frustum(proj_mat, -1, 1, -2.2, -0.2, 6.3, 10);

 ・あと背景をUnityブルーにしましょう
  gl.clearColor(0, 0, 0, 1);
       ↓
  gl.clearColor(0, 0.4, 0.8, 1);


コードミスで法線がおかしかったり色々と詰まりましたが、勉強になった。
生のWebGLでモデルを表示したい人は、ぜひ生WebGL入門オススメです

ちなみにobj出力時にアニメーションにチェックを入れると、キーフレーム分のobjとmtlファイルが出力された。これをロードして動かすのは現実的じゃないですね


ちなみにobjファイルはボーンは含まないので、WebGLでアニメーションさせる場合は1つずつ頂点を動かすしかないかも。
以下の本で腕や足にメッシュ分けしてアニメーションしてますが、FBXモデルをパーツ分けするのは辛い・・・

現状ではWebGLで3Dモデルをアニメーションさせるには、three.js用のjson出力を使う方法しかないかな

今まで開発はMacでやってたけど、ほぼWindowsに移行しました~。
3DCGやGPU使う開発になると、Macだとハード的に辛いし開発効率も落ちる

ただWebやスマホ開発はMacの方がいいです(Chromeの挙動違いやAndroid端末ごとにドライバ入れたりしなくていいし)

というわけで少しパーツ買って、PCをバージョンUPしました

グラフィックボード : GTX300系 → GTX960
メモリ : 4GB → 8GB

うん、今までのPCがスペックが低すぎだしそりゃUE4落ちる訳だ!
メモリもマザーボードに合うタイプがなくて取り寄せたり、
グラフィックボードも買ったものの、PCI-EXPRESS用6ピンがPC電源ユニットについてなくて電源ユニットも買い直しました。

2週間ぐらいももやもやしてたけど、これで快適ですわー!
さらば低スペックなパーツ達よ


2015/03/22追記
ちなみにグラフィックドライバ交換後にすげーはまった点も書いておきます。

Windowsの起動ロゴと起動音は出るけど、画面が真っ黒に・・・
(セーフモードでは起動できる状態です)
よくWIndows Update後にこの症状は出ていて、黒い画面でログインパスワード入力し電源落として再起動すると治ってました。
だけど、今回は何回やっても改善されない・・・

交換前のグラフィックドライバー削除を忘れてたので削除しました。
グラボを40分で交換する手順
 → インストールソフトだけじゃなくデバイスマネージャーから削除を忘れてた

それでも黒い画面のままだったので、一旦セーフモードで起動してデバイスマネージャーで見たら新しいGeForeドライバになってたので、削除しました。
(製品付属のCDでダメだったのでネットからドライバ落としました)

これで再起動するとログイン画面は正常に起動しました。
ただ、デバイスマネジャーのグラボアップデート後に再起動すると黒い画面でどうしたものかと・・・。
なので、一旦低解像度モードで起動したらいい感じだったので
ディスプレイサイズを最適化し、再起動したらやっとWindowsログイン画面が起動しました~


最後のディスプレイサイズを低解像度(800x600)で起動し、高解像度(1920x1200)にする所が納得いかないけど困ってる人の助けになれば幸いです

今までblenderのエディタってコード補完しなくて使いづらいな~って思ってた。
でも、このアドオンを入れて解決しました!

環境:Windows7、blender2.73

 


まずはgithubからDownLoad zipしてきます。
blenderを起動し、[ファイル]-[ユーザ設定]でアドオンタブを選択します。
「ファイルからインストール」ボタンでDLしたzipを選択し、チェック入れればOK!


テキストエディタータイプを「テキストエディタ」にし、[ビュー]からプロパティを選択します。
使いやすいように行数表示などさせて、プロパティの一番下にあるAuto Completeの開始ボタン押すとコード補完がききます!

さっそく新規ボタン押下してコードを打つとこんなかんじ
tabキー押下で選択を確定できます。


これでpythonも快適に勉強できそうですね

試しに以下のチュートリアルをやってみるといいかもです!

PythonによるBlender3DCGモデリング(1)
PythonによるBlender3DCGモデリング(2)



環境:Mac Pro(OS X Yosemite 10.10.2 / Xcode version 6.1.1)

iOS SimulatorからsafariでWebページが見れなかったので、そのメモです。
なぜかWebページが見れないという。

「safari cannot open the page because the network connection was lost」

でもHTTPSの方はアクセスできる


家のMacでは問題なくシュミレーターからHTTPも見れるし、ウィルスソフトかと思ったけど設定変えても直らず。。

iOS SimulatorでiOS8を動作させるとHTTP通信ができない


とりあえず、以下のページを参考にWebView使ったiPhoneアプリ作って実行!

逆引きObjective-C Webページを表示する

WebViewからはHTTPが見れたので、もう一度safariで試してみたら見れるようになった


いや、原因はわからないけどなんか直った

面白そうなBlenderイベントあったので参加してきました~
28名中15名が初心者で、あとはよく見かけるガチ勢でした

個人的に2.73の新機能を調べてたので、FBXとテクスチャペイントのLTしてきました。

すこしゆるめなBlender勉強会LT


ハンズオンで「ちゃぶ台ひっくり返し」をしたのでそのやり方をメモしておきます。

まず落とすキューブとちゃぶ台に物理演算のアクティブ追加します。
下の畳部分はパッシブを追加します。

キューブの方の重みをふやしてやるといい感じになります。
簡単ですね~!

 



blender経験者として、物足りなかったのでモンキーを箱詰めしようとしてつまづいた

箱のコリジョン見たらシェイプを凸包→メッシュにしたら綺麗に箱詰めできて満足です

UnityやUE4やる人はblenderの物理演算は使わないわ~って思うかもですが
衣服のしわとかモデリングする時はクロスの物理演算使うと便利ですよ




Web用エディタにBracketsを使ってたのだけど、ライブプレビューが起動しない...。
WebGL開発用にボタンクリックで簡単にWebサーバーできて重宝してたのに


ブラウザは起動するが真っ白



Bracketsメニューから[デバッグ]-[開発者ツールを表示]するとエラー出てた

「enable failed on agent css」で検索したらChrome40からはBrackets1.1を使えだとw



前にBrackets1.1で一部の拡張機能が動かなくて1.0使ってたけど更新されました。

2日ぐらいもやもやしてたのが解決しました

2015/02/12追記
 またLivePreviewできなくてローカルファイル参照になる...。

 

 どうやらhtmlファイルをBracketsにDrag&Dropするとこういう事がおきる。
 htmlファイルの1つ上の階層のフォルダをDrag&Dropすると起動できるよ
 

2015/02/25追記
 またなぜかWindows7でLivePreviewが起動しなかったけど、
 再インストールしたらなぜか直った