ゲーム性を向上させる確率の考え方
指数と確率の考え方
>20%の5連撃を1発でも当てれば…なんて時にサクーッと概算できるようになっても
>2の10乗が1000って覚えとくと便利よね
>全部外れる確率は
>0.8の5乗 → 2の15乗の上一桁の数字だけほしい → 3
>だから7割くらいは1発当たるはず
この7割ってのは必ず5回連続攻撃して、その内7割の確率でヒットするという考え方
つまり20%、40%、80%、と言う確率は計算しやすい。又、5回攻撃前提でワンパック(大数の法則)になっている点も強く意識しておく事が大事
ワンボタンで一度に5回攻撃が出るRPGの戦闘みたいな場面を想像すると良い
<メモ>
桁と小数点位置の感覚がつかめていないと痛い目にあうので注意
指数関数はネイピア数を利用した指数関数と同相になる。対数関数とは逆関数の関係となる
(このグラフで考えると横軸に対する拡大縮小率で何回試行すれば充分かという考え方ができる筈。つまりネイピア数に対する係数がある筈)
第一回年末ジャンボと第二回年末ジャンボは写像が変わるので同相でなく不連続となる?
この場合、第一回と第二回を一緒にした写像を作れば連続となるが解は変わるか?
一桁のパーセンテージというのは、ほぼ大数の法則に支配されると考える。場の親であるなら
結果を安定させるために試行の単価(ランニングコスト)を安くして試行回数を増やす必要があると予想できる
「同相」という考え方は重要で強力
https://kotobank.jp/word/%E5%90%8C%E7%9B%B8-1189069
http://rikei-index.blue.coocan.jp/syugou/dousousya.html
unityのシェーダー忘備録1
unityのシェーダー忘備録
UnityのShader作成用抽斗
Cg/HLSL でシェーダープロパティーを参照する
https://docs.unity3d.com/ja/current/Manual/SL-PropertiesInPrograms.html
成分ごとの演算 (DirectX HLSL)
https://msdn.microsoft.com/ja-jp/library/bb509634(v=vs.85).aspx
tex2D等の組み込み関数 (DirectX HLSL)
https://msdn.microsoft.com/ja-jp/library/bb509611(v=vs.85).aspx
メモ:「ベクトル×行列」等の積の演算は「*」は無理でmul()関数を利用する
UnityObjectToClipPos等のビルトインシェーダーヘルパー機能
https://docs.unity3d.com/ja/current/Manual/SL-BuiltinFunctions.html
_Time等のビルトインのシェーダー変数
https://docs.unity3d.com/ja/current/Manual/SL-UnityShaderVariables.html
Shader Unity Support
VisualStudio2015にインストールすると.shaderファイルに対してコード補完やハイライト表示が利用できるようになる
(VisualStudio2017には現在未対応)
機能:
- 「.shader」内の「.cginc」ファイルのコード補完(UnityCG.cginc内の宣言や関数のコード補完に対応している)
- C/C++スタイルのキーワードハイライト表示
- 「.cginc」 「.shader」「.compute」ファイルをサポート
- 括弧のマッチング
https://marketplace.visualstudio.com/items?itemName=MarcinODev.ShaderUnitySupport
グラフィックスコマンドバッファ
https://docs.unity3d.com/ja/current/Manual/GraphicsCommandBuffers.html
コンピュートシェーダー
https://docs.unity3d.com/ja/current/Manual/ComputeShaders.html
GPU インスタンシング
https://docs.unity3d.com/ja/current/Manual/GPUInstancing.html
カスタムシェーダー GUI
https://docs.unity3d.com/ja/current/Manual/SL-CustomShaderGUI.html
[Unity] シェーダを書く準備
http://qiita.com/edo_m18/items/b13f6a51f16ec5d72419
用語
https://msdn.microsoft.com/ja-jp/library/ff604996(v=xnagamestudio.40).aspx
単語・用語
Tranforms position 変換座標
homogenous space 均質空間(相同空間)
homology 相同性 共通の祖先を持つ共通の構造。相似の対義語(相似と相同は明確に違う)
リファレンス
Unity - マニュアル: 内蔵のシェーダー include ファイル
Unity - マニュアル: シェーダーのデータタイプと精度
資料
レンダリングパス
https://docs.unity3d.com/ja/current/Manual/RenderingPaths.html
https://docs.unity3d.com/ja/current/Manual/SL-RenderPipeline.html
フレームデバッガ
https://docs.unity3d.com/ja/current/Manual/FrameDebugger.html
サーフェイスシェーダー
ライティングに作用するシェーダーを書く場合
unity独自のあらかじめ用意された組み込みサーフェイスシェーダーのパーツを利用、流用して楽に自作シェーダーを作成出来る
(unityのライティングを利用したシェーダーを1から自分で組むのは大変らしい)
https://docs.unity3d.com/ja/current/Manual/SL-SurfaceShaders.html
リットシェーダー → 自分で作ったシェーダーの事を指すらしい?
頂点シェーダーとフラグメントシェーダーのプログラミング
フラグメントシェーダーは#pragmaステートメントでどのシェーダー関数を使ってコンパイルするかを示す
それぞれのスニペットには最低でも頂点プログラムとフラグメントプログラムが含まれていなければいけない
https://docs.unity3d.com/ja/current/Manual/SL-ShaderPrograms.html
セマンティクス
セマンティクス (DirectX HLSL).
セマンティクスは、シェーダー入力またはシェーダー出力に付加されている文字列で、パラメーターの使用目的に関する情報を伝達します。セマンティクスは、シェーダー ステージ間で渡されるすべての変数に指定する必要が あります
https://msdn.microsoft.com/ja-jp/library/bb509647(v=vs.85).aspx
<要点>
VisualStudioでHLSLファイルに対してインテリセンスやオートコンプリートを利かせるにはdirectXをインストールする必要がある
UnityやVisualSutdioのインストール方法によってインストールし忘れする事があるので注意
入力セマンティックと出力セマンティックがある。出力は"out"として宣言する
必要なセマンティックが足りない場合、シェーダーは異常終了する
セマンティックは、データがどこで生成されたかを識別します。セマンティックは、シェーダーの入力と出力を識別するオプションの識別子です。
セマンティクスは、次のいずれかの位置に記述します。
- 構造体メンバーの後。
- 関数の入力引数リスト内の引数の後。
- 関数の入力引数リストの後。
組み込み関数 (DirectX HLSL)
https://msdn.microsoft.com/ja-jp/library/bb509611(v=vs.85).aspx
成分ごとの演算 (DirectX HLSL)
https://msdn.microsoft.com/ja-jp/library/bb509634(v=vs.85).aspx
フロー制御 (DirectX HLSL)
https://msdn.microsoft.com/ja-jp/library/bb509600(v=vs.85).aspx
POSITION は頂点位置、一般的には float3 か float4 です。
NORMAL は通常の頂点で、一般的には float3 です。
TEXCOORD0 は、第 1 の UV 座標で、一般的に、float2, float3, float4 です。
TEXCOORD1, TEXCOORD2, TEXCOORD3 は、それぞれ第 2、第 3、第 4 の UV 座標です。
TANGENT は、(ノーマルマッピングで使用される)接線ベクトルで、一般的には、 float4 です。
COLOR は、頂点ごとの色で、一般的には、 float4 です。
行列の積
ベクトルは行列で表記すると縦になる。ベクトルや行列は一般的に太字で表される
4次元のベクトルAは4行1列の行列Aと言える
この行列に対し転置行列を行うと下記のような1行4列となる
変数名の右肩にあるTはTransposeのTを表している
ベクトルを行列として扱い計算した例
<行列の積の計算例>
─□ = ─
□| = |
|─ = □
─| = ・
─□| = ・
─□□| = ・
─□□□| = ・
□|─□|─ = (□|)(─□|)─ = |・─ = ・|─ = □
行列の積は計算順を変えると結果が変わる点に注意。カッコでくくる場合でも計算順は変更できない。但し ・ は「数」であり行列の積計算に対して順番的に自由な位置に再配置できる点に留意
|□ = NG
||= NG
─ ─ = NG
行列の積を考える場合、左から順番に二項演算で計算していく。その際、各次数が重要になってくる。まず左項の列数と右項の行数の次数が合致しない場合、計算そのものが成立しない。以下、LaTexで書くのが大変なのでPocketCasによる出力で例を並べてみる