<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>TA가 악기를 들면 타악기</title>
    <link>https://jangsung1.tistory.com/</link>
    <description>대게 기록</description>
    <language>ko</language>
    <pubDate>Mon, 6 Apr 2026 07:56:45 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>대게</managingEditor>
    <image>
      <title>TA가 악기를 들면 타악기</title>
      <url>https://tistory1.daumcdn.net/tistory/7981216/attach/867016e2693e446ab4e21cc85063a4a0</url>
      <link>https://jangsung1.tistory.com</link>
    </image>
    <item>
      <title>3-섭디벽돌타일</title>
      <link>https://jangsung1.tistory.com/24</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;3강서브스턴스디자이너01정리.png&quot; data-origin-width=&quot;4358&quot; data-origin-height=&quot;2126&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cdexjw/dJMcabQgLKf/kJ5vQwhUEaBn7oKJCAug6K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cdexjw/dJMcabQgLKf/kJ5vQwhUEaBn7oKJCAug6K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cdexjw/dJMcabQgLKf/kJ5vQwhUEaBn7oKJCAug6K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcdexjw%2FdJMcabQgLKf%2FkJ5vQwhUEaBn7oKJCAug6K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;4358&quot; height=&quot;2126&quot; data-filename=&quot;3강서브스턴스디자이너01정리.png&quot; data-origin-width=&quot;4358&quot; data-origin-height=&quot;2126&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;604&quot; data-origin-height=&quot;611&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/l8nO5/dJMcaiojPbU/wtxbRCilI8ucptpGdbua50/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/l8nO5/dJMcaiojPbU/wtxbRCilI8ucptpGdbua50/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/l8nO5/dJMcaiojPbU/wtxbRCilI8ucptpGdbua50/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fl8nO5%2FdJMcaiojPbU%2FwtxbRCilI8ucptpGdbua50%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;604&quot; height=&quot;611&quot; data-origin-width=&quot;604&quot; data-origin-height=&quot;611&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <author>대게</author>
      <guid isPermaLink="true">https://jangsung1.tistory.com/24</guid>
      <comments>https://jangsung1.tistory.com/24#entry24comment</comments>
      <pubDate>Sun, 14 Dec 2025 00:16:37 +0900</pubDate>
    </item>
    <item>
      <title>쿼드 오버드로우 테스트(251207)</title>
      <link>https://jangsung1.tistory.com/23</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;공부하다가 궁금한 부분이 생김&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bd1SYz/dJMcacInGRd/2LksGXxGAYkwHeBiyh6201/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bd1SYz/dJMcacInGRd/2LksGXxGAYkwHeBiyh6201/img.png&quot; data-origin-width=&quot;297&quot; data-origin-height=&quot;282&quot; data-is-animation=&quot;false&quot; style=&quot;width: 51.2164%; margin-right: 10px;&quot; data-widthpercent=&quot;51.82&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bd1SYz/dJMcacInGRd/2LksGXxGAYkwHeBiyh6201/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbd1SYz%2FdJMcacInGRd%2F2LksGXxGAYkwHeBiyh6201%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;297&quot; height=&quot;282&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bfrXbU/dJMcaaDMF88/uk9rsXYddZ82cvMnitv0sK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bfrXbU/dJMcaaDMF88/uk9rsXYddZ82cvMnitv0sK/img.png&quot; data-origin-width=&quot;236&quot; data-origin-height=&quot;241&quot; data-is-animation=&quot;false&quot; style=&quot;width: 47.6208%;&quot; data-widthpercent=&quot;48.18&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bfrXbU/dJMcaaDMF88/uk9rsXYddZ82cvMnitv0sK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbfrXbU%2FdJMcaaDMF88%2Fuk9rsXYddZ82cvMnitv0sK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;236&quot; height=&quot;241&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;와이어를 정리할 때 왼쪽처럼 피자모양이 되게 하지 말라는건 상식이긴 한데 실제로 어느정도의 차이가 있을지 궁금해서 테스트해봄&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;780&quot; data-origin-height=&quot;364&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/D15NE/dJMcafSDEGg/YYCKZHQGRfTMcmXkZzWNM0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/D15NE/dJMcafSDEGg/YYCKZHQGRfTMcmXkZzWNM0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/D15NE/dJMcafSDEGg/YYCKZHQGRfTMcmXkZzWNM0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FD15NE%2FdJMcafSDEGg%2FYYCKZHQGRfTMcmXkZzWNM0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;780&quot; height=&quot;364&quot; data-origin-width=&quot;780&quot; data-origin-height=&quot;364&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1657&quot; data-origin-height=&quot;697&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/q2n8X/dJMcabQemVl/aWGEbTYFmICSzJ4xVxIxwk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/q2n8X/dJMcabQemVl/aWGEbTYFmICSzJ4xVxIxwk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/q2n8X/dJMcabQemVl/aWGEbTYFmICSzJ4xVxIxwk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fq2n8X%2FdJMcabQemVl%2FaWGEbTYFmICSzJ4xVxIxwk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;808&quot; height=&quot;340&quot; data-origin-width=&quot;1657&quot; data-origin-height=&quot;697&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결론부터 말하자면 우측의 정리된 방식이 40% 더 빨랐다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음 테스트는 쿼드 오버드로우 문제만 생각했었는데 측정치가 생각보다 많이 차이나서 살펴보니 메모리 캐시의 영향이 컸다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 593px;&quot; border=&quot;1&quot; data-sheets-baot=&quot;1&quot; data-sheets-root=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;color: #1f1f1f; width: 26.5116%; text-align: center; height: 21px;&quot;&gt;&lt;b&gt;측정 항목 (Metrics)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;color: #1f1f1f; width: 11.6279%; height: 21px;&quot;&gt;&lt;b&gt;Case A (좌측)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;color: #1f1f1f; width: 13.3721%; height: 21px;&quot;&gt;&lt;b&gt;Case B (우측)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;color: #1f1f1f; width: 48.3721%; height: 21px;&quot;&gt;&lt;b&gt;비고&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;color: #1f1f1f; width: 26.5116%; text-align: center; height: 21px;&quot;&gt;GPU Time&lt;/td&gt;
&lt;td style=&quot;color: #1f1f1f; width: 11.6279%; text-align: center; height: 21px;&quot;&gt;32.58 &amp;mu;s&lt;/td&gt;
&lt;td style=&quot;color: #1f1f1f; width: 13.3721%; text-align: center; height: 21px;&quot;&gt;19.49 &amp;mu;s&lt;/td&gt;
&lt;td style=&quot;color: #1f1f1f; width: 48.3721%; height: 21px;&quot;&gt;B가 약 40% 빠름&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 26.5116%; text-align: center; height: 17px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 11.6279%; text-align: center; height: 17px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 13.3721%; text-align: center; height: 17px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 48.3721%; height: 17px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;color: #1f1f1f; width: 26.5116%; text-align: center; height: 21px;&quot;&gt;Texture L1 Bytes Read&lt;/td&gt;
&lt;td style=&quot;color: #1f1f1f; width: 11.6279%; text-align: center; height: 21px;&quot;&gt;6.56 MiB&lt;/td&gt;
&lt;td style=&quot;color: #1f1f1f; width: 13.3721%; text-align: center; height: 21px;&quot;&gt;32.36 MiB&lt;/td&gt;
&lt;td style=&quot;color: #1f1f1f; width: 48.3721%; height: 21px;&quot;&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;B의 캐시 효율이 월등히 높음&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 26.5116%; text-align: center; height: 17px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 11.6279%; text-align: center; height: 17px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 13.3721%; text-align: center; height: 17px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 48.3721%; height: 17px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;color: #1f1f1f; width: 26.5116%; text-align: center; height: 17px;&quot;&gt;Vertices&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;color: #1f1f1f; text-align: center; width: 11.6279%; height: 17px;&quot;&gt;162&lt;/td&gt;
&lt;td style=&quot;color: #1f1f1f; text-align: center; width: 13.3721%; height: 17px;&quot;&gt;156&lt;/td&gt;
&lt;td style=&quot;width: 48.3721%; height: 17px;&quot;&gt;&amp;nbsp;버텍스 수 자체도 차이남&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;color: #1f1f1f; width: 26.5116%; text-align: center; height: 17px;&quot;&gt;Vertices Reused&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;color: #1f1f1f; text-align: center; width: 11.6279%; height: 17px;&quot;&gt;64.20%&lt;/td&gt;
&lt;td style=&quot;color: #1f1f1f; text-align: center; width: 13.3721%; height: 17px;&quot;&gt;64.10%&lt;/td&gt;
&lt;td style=&quot;width: 48.3721%; height: 17px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;color: #1f1f1f; width: 26.5116%; text-align: center; height: 17px;&quot;&gt;Pixels per Vertex&lt;/td&gt;
&lt;td style=&quot;color: #1f1f1f; text-align: center; width: 11.6279%; height: 17px;&quot;&gt;4,397.79&lt;/td&gt;
&lt;td style=&quot;color: #1f1f1f; text-align: center; width: 13.3721%; height: 17px;&quot;&gt;4,554.86&lt;/td&gt;
&lt;td style=&quot;width: 48.3721%; height: 17px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 26.5116%; text-align: center; height: 17px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 11.6279%; text-align: center; height: 17px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 13.3721%; text-align: center; height: 17px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 48.3721%; height: 17px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;color: #1f1f1f; width: 26.5116%; text-align: center; height: 21px;&quot;&gt;Vertex Stage Time&lt;/td&gt;
&lt;td style=&quot;color: #1f1f1f; text-align: center; width: 11.6279%; height: 21px;&quot;&gt;9.00%&lt;/td&gt;
&lt;td style=&quot;color: #1f1f1f; text-align: center; width: 13.3721%; height: 21px;&quot;&gt;19.43%&lt;/td&gt;
&lt;td style=&quot;color: #1f1f1f; width: 48.3721%; height: 21px;&quot;&gt;
&lt;div&gt;
&lt;div&gt;전체 시간 중 차지하는 비중&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;color: #1f1f1f; width: 26.5116%; text-align: center; height: 17px;&quot;&gt;VS Invocations&lt;/td&gt;
&lt;td style=&quot;color: #1f1f1f; text-align: center; width: 11.6279%; height: 17px;&quot;&gt;58&lt;/td&gt;
&lt;td style=&quot;color: #1f1f1f; text-align: center; width: 13.3721%; height: 17px;&quot;&gt;56&lt;/td&gt;
&lt;td style=&quot;width: 48.3721%; height: 17px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;color: #1f1f1f; width: 26.5116%; text-align: center; height: 17px;&quot;&gt;VS ALU Instructions&lt;/td&gt;
&lt;td style=&quot;color: #1f1f1f; text-align: center; width: 11.6279%; height: 17px;&quot;&gt;8,960&lt;/td&gt;
&lt;td style=&quot;color: #1f1f1f; text-align: center; width: 13.3721%; height: 17px;&quot;&gt;8,704&lt;/td&gt;
&lt;td style=&quot;width: 48.3721%; height: 17px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;color: #1f1f1f; width: 26.5116%; text-align: center; height: 17px;&quot;&gt;VS ALU Inefficiency&lt;/td&gt;
&lt;td style=&quot;color: #1f1f1f; text-align: center; width: 11.6279%; height: 17px;&quot;&gt;6.34%&lt;/td&gt;
&lt;td style=&quot;color: #1f1f1f; text-align: center; width: 13.3721%; height: 17px;&quot;&gt;8.14%&lt;/td&gt;
&lt;td style=&quot;width: 48.3721%; height: 17px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 26.5116%; text-align: center; height: 17px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 11.6279%; text-align: center; height: 17px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 13.3721%; text-align: center; height: 17px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 48.3721%; height: 17px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;color: #1f1f1f; width: 26.5116%; text-align: center; height: 17px;&quot;&gt;Primitives&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;color: #1f1f1f; text-align: center; width: 11.6279%; height: 17px;&quot;&gt;54&lt;/td&gt;
&lt;td style=&quot;color: #1f1f1f; text-align: center; width: 13.3721%; height: 17px;&quot;&gt;52&lt;/td&gt;
&lt;td style=&quot;width: 48.3721%; height: 17px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 34px;&quot;&gt;
&lt;td style=&quot;color: #1f1f1f; width: 26.5116%; text-align: center; height: 34px;&quot;&gt;Primitives Culled (Back-Face)&lt;/td&gt;
&lt;td style=&quot;color: #1f1f1f; text-align: center; width: 11.6279%; height: 34px;&quot;&gt;37.04%&lt;/td&gt;
&lt;td style=&quot;color: #1f1f1f; text-align: center; width: 13.3721%; height: 34px;&quot;&gt;38.46%&lt;/td&gt;
&lt;td style=&quot;width: 48.3721%; height: 34px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;color: #1f1f1f; width: 26.5116%; text-align: center; height: 17px;&quot;&gt;Primitives Rendered&lt;/td&gt;
&lt;td style=&quot;color: #1f1f1f; text-align: center; width: 11.6279%; height: 17px;&quot;&gt;62.96%&lt;/td&gt;
&lt;td style=&quot;color: #1f1f1f; text-align: center; width: 13.3721%; height: 17px;&quot;&gt;61.54%&lt;/td&gt;
&lt;td style=&quot;width: 48.3721%; height: 17px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 26.5116%; text-align: center; height: 17px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 11.6279%; text-align: center; height: 17px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 13.3721%; text-align: center; height: 17px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 48.3721%; height: 17px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;color: #1f1f1f; width: 26.5116%; text-align: center; height: 21px;&quot;&gt;Pixels Rasterized&lt;/td&gt;
&lt;td style=&quot;color: #1f1f1f; text-align: center; width: 11.6279%; height: 21px;&quot;&gt;257,760&lt;/td&gt;
&lt;td style=&quot;color: #1f1f1f; text-align: center; width: 13.3721%; height: 21px;&quot;&gt;258,240&lt;/td&gt;
&lt;td style=&quot;color: #1f1f1f; width: 48.3721%; height: 21px;&quot;&gt;
&lt;div&gt;
&lt;div&gt;픽셀 수는 거의 동일&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;color: #1f1f1f; width: 26.5116%; text-align: center; height: 17px;&quot;&gt;Fragments / Primitive&lt;/td&gt;
&lt;td style=&quot;color: #1f1f1f; text-align: center; width: 11.6279%; height: 17px;&quot;&gt;4,773.33&lt;/td&gt;
&lt;td style=&quot;color: #1f1f1f; text-align: center; width: 13.3721%; height: 17px;&quot;&gt;4,966.15&lt;/td&gt;
&lt;td style=&quot;width: 48.3721%; height: 17px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 26.5116%; text-align: center; height: 17px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 11.6279%; text-align: center; height: 17px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 13.3721%; text-align: center; height: 17px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 48.3721%; height: 17px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;color: #1f1f1f; width: 26.5116%; text-align: center; height: 17px;&quot;&gt;Fragment Stage Time&lt;/td&gt;
&lt;td style=&quot;color: #1f1f1f; text-align: center; width: 11.6279%; height: 17px;&quot;&gt;90.99%&lt;/td&gt;
&lt;td style=&quot;color: #1f1f1f; text-align: center; width: 13.3721%; height: 17px;&quot;&gt;80.57%&lt;/td&gt;
&lt;td style=&quot;color: #1f1f1f; width: 48.3721%; height: 17px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;color: #1f1f1f; width: 26.5116%; text-align: center; height: 21px;&quot;&gt;FS Invocations&lt;/td&gt;
&lt;td style=&quot;color: #1f1f1f; text-align: center; width: 11.6279%; height: 21px;&quot;&gt;255,072&lt;/td&gt;
&lt;td style=&quot;color: #1f1f1f; text-align: center; width: 13.3721%; height: 21px;&quot;&gt;255,072&lt;/td&gt;
&lt;td style=&quot;color: #1f1f1f; width: 48.3721%; height: 21px;&quot;&gt;호출 횟수 동일&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;color: #1f1f1f; width: 26.5116%; text-align: center; height: 21px;&quot;&gt;Average Pixel Overdraw&lt;/td&gt;
&lt;td style=&quot;color: #1f1f1f; text-align: center; width: 11.6279%; height: 21px;&quot;&gt;0.1&lt;/td&gt;
&lt;td style=&quot;color: #1f1f1f; text-align: center; width: 13.3721%; height: 21px;&quot;&gt;0.1&lt;/td&gt;
&lt;td style=&quot;color: #1f1f1f; width: 48.3721%; height: 21px;&quot;&gt;
&lt;div&gt;
&lt;div&gt;오버드로우 없음&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;color: #1f1f1f; width: 26.5116%; text-align: center; height: 21px;&quot;&gt;FS ALU Instructions&lt;/td&gt;
&lt;td style=&quot;color: #1f1f1f; text-align: center; width: 11.6279%; height: 21px;&quot;&gt;58,101,760&lt;/td&gt;
&lt;td style=&quot;color: #1f1f1f; text-align: center; width: 13.3721%; height: 21px;&quot;&gt;57,877,760&lt;/td&gt;
&lt;td style=&quot;color: #1f1f1f; width: 48.3721%; height: 21px;&quot;&gt;
&lt;div&gt;
&lt;div&gt;연산량 자체는 비슷함&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;color: #1f1f1f; width: 26.5116%; text-align: center; height: 17px;&quot;&gt;FS ALU Inefficiency&lt;/td&gt;
&lt;td style=&quot;color: #1f1f1f; text-align: center; width: 11.6279%; height: 17px;&quot;&gt;2.63%&lt;/td&gt;
&lt;td style=&quot;color: #1f1f1f; text-align: center; width: 13.3721%; height: 17px;&quot;&gt;2.57%&lt;/td&gt;
&lt;td style=&quot;width: 48.3721%; height: 17px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 26.5116%; text-align: center; height: 17px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 11.6279%; text-align: center; height: 17px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 13.3721%; text-align: center; height: 17px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 48.3721%; height: 17px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;color: #1f1f1f; width: 26.5116%; text-align: center; height: 17px;&quot;&gt;Texture Accesses&lt;/td&gt;
&lt;td style=&quot;color: #1f1f1f; text-align: center; width: 11.6279%; height: 17px;&quot;&gt;944,512&lt;/td&gt;
&lt;td style=&quot;color: #1f1f1f; text-align: center; width: 13.3721%; height: 17px;&quot;&gt;935,616&lt;/td&gt;
&lt;td style=&quot;width: 48.3721%; height: 17px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 34px;&quot;&gt;
&lt;td style=&quot;color: #1f1f1f; width: 26.5116%; text-align: center; height: 34px;&quot;&gt;Mipmap Linear Sampler Calls&lt;/td&gt;
&lt;td style=&quot;color: #1f1f1f; text-align: center; width: 11.6279%; height: 34px;&quot;&gt;45.39%&lt;/td&gt;
&lt;td style=&quot;color: #1f1f1f; text-align: center; width: 13.3721%; height: 34px;&quot;&gt;45.00%&lt;/td&gt;
&lt;td style=&quot;width: 48.3721%; height: 34px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;color: #1f1f1f; width: 26.5116%; text-align: center; height: 17px;&quot;&gt;Texture Quads&lt;/td&gt;
&lt;td style=&quot;color: #1f1f1f; text-align: center; width: 11.6279%; height: 17px;&quot;&gt;235,968&lt;/td&gt;
&lt;td style=&quot;color: #1f1f1f; text-align: center; width: 13.3721%; height: 17px;&quot;&gt;233,856&lt;/td&gt;
&lt;td style=&quot;width: 48.3721%; height: 17px;&quot;&gt;2000정도 차이남&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;color: #1f1f1f; width: 26.5116%; text-align: center; height: 17px;&quot;&gt;Total Resolved Pixels&lt;/td&gt;
&lt;td style=&quot;color: #1f1f1f; text-align: center; width: 11.6279%; height: 17px;&quot;&gt;292,848&lt;/td&gt;
&lt;td style=&quot;color: #1f1f1f; text-align: center; width: 13.3721%; height: 17px;&quot;&gt;291,828&lt;/td&gt;
&lt;td style=&quot;width: 48.3721%; height: 17px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;피자처럼 정리한 경우보다 사각형으로 정리한 경우가 L1 캐시 효율이 훨씬 높았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;애초에 생각했던 쿼드 오버드로우를 나타내는 지표는 Texture Quades일텐데 막상 여기서 차이는 2000정도밖에 안 났다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Texture Quades는 GPU가 텍스쳐를 샘플링할 때 사용하는 최소 작업단위인 2x2 픽셀블록을 의미한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;고작 이정도 더 그리는 것 보단 L1캐시 문제가 더 지배적인 영향인 것 같아서 좀 더 찾아봤다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자료 참고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://pixeljetstream.blogspot.com/2015/02/life-of-triangle-nvidias-logical.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://pixeljetstream.blogspot.com/2015/02/life-of-triangle-nvidias-logical.html&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1765046170523&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Life of a triangle - NVIDIA's logical pipeline&quot; data-og-description=&quot;Hi, while gathering public material on how the hardware works, I tried to create a compressed architecture image. It is based on images and ...&quot; data-og-host=&quot;pixeljetstream.blogspot.com&quot; data-og-source-url=&quot;https://pixeljetstream.blogspot.com/2015/02/life-of-triangle-nvidias-logical.html&quot; data-og-url=&quot;https://pixeljetstream.blogspot.com/2015/02/life-of-triangle-nvidias-logical.html&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cVAtGq/hyZOJcLTLB/MJWEoxMuhVHWVrdwXGGxl1/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/twRzs/hyZOMUSVWO/FrKh2revkOSLIGvzh6Pvm0/img.png?width=1500&amp;amp;height=1627&amp;amp;face=0_0_1500_1627,https://scrap.kakaocdn.net/dn/jE7h6/hyZOB6R4Ga/OvrruqStIVZonbHBW58vuK/img.png?width=578&amp;amp;height=1000&amp;amp;face=0_0_578_1000&quot;&gt;&lt;a href=&quot;https://pixeljetstream.blogspot.com/2015/02/life-of-triangle-nvidias-logical.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://pixeljetstream.blogspot.com/2015/02/life-of-triangle-nvidias-logical.html&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cVAtGq/hyZOJcLTLB/MJWEoxMuhVHWVrdwXGGxl1/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/twRzs/hyZOMUSVWO/FrKh2revkOSLIGvzh6Pvm0/img.png?width=1500&amp;amp;height=1627&amp;amp;face=0_0_1500_1627,https://scrap.kakaocdn.net/dn/jE7h6/hyZOB6R4Ga/OvrruqStIVZonbHBW58vuK/img.png?width=578&amp;amp;height=1000&amp;amp;face=0_0_578_1000');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Life of a triangle - NVIDIA's logical pipeline&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Hi, while gathering public material on how the hardware works, I tried to create a compressed architecture image. It is based on images and ...&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;pixeljetstream.blogspot.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;br /&gt;Again we batch up 32 pixel threads, or better say 8 times 2x2 pixel quads, which is the smallest unit we will always work with in pixel shaders. This 2x2 quad allows us to calculate derivatives for things like texture mip map filtering (big change in texture coordinates within quad causes higher mip). Those threads within the 2x2 quad whose sample locations are not actually covering the triangle, are masked out (gl_HelperInvocation). One of the local SM's warp scheduler will manage the pixel-shading task.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The same warp scheduler instruction game, that we had in the vertex-shader logical stage, is now performed on the pixel-shader threads. The lock-step processing is particularly handy because we can access the values within a pixel quad almost for free, as all threads are guaranteed to have their data computed up to the same instruction point&amp;nbsp;(NV_shader_thread_group).&lt;br /&gt;&lt;br /&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 글의 13,14번 문단을 보면 이 메모리에 대한 내용이 나온다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;GPU가 동작하는 단위를 살펴보면 2x2 픽셀 쿼드 8개가 묶여있는 구조&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;-&amp;gt; 즉, 픽셀 셰이더에서 동작하는 최소 단위는 2x2 픽셀(4픽셀)인 것을 알 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 4개의 픽셀을 묶어서 동작하는 이유는 미분값(Derivative)을 계산하기 위해서인데, 밉맵을 고르려면 텍스쳐좌표가 얼마나 급격하게 변하는 지 알 수 있어야하고 이를 위해 인접한 4개의 픽셀 값을 비교해야한다. (쿼드 내에서 텍스쳐 좌표의 변화량이 크면 멀리있거나 기울어진 면이라는 뜻이기 때문에 흐릿한(높은)밉맵을 사용하게 된다. )&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;14번 문단으로 넘어가서, 우측 경우처럼 인접한 정보끼리 잘 정리되어 있으면 실행 시점이 같을 때 픽셀 쿼드 내의 정보는 거의 무료로 접근 가능하기 때문에 효율적인데 피자모양처럼 정리한 경우는 삼각형들이 한 점으로 모이면서 uv좌표가 널뛰고 이런 부분에서 캐시 미스가 많이 발생하면서 그리는 픽셀의 양이 비슷한데도 시간이 더 걸리는 것으로 보인다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Texture Quades 얘기도 이 부분에 있다.&amp;nbsp; 실제 삼각형에 걸치지 않더라도 최소단위인 4개의 픽셀은 같이 계산되고 이때 남은 부분은 마스킹된다. 즉 4개를 돌려서 4개 다 사용하지 않고 버리는 낭비가 생긴다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #006dd7; font-family: 'Noto Serif KR';&quot;&gt;uv배치 때문에 그런 것 같은데 그럼 두 경우 다 uv를 정면에서 프로젝션한 것 처럼 펴두고 정면에서 찍으면 이런 차이가 줄어들까? 와이어 정리에 따른 부하 차이가 어느정도인건지 모르겠다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>놀이터</category>
      <author>대게</author>
      <guid isPermaLink="true">https://jangsung1.tistory.com/23</guid>
      <comments>https://jangsung1.tistory.com/23#entry23comment</comments>
      <pubDate>Sun, 7 Dec 2025 04:12:46 +0900</pubDate>
    </item>
    <item>
      <title>0930까지 기록</title>
      <link>https://jangsung1.tistory.com/22</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-host=&quot;kakaotv&quot; data-video-url=&quot;https://tv.kakao.com/v/458321819&quot; data-video-thumbnail=&quot;https://blog.kakaocdn.net/dna/wOVbN/hyZJ1MfJaJ/AAAAAAAAAAAAAAAAAAAAAEnLmrirJRvqYYXt9UOTnrEPIcB-vw2VeqagppUCnrTF/img.jpg?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&amp;amp;expires=1761922799&amp;amp;allow_ip=&amp;amp;allow_referer=&amp;amp;signature=Y6nZMzxPjcVHOlng8OFl0CHddDs%3D&quot; data-video-width=&quot;860&quot; data-video-height=&quot;484&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;484&quot; data-video-play-service=&quot;daum_tistory&quot; data-video-title=&quot;'TA가 악기를 들면 타악기'에서 업로드한 동영상&quot;&gt;&lt;iframe src=&quot;https://play-tv.kakao.com/embed/player/cliplink/458321819?service=daum_tistory&quot; frameborder=&quot;0&quot; allowfullscreen=&quot;true&quot; width=&quot;860&quot; height=&quot;484&quot;&gt;&lt;/iframe&gt;&lt;figcaption&gt;오브젝트들 서로 색 다르게 생성하기&lt;/figcaption&gt;&lt;/figure&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-host=&quot;kakaotv&quot; data-video-url=&quot;https://tv.kakao.com/v/458321824&quot; data-video-thumbnail=&quot;https://blog.kakaocdn.net/dna/bVbbMl/hyZKx3PzV1/AAAAAAAAAAAAAAAAAAAAAM1DWUU0dIIsShGy37B0Mux17hyXmFBGSgWtiCnFHDYP/img.jpg?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&amp;amp;expires=1761922799&amp;amp;allow_ip=&amp;amp;allow_referer=&amp;amp;signature=lCDiiTvsCAMRtP2ya3Y%2FAWyb8jo%3D&quot; data-video-width=&quot;860&quot; data-video-height=&quot;484&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;484&quot; data-video-play-service=&quot;daum_tistory&quot; data-video-title=&quot;'TA가 악기를 들면 타악기'에서 업로드한 동영상&quot;&gt;&lt;iframe src=&quot;https://play-tv.kakao.com/embed/player/cliplink/458321824?service=daum_tistory&quot; frameborder=&quot;0&quot; allowfullscreen=&quot;true&quot; width=&quot;860&quot; height=&quot;484&quot;&gt;&lt;/iframe&gt;&lt;figcaption&gt;씬에 있는 오브젝트들을 5개씩 복제하기. 이때 색이 점점 연해지게 지정하기 / 씬에 있는 오브젝트들을 알아서 보기좋게 정리하기.&lt;/figcaption&gt;&lt;/figure&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;br&gt;9월 30일&lt;/p&gt;&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-host=&quot;kakaotv&quot; data-video-url=&quot;https://tv.kakao.com/v/458321831&quot; data-video-thumbnail=&quot;https://blog.kakaocdn.net/dna/CkgiZ/hyZJ66xWTt/AAAAAAAAAAAAAAAAAAAAAAV5-6Tb9nw5Fn4IafcuCMXbUYtCHm_R1ar7fNvuNuTS/img.jpg?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&amp;amp;expires=1761922799&amp;amp;allow_ip=&amp;amp;allow_referer=&amp;amp;signature=y1wBNhmD%2Fzr6vm4Cfc2NjRa3%2FlU%3D&quot; data-video-width=&quot;860&quot; data-video-height=&quot;484&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;484&quot; data-video-play-service=&quot;daum_tistory&quot; data-video-title=&quot;'TA가 악기를 들면 타악기'에서 업로드한 동영상&quot;&gt;&lt;iframe src=&quot;https://play-tv.kakao.com/embed/player/cliplink/458321831?service=daum_tistory&quot; frameborder=&quot;0&quot; allowfullscreen=&quot;true&quot; width=&quot;860&quot; height=&quot;484&quot;&gt;&lt;/iframe&gt;&lt;figcaption&gt;ai로 생성한 스크립트를 MaxUICustom 툴의 모듈 폴더에 복사하는 기능&lt;/figcaption&gt;&lt;/figure&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;h3 data-ke-size=&quot;size23&quot;&gt;앞으로 할 일&lt;/h3&gt;&lt;h4 data-ke-size=&quot;size20&quot;&gt;[ai 사용 준비]&lt;/h4&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;- 프롬포트에서 1차적으로&lt;b&gt; 필요한 씬 데이터 종류&lt;/b&gt; 추출하는 기능&lt;br&gt;- 추출한 데이터 종류를 사용해 프롬포트에 넘길 &lt;b&gt;데이터 만드는 기능&lt;/b&gt;&lt;br&gt;- 씬 데이터 &lt;b&gt;추출하는 방법 함수&lt;/b&gt; 데이터베이스 구축&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;h4 data-ke-size=&quot;size20&quot;&gt;[ai 생성]&lt;/h4&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;- 스크립트 구성할 &lt;b&gt;함수 데이터베이스&lt;/b&gt; 구축&lt;br&gt;- 스크립트&lt;b&gt; 생성 규칙&lt;/b&gt; 구성&lt;br&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;h4 data-ke-size=&quot;size20&quot;&gt;[모듈화]&lt;/h4&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;- 생성한 스크립트를 &lt;b&gt;모듈화&lt;/b&gt; 하는 방법&lt;/p&gt;&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;&lt;li&gt;창 관련 코드 정리(제거) 필요&lt;/li&gt;&lt;li&gt;&lt;b&gt;UI&amp;nbsp; 구성&lt;/b&gt; 관련 연구&lt;/li&gt;&lt;li&gt;&lt;b&gt;input,output, ai&lt;/b&gt;를 이용하는 로직에 대한 장치와 가이드 제공&lt;/li&gt;&lt;/ul&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;- 파일명 자동 생성&lt;br&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>AI</category>
      <author>대게</author>
      <guid isPermaLink="true">https://jangsung1.tistory.com/22</guid>
      <comments>https://jangsung1.tistory.com/22#entry22comment</comments>
      <pubDate>Wed, 1 Oct 2025 00:03:54 +0900</pubDate>
    </item>
    <item>
      <title>0.ai 시작하기</title>
      <link>https://jangsung1.tistory.com/21</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;0. ai 시작하기&lt;/b&gt;&lt;/h2&gt;
&lt;div&gt;Sunday, August 17, 2025 at 2:01 PM&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;&lt;b&gt;LLM(Large&amp;nbsp;Language&amp;nbsp;Model)&amp;nbsp;개요&lt;/b&gt; &lt;br /&gt;정의 &lt;br /&gt;LLM의&amp;nbsp;동작&amp;nbsp;원리&amp;nbsp;개요&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;b&gt;LLM&amp;nbsp;동작&amp;nbsp;원리&amp;nbsp;세부&amp;nbsp;과정&lt;/b&gt; &lt;br /&gt;2.1&amp;nbsp;Tokenizing&amp;nbsp;(토큰화) &lt;br /&gt;2.2&amp;nbsp;Embedding&amp;nbsp;(임베딩) &lt;br /&gt;2.3&amp;nbsp;신경망&amp;nbsp;처리&amp;nbsp;(Transformer) &lt;br /&gt;2.4&amp;nbsp;텍스트&amp;nbsp;생성&amp;nbsp;(Generation)&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;b&gt;언어모델은&amp;nbsp;어떻게&amp;nbsp;기능을&amp;nbsp;수행하는가?&lt;/b&gt; &lt;br /&gt;기본&amp;nbsp;기능:&amp;nbsp;텍스트&amp;nbsp;이해&amp;middot;생성 &lt;br /&gt;Tool과의&amp;nbsp;상호작용&amp;nbsp;예시&amp;nbsp;(날씨&amp;nbsp;API&amp;nbsp;사례)&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;b&gt;MCP&amp;nbsp;(Model&amp;nbsp;Context&amp;nbsp;Protocol)&lt;/b&gt; &lt;br /&gt;정의 &lt;br /&gt;역할&amp;nbsp;및&amp;nbsp;특징&lt;/div&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;br /&gt;&lt;b&gt;RAG&amp;nbsp;(Retrieval&amp;nbsp;Augmented&amp;nbsp;Generation)&lt;/b&gt; &lt;br /&gt;정의&amp;nbsp; &lt;br /&gt;&quot;검색&quot;에&amp;nbsp;대한&amp;nbsp;오해와&amp;nbsp;정확한&amp;nbsp;의미 &lt;br /&gt;RAG의&amp;nbsp;동작&amp;nbsp;과정 &lt;br /&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;Query&amp;nbsp;입력 &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;Query&amp;nbsp;벡터화 &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;Retrieval&amp;nbsp;(외부&amp;nbsp;데이터&amp;nbsp;검색) &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;Context&amp;nbsp;보강 &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;응답&amp;nbsp;생성&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;&lt;br /&gt;&lt;b&gt;예시:&amp;nbsp;&quot;서울&amp;nbsp;날씨&quot;&amp;nbsp;&lt;/b&gt; &lt;br /&gt;총정리&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/div&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h1&gt;LLM(Large Language Model)&lt;/h1&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&amp;nbsp;LLM은&amp;nbsp;인간의 언어나 데이터들을 해석할 수 있을 만큼 방대한 데이터를 학습한 인공지능 모델이다.&amp;nbsp;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;div&gt;LLM(Large Language Model)은 대규모 데이터를 학습해 언어를 이해하고 생성하는 AI 모델 자체를 뜻한다.&lt;br /&gt;ChatGPT 같은 서비스는 LLM을 활용해 만들어진 응용 프로그램이다.&lt;/div&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;LLM의 동작 원리 개요&lt;/b&gt;&lt;/h3&gt;
&lt;div&gt;1.&amp;nbsp;&lt;b&gt;토큰화(Tokenizing):&amp;nbsp;&lt;/b&gt;입력 문장을 토큰 단위로 나눔&lt;/div&gt;
&lt;div&gt;&lt;b&gt;2. 벡터화(Embedding):&lt;/b&gt;&amp;nbsp;각 토큰을 수치 벡터로 변환&lt;/div&gt;
&lt;div&gt;&lt;b&gt;3. 신경망 처리:&amp;nbsp;&lt;/b&gt;Transformer 구조로 문맥을 이해하고 다음 토큰의 확률 계산&lt;/div&gt;
&lt;div&gt;&lt;b&gt;4. 텍스트 생성:&amp;nbsp;&lt;/b&gt;확률이 높은 토큰을 순서대로 선택해 문장 완성&lt;/div&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1. Tokenizing&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;190&quot; data-origin-height=&quot;61&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/96Pr6/btsPVYKUH3w/mGPfwuKksFp4IV2M2LC1Vk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/96Pr6/btsPVYKUH3w/mGPfwuKksFp4IV2M2LC1Vk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/96Pr6/btsPVYKUH3w/mGPfwuKksFp4IV2M2LC1Vk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F96Pr6%2FbtsPVYKUH3w%2FmGPfwuKksFp4IV2M2LC1Vk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;190&quot; height=&quot;61&quot; data-origin-width=&quot;190&quot; data-origin-height=&quot;61&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;div&gt;:Tokenizing은&amp;nbsp;&lt;b&gt;문자열&lt;/b&gt;(문장,코드,데이터 등)을&amp;nbsp;&lt;b&gt;더 작은 단위(token)으로 쪼개는 과정&lt;/b&gt;을 의미한다.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Token : 의미를 가지는 최소 단위&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;clean&quot;&gt;&lt;code&gt;&quot;사과, 바나나, 포도&quot;
-&amp;gt; [&quot;사과&quot;, &quot;바나나&quot;, &quot;포도&quot;]

&quot;파스타 먹자&quot;
-&amp;gt; [&quot;파스타&quot;, &quot;먹&quot;, &quot;자&quot;]&lt;/code&gt;&lt;/pre&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;인간이 쓰는 자연어를 컴퓨터가 처리하기 위해 컴퓨터가 이해할 수 있는&amp;nbsp; 구조로 변환해야한다.&lt;/div&gt;
&lt;div&gt;이런 입력된 텍스트(자연어)를 모델에서 처리할 수 있는 데이터로 변환하기 위해&amp;nbsp;&lt;b&gt;작은 단위로 쪼개는 과정을 토큰화&lt;/b&gt;라고 한다.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;717&quot; data-origin-height=&quot;707&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dLsunC/btsPUj3FSmn/zoQDlfxcc6v3JvyXyajkZ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dLsunC/btsPUj3FSmn/zoQDlfxcc6v3JvyXyajkZ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dLsunC/btsPUj3FSmn/zoQDlfxcc6v3JvyXyajkZ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdLsunC%2FbtsPUj3FSmn%2FzoQDlfxcc6v3JvyXyajkZ0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;717&quot; height=&quot;707&quot; data-origin-width=&quot;717&quot; data-origin-height=&quot;707&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;div&gt;이런 토큰화되는 방식을 볼 수 있는 사이트가 있다&amp;nbsp;&lt;a href=&quot;https://platform.openai.com/tokenizer&quot;&gt;https://platform.openai.com/tokenizer&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2. Embedding&amp;nbsp;: 각 토큰을 수치 벡터로 변환한다&lt;/b&gt;&lt;/h2&gt;
&lt;div&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;374&quot; data-origin-height=&quot;86&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bf2fW4/btsPSQgN0Hm/izBa7ywxPrR1qThR8sbXkk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bf2fW4/btsPSQgN0Hm/izBa7ywxPrR1qThR8sbXkk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bf2fW4/btsPSQgN0Hm/izBa7ywxPrR1qThR8sbXkk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbf2fW4%2FbtsPSQgN0Hm%2FizBa7ywxPrR1qThR8sbXkk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;374&quot; height=&quot;86&quot; data-origin-width=&quot;374&quot; data-origin-height=&quot;86&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;379&quot; data-origin-height=&quot;118&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bFbrsa/btsPTSrtmIe/h55kIpAGu0Uk8WxF7T8MoK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bFbrsa/btsPTSrtmIe/h55kIpAGu0Uk8WxF7T8MoK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bFbrsa/btsPTSrtmIe/h55kIpAGu0Uk8WxF7T8MoK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbFbrsa%2FbtsPTSrtmIe%2Fh55kIpAGu0Uk8WxF7T8MoK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;379&quot; height=&quot;118&quot; data-origin-width=&quot;379&quot; data-origin-height=&quot;118&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;우리가 글로 쓰는 텍스트, char문자 형식도 컴퓨터는 결국 숫자로 받아들이기 때문에&amp;nbsp;&amp;nbsp;&amp;nbsp;토큰을 컴퓨터가 직접 이해할 수는 없다.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;예를들어 &quot;사과, 바나나, 포도&quot;라는 문장이 있다. 이를 컴퓨터에게 입력한다고 생각해보자.&lt;/div&gt;
&lt;div&gt;가장 쉽게 생각할 수 있는 방법은 ',' 단위로 끊어 세 문자열을 받아들이는 것이다.&lt;/div&gt;
&lt;pre class=&quot;makefile&quot;&gt;&lt;code&gt;&quot;사과, 바나나, 포도&quot;
-&amp;gt; [&quot;사과&quot;, &quot;바나나&quot;, &quot;포도&quot;]

사과: 0
바나나: 1
포도: 2&lt;/code&gt;&lt;/pre&gt;
&lt;div&gt;그럼 컴퓨터는 각 단어들의 인덱스로 이들을 구분할 수 있다.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;그럼 이제 이 단어가 매우 많아지고 그 의미가 필요한 경우를 생각해보자.&lt;/div&gt;
&lt;pre class=&quot;lsl&quot;&gt;&lt;code&gt;&quot;사과, 바나나, 포도, 오렌지, 자동차, 자전거, 오토바이, 비행기, 헬리콥터, 과일 , 식칼&quot;
  1      2      3      4       5       6       7       8       9      10     11&lt;/code&gt;&lt;/pre&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;우리는 사과, 바나나, 포도, 오렌지가 과일이란 것과 과일을 손질할 때 식칼을 쓴다는 것을 생각할 수 있다.&lt;/div&gt;
&lt;div&gt;하지만 컴퓨터는 1,2,3,4가 10과 관련이 있다는 것과 11(식칼)이 1(사과)과 관련있다는 것을 알 수 없다.&lt;/div&gt;
&lt;div&gt;단순히 숫자로 표현하는 방식으로는 컴퓨터가 데이터를 정리할 수는 있어도 그 단어들의 의미를 이해할 수는 없다.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;그래서&amp;nbsp;&lt;b&gt;단어들간의 관계성&lt;/b&gt;을 표현하기 위해&amp;nbsp;&lt;b&gt;차원을 늘린다.&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;858&quot; data-origin-height=&quot;601&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DcWzm/btsPWgxM6C8/hfLbz4UkCKIpHSqoRvsJ8k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DcWzm/btsPWgxM6C8/hfLbz4UkCKIpHSqoRvsJ8k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DcWzm/btsPWgxM6C8/hfLbz4UkCKIpHSqoRvsJ8k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDcWzm%2FbtsPWgxM6C8%2FhfLbz4UkCKIpHSqoRvsJ8k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;538&quot; height=&quot;601&quot; data-origin-width=&quot;858&quot; data-origin-height=&quot;601&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;div&gt;대충 이런 식으로 각 단어들의 관계성을 따라 배치하면 각 단어들 사이의 거리를 구할 수 있다.&lt;/div&gt;
&lt;div&gt;자동차와 사과의 거리보다 식칼과 사과의 거리가 짧다. -&amp;gt; 즉 식칼이 자동차보다 사과와 더 관련이 있다는 것을 알 수 있다.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;이렇게 단어를&amp;nbsp;&lt;b&gt;고차원 공간에 배치해 의미적 유사성을 벡터 거리로 표현&lt;/b&gt;해&amp;nbsp;&lt;b&gt;컴퓨터가 이해할 수 있게 숫자로 변환&lt;/b&gt;하는데 이 과정을&lt;b&gt;&amp;nbsp;Embedding&lt;/b&gt;이라고 한다.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;당연히 이정도 2차원 수준이 아닌 768차원, 1572차원, 그 이상의 고차원으로 표현하여 거리로 구분한다.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;background-color: #000000; color: #757575;&quot;&gt;3.신경망 처리와 4.텍스트 생성은 안 배웠다.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;background-color: #000000; color: #757575;&quot;&gt;대충 2의 결과를 통해 가까운 관계인 단어들을 연결짓고 다시 자연어로 텍스트를 생성한다는 뜻인 것 같다..&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;3. 언어모델은 어떻게 기능을 수행하는가?&amp;nbsp;&lt;/b&gt;&lt;/h2&gt;
&lt;div&gt;위에서 계속 말했듯 LLM자체는 텍스트를 이해하고 분석하는 일을 한다.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;이 자체로도 언어모델은 질문에 답하거나, 글을 쓰거나, 번역하는 것이 가능하다.&lt;/div&gt;
&lt;div&gt;그런데 우리가 흔히 사용하는 요즘의 ai들을 보면 사용자의 요청에 따라 검색, 이미지 생성, 코드 생성, 데이터 분석 등&amp;nbsp;&amp;nbsp;&lt;b&gt;&quot;언어&quot;의 범위나 학습된 범위를 벗어난 다양한 &quot;기능&quot;도 수행&lt;/b&gt;한다.&lt;/div&gt;
&lt;div&gt;이는 언어모델이 다른&amp;nbsp;&lt;b&gt;도구(tool)과 상호작용&lt;/b&gt;해서 수행한다.&lt;/div&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;사용자: 오늘 날씨 어때?
-&amp;gt; &quot;현재 날씨 정보에는 접근할 수 없지만 일반적으로 여름에는 덥고 습합니다&quot;

사용자: 오늘 날씨 어때?
-&amp;gt; LLM이 파악: 사용자의 의도는 오늘의 날씨를 아는 것
-&amp;gt; tool 사용: 날씨 API 호출
-&amp;gt; 결과 종합: 응답 생성
-&amp;gt; 응답: &quot; 현재 서울은 30도이며, 날씨는 맑습니다&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;내가 공부할 부분이 이거!&lt;/div&gt;
&lt;div&gt;즉,&amp;nbsp;&lt;b&gt;언어모델에 내가 필요한 도구를 제공&lt;/b&gt;하면 더 다양한 활용이 가능해진다.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;앞에서 LLM에 대해 간단하게 살펴봤다면 이제부터는 그걸 어떻게 활용할지에 대해 살펴보자.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;4. MCP(Model Context Protocol)&lt;/h2&gt;
&lt;div&gt;MCP는 애플리케이션이 LLM에 컨텐스트를 제공하는 방법을 표준화하는 개방형 프로토콜이다.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;MCP는 LLM이 외부 도구, 서비스, 데이터 소스에 일관된 방식으로 접근할 수 있게 해준다&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;MCP 개념:&lt;/b&gt;&amp;nbsp;모델이 외부&amp;nbsp;&lt;b&gt;리소스/도구&lt;/b&gt;를 표준 방식으로 호출하고,&amp;nbsp;&lt;b&gt;클라이언트가 실행&lt;/b&gt;해서 결과를 모델 컨텍스트에 다시&amp;nbsp;&lt;b&gt;주입&lt;/b&gt;하는 상호작용 규약.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;이 부분은 추후 직접 해보면서 따로 정리하겠다.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;5. RAG( Retrieval Augmented Generation )&lt;/b&gt;&lt;/h2&gt;
&lt;div&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;387&quot; data-origin-height=&quot;109&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bNsGP2/btsPWp9f1LK/dGnA96MdUpjCBpprEwAHdK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bNsGP2/btsPWp9f1LK/dGnA96MdUpjCBpprEwAHdK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bNsGP2/btsPWp9f1LK/dGnA96MdUpjCBpprEwAHdK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbNsGP2%2FbtsPWp9f1LK%2FdGnA96MdUpjCBpprEwAHdK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;387&quot; height=&quot;109&quot; data-origin-width=&quot;387&quot; data-origin-height=&quot;109&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;270&quot; data-origin-height=&quot;72&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cx0G4d/btsPTVvcUpH/nKcnGkIpkaowbFmBQhSHc0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cx0G4d/btsPTVvcUpH/nKcnGkIpkaowbFmBQhSHc0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cx0G4d/btsPTVvcUpH/nKcnGkIpkaowbFmBQhSHc0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcx0G4d%2FbtsPTVvcUpH%2FnKcnGkIpkaowbFmBQhSHc0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;270&quot; height=&quot;72&quot; data-origin-width=&quot;270&quot; data-origin-height=&quot;72&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;324&quot; data-origin-height=&quot;76&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/M1geT/btsPVzLoZSt/wphmBii2sg9Pxbd6kkqwp1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/M1geT/btsPVzLoZSt/wphmBii2sg9Pxbd6kkqwp1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/M1geT/btsPVzLoZSt/wphmBii2sg9Pxbd6kkqwp1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FM1geT%2FbtsPVzLoZSt%2FwphmBii2sg9Pxbd6kkqwp1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;324&quot; height=&quot;76&quot; data-origin-width=&quot;324&quot; data-origin-height=&quot;76&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;RAG에 대한 설명을 여기저기서 가져와봤다.&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;외부 소스에서 가져온 정보&lt;/b&gt;로 생성형 AI모델의 정확성과 신뢰성을 향상시키는 기술&lt;/li&gt;
&lt;li&gt;대규모 언어 모델(LLM)의 출력을 최적화하여 응답을 생성하기 전에&amp;nbsp;&lt;b&gt;학습 데이터 소스 외부의 신뢰할 수 있는 지식 베이스&lt;/b&gt;를 참조하도록 하는 프로세스 기술&lt;/li&gt;
&lt;li&gt;대규모 언어 모델(LLM)에서 질문에 대한 답변이나 텍스트를 생성하기 전에&amp;nbsp;&lt;b&gt;광범위한 문서 집합에서 관련 정보&lt;/b&gt;를 검색하고, 이를 이용하여 응답을 생성하는 방법&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;blockquote style=&quot;background-color: #fedede; color: #1a1a1a;&quot; data-ke-style=&quot;style1&quot;&gt;&lt;b&gt;&amp;emsp;&amp;emsp; &quot;생성형 AI가 답을 만들기 전에 관련 자료를 검색(retrieval)하여 이를 참고한 후 답변을 생성(generation)하는 방식&quot;&lt;/b&gt;&lt;/blockquote&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;한국에서&amp;nbsp;&lt;b&gt;검색 기반 생성(검색 증강 생성)&lt;/b&gt;이라고 번역한 자료가 많다.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;검색이라는 단어 때문에 구글&amp;nbsp; 검색창 같은 곳에서 검색을 한다고 생각하기 쉬운데 여기서의 &quot;검색&quot;은 단순히 구글 검색창에서 찾는 것이 아니라&amp;nbsp;&lt;b&gt;벡터DB나 API 같은 데이터 소스에서 유의미한 정보를 가져오는 과정&lt;/b&gt;에 가깝다.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;RAG는 개념적으로는 &quot;검색 기반 응답 생성&quot;이라는 방법론을 뜻한다.&lt;br /&gt;기술적으로는 벡터DB 같은 저장소와 Retrieval 모듈을 함께 지칭하는 경우도 있고, 이를 통째로 RAG라고 부르기도 한다.&lt;/div&gt;
&lt;div&gt;작게 생각하는 게 이해하기는 편한듯?&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;간단하게 이 동작 방식을 살펴보면&amp;nbsp;&lt;/div&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;
&lt;div&gt;&lt;b&gt;Query 입력&lt;/b&gt;&lt;br /&gt;사용자가 질문(Query)을 입력한다.&lt;br /&gt;이때 단순히 텍스트만 모델에 들어가는 것이 아니라,&lt;br /&gt;시스템 메시지, 대화 이력(context), 지시문 등이 합쳐져&amp;nbsp;&lt;b&gt;Prompt&lt;/b&gt;라는 형태가 된다.&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Query 벡터화 (입력 코딩)&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;사용자의 입력은 임베딩 모델을 거쳐 숫자 벡터로 변환된다.&lt;br /&gt;이 벡터는 검색을 위한 키(key) 역할을 한다.&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;&lt;b&gt;Retrieval (외부 데이터 검색)&lt;/b&gt;&lt;br /&gt;변환된 벡터를 기반으로&amp;nbsp;&lt;b&gt;벡터DB&lt;/b&gt;나&amp;nbsp;&lt;b&gt;외부 API&lt;/b&gt;에서 관련 정보를 검색한다.&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;&lt;b&gt;Context 보강&lt;/b&gt;&lt;br /&gt;검색된 정보를 Prompt에 추가해 LLM이 참고할 수 있도록 한다.&lt;br /&gt;&amp;rarr; 즉, 원래의 사용자 질문 + 검색된 자료가 하나의 새로운 Prompt가 된다.&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;&lt;b&gt;Generation (응답 생성)&lt;/b&gt;&lt;br /&gt;보강된 Prompt를 기반으로 LLM이 자연스러운 답변을 생성한다.&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;LLM은 인간의 언어나 기타 복잡한 데이터를 인식하고 해석할 수 있을 만큼 충분한 예제를 제공받은 컴퓨터 프로그램이다.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;하지만 당연히 이 세상의 모든 데이터를 가지고 있을 수는 없다. 이런 한계를 보완하기 위해 추가적인 데이터베이스(벡터DB)를 붙이는데 이걸 RAG라고 볼 수 있다.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h1&gt;6. 예시&lt;/h1&gt;
&lt;div&gt;아래의 짧은 대화를 예시로 분석해보자.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;665&quot; data-origin-height=&quot;174&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bJpWNE/btsPTDVzG9o/PxvHmG8y6DzxqPvwVckzj1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bJpWNE/btsPTDVzG9o/PxvHmG8y6DzxqPvwVckzj1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bJpWNE/btsPTDVzG9o/PxvHmG8y6DzxqPvwVckzj1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbJpWNE%2FbtsPTDVzG9o%2FPxvHmG8y6DzxqPvwVckzj1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;478&quot; height=&quot;174&quot; data-origin-width=&quot;665&quot; data-origin-height=&quot;174&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;div&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;662&quot; data-origin-height=&quot;1164&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/On3W1/btsPWkNI1BI/O2GKEawkVnY73dOkjaZFN1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/On3W1/btsPWkNI1BI/O2GKEawkVnY73dOkjaZFN1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/On3W1/btsPWkNI1BI/O2GKEawkVnY73dOkjaZFN1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOn3W1%2FbtsPWkNI1BI%2FO2GKEawkVnY73dOkjaZFN1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;662&quot; height=&quot;1164&quot; data-origin-width=&quot;662&quot; data-origin-height=&quot;1164&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1. 사용자의 Query 입력&lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;사용자 입력&lt;/h3&gt;
&lt;div&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;152&quot; data-origin-height=&quot;60&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/9D8Wc/btsPTWubdje/8jgsMEat0VpiSW0Y55D68K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/9D8Wc/btsPTWubdje/8jgsMEat0VpiSW0Y55D68K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/9D8Wc/btsPTWubdje/8jgsMEat0VpiSW0Y55D68K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F9D8Wc%2FbtsPTWubdje%2F8jgsMEat0VpiSW0Y55D68K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;152&quot; height=&quot;60&quot; data-origin-width=&quot;152&quot; data-origin-height=&quot;60&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;div&gt;&amp;ldquo;서울 날씨&amp;rdquo;라는 채팅을 쳤다. 이는 Query가 된다.&lt;/div&gt;
&lt;div&gt;하지만 이는 LLM이 이해할 수 있도록&amp;nbsp; 시스템 메시지, context, 지시문과 합쳐서 Prompt로 만들어진다.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;prompt로 확장된 형태&lt;/h3&gt;
&lt;pre class=&quot;makefile&quot;&gt;&lt;code&gt;시스템: 너는 친절한 대화형 비서야. 
context: 사용자가 내일 한강에 놀러갈 계획이라고 말함. 
사용자: 서울 날씨&lt;/code&gt;&lt;/pre&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2. query 벡터화(입력 코딩)&lt;/b&gt;&lt;/h2&gt;
&lt;div&gt;&amp;ldquo;서울 날씨&amp;rdquo;라는 텍스트는 임베딩 모델을 통해 숫자벡터로 변환된다.&lt;/div&gt;
&lt;div&gt;서울, 날씨, 예보 같은 그 벡터공간에서 가까운 데이터를 검색하는 기준이 된다.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;3. 외부 데이터 검색(retrievel)&lt;/b&gt;&lt;/h2&gt;
&lt;div&gt;벡터 DB, 혹은 외부 API에서 &amp;ldquo;서울&amp;rdquo;, &amp;ldquo;날씨&amp;rdquo;와 가까운 정보를 가져온다.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;여기서는 날씨 웹 검색 API가 호출되었을 것이다.&lt;/div&gt;
&lt;div&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;582&quot; data-origin-height=&quot;373&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bEvp3B/btsPS7JmTa5/jfk9tx7sg9qVaAEKIFNsL0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bEvp3B/btsPS7JmTa5/jfk9tx7sg9qVaAEKIFNsL0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bEvp3B/btsPS7JmTa5/jfk9tx7sg9qVaAEKIFNsL0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbEvp3B%2FbtsPS7JmTa5%2Fjfk9tx7sg9qVaAEKIFNsL0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;582&quot; height=&quot;373&quot; data-origin-width=&quot;582&quot; data-origin-height=&quot;373&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;4. Context를 보강한다.&lt;/h2&gt;
&lt;div&gt;검색된 날씨에 대한 데이터를 Prompt에 추가한다.&lt;/div&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;시스템: 너는 친절한 대화형 비서야.
context: 사용자가 내일 한강에 놀러갈 계획이라고 말함.
사용자: 서울 날씨
참고 정보: 
- 8월 16일(금) 오전 11:00 기준
- 현재 31&amp;deg;, 구름 많음
- 폭염 주의보 발령
- 이번 주 최고 33&amp;deg;, 최저 24&amp;deg;
- 월~목 오전 중 소나기 가능&lt;/code&gt;&lt;/pre&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;5. 응답 생성(Generation)&lt;/h2&gt;
&lt;div&gt;위의 결과를 통해 자연스러운 답변을 생성한다.&lt;/div&gt;
&lt;div&gt;이때 사용자가 내일 한강에 가겠다는 정보를(context)제공했었다.&lt;/div&gt;
&lt;div&gt;따라서 LLM은 내일의 날씨(글 쓰던 시점 기준 8월 17일, 사용자가 한강에 가겠다고 한 날)를 제공하고 모자, 선크림, 음료를 챙기라는 내용까지 추가해서 답변한다.&lt;/div&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;이번 주 서울의 날씨를 요약해 드릴게요:

- 전반적으로 덥고 습한 기운이 이어집니다. 최고 기온은 30~33&amp;deg;C, 최저 기온은 24~25&amp;deg;C 수준입니다.  
- 월요일부터 목요일까지는 오전에 소나기가 있을 수 있습니다.  
- 폭염 주의보가 발령 중이니, 낮 12시 전후에는 야외 활동을 피하시고, 한강 나들이 시에는 모자, 선크림, 시원한 음료를 챙기시면 좋습니다.&lt;/code&gt;&lt;/pre&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;pre class=&quot;groovy&quot;&gt;&lt;code&gt;[User: &quot;서울 날씨&quot;]
      │
      ▼
[LLM: 의도 파악 &amp;rarr; 최신성&amp;uarr; &amp;rarr; 툴 필요]
      │
      ├─▶ [툴콜: weather({location:&quot;Seoul&quot;, tz:&quot;Asia/Seoul&quot;})]
      │        └─ 클라이언트 실행 &amp;rarr; 결과(현재/예보/특보)
      ▼
[LLM: 결과 요약(근거) + 한강 맞춤 팁(생성)]
      ▼
[최종 응답]&lt;/code&gt;&lt;/pre&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h1&gt;총정리&lt;/h1&gt;
&lt;h1&gt;&lt;b&gt;&lt;span style=&quot;color: #333333; font-size: 16px; letter-spacing: 0px;&quot;&gt;LLM(Large&amp;nbsp;Language&amp;nbsp;Model)의&amp;nbsp;본질&lt;/span&gt;&lt;/b&gt;&lt;/h1&gt;
&lt;div&gt;
&lt;div&gt;언어모델은&amp;nbsp;인간의&amp;nbsp;자연어를&amp;nbsp;컴퓨터가&amp;nbsp;이해할&amp;nbsp;수&amp;nbsp;있는&amp;nbsp;형태(토큰,&amp;nbsp;벡터)&amp;nbsp;로&amp;nbsp;변환하여&amp;nbsp;처리한&amp;nbsp;뒤,&amp;nbsp;다시&amp;nbsp;사람이&amp;nbsp;읽을&amp;nbsp;수&amp;nbsp;있는&amp;nbsp;언어로&amp;nbsp;생성하는&amp;nbsp;시스템이다. &lt;br /&gt;기본적으로는&amp;nbsp;학습된&amp;nbsp;방대한&amp;nbsp;텍스트&amp;nbsp;데이터를&amp;nbsp;바탕으로&amp;nbsp;확률적&amp;nbsp;단어&amp;nbsp;예측을&amp;nbsp;통해&amp;nbsp;답변을&amp;nbsp;만든다.&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;b&gt;핵심&amp;nbsp;과정&amp;nbsp;요약&lt;/b&gt; &lt;br /&gt;토큰화(Tokenizing):&amp;nbsp;텍스트를&amp;nbsp;모델이&amp;nbsp;처리&amp;nbsp;가능한&amp;nbsp;작은&amp;nbsp;단위로&amp;nbsp;분해 &lt;br /&gt;임베딩(Embedding):&amp;nbsp;단어&amp;middot;문장을&amp;nbsp;의미&amp;nbsp;공간에서&amp;nbsp;수치&amp;nbsp;벡터로&amp;nbsp;변환 &lt;br /&gt;맥락&amp;nbsp;처리(Context&amp;nbsp;Handling):&amp;nbsp;이전&amp;nbsp;대화&amp;middot;검색&amp;nbsp;결과&amp;middot;시스템&amp;nbsp;메시지&amp;nbsp;등을&amp;nbsp;종합하여&amp;nbsp;입력&amp;nbsp;보강 &lt;br /&gt;생성(Generation):&amp;nbsp;Transformer&amp;nbsp;기반&amp;nbsp;신경망이&amp;nbsp;확률적으로&amp;nbsp;가장&amp;nbsp;적절한&amp;nbsp;토큰을&amp;nbsp;이어붙여&amp;nbsp;문장을&amp;nbsp;만듦&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;b&gt;Prompt,&amp;nbsp;Query,&amp;nbsp;Context의&amp;nbsp;구분&lt;/b&gt; &lt;br /&gt;Query:&amp;nbsp;사용자가&amp;nbsp;실제로&amp;nbsp;입력하는&amp;nbsp;요청&amp;nbsp;(예:&amp;nbsp;&quot;서울&amp;nbsp;날씨&amp;nbsp;알려줘&quot;) &lt;br /&gt;Context:&amp;nbsp;LLM이&amp;nbsp;답을&amp;nbsp;더&amp;nbsp;잘하도록&amp;nbsp;제공되는&amp;nbsp;추가&amp;nbsp;정보&amp;nbsp;(검색&amp;nbsp;결과,&amp;nbsp;대화&amp;nbsp;이력,&amp;nbsp;지식&amp;nbsp;베이스&amp;nbsp;등) &lt;br /&gt;Prompt:&amp;nbsp;Query와&amp;nbsp;Context,&amp;nbsp;시스템&amp;nbsp;메시지,&amp;nbsp;지시어&amp;nbsp;등을&amp;nbsp;포함해&amp;nbsp;LLM에&amp;nbsp;최종적으로&amp;nbsp;전달되는&amp;nbsp;입력&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;b&gt;한계와&amp;nbsp;확장&lt;/b&gt; &lt;br /&gt;LLM은&amp;nbsp;세상의&amp;nbsp;모든&amp;nbsp;지식을&amp;nbsp;담고&amp;nbsp;있지&amp;nbsp;않음&amp;nbsp;&amp;rarr;&amp;nbsp;최신&amp;nbsp;정보,&amp;nbsp;개인&amp;nbsp;데이터,&amp;nbsp;전문&amp;nbsp;지식은&amp;nbsp;부족할&amp;nbsp;수&amp;nbsp;있다. &lt;br /&gt;이를&amp;nbsp;보완하기&amp;nbsp;위해&amp;nbsp;RAG(Retrieval&amp;nbsp;Augmented&amp;nbsp;Generation),&amp;nbsp;MCP(Model&amp;nbsp;Context&amp;nbsp;Protocol),&amp;nbsp;외부&amp;nbsp;툴(API)&amp;nbsp;과&amp;nbsp;같은&amp;nbsp;방법이&amp;nbsp;사용된다. &lt;br /&gt;RAG:&amp;nbsp;외부&amp;nbsp;데이터베이스에서&amp;nbsp;검색한&amp;nbsp;결과를&amp;nbsp;Context로&amp;nbsp;추가하여&amp;nbsp;응답&amp;nbsp;강화 &lt;br /&gt;MCP:&amp;nbsp;LLM이&amp;nbsp;여러&amp;nbsp;툴과&amp;nbsp;표준화된&amp;nbsp;방식으로&amp;nbsp;연결될&amp;nbsp;수&amp;nbsp;있도록&amp;nbsp;하는&amp;nbsp;프로토콜 &lt;br /&gt;Tool&amp;nbsp;사용:&amp;nbsp;날씨&amp;nbsp;API,&amp;nbsp;코드&amp;nbsp;실행기,&amp;nbsp;이미지&amp;nbsp;생성기&amp;nbsp;등과&amp;nbsp;연동&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;
&lt;div&gt;&lt;b&gt;LLM = 뇌(언어 능력)&lt;/b&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;&lt;b&gt;Prompt = 질문+조건(입력 형태)&lt;/b&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;&lt;b&gt;Context = 배경지식(외부 정보 포함)&lt;/b&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;&lt;b&gt;RAG/MCP/Tool = 감각기관과 손발(현실 세계와의 연결)&lt;/b&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;</description>
      <category>AI</category>
      <author>대게</author>
      <guid isPermaLink="true">https://jangsung1.tistory.com/21</guid>
      <comments>https://jangsung1.tistory.com/21#entry21comment</comments>
      <pubDate>Sun, 17 Aug 2025 15:42:09 +0900</pubDate>
    </item>
    <item>
      <title>Part03. 병목</title>
      <link>https://jangsung1.tistory.com/20</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;1.CPU 바운드 vs&amp;nbsp; GPU 바운드&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CPU와 GPU는 서로 병렬적으로 작동합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프레임이 시작하고 CPU가 GPU에게 렌더링 명령을 던지고, 그 결과를 기다리는 것이 아니라 계속 일처리를 수행합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이때 만약 CPU가 처리를 끝냈는데 GPU가 아직 작업 진행중이면 렌더링의 결과를 기다리고 GPU의 처리가 끝나면 프레임이 화면에 출력됩니다.이런 경우는 GPU 바운드인 상태입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;반대로 CPU의 일처리가 많으면 CPU가 병목상태인 것으로 렌더링 어플리케이션에서 병목을 따질 때는 GPU와 CPU바운드인지 부터 시작해야합니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. 유니티 내장 프로파일러를 이용한 측정&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 프로파일러를 연결하려면 디벨롭먼트 빌드로 수행해야 하는데 디벨롭먼트 빌드는 프로파일러 정보 등 각종 오버헤드ㄱㅏ 포함되어 있어서 릴리스 빌드보다 오버헤드가 발생합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #99cefa;&quot;&gt; &lt;span style=&quot;text-align: start;&quot;&gt;오버헤드(overhead)는&amp;nbsp;&lt;/span&gt;&lt;b&gt;어떤 처리를 하기 위해 들어가는 간접적인 처리 시간 &amp;middot; 메모리 등&lt;/b&gt;&lt;span style=&quot;text-align: start;&quot;&gt;을 말한다.&lt;/span&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;3. 안드로이드 개발 환경 설정&lt;/span&gt;&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;3-1 빌드세팅에서 플랫폼 바꾸기&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cJLNmP/btsOm8QlR4j/FsMw4rbR6YyBPveAMW2QZ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cJLNmP/btsOm8QlR4j/FsMw4rbR6YyBPveAMW2QZ1/img.png&quot; data-origin-width=&quot;300&quot; data-origin-height=&quot;279&quot; data-is-animation=&quot;false&quot; style=&quot;width: 50.4183%; margin-right: 10px;&quot; data-widthpercent=&quot;51.01&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cJLNmP/btsOm8QlR4j/FsMw4rbR6YyBPveAMW2QZ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcJLNmP%2FbtsOm8QlR4j%2FFsMw4rbR6YyBPveAMW2QZ1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;300&quot; height=&quot;279&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qyDXp/btsOouSGjPL/itUUzNXaYh1VNk8SNV2aEK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qyDXp/btsOouSGjPL/itUUzNXaYh1VNk8SNV2aEK/img.png&quot; data-origin-width=&quot;633&quot; data-origin-height=&quot;613&quot; data-is-animation=&quot;false&quot; style=&quot;width: 48.4189%;&quot; data-widthpercent=&quot;48.99&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qyDXp/btsOouSGjPL/itUUzNXaYh1VNk8SNV2aEK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqyDXp%2FbtsOouSGjPL%2FitUUzNXaYh1VNk8SNV2aEK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;633&quot; height=&quot;613&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;401&quot; data-origin-height=&quot;106&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/TCdPc/btsOnwji6Pu/Yl175U2wiluT8qnT2A5ifk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/TCdPc/btsOnwji6Pu/Yl175U2wiluT8qnT2A5ifk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/TCdPc/btsOnwji6Pu/Yl175U2wiluT8qnT2A5ifk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTCdPc%2FbtsOnwji6Pu%2FYl175U2wiluT8qnT2A5ifk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;401&quot; height=&quot;106&quot; data-origin-width=&quot;401&quot; data-origin-height=&quot;106&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;436&quot; data-origin-height=&quot;21&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bBfKoW/btsOndxzgUa/JAlldcuEPGl1DrQfqGKsf1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bBfKoW/btsOndxzgUa/JAlldcuEPGl1DrQfqGKsf1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bBfKoW/btsOndxzgUa/JAlldcuEPGl1DrQfqGKsf1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbBfKoW%2FbtsOndxzgUa%2FJAlldcuEPGl1DrQfqGKsf1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;436&quot; height=&quot;21&quot; data-origin-width=&quot;436&quot; data-origin-height=&quot;21&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정상적으로 모듈이 깔려있다면 Importing창이 뜨고 완료되면 프로젝트창 상단에 타이틀바에서 확인할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1191&quot; data-origin-height=&quot;192&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/QS1S5/btsOmM1bdjG/SH6g1uL8kGKUmUOZtqXR00/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/QS1S5/btsOmM1bdjG/SH6g1uL8kGKUmUOZtqXR00/img.png&quot; data-alt=&quot;3&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/QS1S5/btsOmM1bdjG/SH6g1uL8kGKUmUOZtqXR00/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQS1S5%2FbtsOmM1bdjG%2FSH6g1uL8kGKUmUOZtqXR00%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1191&quot; height=&quot;192&quot; data-origin-width=&quot;1191&quot; data-origin-height=&quot;192&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;3&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;유니티 2019이상 버전부턴 관련 설정이 자동으로 되어있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;3-2 player Settings 에서 Color space Gamma로 바꾸기&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1295&quot; data-origin-height=&quot;550&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MAETl/btsOouk4mMD/W66bq0aRhg2T5Dizw7OKn0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MAETl/btsOouk4mMD/W66bq0aRhg2T5Dizw7OKn0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MAETl/btsOouk4mMD/W66bq0aRhg2T5Dizw7OKn0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMAETl%2FbtsOouk4mMD%2FW66bq0aRhg2T5Dizw7OKn0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1295&quot; height=&quot;550&quot; data-origin-width=&quot;1295&quot; data-origin-height=&quot;550&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;OpenGL ES버전 호환성 때문에 컬러스페이스를 감마로 변경한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3-3 Auto Graphics API 활성화, Development Build 및 Autoconnect Profiler 활성화&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/di3M79/btsOnue9ruH/RvQeB91kqITDCa1twaPqO1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/di3M79/btsOnue9ruH/RvQeB91kqITDCa1twaPqO1/img.png&quot; data-origin-width=&quot;642&quot; data-origin-height=&quot;368&quot; data-is-animation=&quot;false&quot; style=&quot;width: 61.1808%; margin-right: 10px;&quot; data-widthpercent=&quot;61.9&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/di3M79/btsOnue9ruH/RvQeB91kqITDCa1twaPqO1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdi3M79%2FbtsOnue9ruH%2FRvQeB91kqITDCa1twaPqO1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;642&quot; height=&quot;368&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/4xBTv/btsOo7Xi4AR/NlWPNyxrpuIEftk81kShWk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/4xBTv/btsOo7Xi4AR/NlWPNyxrpuIEftk81kShWk/img.png&quot; data-origin-width=&quot;655&quot; data-origin-height=&quot;610&quot; data-is-animation=&quot;false&quot; data-widthpercent=&quot;38.1&quot; style=&quot;width: 37.6564%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/4xBTv/btsOo7Xi4AR/NlWPNyxrpuIEftk81kShWk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F4xBTv%2FbtsOo7Xi4AR%2FNlWPNyxrpuIEftk81kShWk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;655&quot; height=&quot;610&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3-4 핸드폰 개발자옵션 활성화&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 프로젝트를 모바일에서 실행하려면 컴퓨터와 휴대폰을 연결하고 휴대폰의 개발자옵션에서 USB디버깅을 허용해야한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 플레이해보면 우측하단에 작게 Development Build라고 떠있을겁니다. 이건 Development Build 활성화 상태기 때문에 뜨는 것으로 이래야 프로파일러에 연결이 가능합니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;4. 유니티 프로파일러 윈도우&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;888&quot; data-origin-height=&quot;583&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cPBZwQ/btsOpyz92qZ/66AcnKo5uLNOgsfPRujqO0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cPBZwQ/btsOpyz92qZ/66AcnKo5uLNOgsfPRujqO0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cPBZwQ/btsOpyz92qZ/66AcnKo5uLNOgsfPRujqO0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcPBZwQ%2FbtsOpyz92qZ%2F66AcnKo5uLNOgsfPRujqO0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;888&quot; height=&quot;583&quot; data-origin-width=&quot;888&quot; data-origin-height=&quot;583&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;플레이를 시작하면 자동으로 프로파일러 창이 뜰겁니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 프로파일러가 안 뜬다면 Windows -&amp;gt; Analysus -&amp;gt; Profiler로 켭니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1045&quot; data-origin-height=&quot;904&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CnJMl/btsOpdbWRoB/d4MavMlkBOBt7JNbY3ArJk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CnJMl/btsOpdbWRoB/d4MavMlkBOBt7JNbY3ArJk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CnJMl/btsOpdbWRoB/d4MavMlkBOBt7JNbY3ArJk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCnJMl%2FbtsOpdbWRoB%2Fd4MavMlkBOBt7JNbY3ArJk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1045&quot; height=&quot;904&quot; data-origin-width=&quot;1045&quot; data-origin-height=&quot;904&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Hierarchy 목록에서 각 항목들이 성능을 많이 차지하는 순서로 정렬되어있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1037&quot; data-origin-height=&quot;426&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dt64ya/btsOpeILjBs/w6C9nP6YdfzfMOwIykAWWk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dt64ya/btsOpeILjBs/w6C9nP6YdfzfMOwIykAWWk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dt64ya/btsOpeILjBs/w6C9nP6YdfzfMOwIykAWWk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdt64ya%2FbtsOpeILjBs%2Fw6C9nP6YdfzfMOwIykAWWk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1037&quot; height=&quot;426&quot; data-origin-width=&quot;1037&quot; data-origin-height=&quot;426&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그런데 CPU병목은 유니티 내장 프로파일러로 확인이 가능하지만 GPU는 GPU바운더리가 어느 정도인지만 유추할 수 있고 자세히 살펴볼 수 없습니다. 특히 플랫폼의 제한이 있어 대부분의 모바일 디바이스에선 사용이 불가능합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 다른 외부툴을 사용하여 상세하게 프로파일링 하기도 합니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;5. GPU 병목&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;5 - 1. 필레이트 (Fillrate)&lt;/h3&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;: 픽셀 처리에 대한 부담&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;필레이트 = 화면의 픽셀 수 x 프래그먼트 쉐이더 복잡도 x 오버드로우&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;화면에 렌더링 할 픽셀이 너무 많거나, 처리할 프래그먼트 쉐이더가 무거우면 렌더링파이프라인의 래스터라이저 스테이지에서 병목이 발생합니다. 이 경우를 필레이트가 병목이 된다고 표현합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;병목이 필레이트 바운드인지 여부는 디스플레이 해상도를 줄여서 확인 가능합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;451&quot; data-origin-height=&quot;76&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MqbkP/btsOok4puwA/SgVeSUQmQKNrzXd10rq9Nk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MqbkP/btsOok4puwA/SgVeSUQmQKNrzXd10rq9Nk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MqbkP/btsOok4puwA/SgVeSUQmQKNrzXd10rq9Nk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMqbkP%2FbtsOok4puwA%2FSgVeSUQmQKNrzXd10rq9Nk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;451&quot; height=&quot;76&quot; data-origin-width=&quot;451&quot; data-origin-height=&quot;76&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Edit &amp;gt; Project Settings &amp;gt; Player 에서 Resolution Scailing모드로 해상도를 변경할 수 있쓰니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본 Disabled에서 Fixed DPI로 변경하면 DPI에 맞춰 해상도 조절이 가능합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DPI는 1인치에 몇 개의 화소가 들어가는지를 의미합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;5 - 2. 오버드로우 (Overdraw)&lt;/h3&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;: 화면에 렌더링되는 하나의 픽셀이 여러 번 덧그려지는 현상&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일반적인 불투명 물체는 z버퍼를 이용해 앞에 있는 물체에 가려진 픽셀은 걸러 오버드로우의 발생을 줄입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그런데 투명한 오브젝트는 뒤에서부터 앞으로 렌더링하며 겹쳐진 픽셀에서 오버드로우가 발생합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;최종 픽셀 컬러 = 현재 픽셀 컬러 x 알파 + 프레임 버퍼의 픽셀 컬러 x (1-알파)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 투명한 오브젝트는&amp;nbsp; 최종 픽셀 컬러를 연산하기 위한 과정에 이전 프레임 버퍼의 색을 가져와 블렌딩하고 그 결과를 다시 프레임버퍼에 기록하기 때문에&amp;nbsp; 프레임 버퍼를 읽어오는 과정에서 병목이 발생할 수도 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;5 - 3 포스트 프로세싱&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프래그먼트 쉐이더가 무거워지는 흔한 요인 중 하나로 포스트프로세싱은 픽셀 단위로 처리하기 때문에 이가 주된 병목 원인인 경우는 해상도를 줄이는 방법이 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;5 - 4 업스케일 샘플링&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그런데 해상도를 줄이면 그만큼 픽셀이 도드라져 보기 안좋을 수 있다. 따라서 UI는 원래 해상도로 렌더링하고, 3D씬만 낮은 해상도로 렌더링 하는 방법이 있는데 이를 업스케일 샘플링이라고 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 저해상도 렌더 텍스쳐 생성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 3d씬을 렌더 텍스쳐에 렌더링&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 렌더 텍스쳐를 업스케일링 해서 현재의 백 버퍼에 렌더링&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 오버레이 UI를 렌더링&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 과정으로 구현하게되면 전체 해상도는 줄이지 않고(디스플레이 되는 해상도는 그대로) 저해상도의 렌더 타깃으로 렌더 텍스쳐를 생성하여 3D씬만 저해상도로 렌더링하여 시각적인 퀄리티 저하를 줄입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;5 - 5 폴리곤&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;버텍스 프로세싱에서의 병목은 지오메트리 스테이지에서 병목이 일어나는 상황으로 씬에 렌더링 되는 버텍스들의 수 (즉 폴리곤의 수)가 많으면 지오메트리 스테이지에서 병목이 생깁니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이는 렌더링 되는 버텍스 수를 줄여보면 알 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 경우는 LOD를 주로 사용하는데 오브젝트의 시각적인 디테일을 여러 단계로 나누어 카메라에서 먼 오브젝트는 그만큼 디테일을 낮춰 처리할 버텍스의 수를 줄입니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;642&quot; data-origin-height=&quot;217&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/T5gUr/btsOoOc9GEE/cWBuo5xMs6sXY5XYQh2kfK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/T5gUr/btsOoOc9GEE/cWBuo5xMs6sXY5XYQh2kfK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/T5gUr/btsOoOc9GEE/cWBuo5xMs6sXY5XYQh2kfK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FT5gUr%2FbtsOoOc9GEE%2FcWBuo5xMs6sXY5XYQh2kfK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;642&quot; height=&quot;217&quot; data-origin-width=&quot;642&quot; data-origin-height=&quot;217&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;project settings &amp;gt; Quality에서 관련 설정을 볼 수 있고 LOD가 적용된 오브젝트에는 LOD Group컴포넌트가 존재해 오브젝트가 화면에서 차지하는 비율에 따라 어떤 레벨의 LOD가 적용되는지 확인하고 조절 할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;5 - 6 텍스쳐&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;텍스쳐가 문제가 되는 경우는 텍스쳐의 해상도를 조절해 확인 가능합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;445&quot; data-origin-height=&quot;149&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bfxgWk/btsOpDBYphQ/xjSaQt9Tujrk953MB3TEuK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bfxgWk/btsOpDBYphQ/xjSaQt9Tujrk953MB3TEuK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bfxgWk/btsOpDBYphQ/xjSaQt9Tujrk953MB3TEuK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbfxgWk%2FbtsOpDBYphQ%2FxjSaQt9Tujrk953MB3TEuK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;445&quot; height=&quot;149&quot; data-origin-width=&quot;445&quot; data-origin-height=&quot;149&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;project settings &amp;gt; Quality 에서 텍스쳐 퀄리티 옵션을 통해 전체 텍스쳐 해상도를 줄일 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>유니티/최적화 스타트업</category>
      <author>대게</author>
      <guid isPermaLink="true">https://jangsung1.tistory.com/20</guid>
      <comments>https://jangsung1.tistory.com/20#entry20comment</comments>
      <pubDate>Wed, 4 Jun 2025 15:22:07 +0900</pubDate>
    </item>
    <item>
      <title>[그래픽스 새싹4] 2. 1 삼각형 레스터화</title>
      <link>https://jangsung1.tistory.com/19</link>
      <description>&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #666666;&quot;&gt;이 글은 홍정모의 그래픽스 새싹코스 강의를 수강하며 기록하고 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #666666;&quot;&gt;세부 코드는 생략하고 개인적으로 이해한 내용을 작성합니다&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. class&amp;nbsp;Rasterization알아보기&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;867&quot; data-origin-height=&quot;199&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c787tm/btsOnvK2bPO/A9KyPQx9J3uMxU3nc22ogk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c787tm/btsOnvK2bPO/A9KyPQx9J3uMxU3nc22ogk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c787tm/btsOnvK2bPO/A9KyPQx9J3uMxU3nc22ogk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc787tm%2FbtsOnvK2bPO%2FA9KyPQx9J3uMxU3nc22ogk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;867&quot; height=&quot;199&quot; data-origin-width=&quot;867&quot; data-origin-height=&quot;199&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오늘 직접 구현해볼 함수는 class Rasterization에 있는&lt;b&gt; EdgeFunction&lt;/b&gt;과 &lt;b&gt;Render&lt;/b&gt;다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 전에 이 클래스가 어떻게 이용되는지 살펴보자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;814&quot; data-origin-height=&quot;926&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bcq9LP/btsOommtw7K/BVXYBHVDyXRPduJnOlUpek/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bcq9LP/btsOommtw7K/BVXYBHVDyXRPduJnOlUpek/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bcq9LP/btsOommtw7K/BVXYBHVDyXRPduJnOlUpek/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbcq9LP%2FbtsOommtw7K%2FBVXYBHVDyXRPduJnOlUpek%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;814&quot; height=&quot;926&quot; data-origin-width=&quot;814&quot; data-origin-height=&quot;926&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;main함수에서 윈도우세팅과 createWindow이후에 있는 while문을 보면&lt;b&gt; example&lt;/b&gt;을 사용해 Update와 Render 스왑체인등의 작업을 하고있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;920&quot; data-origin-height=&quot;1132&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BRh7x/btsOor8WFND/RMDYiKfJ7DYlpUjECbN6uK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BRh7x/btsOor8WFND/RMDYiKfJ7DYlpUjECbN6uK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BRh7x/btsOor8WFND/RMDYiKfJ7DYlpUjECbN6uK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBRh7x%2FbtsOor8WFND%2FRMDYiKfJ7DYlpUjECbN6uK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;920&quot; height=&quot;1132&quot; data-origin-width=&quot;920&quot; data-origin-height=&quot;1132&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;914&quot; data-origin-height=&quot;417&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bUSBDi/btsOnr2Ndba/ZRcBV7LojJ3LGmTzVtqSek/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bUSBDi/btsOnr2Ndba/ZRcBV7LojJ3LGmTzVtqSek/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bUSBDi/btsOnr2Ndba/ZRcBV7LojJ3LGmTzVtqSek/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbUSBDi%2FbtsOnr2Ndba%2FZRcBV7LojJ3LGmTzVtqSek%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;914&quot; height=&quot;417&quot; data-origin-width=&quot;914&quot; data-origin-height=&quot;417&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 example 클래스를 살펴보면&amp;nbsp; &amp;nbsp;&lt;b&gt;Rasterization rasterization &lt;/b&gt;을 생성해서 사용하고 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Example::Update()처럼 내부에서 rasterization을 사용해 여러 작업을 시행한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 시간에는 이 rasterization클래스의 두 함수를 구현하며 레스터화에 대해 익힌다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;float&amp;nbsp;EdgeFunction(const&amp;nbsp;vec2&amp;nbsp;&amp;amp;v0,&amp;nbsp;const&amp;nbsp;vec2&amp;nbsp;&amp;amp;v1,&amp;nbsp;const&amp;nbsp;vec2&amp;nbsp;&amp;amp;point); &lt;/b&gt;&lt;br /&gt;&lt;b&gt;void&amp;nbsp;Render(vector&amp;lt;vec4&amp;gt;&amp;nbsp;&amp;amp;pixels);&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 style=&quot;text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;2.구현하기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본적으로 보통 다렉에서 제공하는 기능이다. 여기선 간단하게 삼각형 하나만 그려본다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 왼손 좌표계 사용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1. 공간변환&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 월드좌표계에 정의된 정점들의 좌표를 Screen Raster좌표계로 변환한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;621&quot; data-origin-height=&quot;35&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cEwgK4/btsOndDQu7S/024ZjkOo4n0GYhtkglGVkK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cEwgK4/btsOndDQu7S/024ZjkOo4n0GYhtkglGVkK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cEwgK4/btsOndDQu7S/024ZjkOo4n0GYhtkglGVkK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcEwgK4%2FbtsOndDQu7S%2F024ZjkOo4n0GYhtkglGVkK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;621&quot; height=&quot;35&quot; data-origin-width=&quot;621&quot; data-origin-height=&quot;35&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용할 함수가 이미 정의되어 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1495&quot; data-origin-height=&quot;1269&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kDGv0/btsOmrJjXIJ/t6TRMR1hqauZTZEVlgUkG1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kDGv0/btsOmrJjXIJ/t6TRMR1hqauZTZEVlgUkG1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kDGv0/btsOmrJjXIJ/t6TRMR1hqauZTZEVlgUkG1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkDGv0%2FbtsOmrJjXIJ%2Ft6TRMR1hqauZTZEVlgUkG1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1495&quot; height=&quot;1269&quot; data-origin-width=&quot;1495&quot; data-origin-height=&quot;1269&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 화면의 가로, 세로 길이를 이용해 화면비율을 구하고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 그릴 점의 위치를 -1~1 범위로 정규화된 NDC로 변환한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 이때 픽셀의 위치에서도 좌상단, 우하단 등의 범위에 따라 0.5의 차이가 발생하기 때문에 레스터된 좌표의 x범위는 -0.5 ~ width-0.5다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 최종적으로 화면좌표계로 변환한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다시 Render로 돌아가 공간변환을 수행하자.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1246&quot; data-origin-height=&quot;1514&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/634dh/btsOmNys3Kt/M1sO7Cnyd6XTZs6yfAm6M1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/634dh/btsOmNys3Kt/M1sO7Cnyd6XTZs6yfAm6M1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/634dh/btsOmNys3Kt/M1sO7Cnyd6XTZs6yfAm6M1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F634dh%2FbtsOmNys3Kt%2FM1sO7Cnyd6XTZs6yfAm6M1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1246&quot; height=&quot;1514&quot; data-origin-width=&quot;1246&quot; data-origin-height=&quot;1514&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2. 바운딩 박스 구하기&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;화면의 일부 영역에 그려질 삼각형을 그리기 위해 모든 픽셀을 연산하는건 불필요하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 삼각형이 포함된 영역을 구해서 해당 영역에서만 연산을 수행한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/XDqbK/btsOl1YjlrE/xkytrhLuK9uUCqJiQeawv0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/XDqbK/btsOl1YjlrE/xkytrhLuK9uUCqJiQeawv0/img.png&quot; data-origin-width=&quot;1129&quot; data-origin-height=&quot;1493&quot; data-is-animation=&quot;false&quot; style=&quot;width: 20.7735%; margin-right: 10px;&quot; data-widthpercent=&quot;21.02&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/XDqbK/btsOl1YjlrE/xkytrhLuK9uUCqJiQeawv0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXDqbK%2FbtsOl1YjlrE%2FxkytrhLuK9uUCqJiQeawv0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1129&quot; height=&quot;1493&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/R1E9v/btsOnsU6BGP/7BEcEV5VK2SSgvNb7kfkZ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/R1E9v/btsOnsU6BGP/7BEcEV5VK2SSgvNb7kfkZ0/img.png&quot; data-origin-width=&quot;1023&quot; data-origin-height=&quot;360&quot; data-is-animation=&quot;false&quot; style=&quot;width: 78.0637%;&quot; data-widthpercent=&quot;78.98&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/R1E9v/btsOnsU6BGP/7BEcEV5VK2SSgvNb7kfkZ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FR1E9v%2FbtsOnsU6BGP%2F7BEcEV5VK2SSgvNb7kfkZ0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1023&quot; height=&quot;360&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3. 바운딩 박스에 포함되는 픽셀들의 색 결정&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1331&quot; data-origin-height=&quot;990&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b1Us6q/btsOnp4ZpDc/oApenflUqauLAFxrLu6SN1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b1Us6q/btsOnp4ZpDc/oApenflUqauLAFxrLu6SN1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b1Us6q/btsOnp4ZpDc/oApenflUqauLAFxrLu6SN1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb1Us6q%2FbtsOnp4ZpDc%2FoApenflUqauLAFxrLu6SN1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1331&quot; height=&quot;990&quot; data-origin-width=&quot;1331&quot; data-origin-height=&quot;990&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 사용된 EdgeFunction을 먼저 살펴보자&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;3-1 EdgeFunction&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1483&quot; data-origin-height=&quot;795&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d44FxY/btsOnYzs6CC/VXthK8wLPBWdOE1OCjuTw1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d44FxY/btsOnYzs6CC/VXthK8wLPBWdOE1OCjuTw1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d44FxY/btsOnYzs6CC/VXthK8wLPBWdOE1OCjuTw1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd44FxY%2FbtsOnYzs6CC%2FVXthK8wLPBWdOE1OCjuTw1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1483&quot; height=&quot;795&quot; data-origin-width=&quot;1483&quot; data-origin-height=&quot;795&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- a: 삼각형의 두 점을 이용해 한 변을 구하고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- b: 삼각형의 한 점과 위치를 판별할 대상인 p를 이용해 그 차를 구한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 두 벡터를 cross 연산하면 그 결과의 부호를 통해 좌우판별이 가능하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이때, cross 연산은 원래 3차원에서 정의되기 때문에 z축을 0으로 하고 계산하면 식이 간단하게 &lt;b&gt;a.x*b.y - a.y*b.x&lt;/b&gt;가 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 결과를 리턴하고 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;3-2 점이 삼각형 내부에 있는지 판별&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;490&quot; data-origin-height=&quot;122&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/75JvO/btsOl8DfDxQ/LyzNijo0tW8QsM20qJ8e51/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/75JvO/btsOl8DfDxQ/LyzNijo0tW8QsM20qJ8e51/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/75JvO/btsOl8DfDxQ/LyzNijo0tW8QsM20qJ8e51/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F75JvO%2FbtsOl8DfDxQ%2FLyzNijo0tW8QsM20qJ8e51%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;490&quot; height=&quot;122&quot; data-origin-width=&quot;490&quot; data-origin-height=&quot;122&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1279&quot; data-origin-height=&quot;697&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bBCAWZ/btsOneirMoO/7kLXMFegTJmLx2TdecsQfK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bBCAWZ/btsOneirMoO/7kLXMFegTJmLx2TdecsQfK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bBCAWZ/btsOneirMoO/7kLXMFegTJmLx2TdecsQfK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbBCAWZ%2FbtsOneirMoO%2F7kLXMFegTJmLx2TdecsQfK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1279&quot; height=&quot;697&quot; data-origin-width=&quot;1279&quot; data-origin-height=&quot;697&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;삼각형의 세 변에 대해 &amp;nbsp;EdgeFunction을 수행하여 점이 삼각형 내부에 있는지 확인한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;3-3 각 픽셀의 색 구하기&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;821&quot; data-origin-height=&quot;335&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bDXIk0/btsOnurSyBS/EEimkJ3z4ABfEEijVMiH1K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bDXIk0/btsOnurSyBS/EEimkJ3z4ABfEEijVMiH1K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bDXIk0/btsOnurSyBS/EEimkJ3z4ABfEEijVMiH1K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbDXIk0%2FbtsOnurSyBS%2FEEimkJ3z4ABfEEijVMiH1K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;821&quot; height=&quot;335&quot; data-origin-width=&quot;821&quot; data-origin-height=&quot;335&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;EdgeFunction의 결과가 가지는 기하학적인 의미를 다시 생각해보자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원래 벡터의 cross연산의 결과는 벡터고, 벡터의 방향은 두 벡터에 동시에 직교하며, 벡터의 크기는 두 벡터가 이루는 평행사변형의 크기다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기선 z축의 값들이 0이기 때문에 그 결과를 바로 숫자로 사용했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두 벡터가 이루는 평행사변형의 크기 -&amp;gt; 이 결과를 반으로 나누면 &lt;b&gt;두 벡터가 이루는 삼각형의 넓이&lt;/b&gt;가 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 그 총합으로 각 영역을 나눠 가중치를 구하고 이 가중치를 각 점들의 색에 곱해 최종적인 삼각형의 색을 구한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1305&quot; data-origin-height=&quot;999&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DgzqX/btsOnbF1VQr/EGEMVLIpkgDVOPjGtYeNS0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DgzqX/btsOnbF1VQr/EGEMVLIpkgDVOPjGtYeNS0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DgzqX/btsOnbF1VQr/EGEMVLIpkgDVOPjGtYeNS0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDgzqX%2FbtsOnbF1VQr%2FEGEMVLIpkgDVOPjGtYeNS0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1305&quot; height=&quot;999&quot; data-origin-width=&quot;1305&quot; data-origin-height=&quot;999&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>그래픽스/그래픽스 새싹</category>
      <author>대게</author>
      <guid isPermaLink="true">https://jangsung1.tistory.com/19</guid>
      <comments>https://jangsung1.tistory.com/19#entry19comment</comments>
      <pubDate>Tue, 3 Jun 2025 01:01:39 +0900</pubDate>
    </item>
    <item>
      <title>[그래픽스 새싹4]1. 벡터와 포인트</title>
      <link>https://jangsung1.tistory.com/18</link>
      <description>&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #666666;&quot;&gt;이 글은 홍정모의 그래픽스 새싹코스 강의를 수강하며 기록하고 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #666666;&quot;&gt;세부 코드는 생략하고 개인적으로 이해한 내용을 작성합니다&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 style=&quot;text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;1.벡터 vs 포인트&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1.1 벡터&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: 벡터는 &lt;b&gt;크기와 방향을 가진 물리량&lt;/b&gt;으로 보통 시작점부터 끝점까지 화살표로 표시합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;벡터는 크기와 방향만 같으면 어디에 위치했는지와 무관하게 같은 벡터로 볼 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;예) (1,3)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특히 원점에서 시작하는 벡터를&lt;b&gt; 위치벡터&lt;/b&gt;라고 합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1.2 포인트&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;반면 포인트는 단순히&lt;b&gt; 위치&lt;/b&gt;만 표현합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;예) (1,3)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;1.3 포인트 - 벡터 연산&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;560&quot; data-origin-height=&quot;398&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/duJVzC/btsOlOXUxut/7HWWDVLk7rKCPvi3aMTfb0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/duJVzC/btsOlOXUxut/7HWWDVLk7rKCPvi3aMTfb0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/duJVzC/btsOlOXUxut/7HWWDVLk7rKCPvi3aMTfb0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FduJVzC%2FbtsOlOXUxut%2F7HWWDVLk7rKCPvi3aMTfb0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;326&quot; height=&quot;398&quot; data-origin-width=&quot;560&quot; data-origin-height=&quot;398&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 63.7209%; height: 101px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px; text-align: center;&quot;&gt;&lt;b&gt;연산&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px; text-align: center;&quot;&gt;&lt;b&gt;결과&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px; text-align: center;&quot;&gt;&lt;b&gt;예시&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px; text-align: center;&quot;&gt;포인트 - 포인트&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px; text-align: center;&quot;&gt;벡터&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px; text-align: center;&quot;&gt;Q - P = &lt;span style=&quot;color: #ef5369;&quot;&gt;v&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px; text-align: center;&quot;&gt;포인트 +/- 벡터&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px; text-align: center;&quot;&gt;포인트&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px; text-align: center;&quot;&gt;P +&lt;span style=&quot;color: #ef5369;&quot;&gt; v&lt;/span&gt; = Q&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center;&quot;&gt;벡터 + 벡터&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center;&quot;&gt;벡터&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;// 보통 API에서 포인트와 벡터를 구분해서 구현하지는 않음&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위치 - 위치 = 얼마나 이동?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위치 +/- 얼마나 이동? = 위치&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1.4 직선의 표현&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1144&quot; data-origin-height=&quot;507&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d6uJ3L/btsOmG5USKv/VfHM1HLadNNBhFDxkfcmNK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d6uJ3L/btsOmG5USKv/VfHM1HLadNNBhFDxkfcmNK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d6uJ3L/btsOmG5USKv/VfHM1HLadNNBhFDxkfcmNK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd6uJ3L%2FbtsOmG5USKv%2FVfHM1HLadNNBhFDxkfcmNK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1144&quot; height=&quot;507&quot; data-origin-width=&quot;1144&quot; data-origin-height=&quot;507&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;R^2 또는 R^3에서 점 P0를 지나며 방향벡터가 d인 직전상의 임의의 점 P(a)의 위치벡터는 P0 + ad로 구할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1.5 선분의 표현&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;선분은 직선 &lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;직선 위에서 그 위의 두 점에 한정된 부분을 말합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1418&quot; data-origin-height=&quot;852&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/QXD1w/btsOldRnKuL/RLeVr3ElmESNsUf72bOhK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/QXD1w/btsOldRnKuL/RLeVr3ElmESNsUf72bOhK0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/QXD1w/btsOldRnKuL/RLeVr3ElmESNsUf72bOhK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQXD1w%2FbtsOldRnKuL%2FRLeVr3ElmESNsUf72bOhK0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1418&quot; height=&quot;852&quot; data-origin-width=&quot;1418&quot; data-origin-height=&quot;852&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이미지에 아핀결합이라 쓰여 있는데. 아핀결합을 간단하게 말하면 선형결합 중에서 계수(가중치)들의 합이 1인 경우를 말합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아핀공간이나 선형결합에 대해서는 나중에 글을 쓰겠습니다.&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1.6 행렬 벡터&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;벡터는 각 차원의 수만큼 성분을 가집니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보통 (1,2,3) 처럼 표현하지만 앞으로는 행렬 벡터를 많이 사용합니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;536&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c7hiLK/btsOmUiLzxp/fse16evqvHcvphwYJ3XfJk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c7hiLK/btsOmUiLzxp/fse16evqvHcvphwYJ3XfJk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c7hiLK/btsOmUiLzxp/fse16evqvHcvphwYJ3XfJk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc7hiLK%2FbtsOmUiLzxp%2Ffse16evqvHcvphwYJ3XfJk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;376&quot; height=&quot;197&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;536&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1.7 동차 좌표(homogeneous Coordinates)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어떤 목적을 위해 n차원 공간(n)에서 차원 하나를 추가해 표현하는 (n+1) 좌표계로 행렬을 이용해 연산을 할 때 이동변환을 수행하기 위해 주로 사용됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마지막 차원의 값이 0이면 포인트, 1이면 벡터라고 볼 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1.8 코드에서 벡터의 사용&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대부분 벡터와 포인트의 자료형을 따로 구분하진 않습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;(1) GLM&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- glm::vec2, glm::vec3, plm::vec4&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;(2) DirectXMath&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- XMFLOAT4 , XMVECTORF32&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;(3) Simple Math&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Vector2, Vector3, Vector4&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>그래픽스/그래픽스 새싹</category>
      <author>대게</author>
      <guid isPermaLink="true">https://jangsung1.tistory.com/18</guid>
      <comments>https://jangsung1.tistory.com/18#entry18comment</comments>
      <pubDate>Sun, 1 Jun 2025 13:22:19 +0900</pubDate>
    </item>
    <item>
      <title>[그래픽스 새싹 2] 0.4 벡터와 GLM</title>
      <link>https://jangsung1.tistory.com/17</link>
      <description>&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #666666;&quot;&gt;이 글은 홍정모의 그래픽스 새싹코스 강의를 수강하며 기록하고 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #666666;&quot;&gt;세부 코드는 생략하고 개인적으로 이해한 내용을 작성합니다&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #9d9d9d;&quot;&gt;면접에서&amp;nbsp;바로&amp;nbsp;실무&amp;nbsp;투입은&amp;nbsp;불가능한데&amp;nbsp;어느&amp;nbsp;정도&amp;nbsp;공부하면&amp;nbsp;TA로&amp;nbsp;궤도에&amp;nbsp;오를&amp;nbsp;것&amp;nbsp;같냐는&amp;nbsp;질문을&amp;nbsp;받았었다.&amp;nbsp; &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #9d9d9d;&quot;&gt;당시엔&amp;nbsp;깊게&amp;nbsp;생각하지&amp;nbsp;못하고&amp;nbsp;어느&amp;nbsp;정도&amp;nbsp;수준에서&amp;nbsp;갑자기&amp;nbsp;처음부터&amp;nbsp;큰&amp;nbsp;일을&amp;nbsp;맡게&amp;nbsp;될&amp;nbsp;리가&amp;nbsp;없고&amp;nbsp;작은&amp;nbsp;일부터&amp;nbsp;차차&amp;nbsp;배워가며&amp;nbsp;역할을&amp;nbsp;늘려갈&amp;nbsp;테니&amp;nbsp;어느&amp;nbsp;순간&amp;nbsp;궤도에&amp;nbsp;오르기보단&amp;nbsp;평생&amp;nbsp;조금씩&amp;nbsp;성장하게&amp;nbsp;되지&amp;nbsp;않을까..&amp;nbsp;대충&amp;nbsp;이런&amp;nbsp;대답을&amp;nbsp;했던&amp;nbsp;것&amp;nbsp;같은데&amp;nbsp;지금&amp;nbsp;그래픽스&amp;nbsp;공부를&amp;nbsp;시작하면서&amp;nbsp;드는&amp;nbsp;생각은&amp;nbsp; &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #9d9d9d;&quot;&gt;&quot;&amp;nbsp;혼자서&amp;nbsp;공부할&amp;nbsp;방법을&amp;nbsp;익히는&amp;nbsp;것&quot;인&amp;nbsp;것&amp;nbsp;같다. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #9d9d9d;&quot;&gt;지금은&amp;nbsp;아직&amp;nbsp;뭘,&amp;nbsp;어떻게,&amp;nbsp;어디까지&amp;nbsp;공부해야&amp;nbsp;하는지&amp;nbsp;전혀&amp;nbsp;모른다.&amp;nbsp;그러니&amp;nbsp;책이나&amp;nbsp;강의를&amp;nbsp;의존하게&amp;nbsp;된다. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #9d9d9d;&quot;&gt;여기서&amp;nbsp;더&amp;nbsp;나아가&amp;nbsp;혼자&amp;nbsp;이렇게&amp;nbsp;공부하면&amp;nbsp;되겠구나&amp;nbsp;하고&amp;nbsp;스스로&amp;nbsp;탐구가&amp;nbsp;가능해질&amp;nbsp;때가&amp;nbsp;어느&amp;nbsp;정도&amp;nbsp;궤도에&amp;nbsp;올랐다고&amp;nbsp;할&amp;nbsp;수&amp;nbsp;있는&amp;nbsp;시점이&amp;nbsp;아닐까&amp;nbsp;싶다.&amp;nbsp;갑자기&amp;nbsp;공부&amp;nbsp;시작하려다가&amp;nbsp;든&amp;nbsp;생각&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 강의에선 처음에 좀 더 직관적인&amp;nbsp; glm을 사용한다. 이후 강의에선 다렉을 사용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. glm 설치&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;463&quot; data-origin-height=&quot;70&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cjgekj/btsOjirINob/k9VJd0Pb1Iok1vCAX5M2X1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cjgekj/btsOjirINob/k9VJd0Pb1Iok1vCAX5M2X1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cjgekj/btsOjirINob/k9VJd0Pb1Iok1vCAX5M2X1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcjgekj%2FbtsOjirINob%2Fk9VJd0Pb1Iok1vCAX5M2X1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;463&quot; height=&quot;70&quot; data-origin-width=&quot;463&quot; data-origin-height=&quot;70&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;vcpkg폴더 안으로 들어가 해당 문구를 치면 설치가 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. glm vector&lt;/h2&gt;
&lt;pre id=&quot;code_1748582470020&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;//벡터 정의
glm::vec3 a(1.0f, 2.0f, 3.0f);
glm::vec3 b(7.0f, 8.0f, 9.0f);

// doubleVector 정의 - 광추적 같이 정밀도가 높아야 하는 경우 double을 사용하기도 함
auto doubleVector = glm::dvec3(1.0, 2.0, 3.0);



// cout : 문자열로 출력
cout &amp;lt;&amp;lt; glm::to_string(b-a) &amp;lt;&amp;lt; endl;



// 더하기&amp;amp;빼기 가능
auto c = b - a;



// length : 길이 구하기
float l = glm::length(c);

// normalize - 이때 길이가 0.0인 벡터를 유닛벡터로 만들려고 하면 오류 발생
auto u = glm::normalize(b-a);



// dot product
auto aDotB = glm::dot(a,b);

// cross
auto aCrossB = glm::cross(a,b);


// 벡터의 각 요소는 [r,g,b] , [인덱스] , [xyzw] 모두 가능하다&lt;/code&gt;&lt;/pre&gt;</description>
      <category>그래픽스/그래픽스 새싹</category>
      <author>대게</author>
      <guid isPermaLink="true">https://jangsung1.tistory.com/17</guid>
      <comments>https://jangsung1.tistory.com/17#entry17comment</comments>
      <pubDate>Fri, 30 May 2025 14:23:24 +0900</pubDate>
    </item>
    <item>
      <title>[그래픽스 새싹 2] 0.3 DX11 초기화와 IMGUI</title>
      <link>https://jangsung1.tistory.com/16</link>
      <description>&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #666666;&quot;&gt;이 글은 홍정모의 그래픽스 새싹코스 강의를 수강하며 기록하고 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #666666;&quot;&gt;세부 코드는 생략하고 개인적으로 이해한 내용을 작성합니다&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;1. Vec4&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;2.1 실습1 : 움직이다 끝에 도착하면 돌아가는 네모 그리기&lt;/h3&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;2.2 실습2: 움직이며 색이 변하게 만들기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;3.1 실습: Gui 색으로 배경 색 변경하기&lt;/h3&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size14&quot;&gt;이번 강의에선 Update() 부분만 편집한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;854&quot; data-origin-height=&quot;294&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dGZKSq/btsOibref9I/VpDYpPNFoNdB2AFZJPKJKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dGZKSq/btsOibref9I/VpDYpPNFoNdB2AFZJPKJKk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dGZKSq/btsOibref9I/VpDYpPNFoNdB2AFZJPKJKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdGZKSq%2FbtsOibref9I%2FVpDYpPNFoNdB2AFZJPKJKk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;854&quot; height=&quot;294&quot; data-origin-width=&quot;854&quot; data-origin-height=&quot;294&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 style=&quot;text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;1. Vec4&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;335&quot; data-origin-height=&quot;113&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/by3bN0/btsOfNr3mhd/oUzwGWXlj2aUImcY1l7qgk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/by3bN0/btsOfNr3mhd/oUzwGWXlj2aUImcY1l7qgk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/by3bN0/btsOfNr3mhd/oUzwGWXlj2aUImcY1l7qgk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fby3bN0%2FbtsOfNr3mhd%2FoUzwGWXlj2aUImcY1l7qgk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;335&quot; height=&quot;113&quot; data-origin-width=&quot;335&quot; data-origin-height=&quot;113&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;std::vector&lt;/b&gt;는 데이터를 저장하는 컨테이너고 &lt;b&gt;그래픽스에서 사용하는 vector&lt;/b&gt;는 수학적인 의미의 벡터를 의미한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2.1 실습1 : 움직이다 끝에 도착하면 돌아가는 네모 그리기&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;886&quot; data-origin-height=&quot;259&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dbFl8w/btsOhehPdfa/y8eLN2ntfYKxks850NQzDk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dbFl8w/btsOhehPdfa/y8eLN2ntfYKxks850NQzDk/img.png&quot; data-alt=&quot;성공&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dbFl8w/btsOhehPdfa/y8eLN2ntfYKxks850NQzDk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdbFl8w%2FbtsOhehPdfa%2Fy8eLN2ntfYKxks850NQzDk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;886&quot; height=&quot;259&quot; data-origin-width=&quot;886&quot; data-origin-height=&quot;259&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;성공&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;gt; 수정&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;862&quot; data-origin-height=&quot;205&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b4mGtL/btsOgrvsZR5/Kxtkg2KGYPBvDkM2KRUjS0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b4mGtL/btsOgrvsZR5/Kxtkg2KGYPBvDkM2KRUjS0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b4mGtL/btsOgrvsZR5/Kxtkg2KGYPBvDkM2KRUjS0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb4mGtL%2FbtsOgrvsZR5%2FKxtkg2KGYPBvDkM2KRUjS0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;862&quot; height=&quot;205&quot; data-origin-width=&quot;862&quot; data-origin-height=&quot;205&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2.2 실습2: 움직이며 색이 변하게 만들기&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;967&quot; data-origin-height=&quot;472&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ba7xAi/btsOhJIHFSW/gOcV3030tFM5XHjYPRn8tK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ba7xAi/btsOhJIHFSW/gOcV3030tFM5XHjYPRn8tK/img.png&quot; data-alt=&quot;성공&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ba7xAi/btsOhJIHFSW/gOcV3030tFM5XHjYPRn8tK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fba7xAi%2FbtsOhJIHFSW%2FgOcV3030tFM5XHjYPRn8tK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;967&quot; height=&quot;472&quot; data-origin-width=&quot;967&quot; data-origin-height=&quot;472&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;성공&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;835&quot; data-origin-height=&quot;287&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0skgo/btsOhgGMx6o/ENZyOkKmkwKkZPkU4r6RS0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0skgo/btsOhgGMx6o/ENZyOkKmkwKkZPkU4r6RS0/img.png&quot; data-alt=&quot;삼항 연산자로 수정&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0skgo/btsOhgGMx6o/ENZyOkKmkwKkZPkU4r6RS0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0skgo%2FbtsOhgGMx6o%2FENZyOkKmkwKkZPkU4r6RS0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;835&quot; height=&quot;287&quot; data-origin-width=&quot;835&quot; data-origin-height=&quot;287&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;삼항 연산자로 수정&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3.1 실습: Gui 색으로 배경 색 변경하기&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1349&quot; data-origin-height=&quot;1039&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sW0Pa/btsOfCYBJpE/b0SChL3Jpr6Ub40RKRME2k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sW0Pa/btsOfCYBJpE/b0SChL3Jpr6Ub40RKRME2k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sW0Pa/btsOfCYBJpE/b0SChL3Jpr6Ub40RKRME2k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsW0Pa%2FbtsOfCYBJpE%2Fb0SChL3Jpr6Ub40RKRME2k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1349&quot; height=&quot;1039&quot; data-origin-width=&quot;1349&quot; data-origin-height=&quot;1039&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;927&quot; data-origin-height=&quot;412&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c81nJM/btsOhHc0He4/reIt6sk2Es9kwkZeuDYtcK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c81nJM/btsOhHc0He4/reIt6sk2Es9kwkZeuDYtcK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c81nJM/btsOhHc0He4/reIt6sk2Es9kwkZeuDYtcK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc81nJM%2FbtsOhHc0He4%2FreIt6sk2Es9kwkZeuDYtcK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;927&quot; height=&quot;412&quot; data-origin-width=&quot;927&quot; data-origin-height=&quot;412&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 슬라이더의 색을 배경색으로 지정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1335&quot; data-origin-height=&quot;399&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cGR5nO/btsOhJPrk0E/uauatF9zbDdXiUbkiIWXW0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cGR5nO/btsOhJPrk0E/uauatF9zbDdXiUbkiIWXW0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cGR5nO/btsOhJPrk0E/uauatF9zbDdXiUbkiIWXW0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcGR5nO%2FbtsOhJPrk0E%2FuauatF9zbDdXiUbkiIWXW0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1335&quot; height=&quot;399&quot; data-origin-width=&quot;1335&quot; data-origin-height=&quot;399&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;563&quot; data-origin-height=&quot;41&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bmG601/btsOfAl7D6p/WwjFryEfFZILAEow5PSABK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bmG601/btsOfAl7D6p/WwjFryEfFZILAEow5PSABK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bmG601/btsOfAl7D6p/WwjFryEfFZILAEow5PSABK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbmG601%2FbtsOfAl7D6p%2FWwjFryEfFZILAEow5PSABK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;563&quot; height=&quot;41&quot; data-origin-width=&quot;563&quot; data-origin-height=&quot;41&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- update에서 지정한 backgroundcolor값으로 배경 색 변경&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>그래픽스/그래픽스 새싹</category>
      <author>대게</author>
      <guid isPermaLink="true">https://jangsung1.tistory.com/16</guid>
      <comments>https://jangsung1.tistory.com/16#entry16comment</comments>
      <pubDate>Thu, 29 May 2025 16:37:33 +0900</pubDate>
    </item>
    <item>
      <title>[그래픽스 새싹 2] 0. 2 환경설정_vcpkg</title>
      <link>https://jangsung1.tistory.com/14</link>
      <description>&lt;h2 style=&quot;text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;1. VS 설치&lt;/h2&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;- visual studio 2022에서 시작&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;426&quot; data-origin-height=&quot;116&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lXJVK/btsOfBZJdNC/ScWKiQFHdfdfaMR54o68Kk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lXJVK/btsOfBZJdNC/ScWKiQFHdfdfaMR54o68Kk/img.png&quot; data-alt=&quot;- c++를 사용한 데스크톱 개발 설치&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lXJVK/btsOfBZJdNC/ScWKiQFHdfdfaMR54o68Kk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlXJVK%2FbtsOfBZJdNC%2FScWKiQFHdfdfaMR54o68Kk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;426&quot; height=&quot;116&quot; data-origin-width=&quot;426&quot; data-origin-height=&quot;116&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;- c++를 사용한 데스크톱 개발 설치&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;2. vcpkg 설치&lt;/h2&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://learn.microsoft.com/ko-kr/vcpkg/get_started/get-started-vs?pivots=shell-powershell&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://learn.microsoft.com/ko-kr/vcpkg/get_started/get-started-vs?pivots=shell-powershell&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;906&quot; data-origin-height=&quot;820&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dFy0l3/btsOgPJGRFD/pRu9KLgpETnSpUzINfF8sK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dFy0l3/btsOgPJGRFD/pRu9KLgpETnSpUzINfF8sK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dFy0l3/btsOgPJGRFD/pRu9KLgpETnSpUzINfF8sK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdFy0l3%2FbtsOgPJGRFD%2FpRu9KLgpETnSpUzINfF8sK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;906&quot; height=&quot;820&quot; data-origin-width=&quot;906&quot; data-origin-height=&quot;820&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 style=&quot;text-align: left;&quot; data-ke-size=&quot;size20&quot;&gt;- 해당 링크에서 설명에 따라 vcpkg 설치를 진행한다.&lt;/h4&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;375&quot; data-origin-height=&quot;20&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/brTpZ0/btsOgrPMAqE/Qmk0Ylrk6fyu43KDTj4jz0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/brTpZ0/btsOgrPMAqE/Qmk0Ylrk6fyu43KDTj4jz0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/brTpZ0/btsOgrPMAqE/Qmk0Ylrk6fyu43KDTj4jz0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbrTpZ0%2FbtsOgrPMAqE%2FQmk0Ylrk6fyu43KDTj4jz0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;375&quot; height=&quot;20&quot; data-origin-width=&quot;375&quot; data-origin-height=&quot;20&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 style=&quot;text-align: left;&quot; data-ke-size=&quot;size20&quot;&gt;-설치하려는 파일이 vcpkg에 있는지 확인한다.&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1109&quot; data-origin-height=&quot;870&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EcJV4/btsOhIXitEU/njUmPOGuB2A5Svla41LeE1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EcJV4/btsOhIXitEU/njUmPOGuB2A5Svla41LeE1/img.png&quot; data-alt=&quot;성공하면 이렇게 뜬다&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EcJV4/btsOhIXitEU/njUmPOGuB2A5Svla41LeE1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEcJV4%2FbtsOhIXitEU%2FnjUmPOGuB2A5Svla41LeE1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1109&quot; height=&quot;870&quot; data-origin-width=&quot;1109&quot; data-origin-height=&quot;870&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;성공하면 이렇게 뜬다&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;752&quot; data-origin-height=&quot;27&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/boXcGW/btsOhKAMtFg/ctk2cn8yAoppKZiNgvnd3K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/boXcGW/btsOhKAMtFg/ctk2cn8yAoppKZiNgvnd3K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/boXcGW/btsOhKAMtFg/ctk2cn8yAoppKZiNgvnd3K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FboXcGW%2FbtsOhKAMtFg%2Fctk2cn8yAoppKZiNgvnd3K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;752&quot; height=&quot;27&quot; data-origin-width=&quot;752&quot; data-origin-height=&quot;27&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 style=&quot;text-align: left;&quot; data-ke-size=&quot;size20&quot;&gt;설치한다.&lt;/h4&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;420&quot; data-origin-height=&quot;36&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cRzgE0/btsOicDG9OH/ij7wAfnpaHFFuddOXu0wc1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cRzgE0/btsOicDG9OH/ij7wAfnpaHFFuddOXu0wc1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cRzgE0/btsOicDG9OH/ij7wAfnpaHFFuddOXu0wc1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcRzgE0%2FbtsOicDG9OH%2Fij7wAfnpaHFFuddOXu0wc1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;420&quot; height=&quot;36&quot; data-origin-width=&quot;420&quot; data-origin-height=&quot;36&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 style=&quot;text-align: left;&quot; data-ke-size=&quot;size20&quot;&gt;vcpkg integrate install 여기까지 하면 끝&lt;/h4&gt;
&lt;h2 style=&quot;text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;</description>
      <category>그래픽스/그래픽스 새싹</category>
      <author>대게</author>
      <guid isPermaLink="true">https://jangsung1.tistory.com/14</guid>
      <comments>https://jangsung1.tistory.com/14#entry14comment</comments>
      <pubDate>Thu, 29 May 2025 15:26:10 +0900</pubDate>
    </item>
  </channel>
</rss>