{"id":286225,"date":"2017-05-12T12:50:07","date_gmt":"2017-05-12T08:50:07","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=286225"},"modified":"-0001-11-30T00:00:00","modified_gmt":"2017-05-12T08:50:07","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=286225","title":{"rendered":"\u0413\u043e\u0442\u043e\u0432\u0438\u043c Physically Based Rendering + Image-based Lighting. \u0422\u0435\u043e\u0440\u0438\u044f+\u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0430. \u0428\u0430\u0433 \u0437\u0430 \u0448\u0430\u0433\u043e\u043c"},"content":{"rendered":"<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/web\/601\/516\/b79\/601516b79c8c4fc08f6f94c7d3528196.png\" align=\"left\"\/>\u0425\u0435\u0439, \u043f\u0440\u0438\u0432\u0435\u0442. 2017 \u0433\u043e\u0434 \u043d\u0430 \u0434\u0432\u043e\u0440\u0435. \u0414\u0430\u0436\u0435 \u043f\u0440\u043e\u0441\u0442\u0435\u043d\u044c\u043a\u0438\u0435 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0435 \u0438 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043d\u044b\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442 \u043f\u043e\u0442\u0438\u0445\u043e\u043d\u044c\u043a\u0443 \u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0435 \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u0435. \u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442 \u043f\u0435\u0441\u0442\u0440\u0438\u0442 \u043a\u0443\u0447\u0435\u0439 \u0441\u0442\u0430\u0442\u0435\u0439 \u0438 \u0433\u043e\u0442\u043e\u0432\u044b\u0445 \u0448\u0435\u0439\u0434\u0435\u0440\u043e\u0432. \u0418 \u043a\u0430\u0436\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u044d\u0442\u043e \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0442\u0430\u043a \u043f\u0440\u043e\u0441\u0442\u043e \u0442\u043e\u0436\u0435 \u043e\u0431\u043c\u0430\u0437\u0430\u0442\u044c\u0441\u044f PBR\u2026 \u0418\u043b\u0438 \u043d\u0435\u0442?<br \/>  \u0412 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0436\u0435 \u0447\u0435\u0441\u0442\u043d\u044b\u0439 PBR \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0441\u043b\u043e\u0436\u043d\u043e, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043b\u0435\u0433\u043a\u043e \u0434\u043e\u0441\u0442\u0438\u0447\u044c \u043f\u043e\u0445\u043e\u0436\u0435\u0433\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430, \u043d\u043e \u0441\u043b\u043e\u0436\u043d\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0433\u043e. \u0418 \u0432 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0435 \u043f\u043e\u043b\u043d\u043e \u0441\u0442\u0430\u0442\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u0435\u043b\u0430\u044e\u0442 \u0438\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u0445\u043e\u0436\u0438\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442, \u0432\u043c\u0435\u0441\u0442\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0433\u043e. \u041e\u0442\u0434\u0435\u043b\u0438\u0442\u044c \u043c\u0443\u0445 \u043e\u0442 \u043a\u043e\u0442\u043b\u0435\u0442 \u0432 \u044d\u0442\u043e\u043c \u0445\u0430\u043e\u0441\u0435 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0441\u043b\u043e\u0436\u043d\u043e.<br \/>  \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0446\u0435\u043b\u044c \u0441\u0442\u0430\u0442\u044c\u0438 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0436\u0435 \u0442\u0430\u043a\u043e\u0435 PBR \u0438 \u043a\u0430\u043a \u043e\u043d \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u043d\u043e \u0438 \u043d\u0430\u0443\u0447\u0438\u0442\u044c\u0441\u044f \u043f\u0438\u0441\u0430\u0442\u044c \u0435\u0433\u043e. \u041a\u0430\u043a \u043e\u0442\u043b\u0430\u0436\u0438\u0432\u0430\u0442\u044c, \u043a\u0443\u0434\u0430 \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u0438 \u043a\u0430\u043a\u0438\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u0442\u0438\u043f\u0438\u0447\u043d\u043e \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c.<br \/>  \u0421\u0442\u0430\u0442\u044c\u044f \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d\u0430 \u043d\u0430 \u043b\u044e\u0434\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e\u0439 \u043c\u0435\u0440\u0435 \u0443\u0436\u0435 \u0437\u043d\u0430\u044e\u0442 hlsl \u0438 \u043d\u0435\u043f\u043b\u043e\u0445\u043e \u0437\u043d\u0430\u043a\u043e\u043c\u044b \u0441 \u043b\u0438\u043d\u0435\u0439\u043d\u043e\u0439 \u0430\u043b\u0433\u0435\u0431\u0440\u043e\u0439, \u0438 \u043c\u043e\u0436\u0435\u0442\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0432\u043e\u0439 \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0438\u0439 \u043d\u0435PBR Phong \u0441\u0432\u0435\u0442. \u0412 \u043e\u0431\u0449\u0435\u043c \u044f \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u044e\u0441\u044c \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0449\u0435 \u043e\u0431\u044a\u044f\u0441\u043d\u0438\u0442\u044c, \u043d\u043e \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u044e \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u043f\u044b\u0442 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0448\u0435\u0439\u0434\u0435\u0440\u0430\u043c\u0438 \u0432\u044b \u0443\u0436\u0435 \u0438\u043c\u0435\u0435\u0442\u0435.<a name=\"habracut\"><\/a><br \/>  \u041f\u0440\u0438\u043c\u0435\u0440\u044b \u0431\u0443\u0434\u0443\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u044b \u043d\u0430 Delphi (\u0438 \u0441\u043e\u0431\u0438\u0440\u0430\u044e\u0442\u0441\u044f \u043f\u043e\u0434 FreePascal), \u043d\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043a\u043e\u0434 \u0431\u0443\u0434\u0435\u0442 \u0432\u0441\u0435 \u0436\u0435 \u043d\u0430 hlsl. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0435 \u0441\u0442\u043e\u0438\u0442 \u043f\u0443\u0433\u0430\u0442\u044c\u0441\u044f, \u0435\u0441\u043b\u0438 \u0432\u044b \u043d\u0435 \u0437\u043d\u0430\u0435\u0442\u0435 Delphi.  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0413\u0434\u0435 \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0438 \u043f\u043e\u0449\u0443\u043f\u0430\u0442\u044c?<\/b><\/p>\n<div class=\"spoiler_text\">\u0414\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 \u0432\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u043a\u043e\u0434 <a href=\"https:\/\/github.com\/MrShoor\/AvalancheProject\">AvalancheProject<\/a>. \u042d\u0442\u043e \u043c\u043e\u0439 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u0432\u043e\u043a\u0440\u0443\u0433 DX11\/OpenGL. \u0415\u0449\u0435 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f <a href=\"http:\/\/imaginglib.sourceforge.net\/\">Vampyre Imaging Library<\/a>. \u042d\u0442\u043e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430\u043c\u0438, \u044f \u0435\u0451 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b. \u0421\u0430\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f <a href=\"https:\/\/github.com\/MrShoor\/PBRSamples\">\u0442\u0443\u0442<\/a>. \u0414\u043b\u044f \u0442\u0435\u0445, \u043a\u0442\u043e \u043d\u0435 \u0445\u043e\u0447\u0435\u0442\/\u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a\u0438, \u0430 \u0445\u043e\u0447\u0435\u0442 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0443\u0436\u0435 \u0441\u043e\u0431\u0440\u0430\u043d\u043d\u044b\u043c\u0438, \u0442\u043e \u043e\u043d\u0438 <a href=\"https:\/\/github.com\/MrShoor\/PBRSamples\/releases\/download\/1.0\/PBRSamples_1_0.zip\">\u0442\u0443\u0442<\/a>.  <\/div>\n<\/div>\n<p>\u0418\u0442\u0430\u043a \u043f\u0440\u0438\u0441\u0442\u0435\u0433\u043d\u0443\u043b\u0438 \u0440\u0435\u043c\u043d\u0438, \u043f\u043e\u0435\u0445\u0430\u043b\u0438.<\/p>\n<h2>1 \u0412\u0430\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 sRGB.<\/h2>\n<p>  \u041d\u0430\u0448\u0438 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u044b \u043e\u0431\u044b\u0447\u043d\u043e \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442 sRGB \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435. \u042d\u0442\u043e \u043d\u0430 95% \u0441\u043f\u0440\u0430\u0432\u0435\u0434\u043b\u0438\u0432\u043e \u0434\u043b\u044f \u0434\u0435\u0441\u043a\u0442\u043e\u043f\u043e\u0432, \u0438 \u0432 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0441\u0442\u0435\u043f\u0435\u043d\u0438 \u0441\u043f\u0440\u0430\u0432\u0435\u0434\u043b\u0438\u0432\u043e \u0434\u043b\u044f \u043d\u043e\u0443\u0442\u0431\u0443\u043a\u043e\u0432 (\u0430 \u043d\u0430 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0430\u0445 \u0442\u0430\u043c \u0441\u043f\u043b\u043e\u0448\u043d\u043e\u0439 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b). \u0421\u0432\u044f\u0437\u0430\u043d\u043e \u044d\u0442\u043e \u0441 \u0442\u0435\u043c, \u0447\u0442\u043e \u043d\u0430\u0448\u0435 \u0432\u043e\u0441\u043f\u0440\u0438\u044f\u0442\u0438\u0435 \u043d\u0435 \u043b\u0438\u043d\u0435\u0439\u043d\u043e, \u0438 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0441\u0432\u0435\u0442\u0430 \u0432 \u0442\u0435\u043c\u043d\u044b\u0445 \u043e\u0431\u043b\u0430\u0441\u0442\u044f\u0445 \u043c\u044b \u0437\u0430\u043c\u0435\u0447\u0430\u0435\u043c \u043b\u0443\u0447\u0448\u0435, \u0447\u0435\u043c \u0442\u0430\u043a\u0438\u0435 \u0436\u0435 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u044b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u0441\u0432\u0435\u0442\u043b\u044b\u0445 \u043e\u0431\u043b\u0430\u0441\u0442\u044f\u0445. \u0415\u0441\u043b\u0438 \u0433\u0440\u0443\u0431\u043e \u2014 \u0442\u043e \u043f\u0440\u0438 \u043f\u043e\u0432\u044b\u0448\u0435\u043d\u0438\u0438 \u044f\u0440\u043a\u043e\u0441\u0442\u0438 \u0432 4 \u0440\u0430\u0437\u0430 \u043c\u044b \u0432\u043e\u0441\u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u043c \u044d\u0442\u043e \u043a\u0430\u043a \u043f\u043e\u0432\u044b\u0448\u0435\u043d\u0438\u0435 \u044f\u0440\u043a\u043e\u0441\u0442\u0438 \u0432 2 \u0440\u0430\u0437\u0430. \u042f \u043f\u0440\u0438\u0433\u043e\u0442\u043e\u0432\u0438\u043b \u0432\u0430\u043c \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/fa4\/70f\/727\/fa470f72751241c7a0875df482f7d8c1.png\"\/><br \/>  \u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043f\u044b\u0442\u0430\u0442\u044c\u0441\u044f \u043f\u043e\u043d\u044f\u0442\u044c \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443 \u2014 \u0443\u0431\u0435\u0434\u0438\u0442\u0435\u0441\u044c, \u0447\u0442\u043e \u0432\u0430\u0448 \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u0438\u043b\u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0438 \u0440\u0430\u0437\u043c\u0435\u0440\u044b \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f.<br \/>  \u041f\u043e\u0441\u0440\u0435\u0434\u0438\u043d\u0435 \u043a\u0432\u0430\u0434\u0440\u0430\u0442, \u0441\u043e\u0441\u0442\u043e\u044f\u0449\u0438\u0439 \u0438\u0437 \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u043e\u0434\u043d\u043e\u043f\u0438\u043a\u0441\u0435\u043b\u044c\u043d\u044b\u0445 \u0447\u0435\u0440\u043d\u044b\u0445 \u0438 \u0431\u0435\u043b\u044b\u0445 \u043f\u043e\u043b\u043e\u0441. \u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u0432\u0435\u0442\u0430 \u043e\u0442 \u044d\u0442\u043e\u0433\u043e \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u0430 \u0440\u043e\u0432\u043d\u043e \u0432 2 \u0440\u0430\u0437\u0430 \u043c\u0435\u043d\u044c\u0448\u0435, \u0447\u0435\u043c \u043e\u0442 \u0447\u0438\u0441\u0442\u043e \u0431\u0435\u043b\u043e\u0433\u043e. \u0422\u0435\u043f\u0435\u0440\u044c \u0435\u0441\u043b\u0438 \u0432\u044b \u043e\u0442\u043e\u0439\u0434\u0435\u0442\u0435 \u043e\u0442 \u044d\u043a\u0440\u0430\u043d\u0430 \u043f\u043e\u0434\u0430\u043b\u044c\u0448\u0435, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u043e\u0441\u044b \u0441\u043b\u0438\u043b\u0438\u0441\u044c \u0432 \u043a\u0432\u0430\u0434\u0440\u0430\u0442 \u043e\u0434\u043d\u043e\u0433\u043e \u0446\u0432\u0435\u0442\u0430, \u0442\u043e \u043d\u0430 \u043e\u0442\u043a\u0430\u043b\u0438\u0431\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0435 \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u0432\u0430\u0434\u0440\u0430\u0442 \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u043b\u0438\u0442\u044c\u0441\u044f \u0441 \u043f\u0440\u0430\u0432\u044b\u043c \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u043e\u043c, \u0430 \u043b\u0435\u0432\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0442\u0435\u043c\u043d\u0435\u0435. \u0415\u0441\u043b\u0438 \u0432\u044b \u0442\u0435\u043f\u0435\u0440\u044c \u0432\u043e\u0437\u044c\u043c\u0435\u0442\u0435 \u043f\u0438\u043f\u0435\u0442\u043a\u043e\u0439 \u0446\u0432\u0435\u0442 \u043b\u0435\u0432\u043e\u0433\u043e \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u0430, \u0442\u043e \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0442\u0435 \u0447\u0442\u043e \u043e\u043d 128, \u0430 \u043f\u0440\u0430\u0432\u043e\u0433\u043e \u2014 187. \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u043f\u0440\u0438 \u0441\u043c\u0435\u0448\u0438\u0432\u0430\u043d\u0438\u0438 50\/50 \u0447\u0435\u0440\u043d\u043e\u0433\u043e: 0 0 0 \u0438 \u0431\u0435\u043b\u043e\u0433\u043e 255 255 255 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043d\u0435 ~128 128 128, \u0430 \u0430\u0436 187 187 187.<br \/>  \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043b\u044f \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0433\u043e \u0440\u0435\u043d\u0434\u0435\u0440\u0430 \u043d\u0430\u043c \u0432\u0430\u0436\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u0431\u0435\u043b\u044b\u0439, \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u043d\u044b\u0439 \u043d\u0430 0.5 \u043d\u0430 \u044d\u043a\u0440\u0430\u043d\u0435 \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u043b\u0441\u044f \u0432 187 187 187. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0445 API (DirectX \u0438 OpenGL) \u0435\u0441\u0442\u044c \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u0430\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 sRGB. \u0412 \u043c\u043e\u043c\u0435\u043d\u0442 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0430\u043c\u0438 \u0432 \u0448\u0435\u0439\u0434\u0435\u0440\u0435 \u043e\u043d\u0438 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u044f\u0442\u0441\u044f \u0432 \u043b\u0438\u043d\u0435\u0439\u043d\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e, \u0430 \u043f\u0440\u0438 \u0432\u044b\u0432\u043e\u0434\u0435 \u043d\u0430 \u044d\u043a\u0440\u0430\u043d \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u044f\u0442\u0441\u044f \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0432 sRGB.<br \/>  \u042f \u043d\u0435 \u0431\u0443\u0434\u0443 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0442\u043e, \u043a\u0430\u043a \u044d\u0442\u043e\u0433\u043e \u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f \u0432 DirectX\/OpenGL. \u042d\u0442\u043e \u043b\u0435\u0433\u043a\u043e \u0433\u0443\u0433\u043b\u0438\u0442\u0441\u044f. \u0410 \u0443\u0431\u0435\u0434\u0438\u0442\u0441\u044f, \u0447\u0442\u043e \u0432\u0430\u0448 sRGB \u0437\u0430\u0440\u0430\u0431\u043e\u0442\u0430\u043b \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e. \u041b\u0438\u043d\u0435\u0439\u043d\u044b\u0439 \u0433\u0440\u0430\u0434\u0438\u0435\u043d\u0442 \u043e\u0442 \u0447\u0435\u0440\u043d\u043e\u0433\u043e \u043a \u0431\u0435\u043b\u043e\u043c\u0443 \u0434\u043e\u043b\u0436\u0435\u043d \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c\u0441\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0432\u043e\u0442 \u0442\u0430\u043a:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/2b8\/657\/6bb\/2b86576bbf666ee72654264e5011ca50.jpg\" alt=\"image\"\/><br \/>  \u041c\u043d\u0435 \u043b\u0438\u0448\u044c \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0432\u0430\u0436\u043d\u043e\u0441\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u044b \u0432 \u043b\u0438\u043d\u0435\u0439\u043d\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e <b>\u044d\u0442\u043e \u043e\u0434\u043d\u0430 \u0438\u0437 \u043f\u0435\u0440\u0432\u044b\u0445 \u043e\u0448\u0438\u0431\u043e\u043a<\/b>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0435 \u0432 \u0441\u0442\u0430\u0442\u044c\u044f\u0445 \u043f\u0440\u043e PBR.<\/p>\n<h2>2 Cook-Torrance<\/h2>\n<p>  \u0424\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u0439 \u0440\u0435\u043d\u0434\u0435\u0440 \u043e\u0431\u044b\u0447\u043d\u043e \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u0442\u0430\u043a\u0438\u0435 \u0432\u0435\u0449\u0438 \u043a\u0430\u043a:  <\/p>\n<ol>\n<li> \u041a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u044b \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0424\u0440\u0435\u043d\u0435\u043b\u044f <\/li>\n<li> \u0417\u0430\u043a\u043e\u043d \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u044d\u043d\u0435\u0440\u0433\u0438\u0438 <\/li>\n<li> \u0422\u0435\u043e\u0440\u0438\u044e \u043c\u0438\u043a\u0440\u043e\u0433\u0440\u0430\u043d\u0435\u0439 (<b>microfacet theory<\/b>) \u0434\u043b\u044f \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u0432\u0435\u0442\u0430 \u0438 \u043f\u0435\u0440\u0435\u0438\u0437\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0433\u043e <\/li>\n<\/ol>\n<p>  \u0421\u043f\u0438\u0441\u043e\u043a \u043c\u043e\u0436\u0435\u0442 \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0442\u044c\u0441\u044f \u043d\u0430 microfacet theory \u0434\u043b\u044f \u043f\u043e\u0434\u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u043d\u043e\u0433\u043e \u0440\u0430\u0441\u0441\u0435\u0438\u0432\u0430\u043d\u0438\u044f (subsurface scattering) \u0438 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0433\u043e \u043f\u0440\u0435\u043b\u043e\u043c\u043b\u0435\u043d\u0438\u044f \u0438 \u0442.\u0434., \u043d\u043e \u0432 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u043c\u044b \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043e \u043f\u0435\u0440\u0432\u044b\u0445 \u0442\u0440\u0435\u0445 \u043f\u0443\u043d\u043a\u0442\u0430\u0445.<\/p>\n<h3>2.1 Microfacet Theory<\/h3>\n<p>  \u041f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0438 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u043e\u0432 \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u043c\u0438\u0440\u0435 \u043d\u0435 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u0433\u043b\u0430\u0434\u043a\u0438\u0435, \u0430 \u043e\u0447\u0435\u043d\u044c \u0434\u0430\u0436\u0435 \u0448\u0435\u0440\u043e\u0445\u043e\u0432\u0430\u0442\u044b\u0435. \u042d\u0442\u0438 \u043c\u0438\u043a\u0440\u043e\u043d\u0435\u0440\u043e\u0432\u043d\u043e\u0441\u0442\u0438 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u0434\u043b\u0438\u043d\u043d\u044b \u0441\u0432\u0435\u0442\u043e\u0432\u043e\u0439 \u0432\u043e\u043b\u043d\u044b, \u0438 \u0432\u043d\u043e\u0441\u044f\u0442 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0432\u043a\u043b\u0430\u0434 \u0432 \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u0435. \u041d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0448\u0435\u0440\u043e\u0445\u043e\u0432\u0430\u0442\u0443\u044e \u043f\u043b\u043e\u0441\u043a\u043e\u0441\u0442\u044c \u043e\u0434\u043d\u0438\u043c \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u043c \u043d\u043e\u0440\u043c\u0430\u043b\u0438, \u0438 \u043d\u043e\u0440\u043c\u0430\u043b\u044c \u043e\u0431\u044b\u0447\u043d\u043e \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0443\u0441\u0440\u0435\u0434\u043d\u0435\u043d\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043c\u0430\u043a\u0440\u043e\u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0438:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/b7f\/719\/038\/b7f719038ed90d85fe7cc806bdc804dc.png\" alt=\"image\"\/><br \/>  \u041a\u043e\u0433\u0434\u0430 \u0432 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0432\u043a\u043b\u0430\u0434 \u0432 \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u043d\u044b\u0439 \u0441\u0432\u0435\u0442 \u0434\u0430\u044e\u0442 \u0438\u043c\u0435\u043d\u043d\u043e \u043c\u0438\u043a\u0440\u043e\u0433\u0440\u0430\u043d\u0438:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/e4d\/502\/6da\/e4d5026da47747d0b6b4c666907393d2.PNG\"\/><br \/>  \u0412\u0441\u0435 \u043c\u044b \u043f\u043e\u043c\u043d\u0438\u043c, \u0447\u0442\u043e \u0443\u0433\u043e\u043b \u043f\u0430\u0434\u0435\u043d\u0438\u044f \u0440\u0430\u0432\u0435\u043d \u0443\u0433\u043b\u0443 \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u0438\u044f, \u0438 \u0432\u0435\u043a\u0442\u043e\u0440 h \u043d\u0430 \u0434\u0430\u043d\u043d\u043e\u043c \u0440\u0438\u0441\u0443\u043d\u043a\u0435 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0438\u043c\u0435\u043d\u043d\u043e \u043d\u043e\u0440\u043c\u0430\u043b\u044c \u043c\u0438\u043a\u0440\u043e\u0433\u0440\u0430\u043d\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0434\u0430\u0435\u0442 \u0432\u043a\u043b\u0430\u0434 \u0432 \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u0435. \u0418\u043c\u0435\u043d\u043d\u043e \u0441\u0432\u0435\u0442 \u043e\u0442 \u044d\u0442\u043e\u0439 \u0442\u043e\u0447\u043a\u0438 \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0438 \u043c\u044b \u0443\u0432\u0438\u0434\u0438\u043c.<br \/>  \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0447\u0430\u0441\u0442\u044c \u0441\u0432\u0435\u0442\u0430 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0435 \u0434\u043e\u043b\u0435\u0442\u0438\u0442 \u0434\u043e \u043c\u0438\u043a\u0440\u043e\u0433\u0440\u0430\u043d\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u043b\u0438 \u0431\u044b \u043e\u0442\u0440\u0430\u0437\u0438\u0442\u044c \u0435\u0433\u043e:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/a98\/c83\/353\/a98c8335310e49acb8d2303bbf44715d.png\"\/><br \/>  \u042d\u0442\u043e \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u0430\u043c\u043e\u0437\u0430\u0442\u0435\u043d\u0435\u043d\u0438\u0435, \u0438\u043b\u0438 <b>shadowng<\/b>.<br \/>  \u0410 \u0441\u0432\u0435\u0442, \u0434\u043e\u043b\u0435\u0442\u0435\u0432\u0448\u0438\u0439 \u0434\u043e \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0438, \u0438 \u043e\u0442\u0440\u0430\u0437\u0438\u0432\u0448\u0438\u0439\u0441\u044f \u2014 \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0441\u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u043b\u0435\u0442\u0435\u0442\u044c:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/3e0\/d23\/263\/3e0d2326314e44e191f3340a6a15f44a.png\"\/><br \/>  \u042d\u0442\u043e \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u0430\u043c\u043e\u043f\u0435\u0440\u0435\u043a\u0440\u044b\u0442\u0438\u0435, \u0438\u043b\u0438 <b>masking<\/b>.<br \/>  \u0410 \u0441\u0430\u043c\u044b\u0439 \u0445\u0438\u0442\u0440\u044b\u0439 \u0441\u0432\u0435\u0442 \u0441\u043c\u043e\u0436\u0435\u0442 \u043e\u0442\u0440\u0430\u0437\u0438\u0442\u044c\u0441\u044f \u0434\u0432\u0430 \u0438 \u0431\u043e\u043b\u044c\u0448\u0435 \u0440\u0430\u0437:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/064\/702\/d14\/064702d1437d4573ae2c7f452496da1d.png\"\/><br \/>  \u0418 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u044d\u0442\u043e\u0442 \u044d\u0444\u0444\u0435\u043a\u0442 \u2014 <b>retroreflection<\/b>.<br \/>  \u0412\u0441\u0435 \u044d\u0442\u0438 \u043c\u0438\u043a\u0440\u043e\u0433\u0440\u0430\u043d\u0438 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u043e\u043c \u0448\u0435\u0440\u043e\u0445\u043e\u0432\u0430\u0442\u043e\u0441\u0442\u0438 (<b>roughness<\/b>), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0431\u044b\u0447\u043d\u043e (\u043d\u043e \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430) \u043b\u0435\u0436\u0438\u0442 \u0432 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435 (0;1]. \u041f\u0440\u0438 0 \u0443 \u043d\u0430\u0441 \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u044c \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e \u0433\u043b\u0430\u0434\u043a\u0430\u044f, \u0438 \u043c\u0438\u043a\u0440\u043e\u0433\u0440\u0430\u043d\u0435\u0439 \u043d\u0435\u0442. \u041f\u0440\u0438 1 \u043c\u0438\u043a\u0440\u043e\u0433\u0440\u0430\u043d\u0438 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u044b \u0442\u0430\u043a, \u0447\u0442\u043e \u0440\u0430\u0432\u043d\u043e\u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e \u043e\u0442\u0440\u0430\u0436\u0430\u044e\u0442 \u0441\u0432\u0435\u0442 \u043f\u043e \u043f\u043e\u043b\u0443\u0441\u0444\u0435\u0440\u0435. \u0418\u043d\u043e\u0433\u0434\u0430 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 \u0448\u0435\u0440\u043e\u0445\u043e\u0432\u0430\u0442\u043e\u0441\u0442\u0438 \u0437\u0430\u043c\u0435\u043d\u044f\u044e\u0442 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u043e\u043c \u0433\u043b\u0430\u0434\u043a\u043e\u0441\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0430\u0432\u0435\u043d 1-roughness.<br \/>  \u0412\u043e\u0442 \u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435 \u0438 \u0432\u0441\u0435, \u043a\u0430\u043a \u0432\u0435\u0434\u0443\u0442 \u0441\u0435\u0431\u044f \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0438 \u0434\u043b\u044f \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u0432\u0435\u0442\u0430.<\/p>\n<h3>2.2 Bidirectional Reflectance Distribution Function<\/h3>\n<p>  \u0418\u0442\u0430\u043a, \u0441\u0432\u0435\u0442 \u043f\u043e\u043f\u0430\u0434\u0430\u044f \u043d\u0430 \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u044c \u0447\u0430\u0441\u0442\u0438\u0447\u043d\u043e \u043e\u0442\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f, \u0430 \u0447\u0430\u0441\u0442\u0438\u0447\u043d\u043e \u043f\u0440\u043e\u043d\u0438\u043a\u0430\u0435\u0442 \u0432\u043d\u0443\u0442\u0440\u044c \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0438\u0437 \u043e\u0431\u0449\u0435\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430 \u0441\u0432\u0435\u0442\u0430 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0432\u044b\u0447\u043b\u0435\u043d\u044f\u044e\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u0432\u0435\u0442\u0430. \u0411\u043e\u043b\u0435\u0435 \u0442\u043e\u0433\u043e, \u043d\u0430\u0441 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u0432\u0435\u0442\u0430, \u043d\u043e \u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u0432\u0435\u0442\u0430, \u043f\u043e\u043f\u0430\u0434\u0430\u044e\u0449\u0435\u0433\u043e \u043d\u0430\u043c \u0432 \u0433\u043b\u0430\u0437. \u0418 \u044d\u0442\u043e \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 <b>Bidirectional Reflectance Distribution Function (BRDF)<\/b>. \u041c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043e\u0434\u043d\u0443 \u0438\u0437 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u043c\u043e\u0434\u0435\u043b\u0435\u0439 \u2014 \u043c\u043e\u0434\u0435\u043b\u044c <b>Cook-Torrance<\/b>:<br \/>  <img decoding=\"async\" src=\"https:\/\/wikimedia.org\/api\/rest_v1\/media\/math\/render\/svg\/70b610bf99b3f0c30bf64e5e09a0b3ab58c5db9e\" alt=\"image\"\/><br \/>  \u0412 \u044d\u0442\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438:<br \/>  <b>V<\/b> \u2014 \u0432\u0435\u043a\u0442\u043e\u0440 \u043e\u0442 \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0438 \u0432 \u0433\u043b\u0430\u0437 \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0442\u0435\u043b\u044f<br \/>  <b>N<\/b> \u2014 \u043c\u0430\u043a\u0440\u043e-\u043d\u043e\u0440\u043c\u0430\u043b\u044c \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0438<br \/>  <b>L<\/b> \u2014 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043e\u0442 \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0438 \u043a \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0443 \u0441\u0432\u0435\u0442\u0430<br \/>  <b>D<\/b> \u2014 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u0432\u0435\u0442\u0430 \u0441 \u0443\u0447\u0435\u0442\u043e\u043c \u043c\u0438\u043a\u0440\u043e\u0433\u0440\u0430\u043d\u0435\u0439. \u041e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043c\u0438\u043a\u0440\u043e\u0433\u0440\u0430\u043d\u0435\u0439, \u043f\u043e\u0432\u0435\u0440\u043d\u0443\u0442\u044b\u0445 \u043a \u043d\u0430\u043c \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043e\u0442\u0440\u0430\u0436\u0430\u0442\u044c \u0441\u0432\u0435\u0442 \u043a \u043d\u0430\u043c \u0432 \u0433\u043b\u0430\u0437.<br \/>  <b>G<\/b> \u2014 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0441\u0430\u043c\u043e\u0437\u0430\u0442\u0435\u043d\u0435\u043d\u0438\u044f \u0438 \u0441\u0430\u043c\u043e\u043f\u0435\u0440\u0435\u043a\u0440\u044b\u0442\u0438\u044f. \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e \u0441\u0432\u0435\u0442, \u043f\u0435\u0440\u0435\u043e\u0442\u0440\u0430\u0436\u0435\u043d\u043d\u044b\u0439 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437 \u0432 \u044d\u0442\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043d\u0435 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u0438 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0442\u0435\u0440\u044f\u043d. \u041c\u044b \u0435\u0449\u0435 \u0432\u0435\u0440\u043d\u0435\u043c\u0441\u044f \u043a \u044d\u0442\u043e\u043c\u0443 \u043c\u043e\u043c\u0435\u043d\u0442\u0443 \u043f\u043e\u0437\u0436\u0435 \u0432 \u0441\u0442\u0430\u0442\u044c\u0435.<br \/>  <b>F<\/b> \u2014 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u044b \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0424\u0440\u0435\u043d\u0435\u043b\u044f. \u041d\u0435 \u0432\u0435\u0441\u044c \u0441\u0432\u0435\u0442 \u043e\u0442\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f. \u0427\u0430\u0441\u0442\u044c \u0441\u0432\u0435\u0442\u0430 \u043f\u0440\u0435\u043b\u043e\u043c\u043b\u044f\u0435\u0442\u0441\u044f \u0438 \u043f\u043e\u043f\u0430\u0434\u0435\u0442 \u0432\u043d\u0443\u0442\u0440\u044c \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430. \u0412 \u0434\u0430\u043d\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 F \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u0432\u0435\u0442\u0430.<br \/>  \u0415\u0449\u0435 \u0432 \u0444\u043e\u0440\u043c\u0443\u043b\u0435 \u043d\u0435 \u0432\u0438\u0434\u043d\u043e \u0442\u0430\u043a\u043e\u0433\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430, \u043a\u0430\u043a <b>H<\/b> \u0432\u0435\u043a\u0442\u043e\u0440, \u043d\u043e \u043e\u043d \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432 D \u0438 G \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u0445 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f. \u0421\u043c\u044b\u0441\u043b <b>H<\/b> \u0432\u0435\u043a\u0442\u043e\u0440\u0430 \u2014 \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u043d\u043e\u0440\u043c\u0430\u043b\u044c \u043c\u0438\u043a\u0440\u043e\u0433\u0440\u0430\u043d\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u0430\u044e\u0442 \u0432\u043a\u043b\u0430\u0434 \u0432 \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u043d\u044b\u0439 \u0441\u0432\u0435\u0442. \u0422.\u0435. \u043b\u0443\u0447 \u0441\u0432\u0435\u0442\u0430 \u043f\u043e\u043f\u0430\u0432\u0448\u0438\u0439 \u043d\u0430 \u043c\u0438\u043a\u0440\u043e\u0433\u0440\u0430\u043d\u044c \u0441 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u044e <b>H<\/b> \u0432\u0441\u0435\u0433\u0434\u0430 \u043e\u0442\u0440\u0430\u0437\u0438\u0442\u0441\u044f \u043d\u0430\u043c \u0432 \u0433\u043b\u0430\u0437. \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0443\u0433\u043e\u043b \u043f\u0430\u0434\u0435\u043d\u0438\u044f \u0440\u0430\u0432\u0435\u043d \u0443\u0433\u043b\u0443 \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u0438\u044f, \u0442\u043e \u043c\u044b \u0432\u0441\u0435\u0433\u0434\u0430 \u043c\u043e\u0436\u0435\u043c \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c <b>H<\/b>, \u043a\u0430\u043a <b>normalize(V+N)<\/b>. \u0412\u043e\u0442 \u043a\u0430\u043a-\u0442\u043e \u0442\u0430\u043a:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/4e2\/4c8\/d20\/4e24c8d20896b14b02e74a65d67b2eef.png\" alt=\"image\"\/><br \/>  \u0424\u0443\u043d\u043a\u0446\u0438\u0438 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f <b>D<\/b> \u0438 <b>G<\/b> \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0441\u043e\u0431\u043e\u0439 \u043f\u0440\u0438\u0431\u043b\u0438\u0436\u0435\u043d\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435, \u0438 \u0438\u0445 \u043c\u043d\u043e\u0433\u043e, \u0438 \u0440\u0430\u0437\u043d\u044b\u0445. \u042f \u0432 \u043a\u043e\u043d\u0446\u0435 \u0441\u0442\u0430\u0442\u044c\u0438 \u043e\u0441\u0442\u0430\u0432\u043b\u044e \u0441\u0441\u044b\u043b\u043e\u0447\u043a\u0443 \u043d\u0430 \u0441\u043f\u0438\u0441\u043e\u043a \u0442\u0430\u043a\u0438\u0445 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0439. \u041c\u044b \u0436\u0435 \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <b>GGX <\/b>\u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f, \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u044b\u0435 Bruce Walter-\u043e\u043c.<\/p>\n<h3>2.3 G. \u0413\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u044f \u043f\u0435\u0440\u0435\u043a\u0440\u044b\u0442\u0438\u044f<\/h3>\n<p>  \u041d\u0430\u0447\u043d\u0435\u043c \u0441 \u0441\u0430\u043c\u043e\u0437\u0430\u0442\u0435\u043d\u0435\u043d\u0438\u044f \u0438 \u043f\u0435\u0440\u0435\u043a\u0440\u044b\u0442\u0438\u044f. \u042d\u0442\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044f <b>G<\/b>. <b>GGX<\/b> \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u044d\u0442\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043c\u0435\u0442\u043e\u0434 Smith-\u0430 (Smith 1967, \u00abGeometrical shadowing of a random rough surface\u00bb). \u0413\u043b\u0430\u0432\u043d\u044b\u0439 \u043f\u043e\u0439\u043d\u0442 \u044d\u0442\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u0442\u0435\u0440\u044f\u043d\u043d\u043e\u0433\u043e \u0441\u0432\u0435\u0442\u0430 \u043e\u0442 \u0441\u0432\u0435\u0442\u0430 \u0434\u043e \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0438 \u0438 \u043e\u0442 \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0438 \u0434\u043e \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0442\u0435\u043b\u044f \u0431\u0443\u0434\u0435\u0442 \u0441\u0438\u043c\u043c\u0435\u0442\u0440\u0438\u0447\u043d\u043e \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043c\u0430\u043a\u0440\u043e\u043d\u043e\u0440\u043c\u0430\u043b\u0438 \u043f\u043e\u0432\u0440\u0435\u0445\u043d\u043e\u0441\u0442\u0438. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044e <b>G<\/b> \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0440\u0430\u0437\u0431\u0438\u0442\u044c \u043d\u0430 2 \u0447\u0430\u0441\u0442\u0438, \u0438 \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u0442\u044c \u043f\u0435\u0440\u0432\u0443\u044e \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0443 \u043f\u043e\u0442\u0435\u0440\u044f\u043d\u043d\u043e\u0433\u043e \u0441\u0432\u0435\u0442\u0430 \u043e\u0442 \u0443\u0433\u043b\u0430 \u043c\u0435\u0436\u0434\u0443 <b>N<\/b> \u0438 <b>L<\/b>, \u0430 \u043f\u043e\u0442\u043e\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u044d\u0442\u0443 \u0436\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u0442\u044c \u043f\u043e\u0442\u0435\u0440\u044f\u043d\u043d\u044b\u0439 \u0441\u0432\u0435\u0442 \u043e\u0442 \u0443\u0433\u043b\u0430 \u043c\u0435\u0436\u0434\u0443 <b>V<\/b> \u0438 <b>N<\/b>. \u0412\u043e\u0442 \u043e\u0434\u043d\u0443 \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0443 \u0442\u0430\u043a\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <b>G<\/b> \u0438 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 <b>GGX<\/b>:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/ce5\/ae1\/533\/ce5ae1533742433fb3673360066bd94c.png\"\/><br \/>  \u0412 \u044d\u0442\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438<br \/>  <b>\u03b1<sub>g<\/sub><\/b> \u2014 \u043a\u0432\u0430\u0434\u0440\u0430\u0442 \u0448\u0435\u0440\u043e\u0445\u043e\u0432\u0430\u0442\u043e\u0441\u0442\u0438 \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0438 (roughness*roughness). <br \/>  <b>\u03b8<sub>v<\/sub><\/b> \u2014 \u0443\u0433\u043e\u043b \u043c\u0435\u0436\u0434\u0443 \u043c\u0430\u043a\u0440\u043e\u043d\u043e\u0440\u043c\u0430\u043b\u044c\u044e <b>N<\/b> \u0438 \u0432 \u043e\u0434\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0441\u0432\u0435\u0442\u043e\u043c <b>L<\/b>, \u0432 \u0434\u0440\u0443\u0433\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u043c \u043d\u0430 \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0442\u0435\u043b\u044f <b>V<\/b>.<br \/>  <b>\u03a7<\/b> \u2014 \u0444\u0443\u043d\u043a\u0446\u0438\u044f, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0449\u0430\u044f \u043d\u043e\u043b\u044c \u0435\u0441\u043b\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c\u044b\u0439 \u043b\u0443\u0447 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u0441 \u043f\u0440\u043e\u0442\u0438\u0432\u043e\u043f\u043e\u043b\u043e\u0436\u043d\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u043d\u043e\u0440\u043c\u0430\u043b\u0438, \u0432 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0435\u0434\u0438\u043d\u0438\u0446\u0443. \u0412 \u0448\u0435\u0439\u0434\u0435\u0440\u0435 HLSL \u043c\u044b \u0432\u044b\u043a\u0438\u043d\u0435\u043c \u044d\u0442\u043e \u0438\u0437 \u0444\u043e\u0440\u043c\u0443\u043b\u044b, \u0442.\u043a. \u0431\u0443\u0434\u0435\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u043d\u0430 \u0441\u0430\u043c\u044b\u0445 \u0440\u0430\u043d\u043d\u0438\u0445 \u044d\u0442\u0430\u043f\u0430\u0445, \u0438 \u043d\u0435 \u043e\u0441\u0432\u0435\u0449\u0430\u0442\u044c \u0442\u0430\u043a\u043e\u0439 \u043f\u0438\u043a\u0441\u0435\u043b\u044c \u0432\u043e\u043e\u0431\u0449\u0435. \u0412 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0439 \u0444\u043e\u0440\u043c\u0443\u043b\u0435 \u0443 \u043d\u0430\u0441 \u0442\u0430\u043d\u0433\u0435\u043d\u0441, \u043e\u0434\u043d\u0430\u043a\u043e \u0434\u043b\u044f \u0440\u0435\u043d\u0434\u0435\u0440\u0430 \u0443\u0434\u043e\u0431\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u0441\u0438\u043d\u0443\u0441 \u0443\u0433\u043b\u0430, \u0442.\u043a. \u043c\u044b \u0435\u0433\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0447\u0435\u0440\u0435\u0437 \u0441\u043a\u0430\u043b\u044f\u0440\u043d\u043e\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0447\u0443\u0442\u044c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043b \u0444\u043e\u0440\u043c\u0443\u043b\u0443, \u0438 \u0437\u0430\u043f\u0438\u0441\u0430\u043b \u0435\u0451 \u0432 HLSL \u043a\u043e\u0434\u0435:  <\/p>\n<pre><code class=\"cpp\">float GGX_PartialGeometry(float cosThetaN, float alpha) {     float cosTheta_sqr = saturate(cosThetaN*cosThetaN);     float tan2 = ( 1 - cosTheta_sqr ) \/ cosTheta_sqr;     float GP = 2 \/ ( 1 + sqrt( 1 + alpha * alpha * tan2 ) );     return GP; }<\/code><\/pre>\n<p>  \u0418 \u043e\u0431\u0449\u0438\u0439 <b>G<\/b> \u043e\u0442 \u0432\u0435\u043a\u0442\u043e\u0440\u0430 \u0441\u0432\u0435\u0442\u0430 \u0438 \u0432\u0435\u043a\u0442\u043e\u0440\u0430 \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0442\u0435\u043b\u044f \u043c\u044b \u0441\u0447\u0438\u0442\u0430\u0435\u043c \u0442\u0430\u043a:  <\/p>\n<pre><code class=\"cpp\">float roug_sqr = roughness*roughness; float G = GGX_PartialGeometry(dot(N,V), roug_sqr) * GGX_PartialGeometry(dot(N,L), roug_sqr); <\/code><\/pre>\n<p>  \u0415\u0441\u043b\u0438 \u043c\u044b \u043e\u0442\u0440\u0435\u043d\u0434\u0435\u0440\u0438\u043c \u0448\u0430\u0440\u0438\u043a\u0438, \u0438 \u0432\u044b\u0432\u0435\u0434\u0435\u043c \u044d\u0442\u043e\u0442 <b>G<\/b>, \u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a\u0443\u044e \u043a\u0430\u0440\u0442\u0438\u043d\u0443:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/38d\/4b1\/b73\/38d4b1b733234d0e8b7caf2d940e848e.png\"\/><br \/>  \u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0441\u0432\u0435\u0442\u0430 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0441\u043b\u0435\u0432\u0430. \u0428\u0435\u0440\u043e\u0445\u043e\u0432\u0430\u0442\u043e\u0441\u0442\u044c \u0448\u0430\u0440\u0438\u043a\u043e\u0432 \u0441\u043b\u0435\u0432\u0430 \u043d\u0430\u043f\u0440\u0430\u0432\u043e \u043e\u0442 0.05 \u0434\u043e 1.0.<br \/>  <b>\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430<\/b>: \u041d\u0438 \u043e\u0434\u0438\u043d \u043f\u0438\u043a\u0441\u0435\u043b\u044c \u043d\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u0435\u0434\u0438\u043d\u0438\u0446\u044b. \u041f\u043e\u0441\u0442\u0430\u0432\u044c\u0442\u0435 \u0432\u043e\u0442 \u0442\u0430\u043a\u043e\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u0435:<\/p>\n<pre><code class=\"cpp\">Out.Color = G; if (Out.Color.r &gt; 1.000001) Out.Color.gb = 0.0; <\/code><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u0445\u043e\u0442\u044c \u043e\u0434\u0438\u043d \u0430\u0443\u0442\u043f\u0443\u0442 \u043f\u0438\u043a\u0441\u0435\u043b\u044c \u043e\u043a\u0430\u0436\u0435\u0442\u0441\u044f \u0431\u043e\u043b\u044c\u0448\u0435 \u0435\u0434\u0438\u043d\u0438\u0446\u044b \u2014 \u0442\u043e \u043e\u043d \u043e\u043a\u0440\u0430\u0441\u0438\u0442\u0441\u044f \u0432 \u043a\u0440\u0430\u0441\u043d\u044b\u0439 \u0446\u0432\u0435\u0442. \u0415\u0441\u043b\u0438 \u0432\u0441\u0435 \u0441\u0434\u0435\u043b\u0430\u043b\u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u2014 \u0432\u0441\u0435 \u043f\u0438\u043a\u0441\u0435\u043b\u0438 \u043e\u0441\u0442\u0430\u043d\u0443\u0442\u0441\u044f \u0431\u0435\u043b\u044b\u043c\u0438.<\/p>\n<h3>2.4 D. \u0420\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043e\u0442\u0440\u0430\u0436\u0430\u044e\u0449\u0438\u0445 \u043c\u0438\u043a\u0440\u043e\u0433\u0440\u0430\u043d\u0435\u0439<\/h3>\n<p>  \u0418\u0442\u0430\u043a \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0442\u0430\u043a\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b: <b>\u043c\u0430\u043a\u0440\u043e\u043d\u043e\u0440\u043c\u0430\u043b\u044c<\/b>, <b>\u0448\u0435\u0440\u043e\u0445\u0432\u0430\u0442\u043e\u0441\u0442\u044c<\/b>, \u0438 <b>H<\/b> \u0432\u0435\u043a\u0442\u043e\u0440. \u0418\u0437 \u044d\u0442\u0438\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u043c\u043e\u0436\u043d\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043a\u0430\u043a\u043e\u0439 % \u043c\u0438\u043a\u0440\u043e\u0433\u0440\u0430\u043d\u0435\u0439 \u043d\u0430 \u0434\u0430\u043d\u043d\u043e\u043c \u043f\u0438\u043a\u0441\u0435\u043b\u0435 \u0438\u043c\u0435\u044e\u0442 \u043d\u043e\u0440\u043c\u0430\u043b\u044c, \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u044e\u0449\u0443\u044e \u0441 <b>H<\/b>. \u0412 <b>GGX <\/b>\u0437\u0430 \u044d\u0442\u043e \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0432\u043e\u0442 \u044d\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/807\/eb1\/fae\/807eb1fae3cf48289b84514c5ee0e215.png\"\/><br \/>  <b>\u03a7<\/b> \u2014 \u0442\u0430\u043a\u0430\u044f \u0436\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043a\u0430\u043a \u0438 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441 <b>G<\/b>. \u041c\u044b \u0435\u0451 \u0432\u044b\u043a\u0438\u0434\u044b\u0432\u0430\u0435\u043c \u043f\u043e \u0442\u0435\u043c \u0436\u0435 \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c.<br \/>  <b>\u03b1<sub>g<\/sub><\/b> \u2014 \u043a\u0432\u0430\u0434\u0440\u0430\u0442 \u0448\u0435\u0440\u043e\u0445\u043e\u0432\u0430\u0442\u043e\u0441\u0442\u0438 \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0438<br \/>  <b>\u03b8<sub>m<\/sub><\/b> \u2014 \u0443\u0433\u043e\u043b \u043c\u0435\u0436\u0434\u0443 \u043c\u0430\u043a\u0440\u043e\u043d\u043e\u0440\u043c\u0430\u043b\u044c\u044e <b>N<\/b> \u0438 \u043d\u0430\u0448\u0438\u043c <b>H<\/b> \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u043c. \u042f \u043e\u043f\u044f\u0442\u044c \u0441\u0434\u0435\u043b\u0430\u043b \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f, \u0438 \u0437\u0430\u043c\u0435\u043d\u0438\u043b \u0442\u0430\u043d\u0433\u0435\u043d\u0441 \u043d\u0430 \u043a\u043e\u0441\u0438\u043d\u0443\u0441 \u0443\u0433\u043b\u0430. \u0412 \u0438\u0442\u043e\u0433\u0435 \u043c\u044b \u0438\u043c\u0435\u0435\u043c \u0432\u043e\u0442 \u0442\u0430\u043a\u0443\u044e HLSL \u0444\u0443\u043d\u043a\u0446\u0438\u044e:  <\/p>\n<pre><code class=\"cpp\">float GGX_Distribution(float cosThetaNH, float alpha) {     float alpha2 = alpha * alpha;     float NH_sqr = saturate(cosThetaNH * cosThetaNH);     float den = NH_sqr * alpha2 + (1.0 - NH_sqr);     return alpha2 \/ ( PI * den * den ); }<\/code><\/pre>\n<p>  \u0418 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c \u0435\u0451 \u0432\u043e\u0442 \u0442\u0430\u043a:  <\/p>\n<pre><code class=\"cpp\">float D = GGX_Distribution(dot(N,H), roughness*roughness);<\/code><\/pre>\n<p>  \u0415\u0441\u043b\u0438 \u0432\u044b\u0432\u0435\u0441\u0442\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <b>D<\/b> \u043d\u0430 \u044d\u043a\u0440\u0430\u043d, \u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a\u0443\u044e \u043a\u0430\u0440\u0442\u0438\u043d\u0443:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/fed\/4bb\/b73\/fed4bbb734704948bc0605690f460aac.png\"\/><br \/>  \u0428\u0435\u0440\u043e\u0445\u043e\u0432\u0430\u0442\u043e\u0441\u0442\u044c \u043f\u043e \u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043e\u0442 0.05 \u0441\u043b\u0435\u0432\u0430, \u0434\u043e 1.0 \u0441\u043f\u0440\u0430\u0432\u0430.<br \/>  <b>\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430<\/b>: \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u043f\u0440\u0438 \u0448\u0435\u0440\u043e\u0445\u043e\u0432\u0430\u0442\u043e\u0441\u0442\u0438 \u0440\u0430\u0432\u043d\u043e\u0439 1.0 \u0432\u0435\u0441\u044c \u0441\u0432\u0435\u0442 \u0434\u043e\u043b\u0436\u0435\u043d \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0440\u0430\u0432\u043d\u043e\u043c\u0435\u0440\u043d\u043e \u043f\u043e \u043f\u043e\u043b\u0443\u0441\u0444\u0435\u0440\u0435. \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442 \u0447\u0442\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0448\u0430\u0440\u0438\u043a \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043e\u0434\u043d\u043e\u0442\u043e\u043d\u043d\u044b\u043c. \u0415\u0433\u043e \u0446\u0432\u0435\u0442 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c 153 153 153 (+-1 \u0438\u0437-\u0437\u0430 \u043e\u043a\u0440\u0443\u0433\u043b\u0435\u043d\u0438\u0439), \u0447\u0442\u043e \u043f\u0440\u0438 <a href=\"http:\/\/davengrace.com\/cgi-bin\/cspace.pl\">\u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0435 \u0438\u0437 sRGB \u0432 \u043b\u0438\u043d\u0435\u0439\u043d\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e<\/a> \u0434\u0430\u0441\u0442 0.318546778125092. \u0423\u043c\u043d\u043e\u0436\u0438\u0432 \u044d\u0442\u043e \u0447\u0438\u0441\u043b\u043e \u043d\u0430 PI \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0435\u0434\u0438\u043d\u0438\u0446\u0443, \u0447\u0442\u043e \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u0438\u044e \u043f\u043e \u043f\u043e\u043b\u0443\u0441\u0444\u0435\u0440\u0435. \u041f\u043e\u0447\u0435\u043c\u0443 PI? \u041f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e <a href=\"http:\/\/www.wolframalpha.com\/input\/?i=integrate+cos+x+*+sin+x+dx+dy+from+x+%3D+0+to+pi+%2F+2+y+%3D+0+to+pi+*+2\">\u0438\u043d\u0442\u0435\u0433\u0440\u0430\u043b cos(x)sin(x) \u043f\u043e \u043f\u043e\u043b\u0443\u0441\u0444\u0435\u0440\u0435<\/a> \u0434\u0430\u0435\u0442 PI.<\/p>\n<h3>2.5 F. \u041a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u044b \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0424\u0440\u0435\u043d\u0435\u043b\u044f<\/h3>\n<p>  \u041b\u0443\u0447 \u0441\u0432\u0435\u0442\u0430, \u043f\u043e\u043f\u0430\u0432 \u043d\u0430 \u0433\u0440\u0430\u043d\u0438\u0446\u0443 \u0434\u0432\u0443\u0445 \u0440\u0430\u0437\u043d\u044b\u0445 \u0441\u0440\u0435\u0434 \u043e\u0442\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u0438 \u043f\u0440\u0435\u043b\u043e\u043c\u043b\u044f\u0435\u0442\u0441\u044f.<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/e7e\/170\/a83\/e7e170a83b8e6445f2f942ba77203ea4.png\" alt=\"image\"\/><br \/>  \u0424\u043e\u0440\u043c\u0443\u043b\u044b \u0424\u0440\u0435\u043d\u0435\u043b\u044f \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0442\u043e\u0447\u043d\u043e \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442 \u0437\u0430\u043a\u043e\u043d\u044b, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u044d\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442, \u043d\u043e \u0435\u0441\u043b\u0438 \u0432\u044b <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%A4%D0%BE%D1%80%D0%BC%D1%83%D0%BB%D1%8B_%D0%A4%D1%80%D0%B5%D0%BD%D0%B5%D0%BB%D1%8F\">\u0441\u0445\u043e\u0434\u0438\u0442\u0435 \u0432 \u0432\u0438\u043a\u0438<\/a>, \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435 \u043d\u0430 \u044d\u0442\u0438 \u043c\u043d\u043e\u0433\u043e\u044d\u0442\u0430\u0436\u043d\u044b\u0435 \u0444\u043e\u0440\u043c\u0443\u043b\u044b, \u0442\u043e \u0443\u0432\u0438\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u043e\u043d\u0438 \u0442\u044f\u0436\u0435\u043b\u044b\u0435. \u041a \u0441\u0447\u0430\u0441\u0442\u044c\u044e \u0435\u0441\u0442\u044c \u043d\u0435\u043f\u043b\u043e\u0445\u0430\u044f \u0430\u043f\u043f\u0440\u043e\u043a\u0441\u0438\u043c\u0430\u0446\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u0432 PBR \u0440\u0435\u043d\u0434\u0435\u0440\u0430\u0445, \u044d\u0442\u043e <a href=\"https:\/\/en.wikipedia.org\/wiki\/Schlick%27s_approximation\">\u0430\u043f\u043f\u0440\u043e\u043a\u0441\u0438\u043c\u0430\u0446\u0438\u044f \u0428\u043b\u0438\u043a\u0430<\/a>:<br \/>  <img decoding=\"async\" src=\"https:\/\/wikimedia.org\/api\/rest_v1\/media\/math\/render\/svg\/1702f2162cbd758ca4fb9afc5740da5bbc1dd6b7\" alt=\"image\"\/><br \/>  \u0413\u0434\u0435 <b>R0<\/b> \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u043e\u0432 \u043f\u0440\u0435\u043b\u043e\u043c\u043b\u0435\u043d\u0438\u044f:<br \/>  \u0430 <b>cos\u03b8<\/b> \u0432 \u0444\u043e\u0440\u043c\u0443\u043b\u0435 \u2014 \u043a\u043e\u0441\u0438\u043d\u0443\u0441 \u0443\u0433\u043b\u0430 \u043c\u0435\u0436\u0434\u0443 \u043f\u0430\u0434\u0435\u043d\u0438\u0435\u043c \u0441\u0432\u0435\u0442\u0430 \u0438 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u044e. \u0412\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u043f\u0440\u0438 <b>cos\u03b8 = 1<\/b> \u0444\u043e\u0440\u043c\u0443\u043b\u0430 \u0432\u044b\u0440\u043e\u0436\u0434\u0430\u0435\u0442\u0441\u044f \u0432 <b>R0<\/b>, \u0430 \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0441\u043c\u044b\u0441\u043b <b>R0<\/b> \u2014 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u0432\u0435\u0442\u0430, \u0435\u0441\u043b\u0438 \u043b\u0443\u0447 \u043f\u0430\u0434\u0430\u0435\u0442 \u043f\u0435\u0440\u043f\u0435\u043d\u0434\u0438\u043a\u0443\u043b\u044f\u0440\u043d\u043e \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0438. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u0440\u0430\u0437\u0443 \u043e\u0444\u043e\u0440\u043c\u0438\u043c \u044d\u0442\u043e \u0432 hlsl \u043a\u043e\u0434:  <\/p>\n<pre><code class=\"cpp\">float3 FresnelSchlick(float3 F0, float cosTheta) {     return F0 + (1.0 - F0) * pow(1.0 - saturate(cosTheta), 5.0); }<\/code><\/pre>\n<p>  \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e <b>F0<\/b> \u0438\u043c\u0435\u0435\u0442 \u0442\u0438\u043f <b>float3<\/b>. \u042d\u0442\u043e \u0441\u0432\u044f\u0437\u0430\u043d\u043e \u0441 \u0442\u0435\u043c, \u0447\u0442\u043e \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u044b \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u0434\u043b\u044f \u0440\u0430\u0437\u043d\u044b\u0445 \u043a\u0430\u043d\u0430\u043b\u043e\u0432. \u0420\u0430\u0437\u043d\u044b\u0435 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b \u043e\u0442\u0440\u0430\u0436\u0430\u044e\u0442 \u0440\u0430\u0437\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u0432\u0435\u0442\u0430 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0434\u043b\u0438\u043d\u043d\u044b \u0432\u043e\u043b\u043d\u044b:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/79d\/b87\/798\/79db877980588213007c7fba429d8c9d.png\" alt=\"image\"\/><br \/>  \u0410 \u0442\u0430\u043a \u043a\u0430\u043a \u0443 \u043d\u0430\u0441 \u0432 \u0433\u043b\u0430\u0437\u0430\u0445 RGB \u043a\u043e\u043b\u0431\u043e\u0447\u043a\u0438, \u0442\u043e \u0434\u043b\u044f \u043b\u044e\u0434\u0435\u0439 \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e float3.<\/p>\n<h3>2.6 \u0421\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u043c \u0432\u043c\u0435\u0441\u0442\u0435<\/h3>\n<p>  \u0427\u0442\u043e \u0436. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0442\u0435\u043f\u0435\u0440\u044c \u0441\u043e\u0431\u0435\u0440\u0435\u043c \u043d\u0430\u0448\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0449\u0443\u044e \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u043d\u044b\u0439 \u0446\u0432\u0435\u0442 \u0446\u0435\u043b\u0438\u043a\u043e\u043c:  <\/p>\n<pre><code class=\"cpp\">float3 CookTorrance_GGX(float3 n, float3 l, float3 v, Material_pbr m) {     n = normalize(n);     v = normalize(v);     l = normalize(l);     float3 h = normalize(v+l);     \/\/precompute dots     float NL = dot(n, l);     if (NL &lt;= 0.0) return 0.0;     float NV = dot(n, v);     if (NV &lt;= 0.0) return 0.0;     float NH = dot(n, h);     float HV = dot(h, v);          \/\/precompute roughness square     float roug_sqr = m.roughness*m.roughness;          \/\/calc coefficients     float G = GGX_PartialGeometry(NV, roug_sqr) * GGX_PartialGeometry(NL, roug_sqr);     float D = GGX_Distribution(NH, roug_sqr);     float3 F = FresnelSchlick(m.f0, HV);          \/\/mix     float3 specK = G*D*F*0.25\/NV;     return max(0.0, specK); }<\/code><\/pre>\n<p>  \u0412 \u0441\u0430\u043c\u043e\u043c \u043d\u0430\u0447\u0430\u043b\u0435 \u043c\u044b \u0444\u0438\u043b\u044c\u0442\u0440\u0443\u0435\u043c \u0441\u0432\u0435\u0442, \u043d\u0435 \u043f\u043e\u043f\u0430\u0432\u0448\u0438\u0439 \u043d\u0430 \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u044c:  <\/p>\n<pre><code class=\"cpp\">if (NL &lt;= 0.0) return 0.0;<\/code><\/pre>\n<p>\u0430 \u0442\u0430\u043a \u0436\u0435 \u0443\u0447\u0430\u0441\u0442\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u043d\u0435 \u0432\u0438\u0434\u0438\u043c:  <\/p>\n<pre><code class=\"cpp\">if (NV &lt;= 0.0) return 0.0;<\/code><\/pre>\n<p>\u043f\u043e\u0434\u0433\u043e\u0442\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0441\u043a\u0430\u043b\u044f\u0440\u043d\u044b\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f, \u0438 \u0441\u043a\u0430\u0440\u043c\u043b\u0438\u0432\u0430\u0435\u043c \u0438\u0445 \u043d\u0430\u0448\u0438\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c\u0438 <b>GGX_PartialGeometry()<\/b>, <b>GGX_Distribution()<\/b>, <b>FresnelSchlick()<\/b>. \u0414\u0430\u043b\u0435\u0435 \u0443\u043c\u043d\u043e\u0436\u0430\u0435\u043c \u0432\u0441\u0435 \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u0443\u0436\u0435 \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u043e\u0439 \u0444\u043e\u0440\u043c\u0443\u043b\u0435:<br \/>  <img decoding=\"async\" src=\"https:\/\/wikimedia.org\/api\/rest_v1\/media\/math\/render\/svg\/70b610bf99b3f0c30bf64e5e09a0b3ab58c5db9e\" alt=\"image\"\/><br \/>  \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u044f \u043d\u0435 \u043f\u043e\u0434\u0435\u043b\u0438\u043b \u043d\u0430 NL:  <\/p>\n<pre><code class=\"cpp\">float3 specK = G*D*F*0.25\/NV;<\/code><\/pre>\n<p>\u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u043f\u043e\u0442\u043e\u043c \u043c\u044b \u0432\u0441\u0435 \u0440\u0430\u0432\u043d\u043e \u0443\u043c\u043d\u043e\u0436\u0430\u0435\u043c \u043d\u0430 <b>NL<\/b>, \u0438 <b>NL<\/b> \u0441\u043e\u043a\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f. \u041d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u0443 \u043c\u0435\u043d\u044f \u0432\u044b\u0448\u043b\u0430 \u0432\u043e\u0442 \u0442\u0430\u043a\u0430\u044f \u043a\u0430\u0440\u0442\u0438\u043d\u0430:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/309\/7bb\/aba\/3097bbaba4b84d18b90e93b5bd1853e1.png\"\/><br \/>  \u0421\u043b\u0435\u0432\u0430 \u043d\u0430\u043f\u0440\u0430\u0432\u043e \u0448\u0435\u0440\u043e\u0445\u043e\u0432\u0430\u0442\u043e\u0441\u0442\u044c \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u0442 0.05 \u0434\u043e 1.0<br \/>  \u0421\u0432\u0435\u0440\u0445\u0443 \u0432\u043d\u0438\u0437 \u0440\u0430\u0437\u043d\u044b\u0435 \u043a\u043e\u044d\u0444\u0444\u0435\u0446\u0438\u0435\u043d\u0442\u044b \u0444\u0440\u0435\u043d\u0435\u043b\u044f <b>F0<\/b>:<br \/>  1. (0.04, 0.04, 0.04)<br \/>  2. (0.24, 0.24, 0.24)<br \/>  3. (1.0, 0.86, 0.56)<\/p>\n<h3>2.7 Lambertian \u043c\u043e\u0434\u0435\u043b\u044c \u0440\u0430\u0441\u0441\u0435\u044f\u043d\u043d\u043e\u0433\u043e \u0441\u0432\u0435\u0442\u0430<\/h3>\n<p>  \u0418\u0442\u0430\u043a \u0444\u0443\u043d\u043a\u0446\u0438\u044f <b>FresnelSchlick <\/b>\u0432\u0435\u0440\u043d\u0435\u0442 \u043d\u0430\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u0432\u0435\u0442\u0430. \u041e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0432\u0435\u0442 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0432\u0435\u043d <b>1.0-FresnelSchlick()<\/b>. <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0417\u0434\u0435\u0441\u044c \u044f \u0445\u043e\u0447\u0443 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043e\u0442\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435.<\/b><\/p>\n<div class=\"spoiler_text\">\u0412\u043e\u0442 \u044d\u0442\u0443 \u0435\u0434\u0438\u043d\u0438\u0446\u0443 \u043c\u0438\u043d\u0443\u0441 \u0444\u0440\u0435\u043d\u0435\u043b\u044c \u043c\u043d\u043e\u0433\u0438\u0435 \u0441\u0447\u0438\u0442\u0430\u044e\u0442 \u043f\u043e \u0440\u0430\u0437\u043d\u043e\u043c\u0443. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0432 UE4 FresnelSchlick \u0441\u0447\u0438\u0442\u0430\u044e\u0442 \u043e\u0442 dot(V,H). \u0413\u0434\u0435-\u0442\u043e \u0431\u0435\u0440\u0443\u0442 \u0434\u0432\u0430 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u0430 (\u043e\u0442 dot(L,N) \u0438 dot(V,N)). \u041a\u0430\u043a \u043f\u043e \u043c\u043d\u0435 \u2014 \u043b\u043e\u0433\u0438\u0447\u043d\u0435\u0435 \u0431\u0440\u0430\u0442\u044c \u043e\u0442 dot(L,N). \u0421\u0435\u0439\u0447\u0430\u0441 \u044f \u043c\u043e\u0433\u0443 \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u044f \u043d\u0435 \u0437\u043d\u0430\u044e \u0442\u043e\u0447\u043d\u043e, \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u0435\u0435, \u0438 \u043a\u0430\u043a \u0431\u0443\u0434\u0435\u0442 \u0431\u043b\u0438\u0436\u0435 \u043a \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438. \u041a\u043e\u0433\u0434\u0430 \u044f \u0438\u0437\u0443\u0447\u0443 \u044d\u0442\u043e\u0442 \u0432\u043e\u043f\u0440\u043e\u0441, \u044f \u0434\u043e\u043f\u043e\u043b\u043d\u044e \u044d\u0442\u043e\u0442 \u043f\u0440\u043e\u0431\u0435\u043b \u0432 \u0441\u0442\u0430\u0442\u044c\u0435, \u0430 \u043f\u043e\u043a\u0430 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0434\u0435\u043b\u0430\u0442\u044c \u0442\u0430\u043a, \u043a\u0430\u043a \u0432 UE4, \u0442\u043e \u0435\u0441\u0442\u044c dot(V,H).  <\/div>\n<\/div>\n<p> \u042d\u0442\u043e\u0442 \u0441\u0432\u0435\u0442 \u043f\u0440\u043e\u0439\u0434\u0435\u0442 \u0441\u043a\u0432\u043e\u0437\u044c \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u044c \u0438 \u0431\u0443\u0434\u0435\u0442 \u0445\u0430\u043e\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0431\u043b\u0443\u0436\u0434\u0430\u0442\u044c \u0432\u043d\u0443\u0442\u0440\u0438 \u043d\u0435\u0451, \u043f\u043e\u043a\u0430 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0433\u043b\u043e\u0449\u0435\u043d\/\u043f\u0435\u0440\u0435\u0438\u0437\u043b\u0443\u0447\u0435\u043d\/\u043f\u043e\u043a\u0438\u043d\u0435\u0442 \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u044c \u0432 \u0434\u0440\u0443\u0433\u043e\u0439 \u0442\u043e\u0447\u043a\u0435. \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043c\u044b \u043f\u043e\u043a\u0430 \u043d\u0435 \u0437\u0430\u0442\u0440\u0430\u0433\u0438\u0432\u0430\u0435\u043c subsurface scattering, \u0442\u043e \u0433\u0440\u0443\u0431\u043e \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u043c, \u0447\u0442\u043e \u044d\u0442\u043e\u0442 \u0441\u0432\u0435\u0442 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0433\u043b\u043e\u0449\u0435\u043d, \u043b\u0438\u0431\u043e \u043f\u0435\u0440\u0435\u0438\u0437\u043b\u0443\u0447\u0435\u043d \u043f\u043e \u043f\u043e\u043b\u0443\u0441\u0444\u0435\u0440\u0435:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/685\/485\/823\/6854858239a6ec3e1ad875c8acd4ac55.png\" alt=\"image\"\/><br \/>  \u0412 \u043f\u0435\u0440\u0432\u043e\u043c \u043f\u0440\u0438\u0431\u043b\u0438\u0436\u0435\u043d\u0438\u0438 \u043d\u0430\u0441 \u044d\u0442\u043e \u0443\u0441\u0442\u0440\u043e\u0438\u0442. \u041e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0434\u0430\u043d\u043d\u043e\u0435 \u0440\u0430\u0441\u0441\u0435\u0438\u0432\u0430\u043d\u0438\u0435 \u043c\u043e\u0434\u0435\u043b\u044c\u044e \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u044f <b>\u041b\u0430\u043c\u0431\u0435\u0440\u0442\u0430<\/b>. \u041e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0435\u0439 \u0444\u043e\u0440\u043c\u0443\u043b\u043e\u0439 <b>LightColor*dot(N,L)\/PI<\/b>. \u0422\u043e \u0435\u0441\u0442\u044c \u0432\u0441\u0435\u043c \u0437\u043d\u0430\u043a\u043e\u043c\u044b\u0439 <b>dot(N,L)<\/b>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u043f\u043b\u043e\u0442\u043d\u043e\u0441\u0442\u044c \u0441\u0432\u0435\u0442\u043e\u0432\u043e\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430, \u043f\u043e\u043f\u0430\u0434\u0430\u044e\u0449\u0435\u0433\u043e \u043d\u0430 \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u044c, \u0438 \u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043d\u0430 <b>PI<\/b> \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043c\u044b \u0443\u0436\u0435 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u043b\u0438\u0441\u044c \u0440\u0430\u043d\u0435\u0435 \u0432 \u0432\u0438\u0434\u0435 <a href=\"http:\/\/www.wolframalpha.com\/input\/?i=integrate+cos+x+*+sin+x+dx+dy+from+x+%3D+0+to+pi+%2F+2+y+%3D+0+to+pi+*+2\">\u0438\u043d\u0442\u0435\u0433\u0440\u0430\u043b\u0430 \u043f\u043e\u043b\u0443\u0441\u0444\u0435\u0440\u0435<\/a>. \u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u0433\u043b\u043e\u0449\u0435\u043d\u043d\u043e\u0433\u043e\/\u043f\u0435\u0440\u0435\u0438\u0437\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u0432\u0435\u0442\u0430 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 <b>float3<\/b> \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u0437\u044b\u0432\u0430\u044e\u0442 <b>albedo<\/b>. \u0422\u0443\u0442 \u0432\u0441\u0435 \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u0445\u043e\u0436\u0435 \u0441 <b>F0<\/b> \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c. \u041f\u0440\u0435\u0434\u043c\u0435\u0442 \u043f\u0435\u0440\u0435\u0438\u0437\u043b\u0443\u0447\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u0434\u043b\u0438\u043d\u044b \u0432\u043e\u043b\u043d.<br \/>  \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u043e \u043c\u043e\u0434\u0435\u043b\u0438 \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u044f \u041b\u0430\u043c\u0431\u0435\u0440\u0442 \u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043d\u0435\u0447\u0435\u0433\u043e \u2014 \u0442\u043e \u043c\u044b \u0432 \u043d\u0430\u0448 <b>CookTorrance_GGX<\/b> \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0435\u0433\u043e (\u0445\u043e\u0442\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u0435\u0435 \u0431\u044b\u043b\u043e \u0432\u044b\u043d\u0435\u0441\u0442\u0438 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u043d\u043e \u043c\u043d\u0435 \u043b\u0435\u043d\u044c \u043f\u043e\u043a\u0430 \u0432\u044b\u0442\u0430\u0441\u043a\u0438\u0432\u0430\u0442\u044c F \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440):  <\/p>\n<pre><code class=\"cpp\">    float3 specK = G*D*F*0.25\/(NV+0.001);         float3 diffK = saturate(1.0-F);     return max(0.0, m.albedo*diffK*NL\/PI + specK);<\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0410 \u0432 \u0446\u0435\u043b\u043e\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0441\u0442\u0430\u043b\u0430 \u0432\u043e\u0442 \u0442\u0430\u043a\u043e\u0439<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">float3 CookTorrance_GGX(float3 n, float3 l, float3 v, Material_pbr m) {     n = normalize(n);     v = normalize(v);     l = normalize(l);     float3 h = normalize(v+l);     \/\/precompute dots     float NL = dot(n, l);     if (NL &lt;= 0.0) return 0.0;     float NV = dot(n, v);     if (NV &lt;= 0.0) return 0.0;     float NH = dot(n, h);     float HV = dot(h, v);          \/\/precompute roughness square     float roug_sqr = m.roughness*m.roughness;          \/\/calc coefficients     float G = GGX_PartialGeometry(NV, roug_sqr) * GGX_PartialGeometry(NL, roug_sqr);     float D = GGX_Distribution(NH, roug_sqr);     float3 F = FresnelSchlick(m.f0, HV);      \/\/mix     float3 specK = G*D*F*0.25\/(NV+0.001);         float3 diffK = saturate(1.0-F);     return max(0.0, m.albedo*diffK*NL\/PI + specK); }<\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0412\u043e\u0442 \u0447\u0442\u043e \u0443 \u043c\u0435\u043d\u044f \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u043f\u043e\u0441\u043b\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u0438\u0444\u0444\u0443\u0437\u043d\u043e\u0439 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0435\u0439:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/3f0\/513\/ef5\/3f0513ef51f94cce9ceba491ed465280.png\"\/><br \/>  \u0410\u043b\u044c\u0431\u0435\u0434\u043e \u0442\u0440\u0435\u0445 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u043e\u0432 (\u0432 \u043b\u0438\u043d\u0435\u0439\u043d\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435) \u0441\u0432\u0435\u0440\u0445\u0443 \u0432\u043d\u0438\u0437:<br \/>  1. (0.47, 0.78, 0.73)<br \/>  2. (0.86, 0.176, 0)<br \/>  3. (0.01, 0.01, 0.01)<br \/>  \u041d\u0443 \u0438 \u0432\u043e\u0442 \u044f \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043b \u0432\u0442\u043e\u0440\u043e\u0439 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0441\u0432\u0435\u0442\u0430 \u0441\u043f\u0440\u0430\u0432\u0430, \u0438 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u043b \u0438\u043d\u0442\u0435\u043d\u0441\u0438\u0432\u043d\u043e\u0441\u0442\u044c \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u0432 \u0432 3 \u0440\u0430\u0437\u0430:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/1e8\/77c\/d24\/1e877cd24cb540c6b903f6687b991301.png\"\/><br \/>  \u0422\u0435\u043a\u0443\u0449\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0447\u0430\u0442\u044c <a href=\"https:\/\/github.com\/MrShoor\/PBRSamples\/tree\/master\/PBR\">\u0432\u043e\u0442 \u0442\u0443\u0442<\/a> \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438. \u0422\u0430\u043a \u0436\u0435 \u043d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u044e, \u0447\u0442\u043e \u0441\u043e\u0431\u0440\u0430\u043d\u043d\u044b\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 <a href=\"https:\/\/github.com\/MrShoor\/PBRSamples\/releases\/download\/1.0\/PBRSamples_1_0.zip\">\u0432\u043e\u0442 \u0442\u0443\u0442<\/a>.<\/p>\n<h2>3.0 Image based lighting<\/h2>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/web\/066\/af5\/df4\/066af5df49bf4d7eb58d66af777b41af.jpg\"\/><br \/>  \u041c\u044b \u0441\u0435\u0439\u0447\u0430\u0441 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043b\u0438 \u0442\u043e, \u043a\u0430\u043a \u0442\u043e\u0447\u0435\u0447\u043d\u044b\u0439 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0441\u0432\u0435\u0442\u0430 \u0432\u043d\u043e\u0441\u0438\u0442 \u0432\u043a\u043b\u0430\u0434 \u0432 \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u0435 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u0438\u043a\u0441\u0435\u043b\u044f \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f. \u041a\u043e\u043d\u0435\u0447\u043d\u043e \u043c\u044b \u043f\u0440\u0435\u043d\u0435\u0431\u0440\u0435\u0433\u043b\u0438 \u0442\u0435\u043c, \u0447\u0442\u043e \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0434\u043e\u043b\u0436\u0435\u043d \u0437\u0430\u0442\u0443\u0445\u0430\u0442\u044c \u043e\u0442 \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u0430 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f, \u0430 \u0442\u0430\u043a \u0436\u0435 \u0442\u0435\u043c, \u0447\u0442\u043e \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0442\u043e\u0447\u0435\u0447\u043d\u044b\u043c, \u0438 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0432\u0441\u0435 \u044d\u0442\u043e \u0443\u0447\u0435\u0441\u0442\u044c, \u043d\u043e \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0435\u0449\u0435 \u043e\u0434\u0438\u043d \u043f\u043e\u0434\u0445\u043e\u0434 \u043a \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u044e. \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0432\u0441\u0435 \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u044b \u0432\u043e\u043a\u0440\u0443\u0433 \u043e\u0442\u0440\u0430\u0436\u0430\u044e\u0442\/\u043f\u0435\u0440\u0435\u0438\u0437\u043b\u0443\u0447\u0430\u044e\u0442 \u0441\u0432\u0435\u0442, \u0438 \u044d\u0442\u0438\u043c \u0441\u0430\u043c\u044b\u043c \u043e\u0441\u0432\u0435\u0449\u0430\u044e\u0442 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435. \u0412\u044b \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442\u0435 \u043a \u0437\u0435\u0440\u043a\u0430\u043b\u0443, \u0438 \u0432\u0438\u0434\u0438\u0442\u0435 \u0441\u0435\u0431\u044f. \u041e\u0442\u0440\u0430\u0436\u0435\u043d\u043d\u044b\u0439 \u0441\u0432\u0435\u0442 \u0432 \u0437\u0435\u0440\u043a\u0430\u043b\u0435 \u0431\u044b\u043b \u043d\u0435 \u0442\u0430\u043a \u0434\u0430\u0432\u043d\u043e \u043f\u0435\u0440\u0435\u0438\u0437\u043b\u0443\u0447\u0435\u043d\/\u043e\u0442\u0440\u0430\u0436\u0435\u043d \u0432\u0430\u0448\u0438\u043c \u0442\u0435\u043b\u043e\u043c, \u0438 \u0438\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u0432\u0438\u0434\u0438\u0442\u0435 \u0432 \u043d\u0435\u043c \u0441\u0435\u0431\u044f. \u0415\u0441\u043b\u0438 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0432 \u0433\u043b\u0430\u0434\u043a\u0438\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u0445 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u043a\u0440\u0430\u0441\u0438\u0432\u044b\u0435 \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u0438\u044f, \u0442\u043e \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u0438\u043a\u0441\u0435\u043b\u044f \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0441\u0432\u0435\u0442 \u043e\u0442 \u043f\u043e\u043b\u0443\u0441\u0444\u0435\u0440\u044b, \u043e\u043a\u0440\u0443\u0436\u0430\u044e\u0449\u0435\u0439 \u044d\u0442\u043e\u0442 \u043f\u0438\u043a\u0441\u0435\u043b\u044c. \u0412 \u0438\u0433\u0440\u0430\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0442\u0430\u043a\u043e\u0439 \u0444\u0435\u0439\u043a. \u041f\u043e\u0434\u0433\u043e\u0442\u0430\u0432\u043b\u0438\u0432\u0430\u044e\u0442 \u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0443 \u0441 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435\u043c (\u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 360\u00b0 \u0444\u043e\u0442\u043e \u043b\u0438\u0431\u043e \u043a\u0443\u0431\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043a\u0430\u0440\u0442\u0430). \u041a\u0430\u0436\u0434\u044b\u0439 \u043f\u0438\u043a\u0441\u0435\u043b\u044c \u0442\u0430\u043a\u043e\u0439 \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0438 \u2014 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0439 \u044d\u043c\u043c\u0438\u0442\u0435\u0440. \u0414\u0430\u043b\u044c\u0448\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u00ab\u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043c\u0430\u0433\u0438\u0438\u00bb \u0432\u044b\u0431\u0438\u0440\u0430\u044e\u0442 \u043f\u0438\u043a\u0441\u0435\u043b\u0438 \u0441 \u0442\u0430\u043a\u0438\u0445 \u0442\u0435\u043a\u0441\u0442\u0443\u0440, \u0438 \u043e\u0441\u0432\u0435\u0449\u0430\u044e\u0442 \u0440\u0438\u0441\u0443\u044e\u0449\u0435\u0439\u0441\u044f \u043f\u0438\u043a\u0441\u0435\u043b\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u0434\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u043d\u0430\u043f\u0438\u0441\u0430\u043b\u0438 \u0432\u044b\u0448\u0435 \u0434\u043b\u044f \u0442\u043e\u0447\u0435\u0447\u043d\u044b\u0445 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u0432. \u0418\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0442\u0435\u0445\u043d\u0438\u043a\u0430 \u0438 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f Image based lighting (\u0442.\u0435. \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0430 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0441\u0432\u0435\u0442\u0430).<\/p>\n<h3>3.1 Monte-Carlo<\/h3>\n<p>  \u041d\u0430\u0447\u043d\u0435\u043c \u0441 \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e. \u0412\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u043c\u0435\u0442\u043e\u0434\u043e\u043c \u041c\u043e\u043d\u0442\u0435-\u041a\u0430\u0440\u043b\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u0442\u044c \u043d\u0430\u0448\u0435 \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u0435. \u0414\u043b\u044f \u0442\u0435\u0445, \u043a\u0442\u043e \u0431\u043e\u0438\u0442\u0441\u044f \u0438 \u043d\u0435 \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442 \u0441\u0442\u0440\u0430\u0448\u043d\u044b\u0445 \u0441\u043b\u043e\u0432 \u00ab\u043c\u0435\u0442\u043e\u0434 \u041c\u043e\u043d\u0442\u0435-\u041a\u0430\u0440\u043b\u043e\u00bb \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u044e \u043e\u0431\u044a\u044f\u0441\u043d\u0438\u0442\u044c \u043d\u0430 \u043f\u0430\u043b\u044c\u0446\u0430\u0445. \u041d\u0430 \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u0435 \u043a\u0430\u0436\u0434\u043e\u0439 \u0442\u043e\u0447\u043a\u0438 \u0443 \u043d\u0430\u0441 \u0432\u043b\u0438\u044f\u044e\u0442 \u0432\u0441\u0435 \u0442\u043e\u0447\u043a\u0438 \u0438\u0437 \u043a\u0430\u0440\u0442\u044b. \u041f\u043e\u043b\u043e\u0432\u0438\u043d\u0443 \u0438\u0437 \u043d\u0438\u0445 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043e\u0442\u0441\u0435\u044f\u0442\u044c. \u042d\u0442\u043e \u0442\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0441 \u043f\u0440\u043e\u0442\u0438\u0432\u043e\u043f\u043e\u043b\u043e\u0436\u043d\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0438, \u0442\u0430\u043a \u043a\u0430\u043a \u043e\u043d\u0438 \u0434\u0430\u0434\u0443\u0442 \u043d\u0443\u043b\u0435\u0432\u043e\u0439 \u0432\u043a\u043b\u0430\u0434 \u0432 \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u0435. \u0423 \u043d\u0430\u0441 \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u0443\u0441\u0444\u0435\u0440\u0430. \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0435 \u0440\u0430\u0432\u043d\u043e\u043c\u0435\u0440\u043d\u043e \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u043b\u0443\u0447\u0438 \u043f\u043e \u044d\u0442\u043e\u0439 \u043f\u043e\u043b\u0443\u0441\u0444\u0435\u0440\u0435, \u0438 \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0442\u044c \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u0435 \u0432 \u043a\u0443\u0447\u0443, \u0430 \u043f\u043e\u0442\u043e\u043c \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c \u043d\u0430 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0443\u0449\u0435\u043d\u043d\u044b\u0445 \u043b\u0443\u0447\u0435\u0439 \u0438 \u0443\u043c\u043d\u043e\u0436\u0438\u0442\u044c \u043d\u0430 2\u03c0. \u041d\u0430 2\u03c0 \u2014 \u044d\u0442\u043e \u043f\u043b\u043e\u0449\u0430\u0434\u044c \u043f\u043e\u043b\u0443\u0441\u0444\u0435\u0440\u044b \u0441 \u0440\u0430\u0434\u0438\u0443\u0441\u043e\u043c 1. \u041c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0438 \u0436\u0435 \u0441\u043a\u0430\u0436\u0443\u0442, \u0447\u0442\u043e \u043c\u044b \u043f\u0440\u043e\u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u0435 \u043f\u043e \u043f\u043e\u043b\u0443\u0441\u0444\u0435\u0440\u0435 \u043c\u0435\u0442\u043e\u0434\u043e\u043c \u041c\u043e\u043d\u0442\u0435-\u041a\u0430\u0440\u043b\u043e.<br \/>  \u041a\u0430\u043a \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435? \u0421\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0442\u044c \u0432 \u043a\u0443\u0447\u0443 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0440\u0435\u043d\u0434\u0435\u0440\u0430 \u0432\u043e floating point \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0443 \u0447\u0435\u0440\u0435\u0437 \u0430\u0434\u0434\u0438\u0442\u0438\u0432\u043d\u044b\u0439 \u0431\u043b\u0435\u043d\u0434\u0438\u043d\u0433. \u0412 \u0430\u043b\u044c\u0444\u0430\u043a\u0430\u043d\u0430\u043b \u044d\u0442\u043e\u0439 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043d\u0430\u0448\u0438\u0445 \u043b\u0443\u0447\u0435\u0439, \u0430 \u0432 rgb \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u0435. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u043d\u0430\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u044c \u043f\u043e\u0442\u043e\u043c color.rgb \u043d\u0430 color.a \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435.<br \/>  \u041e\u0434\u043d\u0430\u043a\u043e \u0430\u0434\u0434\u0438\u0442\u0438\u0432\u043d\u044b\u0439 \u0431\u043b\u0435\u043d\u0434\u0438\u043d\u0433 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u044b, \u043f\u0435\u0440\u0435\u043a\u0440\u044b\u0432\u0430\u0435\u043c\u044b\u0435 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c\u0438 \u0443 \u043d\u0430\u0441 \u043d\u0430\u0447\u043d\u0443\u0442 \u043f\u0440\u043e\u0441\u0432\u0435\u0447\u0438\u0432\u0430\u0442\u044c \u0441\u043a\u0432\u043e\u0437\u044c \u0434\u0440\u0443\u0433\u0438\u0435, \u0442\u0430\u043a \u043a\u0430\u043a \u0431\u0443\u0434\u0443\u0442 \u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c\u0441\u044f. \u0427\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u044d\u0442\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u043c\u044b \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f <b>depth prepass<\/b> \u0442\u0435\u0445\u043d\u0438\u043a\u043e\u0439. \u0421\u0443\u0442\u044c \u0442\u0435\u0445\u043d\u0438\u043a\u0438 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043c\u044b \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0440\u0438\u0441\u0443\u0435\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u044b <b>\u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0431\u0443\u0444\u0435\u0440 \u0433\u043b\u0443\u0431\u0438\u043d\u044b<\/b>, \u0430 \u043f\u043e\u0442\u043e\u043c <b>\u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0442\u0435\u0441\u0442 \u0433\u043b\u0443\u0431\u0438\u043d\u044b \u0432 equal<\/b> \u0438 \u0440\u0438\u0441\u0443\u0435\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0442\u0435\u043f\u0435\u0440\u044c \u0443\u0436\u0435 <b>\u0432 \u0431\u0443\u0444\u0435\u0440 \u0446\u0432\u0435\u0442\u0430<\/b>.<br \/>  \u0418\u0442\u0430\u043a, \u0434\u0430\u043b\u0435\u0435 \u044f \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u044e \u043a\u0443\u0447\u0443 \u043b\u0443\u0447\u0435\u0439, \u0440\u0430\u0432\u043d\u043e\u043c\u0435\u0440\u043d\u043e \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u043f\u043e \u0441\u0444\u0435\u0440\u0435:  <\/p>\n<pre><code class=\"delphi\">function RandomRay(): TVec3; var theta, cosphi, sinphi: Single; begin   theta := 2 * Pi * Random;   cosphi := 1 - 2 * Random;   sinphi := sqrt(1 - min(1.0, sqr(cosphi)));   Result.x := sinphi * cos(theta);   Result.y := sinphi * sin(theta);   Result.z := cosphi; end;    SetLength(Result, ACount);   for i := 0 to ACount - 1 do     Result[i] := Vec(RandomRay(), 1.0);<\/code><\/pre>\n<p> \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u044e \u044d\u0442\u043e \u0434\u043e\u0431\u0440\u043e \u043a\u0430\u043a \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0443 \u0432\u043e\u0442 \u0432 \u044d\u0442\u043e\u0442 \u0448\u0435\u0439\u0434\u0435\u0440:  <\/p>\n<pre><code class=\"cpp\">float3 m_albedo; float3 m_f0; float  m_roughness;  static const float LightInt = 1.0;  #define SamplesCount 1024 #define MaxSamplesCount 1024 float4 uLightDirections[MaxSamplesCount]; TextureCube uEnviroment; SamplerState uEnviromentSampler;  PS_Output PS(VS_Output In) {     PS_Output Out;          Material_pbr m;     m.albedo = m_albedo;     m.f0 = m_f0;     m.roughness = m_roughness;      float3 MacroNormal = normalize(In.vNorm);     float3 ViewDir = normalize(-In.vCoord);          Out.Color.rgb = 0.0;     [fastopt]     for (uint i=0; i&lt;SamplesCount; i++){ \/\/\u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u043c \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u0435 \u0432\u0441\u0435\u0445 \u043b\u0443\u0447\u0435\u0439 \u0432 \u043a\u0443\u0447\u0443         float3 LightDir = dot(uLightDirections[i].xyz, In.vNorm) &lt; 0 ? -uLightDirections[i].xyz : uLightDirections[i].xyz; \/\/\u043d\u0430\u0441 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u043b\u0443\u0441\u0444\u0435\u0440\u0430 \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0435\u0440\u0435\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u043c \u043b\u0443\u0447 \u043d\u0430 180, \u0435\u0441\u043b\u0438 \u043e\u043d \u043d\u0430\u043c \u043d\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442         float3 LightColor = uEnviroment.SampleLevel(uEnviromentSampler, mul(LightDir, (float3x3)V_InverseMatrix), 0.0).rgb*LightInt; \/\/\u043f\u043e \u043b\u0443\u0447\u0443 \u0431\u0435\u0440\u0435\u043c \u0441\u0435\u043c\u043f\u043b \u0438\u0437 \u043a\u0443\u0431\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043a\u0430\u0440\u0442\u044b (\u043d\u0430\u0448\u0435 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435)         Out.Color.rgb += CookTorrance_GGX(MacroNormal, LightDir, ViewDir, m)*LightColor; \/\/\u0438 \u0441\u0447\u0438\u0442\u0430\u0435\u043c \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u0435 \u043f\u043e \u0443\u0436\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043b\u044f \u0442\u043e\u0447\u0435\u0447\u043d\u043e\u0433\u043e \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430     }     Out.Color.rgb *= 2*PI; \/\/\u043d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u0435\u043c \u0443\u043c\u043d\u043e\u0436\u0438\u0442\u044c \u043d\u0430 \u043f\u043b\u043e\u0449\u0430\u0434\u044c \u0435\u0434\u0438\u043d\u0438\u0447\u043d\u043e\u0439 \u043f\u043e\u043b\u0443\u0441\u0444\u0435\u0440\u044b     Out.Color.a = SamplesCount; \/\/\u0438 \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043b\u0443\u0447\u0435\u0439 \u0432 \u0430\u043b\u044c\u0444\u0430\u043a\u0430\u043d\u0430\u043b     return Out; }<\/code><\/pre>\n<p>  \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c, \u0438 \u0432\u0438\u0434\u0438\u043c \u043a\u0430\u043a \u043d\u0430\u0448\u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430 \u0434\u043b\u044f \u0442\u0435\u0445 \u0436\u0435 \u0448\u0430\u0440\u0438\u043a\u043e\u0432 \u043f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e \u0441\u0445\u043e\u0434\u0438\u0442\u0441\u044f. \u042f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u0434\u0432\u0435 \u043a\u0443\u0431\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043a\u0430\u0440\u0442\u044b \u0434\u043b\u044f \u0440\u0435\u043d\u0434\u0435\u0440\u0430. \u0412\u043e\u0442 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/web\/bd0\/3ac\/912\/bd03ac9127c64e719496b11ac43e6485.png\"\/><br \/>  \u044f \u0432\u0437\u044f\u043b \u043a\u0443\u0431\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u043a\u0430\u0440\u0442\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0448\u043b\u0430 \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 RenderMonkey. \u041d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u043d\u0430 Snow.dds. \u042d\u0442\u043e <b>LDR<\/b> \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0430, \u0438 \u043e\u043d\u0430 \u0441\u043a\u0443\u0443\u0443\u0447\u043d\u0430\u044f. \u0428\u0430\u0440\u0438\u043a\u0438 \u0441\u043a\u043e\u0440\u0435\u0435 \u043a\u0430\u0436\u0443\u0442\u0441\u044f \u0433\u0440\u044f\u0437\u043d\u044b\u043c\u0438, \u0447\u0435\u043c \u043a\u0440\u0430\u0441\u0438\u0432\u043e \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u043d\u044b\u043c\u0438.<br \/>  \u0410 \u0434\u043b\u044f \u0432\u043e\u0442 \u044d\u0442\u043e\u0433\u043e:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/web\/d97\/088\/a47\/d97088a476d34a83adc7e525c559867d.png\"\/> \u044f \u0432\u0437\u044f\u043b <b>HDR Probe<\/b> \u0432\u043e\u0442 \u043e\u0442\u0441\u044e\u0434\u0430: <a href=\"http:\/\/www.pauldebevec.com\/Probes\/\">www.pauldebevec.com\/Probes<\/a> \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f Grace Cathedral, San Francisco. \u0423 \u043d\u0435\u0451 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u0430\u0436 200,000:1. \u0412\u0438\u0434\u0438\u0442\u0435 \u043a\u0430\u043a\u0430\u044f \u0440\u0430\u0437\u043d\u0438\u0446\u0430? \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043a\u043e\u0433\u0434\u0430 \u0431\u0443\u0434\u0435\u0442\u0435 \u0434\u0435\u043b\u0430\u0442\u044c \u0443 \u0441\u0435\u0431\u044f \u0442\u0430\u043a\u043e\u0435 \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u0435 \u2014 \u0431\u0435\u0440\u0438\u0442\u0435 \u0441\u0440\u0430\u0437\u0443 <b>HDR<\/b> \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0443.<br \/>  \u041a\u0441\u0442\u0430\u0442\u0438, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0447\u0442\u043e \u0437\u0430\u043a\u043e\u043d \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u044d\u043d\u0435\u0440\u0433\u0438\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u044f \u0430\u043b\u044c\u0431\u0435\u0434\u043e \u0432 \u0448\u0435\u0439\u0434\u0435\u0440\u0435 \u0444\u043e\u0440\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e \u0437\u0430\u0434\u0430\u044e \u0432 1.0:<br \/>   m.albedo = 1.0;<br \/>  \u0441\u0432\u0435\u0442 \u0437\u0430\u0434\u0430\u044e \u0432 1.0:<br \/>   LightColor = 1.0;<br \/>  \u0412 \u0438\u0434\u0435\u0430\u043b\u0435 \u043a\u0430\u0436\u0434\u044b\u0439 \u043f\u0438\u043a\u0441\u0435\u043b\u044c \u0448\u0430\u0440\u0438\u043a\u0430 \u0442\u0435\u043f\u0435\u0440\u044c \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u0442\u0430\u0442\u044c \u0440\u0430\u0432\u0435\u043d \u0435\u0434\u0438\u043d\u0438\u0446\u0435. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u0441\u0435, \u0447\u0442\u043e \u0432\u044b\u0445\u043e\u0434\u0438\u0442 \u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u044b \u0435\u0434\u0438\u043d\u0438\u0446\u044b \u043c\u044b \u043f\u043e\u043c\u0435\u0442\u0438\u043c \u043a\u0440\u0430\u0441\u043d\u044b\u043c. \u0423 \u043c\u0435\u043d\u044f \u0432\u044b\u0448\u043b\u043e \u0432\u043e\u0442 \u0442\u0430\u043a:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/web\/477\/8ad\/5bf\/4778ad5bf14d4aa1b5a21aaa9b541a24.png\"\/>\u0424\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0442\u043e \u043a\u0440\u0430\u0441\u043d\u043e\u0435, \u0447\u0442\u043e \u0441\u0435\u0439\u0447\u0430\u0441 \u0435\u0441\u0442\u044c \u2014 \u044d\u0442\u043e \u043f\u043e\u0433\u0440\u0435\u0448\u043d\u043e\u0441\u0442\u0438. \u041e\u043d\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0441\u0445\u043e\u0434\u0438\u0442\u0441\u044f, \u043d\u043e \u0432 \u043a\u0430\u043a\u043e\u0439 \u0442\u043e \u043c\u043e\u043c\u0435\u043d\u0442 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438 \u0444\u043b\u043e\u0430\u0442\u0430 \u043d\u0435 \u0445\u0432\u0430\u0442\u0430\u0435\u0442, \u0438 \u0441\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0438\u0441\u0447\u0435\u0437\u0430\u0435\u0442. \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u043f\u0440\u0430\u0432\u044b\u0439 \u043d\u0438\u0436\u043d\u0438\u0439 \u0448\u0430\u0440\u0438\u043a \u00ab\u043f\u043e\u0441\u0438\u043d\u0435\u043b\u00bb. \u042d\u0442\u043e \u0438\u0437-\u0437\u0430 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043c\u043e\u0434\u0435\u043b\u044c \u041b\u0430\u043c\u0431\u0435\u0440\u0442\u0430 \u043d\u0435 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u0448\u0435\u0440\u043e\u0445\u043e\u0432\u0430\u0442\u043e\u0441\u0442\u0438 \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0438, \u0430 \u043c\u043e\u0434\u0435\u043b\u044c \u041a\u0443\u043a\u0430-\u0422\u043e\u0440\u0435\u043d\u0441\u0430 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u0438\u0445 \u043d\u0435 \u043f\u043e\u043b\u043e\u043d\u0441\u0442\u044c\u044e. \u0424\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043c\u044b \u043f\u043e\u0442\u0435\u0440\u044f\u043b\u0438 \u0436\u0435\u043b\u0442\u044b\u0439 \u0446\u0432\u0435\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0434\u0435\u0442 \u0432 <b>F0<\/b>. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c <b>F0<\/b> \u0432\u0441\u0435\u043c \u0448\u0430\u0440\u0430\u043c \u0432\u044b\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432 1.0 \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/web\/277\/388\/fc4\/277388fc4e684a8b9e150b8c68848dbc.png\"\/><br \/>  \u041f\u0440\u0430\u0432\u044b\u0435 \u0448\u0430\u0440\u044b \u0441\u0442\u0430\u043b\u0438 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0442\u0435\u043c\u043d\u0435\u0435 \u0438\u0437-\u0437\u0430 \u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e roughness. \u0424\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u044d\u0442\u043e \u0440\u0435\u0442\u0440\u043e\u0440\u0435\u0444\u043b\u0435\u043a\u0448\u043d, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u043f\u043e\u0442\u0435\u0440\u044f\u043b\u0438. \u041a\u0443\u043a-\u0422\u043e\u0440\u0440\u0435\u043d\u0441 \u043f\u0440\u043e\u0441\u0442\u043e \u0442\u0435\u0440\u044f\u0435\u0442 \u044d\u0442\u0443 \u044d\u043d\u0435\u0440\u0433\u0438\u044e. \u0427\u0430\u0441\u0442\u0438\u0447\u043d\u043e \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u044d\u0442\u0443 \u044d\u043d\u0435\u0440\u0433\u0438\u044e \u043c\u043e\u0436\u0435\u0442 \u043c\u043e\u0434\u0435\u043b\u044c \u041e\u0440\u0435\u043d-\u041d\u0430\u044f\u0440\u0430. \u041d\u043e \u043c\u044b \u043f\u043e\u043a\u0430 \u043e\u0442\u043b\u043e\u0436\u0438\u043c \u044d\u0442\u043e. \u041f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0441\u043c\u0438\u0440\u0438\u0442\u0441\u044f \u0441 \u0442\u0435\u043c, \u0447\u0442\u043e \u0434\u043b\u044f \u0441\u0438\u043b\u044c\u043d\u043e \u0448\u0435\u0440\u043e\u0445\u043e\u0432\u0430\u0442\u044b\u0445 \u043c\u043e\u0434\u0435\u043b\u0435\u0439 \u043c\u044b \u043f\u043e\u0442\u0435\u0440\u044f\u0435\u043c \u0434\u043e 70% \u044d\u043d\u0435\u0440\u0433\u0438\u0438 \u0440\u0435\u0442\u0440\u043e\u043e\u0442\u0440\u0430\u0436\u0435\u043d\u0438\u0439.<br \/>  \u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f <a href=\"https:\/\/github.com\/MrShoor\/PBRSamples\/tree\/master\/PBR_env\">\u0442\u0443\u0442<\/a>. \u0421\u043e\u0431\u0440\u0430\u043d\u043d\u044b\u0435 \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a\u0438 \u044f \u0443\u0436\u0435 \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u043b \u0440\u0430\u043d\u0435\u0435, \u043e\u043d\u0438 <a href=\"https:\/\/github.com\/MrShoor\/PBRSamples\/releases\/download\/1.0\/PBRSamples_1_0.zip\">\u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0442\u0443\u0442<\/a>.<\/p>\n<h3>3.2 Importance sampling<\/h3>\n<p>  \u041a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435 \u0433\u0435\u0439\u043c\u0435\u0440 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0436\u0434\u0430\u0442\u044c, \u043a\u043e\u0433\u0434\u0430 \u0441\u0432\u0435\u0442 \u043d\u0430 \u0432\u0430\u0448\u0435\u0439 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0435 \u0441\u043e\u0439\u0434\u0435\u0442\u0441\u044f. \u041d\u0443\u0436\u043d\u043e \u0447\u0442\u043e-\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0442\u044b\u0441\u044f\u0447\u0438 \u0438 \u0442\u044b\u0441\u044f\u0447\u0438 \u043b\u0443\u0447\u0435\u0439 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u0438\u043a\u0441\u0435\u043b\u044f. \u0418 \u0444\u043e\u043a\u0443\u0441 \u0442\u0443\u0442 \u0432\u043e\u0442 \u0432 \u0447\u0435\u043c. \u0414\u043b\u044f \u043c\u043e\u043d\u0442\u0435\u043a\u0430\u0440\u043b\u043e \u043c\u044b \u0441\u0447\u0438\u0442\u0430\u043b\u0438 \u0440\u0430\u0432\u043d\u043e\u043c\u0435\u0440\u043d\u043e\u0435 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043f\u043e \u043f\u043e\u043b\u0443\u0441\u0444\u0435\u0440\u0435. \u0412\u043e\u0442 \u0442\u0430\u043a \u043c\u044b \u0434\u0435\u043b\u0430\u043b\u0438 \u0432\u044b\u0431\u043e\u0440\u043a\u0438:<br \/>  <img decoding=\"async\" src=\"http:\/\/www.gamedev.ru\/files\/images\/brdf_mc.jpg\" alt=\"image\"\/><br \/>  \u043d\u043e \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0439 \u0432\u043a\u043b\u0430\u0434 \u0434\u0430\u0435\u0442 \u0438\u043c\u0435\u043d\u043d\u043e \u0447\u0430\u0441\u0442\u044c, \u043e\u0431\u0432\u0435\u0434\u0435\u043d\u043d\u0430\u044f \u0440\u043e\u0437\u043e\u0432\u044b\u043c. \u0415\u0441\u043b\u0438 \u0431\u044b \u043c\u044b \u043c\u043e\u0433\u043b\u0438 \u0432\u044b\u0431\u0438\u0440\u0430\u0442\u044c \u043b\u0443\u0447\u0438, \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0438\u0437 \u043a\u0440\u0430\u0441\u043d\u043e\u0439 \u0437\u043e\u043d\u044b, \u043c\u044b \u0431\u044b \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0440\u0430\u043d\u044c\u0448\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u043f\u0440\u0438\u0435\u043c\u043b\u0435\u043c\u0443\u044e \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443. \u0418\u0442\u0430\u043a \u043d\u0430\u043c \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0432\u043e\u0442 \u0442\u0430\u043a\u043e\u0433\u043e:<br \/>  <img decoding=\"async\" src=\"http:\/\/www.gamedev.ru\/files\/images\/brdf_mc_is.jpg\" alt=\"image\"\/><br \/>  \u041a \u0441\u0447\u0430\u0441\u0442\u044c\u044e \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0435\u0441\u0442\u044c \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043c\u0435\u0442\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f Importance Sampling (\u0438\u043b\u0438 \u0432\u044b\u0431\u043e\u0440\u043a\u0430 \u043f\u043e \u0437\u043d\u0430\u0447\u0438\u043c\u043e\u0441\u0442\u0438). \u0417\u043d\u0430\u0447\u0438\u043c\u043e\u0441\u0442\u044c \u0432 \u043d\u0430\u0448\u0435\u043c \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0438 \u0432\u043d\u043e\u0441\u0438\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <b>D<\/b>. \u041f\u043e \u043d\u0435\u043c\u0443 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c <b>CDF<\/b> (\u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f), \u0438\u0437 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0439 <b>PDF<\/b> \u0444\u0443\u043d\u043a\u0446\u0438\u0438 (\u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u043b\u043e\u0442\u043d\u043e\u0441\u0442\u0438 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u0438). \u0417\u0430 <b>PDF<\/b> \u043c\u044b \u0431\u0435\u0440\u0435\u043c \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043c\u0438\u043a\u0440\u043e\u043d\u043e\u0440\u043c\u0430\u043b\u0438 \u043a \u043d\u0430\u0448\u0435\u0439 \u043d\u043e\u0440\u043c\u0430\u043b\u0438, \u0441\u0443\u043c\u043c\u0430 \u043f\u043e \u043f\u043e\u043b\u0443\u0441\u0444\u0435\u0440\u0435 \u0431\u0443\u0434\u0435\u0442 \u0434\u0430\u0432\u0430\u0442\u044c \u0435\u0434\u0438\u043d\u0438\u0446\u0443, \u0437\u043d\u0430\u0447\u0438\u0442 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0442\u0430\u043a\u043e\u0439 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u043b:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/web\/c56\/441\/a5b\/c56441a5b39f411da7972abfebe91581.png\"\/><br \/>  \u0417\u0434\u0435\u0441\u044c \u043f\u043e\u0434\u044b\u043d\u0442\u0435\u0433\u0440\u0430\u043b\u044c\u043d\u043e\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u2014 <b>PDF<\/b><br \/>  \u0412\u0437\u044f\u0432 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u043b \u043f\u043e \u0441\u0444\u0435\u0440\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u0443\u0433\u043b\u0430\u043c \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0432\u043e\u0442 \u0442\u0430\u043a\u0443\u044e <b>CDF<\/b>:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/web\/3db\/e83\/79c\/3dbe8379c07c4bd0a5c342e5e755b9da.PNG\"\/><br \/>  \u0414\u043b\u044f \u0442\u0435\u0445, \u043a\u0442\u043e \u0445\u043e\u0447\u0435\u0442 step by step \u043f\u0440\u043e\u0439\u0442\u0438 \u044d\u0442\u043e\u0442 \u044d\u0442\u0430\u043f \u2014 \u043c\u043e\u0436\u0435\u0442\u0435 \u0437\u0430\u0433\u043b\u044f\u043d\u0443\u0442\u044c \u0432\u043e\u0442 \u0441\u044e\u0434\u0430: <a href=\"http:\/\/blog.tobias-franke.eu\/2014\/03\/30\/notes_on_importance_sampling.html\">blog.tobias-franke.eu\/2014\/03\/30\/notes_on_importance_sampling.html<\/a><br \/>  \u0414\u043b\u044f \u0442\u0435\u0445, \u043a\u0442\u043e \u043d\u0435 \u0445\u043e\u0447\u0435\u0442\/\u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0443\u0433\u043b\u0443\u0431\u043b\u044f\u0442\u044c\u0441\u044f \u0441\u043a\u0430\u0436\u0443. \u0423 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c <b>CDF<\/b>, \u0432 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u044b \u043f\u043e\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0440\u0430\u0432\u043d\u043e\u043c\u0435\u0440\u043d\u043e \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 <b><i>\u03be<\/i><\/b>, \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043e\u0442\u0440\u0430\u0436\u0430\u0435\u0442 \u043d\u0430\u0448\u0443 <b>PDF<\/b>. \u0427\u0442\u043e \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442 \u0434\u043b\u044f \u043d\u0430\u0441?<br \/>  1. \u0422\u043e, \u0447\u0442\u043e \u044d\u0442\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442 \u043d\u0430\u0448\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044e <b>\u041a\u0443\u043a\u0430-\u0422\u043e\u0440\u0440\u0435\u043d\u0441\u0430<\/b>. \u0415\u0451 \u043d\u0430\u0434\u043e \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u044c \u043d\u0430 <b>PDF<\/b> \u0444\u0443\u043d\u043a\u0446\u0438\u044e.<br \/>  2. <b>PDF<\/b> \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043e\u0442\u0440\u0430\u0436\u0430\u0435\u0442 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043c\u0438\u043a\u0440\u043e\u043d\u043e\u0440\u043c\u0430\u043b\u0438 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043c\u0430\u043a\u0440\u043e\u043d\u043e\u0440\u043c\u0430\u043b\u0438. \u0420\u0430\u043d\u044c\u0448\u0435 \u0434\u043b\u044f \u041c\u043e\u043d\u0442\u0435-\u041a\u0430\u0440\u043b\u043e \u043c\u044b \u0431\u0440\u0430\u043b\u0438 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0439 \u0432\u0435\u043a\u0442\u043e\u0440, \u0438 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u043b\u0438 \u0435\u0433\u043e \u043a\u0430\u043a \u0432\u0435\u043a\u0442\u043e\u0440 \u043d\u0430 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0441\u0432\u0435\u0442\u0430. \u0421\u0435\u0439\u0447\u0430\u0441 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <b>CDF<\/b> \u043c\u044b \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0439 \u0432\u0435\u043a\u0442\u043e\u0440 <b>H<\/b>. \u0414\u0430\u043b\u0435\u0435 \u043e\u0442\u0440\u0430\u0436\u0430\u0435\u043c \u0432\u0435\u043a\u0442\u043e\u0440 \u0432\u0437\u0433\u043b\u044f\u0434\u0430 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u044d\u0442\u043e\u0433\u043e \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0433\u043e <b>H<\/b> \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0432\u0435\u043a\u0442\u043e\u0440 \u0441\u0432\u0435\u0442\u0430.<br \/>  3. <b>PDF<\/b> \u043d\u0430\u0448\u0443 \u043d\u0430\u0434\u043e \u043f\u0435\u0440\u0435\u0432\u0435\u0441\u0442\u0438 \u0432 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u0432\u0438\u0434\u0430 (\u0442.\u043a. \u043e\u043d\u0430 \u043e\u0442\u0440\u0430\u0436\u0430\u0435\u0442 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0432\u0434\u043e\u043b\u044c \u0432\u0435\u043a\u0442\u043e\u0440\u0430 <b>N<\/b>). \u0414\u043b\u044f \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0430 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043d\u0430\u0448\u0443 <b>PDF<\/b> \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u044c \u043d\u0430 <b>4*dot(H,V)<\/b> \u041a\u043e\u043c\u0443 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u0432\u043d\u0438\u043a\u043d\u0443\u0442\u044c \u0433\u043b\u0443\u0431\u0436\u0435 \u2014 \u0438\u0434\u0435\u043c \u0441\u044e\u0434\u0430: <a href=\"https:\/\/www.cs.cornell.edu\/~srm\/publications\/EGSR07-btdf.pdf\">www.cs.cornell.edu\/~srm\/publications\/EGSR07-btdf.pdf<\/a> \u0438 \u0442\u0430\u043c \u0435\u0441\u0442\u044c \u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u044f \u0432 \u043f\u0430\u0440\u0430\u0433\u0440\u0430\u0444\u0435 4.1 \u0438 \u0434\u0430\u043b\u044c\u0448\u0435 \u0441 \u0440\u0438\u0441\u0443\u043d\u043a\u0430\u043c\u0438 \u043d\u0430 \u043a\u0440\u0443\u0436\u043e\u0447\u043a\u0430\u0445.<br \/>  \u041a\u0430\u0436\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0434\u0430? \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u043f\u0435\u0440\u0435\u0432\u0430\u0440\u0438\u0442\u044c \u0432\u0441\u0435 \u044d\u0442\u043e \u0432 \u043a\u043e\u0434\u0435.<br \/>  \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u044e\u0449\u0443\u044e \u0432\u0435\u043a\u0442\u043e\u0440 <b>H<\/b> \u0438\u0437 \u043d\u0430\u0448\u0435\u0439 <b>CDF<\/b>. \u0412 HLSL \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u043e\u0442 \u0442\u0430\u043a:  <\/p>\n<pre><code class=\"cpp\">float3 GGX_Sample(float2 E, float alpha) {     float Phi = 2.0*PI*E.x;     float cosThetha = saturate(sqrt( (1.0 - E.y) \/ (1.0 + alpha*alpha * E.y - E.y) ));     float sinThetha = sqrt( 1.0 - cosThetha*cosThetha);     return float3(sinThetha*cos(Phi), sinThetha*sin(Phi), cosThetha); }<\/code><\/pre>\n<p>\u0421\u044e\u0434\u0430 \u0432 <b>E<\/b> \u043c\u044b \u043f\u043e\u0434\u0430\u0435\u043c \u0440\u0430\u0432\u043d\u043e\u043c\u0435\u0440\u043d\u043e\u0435 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 [0;1) \u0434\u043b\u044f \u043e\u0431\u043e\u0438\u0445 \u0441\u0444\u0435\u0440\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0443\u0433\u043b\u043e\u0432, \u0432 <b>alpha<\/b> \u0443 \u043d\u0430\u0441 \u043a\u0432\u0430\u0434\u0440\u0430\u0442 \u043e\u0442 <b>roughness<\/b> \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430.<br \/>  \u041d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c <b>H<\/b> \u0432\u0435\u043a\u0442\u043e\u0440 \u043d\u0430 \u043f\u043e\u043b\u0443\u0441\u0444\u0435\u0440\u0435. \u041d\u043e \u044d\u0442\u0443 \u043f\u043e\u043b\u0443\u0441\u0444\u0435\u0440\u0443 \u043d\u0443\u0436\u043d\u043e \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0438. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u0438\u0448\u0435\u043c \u0435\u0449\u0435 \u043e\u0434\u043d\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u0443\u0434\u0435\u0442 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u043d\u0430\u043c \u043c\u0430\u0442\u0440\u0438\u0446\u0443 \u043e\u0440\u0438\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u043d\u0430 \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0438:  <\/p>\n<pre><code class=\"cpp\">float3x3 GetSampleTransform(float3 Normal) {   float3x3 w;   float3 up = abs(Normal.y) &lt; 0.999 ? float3(0,1,0) : float3(1,0,0);   w[0] = normalize ( cross( up, Normal ) );   w[1] = cross( Normal, w[0] );   w[2] = Normal;   return w; }<\/code><\/pre>\n<p>\u041d\u0430 \u044d\u0442\u0443 \u043c\u0430\u0442\u0440\u0438\u0446\u0443 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0443\u043c\u043d\u043e\u0436\u0430\u0442\u044c \u0432\u0441\u0435 \u043d\u0430\u0448\u0438 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0432\u0435\u043a\u0442\u043e\u0440\u0430 <b>H<\/b>, \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u044f \u0438\u0445 \u043a\u0430\u0441\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u0432 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u0432\u0438\u0434\u0430. \u041f\u0440\u0438\u043d\u0446\u0438\u043f \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u0445\u043e\u0436 \u043d\u0430 TBN \u0431\u0430\u0437\u0438\u0441.<br \/>  \u0422\u0435\u043f\u0435\u0440\u044c \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c \u043d\u0430\u0448\u0435\u0433\u043e \u041a\u0443\u043a\u0430-\u0422\u043e\u0440\u0440\u0435\u043d\u0441\u0430: <b>G*D*F*0.25\/(NV)<\/b> \u043d\u0430 <b>PDF<\/b>. \u041d\u0430\u0448\u0430 <b>PDF = D*NH\/(4*HV)<\/b>. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u0448 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u043d\u044b\u0439 \u041a\u0443\u043a-\u0422\u043e\u0440\u0440\u0435\u043d\u0441 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f: <b>G*F*HV\/(NV*NH)<\/b><br \/>  \u0412 HLSL \u0442\u0435\u043f\u0435\u0440\u044c \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0432\u043e\u0442 \u0442\u0430\u043a:  <\/p>\n<pre><code class=\"cpp\">float3 CookTorrance_GGX_sample(float3 n, float3 l, float3 v, Material_pbr m, out float3 FK) {     pdf = 0.0;     FK = 0.0;     n = normalize(n);     v = normalize(v);     l = normalize(l);     float3 h = normalize(v+l);     \/\/precompute dots     float NL = dot(n, l);     if (NL &lt;= 0.0) return 0.0;     float NV = dot(n, v);     if (NV &lt;= 0.0) return 0.0;     float NH = dot(n, h);     float HV = dot(h, v);          \/\/precompute roughness square     float roug_sqr = m.roughness*m.roughness;          \/\/calc coefficients     float G = GGX_PartialGeometry(NV, roug_sqr) * GGX_PartialGeometry(NL, roug_sqr);     float3 F = FresnelSchlick(m.f0, HV);     FK = F;      float3 specK = G*F*HV\/(NV*NH);     return max(0.0, specK); }<\/code><\/pre>\n<p>\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u044f \u0432\u044b\u043a\u0438\u043d\u0443\u043b \u0438\u0437 \u044d\u0442\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u0438\u0444\u0444\u0443\u0437\u043d\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u043e\u0442 \u041b\u0430\u043c\u0431\u0435\u0440\u0442\u043e\u0432\u0441\u043a\u043e\u0433\u043e \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u044f, \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e \u043d\u0430\u0440\u0443\u0436\u0443 <b>FK<\/b> \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440. \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u0434\u0438\u0444\u0444\u0443\u0437\u043d\u0443\u044e \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0443\u044e \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0447\u0435\u0440\u0435\u0437 <b>Importance Sampling<\/b>, \u0442.\u043a. \u043d\u0430\u0448\u0430 <b>PDF <\/b> \u2014 \u043e\u043d\u0430 \u0434\u043b\u044f \u0433\u0440\u0430\u043d\u0435\u0439, \u043e\u0442\u0440\u0430\u0436\u0430\u044e\u0449\u0438\u0445 \u0441\u0432\u0435\u0442 \u043d\u0430\u043c \u0432 \u0433\u043b\u0430\u0437. \u0410 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u041b\u0430\u043c\u0431\u0435\u0440\u0442\u0430 \u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u044d\u0442\u043e\u0433\u043e. \u0427\u0442\u043e \u0436\u0435 \u0434\u0435\u043b\u0430\u0442\u044c? \u0425\u043c\u2026 \u0430 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u043a\u0430 \u0434\u0438\u0444\u0444\u0443\u0437\u043d\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u043e\u0441\u0442\u0430\u0432\u0438\u043c \u0447\u0435\u0440\u043d\u043e\u0439, \u0438 \u0441\u043e\u0441\u0440\u0435\u0434\u043e\u0442\u043e\u0447\u0438\u043c\u0441\u044f \u043d\u0430 \u0441\u043f\u0435\u043a\u0443\u043b\u044f\u0440\u0435.  <\/p>\n<pre><code class=\"cpp\">PS_Output PS(VS_Output In) {     PS_Output Out;          Material_pbr m;     m.albedo = m_albedo;     m.f0 = m_f0;     m.roughness = m_roughness;      float3 MacroNormal = normalize(In.vNorm);     float3 ViewDir = normalize(-In.vCoord);          float3x3 HTransform = GetSampleTransform(MacroNormal);      Out.Color.rgb = 0.0;     float3 specColor = 0.0;     float3 FK_summ = 0.0;     for (uint i=0; i&lt;(uint)uSamplesCount; i++){         float3 H = GGX_Sample(uHammersleyPts[i].xy, m.roughness*m.roughness); \/\/\u0433\u0435\u043d\u0435\u0440\u0438\u043c H \u0432\u0435\u043a\u0442\u043e\u0440         H = mul(H, HTransform); \/\/\u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u043c \u0438\u0437 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 \u043c\u043e\u0434\u0435\u043b\u0438 \u0432 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u0432\u0438\u0434\u0430         float3 LightDir = reflect(-ViewDir, H); \/\/\u043e\u0442\u0440\u0430\u0436\u0430\u0435\u043c \u0432\u0435\u043a\u0442\u043e\u0440 \u0432\u0437\u0433\u043b\u044f\u0434\u0430 \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0432\u0435\u043a\u0442\u043e\u0440 \u0441\u0432\u0435\u0442\u0430          float3 specK;         float3 FK;         specK = CookTorrance_GGX_sample(MacroNormal, LightDir, ViewDir, m, FK); \/\/\u0441\u0447\u0438\u0442\u0430\u0435\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u043f\u0435\u043a\u0443\u043b\u044f\u0440\u0430         FK_summ += FK;         float3 LightColor = uRadiance.SampleLevel(uRadianceSampler, mul(LightDir.xyz, (float3x3)V_InverseMatrix), 0).rgb*LightInt;\/\/\u0438 \u043c\u043d\u043e\u0436\u0438\u043c \u0435\u0433\u043e \u043d\u0430 \u043f\u0438\u043a\u0441\u0435\u043b\u044c \u0438\u0437 \u043a\u0430\u0440\u0442\u044b \u0441\u0432\u0435\u0442\u0430         specColor += specK * LightColor; \/\/\u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0432 \u0441\u0443\u043c\u043c\u0443     }     specColor \/= uSamplesCount;     FK_summ \/= uSamplesCount;     Out.Color.rgb = specColor;     Out.Color.a = 1.0;     return Out; }<\/code><\/pre>\n<p>\u0417\u0430\u0434\u0430\u0434\u0438\u043c 1024 \u0441\u0435\u043c\u043f\u043b\u0430 (\u0431\u0435\u0437 \u0430\u043a\u043a\u0443\u043c\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u0430\u043a \u0432 \u043c\u043e\u043d\u0442\u0435-\u043a\u0430\u0440\u043b\u043e) \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/web\/ff5\/439\/b2f\/ff5439b2f2e04c2eb240292ce58342ec.png\"\/>\u0425\u043e\u0442\u044c \u0441\u0435\u043c\u043f\u043b\u043e\u0432 \u0438 \u043c\u043d\u043e\u0433\u043e, \u0430 \u0432\u044b\u0448\u043b\u043e \u0448\u0443\u043c\u043d\u043e\u0432\u0430\u0442\u043e. \u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u043d\u0430 \u0431\u043e\u043b\u044c\u0448\u043e\u043c roughness. <\/p>\n<h3>3.3 \u0412\u044b\u0431\u043e\u0440 LOD-\u043e\u0432<\/h3>\n<p>  \u042d\u0442\u043e \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u043c\u044b \u0441\u0435\u043c\u043f\u043b\u044b \u0431\u0435\u0440\u0435\u043c \u0441 \u0432\u044b\u0441\u043e\u043a\u043e\u0434\u0435\u0442\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u043a\u0430\u0440\u0442\u044b, \u0441 \u043d\u0443\u043b\u0435\u0432\u043e\u0433\u043e <b>LOD<\/b>. \u0410 \u0445\u043e\u0440\u043e\u0448\u043e \u0431\u044b \u0434\u043b\u044f \u043b\u0443\u0447\u0435\u0439, \u0438\u043c\u0435\u044e\u0449\u0438\u0445 \u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043e\u0442\u043a\u043b\u043e\u043d\u0435\u043d\u0438\u0435 \u0431\u0440\u0430\u0442\u044c \u043b\u043e\u0434 \u043f\u043e\u043c\u0435\u043d\u044c\u0448\u0435. \u0421\u0438\u0442\u0443\u0430\u0446\u0438\u044e \u0445\u043e\u0440\u043e\u0448\u043e \u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442 \u0432\u043e\u0442 \u044d\u0442\u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430:<br \/>  <img decoding=\"async\" src=\"https:\/\/developer.nvidia.com\/sites\/all\/modules\/custom\/gpugems\/books\/GPUGems3\/elementLinks\/20fig06.jpg\" alt=\"image\"\/><br \/>  \u0418\u0437 \u044d\u0442\u043e\u0439 <a href=\"https:\/\/developer.nvidia.com\/gpugems\/GPUGems3\/gpugems3_ch20.html\">developer.nvidia.com\/gpugems\/GPUGems3\/gpugems3_ch20.html<\/a> \u0441\u0442\u0430\u0442\u044c\u0438 \u043e\u0442 NVidia. \u0421\u0438\u043d\u0438\u0435 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u0443\u0441\u0440\u0435\u0434\u0435\u043d\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043d\u0435\u043f\u043b\u043e\u0445\u043e \u0431\u044b \u0432\u0437\u044f\u0442\u044c \u0438\u0437 <b>LOD<\/b>-\u043e\u0432 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b. \u0412\u0438\u0434\u043d\u043e \u0447\u0442\u043e \u0434\u043b\u044f \u0431\u043e\u043b\u0435\u0435 \u0437\u043d\u0430\u0447\u0438\u043c\u044b\u0445 \u043c\u044b \u0431\u0435\u0440\u0435\u043c <b>LOD<\/b> \u043f\u043e\u043c\u0435\u043d\u044c\u0448\u0435, \u0430 \u0434\u043b\u044f \u043c\u0435\u043d\u0435\u0435 \u0437\u043d\u0430\u0447\u0438\u043c\u044b\u0445 \u043f\u043e\u0431\u043e\u043b\u044c\u0448\u0435, \u0442.\u0435. \u0431\u0435\u0440\u0435\u043c \u0443\u0441\u0440\u0435\u0434\u043d\u0435\u043d\u043d\u043e\u0435 \u043f\u043e \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435. \u0418\u0434\u0435\u0430\u043b\u044c\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b, \u0435\u0441\u043b\u0438 \u0431\u044b \u043c\u044b \u043b\u043e\u0434\u0430\u043c\u0438 \u043f\u043e\u043a\u0440\u044b\u043b\u0438 \u0446\u0435\u043b\u0438\u043a\u043e\u043c \u043f\u043e\u043b\u0443\u0441\u0444\u0435\u0440\u0443. \u041a \u0441\u0447\u0430\u0441\u0442\u044c\u044e NVidia \u0443\u0436\u0435 \u0434\u0430\u043b\u0430 \u043d\u0430\u043c \u0433\u043e\u0442\u043e\u0432\u0443\u044e (\u0438 \u043f\u0440\u043e\u0441\u0442\u0443\u044e \u043f\u043e \u0438\u0445 \u0441\u043b\u043e\u0432\u0430\u043c) \u0444\u043e\u0440\u043c\u0443\u043b\u0443:<br \/>  <img decoding=\"async\" src=\"https:\/\/developer.nvidia.com\/sites\/all\/modules\/custom\/gpugems\/books\/GPUGems3\/elementLinks\/20equ13.jpg\" alt=\"image\"\/><br \/>  \u042d\u0442\u0430 \u0444\u043e\u0440\u043c\u0443\u043b\u0430 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u0440\u0430\u0437\u043d\u043e\u0441\u0442\u0438:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/web\/558\/1e2\/4a9\/5581e24a9e5b4f75abd067a7a11b5650.png\"\/><br \/>  \u041b\u0435\u0432\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0443 \u043d\u0430\u0441 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b \u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0441\u0435\u043c\u043f\u043b\u043e\u0432. \u0410 \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442 \u0447\u0442\u043e \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0441\u0435\u043c\u043f\u043b\u043e\u0432 \u043c\u044b \u0435\u0451 \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u0442\u044c \u043e\u0434\u0438\u043d \u0440\u0430\u0437. \u0412 \u043f\u0440\u0430\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0443 \u043d\u0430\u0441 \u0444\u0443\u043d\u043a\u0446\u0438\u044f <b>p<\/b>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0438\u0447\u0442\u043e \u0438\u043d\u043e\u0435 \u043a\u0430\u043a \u043d\u0430\u0448\u0430 <b>pdf<\/b>, \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044f <b>d<\/b>, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043e\u043d\u0438 \u043d\u0430\u0437\u044b\u0432\u0430\u044e\u0442 <b>distortion<\/b>, \u043d\u043e \u043f\u043e \u0441\u0443\u0442\u0438 \u0442\u0430\u043c \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c \u043e\u0442 \u0443\u0433\u043b\u0430 \u0441\u0435\u043c\u043f\u043b\u0430 \u043a \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0442\u0435\u043b\u044e. \u0414\u043b\u044f <b>d<\/b> \u0443 \u043d\u0438\u0445 \u0432\u044b\u0445\u043e\u0434\u0438\u0442 \u0432\u043e\u0442 \u0442\u0430\u043a\u0430\u044f \u0444\u043e\u0440\u043c\u0443\u043b\u0430:<br \/>  <img decoding=\"async\" src=\"https:\/\/developer.nvidia.com\/sites\/all\/modules\/custom\/gpugems\/books\/GPUGems3\/elementLinks\/20equ14.jpg\" alt=\"image\"\/>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0441\u043f\u043e\u0439\u043b\u0435\u0440\u0430<\/b><\/p>\n<div class=\"spoiler_text\">(\u0412\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0434\u0430\u043d\u043d\u0430\u044f \u0444\u043e\u0440\u043c\u0443\u043b\u0430 \u0441\u043f\u0440\u0430\u0432\u0435\u0434\u043b\u0438\u0432\u0430 \u0434\u043b\u044f Dual-Paraboloid \u043a\u0430\u0440\u0442. \u0423 \u043d\u0430\u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043a\u0443\u0431\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043a\u0430\u0440\u0442\u0430, \u0438 \u044f \u043f\u043e\u043b\u0430\u0433\u0430\u044e, \u0447\u0442\u043e \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 b \u0434\u043b\u044f \u043d\u0430\u0448\u0435\u0433\u043e \u0441\u043b\u0443\u0447\u0430\u044f \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0434\u0440\u0443\u0433\u043e\u0439, \u043d\u043e \u044f \u044d\u0442\u043e \u0435\u0449\u0435 \u043d\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u043b. \u0412 \u043c\u043e\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0439 \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 <b>b=1.2<\/b> \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u043b \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043d\u0435\u043f\u043b\u043e\u0445\u043e)  <\/div>\n<\/div>\n<p>\u041d\u0443 \u0438 \u0435\u0449\u0435 NVidia \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e\u0442 \u0434\u0435\u043b\u0430\u0442\u044c <b>bias<\/b> \u0434\u043b\u044f \u043b\u043e\u0434\u043e\u0432, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0435\u0434\u0438\u043d\u0438\u0447\u043a\u0443.<br \/>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043a\u0430\u043a \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0432 hlsl \u043a\u043e\u0434\u0435. \u0412\u043e\u0442 \u043d\u0430\u0448\u0430 \u043b\u0435\u0432\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0443\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f:  <\/p>\n<pre><code class=\"cpp\">float ComputeLOD_AParam(){     float w, h;     uRadiance.GetDimensions(w, h);     return 0.5*log2(w*h\/uSamplesCount); }<\/code><\/pre>\n<p>\u0412\u043e\u0442 \u043c\u044b \u0441\u0447\u0438\u0442\u0430\u0435\u043c \u043f\u0440\u0430\u0432\u0443\u044e \u0447\u0430\u0441\u0442\u044c, \u0438 \u0441\u0440\u0430\u0437\u0443 \u0432\u044b\u0447\u0438\u0442\u0430\u0435\u043c \u0435\u0451 \u0438\u0437 \u043b\u0435\u0432\u043e\u0439:  <\/p>\n<pre><code class=\"cpp\">float ComputeLOD(float AParam, float pdf, float3 l) {     float du = 2.0*1.2*(abs(l.z)+1.0);     return max(0.0, AParam-0.5*log2(pdf*du*du)+1.0); }<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u0432\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u043d\u0430\u043c \u0432 <b>ComputeLOD <\/b>\u043d\u0443\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c <b>pdf <\/b>\u0438 <b>l<\/b> \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f. <b>l<\/b> \u2014 \u044d\u0442\u043e \u0432\u0435\u043a\u0442\u043e\u0440 \u0441\u0435\u043c\u043f\u043b\u0430 \u0441\u0432\u0435\u0442\u0430, \u0430 <b>pdf<\/b>, \u0435\u0441\u043b\u0438 \u043c\u044b \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0432\u044b\u0448\u0435 \u0442\u043e \u044d\u0442\u043e \u0443 \u043d\u0430\u0441: <b>pdf = D*dot(N,H)\/(4*dot(H,V))<\/b>.<br \/>  \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0432 \u043d\u0430\u0448\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044e <b>CookTorrance_GGX_sample<\/b> \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0449\u0438\u0439\u0441\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <b>pdf<\/b>:  <\/p>\n<pre><code class=\"cpp\">float3 CookTorrance_GGX_sample(float3 n, float3 l, float3 v, Material_pbr m, out float3 FK, out float pdf) {     pdf = 0.0;     FK = 0.0;     n = normalize(n);     v = normalize(v);     l = normalize(l);     float3 h = normalize(v+l);     \/\/precompute dots     float NL = dot(n, l);     if (NL &lt;= 0.0) return 0.0;     float NV = dot(n, v);     if (NV &lt;= 0.0) return 0.0;     float NH = dot(n, h);     float HV = dot(h, v);          \/\/precompute roughness square     float roug_sqr = m.roughness*m.roughness;          \/\/calc coefficients     float G = GGX_PartialGeometry(NV, roug_sqr) * GGX_PartialGeometry(NL, roug_sqr);     float3 F = FresnelSchlick(m.f0, HV);     FK = F;          float D = GGX_Distribution(NH, roug_sqr); \/\/\u0432\u043e\u0442 \u0442\u0443\u0442 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043c\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 D     pdf = D*NH\/(4.0*HV); \/\/\u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u0441\u0430\u043c\u043e\u0439 pdf      float3 specK = G*F*HV\/(NV*NH);     return max(0.0, specK); }<\/code><\/pre>\n<p>  \u0410 \u0441\u0430\u043c \u0446\u0438\u043a\u043b \u043f\u043e \u0441\u0435\u043c\u043f\u043b\u0430\u043c \u0442\u0435\u043f\u0435\u0440\u044c \u0443 \u043d\u0430\u0441 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442 <b>LOD<\/b>:  <\/p>\n<pre><code class=\"cpp\">    float LOD_Aparam = ComputeLOD_AParam();     for (uint i=0; i&lt;(uint)uSamplesCount; i++){         float3 H = GGX_Sample(uHammersleyPts[i].xy, m.roughness*m.roughness);         H = mul(H, HTransform);         float3 LightDir = reflect(-ViewDir, H);          float3 specK;         float pdf;         float3 FK;         specK = CookTorrance_GGX_sample(MacroNormal, LightDir, ViewDir, m, FK, pdf);         FK_summ += FK;         float LOD = ComputeLOD(LOD_Aparam, pdf, LightDir);         float3 LightColor = uRadiance.SampleLevel(uRadianceSampler, mul(LightDir.xyz, (float3x3)V_InverseMatrix), LOD).rgb*LightInt;         specColor += specK * LightColor;     }<\/code><\/pre>\n<p>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0436\u0435 \u0433\u043b\u044f\u043d\u0435\u043c, \u0447\u0442\u043e \u0443 \u043d\u0430\u0441 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u0434\u043b\u044f 1024 \u0441\u0435\u043c\u043f\u043b\u043e\u0432 \u0441 \u043b\u043e\u0434\u0430\u043c\u0438:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/web\/158\/278\/e0c\/158278e0cf90404083c782eaea33d189.png\"\/><br \/>  \u0412\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e. \u041f\u043e\u043d\u0438\u0436\u0430\u0435\u043c \u0434\u043e 16, \u0438\u2026<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/web\/dc0\/216\/a4a\/dc0216a4aaec4698844908a59dd61cdc.png\"\/><br \/>  \u0414\u0430, \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0443\u0436\u0435 \u043d\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e. \u0412\u0438\u0434\u043d\u043e \u0447\u0442\u043e \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u0441\u0442\u0440\u0430\u0434\u0430\u043b\u043e \u043d\u0430 \u0448\u0430\u0440\u0438\u043a\u0430\u0445 \u0441 \u0431\u043e\u043b\u044c\u0448\u0438\u043c roughness, \u043d\u043e \u0442\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 \u044f \u0441\u0447\u0438\u0442\u0430\u044e \u044d\u0442\u043e \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435 \u043f\u0440\u0438\u0435\u043c\u043b\u0435\u043c\u044b\u043c. \u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u0432\u044b\u0441\u0438\u0442\u044c \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b, \u0435\u0441\u043b\u0438 \u0431\u044b \u043c\u044b <b>mip<\/b>-\u044b \u0434\u043b\u044f \u0442\u0435\u043a\u0441\u0442\u0443\u0440 \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u043b\u0438 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043d\u0430\u0448\u0435\u0433\u043e \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f. \u041e\u0431 \u044d\u0442\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0447\u0435\u0441\u0442\u044c \u0432 \u043f\u0440\u0435\u0437\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u043e\u0442 Epic \u0432\u043e\u0442 \u0442\u0443\u0442: <a href=\"https:\/\/de45xmedrsdbp.cloudfront.net\/Resources\/files\/2013SiggraphPresentationsNotes-26915738.pdf\">de45xmedrsdbp.cloudfront.net\/Resources\/files\/2013SiggraphPresentationsNotes-26915738.pdf<\/a> (\u0441\u043c. \u043f\u0430\u0440\u0430\u0433\u0440\u0430\u0444 Pre-Filtered Environment Map). \u0410 \u043f\u043e\u043a\u0430 \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u044f \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c\u0441\u044f \u043d\u0430 \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043f\u0438\u0440\u0430\u043c\u0438\u0434\u0430\u043b\u044c\u043d\u044b\u0445 \u043c\u0438\u043f\u0430\u0445.<\/p>\n<h3>3.4 Hammersley point set<\/h3>\n<p>  \u0415\u0441\u043b\u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u043d\u0430\u0448\u0438 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0439 \u043b\u0443\u0447\u0438, \u0442\u043e \u043f\u043e\u043d\u044f\u0442\u0435\u043d \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u043a. \u041e\u043d\u0438 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b. \u0410 \u043c\u044b \u0443\u0436\u0435 \u043d\u0430\u0443\u0447\u0438\u043b\u0438\u0441\u044c \u0447\u0438\u0442\u0430\u0442\u044c \u0438\u0437 lod-\u043e\u0432 \u0438 \u0445\u043e\u0442\u0438\u043c \u043d\u0430\u0448\u0438\u043c\u0438 \u043b\u0443\u0447\u0430\u043c\u0438 \u0437\u0430\u0445\u0432\u0430\u0442\u0438\u0442\u044c \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0443\u044e \u043f\u043b\u043e\u0449\u0430\u0434\u044c. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u00ab\u0440\u0430\u0441\u043f\u044b\u043b\u0438\u0442\u044c\u00bb \u043d\u0430\u0448\u0438 \u043b\u0443\u0447\u0438, \u043d\u043e \u0441 \u0443\u0447\u0435\u0442\u043e\u043c importance sampling-\u0430. \u0422.\u043a. <b>CDF<\/b> \u0443 \u043d\u0430\u0441 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0440\u0430\u0432\u043d\u043e\u043c\u0435\u0440\u043d\u043e\u0435 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435, \u0442\u043e \u043d\u0430\u043c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0440\u0430\u0432\u043d\u043e\u043c\u0435\u0440\u043d\u043e \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c \u0442\u043e\u0447\u043a\u0438 \u043d\u0430 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043a\u0435 [0;1)\u2026 \u043d\u043e \u0443 \u043d\u0430\u0441 \u0440\u0430\u0432\u043d\u043e\u043c\u0435\u0440\u043d\u043e\u0435 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0434\u0432\u0443\u043c\u0435\u0440\u043d\u044b\u043c. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u0434\u043e \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0432\u043d\u043e\u043c\u0435\u0440\u043d\u043e \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c \u0442\u043e\u0447\u043a\u0438 \u043d\u0430 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043a\u0435, \u043d\u043e \u0435\u0449\u0435 \u0438 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0432 \u0434\u0435\u043a\u0430\u0440\u0442\u043e\u0432\u044b\u0445 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430\u0445 \u043c\u0435\u0436\u0434\u0443 \u0442\u043e\u0447\u043a\u0430\u043c\u0438 \u0431\u044b\u043b\u043e \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0435. \u041d\u0430 \u044d\u0442\u0443 \u0440\u043e\u043b\u044c \u0445\u043e\u0440\u043e\u0448\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0442 <b>Hammersley point set<\/b>. \u0427\u0443\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u0440\u043e \u044d\u0442\u043e \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0442\u043e\u0447\u0435\u043a \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0432\u043e\u0442 \u0442\u0443\u0442: <a href=\"http:\/\/holger.dammertz.org\/stuff\/notes_HammersleyOnHemisphere.html\">holger.dammertz.org\/stuff\/notes_HammersleyOnHemisphere.html<\/a><br \/>  \u042f \u043b\u0438\u0448\u044c \u043f\u043e\u043a\u0430\u0436\u0443 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/web\/4cf\/2a6\/e14\/4cf2a6e145564f24a00a2068508364d8.png\"\/><br \/>  \u0410 \u0442\u0430\u043a \u0436\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u044e\u0449\u0443\u044e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0443\u044e \u0438\u0437 \u0442\u043e\u0447\u0435\u043a:  <\/p>\n<pre><code class=\"delphi\">function HammersleyPoint(const I, N: Integer): TVec2;   function radicalInverse_VdC(bits: Cardinal): Single;   begin     bits := (bits shl 16) or (bits shr 16);     bits := ((bits and $55555555) shl 1) or ((bits and $AAAAAAAA) shr 1);     bits := ((bits and $33333333) shl 2) or ((bits and $CCCCCCCC) shr 2);     bits := ((bits and $0F0F0F0F) shl 4) or ((bits and $F0F0F0F0) shr 4);     bits := ((bits and $00FF00FF) shl 8) or ((bits and $FF00FF00) shr 8);     Result := bits * 2.3283064365386963e-10;   end; begin   Result.x := I\/N;   Result.y := radicalInverse_VdC(I); end;<\/code><\/pre>\n<p>  \u041a\u0430\u043a \u043d\u0430\u0448\u0438 \u0448\u0430\u0440\u044b \u0431\u0443\u0434\u0443\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0441 \u044d\u0442\u0438\u043c \u043d\u0430\u0431\u043e\u0440\u043e\u043c \u0442\u043e\u0447\u0435\u043a? \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u044f \u0441\u0445\u0430\u043b\u0442\u0443\u0440\u0438\u043b, \u0438 \u0432\u0441\u0435 \u0432\u044b\u0448\u0435\u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u0434\u043b\u044f <b>Importance Sampling<\/b>-\u0430 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0438\u043c\u0435\u043d\u043d\u043e \u0441 \u043d\u0430\u0431\u043e\u0440\u043e\u043c \u044d\u0442\u0438\u0445 \u0442\u043e\u0447\u0435\u043a. \u041d\u0430 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0445 \u043d\u0430\u0431\u043e\u0440\u0430\u0445 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0442 \u0447\u0443\u0442\u044c \u0445\u0443\u0436\u0435 (\u043f\u043e\u0432\u0435\u0440\u0438\u0442\u0435 \u043d\u0430 \u0441\u043b\u043e\u0432\u043e?)<\/p>\n<h3>3.5 Irradiance map<\/h3>\n<p>  \u041f\u043e\u043c\u043d\u0438\u0442\u0435 \u043a\u0430\u043a \u043c\u044b \u043e\u0441\u0442\u0430\u043b\u0438\u0441\u044c \u0431\u0435\u0437 \u0434\u0438\u0444\u0444\u0443\u0437\u043d\u043e\u0433\u043e \u0446\u0432\u0435\u0442\u0430? \u041c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u0441\u0435\u043c\u043f\u043b\u0438\u0442\u044c \u0434\u0438\u0444\u0444\u0443\u0437\u043d\u044b\u0439 \u0446\u0432\u0435\u0442 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <b>importance sampling<\/b>, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043d\u0430\u0448 <b>importance sampling<\/b> \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0446\u0435\u043d\u043d\u044b\u0435 \u043b\u0443\u0447\u0438 \u0434\u043b\u044f \u0441\u043f\u0435\u043a\u0443\u043b\u044f\u0440\u0430. \u0414\u043b\u044f \u0434\u0438\u0444\u0444\u0443\u0437\u0430 \u0436\u0435 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0446\u0435\u043d\u043d\u044b\u0435 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u043f\u0440\u044f\u043c\u043e \u043d\u0430\u043f\u0440\u043e\u0442\u0438\u0432, \u043f\u043e \u043c\u0430\u043a\u0440\u043e\u043d\u043e\u0440\u043c\u0430\u043b\u0438 \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0438. \u041a \u0441\u0447\u0430\u0441\u0442\u044c\u044e \u0434\u0438\u0444\u0444\u0443\u0437\u043d\u0430\u044f \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0430\u044f \u0434\u043b\u044f \u041b\u0430\u043c\u0431\u0435\u0440\u0442\u0430 \u0443 \u043d\u0430\u0441 \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0442\u0435\u043b\u044f. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u0440\u0435\u0434\u0440\u0430\u0441\u0447\u0438\u0442\u0430\u0442\u044c \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u0435 \u0432 \u043a\u0443\u0431\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043a\u0430\u0440\u0442\u0435. \u0410 \u0435\u0449\u0435 \u043e\u0434\u0438\u043d \u0431\u043e\u043d\u0443\u0441 \u2014 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0443\u0433\u043b\u0430 \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0435\u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u043b\u0438\u044f\u0435\u0442 \u043d\u0430 \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u0435, \u0447\u0442\u043e \u043f\u0440\u0435\u0434\u0440\u0430\u0441\u0447\u0438\u0442\u0430\u043d\u043d\u0430\u044f \u043a\u0430\u0440\u0442\u0430 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043e\u0447\u0435\u043d\u044c \u043d\u0438\u0437\u043a\u043e\u0433\u043e \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u044f, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 16*16 \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 \u043d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u0443.<br \/>  \u041d\u0430 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437 \u043d\u0430\u043c \u043f\u043e\u0432\u0435\u0437\u043b\u043e. \u041c\u044b \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u043f\u0438\u0441\u0430\u0442\u044c \u043a\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435\u043c <b>Irradiance map<\/b>, \u0430 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043e\u0439 <a href=\"https:\/\/seblagarde.wordpress.com\/2012\/06\/10\/amd-cubemapgen-for-physically-based-rendering\/\">CubeMapGen<\/a>. \u041f\u0440\u043e\u0441\u0442\u043e \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u043d\u0430\u0448\u0443 \u043a\u0443\u0431\u043c\u0430\u043f\u0443 (Load Cubemap (.dds) ), \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0433\u0430\u043b\u043a\u0443 Irradiance cubemap, \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c Output Cube Size 16:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/web\/275\/aa3\/626\/275aa362699e424c8a148e45f6a0c1cd.PNG\"\/><br \/>  \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0432\u0448\u0443\u044e\u0441\u044f \u043a\u0443\u0431\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u043a\u0430\u0440\u0442\u0443 (\u0434\u043b\u044f HDR \u0442\u0435\u043a\u0441\u0442\u0443\u0440 \u043d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u0435\u043c \u0432\u044b\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043d\u0443\u0436\u043d\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 \u0430\u0443\u0442\u043f\u0443\u0442 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b).<br \/>  \u041d\u0443 \u0438 \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043c\u044b \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043b\u0438\u0441\u044c \u0441 <b>Irradiance map<\/b>, \u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u0441\u043b\u0435 \u0441\u0435\u043c\u043f\u043b\u0438\u043d\u0433\u0430 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043e\u0434\u043d\u0443 \u0432\u044b\u0431\u043e\u0440\u043a\u0443 \u0438\u0437 \u044d\u0442\u043e\u0439 \u043a\u0430\u0440\u0442\u044b. \u041d\u0430\u0448 HLSL \u043a\u043e\u0434 \u0442\u0435\u043f\u0435\u0440\u044c \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:  <\/p>\n<pre><code class=\"cpp\">    Out.Color.rgb = 0.0;     float3 specColor = 0.0;     float3 FK_summ = 0.0;     for (uint i=0; i&lt;(uint)uSamplesCount; i++){         float3 H = GGX_Sample(uHammersleyPts[i].xy, m.roughness*m.roughness);         H = mul(H, HTransform);         float3 LightDir = reflect(-ViewDir, H);          float3 specK;         float pdf;         float3 FK;         specK = CookTorrance_GGX_sample(MacroNormal, LightDir, ViewDir, m, FK, pdf);         FK_summ += FK;         float LOD = ComputeLOD(LOD_Aparam, pdf, LightDir);         float3 LightColor = uRadiance.SampleLevel(uRadianceSampler, mul(LightDir.xyz, (float3x3)V_InverseMatrix), LOD).rgb*LightInt;         specColor += specK * LightColor;     }     specColor \/= uSamplesCount;     FK_summ \/= uSamplesCount;     float3 LightColor = uIrradiance.Sample(uIrradianceSampler, mul(MacroNormal, (float3x3)V_InverseMatrix)).rgb;     Out.Color.rgb = m.albedo*saturate(1.0-FK_summ)*LightColor + specColor;<\/code><\/pre>\n<p>  \u0410 \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u0438\u043c\u0435\u0435\u043c \u0432\u043e\u0442 \u0442\u0430\u043a\u0443\u044e \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443 \u0434\u043b\u044f 16 \u0441\u0435\u043c\u043f\u043b\u043e\u0432:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/web\/9eb\/ffc\/fd2\/9ebffcfd26914e4aa89100945a02c03b.png\"\/>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0418 \u0442\u0430\u043a\u0443\u044e \u0434\u043b\u044f 1024<\/b><\/p>\n<div class=\"spoiler_text\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/web\/57b\/0b2\/8aa\/57b0b28aacb141aabed3a9690291e6f4.png\"\/>  <\/div>\n<\/div>\n<p>\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u0434\u0438\u0444\u0444\u0443\u0437\u043d\u044b\u0439 \u0441\u0432\u0435\u0442 \u043c\u044b \u0443\u0436\u0435 \u043d\u0435 \u0443\u043c\u043d\u043e\u0436\u0430\u0435\u043c \u043d\u0430 <b>dot(N,L)<\/b>, \u0447\u0442\u043e \u043a\u0430\u043a \u0431\u044b \u043b\u043e\u0433\u0438\u0447\u043d\u043e. \u0412\u0435\u0434\u044c \u044d\u0442\u043e \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u0435 \u043c\u044b \u043f\u0440\u0435\u0434\u0440\u0430\u0441\u0447\u0438\u0442\u0430\u043b\u0438 \u0438 \u0437\u0430\u043f\u0435\u043a\u043b\u0438 \u0432 \u043a\u0443\u0431\u043c\u0430\u043f\u0443, \u0438 \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 <b>N<\/b> \u0438 <b>L<\/b> \u044d\u0442\u043e \u0432\u043e\u043e\u0431\u0449\u0435 \u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 \u0432\u0435\u043a\u0442\u043e\u0440.<br \/>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0433\u043b\u044f\u043d\u0435\u043c, \u0447\u0442\u043e \u0443 \u043d\u0430\u0441 \u0442\u0430\u043c \u0441 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435\u043c \u044d\u043d\u0435\u0440\u0433\u0438\u0438? \u041a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u043e \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0441\u0432\u0435\u0442 \u0438\u0437 \u043a\u0443\u0431\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043a\u0430\u0440\u0442 \u0440\u0430\u0432\u043d\u044b\u043c \u0435\u0434\u0438\u043d\u0438\u0446\u0435, \u0430\u043b\u044c\u0431\u0435\u0434\u043e \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430 \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0440\u0430\u0432\u043d\u044b\u043c \u0435\u0434\u0438\u043d\u0438\u0446\u0435, \u0438 \u043f\u043e\u0434\u0441\u0432\u0435\u0447\u0438\u0432\u0430\u0435\u043c \u043a\u0440\u0430\u0441\u043d\u044b\u043c \u043e\u0431\u043b\u0430\u0441\u0442\u0438 &gt;1. \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u044d\u0442\u043e \u0434\u043b\u044f 1024 \u0441\u0435\u043c\u043f\u043b\u043e\u0432:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/web\/ab8\/25b\/472\/ab825b4727d24dd6b1b8c980e859879c.png\"\/><br \/>  \u0418 \u0432\u043e\u0442 \u044d\u0442\u043e \u0434\u043b\u044f 16:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/web\/4e9\/b8c\/a93\/4e9b8ca935b844c1a0f37bab2c4234d7.png\"\/><br \/>  \u041a\u0430\u043a \u0432\u0438\u0434\u0438\u043c \u0435\u0441\u0442\u044c \u044f\u0432\u043d\u044b\u0435 \u00ab\u0432\u044b\u0431\u0440\u043e\u0441\u044b\u00bb \u043b\u0438\u0448\u043d\u0435\u0439 \u044d\u043d\u0435\u0440\u0433\u0438\u0438, \u043d\u043e \u043e\u043d\u0438 \u043d\u0435 \u0431\u043e\u043b\u044c\u0448\u0438\u0435. \u0421\u0432\u044f\u0437\u0430\u043d\u043e \u044d\u0442\u043e \u0441 \u0442\u0435\u043c, \u0447\u0442\u043e \u043c\u044b \u043d\u0435 \u0442\u043e\u0447\u043d\u043e \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u0432\u0435\u0442\u0430 \u043e\u0442 \u0434\u0438\u0444\u0444\u0443\u0437\u043d\u043e\u0439 \u044d\u043d\u0435\u0440\u0433\u0438\u0438. \u0412\u0435\u0434\u044c \u043c\u044b \u0441\u0447\u0438\u0442\u0430\u0435\u043c \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u044b \u0424\u0440\u0435\u043d\u0435\u043b\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u0441\u0435\u043c\u043f\u043b\u043e\u0432 \u0441\u043f\u0435\u043a\u0443\u043b\u044f\u0440\u0430, \u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0438\u0445 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0441\u0435\u043c\u043b\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0435\u0434\u0440\u0430\u0441\u0447\u0438\u0442\u0430\u043d\u044b \u0432 <b>irradiance map<\/b>. \u0423\u0432\u044b, \u044f \u043d\u0435 \u0437\u043d\u0430\u044e \u0447\u0442\u043e \u0441 \u044d\u0442\u0438\u043c \u0434\u0435\u043b\u0430\u0442\u044c, \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442 \u043d\u0438\u0447\u0435\u0433\u043e \u043c\u043d\u0435 \u043d\u0435 \u0441\u043c\u043e\u0433 \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u0430\u0442\u044c. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u043f\u043e\u043a\u0430 \u0441\u043c\u0438\u0440\u0438\u0442\u044c\u0441\u044f \u0441 \u044d\u0442\u0438\u043c, \u0432\u0441\u0435 \u0442\u0430\u043a\u0438 \u0432\u044b\u0431\u0440\u043e\u0441\u044b \u043b\u0438\u0448\u043d\u0435\u0439 \u044d\u043d\u0435\u0440\u0433\u0438\u0438 \u043d\u0435 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u044b.<\/p>\n<h2>4 \u0415\u0449\u0435 \u0447\u0443\u0442\u044c-\u0447\u0443\u0442\u044c \u043f\u0440\u043e \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b.<\/h2>\n<p>  \u041f\u043e\u043a\u0430 \u043c\u044b \u0432\u043e\u0437\u0438\u043b\u0438\u0441\u044c \u0441 \u0448\u0430\u0440\u0438\u043a\u0430\u043c\u0438 \u2014 \u0432\u044b \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0437\u0430\u043c\u0435\u0442\u0438\u043b\u0438, \u0447\u0442\u043e \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0434\u0432\u0430 float3 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u0446\u0432\u0435\u0442\u0430. \u042d\u0442\u043e <b>albedo <\/b>\u0438 <b>f0<\/b>. \u041e\u043d\u0438 \u043e\u0431\u0430 \u0438\u043c\u0435\u044e\u0442 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0441\u043c\u044b\u0441\u043b, \u043d\u043e \u0432 \u0438\u0433\u0440\u0430\u0445 \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b \u0440\u0430\u0437\u0434\u0435\u043b\u044f\u044e\u0442 \u043d\u0430 \u043c\u0435\u0442\u0430\u043b\u043b\u044b \u0438 \u043d\u0435\u043c\u0435\u0442\u0430\u043b\u043b\u044b. \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043d\u0435\u043c\u0435\u0442\u0430\u043b\u043b\u044b \u043e\u0442\u0440\u0430\u0436\u0430\u044e\u0442 \u0441\u0432\u0435\u0442 \u0432\u0441\u0435\u0433\u0434\u0430 \u0432 grayscale \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0430\u0445, \u043d\u043e \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043f\u0435\u0440\u0435\u0438\u0437\u043b\u0443\u0447\u0430\u044e\u0442 \u0446\u0432\u0435\u043d\u0442\u043d\u043e\u0439 \u0441\u0432\u0435\u0442. \u041c\u0435\u0442\u0430\u043b\u043b\u044b \u0436\u0435 \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442, \u043e\u0442\u0440\u0430\u0436\u0430\u044e\u0442 \u0446\u0432\u0435\u0442\u043d\u043e\u0439 \u0441\u0432\u0435\u0442, \u043d\u043e \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043f\u043e\u0433\u043b\u043e\u0449\u0430\u044e\u0442 \u0432\u0435\u0441\u044c \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0439.<br \/>  \u0422\u043e \u0435\u0441\u0442\u044c \u0434\u043b\u044f \u043c\u0435\u0442\u0430\u043b\u043b\u043e\u0432 \u0443 \u043d\u0430\u0441:<br \/>  albedo = {0, 0, 0}<br \/>  f0 = {R, G, B}<br \/>  \u0434\u043b\u044f \u043d\u0435 \u043c\u0435\u0442\u0435\u043b\u043b\u043e\u0432 \u0443 \u043d\u0430\u0441:<br \/>  albedo = {R, G, B}<br \/>  f0 = {X, X, X}<br \/>  \u0438\u2026 \u043c\u044b \u0432\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0432\u0432\u0435\u0441\u0442\u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 [0,1], \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0443 \u043d\u0430\u0441 \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u044c \u043c\u0435\u0442\u0430\u043b\u043b\u0438\u0447\u0435\u0441\u043a\u0430\u044f, \u0438 \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b \u043f\u0440\u043e\u0441\u0442\u043e \u0447\u0435\u0440\u0435\u0437 \u043b\u0438\u043d\u0435\u0439\u043d\u0443\u044e \u0438\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u044f\u0446\u0438\u044e. \u042d\u0442\u043e \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043c\u043d\u043e\u0433\u0438\u0435 \u0445\u0443\u0434\u043e\u0436\u043d\u0438\u043a\u0438 \u0438 \u0434\u0435\u043b\u0430\u044e\u0442. \u042f \u0441\u043a\u0430\u0447\u0430\u043b \u0432\u043e\u0442 \u044d\u0442\u0443 3\u0434 \u043c\u043e\u0434\u0435\u043b\u044c: <a href=\"https:\/\/sketchfab.com\/models\/0affb3436519401db2bad31cfced95c1\">sketchfab.com\/models\/0affb3436519401db2bad31cfced95c1<\/a><br \/>  \u0412\u043e\u0442 \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b \u043c\u0435\u0447\u0430.<br \/>  \u0422\u0435\u043a\u0441\u0442\u0443\u0440\u0430 \u0446\u0432\u0435\u0442\u0430:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/web\/1df\/ec4\/1e1\/1dfec41e11ea491e83ad32a656b0943e.png\"\/><br \/>  \u0422\u0435\u043a\u0441\u0442\u0443\u0440\u0430 \u0448\u0435\u0440\u043e\u0445\u043e\u0432\u0430\u0442\u043e\u0441\u0442\u0438:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/web\/1a0\/c60\/61d\/1a0c6061ddb34035aa8ddc57f45193eb.png\"\/><br \/>  \u0418 \u043d\u0430\u043a\u043e\u043d\u0435\u0446 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0430 \u043c\u0435\u0442\u0430\u043b\u043b\u0438\u0447\u043d\u043e\u0441\u0442\u0438 (\u0442\u0430 \u0441\u0430\u043c\u0430\u044f, \u043e \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0432\u044b\u0448\u0435 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u043b):<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/web\/52a\/ca8\/a2a\/52aca8a2a1144c4bb12f0174a7ab0370.png\"\/><br \/>  \u0427\u0443\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u043e \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430\u0445 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0432 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0435. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0442\u0443\u0442: <a href=\"https:\/\/habrahabr.ru\/company\/mailru\/blog\/248873\/\">habrahabr.ru\/company\/mailru\/blog\/248873<\/a><br \/>  \u0420\u0430\u0437\u043d\u044b\u0435 \u0434\u0432\u0438\u0436\u043a\u0438 \u0438 \u0441\u0442\u0443\u0434\u0438\u0438 \u043c\u043e\u0433\u0443\u0442 \u043f\u0430\u043a\u043e\u0432\u0430\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043f\u043e \u0440\u0430\u0437\u043d\u043e\u043c\u0443, \u043d\u043e \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u0432\u0441\u0435 \u043a\u0440\u0443\u0442\u0438\u0442\u0441\u044f \u0432\u043e\u043a\u0440\u0443\u0433: \u0446\u0432\u0435\u0442\u0430, \u0448\u0435\u0440\u043e\u0445\u043e\u0432\u0430\u0442\u043e\u0441\u0442\u0438, \u043c\u0435\u0442\u0430\u043b\u043b\u0438\u0447\u043d\u043e\u0441\u0442\u0438.<br \/>  \u041d\u0443 \u0438 \u043d\u0430\u043a\u043e\u043d\u0435\u0446, \u043a\u0430\u043a \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043d\u0430 \u043c\u043e\u0434\u0435\u043b\u0438 \u0446\u0435\u043b\u0438\u043a\u043e\u043c:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/web\/496\/93f\/99c\/49693f99c3a44178a8659e3745111feb.png\"\/><br \/>  \u0441\u043b\u0435\u0432\u0430 \u2014 \u0432\u0441\u0435 \u0442\u043e\u0442 \u0436\u0435 \u0441\u043e\u0431\u043e\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u043d\u0430 \u0448\u0430\u0440\u0438\u043a\u0430\u0445. \u0421\u043f\u0440\u0430\u0432\u0430 \u043d\u0430\u0448 \u0410\u0440\u0442\u043e\u0440\u0438\u0430\u0441 \u0432\u044b\u0431\u0440\u0430\u043b\u0441\u044f \u043d\u0430 \u043f\u0440\u0438\u0440\u043e\u0434\u0443 (\u043a\u0430\u0440\u0442\u0430 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u043e\u0442\u0441\u044e\u0434\u0430 <a href=\"http:\/\/www.pauldebevec.com\/Probes\/\">www.pauldebevec.com\/Probes<\/a> \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f Campus)<br \/>  \u0414\u043b\u044f \u0440\u0435\u043d\u0434\u0435\u0440\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e Reinhard \u0442\u043e\u043d\u043c\u0430\u043f\u043f\u0438\u043d\u0433, \u043d\u043e \u044d\u0442\u043e \u0442\u0435\u043c\u0430 \u0443\u0436\u0435 \u0434\u043b\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438.<br \/>  \u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u0441 \u043c\u043e\u0434\u0435\u043b\u044c\u044e \u0410\u0440\u0442\u043e\u0440\u0438\u0430\u0441\u0430 \u2014 \u044d\u0442\u043e \u0434\u0435\u043c\u043a\u0430 \u0432 \u043c\u043e\u0435\u043c \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0435, \u0438 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f <a href=\"https:\/\/github.com\/MrShoor\/AvalancheProject\/tree\/master\/Demos\/Src\/avm_Import\">\u0432\u043e\u0442 \u0442\u0443\u0442<\/a>. \u0422\u0430\u043a \u0436\u0435 \u044f \u0441\u043e\u0431\u0440\u0430\u043b \u0434\u043b\u044f \u0432\u0430\u0441 \u0432\u0435\u0440\u0441\u0438\u044e, \u0438 \u0432\u044b\u043b\u043e\u0436\u0438\u043b \u0442\u0443\u0442: <a href=\"https:\/\/1drv.ms\/u\/s\">1drv.ms\/u\/s<\/a>!AiM3XDRgDCMggT9ubyUpN4RkmIo8<\/p>\n<h2>5 \u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h2>\n<p>  \u0421\u0442\u0430\u0442\u044c\u044f \u0432\u044b\u0448\u043b\u0430 \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u043e\u043b\u044c\u0448\u0435, \u0447\u0435\u043c \u044f \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u043b. \u042f \u0445\u043e\u0442\u0435\u043b \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u0435\u0449\u0435 \u043f\u0440\u043e:<br \/>  1. \u0410\u043d\u0438\u0437\u043e\u0442\u0440\u043e\u043f\u043d\u044b\u0435 \u043c\u043e\u0434\u0435\u043b\u0438 \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u044f<br \/>  2. \u041f\u043e\u0434\u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u043d\u043e\u0435 \u0440\u0430\u0441\u0441\u0435\u0438\u0432\u0430\u043d\u0438\u0435<br \/>  3. \u041f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u044b\u0435 \u0434\u0438\u0444\u0444\u0443\u0437\u043d\u044b\u0435 \u043c\u043e\u0434\u0435\u043b\u0438 \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u044f, \u0442\u0438\u043f\u0430 \u041e\u0440\u0435\u043d-\u041d\u0430\u044f\u0440\u0430<br \/>  4. \u0417\u0430\u0445\u0432\u0430\u0442\u0438\u0442\u044c \u0441\u0444\u0435\u0440\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0433\u0430\u0440\u043c\u043e\u043d\u0438\u043a\u0438<br \/>  5. \u0417\u0430\u0445\u0432\u0430\u0442\u0438\u0442\u044c \u0442\u043e\u043d\u043c\u0430\u043f\u043f\u0438\u043d\u0433<br \/>  \u041d\u043e \u0432\u0435\u0440\u0438\u0442\u0435 \u0438\u043b\u0438 \u043d\u0435\u0442, \u044f \u0432\u044b\u0434\u043e\u0445\u0441\u044f \u043f\u043e\u043a\u0430 \u043f\u0438\u0441\u0430\u043b \u044d\u0442\u0443 \u0441\u0442\u0430\u0442\u044c\u044e\u2026 \u0410 \u0442\u0443\u0442 \u043a\u0430\u0436\u0434\u044b\u0439 \u043f\u0443\u043d\u043a\u0442 \u2014 \u044d\u0442\u043e \u0436\u0438\u0440\u043d\u044b\u0439 \u043f\u043b\u0430\u0441\u0442. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0435\u0441\u0442\u044c, \u0447\u0442\u043e \u0435\u0441\u0442\u044c. \u041c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043a\u043e\u0433\u0434\u0430-\u043d\u0438\u0431\u0443\u0434\u044c \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043f\u0440\u043e \u0432\u0441\u0435 \u044d\u0442\u043e.<br \/>  \u041d\u0430\u0434\u0435\u044e\u0441\u044c \u0447\u0442\u043e \u043c\u043e\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u043f\u0440\u0438\u043e\u0442\u043a\u0440\u043e\u0435\u0442 \u043a\u043e\u043c\u0443-\u043d\u0438\u0431\u0443\u0434\u044c \u0437\u0430\u0432\u0435\u0441\u0443 \u0442\u0430\u0439\u043d\u044b, \u0441\u043a\u0440\u044b\u0442\u043e\u0439 \u0437\u0430 \u044d\u0442\u0438\u043c\u0438 \u0431\u0443\u043a\u0432\u0430\u043c\u0438 PBR. \u0418 \u0441\u043f\u0430\u0441\u0438\u0431\u043e \u0437\u0430 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435.<\/p>\n<h2>6 \u041f\u043e\u043b\u0435\u0437\u043d\u044b\u0435 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b \u043f\u043e PBR \u0438 \u043e\u043a\u043e\u043b\u043e \u0442\u043e\u0433\u043e<\/h2>\n<p>  [1] <a href=\"http:\/\/blog.tobias-franke.eu\/2014\/03\/30\/notes_on_importance_sampling.html\">blog.tobias-franke.eu\/2014\/03\/30\/notes_on_importance_sampling.html<\/a><br \/>  \u043e\u0442\u043a\u0443\u0434\u0430 \u0432\u0437\u044f\u043b\u0438\u0441\u044c PDF \u0438 CDF, \u0438 \u043a\u0430\u043a \u0438\u0445 \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0441\u0430\u043c\u043e\u043c\u0443.<\/p>\n<p>  [2] <a href=\"https:\/\/hal.inria.fr\/hal-00942452v1\/document\">hal.inria.fr\/hal-00942452v1\/document<\/a><br \/>  \u0445\u043e\u0440\u043e\u0448\u0438\u0439 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b \u043f\u043e PBR (+ \u0430\u043d\u0438\u0437\u043e\u0442\u0440\u043e\u043f\u043d\u044b\u0435 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f)<\/p>\n<p>  [3] <a href=\"https:\/\/disney-animation.s3.amazonaws.com\/library\/s2012_pbs_disney_brdf_notes_v2.pdf\">disney-animation.s3.amazonaws.com\/library\/s2012_pbs_disney_brdf_notes_v2.pdf<\/a><br \/>  \u0445\u043e\u0440\u043e\u0448\u0438\u0439 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b \u043e\u0442 Disney, \u0447\u0442\u043e \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0430\u043a\u043e\u0432\u0430\u0442\u044c \u0438 \u043f\u0440\u0435\u0434\u0440\u0430\u0441\u0447\u0438\u0442\u0430\u0442\u044c. \u0421\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u043f\u043e\u0433\u0440\u0435\u0448\u043d\u043e\u0441\u0442\u0435\u0439, \u0430 \u0442\u0430\u043a \u0436\u0435 \u043f\u0440\u0438\u043c\u0435\u0440 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0434\u0438\u0444\u0444\u0443\u0437\u043d\u044b\u0445 \u043c\u043e\u0434\u0435\u043b\u0435\u0439 \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u044f<\/p>\n<p>  [4] <a href=\"https:\/\/www.cs.cornell.edu\/~srm\/publications\/EGSR07-btdf.pdf\">www.cs.cornell.edu\/~srm\/publications\/EGSR07-btdf.pdf<\/a><br \/>  \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u043e GGX, \u043e\u0442 Bruce Walter-\u0430 \u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u0443\u043c\u043d\u044b\u0445 \u0440\u0435\u0431\u044f\u0442<\/p>\n<p>  [5] <a href=\"https:\/\/de45xmedrsdbp.cloudfront.net\/Resources\/files\/2013SiggraphPresentationsNotes-26915738.pdf\">de45xmedrsdbp.cloudfront.net\/Resources\/files\/2013SiggraphPresentationsNotes-26915738.pdf<\/a><br \/>  \u041f\u0440\u043e PBR \u0432 Unreal Engine 4<\/p>\n<p>  [6] <a href=\"http:\/\/holger.dammertz.org\/stuff\/notes_HammersleyOnHemisphere.html\">holger.dammertz.org\/stuff\/notes_HammersleyOnHemisphere.html<\/a><br \/>  \u041a\u043b\u0430\u0441\u0441\u043d\u0430\u044f \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u043f\u043e Hammersley Point Set<\/p>\n<p>  [7] <a href=\"http:\/\/www.jordanstevenstechart.com\/physically-based-rendering\">www.jordanstevenstechart.com\/physically-based-rendering<\/a><br \/>  \u0420\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f. \u0421 \u043a\u0430\u0440\u0442\u0438\u043d\u043e\u0447\u043a\u0430\u043c\u0438.<\/p>\n<p>  [8] <a href=\"http:\/\/graphicrants.blogspot.nl\/2013\/08\/specular-brdf-reference.html\">graphicrants.blogspot.nl\/2013\/08\/specular-brdf-reference.html<\/a><br \/>  \u0435\u0449\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f<\/p>\n<p>  [9] <a href=\"https:\/\/developer.nvidia.com\/gpugems\/GPUGems3\/gpugems3_ch20.html\">developer.nvidia.com\/gpugems\/GPUGems3\/gpugems3_ch20.html<\/a><br \/>  \u041e\u0447\u0435\u043d\u044c \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0439 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b \u043e\u0442 NVidia \u043f\u0440\u043e Importance Sampling \u0438 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044e LOD-\u0430\u043c\u0438.<\/p>\n<p>  [10] <a href=\"http:\/\/cgg.mff.cuni.cz\/~jaroslav\/papers\/2008-egsr-fis\/2008-egsr-fis-final-embedded.pdf\">cgg.mff.cuni.cz\/~jaroslav\/papers\/2008-egsr-fis\/2008-egsr-fis-final-embedded.pdf<\/a><br \/>  \u0415\u0449\u0435 \u043e\u0434\u0438\u043d \u043d\u0435\u043f\u043b\u043e\u0445\u043e\u0439 \u043f\u0435\u0439\u043f\u0435\u0440 \u043f\u0440\u043e Importance Sampling<\/p>\n<p>  [11] <a href=\"http:\/\/gdcvault.com\/play\/1024478\/PBR-Diffuse-Lighting-for-GGX\">gdcvault.com\/play\/1024478\/PBR-Diffuse-Lighting-for-GGX<\/a><br \/>  \u041f\u0440\u043e\u0441\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u0441\u043b\u0430\u0439\u0434\u044b \u043f\u043e PBR.<\/p>\n<p>  [12] <a href=\"http:\/\/www.codinglabs.net\/article_physically_based_rendering.aspx\">www.codinglabs.net\/article_physically_based_rendering.aspx<\/a><br \/>  [13] <a href=\"http:\/\/www.codinglabs.net\/article_physically_based_rendering_cook_torrance.aspx\">www.codinglabs.net\/article_physically_based_rendering_cook_torrance.aspx<\/a><br \/>  \u0414\u0432\u0435 \u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0440\u043e\u0448\u0438\u0435 \u0434\u043b\u044f \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u043e\u0441\u043d\u043e\u0432 \u0441\u0442\u0430\u0442\u044c\u0438 (\u043d\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u043a\u043e\u0435-\u043a\u0430\u043a\u0438\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u0438 \u043d\u0435\u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438)<\/p>\n<p>  [14] <a href=\"http:\/\/www.rorydriscoll.com\/2009\/01\/25\/energy-conservation-in-games\/\">www.rorydriscoll.com\/2009\/01\/25\/energy-conservation-in-games<\/a><br \/>  \u041f\u0440\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u044d\u043d\u0435\u0440\u0433\u0438\u0438<\/p>\n<p>  [15] <a href=\"https:\/\/www.gamedev.net\/topic\/625981-lambert-and-the-division-by-pi\/\">www.gamedev.net\/topic\/625981-lambert-and-the-division-by-pi<\/a><br \/>  <a href=\"http:\/\/www.wolframalpha.com\/input\/?i=integrate+cos+x+\">www.wolframalpha.com\/input\/?i=integrate+cos+x+<\/a>*+sin+x+dx+dy+from+x+%3D+0+to+pi+%2F+2+y+%3D+0+to+pi+*+2<br \/>  \u043e\u0442\u043a\u0443\u0434\u0430 \u041f\u0438 \u0432 \u0437\u043d\u0430\u043c\u0435\u043d\u0430\u0442\u0435\u043b\u0435<\/p>\n<p>  [16] <a href=\"http:\/\/www.pauldebevec.com\/Probes\/\">www.pauldebevec.com\/Probes<\/a><br \/>  \u041d\u0430\u0431\u043e\u0440 HDR 360 \u043f\u0440\u043e\u0431. \u041f\u0440\u044f\u043c\u043e \u0441 \u0444\u043e\u0440\u043c\u0443\u043b\u0430\u043c\u0438 \u043a\u0430\u043a \u0447\u0438\u0442\u0430\u0442\u044c \u0438\u0437 \u044d\u0442\u0438\u0445 \u043f\u0440\u043e\u0431.<\/p>\n<p>  [17] <a href=\"https:\/\/seblagarde.wordpress.com\/2012\/06\/10\/amd-cubemapgen-for-physically-based-rendering\/\">seblagarde.wordpress.com\/2012\/06\/10\/amd-cubemapgen-for-physically-based-rendering<\/a><br \/>  <a href=\"https:\/\/code.google.com\/archive\/p\/cubemapgen\/downloads\">code.google.com\/archive\/p\/cubemapgen\/downloads<\/a><br \/>  \u041a\u0443\u0431\u041c\u0430\u043f\u0413\u0435\u043d. \u0422\u0443\u043b\u0437\u0430 \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 radiance \u0438 irradiance \u043a\u0443\u0431\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043a\u0430\u0440\u0442.<\/p>\n<p>  [18] <a href=\"https:\/\/eheitzresearch.wordpress.com\/415-2\/\">eheitzresearch.wordpress.com\/415-2<\/a><br \/>  \u041f\u0440\u043e \u043f\u043e\u043b\u0438\u0433\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0438 \u0441\u0432\u0435\u0442\u0430. \u0421 \u0434\u0435\u043c\u043a\u043e\u0439.<br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habrahabr.ru\/post\/326852\/\"> https:\/\/habrahabr.ru\/post\/326852\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/web\/601\/516\/b79\/601516b79c8c4fc08f6f94c7d3528196.png\" align=\"left\"\/>\u0425\u0435\u0439, \u043f\u0440\u0438\u0432\u0435\u0442. 2017 \u0433\u043e\u0434 \u043d\u0430 \u0434\u0432\u043e\u0440\u0435. \u0414\u0430\u0436\u0435 \u043f\u0440\u043e\u0441\u0442\u0435\u043d\u044c\u043a\u0438\u0435 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0435 \u0438 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043d\u044b\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442 \u043f\u043e\u0442\u0438\u0445\u043e\u043d\u044c\u043a\u0443 \u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0435 \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u0435. \u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442 \u043f\u0435\u0441\u0442\u0440\u0438\u0442 \u043a\u0443\u0447\u0435\u0439 \u0441\u0442\u0430\u0442\u0435\u0439 \u0438 \u0433\u043e\u0442\u043e\u0432\u044b\u0445 \u0448\u0435\u0439\u0434\u0435\u0440\u043e\u0432. \u0418 \u043a\u0430\u0436\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u044d\u0442\u043e \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0442\u0430\u043a \u043f\u0440\u043e\u0441\u0442\u043e \u0442\u043e\u0436\u0435 \u043e\u0431\u043c\u0430\u0437\u0430\u0442\u044c\u0441\u044f PBR\u2026 \u0418\u043b\u0438 \u043d\u0435\u0442?<br \/>  \u0412 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0436\u0435 \u0447\u0435\u0441\u0442\u043d\u044b\u0439 PBR \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0441\u043b\u043e\u0436\u043d\u043e, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043b\u0435\u0433\u043a\u043e \u0434\u043e\u0441\u0442\u0438\u0447\u044c \u043f\u043e\u0445\u043e\u0436\u0435\u0433\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430, \u043d\u043e \u0441\u043b\u043e\u0436\u043d\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0433\u043e. \u0418 \u0432 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0435 \u043f\u043e\u043b\u043d\u043e \u0441\u0442\u0430\u0442\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u0435\u043b\u0430\u044e\u0442 \u0438\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u0445\u043e\u0436\u0438\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442, \u0432\u043c\u0435\u0441\u0442\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0433\u043e. \u041e\u0442\u0434\u0435\u043b\u0438\u0442\u044c \u043c\u0443\u0445 \u043e\u0442 \u043a\u043e\u0442\u043b\u0435\u0442 \u0432 \u044d\u0442\u043e\u043c \u0445\u0430\u043e\u0441\u0435 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0441\u043b\u043e\u0436\u043d\u043e.<br \/>  \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0446\u0435\u043b\u044c \u0441\u0442\u0430\u0442\u044c\u0438 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0436\u0435 \u0442\u0430\u043a\u043e\u0435 PBR \u0438 \u043a\u0430\u043a \u043e\u043d \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u043d\u043e \u0438 \u043d\u0430\u0443\u0447\u0438\u0442\u044c\u0441\u044f \u043f\u0438\u0441\u0430\u0442\u044c \u0435\u0433\u043e. \u041a\u0430\u043a \u043e\u0442\u043b\u0430\u0436\u0438\u0432\u0430\u0442\u044c, \u043a\u0443\u0434\u0430 \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u0438 \u043a\u0430\u043a\u0438\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u0442\u0438\u043f\u0438\u0447\u043d\u043e \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c.<br \/>  \u0421\u0442\u0430\u0442\u044c\u044f \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d\u0430 \u043d\u0430 \u043b\u044e\u0434\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e\u0439 \u043c\u0435\u0440\u0435 \u0443\u0436\u0435 \u0437\u043d\u0430\u044e\u0442 hlsl \u0438 \u043d\u0435\u043f\u043b\u043e\u0445\u043e \u0437\u043d\u0430\u043a\u043e\u043c\u044b \u0441 \u043b\u0438\u043d\u0435\u0439\u043d\u043e\u0439 \u0430\u043b\u0433\u0435\u0431\u0440\u043e\u0439, \u0438 \u043c\u043e\u0436\u0435\u0442\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0432\u043e\u0439 \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0438\u0439 \u043d\u0435PBR Phong \u0441\u0432\u0435\u0442. \u0412 \u043e\u0431\u0449\u0435\u043c \u044f \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u044e\u0441\u044c \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0449\u0435 \u043e\u0431\u044a\u044f\u0441\u043d\u0438\u0442\u044c, \u043d\u043e \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u044e \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u043f\u044b\u0442 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0448\u0435\u0439\u0434\u0435\u0440\u0430\u043c\u0438 \u0432\u044b \u0443\u0436\u0435 \u0438\u043c\u0435\u0435\u0442\u0435.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-286225","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/286225","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=286225"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/286225\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=286225"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=286225"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=286225"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}