タグ

ブックマーク / qiita.com/masamin (4)

  • 【Unity】時間経過によるシェーダーの_Timeの精度低下を検証 - Qiita

    はじめに 経過時間の計算など、加算し続ける変数をfloat型にしてしまうと、結構すぐに意図しない挙動を引き起こすという話があります。 値が大きくなると分解能が下がるので、そこに小さな値を足しても情報落ちが発生してしまうのです。 詳しくはこちらの記事などを参考にしてください。 シェーダーではどうなる? スクリプトではdouble型にすれば良いですが、シェーダーの場合はそういうわけにはいきません。 Unityシェーダーの組み込み変数である_Timeからはシーンロード時点からの経過時間が取得できますが、float型です。 同じシーンを長時間プレイしていると、この値はどうなるのでしょうか? 恐らくスクリプトのdouble型の変数からシェーダーに値を渡しているので、値が大きくなっても情報落ちにはならないと推測できます。 しかし、分解能は下がっていくので、だんだんと動きがカクカクしていくことが予想され

    【Unity】時間経過によるシェーダーの_Timeの精度低下を検証 - Qiita
  • 【Unity】シェーダーでひびを入れる[その5:最終形] - Qiita

    これまで複数パターンを試したひび入れシェーダーをまとめて、シェーダープロパティで切り替えられるようにした最終形です。 シリーズ目次 これまでのソースコードから追加した処理、設定等 シェーダーバリアントでPN-Triangles適用有無を切り替え PN-Triangles適用しない場合はPN-Triangles用の計算を行うのは無駄なので、シェーダーバリアントで切り替えるようにしました。 Properties { [Toggle] _PN_TRIANGLES("PN-Triangles適用有無", Int) = 0 } SubShader { Pass { #pragma shader_feature_local _ _PN_TRIANGLES_ON struct patchConstParam { float edgeTessFactors[3] : SV_TessFactor; floa

    【Unity】シェーダーでひびを入れる[その5:最終形] - Qiita
  • 【Unity】ワイヤーフレームシェーダー - Qiita

    ポリゴンのワイヤーフレームを描画するシェーダーを作りました。 実現方法 ポリゴンの辺 ジオメトリシェーダーを使います。 ジオメトリシェーダーではポリゴンの三角形単位で処理を行えるので、XYZそれぞれを各頂点に対応させて1.0を代入する項目を作ります。 /** * [ジオメトリシェーダー用] * パラメータをジオメトリックシェーダーの返却値となるTriangleStreamに追加する */ void SetTriVerticesToStream(g2f param[3], inout TriangleStream<g2f> outStream) { [unroll] for (int i = 0; i < 3; i++) { // ワイヤーフレーム描画用 param[i].baryCentricCoords = float3(i == 0, i == 1, i == 2); outStrea

    【Unity】ワイヤーフレームシェーダー - Qiita
  • 【Unity】シェーダーでひびを入れる[その1:フラグメントシェーダー編] - Qiita

    3Dモデルに徐々にひびを入れる表現ができないかと考え、シェーダーで挑戦してみました。 テクスチャの準備が不要なものを目指しました。 その試行錯誤の過程を残しておきます。 シリーズ目次 どうやってひびを描くか シェーダーでひび模様を描きたいので、それっぽい図になる計算式を探します。 ボロノイパターンというものが使えそうです。 ひび模様を始め、きりんの模様だとか葉脈など、近い模様が自然界に複数存在するのだそうです。面白いですね。 シェーダーでのボロノイパターンの描き方はこちらが参考になります。 境界線の描き方 上記のコードで色分けしたパターンを描くことはできますが、今回は境界線を引いてひびに見立てたいです。 境界線の引き方はこちらが参考になりました。 これを3Dで行って立体的なボロノイパターンを描きます。 大まかに以下の流れとなります。 座標空間を任意の単位でセル分割する。 各セルに1つずつラ

    【Unity】シェーダーでひびを入れる[その1:フラグメントシェーダー編] - Qiita
  • 1