koturnの日記

普通の人です.ブログ上のコードはコピペ自由です.

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

List<T>の内部の配列の参照を取得する

C#

はじめに C# の List<T> はいわゆる可変長配列のことであり,内部的には配列を持っている. 要素追加の度に残り容量を確認し,不足するようであればより大きな配列を確保し,そこに既存の要素をコピーした上で新しい要素を入れるという実装になっている. List<T> </t></t>…

lilToonのカスタムシェーダーを作るときのTips

基本 基本的なカスタムシェーダーの情報は下記公式ドキュメントを参照すること. lilToon カスタムシェーダーの作り方 ドキュメント中にある下記のファイルがテンプレートであり,この中の数ファイルを編集する. カスタムシェーダーテンプレート(zip) ジ…

レイマーチングにおけるマーチングループのbreakについて

shaderlabでレイマーチングのシェーダーを書き,マーチングループの部分のアセンブリコードを確認して不満に思う点があった. 本記事ではマーチングその不満に思う点を解消する手法について述べる. 扱うシェーダーコード この記事では下記のシェーダーコー…

モデル行列に関するメモ

モデル行列の調理 モデル行列とはオブジェクトをローカル座標からワールド座標に移動する行列であり,具体的には平行移動,回転,拡大縮小の3つを行う行列である. Unityのシェーダーとしては unity_ObjectToWorld というuniform変数で与えられる. この行列…

CustomRenderTextureVertexShader()を改善する

はじめに カスタムレンダーテクスチャの頂点シェーダーはUInityの標準ライブラリ CustomRenderTextureVertexShader から提供されており、これを用いることになっている。 しかし、実装を読み、なおかつDirect3D11の出力アセンブリを読んだところ、あまりよく…

レイマーチングにおける正規化法線ベクトルの計算と実装

たまには趣向を変えて,ですます調で記事を書いてみようと思います. レイマーチングではライティングを行うために正規化法線ベクトルの計算が必要となります. この記事ではいくつかの正規化法線ベクトルの計算手法について述べることにします. なお,僕は…

Unityのシェーダーにおいて,定数の整数乗を行う場合の繰り返し二乗法はループ展開されるか?

TL;DR 繰り返し二乗法の関数を定義し,指数に定数を指定した場合はループ展開される. しかし,pow(x, 5.0) のように指数が比較的小さい整数定数を指定した場合でも繰り返し二乗法をループ展開したものと同一のコード生成がされるため,自前で繰り返し二乗法…