{"id":935,"date":"2017-10-31T21:33:15","date_gmt":"2017-10-31T12:33:15","guid":{"rendered":"http:\/\/naochang.me\/?p=935"},"modified":"2017-11-05T23:53:33","modified_gmt":"2017-11-05T14:53:33","slug":"%e3%82%ac%e3%83%a9%e3%82%b9%e3%81%ab%e9%99%8d%e3%82%8b%e9%9b%a8","status":"publish","type":"post","link":"https:\/\/stacstar.jp\/blog\/?p=935","title":{"rendered":"Shader\u3067\u30ac\u30e9\u30b9\u306b\u964d\u308b\u96e8"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"\/blog\/wp-content\/uploads\/rain_shader.gif\" alt=\"\" width=\"600\" height=\"275\" class=\"aligncenter size-full wp-image-947\" \/><\/p>\n<p>\u96e8\u304c\u6700\u8fd1\u591a\u304f\u3001\u7a93\u3092\u898b\u3066\u3044\u3066\u3001\u3053\u308cShader\u3067\u3067\u304d\u308b\u304b\u306a\u3068\u601d\u3044\u3001\u7fd2\u4f5c\u3002<br \/>\n\u3061\u3087\u3063\u3068\u91cd\u3044\u306e\u3067\u5b9f\u7528\u7684\u3067\u306f\u306a\u3044\u304b\u306a\u3002<\/p>\n<p><!--more--><\/p>\n<p>\u307e\u305a\u306f\u3001Texture2D\u306b\u96e8\u7c92\u3092\u66f8\u304d\u8fbc\u307f\u3002\u6a2a\u306b\u79fb\u52d5\u3059\u308b\u91cf\u3092\u8272\u306eR\u306b\u5272\u308a\u5f53\u3066\u30010.5\u3092\u79fb\u52d5\u91cf0\u3068\u3057\u3066\u30010\u306a\u3089\u5de6\u30011\u306a\u3089\u53f3\u306b\u3002<br \/>\n\u540c\u69d8\u306bG\u3092\u7e26\u65b9\u5411\u3002\u9752\u306f\u96e8\u7c92\u306e\u7acb\u4f53\u611f\u306e\u3088\u3046\u306a\u611f\u3058\u3067\u4f7f\u3044\u305f\u3044\u306e\u3067\u5916\u5074\u3092\u9752\u3001\u771f\u3093\u4e2d\u30920\u306b\u3002<br \/>\nR\u304c0.5, G\u304c0.5, B\u304c0\u304c\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u72b6\u614b\u306a\u306e\u3067\u3001\u9ec4\u8272Color(0.5f, 0.5f, 0f)\u304c\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u72b6\u614b\u3002<br \/>\n<img loading=\"lazy\" decoding=\"async\" src=\"\/blog\/wp-content\/uploads\/rain_trans_tex.png\" alt=\"\" width=\"600\" height=\"142\" class=\"aligncenter border size-full wp-image-937\" \/><\/p>\n<p>\u81ea\u8eab\u306e\u63cf\u753b\u306e\u969b\u306b\u3001\u305d\u306e\u80cc\u666f\u306b\u3042\u308b\u3082\u306e\u3092\u4f7f\u3044\u305f\u3044\u6642\u306f<blockquate>GrabPass{}<\/blockquate>\u3068\u66f8\u304f\u3068\u80cc\u666f\u306e\u90e8\u5206\u3092\u30c6\u30af\u30b9\u30c1\u30e3\u3068\u3057\u3066\u5229\u7528\u3067\u304d\u308b\u3002\u30b9\u30af\u30ea\u30fc\u30f3\u5ea7\u6a19\u306ew\u3067\u5272\u308b\u3068\u305d\u306e\u4f4d\u7f6e\u306e\u30ab\u30e9\u30fc\u304c\u53d6\u308c\u308b\u306e\u3067\u305d\u308c\u3092\u5909\u5f62\u7528\u306e\u30c6\u30af\u30b9\u30c1\u30e3\u306eRG\u3092\u4f7f\u3063\u3066\u79fb\u52d5\u3055\u305b\u308b\u3068\u3053\u3093\u306a\u611f\u3058\u3002<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"\/blog\/wp-content\/uploads\/rain_trans_rg.gif\" alt=\"\" width=\"400\" height=\"250\" class=\"aligncenter size-full wp-image-938\" \/><\/p>\n<p>\u3053\u308c\u306b\u9752\u306e\u5024\u3092\u4f7f\u3063\u3066\u3001\u30d5\u30c1\u306e\u65b9\u3092\u5927\u304d\u304f\u66f2\u3052\u308b\u3088\u3046\u306b\u3059\u308b\u3068\u3053\u3093\u306a\u611f\u3058\u3002<br \/>\n<img loading=\"lazy\" decoding=\"async\" src=\"\/blog\/wp-content\/uploads\/rain_trans_rgb.gif\" alt=\"\" width=\"400\" height=\"250\" class=\"aligncenter size-full wp-image-939\" \/><br \/>\n\u96e8\u7c92\u3092\u901a\u3057\u3066\u898b\u305f\u3088\u3046\u306b\u6b6a\u3093\u3060\u611f\u3058\u304c\u51fa\u305f\u3002<\/p>\n<p>\u3042\u3068\u306f\u9752\u3044\u90e8\u5206\u304c\u5f37\u3044\u3068\u3053\u308d\uff08\u30d5\u30c1\uff09\u306e\u90e8\u5206\u306e\u30b3\u30f3\u30c8\u30e9\u30b9\u30c8\u3092\u9ad8\u304f\u3059\u308b\u3002<a href=\"\/blog\/?p=924#more-924\" rel=\"noopener\" target=\"_blank\">\u8f1d\u5ea6\u3068\u30b3\u30f3\u30c8\u30e9\u30b9\u30c8\u306f\u6628\u65e5\u306e\u30a8\u30f3\u30c8\u30ea\u30fc\u306b\u3042\u308b\u306e\u3068\u540c\u3058<\/a>\u3002<br \/>\n<img loading=\"lazy\" decoding=\"async\" src=\"\/blog\/wp-content\/uploads\/rain_trans_rgb_contrast.gif\" alt=\"\" width=\"400\" height=\"250\" class=\"aligncenter size-full wp-image-942\" \/><\/p>\n<p>\u9752\u306e\u5024\u3092\u4f7f\u3063\u3066\u30d5\u30c1\u306e\u90e8\u5206\u306e\u660e\u308b\u3055\u3082\u3061\u3087\u3063\u3068\u4e0b\u3052\u308b\u3068\u3053\u3093\u306a\u611f\u3058\u3002<br \/>\n<img loading=\"lazy\" decoding=\"async\" src=\"\/blog\/wp-content\/uploads\/rain_trans_rgb_contrast_shadow.gif\" alt=\"\" width=\"400\" height=\"250\" class=\"aligncenter size-full wp-image-943\" \/><\/p>\n<p>\u3042\u3068\u306f\u6642\u9593\u304c\u7d4c\u3064\u3068\u96e8\u3067\u3044\u3063\u3071\u3044\u306b\u306a\u3063\u3066\u3057\u307e\u3046\u306e\u3067\u3001\u307b\u3069\u3044\u3044\u611f\u3058\u3067\u6d88\u3057\u3066\u3044\u304f\u3002\u305d\u306e\u969b\u306b\u3001Color.Lerp()\u306e\u7b2c3\u5f15\u6570\u306b\u8272\u306e\u9752\u3092\u3046\u307e\u304f\u3064\u304b\u3063\u3066\u5185\u5074\u304b\u3089\u6d88\u3048\u3066\u3044\u304f\u3088\u3046\u306b\u3057\u3066\u307f\u305f\u3089\u3044\u3044\u611f\u3058\u3060\u3063\u305f\u3002\u6c34\u6ef4\u306e\u539a\u307f\u304c\u8584\u304f\u306a\u3063\u3066\u3044\u304f\u3088\u3046\u306a\u30a4\u30e1\u30fc\u30b8(?)<br \/>\n\u6bce\u56de\u547c\u3076\u3068\u91cd\u3044\u306e\u3068\u3059\u3050\u6d88\u3048\u3066\u3057\u307e\u3046\u306e\u3067\u300110\u30d5\u30ec\u30fc\u30e0\u306b1\u56de\u3050\u3089\u3044\u547c\u3093\u3067\u308b\u3002<\/p>\n<pre class=\"brush: unitycsharp; title: ; notranslate\" title=\"\">\r\n\/\/\/ &lt;summary&gt;\r\n\/\/\/ \u79fb\u52d5\u65b9\u5411\u306b\u99b4\u67d3\u307e\u305b\u308b\u3002\r\n\/\/\/ &lt;\/summary&gt;\r\nvoid Blend() {\r\n\tfor (int y = 0; y &lt; this.rainTex.height; ++y) {\r\n\t\tfor (int x = 0; x &lt; this.rainTex.width; ++x) {\r\n\t\t\tColor c = this.rainTex.GetPixel(x, y);\r\n\r\n\t\t\tc = Color.Lerp(c, this.orgColor, 0.1f * (1f - c.b + 0.05f));\r\n\r\n\t\t\tthis.rainTex.SetPixel(x, y, c);\r\n\t\t}\r\n\t}\r\n}\r\n<\/pre>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"\/blog\/wp-content\/uploads\/rain_shader.gif\" alt=\"\" width=\"600\" height=\"275\" class=\"aligncenter size-full wp-image-947\" \/><\/p>\n<p>\u5b8c\u6210\uff01<br \/>\nVideoPlayer\u306e\u624b\u524d\u306b\u7f6e\u3044\u3066\u898b\u305f\u3002\u6674\u308c\u306e\u65e5\u306e\u30d3\u30c7\u30aa\u3060\u3051\u3069\u96e8\u3063\u307d\u304f\u306a\u308a\u307e\u3057\u305f\u3002<br \/>\n\u96fb\u8eca\u306b\u5408\u308f\u308b\u305f\u3081\u3001Offset\u3092\u4f7f\u3063\u3066\u6d41\u3057\u3064\u3064\u3001\u96e8\u7c92\u306e\u8ecc\u8de1\u3092\u3064\u3051\u3088\u3046\u3068\u8a66\u3057\u305f\u3051\u3069\u3001\u304b\u306a\u308a\u91cd\u304f\u306a\u3063\u3066\u3057\u307e\u3063\u305f\u306e\u3068\u3001\u898b\u305f\u76ee\u3082\u3044\u307e\u3044\u3061\u3060\u3063\u305f\u306e\u3067\u3084\u3081\u305f\u3002<\/p>\n<p>RainMaker.cs<\/p>\n<pre class=\"brush: unitycsharp; title: ; notranslate\" title=\"\">\r\nusing UnityEngine;\r\n\r\npublic class RainMakaer : MonoBehaviour {\r\n\t\/\/\/ &lt;summary&gt;\r\n\t\/\/\/ \u30de\u30a6\u30b9\u306e\u79fb\u52d5\u5947\u8de1\u3092\u8a18\u9332\u3057\u3066\u3044\u308b\u30c6\u30af\u30b9\u30c1\u30e3\u3092\u8868\u793a\u3057\u305f\u3044\u5834\u5408\u306b\u8a2d\u5b9a\u3002\r\n\t\/\/\/ &lt;\/summary&gt;\r\n\t&#x5B;SerializeField]\r\n\tRenderer previewRenderer;\r\n\r\n\t\/\/\/ &lt;summary&gt;\r\n\t\/\/\/ \u30de\u30c6\u30ea\u30a2\u30eb\u3068\u30c6\u30af\u30b9\u30c1\u30e3\u3002\r\n\t\/\/\/ &lt;\/summary&gt;\r\n\tMaterial material;\r\n\tTexture2D rainTex;\r\n\r\n\t\/\/\/ &lt;summary&gt;\r\n\t\/\/\/ \u96e8\u7c92\u306e\u534a\u5f84\u3002\r\n\t\/\/\/ &lt;\/summary&gt;\r\n\t&#x5B;SerializeField]\r\n\tfloat dropR = 6f;\r\n\r\n\t\/\/\/ &lt;summary&gt;\r\n\t\/\/\/ \u30d9\u30fc\u30b9\u306e\u8272\u3002\r\n\t\/\/\/ &lt;\/summary&gt;\r\n\tColor orgColor = new Color(0.5f, 0.5f, 0f);\r\n\r\n\t\/\/\/ &lt;summary&gt;\r\n\t\/\/\/ Start.\r\n\t\/\/\/ &lt;\/summary&gt;\r\n\tvoid Start() {\r\n\t\tthis.material = this.GetComponent&lt;Renderer&gt;().material;\r\n\r\n\t\tthis.rainTex = new Texture2D(400, 400);\r\n\t\tthis.rainTex.wrapMode = TextureWrapMode.Repeat;\r\n\r\n\t\t\/\/ \u8272\u3092\u57cb\u3081\u308b\r\n\t\tColor&#x5B;] lineColors = new Color&#x5B;this.rainTex.width];\r\n\t\tfor (int i = 0; i &lt; lineColors.Length; ++i) lineColors&#x5B;i] = this.orgColor;\r\n\r\n\t\tfor (int y = 0; y &lt; this.rainTex.height; ++y)\r\n\t\t\tthis.rainTex.SetPixels(0, y, this.rainTex.width, 1, lineColors);\r\n\r\n\t\tthis.rainTex.Apply();\r\n\r\n\t\t\/\/ \u30c6\u30af\u30b9\u30c1\u30e3\u8a2d\u5b9a\r\n\t\tthis.material.SetTexture(&quot;_TransTex&quot;, this.rainTex);\r\n\t\tthis.material.SetTextureScale(&quot;_TransTex&quot;, new Vector3(1f, this.transform.localScale.y \/ this.transform.localScale.x));\r\n\r\n\t\t\/\/ \u30d7\u30ec\u30d3\u30e5\u30fc\u3059\u308b\u5834\u5408\r\n\t\tif (this.previewRenderer != null)\r\n\t\t\tthis.previewRenderer.material.mainTexture = this.rainTex;\r\n\t}\r\n\t\r\n\t\/\/\/ &lt;summary&gt;\r\n\t\/\/\/ Update.\r\n\t\/\/\/ &lt;\/summary&gt;\r\n\tvoid Update() {\r\n\t\tif (Time.frameCount % 10 == 0)\r\n\t\t\tthis.Blend();\r\n\t\tthis.DropRain(Random.Range(0, this.rainTex.width + 1), Random.Range(0, this.rainTex.height + 1), 10);\r\n\t\tthis.rainTex.Apply();\r\n\t}\r\n\r\n\t\/\/\/ &lt;summary&gt;\r\n\t\/\/\/ \u79fb\u52d5\u65b9\u5411\u306b\u99b4\u67d3\u307e\u305b\u308b\u3002\r\n\t\/\/\/ &lt;\/summary&gt;\r\n\tvoid Blend() {\r\n\t\tfor (int y = 0; y &lt; this.rainTex.height; ++y) {\r\n\t\t\tfor (int x = 0; x &lt; this.rainTex.width; ++x) {\r\n\t\t\t\tColor c = this.rainTex.GetPixel(x, y);\r\n\r\n\t\t\t\tc = Color.Lerp(c, this.orgColor, 0.1f * (1f - c.b + 0.05f));\r\n\r\n\t\t\t\tthis.rainTex.SetPixel(x, y, c);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t\/\/\/ &lt;summary&gt;\r\n\t\/\/\/ \u96e8\u7c92\u3092\u843d\u3068\u3059\u3002\r\n\t\/\/\/ &lt;\/summary&gt;\r\n\tvoid DropRain(int centerX, int centerY, int num = 1) {\r\n\t\tfloat r = this.dropR * Random.Range(0.75f, 1.25f);\r\n\t\tfor (int n = 0; n &lt; num; ++n) {\r\n\t\t\tfor (int y = (int)-r; y &lt;= r; ++y) {\r\n\t\t\t\tfor (int x = (int)-r; x &lt;= r; ++x) {\r\n\t\t\t\t\tint ptX = centerX + x;\r\n\t\t\t\t\tint ptY = centerY + y;\r\n\t\t\t\t\tfloat distance = Mathf.Sqrt(x * x + y * y);\r\n\r\n\t\t\t\t\tif (distance &lt; r) {\r\n\t\t\t\t\t\tfloat moveX = 0.5f * (x \/ r);\r\n\t\t\t\t\t\tfloat moveY = 0.5f * (y \/ r);\r\n\t\t\t\t\t\tfloat moveZ = (distance \/ r);\r\n\t\t\t\t\t\tColor c;\r\n\t\t\t\t\t\tColor currentC = this.rainTex.GetPixel(ptX, ptY);\r\n\r\n\t\t\t\t\t\tc = new Color(moveX + 0.5f, moveY + 0.5f, moveZ);\r\n\r\n\t\t\t\t\t\t\/\/ \u9752\u306f\u30a8\u30c3\u30b8\u306b\u306a\u308b\u306e\u3067\u4e00\u5b9a\u4ee5\u4e0a\u306e\u5834\u5408\u306f0\u306b\u3057\u3066\u3057\u307e\u3046\r\n\t\t\t\t\t\tif (currentC.b &gt; 0.2f)\r\n\t\t\t\t\t\t\tc.b = Mathf.Min(currentC.b, c.b);\r\n\r\n\t\t\t\t\t\tthis.rainTex.SetPixel(ptX, ptY, c);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n<\/pre>\n<p>Rain.shader<\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\r\nShader &quot;Rain&quot; {\r\n\tProperties {\r\n\t\t_Color (&quot;Color&quot;, Color) = (1,1,1,1)\r\n\t\t_RainContrast (&quot;Contrast&quot;, Range(0.0, 1.0)) = 0.15\r\n\t\t_MainTex (&quot;Albedo (RGB)&quot;, 2D) = &quot;white&quot; {}\r\n\t\t_TransTex (&quot;Translation (RGB)&quot;, 2D) = &quot;white&quot; {}\r\n\t\t_Glossiness (&quot;Smoothness&quot;, Range(0,1)) = 0.5\r\n\t\t_Metallic (&quot;Metallic&quot;, Range(0,1)) = 0.0\r\n\t}\r\n\tSubShader {\r\n\t\tTags {\r\n\t\t\t&quot;RenderType&quot; = &quot;Transparent&quot;\r\n\t\t\t&quot;Queue&quot; = &quot;Transparent&quot;\r\n\t\t}\r\n\t\tLOD 200\r\n\r\n\t\tGrabPass{}\r\n\t\t\r\n\t\tCGPROGRAM\r\n\t\t\/\/ Physically based Standard lighting model, and enable shadows on all light types\r\n\t\t#pragma surface surf Standard fullforwardshadows alpha\r\n\r\n\t\t\/\/ Use shader model 3.0 target, to get nicer looking lighting\r\n\t\t#pragma target 3.0\r\n\r\n\t\tsampler2D _MainTex;\r\n\r\n\t\tstruct Input {\r\n\t\t\tfloat2 uv_MainTex;\r\n\t\t\tfloat2 uv_TransTex;\r\n\t\t\tfloat4 screenPos;\r\n\t\t};\r\n\r\n\t\thalf _Glossiness;\r\n\t\thalf _Metallic;\r\n\t\tfixed4 _Color;\r\n\t\tsampler2D _GrabTexture;\r\n\t\tsampler2D _TransTex;\r\n\t\tfloat _RainContrast;\r\n\r\n\t\t\/\/ Add instancing support for this shader. You need to check 'Enable Instancing' on materials that use the shader.\r\n\t\t\/\/ See https:\/\/docs.unity3d.com\/Manual\/GPUInstancing.html for more information about instancing.\r\n\t\t\/\/ #pragma instancing_options assumeuniformscaling\r\n\t\tUNITY_INSTANCING_CBUFFER_START(Props)\r\n\t\t\t\/\/ put more per-instance properties here\r\n\t\tUNITY_INSTANCING_CBUFFER_END\r\n\r\n\t\t\/\/\/ RGB to YCbCr\r\n\t\tfixed3 RGB2YCbCr(fixed3 c) {\r\n\t\t\treturn fixed3(\r\n\t\t\t\t0.256788 * c.r + 0.504129 * c.g + 0.097906 * c.b + 0.0625,\r\n\t\t\t\t-0.148223 * c.r - 0.290993 * c.g + 0.439216 * c.b + 0.5,\r\n\t\t\t\t0.439216 * c.r - 0.367788 * c.g - 0.071427 * c.b + 0.5\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\t\/\/ YCbCr to RGB\r\n\t\tfixed3 YCbCr2RGB(fixed3 yCbCr) {\r\n\t\t\tfloat c = yCbCr.r - 0.0625;\r\n\t\t\tfloat d = yCbCr.g - 0.5;\r\n\t\t\tfloat e = yCbCr.b - 0.5;\r\n\r\n\t\t\treturn fixed3(\r\n\t\t\t\t1.164383 * c + 1.596027 * e,\r\n\t\t\t\t1.164383 * c - (0.391762 * d) - (0.812968 * e),\r\n\t\t\t\t1.164383 * c +  2.017232 * d\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\t\/\/ surface\r\n\t\tvoid surf (Input IN, inout SurfaceOutputStandard o) {\r\n\t\t\tfloat2 transUV = IN.uv_TransTex;\r\n\t\t\tfloat3 transC = tex2D(_TransTex, transUV).rgb;\r\n\t\t\tfloat adjTrans = 0.25f * (transC.b - 0.5);\r\n\r\n\t\t\t\/\/ capture\r\n\t\t\tfloat2 grabUV = (IN.screenPos.xy \/ IN.screenPos.w);\r\n\t\t\tgrabUV.x += adjTrans * (transC.r - 0.5);\r\n\t\t\tgrabUV.y += adjTrans * (transC.g - 0.5);\r\n\t\t\tfixed3 grabC = tex2D(_GrabTexture, grabUV).rgb;\r\n\r\n\t\t\t\/\/ main color\r\n\t\t\tfixed4 c = tex2D (_MainTex, IN.uv_MainTex) * _Color;\r\n\r\n\t\t\t\/\/ contrast\r\n\t\t\tfixed3 YCbCr = RGB2YCbCr(grabC);\r\n\t\t\tfloat luminance = YCbCr.r;\r\n\t\t\tfloat contrastAdj = transC.b;\r\n\t\t\tfloat histMax = 1.0 - _RainContrast * contrastAdj;\r\n\t\t\tfloat histMin = _RainContrast * contrastAdj;\r\n\t\t\tif (contrastAdj &gt; 0.0) {\r\n\t\t\t\tfloat histRatio = 1.0 \/ (histMax - histMin);\r\n\t\t\t\tluminance = max(histMin, luminance);\r\n\t\t\t\tluminance = min(histMax, luminance);\r\n\t\t\t\tluminance = (luminance - histMin) * histRatio;\r\n\t\t\t\tYCbCr.r = (1.0 - transC.b * _RainContrast) * luminance;\r\n\t\t\t}\r\n\r\n\t\t\tgrabC = YCbCr2RGB(YCbCr);\r\n\r\n\t\t\to.Albedo = grabC * c;\r\n\r\n\t\t\t\/\/ Metallic and smoothness come from slider variables\r\n\t\t\to.Metallic = _Metallic;\r\n\t\t\to.Smoothness = _Glossiness;\r\n\t\t\to.Alpha = 1;\r\n\t\t}\r\n\t\tENDCG\r\n\t}\r\n\tFallBack &quot;Diffuse&quot;\r\n}\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\u96e8\u304c\u6700\u8fd1\u591a\u304f\u3001\u7a93\u3092\u898b\u3066\u3044\u3066\u3001\u3053\u308cShader\u3067\u3067\u304d\u308b\u304b\u306a\u3068\u601d\u3044\u3001\u7fd2\u4f5c\u3002 \u3061\u3087\u3063\u3068\u91cd\u3044\u306e\u3067\u5b9f\u7528\u7684\u3067\u306f\u306a\u3044\u304b\u306a\u3002<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[15,2],"tags":[],"class_list":["post-935","post","type-post","status-publish","format-standard","hentry","category-shader","category-unity"],"_links":{"self":[{"href":"https:\/\/stacstar.jp\/blog\/index.php?rest_route=\/wp\/v2\/posts\/935","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/stacstar.jp\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/stacstar.jp\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/stacstar.jp\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/stacstar.jp\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=935"}],"version-history":[{"count":7,"href":"https:\/\/stacstar.jp\/blog\/index.php?rest_route=\/wp\/v2\/posts\/935\/revisions"}],"predecessor-version":[{"id":956,"href":"https:\/\/stacstar.jp\/blog\/index.php?rest_route=\/wp\/v2\/posts\/935\/revisions\/956"}],"wp:attachment":[{"href":"https:\/\/stacstar.jp\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=935"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/stacstar.jp\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=935"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/stacstar.jp\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=935"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}