うにてぃブログ

主にUnityとC#に関する記事を書いていきます

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

【Unity】ArgumentOutOfRangeException: Count must be in the range of 0 to 1023.

Note: You can only draw a maximum of 1023 instances at once. ドキュメントにもあるように Graphics.DrawMeshInstanced で一度に生成できるインスタンス数の上限は 1023 となっており、1023を超える数を生成すると以下のエラーが表示される ArgumentOutOf…

【Unity】Graphics.DrawMeshInstanced を利用してみる

Graphics.DrawMeshInstanced は GPU Instancing を利用してメッシュを不要なゲームオブジェクトを作成するオーバーヘッドなしで メッシュを描画することができます 座標と Mesh、Material を指定するだけなのでかなりシンプルに利用することができます using…

【Unity】DrawMeshInstanced does not support the shader 'ShaderName' because it does not read any instanced properties. Try switching to DrawMeshInstancedProcedural if the shader is doing procedural instancing.

Graphics.RenderMeshInstanced を利用していたところ以下のエラーが出て原因を探していたところ DrawMeshInstanced does not support the shader 'ShaderName' because it does not read any instanced properties. Try switching to DrawMeshInstancedProce…

【Unity】Graphics.RenderMeshIndirect を利用してみる

Graphics.RenderMeshIndirect を利用することで、CPUを経由して描画するのではなく、GPUを直接利用して描画することができるため、大量の草などを軽く描画することができます 今回は10個の草を描画してみます 以下がスクリプトで、バッファを複数利用して描…

【C#】配列のIndexを最後から指定したり、範囲を指定して取得する

C#

C#8.0 から Index型とRange型が追加されたようで、以下にあるように範囲指定や、最後からn番目の指定ができるようになりました var array = new []{ 1, 2, 3, 4, 5}; array[1..^1]; // 1番目から最後の1つ手前 (2, 3, 4) array[1..]; // 1番目から最後 (2…

【Unity】GBuffer に書き込む内容を変更する

環境: Unity2021.3.16f1 URP12.0.8 hacchi-man.hatenablog.com こちらはすでにURPのカスタマイズができる状態にしてることを前提に話を進めます Unity の GBuffer の内容は以下のようになっており GBuffer0、ARGB32 フォーマット: ディフューズ色 (RGB)、オ…

【Unity】FullScreenShaderGraph で GBuffer を参照する

環境: Unity2022.2.b16, URP14.0.3 Exposed を false にした _GBuffer0, _GBuffer1, _GBuffer2 を Properties に定義する ことにより ShaderGraph で GBuffer を参照できるようになります Texture を参照する際も SampleTexture2D ノードを利用するだけで問…

【Unity】RendererFeature の Shader で GBuffer を利用する

環境: Unity2021.3.16f1, URP12.1.8 Shader 側で GBuffer + Depth を利用するためには、特にスクリプト側で設定する必要は無く、 _CameraDepthTexture _GBuffer0 _GBuffer1 _GBuffer2 を定義するだけで参照することができる Shader "Hidden/GBufferFullScree…

【Unity】あるオブジェクトを中心に回転させ、処理中に半径を変えられるスクリプト

hacchi-man.hatenablog.com 以前の処理では途中で半径を変えられなかったため、半径を変える処理を追加したものが以下になります using UnityEngine; public class RoundTarget : MonoBehaviour { [SerializeField] private Transform _center; [SerializeFi…

【Unity】JobSystems のエラー箇所を知る

デフォルトの設定では JobSystems 側でエラーログが発生したとしても以下のように細かい情報が表示されない System.IndexOutOfRangeException: Index {0} is out of range of '{1}' Length. This Exception was thrown from a job compiled with Burst, whic…

【Unity】JobSystem を使ってテクスチャを生成してみる

Jobsystem を利用すると処理時間が早くなるということなので、実際にメインスレッドと JobSystem でノイズテクスチャを生成してみました メインスレッド private void CreateTexture(int size) { var texture = new Texture2D(size, size, TextureFormat.RGB…

【Unity】一部メソッドで Physics.queriesHitBackfaces が動作しない

https://hacchi-man.hatenablog.com/entry/2023/01/14/220000hacchi-man.hatenablog.com 上記の記事で書いたように、Unity2021、2022では Physics.queriesHitBackfaces = true だとしても一部メソッドを除いて正しい挙動を行わない そのため、Unity2021、202…

【Unity】Raycast 時に MeshCollider の裏側でもヒットするようにする

Physics.queriesHitBackfaces を利用すれば Mesh の裏側から Ray を飛ばしてもヒットするとあったので試してみました 検証 処理はこちら、Physics.Raycast の前に Physics.queriesHitBackfaces = true をすることで裏面もヒットするようにしています private…

【Unity】TextMeshPro で一文字ずつ Animation させる

using System.Collections; using TMPro; using UnityEngine; [RequireComponent(typeof(TextMeshProUGUI))] public class TextMove : MonoBehaviour { [SerializeField] private float _interval = 0.25f; [SerializeField] private float _moveTime = 0.5f…

【Unity】Image で反射しているような表現をする

床に写ったような表現をさくっとできるコンポーネントを作成しました 現状一番下を0にしてもうっすらとは見えてしまうので、見えてしまう最大範囲を変える場合は対応が必要になります using System.Collections.Generic; using UnityEngine; using UnityEngi…

【Unity】Image の Outline っぽいものを作成する

BaseMeshEffect を用いて同じ画像をスケールを変えて複製することで Outline っぽいものを再現しています using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; [RequireComponent(typeof(Image))] public class OutlineImage : Bas…

【Unity】Perlin worms を試してみる

洞窟生成アルゴリズムとして利用されている (多分) Perlin worms を試してみたくて Unity で簡単なものを作成してみました 今回複数のフレーム をまたぐ処理がうまいこといかなかったのでそちらに関しては実装していません またシード固定のために Mathf.Per…

【Unity】ライトが強いと白飛びするのをなんとかしてみる【Deferred】

【環境】 Unity2021.3.16f1, URP12.1.8, Deferred 以前 は Forward で確認をしましたが、今回は Deferred でライトの白飛びをなんとかしてみます Deferred では Forward とはライトの処理箇所が異なっており、com.unity.render-pipelines.universal/Shaders/…

【Unity】ライトが強いと白飛びするのをなんとかしてみる【Forward】

【環境】 Unity2021.3.16f1, URP12.1.8, Forward 通常 Light の Intensity を大きくすれば遠くまで明るくできるが、近い部分がライトの色が強く反映されてしまう これを URP をカスタマイズすればなんとかできるんじゃないかと思ったのでやってみる URP のカ…

【Unity】URP をカスタマイズする

Library/PackageCache/com.unity.render-pipelines.universal@*.*.* を Packages/ 以下に移動することで URP をカスタマイズできるようになります フォルダ名は参照がある場合@があると既存のやつがエラーになるので com.unity.render-pipelines.universal …

【Unity】RendererFeature を利用した複数地点のソナー表現

https://hacchi-man.hatenablog.com/entry/2023/01/05/220000hacchi-man.hatenablog.com では1地点のみのソナー表現でしたが、Shader側に複数の座標パラメータを渡すことにより複数地点でのソナー表現ができるようになりました パラメータをセットするのは何…

【Unity】RendererFeature を利用したソナー表現

qiita.com 上記の記事を参考に RendererFeature の FullScreen で利用できるソナー表現を作成しました ※ Unity2021 URP12.1.8 Shader "Hidden/SonarImageEffectShader" { SubShader { Cull Off ZWrite Off ZTest Always Pass { HLSLPROGRAM #pragma vertex F…

【Unity】ShaderGraph を利用した FullScreen ソナー表現

qiita.com 上記の記事を参考に RendererFeature で利用できるソナー表現を作成しました ※ Unity2022 URP14 RendererFeature を利用することで特定の Material を利用する必要がなく画面全体に効果を適応することができます アセットはこちらからDLできます S…

【Unity】ShaderGraph を利用したソナー表現

qiita.com 上記の記事を参考に ShaderGraph でソナー表現ができるようにしてみました 詳しい説明は記事の方でご確認ください アセットはこちらからDLできます

【Unity】ShaderGraph の ShaderName を変更する

Shader 名の下部分をダブルクリックすることでShaderName を変更できるようになります / で区切ることで、階層を切ることも可能になっています

【Unity】FPS を固定する

Unity は初期状態で FPS は Every V Blank に設定されており、プラットフォームのデフォルトFPSになってしまいます そのため、固定する場合には Application.targetFrameRate に指定した FPS を設定する必要があります またドキュメントにも記載してあるよう…