2022年の振り返り

仕事関連 個人事業主一年生存 メインの取引先と切れていないのでサバイバルしたぜ感はまったくないですが、つつがなく一年生存しました。安定は良いこと。 特に仕事を詰め込もうとはしていませんが、メインの仕事+αな感じで、頼まれたら空き時間にお手伝い…

SampleTank4の不具合

DTM

2022/12/29 SampleTank4 version 4.2.3時点で私が遭遇した不具合です。 IK multimedia のサポートには連絡済み。 そのうち修正されることを期待します。 当環境 Windows 11 22H2 DAWでSampleTank4を使ったプロジェクトを開く際にSampleTank4.vst3がエラーで…

Total Studio 3.5 MAXのインストール

DTM

Black Fridayなので、評判がよくて長く使えそうなMODO BASS 2を買ったのですが、そこから 「Amplitube 5 MAX 87%オフ!ギターも買ったことだしアンプシミュも持っておくか!」 「え、MAX製品もってたらTotal Studio 3.5 MAXも87%オフなの?」 と87%OFFの連鎖…

HSTRING完全に理解した

HSTRINGというのはUWPやWindowsAppSdkで使われる、Windows Runtimeの文字列です。 Windows APIでは文字列の種類がいろいろあります。LPTSTRやらBSTRやら……これらの新顔で、オーバーヘッド大き目のかわりに柔軟です。 HSTRINGは基本的には<winstring.h>ヘッダーに含まれる </winstring.h>…

ボタンの命名は連番!?

Twitterで話題になったこちらについて。 仕様変更に強い命名は大事だ。ボタンを「OKボタン」や「Noボタン」と名付けていたらヤバいかも。ゲーム開発に仕様変更はつきもの。開発中盤「OKボタンの色を使ってキャンセルボタンを作りたい」というケースもある。…

EFCoreに深入り(DbContextをnewするあたり)

2/22追記、この記事の内容の応用としてPomelo.EFCoreのシャーディング対応をgistにあげてみました Pomelo.EFCoreでSharding · GitHub この記事は、以下のコードを読んでみた結果です。 github.com 当記事内のコードはどれも簡略化したものなので本当の実装が…

C++でメタプログラミングの基礎

C++

最近C++で学んだことのメモです。主にメタプログラミング周り。 twitter上ではRust人気に押されている感はありますがC++も進化を続けていて、特にconstexprに代表されるコンパイル時計算まわりは非常に強力だなと思えます。 C++98付近で知識が止まっているな…

2021年の振り返り

今年は大きな転換の年になったと思うので、年の瀬にログを残します 個人事業主になった 社会人になってからずっと会社に属して働いてきましたが今年から会社をやめ、田舎に戻って個人事業主になりました。仕事は引き続き東京からフルリモートで受けています…

より良いトランザクションスクリプトを目指す

ファウラーのエンタープライズアプリケーションアーキテクチャパターン(PofEAA)において、 ビジネスロジックのアーキテクチャにはドメインモデルかトランザクションスクリプトかという二択があります。 仮にプレイヤーの名前変更(ゲームでは可能なことも普通…

スマホゲームのサーバサイドアーキテクチャについてモヤモヤと考えていること

とりとめもなく書き散らかします。 テスタビリティ 真面目に単体テストを書く人がチームに入ったのでテスタビリティについて真面目に考えています。特にインゲームロジックについてはテストを組めるようにすることの価値が非常に大きいので、手間暇かけてテ…

Migrationやデザインタイムの挙動を別アセンブリに閉じ込める

「Migration用のコードがアプリ実行時に含まれるのが嫌だ。ツール実行時だけ存在すればいい」というニーズもごく普通にあろうかと思います。 EF Coreはそのあたりのオプションがちゃんと用意されています。大丈夫だ問題ない。が、結構わかりにくい挙動をしま…

シャドウプロパティ

シャドウプロパティは、エンティティclass側には存在しないがDBのテーブル側には存在する列を作る、使うための機能です。 public partial class Blog { public int Id { get; set; } public string Title { get; set; } public string Text { get; set; } } …

EntityFramework CoreでSELECTせずにUPDATEを行う

O/Rマッパーでデータの更新を行う場合は、 オブジェクトを取得して プロパティを変更して SaveChanges()を行う というのが普通です。 using(var context = new BlogDbContext()) { var blog = context.Blog.Find(1); blog.Title = "まだ〇〇で消耗しているの…

UIElementsの基本構造

UIElementsがいまいち使いにくい。もっと拡張性を上げられないものか…とおもってUIElementsのソースコードをいろいろ読み漁っていたら理解が深まってしまったのでメモとして残します。 読んでも「ふーん」と思うだけできっと役に立ちません。 VisualTreeAsse…

SRP Batcher良き良き

SRPを導入するならSRP Batcher使いたい! SRP Batcherの解説といえば公式Blog。充実した内容です。 blogs.unity3d.com Unity 2019.2からOpen GL ES 3.1もサポートし、幅広く使えるようになりました。 SRP Batcherは、Materialが切り替わってもShaderVariant…

ScriptableRenderPipelineの部品化とUniversalRP

先日の記事で素朴なUnlitのSRPを書きました。 enrike3.hatenablog.com 今回は、素朴なSRPとUniversalRPの間を埋めUniversalRPの構造を理解すべく、SRPの部品化を試みます。 最終的にはUniversalRPの下図の構造を理解できることが目標です。 我ながら配色のセ…

素朴なUnlitのScriptableRenderPipelineを自作する

Camera Stacking対応目前、ということでそろそろSRPの時代を感じています。 学習がてらに簡単なUnlitのパイプラインを作成してみました。 なお、以下を参考にしました。SRPDefaultUnlitとか良く見つけたなと思います。先人の知恵に感謝です。 learning.unity…

TaskとTaskCompletionSource<TResult>

「C#で非同期はとりあえずasyncなメソッドをawaitつけて呼んどきゃいい」 これだけではいけないコードを最近よく書いているので、 生のTaskやTaskCompletionSource<TResult>について書いてみることにしました。 なお、UniTaskにもUniTaskCompletionSourceがあるので、</tresult>…

表情差分の抽出と切り替え(Tightメッシュ対応編)

前回の記事で、 FullRectはフィル落とせないから微妙だなぁ、という結論を書いたのですが 表情差分を切り替えやすいメッシュを作りつつもTightメッシュ対応する方法を思いついたので実装してみました。 方法は結構簡単でして、 まず、表情差分領域を除外した…

表情差分の抽出と切り替え

2019/02/17追記 Tightメッシュにも対応しました ノベルパートでの立ち絵での表情の切り替え テラシュール御大でも何度かネタにされているあれです。 tsubakit1.hateblo.jp これについて、自分は「表情差分とそれ以外がちゃんと分かれたメッシュを作って顔の…

MessagePackのデータをUnityのTreeViewで表示する

MessagePack-CSharpは機能も性能も充実しているのでとにかく問答無用で使うわけですがJsonと違って中のデータを汎用エディタでさくっと覗けるわけではありません。 しかしマスタデータや、ユーザーの起動時ダウンロードデータなどをブレイクポイントをはって…

C#で確保済みbyte配列でmallocモドキ

GC任せにしてbyte配列何度も確保したくないし、Spanが来るから積極的に部分配列を使いたい。 byteに対して標準Cライブラリのmallocみたいなことできないかなーとほんのり思っていました。 mallocぽいというのはこういう感じですね。フラグメンテーション上等…

Materialエディタの拡張

エフェクト統一シェーダーがあると捗るよね の記事を読んで「よし、俺も統一シェーダ作るぞ!」と思って実際にやってみると、 シェーダのコードを#ifdefで切り刻むこと自体はそこまで大変ではないですが、 「エディタのほうはしんどそう」…と思っていました…

Snapdragon Profiler

UnityのProfiler上ではGPUの細かいメトリクスはとれないので、描画負荷をはかるためには Androidなら各SoC向けのプロファイラ。iOSならInstrumentsを使って描画負荷を測ることになります。 自分は私物端末がSnapdragonなので、普段はSnapdragonProfilerを見…

RenderDocがとても良い

RenderDoc神。 UnityEditor上でグラフィックがバグってて困ったときはまずFrameDebuggerでぱぱっと確認するわけですが、FrameDebuggerで原因をつき止められない場合はRenderDocが助けになります。 Visual Studioのグラフィック診断相当の機能が少ない手順で…

ETC2はETC1と比べてカラー部分も改善されているという話

社内で圧縮テクスチャの話をしたのでブログでも少々。 DXT1からつらなる初期の圧縮テクスチャの系譜は4x4=16pxを1ブロックとして扱い 1ブロックあたりカラー(RGB)を64bit、すなわち64/16=4bpp (bit per pixel)としています。 これだとアルファがもてないので…

CanvasUpdateRegistryとICanvasElement

UnityEngine.UI.dllの中身はBitbucketにあります。誰でも読めて素晴らしみあります。 uGUIを理解するのにあたって個人的にとても大事だと思っているのは、UnityEngine.UI.CanvasUpdateRegistryクラスです。 こいつは何者なのかというと、ざっくり言ってしま…

UnityEngine.UIを使わずにCanvasに描画する

サンプルの実用度はまるで無いのですが、uGUIの理解のために。 UnityEngine.UI.dllはC#で書かれたManagedなdllです。 一方、Canvas, CanvasGroup, CanvasRendererなどはネイティブコンポーネントであり、名前空間もUnityEngineに属します。 CanvasはUnityEng…

DrawCall Batching

DrawCall Batching Unityは描画効率のために、複数のRendererの描画を一つに束ねることがあります。 これをバッチングといい、 どのRendererの描画をまとめるかを事前に指定する方式をstatic batching Materialの状況をみてUnityがよしなに描画を束ねるかど…