Linear01値からDepth値を求める

環境 Unity2022.3.1f1 概要 Linear01Depth(float z)の逆の関数です。参考のままです。 C#でテスト。同じ値になりました。 using UnityEngine; public class TestDepthValue : MonoBehaviour { Vector4 _ZBufferParams; void Start() { _ZBufferParams = Shad…

unsafeでアンマネージドな構造体でポインタアクセスとポリモーフィズムのテスト

環境 Unity2022.3.1f1 概要 構造体は値渡しとなりアクセスしづらいです。なのでunsafeでポインタを使って直接アクセスしたい。 そしてポリモーフィズム的な事をしたい。NativeArrayで一緒くたにアクセスしたい。 ポリモーフィズムの部分は具体的には以下のよ…

ジャイロ(Gyro)で視差

環境 Unity2022.3.1f1 概要 ジャイロを使用した以下のツイートのような事をしたかったので試してみました。 スマホをひっくり返すと後部が見えます。 プログラムには傾斜錐台を使用しています。 Loco Looper’s sweet holographic effect on iPhone and iPad.…

炎のシミュレーション2

環境 Unity2022.3.1f1 概要 以前作った炎のシミュレーションの外力部分をパーティクルにしたもののテストです。 パーティクルと同じ位置、見え方で炎を表示するために、シザープロジェクション行列を用いています。 炎のシェーダはフローマップとディティー…

NaiveSurfaceNetsで穴堀り

環境 Unity2022.2.14f1 概要 以前作ったNaiveSurfaceNetsでボックスを作り、球状に穴を開けるテストです。 基本的に以前のコードのままですが、ComputeShaderに以下の穴を開ける関数と法線を算出する関数を追加しています。 モグラゲームとか作れそうです。 …

ユニティちゃんがいっぱい

環境 Unity2022.2.14f1 概要 以前作ったAnimationInstancing的なコードとComputeShaderを用いたSpringBoneで作ったものです。 手法はだいたい同じですが、SpringBoneはSphere(髪やスカートについているSpringColliderの値を使用したもの)とのコリジョン判…

Gizmos.DrawFrustumの使い方

環境 Unity2022.2.14f1 概要 ビューフラスタム(視錐台)を表示するデバッグ機能の使い方 コード private void OnDrawGizmos() { Gizmos.color = Color.cyan; Gizmos.matrix = Matrix4x4.TRS(_camera.transform.position, _camera.transform.rotation, new V…

ニット調画面

環境 Unity2022.2.14f1 概要 画面をニット調にするテストです。 コード using UnityEngine; using UnityEngine.Rendering; public class Knit : MonoBehaviour { [SerializeField] private Material _material = null; [SerializeField] private int _tileSi…

炎のシミュレーション

環境 Unity2022.2.14f1 概要 炎のシミュレーションのテストです。 参考の動画を見つつ、ナビエストークスを「poisson separable filter」を使用して行ってみました。 正直正しいのかわからないです。 ヤコビ反復32回分の代替になると解説している気がする。 …

GradientからTextureを生成

環境 Unity2022.2.14f1 概要 Gradientからテクスチャを生成するエディタ拡張を作成してみました。 コード using UnityEngine; using UnityEditor; using System.IO; public class GenerateGradiantTextureWindow : EditorWindow { [MenuItem("Tools/Generate…

フェイクディスコライト

環境 Unity2022.2.14f1 概要 フェイクポイントライトにCubeMapを使用したものです。 Sphereモデルを影響範囲までスケールしたものにシェーダを適用します。 こちらはフェイクなので遮蔽されなかったりしますが、「PRINCIPLES」のランタンのような使い方は効…

SDFの視覚化(StackedPlane)

環境 Unity2022.2.14f1 概要 板ポリを視線奥方向に重ねることで、RayMarchingをしないで視覚化するという手法のテストです。 参考の記事に記載されているように、角ばったものや、3DTextureの視覚化には向かないようです。 雲や霧状のものの表現には使えそう…

SDFの視覚化(NaiveSurfaceNets)

環境 Unity2022.2.14f1 概要 NaiveSurfaceNetsを使用して、SDFの3DTextureのポリゴン化を行ってみました。 参考のqiitaのコードをComputeShaderで行ってみた感じです。 マイフレーム実行しても、実用的な速度で処理されているようです。 SDFは参考のGithubに…

batファイルでプリプロセッサを実行してglslをhlslに変換

環境 VisualStudio2019Community 概要 VSに付属しているcl.exeを使用してプリプロセッサを実行します。 シェーダのdefineは貧弱だったりするので、先にclを実行して前処理を済ませたりします。 後は独自のスクリプト言語を作った時の前処理に使用するでしょ…

ShaderGraphでVoronoiエッジ距離

環境 Unity2022.2.2f1 ShaderGraph14.0.4 概要 CustomFunctionノードを使用して、標準のvoronoiノードにプラスしてエッジまでの距離を返すようにしたノード用の関数を作成してみました。 ※for文を[unroll]しないと自分の環境だとバグるので入れています。 …

描画順に依存しない半透明処理(OIT)

環境 Unity2022.2.2f1 概要 画像は複数のオブジェクトがあるように見えますが1つです。 Unityで生成した複数のオブジェクトのMeshをCombineMeshして1つのMeshにしています。 Unityだと通常、半透明はオブジェクト単位でソートされ、画面奥からZ書き込みな…

フェイクスポットライト

環境 Unity2022.2.2f1 概要 フェイクスポットライトの実装テストです。 法線を考慮していません。 デカール処理がOFFの場合ならもっとシンプルになりますが、面倒なので分けていません。 円錐の頂点部分が原点、底がZ方向で円の中心部分が0.0,0.0,1.0、半径…

SmokeLighting(SixWayLightmap)

環境 Unity2022.2.2f1 概要 UnityがHDRPでVfxGraphに実装した「Six Way Smoke Lit」的なもののテストです ポイントライトはRenderModeを「Important」に設定しています QuadのGameObjectを作成して、マテリアルを設定すれば確認できます テクスチャは参考のU…

ディレクショナルライトの方向

環境 Unity2022.2.2f1 概要 _WorldSpaceLightPos0で得るディレクショナルライトの方向は逆を向いている

Houdini ApprenticeでVAT出力

環境 Houdini Apprentice 19.5.534 python3.9 Fbx Sdk 概要 Houdiniでパーティクルを独自VATとしてExr形式のファイルに出力します Unity上で再生できるプログラムを作ったところ、同じように動作しました パーティクルは参考の動画をみて作成しました。バー…

Houdini ApprenticeでFbx出力

環境 Houdini Apprentice 19.5.534 python3.9 Fbx Sdk 概要 FbxSdkを使用してGeometryを出力してみました。 位置と法線のみです。 Normalノードを通さないと法線も取れないの? import FbxCommon from fbx import * node = hou.pwd() geo = node.geometry() …

Python Fbx Sdk で立方体の作成

環境 python3.9 Fbx Sdk 概要 Python SDK 2020.3.2のsamplesのExportScene03.pyから立方体の作成部分を抽出したものです サンプルのコードだとマテリアルが出力されないので修正 CreateTexture()の呼び出し位置をNodeに接続した後に変えています このコード…

プログラマによる初めてのHoudini Apprenticeメモ

環境 Houdini Apprentice19.5.493 概要 Houdiniはノードを組み合わせてプロシージャルに色々できる。 自分は主にVFXの為に使用する。 Apprenticeは無料版。pythonで独自データ書き出しができる インストール 実行ファイルはライセンス毎に分かれていない。イ…

ワードリストから正規表現のパターンを生成

環境 Visual C++ 2019 概要 ワードリスト(配列)から正規表現のパターンを生成します。 PerlやRubyにはあるけどもc++が見つからなかったので参考を基に作成してみました。 下のコードのワードリストの結果だと (?:tange(?:rine|lo)|pomelo|orange|l(?:ime|e…

ComputeShaderでSpringBone

環境 Unity2022.2.2f1 概要 UnityちゃんのSpringBoneの動きをComputeShaderで実装してみました。 (SDUnityちゃんに付属しているもの) 画像は白いのが本家のもの、Gizumoで表示されているのが、ComputeShaderで実装したものです。 (もう一つはテストでCPUでM…

Matrix4x4はカラム順に入っている

環境 Unity2022.2.2f1 概要 カラム(列/縦)順に入っています。 ComputeShaderでByteAddressBufferでアクセスした場合、勝手に転置してしまいます。 仕方ない面倒なのでtransposeしています。まぁ逆掛けしたり、_m30_m31_m32でアクセスするのもややこしいの…

Editor環境でAnimatorからAnimationClipを取得。LayerやAvaterMaskの情報も

環境 Unity2022.2.2f1 概要 Editor環境でAnimatorからAnimationClipを取得します。所属するLayerやAvaterMaskの情報も取得します。 runtimeAnimatorControllerをAnimatorControllerに変換することが重要でした。 コード var animController = _animator.runt…

メモリ状態比較用エディタ拡張

環境 Unity2022.2.1f1 概要 プログラマ以外がMemoryProfilerを使うのも難しい事だろうと思い、簡単に比較できるように作ってみました。 コードは下の方にあります。 手順 適当なシーンを開く 今回の例ではNewSceneにCubeを1つ追加したものを使用しました。 …

音階波形の生成

環境 Unity2021.3.4f1 概要 プロシージャルに音階の波形を生成して、かえるのうたを流してみました。 そのままだとノイズがひどいので、AudioMixerを作成してLowpassフィルタを追加して値調整するとノイズが軽減されます。 using UnityEngine; [RequireCompo…

フルスクリーンでレイマーチ(RayMarching)

環境 Unity2021.3.4f1 概要 フルスクリーンでRayMarchingをやってみました。 この10個のメタボールからなる形状とその影はRayMarchingで描画しています。 黄色の床はUnityのPlaneのGameObjectです。 「3D Objects > Quad」でQuadを作成して、カメラの階層に…