{"id":4833,"date":"2026-01-04T12:01:05","date_gmt":"2026-01-04T04:01:05","guid":{"rendered":"https:\/\/www.caiqinyi.cn\/?p=4833"},"modified":"2026-01-29T13:56:11","modified_gmt":"2026-01-29T05:56:11","slug":"two_pass_occlusion_culling","status":"publish","type":"post","link":"https:\/\/www.caiqinyi.cn\/index.php\/2026\/01\/04\/two_pass_occlusion_culling\/","title":{"rendered":"\u53ccPass\u906e\u6321\u5254\u9664"},"content":{"rendered":"<p><script type=\"text\/javascript\" async src=\"https:\/\/www.caiqinyi.cn\/wp-content\/MathJax\/MathJax.js?config=TeX-AMS_CHTML\">\n<\/script><br \/>\n<script type=\"text\/x-mathjax-config\">\n    MathJax.Hub.Config({\n        tex2jax: {inlineMath: [['$','$']]},\n        TeX: {equationNumbers: {autoNumber: [\"AMS\"], useLabelIds: true}},\n        \"HTML-CSS\": {linebreaks: {automatic: true}},\n        SVG: {linebreaks: {automatic: true}}\n    });\n<\/script><\/p>\n<p>\u5728\u6df1\u5165\u7814\u7a76Nanite\u7684\u8fc7\u7a0b\u4e2d, \u53d1\u73b0Nanite\u4f7f\u7528\u4e86\u53ccPass\u906e\u6321\u5254\u9664\u7684\u6280\u672f. \u4e4b\u524d\u5bf9\u6b64\u6280\u672f\u4e5f\u7565\u6709\u8033\u95fb, \u4f46\u4e00\u76f4\u672a\u6df1\u5165\u4e86\u89e3. \u6070\u5de7\u4e5f\u53d1\u73b0\u4e00\u7bc7\u4e0d\u9519\u7684\u5173\u4e8e\u53ccPass\u906e\u6321\u5254\u9664\u7684\u82f1\u6587\u535a\u5ba2, \u7279\u4ee5\u672c\u6587\u7ffb\u8bd1\u5b66\u4e60\u4e00\u6ce2~<\/p>\n<p><!--more--><\/p>\n<p><strong>\u53c2\u8003\u6750\u6599<\/strong><br \/>\n1. <a href=\"https:\/\/medium.com\/@mil_kru\/two-pass-occlusion-culling-4100edcad501\">Two-Pass Occlusion Culling<\/a><br \/>\n2. <a href=\"https:\/\/zhuanlan.zhihu.com\/p\/583245401\">\u7406\u89e3Nanite\uff08\u4e00\uff09\uff1a\u906e\u6321\u5254\u9664<\/a><br \/>\n3. <a href=\"https:\/\/zhuanlan.zhihu.com\/p\/403787752\">19.7 \u906e\u6321\u5254\u9664<\/a><\/p>\n<p>\u906e\u6321\u5254\u9664\u662f\u4e00\u79cd\u901a\u8fc7\u8df3\u8fc7\u573a\u666f\u4e2d\u88ab\u5176\u5b83\u7269\u4f53\u906e\u6321\u7684\u7269\u4f53\u6e32\u67d3\u6765\u63d0\u5347\u6027\u80fd\u7684\u4f18\u5316\u6280\u672f. \u76ee\u524d\u5b58\u5728\u591a\u79cd\u906e\u6321\u5254\u9664\u65b9\u6cd5, \u4f46\u5b83\u4eec\u5404\u81ea\u5b58\u5728\u4e0d\u540c\u7684\u95ee\u9898, \u4f8b\u5982: \u53ef\u89c1\u6027Popping, \u6570\u636e\u5236\u4f5c\u590d\u6742\u6027\u4ee5\u53ca\u6027\u80fd\u635f\u8017. \u73b0\u4ee3\u5b9e\u65f6\u6e32\u67d3\u4e2d\u7684\u4e00\u79cd\u6d41\u884c\u65b9\u6cd5\u662f\u57fa\u4e8eGPU\u9a71\u52a8\u7684\u5254\u9664\u6280\u672f, \u79f0\u4e3a\u5c42\u6b21$Z$\u7f13\u51b2(HZB, Hierarchical $Z$-Buffer) \u906e\u6321\u5254\u9664. \u7136\u800c, \u8fd9\u4e00\u65b9\u6cd5\u4e5f\u5b58\u5728\u663e\u8457\u7f3a\u9677, \u56e0\u6b64\u53ccPass HZB\u906e\u6321\u5254\u9664\u88ab\u63d0\u51fa\u4ee5\u6539\u8fdb\u5176\u4e0d\u8db3.<\/p>\n<p><strong>1. HZB\u906e\u6321\u5254\u9664\u6982\u8ff0<\/strong><\/p>\n<p>HZB\u672c\u8d28\u4e0a\u662f\u4e00\u6761\u901a\u8fc7\u4e0b\u91c7\u6837\u6df1\u5ea6\u7f13\u51b2\u751f\u6210\u7684MIP\u94fe, \u5176\u751f\u6210\u65b9\u5f0f\u662f: \u5bf9\u6bcf\u7ec44\u4e2a\u7eb9\u7d20\u53d6\u5176\u6700\u5c0f\u6216\u6700\u5927\u6df1\u5ea6\u503c, \u4f5c\u4e3a\u4e0b\u4e00\u7ea7MIP\u5c42\u5bf9\u5e94\u7684\u65b0\u7eb9\u7d20\u503c. \u5177\u4f53\u4f7f\u7528\u6700\u5c0f\u503c\u8fd8\u662f\u6700\u5927\u503c, \u53d6\u51b3\u4e8e\u662f\u5426\u542f\u7528\u4e86Reversed-$Z$. \u968f\u540e, \u53ef\u901a\u8fc7\u7269\u4f53\u7684\u5305\u56f4\u4f53\u4e0eHZB\u8fdb\u884c\u5bf9\u6bd4, \u4ece\u800c\u5b9e\u73b0\u906e\u6321\u5254\u9664. \u9664\u4e86\u906e\u6321\u5254\u9664, HZB\u8fd8\u53ef\u7528\u4e8e\u4f53\u79ef\u96fe, \u5c4f\u5e55\u7a7a\u95f4\u53cd\u5c04\u7b49\u6e32\u67d3\u6280\u672f.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.caiqinyi.cn\/wp-content\/uploads\/2025\/12\/part_HZB_built_from_depth_buffer_with_reversed_z.webp\" alt=\"\" width=\"720\" height=\"480\" class=\"aligncenter size-full wp-image-4840\" \/><center><em>\u57fa\u4e8eReversed-$Z$\u6df1\u5ea6\u7f13\u51b2\u751f\u6210\u7684HZB\u90e8\u5206<\/em><\/center><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.caiqinyi.cn\/wp-content\/uploads\/2025\/12\/an_example_rendered_frame_utilizes_HZB_occlusion_culling.webp\" alt=\"\" width=\"720\" height=\"486\" class=\"aligncenter size-full wp-image-4846\" \/><center><em>\u4f7f\u7528HZB\u906e\u6321\u5254\u9664\u7684\u6e32\u67d3\u5e27\u793a\u4f8b<\/em><\/center><\/p>\n<p>\u6709\u51e0\u79cd\u65b9\u6cd5\u53ef\u4ee5\u4f18\u5316HZB\u7684\u6784\u5efa\u8fc7\u7a0b. \u5176\u4e2d\u4e24\u79cd\u6280\u672f\u662f\u7eb9\u7406\u805a\u96c6(Texture Gathering) \u548c\u91c7\u6837\u5668\u7f29\u51cf\u6a21\u5f0f(Sampler Reduction Modes), \u4e8c\u8005\u5747\u80fd\u51cf\u5c11\u7eb9\u7406\u91c7\u6837\u7684\u6b21\u6570, \u4ece\u800c\u63d0\u5347\u6027\u80fd.<br \/>\n$\\\\$ \u5229\u7528AABB\u5bf9HZB\u8fdb\u884c\u6d4b\u8bd5, \u8fd9\u4e00\u8fc7\u7a0b\u901a\u5e38\u5728Compute Shader\u4e2d\u5b8c\u6210. \u8be5Shader Dispatch\u7684\u8f93\u51fa\u7ed3\u679c\u901a\u5e38\u662f\u4e00\u7ec4Indirect Draw Call Arguments, \u8fd9\u4e9b\u53c2\u6570\u4ec5\u63cf\u8ff0\u5f53\u524d\u53ef\u89c1\u7684\u7269\u4f53. \u968f\u540e, \u8fd9\u4e9b\u53c2\u6570\u4f1a\u88ab\u7528\u4e8e\u6267\u884c\u4e00\u6b21Indirect Draw Call.<br \/>\n$\\\\$ HZB\u906e\u6321\u6d4b\u8bd5\u9996\u5148\u9700\u8981\u9009\u62e9\u5408\u9002\u7684MIP\u5c42\u7ea7. \u5176\u6838\u5fc3\u76ee\u6807\u662f\u627e\u5230\u4e00\u4e2a\u5c42\u7ea7, \u4f7f\u5f97\u5f53\u524d\u7269\u4f53\u7684AABB\u5728\u8be5\u5c42\u7ea7\u4e2d\u6070\u597d\u8986\u76d64\u4e2a\u76f8\u90bb\u7684\u7eb9\u7d20. \u8fd9\u4e00\u9009\u62e9\u901a\u5e38\u901a\u8fc7\u4e00\u4e2a\u5bf9\u6570\u65b9\u7a0b\u5b9e\u73b0, \u8be5\u65b9\u7a0b\u4f1a\u7ed3\u5408AABB\u7684\u957f\u5bbd\u5c3a\u5bf8\u8fdb\u884c\u8ba1\u7b97. \u5f53HZB\u7684\u5bbd\u5ea6\u4e0e\u9ad8\u5ea6\u4e0d\u76f8\u7b49\u65f6(\u4f8b\u5982\u975e\u6b63\u65b9\u5f62\u7684\u6df1\u5ea6\u7f13\u51b2), MIP\u5c42\u7ea7\u7684\u9009\u62e9\u4f1a\u7565\u5fae\u590d\u6742\u5316.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"HLSL\" data-enlighter-theme=\"monokai\">\r\n\r\n\/\/ MIP level selection example\r\nint mipLevel = floor(log2(max(AABB.pixelWidth, AABB.pixelHeight)));\r\n\r\n<\/pre>\n<p>\u5b8c\u6210\u5408\u9002\u7684MIP\u5c42\u7ea7\u9009\u62e9\u540e, \u9700\u6bd4\u8f83\u4e0a\u8ff04\u4e2a\u7eb9\u7d20\u7684\u6df1\u5ea6\u503c\u4e0e\u7269\u4f53\u8ddd\u79bb\u6444\u50cf\u673a\u6700\u8fd1\u70b9\u7684\u6df1\u5ea6\u503c. \u901a\u8fc7\u8fd9\u4e00\u6bd4\u8f83\u7ed3\u679c, \u53ef\u4ee5\u5224\u65ad\u7269\u4f53\u662f\u5426\u88ab\u5254\u9664. \u5f53\u6574\u4e2a\u573a\u666f\u7684\u906e\u6321\u6d4b\u8bd5\u5b8c\u6210\u540e, \u901a\u8fc7\u6d4b\u8bd5\u7684\u7269\u4f53\u5373\u53ef\u8fdb\u884c\u6e32\u67d3.<\/p>\n<p><strong>2. \u95ee\u9898<\/strong><\/p>\n<p>\u5982\u524d\u6240\u8ff0, \u6784\u5efaHZB\u9700\u8981\u4f9d\u8d56\u6df1\u5ea6\u7f13\u51b2\u533a. \u4f46\u95ee\u9898\u5728\u4e8e: \u8fd9\u4e00\u6df1\u5ea6\u7f13\u51b2\u533a\u6700\u521d\u662f\u5982\u4f55\u83b7\u53d6\u7684? \u6709\u4eba\u53ef\u80fd\u4f1a\u8ba4\u4e3a\u9700\u8981\u5148\u6e32\u67d3\u6240\u6709\u7269\u4f53\u624d\u80fd\u586b\u5145\u6df1\u5ea6\u7f13\u51b2\u533a, \u4f46\u8fd9\u4f1a\u4ece\u6839\u672c\u4e0a\u62b5\u6d88\u906e\u6321\u5254\u9664\u6280\u672f\u7684\u610f\u4e49(\u56e0\u4e3a\u5254\u9664\u7684\u76ee\u7684\u6b63\u662f\u907f\u514d\u6e32\u67d3\u4e0d\u53ef\u89c1\u7269\u4f53).<\/p>\n<p><strong>3. \u6f5c\u5728\u89e3\u51b3\u65b9\u6848<\/strong><\/p>\n<p>\u4e00\u79cd\u5e38\u89c1\u65b9\u6cd5\u6d89\u53ca\u6e32\u67d3\u4e00\u5c0f\u90e8\u5206\u7269\u4f53\u4f5c\u4e3a\u906e\u6321\u4f53. \u8fd9\u4e9b\u906e\u6321\u4f53\u901a\u5e38\u7531\u827a\u672f\u5bb6\u624b\u52a8\u6311\u9009\u548c\u5236\u4f5c, \u901a\u5e38\u662f\u5927\u578b\u7269\u4f53(\u5982\u5efa\u7b51\u7269, \u5899\u58c1\u548c\u5730\u5f62). \u906e\u6321\u4f53\u7684\u6e32\u67d3\u4ec5\u5199\u5165\u6df1\u5ea6\u7f13\u51b2\u533a, \u4e0d\u6267\u884cPixel Shader, \u8fd9\u4e00\u8fc7\u7a0b\u79f0\u4e3aDeath Prepass. \u901a\u8fc7\u751f\u6210\u7684\u6df1\u5ea6\u7f13\u51b2\u533a, \u53ef\u4ee5\u6784\u5efa\u4e00\u4e2a\u4e0d\u5b8c\u6574\u4f46\u4fdd\u5b88\u7684HZB. \u8fd9\u4e00HZB\u968f\u540e\u7528\u4e8e\u906e\u6321\u5254\u9664\u6d41\u7a0b. \u5c3d\u7ba1\u8be5\u65b9\u6cd5\u6709\u6548, \u4f46\u5176\u7ef4\u62a4\u9700\u8981\u5927\u91cf\u4eba\u5de5\u5e72\u9884.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.caiqinyi.cn\/wp-content\/uploads\/2025\/12\/depth_prepass_foreground_buildings_from_Assassins_Creed_Unity_captured_with_NSight.webp\" alt=\"\" width=\"720\" height=\"360\" class=\"aligncenter size-full wp-image-4854\" \/><center><em>\u523a\u5ba2\u4fe1\u6761: \u5927\u9769\u547d\u4e2d\u524d\u666f\u5efa\u7b51\u7684Depth Prepass(\u901a\u8fc7NVIDIA Nsight\u5de5\u5177\u6355\u83b7\u7684\u753b\u9762)<\/em><\/center><\/p>\n<p>\u5728\u8bb8\u591a\u573a\u666f\u4e2d, \u53ef\u4ee5\u5408\u7406\u5047\u8bbe: \u524d\u4e00\u5e27\u4e2d\u53ef\u89c1\u7684\u7269\u4f53\u5728\u5f53\u524d\u5e27\u4e2d\u4ecd\u53ef\u80fd\u4fdd\u6301\u53ef\u89c1. \u5229\u7528\u8fd9\u4e00\u89c2\u5bdf, \u4e00\u79cd\u89e3\u51b3\u65b9\u6848\u662f\u590d\u7528\u524d\u4e00\u5e27\u7684\u6df1\u5ea6\u7f13\u51b2\u533a, \u4ee5\u6b64\u751f\u6210\u5f53\u524d\u5e27\u65b0\u6df1\u5ea6\u7f13\u51b2\u533a\u7684\u8fd1\u4f3c\u503c. \u8fd9\u4e00\u6280\u672f\u88ab\u79f0\u4e3a\u6df1\u5ea6\u7f13\u51b2\u91cd\u6295\u5f71, \u5176\u5b9e\u73b0\u9700\u7ed3\u5408\u5f53\u524d\u5e27\u7684\u6444\u50cf\u673a\u53d8\u6362\u548c\u524d\u4e00\u5e27\u7684\u901f\u5ea6\u5411\u91cf\u7f13\u51b2\u533a.<br \/>\n$\\\\$ \u6df1\u5ea6\u91cd\u6295\u5f71\u8fd8\u53ef\u7528\u4e8e\u6784\u5efaShadow Map\u7684HZB. \u5176\u663e\u8457\u4f18\u52bf\u5728\u4e8e: \u51cf\u5c11\u624b\u52a8\u9009\u62e9\u906e\u6321\u4f53\u7684\u5fc5\u8981\u6027. \u7136\u800c, \u5c06\u6df1\u5ea6\u91cd\u6295\u5f71\u4e0e\u624b\u52a8\u906e\u6321\u4f53\u9009\u62e9\u7ed3\u5408\u4f7f\u7528, \u901a\u5e38\u80fd\u83b7\u5f97\u66f4\u4f18\u7684\u6548\u679c. \u80b2\u78a72014\u5e74\u53d1\u5e03\u7684\u300a\u523a\u5ba2\u4fe1\u6761: \u5927\u9769\u547d\u300b\u4e2d\u5373\u91c7\u7528\u4e86\u8be5\u6280\u672f.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.caiqinyi.cn\/wp-content\/uploads\/2025\/12\/reprojected_depth_buffer_background_building_NPCs_ground_geometry_composited_on_top_previously_rendered_depth_prepass_from_Assassins_Creed_Unity_captured_with_NSight.webp\" alt=\"\" width=\"720\" height=\"360\" class=\"aligncenter size-full wp-image-4859\" \/><center><em>\u901a\u8fc7NVIDIA Nsight\u5de5\u5177\u6355\u83b7\u7684\u300a\u523a\u5ba2\u4fe1\u6761: \u5927\u9769\u547d\u300b\u4e2d\u80cc\u666f\u5efa\u7b51, NPC\u53ca\u5730\u9762\u51e0\u4f55\u4f53\u7684\u91cd\u6295\u5f71\u6df1\u5ea6\u7f13\u51b2\u533a\u53e0\u52a0\u5728\u5148\u524d\u6e32\u67d3\u7684Depth Prepass\u7ed3\u679c\u4e4b\u4e0a\u7684\u753b\u9762<\/em><\/center><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.caiqinyi.cn\/wp-content\/uploads\/2025\/12\/fully_rendered_frame_from_Assassins_Creed_Unity_captured_with_NSight.webp\" alt=\"\" width=\"720\" height=\"405\" class=\"aligncenter size-full wp-image-4862\" \/><center><em>\u901a\u8fc7NVIDIA Nsight\u6355\u83b7\u7684\u300a\u523a\u5ba2\u4fe1\u6761: \u5927\u9769\u547d\u300b\u5b8c\u6574\u6e32\u67d3\u5e27\u5206\u6790<\/em><\/center><\/p>\n<p>\u5c3d\u7ba1\u6df1\u5ea6\u7f13\u51b2\u91cd\u6295\u5f71\u6280\u672f\u5177\u6709\u8bf8\u591a\u4f18\u52bf, \u4f46\u5b83\u4e5f\u5b58\u5728\u663e\u8457\u5c40\u9650\u6027. \u5176\u4e2d\u4e00\u4e2a\u4e3b\u8981\u95ee\u9898\u662f\u7cbe\u5ea6\u95ee\u9898: \u7531\u4e8eHZB\u7684\u6784\u5efa\u4f9d\u8d56\u4e8e\u5bf9\u6df1\u5ea6\u7f13\u51b2\u7684\u8fd1\u4f3c\u4f30\u7b97, \u906e\u6321\u5254\u9664\u8fc7\u7a0b\u5728\u67d0\u4e9b\u60c5\u51b5\u4e0b\u53ef\u80fd\u53d8\u5f97\u975e\u4fdd\u5b88(\u5373\u53ef\u80fd\u9519\u8bef\u5730\u5254\u9664\u672c\u5e94\u53ef\u89c1\u7684\u7269\u4f53). \u8fd9\u4f1a\u5bfc\u81f4\u53ef\u89c1\u6027Popping\u7b49\u95ee\u9898\u2014\u2014 \u5f53\u7269\u4f53\u4e0e\u6444\u50cf\u673a\u76f8\u5bf9\u8fd0\u52a8\u65f6, \u7269\u4f53\u53ef\u80fd\u7a81\u7136\u51fa\u73b0\u5728\u753b\u9762\u4e2d(\u800c\u975e\u6e10\u8fdb\u5f0f\u663e\u73b0).<\/p>\n<p><strong>4. \u53ccPass\u89e3\u51b3\u65b9\u6848<\/strong><\/p>\n<p>\u7ed3\u5408\u524d\u6587\u63d0\u5230\u7684\u4e24\u79cd\u89e3\u51b3\u65b9\u6848\u7684\u4f18\u52bf, \u53ef\u4ee5\u5b9e\u73b0\u4e24\u8005\u7684\u6700\u4f73\u5e73\u8861: \u65e2\u4fdd\u7559Depth Prepass\u7684\u7cbe\u5ea6, \u53c8\u907f\u514d\u6df1\u5ea6\u7f13\u51b2\u91cd\u6295\u5f71\u6240\u9700\u7684\u624b\u52a8\u6570\u636e\u6807\u6ce8. \u63d0\u51fa\u7684\u89e3\u51b3\u65b9\u6848\u4e0e\u6df1\u5ea6\u7f13\u51b2\u91cd\u6295\u5f71\u6709\u76f8\u4f3c\u4e4b\u5904, \u5373\u590d\u7528\u524d\u4e00\u5e27\u7684\u6570\u636e, \u4f46\u4e0d\u540c\u4e4b\u5904\u5728\u4e8e\u2014\u2014 \u5e76\u975e\u91cd\u6295\u5f71\u6df1\u5ea6\u503c, \u800c\u662f\u4ec5\u91cd\u6295\u5f71\u524d\u4e00\u5e27\u4e2d\u53ef\u89c1\u7684\u7269\u4f53. \u6280\u672f\u5b9e\u73b0\u6d41\u7a0b:<br \/>\n$\\\\$ $\\cdot$ \u7b2c\u4e00\u6b21Pass<br \/>\n$\\\\$ 1) \u5728\u5f53\u524d\u5e27\u7684\u6e32\u67d3\u521d\u59cb\u9636\u6bb5, \u6e32\u67d3\u524d\u4e00\u5e27\u4e2d\u53ef\u89c1\u7684\u7269\u4f53(\u5982\u89d2\u8272, \u52a8\u6001\u7269\u4f53\u6216\u5c0f\u578b\u51e0\u4f55\u4f53).<br \/>\n$\\\\$ 2) \u8fd9\u4e9b\u7269\u4f53\u4f5c\u4e3a\u5f53\u524d\u5e27\u7684\u7406\u60f3\u906e\u6321\u4f53\u5019\u9009, \u5047\u8bbe\u6444\u50cf\u673a\u8fd0\u52a8\u5e45\u5ea6\u4e0d\u5927(\u907f\u514d\u56e0\u89c6\u89d2\u5267\u70c8\u53d8\u5316\u5bfc\u81f4\u906e\u6321\u5173\u7cfb\u5931\u6548).<br \/>\n$\\\\$ 3) \u4e0eDepth Prepass\u4e0d\u540c, \u7b2c\u4e00\u6b21Pass\u901a\u5e38\u4e0d\u4ec5\u5b58\u50a8\u6df1\u5ea6\u4fe1\u606f, \u8fd8\u53ef\u80fd\u5305\u542b\u989d\u5916\u6570\u636e(\u5982\u6cd5\u7ebf, \u6750\u8d28\u5c5e\u6027), \u5177\u4f53\u53d6\u51b3\u4e8e\u6e32\u67d3\u7ba1\u7ebf:<br \/>\n$\\\\$ a) \u5ef6\u8fdf\u6e32\u67d3: \u751f\u6210G-Buffers.<br \/>\n$\\\\$ b) \u524d\u5411\u6e32\u67d3: \u4ec5\u5199\u5165\u6df1\u5ea6\u548c\u57fa\u7840\u989c\u8272\u4fe1\u606f.<br \/>\n$\\\\$ $\\cdot$ \u7b2c\u4e8c\u6b21Pass(\u6807\u51c6\u7684HZB\u906e\u6321\u5254\u9664)<br \/>\n$\\\\$ 1) \u57fa\u4e8e\u7b2c\u4e00\u6b21Pass\u751f\u6210\u7684\u6df1\u5ea6\u548c\u51e0\u4f55\u6570\u636e\u6784\u5efaHZB.<br \/>\n$\\\\$ 2) \u901a\u8fc7HZB\u8fdb\u884c\u906e\u6321\u6d4b\u8bd5, \u5254\u9664\u5f53\u524d\u5e27\u4e2d\u4e0d\u53ef\u89c1\u7684\u7269\u4f53.<br \/>\n$\\\\$ \u987e\u540d\u601d\u4e49, \u53ccPass\u906e\u6321\u5254\u9664\u7684\u6838\u5fc3\u601d\u60f3\u662f\u5c06\u573a\u666f\u4e2d\u7684\u7269\u4f53\u5212\u5206\u4e3a\u4e24\u7ec4, \u5e76\u901a\u8fc7\u4e24\u6b21\u72ec\u7acb\u7684\u6e32\u67d3Pass\u5904\u7406. \u6bcf\u4e00\u6b21Pass\u7531\u4e00\u6b21Compute Shader Dispatch\u7ec4\u6210, \u5176\u76ee\u6807\u662f\u751f\u6210Indirect Draw Call Arguments. \u968f\u540e, \u8fd9\u4e9b\u53c2\u6570\u4f1a\u88ab\u7528\u4e8e\u6267\u884c\u4e00\u6b21Indirect Draw Call, \u82e5\u786c\u4ef6\u652f\u6301Multi Draw Count Indirect\u7279\u6027, \u5219\u53ef\u8fdb\u4e00\u6b65\u4f18\u5316\u6027\u80fd. \u8fd9\u4e00\u6280\u672f\u4e0eGPU-Driven Pipeline\u9ad8\u5ea6\u5951\u5408.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.caiqinyi.cn\/wp-content\/uploads\/2025\/12\/two_pass_occlusion_culling_process_visualized.webp\" alt=\"\" width=\"720\" height=\"163\" class=\"aligncenter size-full wp-image-4870\" \/><center><em>\u53ccPass\u906e\u6321\u5254\u9664\u6d41\u7a0b\u53ef\u89c6\u5316<\/em><\/center><\/p>\n<p><strong>4.1 \u7b2c\u4e00\u6b21Pass<\/strong><\/p>\n<p>\u5982\u524d\u6240\u8ff0, \u7b2c\u4e00\u6b21Pass\u4ec5\u8d1f\u8d23\u5904\u7406\u524d\u4e00\u5e27\u4e2d\u53ef\u89c1\u7684\u7269\u4f53. \u4e3a\u5b9e\u73b0\u8fd9\u4e00\u76ee\u6807, Dispatch\u4e00\u4e2aCompute Shader, \u5176\u7ebf\u7a0b\u6570\u91cf\u4e0e\u573a\u666f\u4e2d\u7684\u7269\u4f53\u603b\u6570\u76f8\u540c. \u6b64\u5916, \u6bcf\u4e2a\u7ebf\u7a0b\u53ef\u5bf9\u524d\u4e00\u5e27\u53ef\u89c1\u7684\u7269\u4f53\u6267\u884c\u53ef\u9009\u7684\u89c6\u9525\u4f53\u5254\u9664\u548cLOD\u9009\u62e9, \u800c\u5b8c\u5168\u8df3\u8fc7\u524d\u4e00\u5e27\u4e0d\u53ef\u89c1\u7684\u7269\u4f53. \u8be5Compute Shader\u7684\u7ed3\u679c\u4f1a\u88ab\u5b58\u50a8\u5728GPU\u7f13\u51b2\u533a\u4e2d\u4f5c\u4e3aIndirect Draw Call Arguments.<br \/>\n$\\\\$ \u5728\u6536\u96c6\u5b8cIndirect Draw Call Arguments\u540e, \u8fd9\u4e9b\u53c2\u6570\u4f1a\u901a\u8fc7\u4e00\u6b21Indirect Draw Call\u6267\u884c. \u4e3a\u4e86\u8ddf\u8e2a\u524d\u4e00\u5e27\u4e2d\u7269\u4f53\u7684\u53ef\u89c1\u6027\u72b6\u6001, \u9700\u4f7f\u7528\u53e6\u4e00\u4e2aGPU\u7f13\u51b2\u533a\u2014\u2014  Visibility Buffer. \u8be5\u7f13\u51b2\u533a\u7684\u6bcf\u4e2a\u5143\u7d20\u5bf9\u5e94\u573a\u666f\u4e2d\u7684\u4e00\u4e2a\u7269\u4f53:<br \/>\n$\\\\$ $\\cdot$ 0\u8868\u793a\u7269\u4f53\u4e0d\u53ef\u89c1,<br \/>\n$\\\\$ $\\cdot$ 1\u8868\u793a\u7269\u4f53\u53ef\u89c1.<br \/>\n$\\\\$ Visibility Buffer\u521d\u59cb\u5316\u65f6\u5e94\u586b\u5145\u503c\u4e3a\u51680(\u9ed8\u8ba4\u4e0d\u53ef\u89c1) \u6216\u51681(\u9ed8\u8ba4\u53ef\u89c1). \u6b64\u5916, \u5355\u4e2a\u7f13\u51b2\u533a\u5143\u7d20\u4e2d\u53ef\u4ee5\u6253\u5305\u591a\u4e2a\u53ef\u89c1\u6027\u4f4d\u6807\u5fd7(\u4f8b\u5982\u901a\u8fc7\u4f4d\u63a9\u7801\u5b9e\u73b0\u591a\u5e27\u53ef\u89c1\u6027\u72b6\u6001\u5b58\u50a8).<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"HLSL\" data-enlighter-theme=\"monokai\">\r\n\r\n...\r\n\r\n\/\/ Read object's visibility from the previous frame\r\nbool visible = visibilityBuffer[drawIndex];\r\n\r\n\/\/ [Optional] Check if previously visible object\r\n\/\/ is frustum culled in the current frame\r\nif (visible)\r\n{\r\n    bool frustumCulled = isFrustumCulled(...);\r\n    visible &&= !frustumCulled;\r\n}\r\n\r\n\/\/ Only object that was visible in the\r\n\/\/ previous frame should be drawn in the first pass\r\nbool shouldDraw = visible;\r\n\r\nif (shouldDraw)\r\n{\r\n    \/\/ [Optional] Select LOD\r\n    ...\r\n\r\n    \/\/ Fill indirect draw call arguments\r\n    IndirectDrawArgs drawArgs;\r\n    ...\r\n\r\n    drawArgs[drawArgsIndex] = drawArgs;\r\n}\r\n\r\n<\/pre>\n<p>\u5728\u7b2c\u4e00\u6b21Pass\u5b8c\u6210\u540e, \u53ef\u4ee5\u4ece\u751f\u6210\u7684\u6df1\u5ea6\u7f13\u51b2\u533a\u4e2d\u6784\u5efaHZB. \u4e0e\u91cd\u6295\u5f71\u6280\u672f\u751f\u6210\u7684\u8fd1\u4f3c\u6df1\u5ea6\u7f13\u51b2\u533a\u76f8\u6bd4, \u8fd9\u662f\u4e00\u79cd\u5b8c\u5168\u4fdd\u5b88\u7684\u65b9\u6cd5.<\/p>\n<p><strong>4.2 \u7b2c\u4e8c\u6b21Pass<\/strong><\/p>\n<p>\u5728\u7b2c\u4e8c\u6b21Pass\u4e2d, \u518d\u6b21Dispatch\u4e00\u4e2aCompute Shader, \u5176\u7ebf\u7a0b\u6570\u91cf\u4e0e\u573a\u666f\u4e2d\u7684\u7269\u4f53\u603b\u6570\u76f8\u540c. \u7136\u800c, \u8fd9\u4e00\u6b21, \u6bcf\u4e2a\u7ebf\u7a0b\u4f1a\u5bf9\u7269\u4f53\u6267\u884c\u906e\u6321\u5254\u9664, \u5e76\u53ef\u9009\u5730\u8fdb\u884c\u89c6\u9525\u4f53\u5254\u9664\u548cLOD\u9009\u62e9, \u65e0\u8bba\u7269\u4f53\u5728\u524d\u4e00\u6b21Pass\u662f\u5426\u53ef\u89c1. \u6b64\u6b21Compute Shader\u7684\u8f93\u51fa\u7ed3\u679c\u662f\u4e00\u7ec4Indirect Draw Call Arguments, \u8868\u793a\u5728\u5f53\u524dPass\u88ab\u5224\u5b9a\u4e3a\u53ef\u89c1, \u4f46\u672a\u5728\u7b2c\u4e00\u6b21Pass\u6e32\u67d3\u7684\u7269\u4f53. \u8fd9\u4e9b\u53c2\u6570\u4f1a\u88ab\u5b58\u50a8\u5728GPU\u7f13\u51b2\u533a\u4e2d, \u5e76\u901a\u8fc7Indirect Draw Call\u6267\u884c, \u6d41\u7a0b\u4e0e\u7b2c\u4e00\u6b21Pass\u7c7b\u4f3c.<br \/>\n$\\\\$ \u4e3a\u9632\u6b62\u91cd\u590d\u6e32\u67d3\u5df2\u5728\u7b2c\u4e00\u6b21Pass\u7ed8\u5236\u8fc7\u7684\u7269\u4f53, \u9700\u8981\u8df3\u8fc7\u524d\u4e00\u5e27\u4e2d\u53ef\u89c1\u6027\u6807\u8bb0\u4e3a1\u7684\u7269\u4f53. \u6b64\u5916, \u65e0\u8bba\u8fd9\u4e9b\u7269\u4f53\u662f\u5426\u5728\u7b2c\u4e8c\u6b21Pass\u88ab\u6e32\u67d3, \u5747\u9700\u6839\u636e\u89c6\u9525\u4f53\u5254\u9664\u548c\u906e\u6321\u5254\u9664\u7684\u7ed3\u679c, \u52a8\u6001\u66f4\u65b0Visibility Buffer, \u4e3a\u4e0b\u4e00\u5e27\u7684\u6e32\u67d3\u6d41\u7a0b\u505a\u51c6\u5907.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"HLSL\" data-enlighter-theme=\"monokai\">\r\n\r\n..\r\n\r\n\/\/ [Optional] Check if object is frustum culled in the current frame\r\nbool frustumCulled = isFrustumCulled(...);\r\n\r\nbool visible = !frustumCulled;\r\n\r\n\/\/ Check if object is occlusion culled in the current frame\r\nif (visible)\r\n{\r\n    bool occlusionCulled = isOcclusionCulled(...);\r\n    visible &&= !occlusionCulled;\r\n}\r\n\r\n\/\/ Only object that is visible in the current frame\r\n\/\/ and was not drawn in the first pass should be drawn in the second pass\r\nbool shouldDraw = visible && !visibilityBuffer[drawIndex];\r\n\r\nif (shouldDraw)\r\n{\r\n    \/\/ [Optional] Select LOD\r\n    ...\r\n\r\n    \/\/ Fill indirect draw call arguments\r\n    IndirectDrawArgs drawArgs;\r\n    ...\r\n \r\n    drawArgs[drawArgsIndex] = drawArgs;\r\n}\r\n\r\n\/\/ Fill visibility buffer for the next frame\r\nvisibilityBuffer[drawIndex] = visible;\r\n\r\n<\/pre>\n<p><strong>5. \u793a\u4f8b<\/strong><\/p>\n<p>\u4e3a\u4e86\u66f4\u597d\u5730\u7406\u89e3\u8be5\u7b97\u6cd5, \u8003\u8651\u4e00\u4e2a\u5305\u542b5\u4e2a\u9759\u6001\u7269\u4f53\u4e0e\u79fb\u52a8\u6444\u50cf\u673a\u7684\u573a\u666f, \u5176\u573a\u666f\u8bbe\u5b9a\u4e3a:<br \/>\n$\\\\$ $\\cdot$ \u9759\u6001\u7269\u4f53: 5\u4e2a\u56fa\u5b9a\u4f4d\u7f6e\u7684\u51e0\u4f55\u4f53(\u5982\u7acb\u65b9\u4f53, \u7403\u4f53, \u5efa\u7b51\u6a21\u578b).<br \/>\n$\\\\$ $\\cdot$ \u52a8\u6001\u5143\u7d20: \u6444\u50cf\u673a\u6cbf\u9884\u8bbe\u8def\u5f84\u79fb\u52a8, \u89c6\u89d2\u968f\u65f6\u95f4\u53d8\u5316.<br \/>\n$\\\\$ $\\cdot$ \u76ee\u6807: \u901a\u8fc7\u53ccPass\u906e\u6321\u5254\u9664\u6280\u672f, \u5728\u5355\u5e27\u6e32\u67d3\u4e2d\u9ad8\u6548\u5254\u9664\u4e0d\u53ef\u89c1\u7269\u4f53.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.caiqinyi.cn\/wp-content\/uploads\/2025\/12\/example_test_scene_with_5_enumerated_objects_and_camera.webp\" alt=\"\" width=\"720\" height=\"405\" class=\"aligncenter size-full wp-image-4883\" \/><center><em>\u793a\u4f8b\u6d4b\u8bd5\u573a\u666f: 5\u4e2a\u5e26\u7f16\u53f7\u7684\u7269\u4f53\u4e0e\u4e00\u4e2a\u6444\u50cf\u673a<\/em><\/center><\/p>\n<p>\u5728\u7b2c\u4e00\u6b21Pass\u4e2d, \u6240\u67095\u4e2a\u7269\u4f53\u5747\u4f1a\u88ab\u5904\u7406.<br \/>\n$\\\\$ $\\cdot$ \u524d\u4e00\u5e27\u53ef\u89c1\u6027\u5224\u65ad:<br \/>\n$\\\\$ 1) \u82e5\u7269\u4f53\u5728\u524d\u4e00\u5e27\u7684Visibility Buffer\u4e2d\u6807\u8bb0\u4e3a0(\u4e0d\u53ef\u89c1), \u5219\u76f4\u63a5\u8df3\u8fc7\u5904\u7406.<br \/>\n$\\\\$ 2) \u82e5\u6807\u8bb0\u4e3a1(\u53ef\u89c1), \u5219\u53ef\u9009\u6267\u884c\u89c6\u9525\u4f53\u5254\u9664\u548cLOD\u9009\u62e9.<br \/>\n$\\\\$ $\\cdot$ \u793a\u4f8b\u573a\u666f:<br \/>\n$\\\\$ 1) \u5047\u8bbe\u524d\u4e00\u5e27\u4e2d3\u4e2a\u7269\u4f53\u53ef\u89c1(\u6807\u8bb0\u4e3a1), \u4f46\u56e0\u6444\u50cf\u673a\u5411\u5de6\u79fb\u52a8, \u5176\u4e2d\u4e00\u4e2a\u7269\u4f53\u5df2\u79fb\u51fa\u6444\u50cf\u673a\u89c6\u9525\u4f53.<br \/>\n$\\\\$ 2) \u82e5\u542f\u7528\u4e86\u89c6\u9525\u4f53\u5254\u9664, \u5219\u8be5\u7269\u4f53\u4f1a\u88ab\u5254\u9664, \u6700\u7ec8\u4ec5\u4e24\u4e2a\u7269\u4f53\u88ab\u6e32\u67d3, \u7b2c\u4e09\u4e2a\u7269\u4f53\u88ab\u8df3\u8fc7.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.caiqinyi.cn\/wp-content\/uploads\/2025\/12\/previous_frame_where_object_with_index_1_leave_camera_view.webp\" alt=\"\" width=\"720\" height=\"405\" class=\"aligncenter size-full wp-image-4886\" \/><center><em>\u524d\u4e00\u5e27\u4e2d, \u7d22\u5f15\u4e3a1\u7684\u7269\u4f53\u5373\u5c06\u79bb\u5f00\u6444\u50cf\u673a\u89c6\u91ce<\/em><\/center><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.caiqinyi.cn\/wp-content\/uploads\/2025\/12\/visibility_buffer_from_previous_frame_during_first_pass_where_green_indicates_objects_drawn_in_first_pass_still_visible_in_current_frame.webp\" alt=\"\" width=\"720\" height=\"126\" class=\"aligncenter size-full wp-image-4887\" \/><center><em>\u7b2c\u4e00\u6b21Pass\u4e2d\u524d\u4e00\u5e27\u7684Visibility Buffer, \u5176\u4e2d\u7eff\u8272\u8868\u793a\u5728\u7b2c\u4e00\u6b21Pass\u4e2d\u88ab\u6e32\u67d3\u4e14\u5728\u5f53\u524d\u5e27\u4e2d\u4ecd\u53ef\u89c1\u7684\u7269\u4f53<\/em><\/center><\/p>\n<p>\u5728\u7b2c\u4e8c\u6b21Pass\u7684\u5904\u7406\u6d41\u7a0b\u4e2d, \u6240\u6709\u7269\u4f53\u91cd\u65b0\u8bc4\u4f30\u53ef\u89c1\u6027. \u5176\u4e2d, \u7b2c\u4e8c\u6b21Pass\u7684\u6838\u5fc3\u903b\u8f91\u4e3a:<br \/>\n$\\\\$ $\\cdot$ \u5168\u91cf\u5904\u7406: \u65e0\u8bba\u7269\u4f53\u5728\u524d\u4e00\u5e27\u7684\u53ef\u89c1\u6027\u72b6\u6001\u5982\u4f55(0 = \u4e0d\u53ef\u89c1, 1 = \u53ef\u89c1), \u7b2c\u4e8c\u6b21Pass\u5747\u5bf9\u573a\u666f\u4e2d\u76845\u4e2a\u7269\u4f53\u8fdb\u884c\u5168\u91cf\u5904\u7406.<br \/>\n$\\\\$ $\\cdot$ \u5254\u9664\u4e0e\u4f18\u5316: \u5bf9\u6bcf\u4e2a\u7269\u4f53\u6267\u884c\u53ef\u9009\u7684\u89c6\u9525\u4f53\u5254\u9664, LOD\u9009\u62e9\u548c\u906e\u6321\u5254\u9664, \u786e\u4fdd\u4ec5\u6e32\u67d3\u5f53\u524d\u5e27\u771f\u6b63\u53ef\u89c1\u7684\u7269\u4f53.<br \/>\n$\\\\$ \u5bf9\u4e8e\u52a8\u6001\u573a\u666f\u53d8\u5316\u7684\u5904\u7406\u4e3a:<br \/>\n$\\\\$ $\\cdot$ \u65b0\u589e\u53ef\u89c1\u7269\u4f53: \u5047\u8bbe\u524d\u4e00\u5e27\u4e2d\u6709\u4e00\u4e2a\u7269\u4f53(\u5982Object3) \u56e0\u4f4d\u4e8e\u6444\u50cf\u673a\u89c6\u9525\u4f53\u5916(\u6807\u8bb0\u4e3a0), \u5728\u5f53\u524d\u5e27\u4e2d\u56e0\u6444\u50cf\u673a\u79fb\u52a8\u8fdb\u5165\u89c6\u9525\u4f53, \u53d8\u5f97\u53ef\u89c1.<br \/>\n$\\\\$ $\\cdot$ \u7b2c\u4e8c\u6b21Pass\u7ed3\u679c:<br \/>\n$\\\\$ 1) \u7b2c\u4e00\u6b21Pass\u5df2\u6e32\u67d32\u4e2a\u7269\u4f53(\u5982Object1\u548cObject2).<br \/>\n$\\\\$ 2) \u7b2c\u4e8c\u6b21Pass\u901a\u8fc7\u5254\u9664\u6d4b\u8bd5\u540e, \u65b0\u589eObject3\u7684\u6e32\u67d3, \u6700\u7ec8\u603b\u5171\u6e32\u67d33\u4e2a\u7269\u4f53.<br \/>\n$\\\\$ \u5bf9\u4e8eVisibility Buffer\u7684\u66f4\u65b0\u5904\u7406\u4e3a:<br \/>\n$\\\\$ $\\cdot$ \u52a8\u6001\u66f4\u65b0\u89c4\u5219:<br \/>\n$\\\\$ 1) \u5bf9\u901a\u8fc7\u7b2c\u4e8c\u6b21Pass\u6d4b\u8bd5\u7684\u7269\u4f53(\u5982Object3), \u5c06\u5176\u53ef\u89c1\u6027\u6807\u8bb0\u66f4\u65b0\u4e3a1.<br \/>\n$\\\\$ 2) \u5bf9\u672a\u901a\u8fc7\u6d4b\u8bd5\u7684\u7269\u4f53(\u5982\u56e0\u906e\u6321\u6216\u89c6\u9525\u4f53\u5254\u9664\u7684\u7269\u4f53), \u6807\u8bb0\u4e3a0.<br \/>\n$\\\\$ $\\cdot$ \u76ee\u7684: \u4e3a\u4e0b\u4e00\u5e27\u7684\u7b2c\u4e00\u6b21Pass\u63d0\u4f9b\u6700\u65b0\u53ef\u89c1\u6027\u6570\u636e, \u786e\u4fdd\u52a8\u6001\u573a\u666f\u7684\u5254\u9664\u7cbe\u5ea6.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.caiqinyi.cn\/wp-content\/uploads\/2026\/01\/current_frame_where_object_with_index_0_has_entered_view.webp\" alt=\"\" width=\"973\" height=\"547\" class=\"aligncenter size-full wp-image-4890\" \/><center><em>\u5f53\u524d\u5e27\u4e2d, \u7d22\u5f15\u4e3a0\u7684\u7269\u4f53\u5df2\u8fdb\u5165\u89c6\u91ce<\/em><\/center><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.caiqinyi.cn\/wp-content\/uploads\/2026\/01\/updated_visibility_buffer_in_second_pass_where_green_indicates_objects_drawn_in_second_pass_and_not_in_first_pass.webp\" alt=\"\" width=\"1100\" height=\"193\" class=\"aligncenter size-full wp-image-4891\" \/><center><em>\u7b2c\u4e8c\u6b21Pass\u66f4\u65b0\u540e\u7684Visibility Buffer, \u5176\u4e2d\u7eff\u8272\u8868\u793a\u5728\u7b2c\u4e8c\u6b21Pass\u7ed8\u5236\u4f46\u672a\u5728\u7b2c\u4e00\u6b21Pass\u7ed8\u5236\u7684\u7269\u4f53<\/em><\/center><\/p>\n<p><strong>6. Nanite\u5b9e\u9645\u5254\u9664\u65b9\u6848(\u57fa\u672c\u4e0a\u5f15\u7528\u81ea\u53c2\u8003\u6750\u65992)<\/strong><\/p>\n<p>Nanite\u6700\u540e\u7684\u53ccPass\u5254\u9664\u65b9\u6848\u5176\u5b9e\u975e\u5e38\u7684\u7b80\u5355. \u4e4b\u524d\u7684\u60f3\u6cd5\u662f\u4e0a\u4e00\u5e27\u53ef\u89c1\u7684Clusters\u5927\u6982\u7387\u8fd9\u5e27\u4e5f\u53ef\u89c1, \u6240\u4ee5\u62ff\u6765\u5f53\u4f5cOccluders. \u73b0\u5728\u7684\u60f3\u6cd5\u662f\u8fd9\u4e00\u5e27\u53ef\u89c1\u7684Clusters\u5927\u6982\u7387\u5728\u4e0a\u4e00\u5e27\u4e5f\u53ef\u89c1, \u6240\u4ee5\u6211\u4eec\u628a\u5f53\u524d\u5e27\u6240\u6709Clusters\u90fd\u8f6c\u6362\u5230\u4e0a\u4e00\u5e27\u7684\u4f4d\u7f6e\u4e0a\u53bb, \u7136\u540e\u5229\u7528\u4e0a\u4e00\u5e27\u7684Hi-$Z$\u8fdb\u884c\u906e\u6321\u5254\u9664. \u6700\u540e\u6211\u4eec\u518d\u5bf9\u88ab\u5254\u9664\u7684Clusters\u8fdb\u884c\u7b2c\u4e8c\u6b21\u4fdd\u5b88\u5254\u9664.<br \/>\n$\\\\$ \u4e4d\u4e00\u770b\u8fd9\u4e2a\u65b9\u6848\u548c\u5927\u9769\u547d\u6709\u4ec0\u4e48\u4e0d\u540c\u5417? \u96be\u9053\u4e0d\u90fd\u662f\u5229\u7528\u4e0a\u4e00\u5e27\u7684$Z$ Buffer\u5417? \u8fd9\u4e2a\u65b9\u6848\u5de7\u5999\u7684\u70b9\u5c31\u5728\u4e8e, \u5927\u9769\u547d\u662fReproject\u4e0a\u4e00\u5e27\u7684$Z$ Buffer\u5230\u5f53\u524d\u5e27, \u800cReprojection\u4f1a\u5bfc\u81f4\u6f0f\u6d1e; \u800cNanite\u7684\u65b9\u6848\u662f\u5229\u7528\u6bcf\u4e2aCluster\u4e0a\u4e00\u5e27\u7684Transform, \u628aClusters\u53d8\u6362\u5230\u4e0a\u4e00\u5e27\u7684\u4f4d\u7f6e\u4e0b\u53bb\u68c0\u6d4b\u53ef\u89c1\u4fe1\u606f, $Z$ Buffer\u672c\u8eab\u4e0d\u9700\u8981Reprojection, \u8fd9\u4e5f\u5c31\u4e0d\u5b58\u5728\u6f0f\u6d1e\u4e86. PS: \u8fd9\u548c\u7b14\u8005\u82e5\u5e72\u5e74\u505a\u5173\u4e8eRBF\u9006\u6620\u5c04\u7684\u56fe\u5f62\u5b66\u4f5c\u4e1a\u7684\u601d\u8def\u672c\u8d28\u4e0a\u662f\u4e00\u6837\u76842333.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.caiqinyi.cn\/wp-content\/uploads\/2026\/01\/nanite_two_pass_occlusion_culling.jpg\" alt=\"\" width=\"1440\" height=\"803\" class=\"aligncenter size-full wp-image-4904\" srcset=\"https:\/\/www.caiqinyi.cn\/wp-content\/uploads\/2026\/01\/nanite_two_pass_occlusion_culling.jpg 1440w, https:\/\/www.caiqinyi.cn\/wp-content\/uploads\/2026\/01\/nanite_two_pass_occlusion_culling-300x167.jpg 300w, https:\/\/www.caiqinyi.cn\/wp-content\/uploads\/2026\/01\/nanite_two_pass_occlusion_culling-768x428.jpg 768w\" sizes=\"(max-width: 1440px) 100vw, 1440px\" \/><\/p>\n<p>\u8fd9\u5957\u64cd\u4f5c\u6d41\u7a0b\u53cb\u597d: \u4e0d\u9700\u8981\u624b\u52a8\u5e03\u7f6eOccluders, \u4e5f\u4e0d\u9700\u8981\u7ef4\u62a4\u590d\u6742\u7684\u4e0a\u4e00\u5e27Clusters\u961f\u5217, \u800c\u4e14\u7531\u4e8e\u751f\u6210Motion Vectors\u7684\u9700\u8981, \u4e0a\u4e00\u5e27Clusters\u7684Transforms\u672c\u6765\u5c31\u9700\u8981\u8bb0\u5f55, \u4e0d\u9700\u8981\u989d\u5916\u4fe1\u606f; \u4e0e\u6b64\u540c\u65f6\u6027\u80fd\u5f00\u9500\u4e5f\u6781\u5927\u964d\u4f4e: \u4e0d\u7528\u7ed8\u5236Occluders, \u91cd\u6295\u5f71$Z$ Buffer\u7684\u5f00\u9500\u4e5f\u6ca1\u4e86, \u8f6c\u6362Clusters\u5230\u5f53\u524d\u5e27\u8fd8\u662f\u4e0a\u4e00\u5e27\u5f00\u9500\u662f\u6ca1\u6709\u4efb\u4f55\u533a\u522b\u7684, \u4ec5\u4ec5\u662f\u62ff\u7684MVP\u77e9\u9635\u4e0d\u540c, \u800c\u4e14\u8fd8\u4e0d\u9700\u8981\u5bf9\u91cd\u6295\u5f71\u7684$Z$ Buffer\u518d\u751f\u6210\u4e00\u6b21Hi-$Z$ Chain(\u672c\u6765\u4e0a\u4e00\u5e27\u7ed8\u5236\u51e0\u4f55\u7ed3\u675f\u5c31\u9700\u8981\u518d\u751f\u6210\u4e00\u6b21Hi-$Z$\u7528\u6765\u52a0\u901f\u5404\u79cd\u540e\u5904\u7406 \/ Material Binning\u4e4b\u7c7b\u7684).<br \/>\n$\\\\$ \u53ef\u4ee5\u8bf4Nanite\u4ec5\u4ec5\u5728\u601d\u8def\u4e0a\u8f6c\u6362\u4e86\u4e00\u5c0f\u6b65, \u5c31\u5b8c\u5168\u628a\u5927\u9769\u547d\u65b9\u6848\u7684\u52a3\u52bf\u7ed9\u6d88\u9664\u6389\u4e86, \u8fd9\u4e2a\u505a\u6cd5\u770b\u5b8c\u4e86\u611f\u89c9\u5c31\u662f&#8221;\u4e3a\u4ec0\u4e48\u4e4b\u524d\u6ca1\u4eba\u60f3\u5230\u5462?&#8221;, \u770b\u9694\u58c1COD: Warzone\u5206\u4eab\u8fd8\u662fCPU\u8f6f\u6e32\u67d3Occluders\u4fdd\u8bc1Depth\u51c6\u786e(\u5f53\u7136\u8fd9\u53ef\u80fd\u662f\u9879\u76ee\u7ba1\u7406\u56e0\u7d20\u4e86, \u53cd\u6b63\u6700\u540e\u6027\u80fd\u4e5f\u5f88\u597d).<\/p>\n<p><strong>7. \u7ed3\u8bba<\/strong><\/p>\n<p><strong>7.1 \u53ccPass\u906e\u6321\u5254\u9664\u7684\u6838\u5fc3\u4f18\u52bf<\/strong><\/p>\n<p>$\\cdot$ \u9ad8\u6548\u5254\u9664\u4e0d\u53ef\u89c1\u7269\u4f53: \u901a\u8fc7\u7b2c\u4e00\u6b21Pass\u7ee7\u627f\u524d\u4e00\u5e27\u53ef\u89c1\u6027\u6570\u636e, \u7b2c\u4e8c\u6b21Pass\u5168\u91cf\u5904\u7406\u52a8\u6001\u53d8\u5316, \u663e\u8457\u964d\u4f4eGPU\u6e32\u67d3\u8d1f\u8f7d.<br \/>\n$\\\\$ $\\cdot$ \u8de8\u5e27\u4e00\u81f4\u6027: \u52a8\u6001\u66f4\u65b0Visibility Buffer, \u907f\u514d\u753b\u9762\u95ea\u70c1(\u5982\u7269\u4f53\u7a81\u7136\u51fa\u73b0\u6216\u6d88\u5931).<\/p>\n<p><strong>7.2 \u5267\u70c8\u8fd0\u52a8\u573a\u666f\u4e0b\u7684\u6027\u80fd\u74f6\u9888<\/strong><\/p>\n<p>$\\cdot$ \u95ee\u9898\u63cf\u8ff0:<br \/>\n$\\\\$ 1) \u5f53\u6444\u50cf\u673a\u4e0e\u7269\u4f53\u53d1\u751f\u5267\u70c8\u76f8\u5bf9\u8fd0\u52a8(\u5982\u8fc7\u573a\u52a8\u753b\u4e2d\u7684\u955c\u5934\u5feb\u901f\u5207\u6362), \u53ef\u80fd\u5bfc\u81f4\u5927\u91cf\u7269\u4f53\u7a81\u7136\u8fdb\u5165\u89c6\u91ce.<br \/>\n$\\\\$ 2) \u7b2c\u4e00\u6b21Pass\u4ec5\u5904\u7406\u524d\u4e00\u5e27\u53ef\u89c1\u7684\u7269\u4f53(\u5982Object1-2), \u65e0\u6cd5\u53ca\u65f6\u5904\u7406\u65b0\u589e\u53ef\u89c1\u7269\u4f53(\u5982Object0).<br \/>\n$\\\\$ $\\cdot$ \u6027\u80fd\u5f71\u54cd: \u7b2c\u4e8c\u6b21Pass\u5168\u91cf\u5904\u74065\u4e2a\u7269\u4f53\u65f6, \u65b0\u589e\u53ef\u89c1\u7269\u4f53(\u5982Object0) \u9700\u989d\u5916\u8ba1\u7b97HZB\u906e\u6321\u6d4b\u8bd5\u548cIndirect Draw Call Arguments\u751f\u6210, \u5bfc\u81f4\u5355\u5e27\u6027\u80fd\u6ce2\u52a8.<\/p>\n<p><strong>7.3 \u53ccPass\u906e\u6321\u5254\u9664\u6027\u80fd\u74f6\u9888\u89e3\u51b3\u65b9\u6848: \u5f15\u5165Depth Prepass<\/strong><\/p>\n<p>$\\cdot$ \u5b9e\u73b0\u539f\u7406:<br \/>\n$\\\\$ 1) \u5728\u53ccPass\u5254\u9664\u6d41\u7a0b\u524d, \u9884\u5148\u6e32\u67d3\u6240\u6709\u7269\u4f53\u7684\u6df1\u5ea6\u4fe1\u606f(Depth Prepass), \u751f\u6210\u4fdd\u5b88\u7684HZB.<br \/>\n$\\\\$ 2) \u7b2c\u4e00\u6b21Pass\u548c\u7b2c\u4e8c\u6b21Pass\u76f4\u63a5\u590d\u7528\u9884\u5904\u7406\u540e\u7684HZB, \u51cf\u5c11\u91cd\u590d\u8ba1\u7b97\u5f00\u9500.<br \/>\n$\\\\$ $\\cdot$ \u4f18\u52bf:<br \/>\n$\\\\$ 1) \u964d\u4f4eHZB\u751f\u6210\u9891\u7387: \u907f\u514d\u6bcf\u5e27\u56e0\u7269\u4f53\u5267\u70c8\u8fd0\u52a8\u91cd\u65b0\u6784\u5efaHZB, \u63d0\u5347\u6027\u80fd\u7a33\u5b9a\u6027.<br \/>\n$\\\\$ 2) \u52a0\u901f\u906e\u6321\u6d4b\u8bd5: \u9884\u5904\u7406\u540e\u7684HZB\u53ef\u76f4\u63a5\u7528\u4e8e\u53ccPass\u5254\u9664, \u51cf\u5c11\u5197\u4f59\u8ba1\u7b97.<\/p>\n<p><strong>7.4 \u652f\u6301\u4e0d\u540c\u5c42\u7ea7\u7684\u5254\u9664\u6280\u672f<\/strong><\/p>\n<p>$\\cdot$ Meshlet\u4e0e\u4e09\u89d2\u5f62\u5254\u9664:<br \/>\n$\\\\$ 1) \u8be5\u6280\u672f\u4e0d\u4ec5\u9002\u7528\u4e8e\u7269\u4f53\u5c42\u7ea7\u5254\u9664, \u8fd8\u53ef\u6269\u5c55\u81f3Meshlet\u5254\u9664(\u57fa\u4e8e\u7ec6\u5206\u7f51\u683c\u7684\u53ef\u89c1\u6027\u6d4b\u8bd5) \u548c\u4e09\u89d2\u5f62\u5254\u9664(\u9010\u4e09\u89d2\u5f62\u7684\u906e\u6321\u5224\u65ad).<br \/>\n$\\\\$ 2) \u6027\u80fd\u6743\u8861: \u4e09\u89d2\u5f62\u5254\u9664\u56e0\u8ba1\u7b97\u5f00\u9500\u8f83\u5927, \u901a\u5e38\u6027\u4ef7\u6bd4\u4e0d\u9ad8, \u4f46\u5728\u8d85\u7cbe\u7ec6\u51e0\u4f55\u4f53\u573a\u666f(\u5982Nanite\u865a\u62df\u5316\u51e0\u4f55\u4f53) \u4e2d\u53ef\u80fd\u5e26\u6765\u6536\u76ca.<\/p>\n<p><strong>7.5 \u8de8\u6e32\u67d3\u7ba1\u7ebf\u7684\u517c\u5bb9\u6027<\/strong><\/p>\n<p>$\\cdot$ \u652f\u6301\u7684\u6e32\u67d3\u67b6\u6784:<br \/>\n$\\\\$ 1) \u6b63\u5411\u6e32\u67d3: \u901a\u8fc7\u65e9\u671f\u5254\u9664\u51cf\u5c11\u5197\u4f59\u7740\u8272\u8ba1\u7b97.<br \/>\n$\\\\$ 2) \u5ef6\u8fdf\u6e32\u67d3: \u7ed3\u5408G-Buffer\u4f18\u5316\u906e\u6321\u5254\u9664\u6548\u7387.<br \/>\n$\\\\$ 3) \u5ef6\u8fdf\u6750\u8d28: \u5728\u6750\u8d28\u89e3\u6790\u524d\u5254\u9664\u4e0d\u53ef\u89c1\u51e0\u4f55\u4f53.<br \/>\n$\\\\$ 4) Visibility Buffer: \u4e0e\u4f20\u7edfVisibility Buffer\u533a\u5206, \u6b64\u5904\u6307\u57fa\u4e8eDepth Prepass\u7684\u53ef\u89c1\u6027\u52a0\u901f\u6280\u672f.<br \/>\n$\\\\$ $\\cdot$ \u9ad8\u5bc6\u5ea6\u51e0\u4f55\u573a\u666f\u63a8\u8350\u65b9\u6848: \u5ef6\u8fdf\u6750\u8d28\u4e0eVisbility Buffer\u5728\u8d85\u5927\u89c4\u6a21\u51e0\u4f55\u4f53(\u5982\u5bc6\u5ea6\u690d\u88ab, \u5efa\u7b51\u7fa4) \u4e2d\u8868\u73b0\u6700\u4f73, \u56e0\u5176\u80fd\u9ad8\u6548\u5904\u7406\u5927\u91cf\u7ec6\u5c0f\u906e\u6321\u5173\u7cfb.<\/p>\n<p><strong>7.6 \u73b0\u4ee3\u5f15\u64ce\u7684GPU\u9a71\u52a8\u8d8b\u52bf<\/strong><\/p>\n<p>$\\cdot$ \u884c\u4e1a\u73b0\u72b6: \u5927\u591a\u6570\u73b0\u4ee3\u6e38\u620f\u5f15\u64ce(\u5982Unreal Engine 5, Unity HDRP) \u91c7\u7528GPU-Driven Rendering\u67b6\u6784, \u4ee5\u964d\u4f4eCPU\u74f6\u9888.<br \/>\n$\\\\$ $\\cdot$ \u53ccPass\u5254\u9664\u7684\u4f18\u52bf:<br \/>\n$\\\\$ 1) \u8f7b\u91cf\u7ea7\u5b9e\u73b0: \u4ec5\u9700\u4e24\u6b21Pass\u4e2d\u4f7f\u7528Compute Shader\u4e0e\u66f4\u65b0Visibility Buffer, \u9002\u914dGPU\u5e76\u884c\u8ba1\u7b97\u7279\u6027.<br \/>\n$\\\\$ 2) \u6027\u80fd\u589e\u76ca: \u5728\u590d\u6742\u573a\u666f\u4e2d\u53ef\u51cf\u5c11Draw Calls\u4e0ePixel Shader\u8d1f\u8f7d.<br \/>\n$\\\\$ $\\cdot$ \u884c\u4e1a\u91c7\u7eb3\u9884\u6d4b: \u9274\u4e8e\u5176\u5b9e\u73b0\u7b80\u5355\u4e0e\u6027\u80fd\u6536\u76ca\u663e\u8457, \u9884\u8ba1\u5c06\u6210\u4e3a\u4e3b\u6d41\u5f15\u64ce\u7684\u6807\u51c6\u5254\u9664\u65b9\u6848.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u5728\u6df1\u5165\u7814\u7a76Nanite\u7684\u8fc7\u7a0b\u4e2d, \u53d1\u73b0Nanite\u4f7f\u7528\u4e86\u53ccPass\u906e\u6321\u5254\u9664\u7684\u6280\u672f. \u4e4b\u524d\u5bf9\u6b64\u6280\u672f\u4e5f\u7565\u6709\u8033\u95fb,  &hellip; <a href=\"https:\/\/www.caiqinyi.cn\/index.php\/2026\/01\/04\/two_pass_occlusion_culling\/\" class=\"more-link\">\u7ee7\u7eed\u9605\u8bfb<span class=\"screen-reader-text\">\u53ccPass\u906e\u6321\u5254\u9664<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[31,12,24,9,5],"tags":[],"_links":{"self":[{"href":"https:\/\/www.caiqinyi.cn\/index.php\/wp-json\/wp\/v2\/posts\/4833"}],"collection":[{"href":"https:\/\/www.caiqinyi.cn\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.caiqinyi.cn\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.caiqinyi.cn\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.caiqinyi.cn\/index.php\/wp-json\/wp\/v2\/comments?post=4833"}],"version-history":[{"count":66,"href":"https:\/\/www.caiqinyi.cn\/index.php\/wp-json\/wp\/v2\/posts\/4833\/revisions"}],"predecessor-version":[{"id":5077,"href":"https:\/\/www.caiqinyi.cn\/index.php\/wp-json\/wp\/v2\/posts\/4833\/revisions\/5077"}],"wp:attachment":[{"href":"https:\/\/www.caiqinyi.cn\/index.php\/wp-json\/wp\/v2\/media?parent=4833"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.caiqinyi.cn\/index.php\/wp-json\/wp\/v2\/categories?post=4833"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.caiqinyi.cn\/index.php\/wp-json\/wp\/v2\/tags?post=4833"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}