{"id":17318,"date":"2026-10-04T09:52:17","date_gmt":"2026-10-04T00:52:17","guid":{"rendered":"http:\/\/www.gisdeveloper.co.kr\/?p=17318"},"modified":"2026-10-04T09:54:19","modified_gmt":"2026-10-04T00:54:19","slug":"three-js-lightprobegrid-api-%ed%95%b5%ec%8b%ac-%ec%bd%94%eb%93%9c","status":"publish","type":"post","link":"http:\/\/www.gisdeveloper.co.kr\/?p=17318","title":{"rendered":"three.js, LightProbeGrid API \ud575\uc2ec \ucf54\ub4dc"},"content":{"rendered":"<p>\uc774 \uae00\uc740 three.js\ub97c \uc774\uc6a9\ud55c \ud6a8\uacfc\uc801\uc778 \uad11\uc6d0 \ud6a8\uacfc\ub97c \uc704\ud574 <code class=\"EnlighterJSRAW\" data-enlighter-language=\"javascript\">LightProbeGrid<\/code>\ub97c WebGPU \ub80c\ub354\ub7ec\uc5d0\uc11c \uc0ac\uc6a9\ud560 \ub54c \ube60\ub978 \uc801\uc6a9\uc744 \uc704\ud574 \uc791\uc131\ub41c \uae00\uc785\ub2c8\ub2e4.<\/p>\n<p>\uba3c\uc800 \ud544\uc694\ud55c API\uc5d0 \ub300\ud55c <code class=\"EnlighterJSRAW\" data-enlighter-language=\"javascript\">import<\/code> \ubb38\uc785\ub2c8\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"javascript\">\r\nimport { LightProbeGrid } from 'three\/examples\/jsm\/lighting\/LightProbeGrid.js';\r\nimport { LightProbeGridHelper } from 'three\/examples\/jsm\/helpers\/LightProbeGridHelper.js';\r\n<\/pre>\n<p>\uad00\ub828\ub41c \ud544\ub4dc\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"javascript\">\r\nprivate probes?: LightProbeGrid;\r\nprivate probesHelper?: LightProbeGridHelper;\r\n<\/pre>\n<p><code class=\"EnlighterJSRAW\" data-enlighter-language=\"javascript\">LightProbeGrid<\/code>\ub294 \uc815\uc801 \uc7a5\uba74\uc5d0 \ub300\ud55c \uad11\uc6d0 \ud6a8\uacfc\uc785\ub2c8\ub2e4. \uc989, \uc7a5\uba74\uc744 \uad6c\uc6cc\uc57c \ud569\ub2c8\ub2e4. \uc544\ub798\uc758 \ucf54\ub4dc\ub294 \uc7a5\uba74\uc5d0 \ub300\ud55c \uad11\uc6d0\uc744 \uad7d\ub294 \ucf54\ub4dc\uc785\ub2c8\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"javascript\">\r\nasync bake(resolution: number) {\r\n  if (this.probes) {\r\n    this.scene.remove(this.probes);\r\n    this.probes.dispose();\r\n  }\r\n\r\n  const probes = new LightProbeGrid(\r\n    5.6, 4.7, 5.6,\r\n    resolution, resolution, resolution\r\n  );\r\n\r\n  probes.position.set(0, 2.45, 0);\r\n\r\n  await probes.bake(\r\n    this.renderer, this.scene,\r\n    { \r\n      cubemapSize: 32,\r\n      sampleCount: 512, \r\n      bounces: 0,\r\n      near: 0.05, \r\n      far: 20\r\n    }\r\n  );\r\n\r\n  probes.visible = params.enabled;\r\n  this.scene.add(probes);\r\n\r\n  this.probes = probes;\r\n\r\n  \/\/ Update debug visualization\r\n\r\n  if (!this.probesHelper) {\r\n    this.probesHelper = new LightProbeGridHelper(probes);\r\n    this.probesHelper.visible = params.showProbes;\r\n    this.scene.add(this.probesHelper);\r\n  } else {\r\n    this.probesHelper.probes = probes;\r\n    this.probesHelper.update();\r\n  }\r\n}\r\n<\/pre>\n<p>\uc704\uc758 \ucf54\ub4dc\uc5d0\uc11c \uc0ac\uc6a9\ub41c \uc124\uc815\uac12\uc5d0 \ub300\ud55c \uac1d\uccb4\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"javascript\">\r\nconst params = {\r\n  enabled: true,\r\n  showProbes: true,\r\n  resolution: 6\r\n};\r\n<\/pre>\n<p>GUI\ub97c \ud1b5\ud574 \uc124\uc815\uac12\uc744 \uc870\uc815\ud558\uae30 \uc704\ud55c \ucf54\ub4dc\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"javascript\">\r\nprivate setupGUI() {\r\n  const gui = this.renderer.inspector.createParameters('Light Probes');\r\n  gui.add(params, 'enabled').name('GI').onChange((value: boolean) => {\r\n    if(this.probes) this.probes.visible = value;\r\n  });\r\n\r\n  gui.add(params, 'resolution', 2, 12, 1).name('Resolution').onChange((value: number) => {\r\n    this.bake(value);\r\n  });\r\n\r\n  gui.add(params, 'showProbes').name('Show Probes').onChange((value: boolean) => {\r\n    if(this.probesHelper) this.probesHelper.visible = value;\r\n  });\r\n}\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\uc774 \uae00\uc740 three.js\ub97c \uc774\uc6a9\ud55c \ud6a8\uacfc\uc801\uc778 \uad11\uc6d0 \ud6a8\uacfc\ub97c \uc704\ud574 LightProbeGrid\ub97c WebGPU \ub80c\ub354\ub7ec\uc5d0\uc11c \uc0ac\uc6a9\ud560 \ub54c \ube60\ub978 \uc801\uc6a9\uc744 \uc704\ud574 \uc791\uc131\ub41c \uae00\uc785\ub2c8\ub2e4. \uba3c\uc800 \ud544\uc694\ud55c API\uc5d0 \ub300\ud55c import \ubb38\uc785\ub2c8\ub2e4. import { LightProbeGrid } from &#8216;three\/examples\/jsm\/lighting\/LightProbeGrid.js&#8217;; import { LightProbeGridHelper } from &#8216;three\/examples\/jsm\/helpers\/LightProbeGridHelper.js&#8217;; \uad00\ub828\ub41c \ud544\ub4dc\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4. private probes?: LightProbeGrid; private probesHelper?: LightProbeGridHelper; LightProbeGrid\ub294 \uc815\uc801 \uc7a5\uba74\uc5d0 \ub300\ud55c \uad11\uc6d0 \ud6a8\uacfc\uc785\ub2c8\ub2e4. \uc989, \uc7a5\uba74\uc744 \uad6c\uc6cc\uc57c &hellip; <\/p>\n<p class=\"link-more\"><a href=\"http:\/\/www.gisdeveloper.co.kr\/?p=17318\" class=\"more-link\">\ub354 \ubcf4\uae30<span class=\"screen-reader-text\"> &#8220;three.js, LightProbeGrid API \ud575\uc2ec \ucf54\ub4dc&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[145],"tags":[],"class_list":["post-17318","post","type-post","status-publish","format-standard","hentry","category-three-js"],"_links":{"self":[{"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/17318","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=17318"}],"version-history":[{"count":4,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/17318\/revisions"}],"predecessor-version":[{"id":17321,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/17318\/revisions\/17321"}],"wp:attachment":[{"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=17318"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=17318"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=17318"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}