2023.8.29
最近は涼しいですね。夜半などに窓を開けると涼しい風が入ってきて風呂上がりの火照りを冷ましてくれます。窓の外を眺め、フルリモートニャオハでニチャニチャ男である僕はラプンツェルの如く外の世界を眼下に過ごすのです。
というのは嘘で、フルリモートなのとニャオハでニチャニチャは本当ですけど家の外には割と出ています。深夜にジムに行っています。なぜ深夜かというと自転車マシンにテレビがついていて、アニメが見れるからです。
しかし外でアニメを見ると言うのはなんともむず痒いところがあります。例えば家で萌えで恋愛な青春アニメなどを見ていたら放映中に座って見てなどいられず、
キャラの可愛さに口角をだらしなく下げ、クリティカルな愛らしさに胸を抑えてのけぞり、「いや、でもこの可愛さは流石に狙いすぎだろ」と冷めて、でもやっぱり萌えてしまう自身の浅はかさに頭を抱え、しかしここにいるのはディスプレイを見つめる非モテ鬱男であるという事実に気づき、映像の中の青春との格差にかぶりを振りながら発狂し、行き場のない攻撃性をディスプレイに噛み付くことで発散し、しばらくさめざめと泣いた後で
急に正気に戻ってエンディングを口ずさみながら作業に戻ります。これを外でやると周りの人が少しだけびっくりしちゃうと思うので自制します。その代わり性癖が刺激された途端にサイクリングマシンの負荷を上げるのです。こうすることで一連の衝動が解消されます。他人から見ると、運動負荷を上げるごとにニチャける男が出来上がるわけです。
アニメキャラに興奮するのと、このまま古典的条件付けがなされ運動負荷を上げるだけで不気味な笑みを浮かべる行動。どちらに健全があるのか悩ましいところです。ニャオハを吸いながら涼しい夜風に考えを巡らせる僕でした。
2023.8.28(ECSを実装しようと思う話)
先日導入したfbx sdkですがまだ読み込み部分は実装していません。よく考えれば3dモデルには階層構造があるのです。エグゾディアみたいにパーツが分解されていたりして、もしこのまま読み込めば「右足だけ揃わない!」なんてことになりかねません。
というのも今実装している分では描画機能しか存在していません。RenderComponentというクラスに、描画に必要な情報を持たせています。階層構造とかオブジェクトとか一切実装していません。
つまりこのRenderComponentを持たせる階層構造付きのオブジェクトを実装しなければ全てのメッシュノードを描画したとしても動かしたらバラバラに砕け散ります。
ところで階層構造付きのゲームオブジェクトの実装方法ですが、よくあるのは以下の二つだと思います。
コンポーネント指向
Unityとかで見るやつです。
オブジェクト指向で作るぞ!と思うと継承を使いまくった実装になると思います。
つまりゲームオブジェクトの親クラスGameObjectを実装して、操作可能オブジェクトならこれを継承したControllableGameObject、更にプレイヤー機能をつけようとするとこれをさらに継承して……。しかも操作可能かつレンダリング可能とかだとそれぞれの機能を持った親クラスを多重継承しなきゃいけません。
継承より包合、ということでそれぞれの機能をコンポーネントクラスとしてGameObjectに持たせるのがコンポーネント指向、ということです。
メリットは書きやすいことだと思います。オブジェクトごとに更新するってのは分かりやすーいって僕は思います。実装したことはありますが結構単純なつくりをしているので実装難易度も低いです.
ECS
えんてぃてぃ、こんぽーねんと、しすてむっていうのです。結局コンポーネントやんけ!ってなりますがデータの持ち方が違います。
コンポーネント指向ではオブジェクトごとにコンポーネントを持っているのでどう丁寧に作ってもオブジェクトごとに連続したメモリがあって、そこにコンポーネントのデータが並ぶということになります。そのオブジェクトもバラバラにあるのでキャッシュ効率が悪いです。これが結構致命的で、基本的にプログラムではメモリアクセスがボトルネックになるのでキャッシュを使えないのはヤバヤバです。
という反省を踏まえてecsではコンポーネントごとの配列を持ってentityと呼ばれる配列のindexを保持します。つまりあるentityを持つオブジェクトのコンポーネントはそれぞれの配列のindexがentityである場所にあると言うことです。
コンポーネントの更新はsystemと呼ばれる、つまりコンポーネントの配列を受け取る関数で行います。更新時に連続したコンポーネントのメモリを読み込むため、キャッシュに乗りやすいということです。
ここを読んだら具体的な実装がある程度わかると思います。
ECSがナウいのでECSを実装します。
ただ上記の記事にはentityの階層構造とかがなさげだったので既存のライブラリを見て勉強しようと思います。
fbx sdkは既に僕のキャッシュから追い出されたので当分はECSについて調べようかと思います。
2023.8.27
not 解説記事
久々に日記書きます。ブログ解説以来、恥しか書き連ねてこなかったブログですがしばらくはその日作ったものでも書き連ねます。
前回記事までインターネットの海をクソ記事で汚しまくっていた人間が言っても信ぴょう性は皆無ですが、現在DirectX12のライブラリを作っているのでそれについて適当に。
いままで作ったところ
5月くらいからほんの少しづつ作っているのである程度の機能は作り終わっています。(といってもまだ板ポリゴンを描画する程度のところまでですが)
- 必要最低限のモジュールのラッパークラス(d3d12device, commandlist, commandallocator, swapchainなどなど)
- ディスクリプタ―ヒープを自動で割り当ててくれるアロケーター
- pipelinestateのラッパー
- 内部でshaderをコンパイルして、shaderreflectionを保持している。
- pipelinestateのshaderreflectionとrootsignatureの情報からshaderで使うリソース(inputとかtexture,constant,sampler)の自動生成
- 要するにリソースのバインディングが自動でされるのでunityみたいにSetFloatとかだけで数値を設定できる
ざくっと列挙するとこれくらいだと思います。要するにデータをgpuに送って描画!までは一通りできます。
じゃあ今どこ作ってんの?
gpuにデータ送って描画ができれば全てじゃん。その通り。ただc++のコードで頂点座標をすべて指定して美少女を作るのは無理なので3dモデルのローダーを作っています。具体的にはfbxファイルのローダー。Mayaちゃんだいちゅき(Maya未インストール)
ファイルロード機能と、あと基本的な行列(ビューとかワールドとか)を提供する部分を作ればいったん終わりかなーと思っています。それが終わったらライブラリを拡張して「こんぺーとしぇーだー」や「めっししぇーだー」とかいうのをやっていきます!それぞれの名称は僕のカタストロフ級美的センスによりデフォルメされたものであって、金平糖とメッシの質感を再現するシェーダーを書くわけではありません!
今日やったこと
fbx sdk
fbxとかいうMayaの子分が作ったファイルのフォーマットは謎です。世に出回っているfbxのフォーマット仕様はblender君が勝手に言っているだけです。頑張ればblender様が解き明かしたfbxフォーマットを使って古き良きfreadで読めなくはないですが、fbxの内部構造はmaya内部とどうようにnodeで構成されており、頂点情報をとってくるには、
- fbxをパースしてノード構造を解き明かす
- ノードからMeshノードを探す
- Meshノードが持つ頂点情報をパースする
めんどくさいです。クローバーの葉を分解して分解された切り口からもとのペアの葉をグルーピングしてsizeが4であるのを探すくらいめんどくさいです。そういう時はシロツメクサSDKを使えばよいのです。シロツメクサSDKはありませんがfbx SDKはあります。やったね!
fbx SDKの導入
今日は導入しかしてません。残りの時間はプリパラ見てました。
ダウンロードページから自分のバージョンのsdkを落としてきます。僕はvs2020を使っているので他のバージョンで動くかは知りません。というか別に解説記事でもないのでその旨を書いておきます。GOTO 0
E:\Program Files\Autodesk\FBX\FBX SDK\2020.3.4
みたいな雰囲気のパスがあるのでそこのincludeパスとlibパスをvisual studioに設定していきます。いくつか方法はありますが環境変数とか触ったりsdkのパスを動かすのも面倒なのでvsの設定のみ変えます。
- プロジェクトのプロパティを開く。
- C/C++>追加のインクルードディレクトリに
FBX SDK\2020.3.4\include
を追加 - リンカー>全般>追加のライブラリディレクトリにFBX SDK\2020.3.4\lib\vs2022\x64\debugを追加。
- x64,debugの部分は構成の雰囲気で変える
- リンカー>入力>追加の依存ファイルにlibfbxsdk-md.lib;libxml2-md.lib;zlib-md.libを追加
- ライブラリディレクトリの中身はこんな感じだと思います。
- mdのサフィックスはマルチスレッド DLL, mtのサフィックスはマルチスレッドを意味します。これはC/C++>コード生成のランタイムライブラリと一致する必要があります。
- libfbxsdk.libは動的ライブラリの時に使うらしいです。神サイトに書いてました。
- libfbxsdkのみならず、libxml2,zlibもリンクする必要があるらしいです。上記のサイトにはないファイルなので放置してましたがリンクしないとxmlどうとかが未解決になっちゃいます。
以上を行うと以下のコードがコンパイルできるかと思います。
#include <fbxsdk.h> fbxsdk::FbxManager* fbx_Manager = fbxsdk::FbxManager::Create(); fbx_Manager->Destroy();
Createとかで作るのでシングルトンかなと思いましたがInstance関数的なものが見当たらないのでいくつか同時に作れるのでしょう。ロード部分はFbxManagerを使って読んでいくようです。
一瞬freadで実装しかけたのでSDKがあってめでたしです。ただ結局fbxの内部はノード状態。保存できるデータの自由度が高いせいでそういうところに対応しているとそうとう面倒くさそうなのでvertex,normal,uv.index,materialあたりだけ読み込もうかと思います。明日以降。
それはそうと頂点法線って複数持てるんですね(無知)。シェーダーでは基本的に頂点一つにつき法線一つで処理することになると思うので複数個ある頂点法線にたいしては頂点を増やすか、平均をとるしかなさそうです。それぞれハードエッジ、ソフトエッジってことになると思うのですが世の中のレンダリングエンジンはどうしているのでしょうか。個人的にはDCCツール側でハードエッジなら頂点を増やす、ソフトエッジなら頂点法線は一つだけ、という風にデーターを用意してほしいんですけどどうなんですかね。どうなんでしょう。僕はすべてソフトエッジにすることを企んでおります。
最後にfbxのフォーマットを見た所感ですがこれはモデルデータのフォーマットじゃないですね。mayaで編集するために必要なデータがすべて一粒に詰まっているのでグリコも裸足で逃げ出す膨大さです。というかトップノードがシーンである時点でこれってシーンファイルですよね。chat gptにゲームで一番使われているモデルデータのファイル形式を聞いて決めたのですが普通にファイルサイズが無駄にでかそうなので使われていないのでは?という気がしています。
2022.8.19
歩きスマホ日記です。義眼屋の待合室で厨二眼帯ポーズ自撮りを決めた僕は太陽で、もしくは生き恥を晒したことにより火照った体で。食べた翌日は大体食べすぎで体を壊している、でお馴染みの家系ラーメン屋に歩を進めています。んなバカみたいな食い方をしてるのは僕だけです。ついでに言うともう腹を下してセブンのトイレにいます。
ジャー
京都の夏は古民家が映えて景色がいい!御所かと思ったら同志社でした。ここを通ると設備と学生の眩しさに鬱になるので帰りにあくた川のラーメンの汁で打ち水しときます。大学やその生徒はその土地のラーメン臭がするものです。同志社女子も圧巻です。つまりうちの大学が「きゅうてい」と呼ばれているのは皮肉に間違いありません。
鴨川です。ここの水は鴨の出汁が効いててそのままでスープに使われているそうです。
そしてここが
(あくた川の写真が入る)
あくた川です!
ラーメン750円。ご飯が50円でおかわり自由というのが僕が体を壊す所以でしょう。ニンニクをたっぷりと入れるとニンニクの味がします。そこに辛いのを入れて辛くしたらご飯と一緒に食べてニンニクとご飯と辛いのとスープのハーモニーは特になくニンニク優勢のこの暴力的な味がなんとも下手な僕の食レポでした。濃厚ニンニクどろりスープは僕が全部飲み干しちゃったので同志社くんの分はありません。やーい!一滴もやるものか!
ところで女連れて食いに来てたやつがいたんですがあれって裏メニューですか?今日のスープは涙で薄まってました。
2022.7.18
皆さんに大切なことをお伝えします。世間では海の日などと言われていますがあれは嘘です。今日はペピリアッツォの日です。その証拠に今日のチャンツビブー濃度は一年で一番高く、非常にボリボリビチックな日と言えるでしょう。
ではなぜ世の中では海の日などと呼ばれているのか。これはペピリアッツォを高度圧縮言語であるペ語で表した際の読み、ウ ゛ ミ ィから来ていると言われています。この読みに海という当て字が使われているワケですね。また一つ賢くなりましたね。
ここで提案なのですがこの日記もピ語で書かれるべきでしょう。僕ほど充実した日々を過ごしていると日本語などという冗長な言語で記すのは非効率的です。これからはピ語で僕の毎日をお伝えしようと思います。では、早速。
ピッ
ピ
2022.7.16
今季面白いと思ったアニメの感想です。続きものは大体おもろいしみんな見てるだろうと思うのでのぞきます。
リコリス・リコイル
そろそろ女の子が殺しまくるアニメが見たいな〜って言ってたら作ってくれました。キャラがいいので最後まで安定して面白いんだろうなぁ〜というアニメ。あと次は女の子が絶望しまくるアニメが見たいです。
異世界迷宮でハーレムを
本編を耐え抜いてみんなで神EDを見よう。本編を耐え抜くコツはエロに忠実になりなおかつ賢者にならないことです。
異世界おじさん
割と今季の話題作なので言うまでもなくといった感じです。美男美女だらけの異世界に紛れ込んだブおじさんの構図どっかで見たことあるなぁと思ってたらこの前、高松屋に迷い込んだ僕の構図でした。
よふかしのうた
照らしてって moonlight
目を奪ってブルーライト
ネオンサインが呼ぶ表裏
プリマドール
keyだから。正直おもろいのかはよく分からないので続き書きます。よふかしのうた
連れ去って midnight
血走った red eyes
大人たちの子守唄
主人公側も地球を壊すのが目的だったり歪んだ思想だったり世界観が絶妙です。正直アニメの見せ方が平坦な気がしてもっと目を引く演出とかしてほしいけどストーリーが面白いのでこのままでもいけます。メスガキ指数(さみだれ):63
金装のヴェルメイユ
これねこれ。ニチャァァァキミこういうのでいいわけよ。鬱とか考察とか最強とか違うワケわかる?エロくてカワイくてちょっとオモロい。毎クールこういうのたのんますわ!あ、次はもっと胸のカサは低めでね?異常性癖者に合わせる必要ないから、ハハッ!
engage kiss
つなこ!つなこせんせぇぇぇぇぇい!ありがとおおおお!かわいいよおおお!つな、つ、つなこせんせいいいいいいありがとおおおおおおおおお!!!丸戸あんがと。
Extreme hearts
ツッコミどころの多いアニメ。だが99%の視聴者は百合とガチ百合しか見てないので選手登録してないはずの選手が出てきたりレギュラーメンバーが増えるたびに穴埋めの美少女ロボットが減っていく様など興味ないわけです。
ルミナスウィッチーズ
パンツの上にスカートなんて履いて恥ずかしくないのか。