2018-01-01から1年間の記事一覧

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がよしなに描画を束ねるかど…