{"id":429,"date":"2026-05-01T17:57:38","date_gmt":"2026-05-01T09:57:38","guid":{"rendered":"http:\/\/chenglixue.top\/?p=429"},"modified":"2026-05-03T00:19:13","modified_gmt":"2026-05-02T16:19:13","slug":"dx12-%e7%90%83%e8%b0%90%e5%87%bd%e6%95%b0%e4%bb%8e%e5%85%a5%e9%97%a8%e5%88%b0%e5%85%a5%e5%9d%9f","status":"publish","type":"post","link":"http:\/\/chenglixue.top\/?p=429","title":{"rendered":"DX12 \u7403\u8c10\u51fd\u6570\u4ece\u5165\u95e8\u5230\u5165\u575f"},"content":{"rendered":"<p><div class=\"has-toc have-toc\"><\/div><\/p>\n<h1>\u524d\u8a00<\/h1>\n<p>\u5728\u4e4b\u524d\u6211\u4eec\u4e86\u89e3\u4e86\u5982\u4f55\u4f7f\u7528\u70d8\u7119\u8d34\u56fe\u7684\u65b9\u5f0f\u8ba1\u7b97IBL\u7684diffuse\u3001specular\uff0c\u4f46\u8fd9\u79cd\u65b9\u5f0f\u5b58\u5728\u4e9b\u8bb8\u95ee\u9898\uff1a<\/p>\n<ul>\n<li>\u7eaf\u9759\u6001<\/p>\n<\/li>\n<li>\n<p>\u663e\u5b58\u4e0e\u5e26\u5bbd\u5f00\u9500\u5927\u3001ALU<\/p>\n<p>HDR cubemap \u8d34\u56fe\u4e00\u822c\u662f\u5f88\u5927\u7684\uff0c\u4f1a\u5360\u7528\u51e0\u5341mb<\/p>\n<p>\u91c7\u6837Cubemap\u5e26\u6765\u7684\u5f00\u9500<\/p>\n<\/li>\n<\/ul>\n<p>\u672c\u6587\u5c06\u7ec6\u7ec6\u8bb2\u89e3\u89e3\u51b3\u8fd9\u4e00\u95ee\u9898\u7684\u7403\u8c10\u51fd\u6570\uff0c\u5b83\u7a76\u7adf\u662f\u4ec0\u4e48\uff0c\u4e3a\u4ec0\u4e48\u9700\u8981\u5b83\uff0c\u8be5\u5982\u4f55\u5b9e\u73b0\u5b83\uff0c\u5b83\u6709\u4ec0\u4e48\u4f18\u7f3a\u70b9<\/p>\n<h1>\u7403\u8c10\u51fd\u6570\u7684what\u3001why<\/h1>\n<p>\u5982\u679c\u53bb\u7f51\u4e0a\u641c\u7d22\u5173\u4e8e\u7403\u8c10\u51fd\u6570\u7684\u8bb2\u89e3\uff0c\u4f1a\u53d1\u73b0\u5927\u90e8\u5206\u90fd\u662f\u5f80\u4f60\u8138\u4e0a\u4e22\u975e\u5e38\u590d\u6742\u7684\u516c\u5f0f\uff0c\u5728\u8fd9\u5c31\u88ab\u529d\u9000\u4e86\u3002\u5b66\u4e60\uff0c\u662f\u4e00\u4e2a\u5148\u7406\u89e3\u672c\u8d28\u4e0e\u4f5c\u7528\uff0c\u518d\u8003\u8651\u5982\u4f55\u5b9e\u73b0\u7684\u8fc7\u7a0b\uff0c\u8fd9\u91cc\u4e0d\u4f1a\u5148\u770b\u516c\u5f0f\uff0c\u800c\u662f\u8bf4\u660e\u7403\u8c10\u51fd\u6570\u7684\u672c\u8d28\u662f\u4ec0\u4e48<\/p>\n<ul>\n<li>\u7403\u8c10\u51fd\u6570\u7684\u672c\u8d28\n<p>\u7403\u8c10\u51fd\u6570\u5176\u5b9e\u5c31\u662f<span class=\"text-highlighted-inline\" style=\"background-color: #fffd38;\">\u5728\u7403\u9762\u4e0a\u7684\u3001\u7531\u591a\u4e2asin\u3001cos\u51fd\u6570\u7ec4\u6210\u7684\u57fa\u51fd\u6570\u96c6\u5408<\/span>\uff08\u57fa\u51fd\u6570\u5373sin\u3001cos\uff09<\/p>\n<p>\u800c\u5176\u4e2d\u7531\u591a\u4e2asin\u3001cos\u51fd\u6570\u7ec4\u6210\u7684\u57fa\u51fd\u6570\u96c6\u5408\u4e5f\u5c31\u662f\u7f51\u4e0a\u6240\u8bf4\u7684\u5085\u91cc\u53f6\u53d8\u6362<\/p>\n<p>\u90a3\u4e48\u7403\u8c10\u51fd\u6570\u53ef\u4ee5\u7406\u89e3\u4e3a\uff0c<span class=\"text-highlighted-inline\" style=\"background-color: #fffd38;\">\u4e09\u7ef4\u7a7a\u95f4\u4e2d\u4e8c\u7ef4\u5e73\u9762\u4e0a\u7684\u5085\u91cc\u53f6\u53d8\u6362<\/span><\/p>\n<\/li>\n<li>\n<p>\u4e3a\u4ec0\u4e48\u9700\u8981\u7403\u8c10\u51fd\u6570<\/p>\n<p>\u7528\u4e8e\u62df\u5408\u7279\u5b9a\u66f2\u7ebf\uff08\u5f62\u72b6\uff09<\/p>\n<p>\u4e3a\u4ec0\u4e48\u7403\u8c10\u51fd\u6570\u53ef\u4ee5\u62df\u5408\u4efb\u4e00\u66f2\u7ebf\u5462\uff1f\u8fd9\u4e00\u7279\u6027\u6b63\u662fsin\u3001cos\u652f\u6301\u7684\uff0c<span class=\"text-highlighted-inline\" style=\"background-color: #fffd38;\">\u53ea\u8981sin\u3001cos\u591f\u591a\uff0c\u53ef\u4ee5\u62df\u5408\u4efb\u4f55\u66f2\u7ebf<\/span>\uff0c\u521d\u97f3\u672a\u6765\u90fd\u6ca1\u95ee\u9898<\/p>\n<p>\u5bf9\u4e8eIBL\u7684diffuse\u4fe1\u606f\uff0c\u4e0d\u96be\u53d1\u73b0\u662f\u4f4e\u9891\u4fe1\u606f\uff0c\u5982\u679c\u53ef\u4ee5\u7528\u7403\u8c10\u51fd\u6570\u6765\u62df\u5408\u8fd9\u4e9b\u4f4e\u9891\u4fe1\u606f\u7684\u5f62\u72b6\uff0c\u90a3\u4e0d\u5c31\u53ef\u4ee5\u7701\u53bb\u70d8\u7119\u4e86\u561b\u3002\u6ca1\u9519\uff0c\u7403\u8c10\u51fd\u6570\u6b63\u662f\u505a\u8fd9\u4ef6\u4e8b\u7684<\/p>\n<\/li>\n<\/ul>\n<h1>\u5982\u4f55\u5728IBL\u4e2d\u8fd0\u7528\u7403\u8c10\u51fd\u6570<\/h1>\n<ul>\n<li>\n<p>\u5de5\u4e1a\u754c\u4f7f\u7528\u7684\u516c\u5f0fIBL Diffuse\u5982\u4e0b\uff1a<\/p>\n<p><img decoding=\"async\"   class=\"lazyload\" data-src=\"https:\/\/pic1.imgdb.cn\/item\/69f38f04de223ef069fade49.png\" src=\"https:\/\/cdn.jsdelivr.net\/gh\/moezx\/cdn@3.0.2\/img\/svg\/loader\/trans.ajax-spinner-preloader.svg\" onerror=\"imgError(this)\"  alt=\"\" \/><\/p >\n<noscript><img decoding=\"async\" src=\"https:\/\/pic1.imgdb.cn\/item\/69f38f04de223ef069fade49.png\" alt=\"\" \/><\/p><\/noscript>\n<ul>\n<li>\u5728\u5de5\u4e1a\u754c\u5e76\u4e0d\u4f1a\u76f4\u63a5\u7528sin\u3001cos\u62df\u5408\uff0c\u56e0\u4e3aGPU\u7aefsin\u3001cos\u4e09\u89d2\u51fd\u6570\u6307\u4ee4\u5f00\u9500\u662f\u6bd4\u8f83\u9ad8\u7684\uff0c\u66f4\u4e0d\u5fc5\u8bf4\u4f1a\u79ef\u5206\uff0c\u6240\u4ee5\u5de5\u4e1a\u754c\u7684\u65b9\u6848\u662f\u5c06\u4e09\u89d2\u51fd\u6570\u4ee3\u66ff\u4e3anormal\u7684x\u3001y\u3001z\uff0c\u5e76\u914d\u5408\u4e00\u4e9b\u70ae\u8f70\u51fa\u7684magic number<\/li>\n<\/ul>\n<pre><code class=\"language-glsl line-numbers\">void EvaluateSHBasis(float3 dir, out float Y[9])\n{\n    float x = dir.x;\n    float y = dir.y;\n    float z = dir.z;\n\n    \/\/ L0\n    Y[0] = 0.282095f;\n\n    \/\/ L1\n    Y[1] = 0.488603f * y;\n    Y[2] = 0.488603f * z;\n    Y[3] = 0.488603f * x;\n\n    \/\/ L2\n    Y[4] = 1.092548f * (x * y);\n    Y[5] = 1.092548f * (y * z);\n    Y[6] = 0.315392f * (3.0f * z * z - 1.0f);\n    Y[7] = 1.092548f * (x * z);\n    Y[8] = 0.546274f * (x * x - y * y);\n}\n<\/code><\/pre>\n<ul>\n<li>\u672c\u6765\u7403\u9762\u7684\u7acb\u4f53\u89d2\u4ee5\u516c\u5f0f\u4e2d\u7684<span class=\"katex math inline\">sin\u03b8d\u03b8d\u03a6<\/span>\u662f\u53ef\u4ee5\u8868\u793a\u7684\uff0c<span class=\"text-highlighted-inline\" style=\"background-color: #fffd38;\">\u4f46\u5b9e\u9645\u8ba1\u7b97\u4e2d\u6a21\u578b\u4e0d\u662f\u7403\u9762\uff0c\u800c\u662f\u7acb\u65b9\u4f53\uff0c\u56e0\u6b64\u5b9e\u9645\u8ba1\u7b97\u4e2d\u4f1a\u91c7\u7528\u4e00\u822c\u66f2\u9762\u79ef\u5206\u516c\u5f0f\u6765\u8868\u793a\u7acb\u4f53\u89d2<\/span>\u2014\u2014<span class=\"katex math inline\">d\u03a9 = \\frac{dA\u00b7cos\u03b8}{r^2}<\/span>\uff0c\u5426\u5219\u4f1a\u5bfc\u81f4<span class=\"text-highlighted-inline\" style=\"background-color: #fffd38;\">\u67d0\u4e9b\u50cf\u7d20\u88ab\u91cd\u590d\u91c7\u6837\u4e86\u597d\u51e0\u6b21\uff0c\u800c\u67d0\u4e9b\u8fb9\u89d2\u7684\u9ad8\u9891\u50cf\u7d20\u53ef\u80fd\u88ab\u5f7b\u5e95\u6f0f\u6389<\/span><\/li>\n<\/ul>\n<pre><code class=\"language-glsl line-numbers\">\/\/ \u6620\u5c04\u5230[-1, 1]\nfloat u_coord = (samplePos.x + 0.5f) * g_SkyboxSize.z * 2.0f - 1.0f;\nfloat v_coord = (samplePos.y + 0.5f) * g_SkyboxSize.w * 2.0f - 1.0f;\n\n\/\/ \u6bcf\u6b21\u5728\u7279\u5b9a\u7684\u9762\u8ba1\u7b97\u50cf\u7d20\u5750\u6807\uff0c\u90a3\u4e48xyz\u4e2d\u6709\u4e00\u4e2aabs\u4e00\u5b9a\u4e3a1\n\/\/ \u5047\u8bbe\u73b0\u5728\u662f\u4ee5z = 1\u5e73\u9762\uff0c\u91c7\u6837\u70b9\u5750\u6807\u4e3a[u, v, 1]\uff0c\u539f\u70b9\u5230\u91c7\u6837\u70b9\u7684\u8ddd\u79bb\u5e73\u65b9r^2 = x^2 + y^2 + 1\nfloat distSq = 1.0f + u_coord * u_coord + v_coord * v_coord;\n\n\/\/ \u03b8\u662fV\u4e0eV\u5939\u89d2,N = (0,0,1)\uff0cV = (u, v, 1)\uff0c\u6839\u636e\u70b9\u79ef\uff1aN\u22c5V=\u2223N\u2223\u2223V\u2223cos\u03b8 =&gt; cos\u03b8 = 1 \/ r\n\/\/ \u56e0\u4e3a\u5f52\u4e00\u5316\u4e86, dA = 2 * 2 = 4\nfloat solidAngle = 4.0f \/ (sqrt(distSq) * distSq);\n<\/code><\/pre>\n<ul>\n<li>\u4e3a\u4e86\u66f4\u597d\u7684\u6027\u80fd\uff0cLambert \u6f2b\u53cd\u5c04\u7684\u516c\u5f0f\u4f1a\u9664\u4ee5PI\uff0c\u56e0\u6b64\u5de5\u4e1a\u754c\u76f4\u63a5\u5bf9<span class=\"katex math inline\">E(n)<\/span>\u7684\u7cfb\u6570\u90fd\u9664\u4ee5PI<\/li>\n<\/ul>\n<pre><code class=\"language-glsl line-numbers\">finalSH[0] *= 0.28209479f;\nfinalSH[1] *= 0.32573501f;\nfinalSH[2] *= 0.32573501f;\nfinalSH[3] *= 0.32573501f;\nfinalSH[4] *= 0.27313711f;\nfinalSH[5] *= 0.27313711f;\nfinalSH[7] *= 0.27313711f;\nfinalSH[6] *= 0.07884789f;\nfinalSH[8] *= 0.13656855f;\n<\/code><\/pre>\n<ul>\n<li>\u5728\u6700\u540e\u6211\u4eec\u4f1a<span class=\"text-highlighted-inline\" style=\"background-color: #fffd38;\">\u52a0\u6743\u5e73\u5747<\/span>\uff08\u79ef\u5206\u7684\u603b\u7acb\u4f53\u89d2\u53ef\u80fd\u4e0d\u4f1a\u7b49\u4e8e4PI\uff09\uff0c\u5e76\u4e58\u4e0a<span class=\"text-highlighted-inline\" style=\"background-color: #fffd38;\">\u7403\u4f53\u7684\u603b\u7acb\u4f53\u89d2\u8868\u9762\u79ef4PI<\/span><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h1>\u4f18\u5316<\/h1>\n<p>\u4e0d\u96be\u53d1\u73b0\uff0c\u5982\u679cskybox\u662f\u52a8\u6001\u7684\uff0c\u9700\u8981\u6bcf\u5e27\u6216\u591a\u5e27\u5206\u644a\u5b9e\u65f6\u8ba1\u7b97SH\u7cfb\u6570\uff0c\u5982\u4f55\u4f18\u5316SH\u7cfb\u6570\u7684\u8ba1\u7b97\u8fc7\u7a0b\u5c06\u975e\u5e38\u91cd\u8981<\/p>\n<p>\u5982\u679c\u5728compte shader\u91cc\u4e00\u6b21\u6027\u5faa\u73afskybox\u7684\u516d\u4e2a\u9762\u3001\u5bbd\u3001\u9ad8\uff0c\u76f8\u5f53\u4e8e\u4f7f\u7528\u4e00\u4e2a\u7ebf\u7a0b\u5b8c\u6210\u4e86\u6240\u6709\u8ba1\u7b97\uff08\u6240\u6709\u7ebf\u7a0b\u8dd1\u76f8\u540c\u8ba1\u7b97\uff09\uff0c\u6027\u80fd\u662f\u975e\u5e38\u5dee\u7684<\/p>\n<ul>\n<li>\u53ef\u4ee5\u60f3\u5230\u7684\u65b9\u6848\u662f<span class=\"text-highlighted-inline\" style=\"background-color: #fffd38;\">\u5c06\u4e09\u4e2a\u5faa\u73af\u5206\u644a\u7ed9\u6240\u6709\u7ebf\u7a0b\u2014\u2014Dispatch\uff08\u5bbd\uff0c\u9ad8\uff0c\u9762\uff09<\/span>\n<pre><code class=\"language-glsl line-numbers\">m_pCommand-&gt;Dispatch(CeilDivide(skyboxTex.GetWidth(), threadGroupSize.x),\n                               CeilDivide(skyboxTex.GetHeight(), threadGroupSize.y),\n                               6);\n<\/code><\/pre>\n<\/li>\n<\/ul>\n<p>\u4f46\u8fd9\u4f1a\u6709\u4e00\u4e2a\u95ee\u9898\uff1a\u6bcf64\u7ebf\u7a0b\u4e3a\u4e00\u7ec4\u8ba1\u7b97SH\u3001weight\uff0c\u9700\u8981<span class=\"text-highlighted-inline\" style=\"background-color: #fffd38;\">GroupMemoryBarrierWithGroupSync<\/span>\u540c\u6b65\uff0c\u4e5f\u5c31\u662f\u8bf4\u9700\u8981\u7528\u5230<span class=\"text-highlighted-inline\" style=\"background-color: #fffd38;\">LDS<\/span>\uff0c\u5c06\u6bcf\u7ec4\u6bcf\u4e2a\u7ebf\u7a0b\u5f97\u5230\u7684SH\u3001weight\u7d2f\u52a0\u5230LDS\u3002\u4f46\u8fd9\u4e0d\u662f\u6700\u91cd\u8981\u7684\uff0c\u6700\u91cd\u8981\u7684\u662f\uff0cLDS\u768464\u4e2a\u6570\u636e\uff0c\u5982\u4f55\u5145\u5206\u5229\u7528\u5230\u7ebf\u7a0b\uff1f\u5982\u679c\u662fint\u7c7b\u578b\uff0c\u53ef\u4ee5\u4f7f\u7528InterlockedAdd\uff08\uff09\uff0c\u5728\u540c\u6b65\u540e\u7acb\u5373\u8ba1\u7b97\uff0c\u4f46\u5f88\u4e0d\u5e78\u8fd9\u91cc\u662ffloat\u7c7b\u578b\uff0c\u4e14<span class=\"text-highlighted-inline\" style=\"background-color: #fffd38;\">InterlockedAdd\u4f1a\u6253\u7834\u7ebf\u7a0b\u7684\u5e76\u884c\uff0c\u9000\u5316\u4e3a\u4e32\u884c\uff0c\u4e14\u6bcf\u4e2a\u7ebf\u7a0b\u90fd\u9700\u8981\u8dd1\u5230\u5168\u5c40\u663e\u5b58\uff0c\u6548\u7387\u975e\u5e38\u4f4e<\/span><\/p>\n<ul>\n<li>\u4e00\u79cd\u53ef\u884c\u7684\u65b9\u6848\uff1a\u6bcf\u4e00\u4e2a\u7ebf\u7a0b\u7ec4\u7684\u7b2c0\u53f7\u7ebf\u7a0b\uff0c\u7edf\u4e00\u6c42\u548c64\u4e2a\u6570\u636e\n<pre><code class=\"language-glsl line-numbers\">if (localIdx == 0)\n{\n  float4 totalSH[9] = (float4[9])0;\n  float totalWeight = 0.f;\n\n  for (int k = 0; k &lt; 64; ++k)\n  {\n      for (int j = 0; j &lt; 9; ++j)\n      {\n          totalSH[j] += g_SHCoefficients[j][k];\n      }\n      totalWeight += g_SHWeights[k];\n  }\n\n  const UINT saveIndex = groupID.x +\n                         groupID.y * g_SHCoefficientsTempCount.x +\n                         groupID.z * g_SHCoefficientsTempCount.x * g_SHCoefficientsTempCount.y;\n  SHCoefficientData groupResult;\n  for (int i = 0; i &lt; 9; ++i)\n  {\n      groupResult.SHCoefficients[i] = totalSH[i];\n  }\n  groupResult.TotalWeight = totalWeight;\n  groupResult._Padding = float3(0, 0, 0);\n\n  Elysia_Save_Temp_SHCoefficient_Data(saveIndex, groupResult);\n}\n<\/code><\/pre>\n<p>\u8fd9\u79cd\u65b9\u6848\u4e0d\u4f1a\u56e0\u4e3a\u9501\u7b49\u5f85\u6d3e\u5bf9\uff0c\u4e0d\u4f1a\u6bcf\u4e2a\u7ebf\u7a0b\u90fd\u53bb\u5168\u5c40\u663e\u5b58\u8bfb\u53d6\uff0c\u6548\u7387\u4f1a\u63d0\u5347\u4e0d\u5c11<\/p>\n<\/li>\n<li>\n<p>\u4f46\u6bcf\u7ec4\u4f9d\u7136\u4f1a\u670963\u4e2a\u7ebf\u7a0b\u65e0\u6240\u4e8b\u4e8b\uff0c\u5c24\u5176\u66b4\u529b\u5faa\u73af\uff0c\u4e0d\u5982\u6765\u4e2a<span class=\"text-highlighted-inline\" style=\"background-color: #fffd38;\">\u4e8c\u5206\u6cd5\uff0c\u6bcf\u6b21\u6298\u534a\u53e0\u52a0<\/span>\u2014\u2014\u598264\u4e2a\u7ebf\u7a0b\uff0c\u6bcf\u6b21\u53d6\u4e00\u534a\u7684\u7ebf\u7a0b\uff0832\u4e2a\uff09\uff0c\u524d\u4e00\u534a\u7684\u7ebf\u7a0b\u53e0\u52a0\u540e\u4e00\u534a\u7684\u7ebf\u7a0b\uff0c\u7ee7\u7eed\u6298\u534a\uff0c\u76f4\u81f31\uff0c<span class=\"text-highlighted-inline\" style=\"background-color: #fffd38;\">\u65f6\u95f4\u590d\u6742\u5ea6\u4eceO(N)\u964d\u5230\u4e86O(logN)<\/span><\/p>\n<pre><code class=\"language-glsl line-numbers\">for (UINT stride = 32; stride &gt;= 1; stride &gt;&gt;= 1)\n{\n  if (localIdx &lt; stride)\n  {\n      for (UINT i = 0; i &lt; 9; ++i)\n      {\n          g_SHCoefficients[i][localIdx] += g_SHCoefficients[i][localIdx + stride];\n      }\n      g_SHWeights[localIdx] += g_SHWeights[localIdx + stride];\n      GroupMemoryBarrierWithGroupSync();\n  }\n}\n<\/code><\/pre>\n<\/li>\n<\/ul>\n<p>\u6700\u7ec8\u6548\u679c\u5982\u4e0b\uff1a<br \/>\n<img decoding=\"async\"   class=\"lazyload\" data-src=\"https:\/\/pic1.imgdb.cn\/item\/69f45891c16184acf99db1fd.png\" src=\"https:\/\/cdn.jsdelivr.net\/gh\/moezx\/cdn@3.0.2\/img\/svg\/loader\/trans.ajax-spinner-preloader.svg\" onerror=\"imgError(this)\"  alt=\"\" \/><\/p >\n<noscript><img decoding=\"async\" src=\"https:\/\/pic1.imgdb.cn\/item\/69f45891c16184acf99db1fd.png\" alt=\"\" \/><\/p><\/noscript>\n","protected":false},"excerpt":{"rendered":"<p>\u524d\u8a00 \u5728\u4e4b\u524d\u6211\u4eec\u4e86\u89e3\u4e86\u5982\u4f55\u4f7f\u7528\u70d8\u7119\u8d34\u56fe\u7684\u65b9\u5f0f\u8ba1\u7b97IBL\u7684diffuse\u3001specular\uff0c\u4f46\u8fd9\u79cd\u65b9\u5f0f\u5b58\u5728\u4e9b\u8bb8\u95ee\u9898\uff1a \u7eaf\u9759\u6001 \u663e\u5b58\u4e0e &#8230;<\/p>","protected":false},"author":1,"featured_media":431,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[],"_links":{"self":[{"href":"http:\/\/chenglixue.top\/index.php?rest_route=\/wp\/v2\/posts\/429"}],"collection":[{"href":"http:\/\/chenglixue.top\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/chenglixue.top\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/chenglixue.top\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/chenglixue.top\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=429"}],"version-history":[{"count":4,"href":"http:\/\/chenglixue.top\/index.php?rest_route=\/wp\/v2\/posts\/429\/revisions"}],"predecessor-version":[{"id":435,"href":"http:\/\/chenglixue.top\/index.php?rest_route=\/wp\/v2\/posts\/429\/revisions\/435"}],"wp:featuredmedia":[{"embeddable":true,"href":"http:\/\/chenglixue.top\/index.php?rest_route=\/wp\/v2\/media\/431"}],"wp:attachment":[{"href":"http:\/\/chenglixue.top\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=429"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/chenglixue.top\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=429"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/chenglixue.top\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=429"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}