<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Jwoo._.log</title>
        <link>https://velog.io/</link>
        <description></description>
        <lastBuildDate>Sun, 12 Oct 2025 17:00:31 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <copyright>Copyright (C) 2019. Jwoo._.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/jwoo_" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[2025.10.13 김진우 포트폴리오 3차 - 55일차 (클립추가)]]></title>
            <link>https://velog.io/@jwoo_/2025.10.12-%EA%B9%80%EC%A7%84%EC%9A%B0-%ED%8F%AC%ED%8A%B8%ED%8F%B4%EB%A6%AC%EC%98%A4-3%EC%B0%A8-55%EC%9D%BC%EC%B0%A8-%ED%81%B4%EB%A6%BD%EC%B6%94%EA%B0%80</link>
            <guid>https://velog.io/@jwoo_/2025.10.12-%EA%B9%80%EC%A7%84%EC%9A%B0-%ED%8F%AC%ED%8A%B8%ED%8F%B4%EB%A6%AC%EC%98%A4-3%EC%B0%A8-55%EC%9D%BC%EC%B0%A8-%ED%81%B4%EB%A6%BD%EC%B6%94%EA%B0%80</guid>
            <pubDate>Sun, 12 Oct 2025 17:00:31 GMT</pubDate>
            <description><![CDATA[<p><strong>[현재 영상에 대한 작업 완료 내용]</strong></p>
<ol>
<li>플레이어 UI 변경</li>
<li>오류 해결</li>
</ol>
<p><strong>[트러블 슈팅(문제 발생 사항, 현재 고민 중인 사항)]</strong></p>
<ol>
<li>몬스터 AI가 정상적으로 동작하지 않는 문제 발견 ( BTTask )</li>
</ol>
<ul>
<li>상속 구조를 변경하는 부분에서 코드가 Boss쪽과 꼬인 것으로 예상된다.</li>
</ul>
<p><strong>[솔루션(트러블 슈팅에 대한 해결 방안)]</strong></p>
<ol>
<li>몬스터 AI가 정상적으로 동작하지 않는 문제 발견 ( BTTask )
코드 흐름을 따라가면서 다시 확인하면 문제 해결이 될 것 같다.</li>
</ol>
<p><strong>[작업 예정 사항]</strong></p>
<ol>
<li>몬스터 관련 오류 수정</li>
<li>원거리 무기 SubAction 추가</li>
</ol>
<p><strong>[작업 완료 사항(누적)]</strong>
플레이어
플레이어 이동
플레이어 공격</p>
<ul>
<li>점프 공격</li>
<li>공중 콤보 ( 플레이어 지면, 적 공중)</li>
<li>공중 콤보 ( 플레이어, 적 공중 )</li>
<li>내려찍기 공격</li>
<li>처형 공격
플레이어 방어</li>
<li>저스트 가드</li>
</ul>
<p>무기</p>
<ul>
<li>Fist</li>
<li>Sword</li>
<li>Bow</li>
</ul>
<p>몬스터 AI
몬스터 이동 AI
몬스터 순찰 AI
몬스터 공격 AI
몬스터 대기 모드 AI
몬스터 상태이상</p>
<ul>
<li>스턴</li>
<li>다운</li>
</ul>
<p>집단전
캐릭터 그룹 분류
다른 그룹 공격
캐릭터당 공격 인원 제한
그룹 전투 상태 동시 돌입
그룹 비전투 상태 돌입</p>
<p>보스</p>
<ul>
<li>공격</li>
<li>순회</li>
<li>페이즈 변경</li>
</ul>
<p>퀘스트</p>
<ul>
<li>퀘스트 부여</li>
<li>퀘스트 수행</li>
<li>퀘스트 완료
맵 이동</li>
</ul>
<p>무기 관리 에디터</p>
<hr>
<p>[영상 클립]</p>
<p><strong>&lt;하이라이트&gt;</strong>
!youtube[4d_jTGJibqk]</p>
<p><strong>&lt;무기&gt;</strong>
!youtube[8zh5kdpo39E]</p>
<p>!youtube[qT_y2sowcPg]</p>
<p>!youtube[YeoQPOZryDs]</p>
<p><strong>&lt;몬스터 AI&gt;</strong>
!youtube[Ag-CU6XH9Kg]</p>
<p><strong>&lt;보스전&gt;</strong>
!youtube[W-csRJ4udK8]</p>
<p><strong>&lt;퀘스트&gt;</strong>
!youtube[WtADBJwY7V4]</p>
<p><strong>&lt;맵 이동&gt;</strong>
!youtube[mUybVFF4jfM]</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[2025.09.29 김진우 포트폴리오 3차 - 41일차]]></title>
            <link>https://velog.io/@jwoo_/2025.09.29-%EA%B9%80%EC%A7%84%EC%9A%B0-%ED%8F%AC%ED%8A%B8%ED%8F%B4%EB%A6%AC%EC%98%A4-3%EC%B0%A8-41%EC%9D%BC%EC%B0%A8</link>
            <guid>https://velog.io/@jwoo_/2025.09.29-%EA%B9%80%EC%A7%84%EC%9A%B0-%ED%8F%AC%ED%8A%B8%ED%8F%B4%EB%A6%AC%EC%98%A4-3%EC%B0%A8-41%EC%9D%BC%EC%B0%A8</guid>
            <pubDate>Sun, 28 Sep 2025 16:57:26 GMT</pubDate>
            <description><![CDATA[<p>!youtube[2jWYm-g2Z84]</p>
<hr>
<p><strong>[현재 영상에 대한 작업 완료 내용]</strong></p>
<ol>
<li>무기 추가<ul>
<li>활</li>
</ul>
</li>
</ol>
<p><strong>[트러블 슈팅(문제 발생 사항, 현재 고민 중인 사항)]</strong></p>
<p><strong>[솔루션(트러블 슈팅에 대한 해결 방안)]</strong></p>
<p><strong>[작업 예정 사항]</strong></p>
<ol>
<li>무기 추가</li>
</ol>
<p><strong>[작업 완료 사항(누적)]</strong></p>
<ul>
<li>무기 관리 에디터 추가</li>
<li>무기 구조 변경</li>
</ul>
<p>근접무기 추가</p>
<ul>
<li>Sword</li>
<li>Fist</li>
</ul>
<p>보스</p>
<ul>
<li>공격</li>
<li>순회</li>
<li>페이즈 변경</li>
</ul>
<p>퀘스트</p>
<ul>
<li>퀘스트 부여</li>
<li>퀘스트 수행</li>
<li>퀘스트 완료</li>
</ul>
<p>맵 이동</p>
<p>====================
플레이어</p>
<p>플레이어 이동
플레이어 공격</p>
<ul>
<li>점프 공격</li>
<li>공중 콤보 ( 플레이어 지면, 적 공중)</li>
<li>공중 콤보 ( 플레이어, 적 공중 )</li>
<li>내려찍기 공격</li>
<li>처형 공격
플레이어 방어</li>
<li>저스트 가드</li>
</ul>
<p>====================
몬스터 AI</p>
<p>몬스터 이동 AI
몬스터 순찰 AI
몬스터 공격 AI
몬스터 대기 모드 AI
몬스터 상태이상</p>
<ul>
<li>스턴</li>
<li>다운</li>
</ul>
<p>====================
집단전</p>
<p>캐릭터 그룹 분류
다른 그룹 공격
캐릭터당 공격 인원 제한
그룹 전투 상태 동시 돌입
그룹 비전투 상태 돌입</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[2025.09.26 김진우 포트폴리오 3차 - 38일차]]></title>
            <link>https://velog.io/@jwoo_/2025.09.26-%EA%B9%80%EC%A7%84%EC%9A%B0-%ED%8F%AC%ED%8A%B8%ED%8F%B4%EB%A6%AC%EC%98%A4-3%EC%B0%A8-38%EC%9D%BC%EC%B0%A8</link>
            <guid>https://velog.io/@jwoo_/2025.09.26-%EA%B9%80%EC%A7%84%EC%9A%B0-%ED%8F%AC%ED%8A%B8%ED%8F%B4%EB%A6%AC%EC%98%A4-3%EC%B0%A8-38%EC%9D%BC%EC%B0%A8</guid>
            <pubDate>Thu, 25 Sep 2025 15:51:05 GMT</pubDate>
            <description><![CDATA[<p>!youtube[6EQRc7PIuS4]</p>
<hr>
<p><strong>[현재 영상에 대한 작업 완료 내용]</strong></p>
<ol>
<li>퀘스트 클리어 조건 추가</li>
<li>퀘스트 클리어 UI 추가</li>
</ol>
<p><strong>[트러블 슈팅(문제 발생 사항, 현재 고민 중인 사항)]</strong></p>
<p><strong>[솔루션(트러블 슈팅에 대한 해결 방안)]</strong></p>
<p><strong>[작업 예정 사항]</strong></p>
<ol>
<li>맵 이동</li>
<li>무기 추가</li>
</ol>
<p><strong>[작업 완료 사항(누적)]</strong></p>
<ul>
<li>무기 관리 에디터 추가</li>
<li>무기 구조 변경</li>
</ul>
<p>근접무기 추가</p>
<ul>
<li>Sword</li>
<li>Fist</li>
</ul>
<p>보스</p>
<ul>
<li>공격</li>
<li>순회</li>
<li>페이즈 변경</li>
</ul>
<p>퀘스트</p>
<ul>
<li>퀘스트 부여</li>
<li>퀘스트 수행</li>
<li>퀘스트 완료</li>
</ul>
<p>====================
플레이어</p>
<p>플레이어 이동
플레이어 공격</p>
<ul>
<li>점프 공격</li>
<li>공중 콤보 ( 플레이어 지면, 적 공중)</li>
<li>공중 콤보 ( 플레이어, 적 공중 )</li>
<li>내려찍기 공격</li>
<li>처형 공격
플레이어 방어</li>
<li>저스트 가드</li>
</ul>
<p>====================
몬스터 AI</p>
<p>몬스터 이동 AI
몬스터 순찰 AI
몬스터 공격 AI
몬스터 대기 모드 AI
몬스터 상태이상</p>
<ul>
<li>스턴</li>
<li>다운</li>
</ul>
<p>====================
집단전</p>
<p>캐릭터 그룹 분류
다른 그룹 공격
캐릭터당 공격 인원 제한
그룹 전투 상태 동시 돌입
그룹 비전투 상태 돌입</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[2025.09.19 김진우 포트폴리오 3차 - 31일차]]></title>
            <link>https://velog.io/@jwoo_/2025.09.19-%EA%B9%80%EC%A7%84%EC%9A%B0-%ED%8F%AC%ED%8A%B8%ED%8F%B4%EB%A6%AC%EC%98%A4-3%EC%B0%A8-31%EC%9D%BC%EC%B0%A8-3o9hw52e</link>
            <guid>https://velog.io/@jwoo_/2025.09.19-%EA%B9%80%EC%A7%84%EC%9A%B0-%ED%8F%AC%ED%8A%B8%ED%8F%B4%EB%A6%AC%EC%98%A4-3%EC%B0%A8-31%EC%9D%BC%EC%B0%A8-3o9hw52e</guid>
            <pubDate>Thu, 18 Sep 2025 16:19:24 GMT</pubDate>
            <description><![CDATA[<p>!youtube[4uFa_laVvqk]</p>
<hr>
<p><strong>[현재 영상에 대한 작업 완료 내용]</strong></p>
<ol>
<li>NPC 추가</li>
<li>퀘스트 추가</li>
</ol>
<p><strong>[트러블 슈팅(문제 발생 사항, 현재 고민 중인 사항)]</strong></p>
<p><strong>[솔루션(트러블 슈팅에 대한 해결 방안)]</strong></p>
<p><strong>[작업 예정 사항]</strong></p>
<ol>
<li>퀘스트 조건 수정 </li>
<li>맵 이동</li>
</ol>
<p><strong>[작업 완료 사항(누적)]</strong></p>
<ul>
<li>무기 관리 에디터 추가</li>
<li>무기 구조 변경</li>
</ul>
<p>근접무기 추가</p>
<ul>
<li>Sword</li>
<li>Fist</li>
</ul>
<p>보스</p>
<ul>
<li>공격</li>
<li>순회</li>
<li>페이즈 변경</li>
</ul>
<p>====================
플레이어</p>
<p>플레이어 이동
플레이어 공격</p>
<ul>
<li>점프 공격</li>
<li>공중 콤보 ( 플레이어 지면, 적 공중)</li>
<li>공중 콤보 ( 플레이어, 적 공중 )</li>
<li>내려찍기 공격</li>
<li>처형 공격
플레이어 방어</li>
<li>저스트 가드</li>
</ul>
<p>====================
몬스터 AI</p>
<p>몬스터 이동 AI
몬스터 순찰 AI
몬스터 공격 AI
몬스터 대기 모드 AI
몬스터 상태이상</p>
<ul>
<li>스턴</li>
<li>다운</li>
</ul>
<p>====================
집단전</p>
<p>캐릭터 그룹 분류
다른 그룹 공격
캐릭터당 공격 인원 제한
그룹 전투 상태 동시 돌입
그룹 비전투 상태 돌입</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[2025.09.15 김진우 포트폴리오 3차 - 27일차]]></title>
            <link>https://velog.io/@jwoo_/2025.09.15-%EA%B9%80%EC%A7%84%EC%9A%B0-%ED%8F%AC%ED%8A%B8%ED%8F%B4%EB%A6%AC%EC%98%A4-3%EC%B0%A8-27%EC%9D%BC%EC%B0%A8</link>
            <guid>https://velog.io/@jwoo_/2025.09.15-%EA%B9%80%EC%A7%84%EC%9A%B0-%ED%8F%AC%ED%8A%B8%ED%8F%B4%EB%A6%AC%EC%98%A4-3%EC%B0%A8-27%EC%9D%BC%EC%B0%A8</guid>
            <pubDate>Sun, 14 Sep 2025 16:20:41 GMT</pubDate>
            <description><![CDATA[<p>!youtube[lLWzSSE4KbM]</p>
<hr>
<p><strong>[현재 영상에 대한 작업 완료 내용]</strong></p>
<ol>
<li>보스 UI 추가 </li>
<li>보스 2페이즈 공격 패턴 추가</li>
</ol>
<p><strong>[트러블 슈팅(문제 발생 사항, 현재 고민 중인 사항)]</strong></p>
<p><strong>[솔루션(트러블 슈팅에 대한 해결 방안)]</strong></p>
<p><strong>[작업 예정 사항]</strong></p>
<ol>
<li><p>NPC 추가</p>
</li>
<li><p>퀘스트 추가</p>
</li>
</ol>
<p><strong>[작업 완료 사항(누적)]</strong></p>
<ul>
<li>무기 관리 에디터 추가</li>
<li>무기 구조 변경</li>
</ul>
<p>근접무기 추가</p>
<ul>
<li>Sword</li>
<li>Fist</li>
</ul>
<p>보스</p>
<ul>
<li>공격</li>
<li>순회</li>
<li>페이즈 변경</li>
</ul>
<p>====================
플레이어</p>
<p>플레이어 이동
플레이어 공격</p>
<ul>
<li>점프 공격</li>
<li>공중 콤보 ( 플레이어 지면, 적 공중)</li>
<li>공중 콤보 ( 플레이어, 적 공중 )</li>
<li>내려찍기 공격</li>
<li>처형 공격
플레이어 방어</li>
<li>저스트 가드</li>
</ul>
<p>====================
몬스터 AI</p>
<p>몬스터 이동 AI
몬스터 순찰 AI
몬스터 공격 AI
몬스터 대기 모드 AI
몬스터 상태이상</p>
<ul>
<li>스턴</li>
<li>다운</li>
</ul>
<p>====================
집단전</p>
<p>캐릭터 그룹 분류
다른 그룹 공격
캐릭터당 공격 인원 제한
그룹 전투 상태 동시 돌입
그룹 비전투 상태 돌입</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[2025.09.08 김진우 포트폴리오 3차 - 19일차]]></title>
            <link>https://velog.io/@jwoo_/2025.09.08-%EA%B9%80%EC%A7%84%EC%9A%B0-%ED%8F%AC%ED%8A%B8%ED%8F%B4%EB%A6%AC%EC%98%A4-3%EC%B0%A8-19%EC%9D%BC%EC%B0%A8</link>
            <guid>https://velog.io/@jwoo_/2025.09.08-%EA%B9%80%EC%A7%84%EC%9A%B0-%ED%8F%AC%ED%8A%B8%ED%8F%B4%EB%A6%AC%EC%98%A4-3%EC%B0%A8-19%EC%9D%BC%EC%B0%A8</guid>
            <pubDate>Sun, 07 Sep 2025 17:24:41 GMT</pubDate>
            <description><![CDATA[<p>!youtube[Q5sFUaPsbAs]</p>
<hr>
<p><strong>[현재 영상에 대한 작업 완료 내용]</strong></p>
<ol>
<li>보스 추가</li>
</ol>
<p><strong>[트러블 슈팅(문제 발생 사항, 현재 고민 중인 사항)]</strong></p>
<ol>
<li>애니메이션 일부가 보스 스켈레톤으로 리타겟팅이 안되는 문제 </li>
</ol>
<p><strong>[솔루션(트러블 슈팅에 대한 해결 방안)]</strong></p>
<ol>
<li>애니메이션 일부가 보스 스켈레톤으로 리타겟팅이 안되는 문제 </li>
</ol>
<p>솔루션 1 : bone Retarget Chain 생성으로 리타겟팅 시도 
솔루션 2 : 다른 애니메이션 선택 </p>
<p>보스의 bone 구조가 원본의 스켈레탈 메시 구조와 일부 달라서 발생한 문제로 예상된다.
따라서 bone IK Rig을 이용해 Retarget Chain을 이용하면 해결이 가능할 것으로 예상된다. 
하지만, 변경을 위한 시간이 너무 오래 걸릴 것으로 예상되고, 솔루션 1 실패에 대한 리스크가 심할 것으로 예상되어 솔루션 2를 선택한다.</p>
<p><strong>[작업 예정 사항]</strong></p>
<ol>
<li>보스 애니메이션 오류 수정 </li>
<li>보스 2페이즈 패턴 추가</li>
</ol>
<p><strong>[작업 완료 사항(누적)]</strong>
무기 관리 에디터 추가
무기 구조 변경 - Sword</p>
<p>====================
플레이어</p>
<p>플레이어 이동
플레이어 공격</p>
<ul>
<li>점프 공격</li>
<li>공중 콤보 ( 플레이어 지면, 적 공중)</li>
<li>공중 콤보 ( 플레이어, 적 공중 )</li>
<li>내려찍기 공격</li>
<li>처형 공격
플레이어 방어</li>
<li>저스트 가드</li>
</ul>
<p>====================
몬스터 AI</p>
<p>몬스터 이동 AI
몬스터 순찰 AI
몬스터 공격 AI
몬스터 대기 모드 AI
몬스터 상태이상</p>
<ul>
<li>스턴</li>
<li>다운</li>
</ul>
<p>====================
집단전</p>
<p>캐릭터 그룹 분류
다른 그룹 공격
캐릭터당 공격 인원 제한
그룹 전투 상태 동시 돌입
그룹 비전투 상태 돌입</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[2025.09.03 김진우 포트폴리오 3차 - 14일차]]></title>
            <link>https://velog.io/@jwoo_/2025.09.03-%EA%B9%80%EC%A7%84%EC%9A%B0-%ED%8F%AC%ED%8A%B8%ED%8F%B4%EB%A6%AC%EC%98%A4-3%EC%B0%A8-14%EC%9D%BC%EC%B0%A8</link>
            <guid>https://velog.io/@jwoo_/2025.09.03-%EA%B9%80%EC%A7%84%EC%9A%B0-%ED%8F%AC%ED%8A%B8%ED%8F%B4%EB%A6%AC%EC%98%A4-3%EC%B0%A8-14%EC%9D%BC%EC%B0%A8</guid>
            <pubDate>Tue, 02 Sep 2025 16:47:32 GMT</pubDate>
            <description><![CDATA[<p>!youtube[vJ-2ZFfqld4]</p>
<hr>
<p><strong>[현재 영상에 대한 작업 완료 내용]</strong></p>
<ol>
<li>무기 구조 변경 - 처형 공격</li>
<li>무기 추가 - Fist</li>
</ol>
<p><strong>[트러블 슈팅(문제 발생 사항, 현재 고민 중인 사항)]</strong></p>
<p><strong>[솔루션(트러블 슈팅에 대한 해결 방안)]</strong></p>
<p><strong>[작업 예정 사항]</strong></p>
<ol>
<li>근접 무기 추가 </li>
<li>원거리 무기 추가</li>
</ol>
<p><strong>[작업 완료 사항(누적)]</strong>
무기 관리 에디터 추가
무기 구조 변경 - Sword</p>
<p>====================
플레이어</p>
<p>플레이어 이동
플레이어 공격</p>
<ul>
<li>점프 공격</li>
<li>공중 콤보 ( 플레이어 지면, 적 공중)</li>
<li>공중 콤보 ( 플레이어, 적 공중 )</li>
<li>내려찍기 공격</li>
<li>처형 공격
플레이어 방어</li>
<li>저스트 가드</li>
</ul>
<p>====================
몬스터 AI</p>
<p>몬스터 이동 AI
몬스터 순찰 AI
몬스터 공격 AI
몬스터 대기 모드 AI
몬스터 상태이상</p>
<ul>
<li>스턴</li>
<li>다운</li>
</ul>
<p>====================
집단전</p>
<p>캐릭터 그룹 분류
다른 그룹 공격
캐릭터당 공격 인원 제한
그룹 전투 상태 동시 돌입
그룹 비전투 상태 돌입</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[2025.08.25 김진우 포트폴리오 3차 - 5일차]]></title>
            <link>https://velog.io/@jwoo_/2025.08.25-%EA%B9%80%EC%A7%84%EC%9A%B0-%ED%8F%AC%ED%8A%B8%ED%8F%B4%EB%A6%AC%EC%98%A4-3%EC%B0%A8-5%EC%9D%BC%EC%B0%A8</link>
            <guid>https://velog.io/@jwoo_/2025.08.25-%EA%B9%80%EC%A7%84%EC%9A%B0-%ED%8F%AC%ED%8A%B8%ED%8F%B4%EB%A6%AC%EC%98%A4-3%EC%B0%A8-5%EC%9D%BC%EC%B0%A8</guid>
            <pubDate>Sun, 24 Aug 2025 16:46:07 GMT</pubDate>
            <description><![CDATA[<p>!youtube[x0cY9XP_ZrU]</p>
<hr>
<p><strong>[현재 영상에 대한 작업 완료 내용]</strong></p>
<ol>
<li>무기 관리 구조 변경</li>
<li>무기 관리 에디터 추가</li>
</ol>
<p><strong>[트러블 슈팅(문제 발생 사항, 현재 고민 중인 사항)]</strong></p>
<p><strong>[솔루션(트러블 슈팅에 대한 해결 방안)]</strong></p>
<p><strong>[작업 예정 사항]</strong></p>
<ol>
<li>에디터 추가 커스터마이징</li>
<li>무기 추가</li>
</ol>
<p><strong>[작업 완료 사항(누적)]</strong></p>
<ul>
<li>무기 관리 에디터 추가</li>
</ul>
<p>====================
플레이어</p>
<p>플레이어 이동
플레이어 공격</p>
<ul>
<li>점프 공격</li>
<li>공중 콤보 ( 플레이어 지면, 적 공중)</li>
<li>공중 콤보 ( 플레이어, 적 공중 )</li>
<li>내려찍기 공격</li>
<li>처형 공격
플레이어 방어</li>
<li>저스트 가드</li>
</ul>
<p>====================
몬스터 AI</p>
<p>몬스터 이동 AI
몬스터 순찰 AI
몬스터 공격 AI
몬스터 대기 모드 AI
몬스터 상태이상</p>
<ul>
<li>스턴</li>
<li>다운</li>
</ul>
<p>====================
집단전</p>
<p>캐릭터 그룹 분류
다른 그룹 공격
캐릭터당 공격 인원 제한
그룹 전투 상태 동시 돌입
그룹 비전투 상태 돌입</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[김진우 포트폴리오 2차 - 최종]]></title>
            <link>https://velog.io/@jwoo_/2025.08.18-%EA%B9%80%EC%A7%84%EC%9A%B0-%ED%8F%AC%ED%8A%B8%ED%8F%B4%EB%A6%AC%EC%98%A4-2%EC%B0%A8-%EC%B5%9C%EC%A2%85</link>
            <guid>https://velog.io/@jwoo_/2025.08.18-%EA%B9%80%EC%A7%84%EC%9A%B0-%ED%8F%AC%ED%8A%B8%ED%8F%B4%EB%A6%AC%EC%98%A4-2%EC%B0%A8-%EC%B5%9C%EC%A2%85</guid>
            <pubDate>Sun, 17 Aug 2025 17:22:03 GMT</pubDate>
            <description><![CDATA[<p>!youtube[8boi744m3Vc]</p>
<hr>
<p><strong>[현재 영상에 대한 작업 완료 내용]</strong></p>
<ol>
<li>점프 공격</li>
<li>공중 콤보 ( 플레이어 지면, 적 공중)</li>
<li>공중 콤보 ( 플레이어, 적 공중 )</li>
<li>내려찍기 공격</li>
<li>처형 공격</li>
</ol>
<p><strong>[작업 완료 사항]</strong></p>
<p>====================
플레이어</p>
<p>플레이어 이동
플레이어 공격</p>
<ul>
<li>점프 공격</li>
<li>공중 콤보 ( 플레이어 지면, 적 공중)</li>
<li>공중 콤보 ( 플레이어, 적 공중 )</li>
<li>내려찍기 공격</li>
<li>처형 공격
플레이어 방어</li>
<li>저스트 가드</li>
</ul>
<p>====================
몬스터 AI</p>
<p>몬스터 이동 AI
몬스터 순찰 AI
몬스터 공격 AI
몬스터 대기 모드 AI
몬스터 상태이상</p>
<ul>
<li>스턴</li>
<li>다운</li>
</ul>
<p>====================
집단전</p>
<p>캐릭터 그룹 분류
다른 그룹 공격
캐릭터당 공격 인원 제한
그룹 전투 상태 동시 돌입
그룹 비전투 상태 돌입</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[2025.08.11 김진우 포트폴리오 2차 - 34일차]]></title>
            <link>https://velog.io/@jwoo_/2025.08.11-%EA%B9%80%EC%A7%84%EC%9A%B0-%ED%8F%AC%ED%8A%B8%ED%8F%B4%EB%A6%AC%EC%98%A4-2%EC%B0%A8-34%EC%9D%BC%EC%B0%A8</link>
            <guid>https://velog.io/@jwoo_/2025.08.11-%EA%B9%80%EC%A7%84%EC%9A%B0-%ED%8F%AC%ED%8A%B8%ED%8F%B4%EB%A6%AC%EC%98%A4-2%EC%B0%A8-34%EC%9D%BC%EC%B0%A8</guid>
            <pubDate>Sun, 10 Aug 2025 18:04:42 GMT</pubDate>
            <description><![CDATA[<p>!youtube[_e370nwgF70]</p>
<hr>
<p><strong>[현재 영상에 대한 작업 완료 내용]</strong></p>
<ol>
<li>점프 공격</li>
<li>공중 콤보 ( 플레이어 지면, 적 공중)</li>
<li>공중 콤보 ( 플레이어, 적 공중 )</li>
<li>내려찍기 공격</li>
<li>처형 공격<br/></li>
</ol>
<p><strong>[트러블 슈팅(문제 발생 사항, 현재 고민 중인 사항)]</strong></p>
<ol>
<li>몬스터 AI Equip Task 동작에서 가끔 상태가 버벅이는 문제 발생
&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp     - 몬스터 그룹 전투 타겟 설정에 의한 상태 변경과 Service 상태 변경이 겹치는 것으로 예상된다.<br/></li>
</ol>
<p><strong>[솔루션(트러블 슈팅에 대한 해결 방안)]</strong></p>
<ol>
<li>몬스터 AI Equip Task 동작에서 가끔 상태가 버벅이는 문제
&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp     - AIPerception 부분에서 상태 변경을 직접 하는 부분에서 조건을 추가해 상태가 바뀔 때 즉시 변경을 하지 않도록 한다.<br/></li>
</ol>
<p><strong>[작업 예정 사항]</strong></p>
<ol>
<li>버그 수정
&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp    - 몬스터 AI
&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp    - Enemy Dead 관련 예외처리<br/>

</li>
</ol>
<p><strong>[작업 완료 사항(누적)]</strong>
플레이어 이동
플레이어 공격
&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    - 저스트 가드</p>
<p>몬스터 AI
&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp    - 몬스터 이동 AI
&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp    - 몬스터 순찰 AI
&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp    - 몬스터 공격 AI 
&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp    - 몬스터 대기 모드 AI</p>
<p>몬스터 상태이상 
&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp    - 스턴</p>
<p>집단전
&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp    - 타겟 설정
&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp    - 전투 상태 돌입</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[2025.08.04 김진우 포트폴리오 2차 - 27일차]]></title>
            <link>https://velog.io/@jwoo_/2025.08.04-%EA%B9%80%EC%A7%84%EC%9A%B0-%ED%8F%AC%ED%8A%B8%ED%8F%B4%EB%A6%AC%EC%98%A4-2%EC%B0%A8-27%EC%9D%BC%EC%B0%A8</link>
            <guid>https://velog.io/@jwoo_/2025.08.04-%EA%B9%80%EC%A7%84%EC%9A%B0-%ED%8F%AC%ED%8A%B8%ED%8F%B4%EB%A6%AC%EC%98%A4-2%EC%B0%A8-27%EC%9D%BC%EC%B0%A8</guid>
            <pubDate>Sun, 03 Aug 2025 17:46:18 GMT</pubDate>
            <description><![CDATA[<p>!youtube[QZyIolqP3hg]</p>
<hr>
<p><strong>[현재 영상에 대한 작업 완료 내용]</strong></p>
<ol>
<li>점프 공격</li>
<li>공중 콤보 ( 플레이어 지면, 적 공중)</li>
<li>공중 콤보 ( 플레이어, 적 공중 )</li>
<li>내려찍기 공격<br/></li>
</ol>
<p><strong>[트러블 슈팅(문제 발생 사항, 현재 고민 중인 사항)]</strong></p>
<ol>
<li>처형 모션 연출 타이밍 맞추는 방법에 대한 고민</li>
</ol>
<p>타이밍 조절할 항목</p>
<ul>
<li>플레이어 처형 모션</li>
<li>몬스터의 피격 모션</li>
<li>카메라 이동</li>
<li>주변 몬스터 시간 멈춤<br/></li>
<li>*[솔루션(트러블 슈팅에 대한 해결 방안)]**</li>
</ul>
<ol>
<li>처형 모션 연출 타이밍 맞추는 방법에 대한 고민
 1-1. AnimNotify를 사용해 애니메이션 타이밍에 맞춰 함수 실행
 1-2. TimerHandle를 이용해 지연 실행으로 타이밍 실행
 1-3. 상태값 변수를 기반으로 Tick에서 처리</li>
</ol>
<p>플레이어 처형 모션에 대해서는 카메라 동작이 완료된 뒤 1-3 방식으로 실행하도록 결정</p>
<p>몬스터의 피격 모션은 피격 당시에 몬스터의 움직임이 멈춰 있을 것이기 때문에 Overlap 이후 1-2 방식으로 처리하는 것이 상태 변화에 문제가 없을 것으로 예상됨. 1-1 방식을 사용할 경우 정확한 타이밍 조절이 가능할 것으로 예상되지만, 상태 변화에서 다른 함수와 겹칠 가능성이 있을 것으로 예산됨. 따라서 1-2 방식으로 결정</p>
<p>카메라 이동은 시작 시점은 처형 모션 입력이 시작할 때 동시에 시작해서 World 시간 흐름에 따라 이동하면 될 것으로 에상됨. 종료 시점에서는 플레이어 모션을 시작하고 다른 추가 동작을 위한 변수 상태값을 변경하는 것으로 마무리하도록 결정</p>
<p>주변 몬스터 시간 멈춤에 대해서는 카메라 이동 전에 멈추고 delegate를 이용해 처형 모션 마무리를 확인할 수 있는 변수에 따라 원래 대로 돌려주면 해결이 가능할 것으로 예상됨.
<br/>
<strong>[작업 예정 사항]</strong></p>
<ol>
<li>처형 모션</li>
<li>애니메이션 변경</li>
<li>에셋 추가<br/>

</li>
</ol>
<p><strong>[작업 완료 사항(누적)]</strong>
플레이어 이동
플레이어 공격
&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    - 저스트 가드</p>
<p>몬스터 AI
&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp    - 몬스터 이동 AI
&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp    - 몬스터 순찰 AI
&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp    - 몬스터 공격 AI 
&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp    - 몬스터 대기 모드 AI</p>
<p>몬스터 상태이상 
&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp    - 스턴</p>
<p>집단전
&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp    - 타겟 설정
&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp    - 전투 상태 돌입</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Unreal 5] 컨테이너]]></title>
            <link>https://velog.io/@jwoo_/Unreal5-Container</link>
            <guid>https://velog.io/@jwoo_/Unreal5-Container</guid>
            <pubDate>Thu, 31 Jul 2025 16:22:07 GMT</pubDate>
            <description><![CDATA[<h2 id="tarray">TArray</h2>
<p>동적 배열, C++의 <code>std::vector</code>와 유사하다.</p>
<ul>
<li>연속적인 메모리 블록을 사용한다. → 캐시 친화적, 빠른 순차 접근.</li>
<li>인덱스를 이용해 접근 가능하다. (Array[i]).</li>
<li>크기가 가변적이다. → Add, Insert, Remove 등으로 원소 추가/삭제.</li>
</ul>
<h4 id="특징">특징</h4>
<p><strong>- 랜덤 접근이 빠르다.</strong>
&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp메모리 주소가 연속되어 있으므로,
&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp주소 = 시작주소 + (i * sizeof(T))로 바로 계산 가능 → O(1).</p>
<p><strong>- 중간에 삽입/삭제가 느리다.</strong>
&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp연속되어있는 다른 원소들을 모두 밀거나 앞으로 당겨야 하기 때문에 느리다.</p>
<h2 id="tset">TSet</h2>
<p>집합, C++의 <code>std::unordered_set</code>과 유사하다.</p>
<ul>
<li>고유한 값만 저장한다. (중복 불가).</li>
<li>해시 기반 컨테이너이다. → 빠른 탐색 (O(1) 기대).</li>
<li>순서를 보장하지 않는다. (삽입 순서 유지 안 됨).</li>
</ul>
<h4 id="특징-1">특징</h4>
<p><strong>- 중복 데이터 방지</strong>
&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp해시 기반 버킷(Hash Bucket) 구조이기 때문에 같은 값을 Add하면 추가되지 않는다.</p>
<p><strong>- 검색이 빠르다.</strong>
&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbspContains()는 값의 해시(hash)를 계산해서 특정 버킷(슬롯) 위치를 바로 알 수 있다.</p>
<h2 id="tmap">TMap</h2>
<p>해시 맵, C++의 <code>std::unordered_map</code>과 유사하다.</p>
<ul>
<li>Key → Value 매핑 구조이다.</li>
<li>내부적으로 TSet 기반으로 구현된다.</li>
<li>빠른 검색, 삽입, 삭제가 가능하다.</li>
</ul>
<h2 id="사용되는-상황">사용되는 상황</h2>
<p>순서 있고 인덱스로 접근 필요 → <code>TArray</code>
중복 없는 값 모음 → <code>TSet</code>
Key-Value 매핑 → <code>TMap</code></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Unreal 5] 스마트포인터]]></title>
            <link>https://velog.io/@jwoo_/%EC%8A%A4%EB%A7%88%ED%8A%B8%ED%8F%AC%EC%9D%B8%ED%84%B0</link>
            <guid>https://velog.io/@jwoo_/%EC%8A%A4%EB%A7%88%ED%8A%B8%ED%8F%AC%EC%9D%B8%ED%84%B0</guid>
            <pubDate>Tue, 29 Jul 2025 16:21:21 GMT</pubDate>
            <description><![CDATA[<h2 id="tuniqueptr">TUniquePtr</h2>
<ul>
<li>C++의 std::unique_ptr과 유사하다.</li>
<li>단일 소유권을 가지는 포인터로, 복사가 불가능하고 이동만 허용된다.</li>
</ul>
<h2 id="tsharedptr">TSharedPtr</h2>
<ul>
<li>C++의 std::shared_ptr와 유사한 참조 카운팅 방식으로 공유 소유권을 가지고 객체를 관리한다.</li>
<li>여러 곳에서 참조 가능하고, 모든 참조가 해제되면 자동 소멸.</li>
<li>일반 C++ 객체에서만 사용 가능하고, UObject에는 사용할 수 없다.</li>
</ul>
<h2 id="tweakptr">TWeakPtr</h2>
<ul>
<li>TSharedPtr의 약한 참조(Weak Reference)로 실제 객체의 소유권을 갖지 않는다.</li>
<li>객체가 유효할 때만 접근 가능하다.</li>
</ul>
<h2 id="tobjectptr">TObjectPtr</h2>
<ul>
<li>UObject를 더 안전하게 관리하기 위한 스마트 포인터이다.</li>
<li>일반적으로 UPROPERTY에서 사용하고, 기존의 UObject 포인터를 대체한다.</li>
<li>GC(가비지 컬렉션)에 의해 관리되지만, nullptr 안정성이 보장된다.</li>
</ul>
<h2 id="tsoftobjectptr">TSoftObjectPtr</h2>
<ul>
<li>Soft Reference로 지연 로딩 가능한 UObject 참조 포인터이다. 즉, 참조하는 에셋이 항상 메모리에 로드되지 않아도 경로를 저장해서 사용 가능하다.</li>
<li>실제 로딩 시점에만 메모리 사용하기 때문에 메모리 절약에 유리하다.</li>
</ul>
<h2 id="tsharedfromthis">TSharedFromThis</h2>
<ul>
<li>클래스 내부에서 자신을 가리키는 TSharedPtr을 반환할 수 있도록 하는 헬퍼 클래스이다.</li>
<li>TSharedFromThis 객체의 라이프사이클이 반드시 TSharedPtr 또는 TSharedRef에 의해 관리되어야 한다.</li>
<li>주로 자기 자신을 콜백/델리게이트에 바인딩하거나 타 객체에 TSharedPtr로 전달해야 할 때 사용된다.</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[2025.07.30 김진우 포트폴리오 2차 - 22일차]]></title>
            <link>https://velog.io/@jwoo_/2025.07.30-%EA%B9%80%EC%A7%84%EC%9A%B0-%ED%8F%AC%ED%8A%B8%ED%8F%B4%EB%A6%AC%EC%98%A4-2%EC%B0%A8-22%EC%9D%BC%EC%B0%A8</link>
            <guid>https://velog.io/@jwoo_/2025.07.30-%EA%B9%80%EC%A7%84%EC%9A%B0-%ED%8F%AC%ED%8A%B8%ED%8F%B4%EB%A6%AC%EC%98%A4-2%EC%B0%A8-22%EC%9D%BC%EC%B0%A8</guid>
            <pubDate>Tue, 29 Jul 2025 16:20:37 GMT</pubDate>
            <description><![CDATA[<p>!youtube[-xek8Oz-be8]</p>
<hr>
<p><strong>[현재 영상에 대한 작업 완료 내용]</strong></p>
<ol>
<li>공중 공격 
&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp   - 공중 콤보<br/></li>
</ol>
<p><strong>[트러블 슈팅(문제 발생 사항, 현재 고민 중인 사항)]</strong></p>
<p><strong>[솔루션(트러블 슈팅에 대한 해결 방안)]</strong></p>
<p><strong>[작업 예정 사항]</strong></p>
<ol>
<li>공중 공격
&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp  - 점프 공격 
&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp  - 공중에서 내려찍기<br/>

</li>
</ol>
<p><strong>[작업 완료 사항(누적)]</strong>
플레이어 이동
플레이어 공격
&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp      - 공중 콤보
플레이어 방어 
&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp    - 저스트 가드</p>
<p>몬스터 AI
&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp    - 몬스터 이동 AI
&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp    - 몬스터 순찰 AI
&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp    - 몬스터 공격 AI 
&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp    - 몬스터 대기 모드 AI</p>
<p>몬스터 상태이상 
&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp    - 스턴</p>
<p>집단전
&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp    - 타겟 설정
&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp    - 전투 상태 돌입</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[DX] 법선 벡터(Normal Vector)]]></title>
            <link>https://velog.io/@jwoo_/DX-%EB%B2%95%EC%84%A0-%EB%B2%A1%ED%84%B0</link>
            <guid>https://velog.io/@jwoo_/DX-%EB%B2%95%EC%84%A0-%EB%B2%A1%ED%84%B0</guid>
            <pubDate>Tue, 29 Jul 2025 00:41:50 GMT</pubDate>
            <description><![CDATA[<h2 id="정의">정의</h2>
<p>어떤 표면의 한 점에서, 그 점을 포함하는 <strong>접평면에 수직인 단위벡터</strong>이다.</p>
<p>단위벡터이므로 크기는 보통 1로 정규화 되어있고, 방향은 표면의 바깥쪽을 향한다.</p>
<p>표면이 어느 방향을 바라보고 있는지를 결정하며, 광원과 표면의 각도에 따라 빛의 세기 및 그림자, 반사, 하이라이트 등을 사실적으로 표현하는 데 사용한다.</p>
<h2 id="계산-방법">계산 방법</h2>
<h3 id="면-법선face-normal-계산">면 법선(Face Normal) 계산</h3>
<p>삼각형의 법선: 세 점 $p_0, p_1, p_2$가 있을 때 외적을 이용해 방향을 구하고, 정규화를 통해 단위 벡터로 변환한다.</p>
<p>  $$
  \text{Normal} = \frac{(p_1 - p_0) \times (p_2 - p_0)}{|(p_1 - p_0) \times (p_2 - p_0)|}
  $$</p>
<p>  여기서 <code>×</code>는 <strong>벡터 외적</strong>이다.</p>
<h3 id="정점-법선vertex-normal-계산">정점 법선(Vertex Normal) 계산</h3>
<p>정점 법선은 그 정점을 공유하는 면 법선들의 평균으로 정의됨</p>
<h2 id="렌더링-파이프라인-활용-예시">렌더링 파이프라인 활용 예시</h2>
<ol>
<li><p><strong>입력 단계 (정점 데이터 준비)</strong>
모델 파일(예: FBX, OBJ)에 저장된 <strong>정점 위치 + 정점 법선</strong>이 GPU로 전달된다.</p>
</li>
<li><p><strong>버텍스 셰이더(Vertex Shader)</strong>
 정점 좌표와 정점 법선을 <strong>모델 공간 → 월드 공간 → 뷰 공간</strong>으로 변환한다.
정점 법선이 이후 조명 계산에 사용될 수 있도록 넘겨준다.</p>
</li>
<li><p><strong>래스터화(Rasterization)</strong>
삼각형 내부 픽셀을 생성한다.
이때 정점에 있던 법선들이 보간되어 픽셀별 <strong>표면 법선</strong>이 만들어진다.</p>
</li>
<li><p><strong>픽셀 셰이더(Pixel Shader / Fragment Shader)</strong>
 보간된 <strong>표면 법선</strong>과 광원(Light) 방향, 카메라 방향을 사용하여 <strong>조명 공식(Phong, Blinn-Phong 등)</strong> 계산한다.
결과적으로 픽셀마다 밝기, 색상, 하이라이트(광택) 등이 결정된다.</p>
</li>
<li><p><strong>최종 출력</strong>
 모든 픽셀의 색상이 합쳐져 <strong>부드럽게 음영 처리된 3D 모델</strong>이 화면에 렌더링된다.</p>
</li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[[DX] 정점 접공간]]></title>
            <link>https://velog.io/@jwoo_/%EC%A0%95%EC%A0%90-%EC%A0%91%EA%B3%B5%EA%B0%84</link>
            <guid>https://velog.io/@jwoo_/%EC%A0%95%EC%A0%90-%EC%A0%91%EA%B3%B5%EA%B0%84</guid>
            <pubDate>Mon, 28 Jul 2025 00:31:44 GMT</pubDate>
            <description><![CDATA[<h2 id="정의">정의</h2>
<p>메시의 각 정점에서 정의되는 직교 좌표계로, 법선 맵을 이용한 조명에서 부드러운 표면 효과를 얻기 위해 사용된다.
이를 위해 삼각형별로 계산된 접공간 벡터들을 정점 기준으로 평균 내어 정점별 접공간을 만들며, 이 과정은 정점 법선을 평균 내어 부드러운 표면을 흉내 내는 방식과 유사하다.</p>
<p>즉, 메시의 정점 v에 대해, v를 공유하는 메시의 모든 삼각형의 접벡터들의 평균을 구해 정점의 접벡터 T를 결정하고, 종법선 벡터도 평균을 구해 정점의 종법선 벡터 B를 구한다.</p>
<h2 id="1-접공간과-물체-공간-사이의-좌표계-관계">1. 접공간과 물체 공간 사이의 좌표계 관계</h2>
<p>메시의 각 정점에는 정규직교 기저인 TBN(Tangent, Bitangent, Normal) 벡터가 정의되어 있으며, 이로부터 접공간 좌표계가 만들어진다.
<strong>즉, 접공간에서 물체 공간으로 변환하는 행렬은 다음과 같다</strong></p>
<p>$$
M_{object} = \begin{bmatrix}
T_x &amp; T_y &amp; T_z \
B_x &amp; B_y &amp; B_z \
N_x &amp; N_y &amp; N_z
\end{bmatrix}
$$</p>
<p>이 행렬은 <strong>접공간 좌표를 물체 공간 좌표로 변환</strong>한다.</p>
<hr>
<h2 id="2-물체-공간-→-접공간-변환">2. 물체 공간 → 접공간 변환</h2>
<p>위 행렬은 정직교행렬이므로 <strong>전치 행렬이 곧 역행렬</strong>이다.
따라서 <strong>물체 공간에서 접공간으로의 변환 행렬</strong>은</p>
<p>$$
M_{tangent} = M_{object}^{-1} = M_{object}^T
= \begin{bmatrix}
T_x &amp; B_x &amp; N_x \
T_y &amp; B_y &amp; N_y \
T_z &amp; B_z &amp; N_z
\end{bmatrix}
$$</p>
<hr>
<h2 id="3-접공간-→-세계-공간-변환-쉐이더에서-조명-계산-시-필요">3. 접공간 → 세계 공간 변환 (쉐이더에서 조명 계산 시 필요)</h2>
<p>쉐이더에서는 조명 계산을 위해 <strong>법선 벡터를 세계 공간 기준</strong>으로 변환해야 한다.
이를 위해 접공간 → 물체 공간 변환 후, 물체 공간 → 세계 공간 변환 행렬 $M_{world}$를 곱한다.</p>
<p>$$
\vec{n}<em>{world} = (\vec{n}</em>{tangent} \cdot M_{object}) \cdot M_{world}
$$</p>
<p>혹은 행렬 결합을 이용해 한 번에</p>
<p>$$
\vec{n}<em>{world} = \vec{n}</em>{tangent} \cdot (M_{object} \cdot M_{world})
$$</p>
<hr>
<h2 id="4-tbn-행렬을-직접-세계-공간-기준으로-만들기">4. TBN 행렬을 직접 세계 공간 기준으로 만들기</h2>
<p>아예 접공간을 세계 공간 기준으로 직접 표현할 수도 있습니다. 즉, <strong>T, B, N 벡터를 세계 공간으로 직접 변환</strong>해놓는다.</p>
<p>이때는 다음처럼 계산된다.</p>
<p>$$
M_{object \to world} =
\begin{bmatrix}
T&#39;<em>x &amp; T&#39;_y &amp; T&#39;_z \
B&#39;_x &amp; B&#39;_y &amp; B&#39;_z \
N&#39;_x &amp; N&#39;_y &amp; N&#39;_z
\end{bmatrix}
= 
\begin{bmatrix}
T \cdot M</em>{world} \
B \cdot M_{world} \
N \cdot M_{world}
\end{bmatrix}
$$</p>
<p>이렇게 하면 <strong>접공간 기준 벡터들을 곧바로 세계 공간 좌표계로 변환</strong>하여 사용 가능하다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[DX] 텍스처 공간(Texture Space) / 접 공간(Tangent Space)]]></title>
            <link>https://velog.io/@jwoo_/DX-%ED%85%8D%EC%8A%A4%EC%B2%98%EA%B3%B5%EA%B0%84-%EC%A0%91%EA%B3%B5%EA%B0%84</link>
            <guid>https://velog.io/@jwoo_/DX-%ED%85%8D%EC%8A%A4%EC%B2%98%EA%B3%B5%EA%B0%84-%EC%A0%91%EA%B3%B5%EA%B0%84</guid>
            <pubDate>Sun, 27 Jul 2025 16:18:29 GMT</pubDate>
            <description><![CDATA[<h1 id="텍스처-공간-texture-space">텍스처 공간 (Texture Space)</h1>
<h3 id="정의">정의</h3>
<ul>
<li>Mesh의 각 정점이 가지고 있는 <strong>UV좌표계</strong>를 기반으로 정의된 2D공간이다. 텍스처 맵은 이 UV 좌표계에 따라 2D 이미지처럼 표현된다.</li>
</ul>
<h3 id="구성">구성</h3>
<p>일반적으로 <code>(U, V)</code> 좌표를 사용하지만, 법선 맵을 사용할 때는 이 UV에 수직인 방향(= 접선 공간)도 필요하다.</p>
<p>그래서 텍스처 공간에서의 3축을 다음과 같이 생각할 수 있다.
U 방향 → Tangent (접선)
V 방향 → Bitangent (BiTangent, Binormal)
UV에 수직한 방향 → Normal (표면 법선)</p>
<hr>
<h1 id="접-공간-tangent-space">접 공간 (Tangent Space)</h1>
<h3 id="정의-1">정의</h3>
<ul>
<li>Mesh의 각 정점에서 정의된 표면을 기준으로 하는 <strong>로컬 좌표계</strong>이다.</li>
</ul>
<p>보통 법선 맵을 월드 공간이나 뷰 공간이 아닌, 텍스처 공간 기반으로 적용하기 위해 사용된다.</p>
<h3 id="구성-1">구성</h3>
<p>Tangent (T): U 방향 (텍스처의 가로 방향)
Bitangent (B): V 방향 (텍스처의 세로 방향)
Normal (N): 표면 법선 (T × B 또는 주어진 법선)</p>
<p>이 3개 벡터 (T, B, N)는 보통 직교화된 정규화 벡터이며, Mesh의 표면에서 로컬 좌표계를 구성한다.</p>
<hr>
<h1 id="tbn-matrix">TBN Matrix</h1>
<pre><code>        | T.x  B.x  N.x |
TBN =   | T.y  B.y  N.y |
        | T.z  B.z  N.z |</code></pre><ul>
<li><code>mul(normalTS, TBN)</code> → 월드 공간의 법선 방향</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[DX] 법선맵 (Normal Map)]]></title>
            <link>https://velog.io/@jwoo_/DX-%EB%B2%95%EC%84%A0%EB%A7%B5</link>
            <guid>https://velog.io/@jwoo_/DX-%EB%B2%95%EC%84%A0%EB%A7%B5</guid>
            <pubDate>Sun, 27 Jul 2025 16:18:19 GMT</pubDate>
            <description><![CDATA[<h2 id="정의">정의</h2>
<p>법선맵(Normal Map)이란 압축된 x, y, z 좌표성분들을 각각 R, G, B 채널에 담겨져 표현되는 하나의 텍스처이다.</p>
<p>법선맵을 사용하면 표면의 미세한 디테일 표현이 가능해지고, 실제로 정점을 추가하지 않더라도 조명에 대한 굴곡 표현을 정밀하게 조작할 수 있게 하는 라이팅 트릭 기법에 사용된다.</p>
<p>이때, Normal Map은 Tangent Space에서 정의되어 있고, 실제 조명 계산은 World Space 또는 View Space에서 수행되므로 Tangent Space → World/View Space 변환이 필요하다.</p>
<blockquote>
</blockquote>
<p>법선(Normal) : 어떤 표면의 수직 방향을 나타내는 벡터
Tangent Space : 물체의 메시 표면 기준 좌표계</p>
<h2 id="예시">예시</h2>
<p><img src="https://velog.velcdn.com/images/jwoo_/post/ebd60674-c571-4e7c-ab72-c50e2fec82c0/image.png" alt="">여기서 좌표축(T = x, N = y, B = z)를 제외한 화살표는 전부 법선을 표현한 것으로, 방향에 따라 R, G, B 색으로 Normal Map에서 표현된다.
T, N, B는 Tangent Space에서 사용되는 좌표계이다.</p>
<p><img src="https://velog.velcdn.com/images/jwoo_/post/2743a544-e6cb-4a35-a51e-03ccf08e641b/image.png" alt=""> 왼쪽이 일반 .png 사진이고, 오른쪽이 NomalMap으로 표현된 사진이다.</p>
<h2 id="directx에서-법선맵-적용">DirectX에서 법선맵 적용</h2>
<ol>
<li><p><strong>셰이더에서 노멀맵 샘플링</strong></p>
<pre><code class="language-hlsl">float3 normalMapSample = texNormalMap.Sample(sampler, texCoord).rgb;</code></pre>
</li>
<li><p><strong>RGB → 벡터 변환</strong></p>
<pre><code class="language-hlsl">float3 normalTangent = normalize(normalMapSample * 2.0f - 1.0f); // [0,1] → [-1,1]</code></pre>
</li>
<li><p><strong>Tangent Space → World Space 변환</strong></p>
<pre><code class="language-hlsl">float3x3 TBN = float3x3(tangent, bitangent, normal); // tangent basis
float3 normalWorld = mul(normalTangent, TBN);</code></pre>
</li>
<li><p><strong>조명 연산에 사용</strong></p>
<pre><code class="language-hlsl">float lightIntensity = max(dot(normalWorld, lightDir), 0);</code></pre>
</li>
</ol>
<h2 id="lighting-적용을-위한-공간-변환">Lighting 적용을 위한 공간 변환</h2>
<p>노멀맵은 Tangent Space에 정의되어 있으므로 월드/뷰 공간으로 변환해야 조명 계산에 쓸 수 있다.</p>
<p>이 과정에서 [0, 1] 범위를 가지고 있는 노멀맵의 RGB는 실제 벡터의 [-1, 1] 범위로 변환이 되어야 한다.</p>
<h4 id="1--노멀맵-샘플링">1.  노멀맵 샘플링</h4>
<pre><code class="language-hlsl">float3 normalSample = texNormalMap.Sample(sampler, input.TexCoord).rgb;</code></pre>
<h4 id="2--rgb-→-방향-벡터-디코딩">2.  RGB → 방향 벡터 디코딩</h4>
<pre><code class="language-hlsl">float3 normalTS = normalize(normalSample * 2.0f - 1.0f);</code></pre>
<ul>
<li><code>RGB(0.5, 0.5, 1.0)</code> → <code>(0, 0, 1)</code> (표면 밖 방향)</li>
<li><code>2.0f * RGB - 1.0f</code>을 통해 [0,1] → [-1,1]로 변환된다.</li>
</ul>
<h4 id="3--tbn-행렬-구성">3.  TBN 행렬 구성</h4>
<pre><code class="language-hlsl">float3 T = normalize(input.Tangent);
float3 N = normalize(input.Normal);
float3 B = normalize(cross(N, T)); // Bitangent는 보통 cross로 생성

float3x3 TBN = float3x3(T, B, N);  // 각 벡터는 열 벡터</code></pre>
<ul>
<li>이 행렬은 Tangent Space를 World Space로 변환하는 역할을 한다.</li>
<li>경우에 따라, Tangent/Bitangent/Normal은 월드 공간에서 주어지기도 한다.</li>
</ul>
<h4 id="4-벡터-변환-tangent-→-world">4. 벡터 변환: Tangent → World</h4>
<pre><code class="language-hlsl">float3 normalWS = mul(normalTS, TBN);  // normalTS는 tangent space에서의 벡터</code></pre>
<ul>
<li><code>mul()</code>은 행렬-벡터 곱이다.</li>
<li>이 결과가 <strong>World Space에서의 실제 법선 방향</strong>이 된다.</li>
</ul>
<hr>
]]></description>
        </item>
        <item>
            <title><![CDATA[2025.07.28 김진우 포트폴리오 2차 - 20일차]]></title>
            <link>https://velog.io/@jwoo_/2025.07.28-%EA%B9%80%EC%A7%84%EC%9A%B0-%ED%8F%AC%ED%8A%B8%ED%8F%B4%EB%A6%AC%EC%98%A4-2%EC%B0%A8-20%EC%9D%BC%EC%B0%A8</link>
            <guid>https://velog.io/@jwoo_/2025.07.28-%EA%B9%80%EC%A7%84%EC%9A%B0-%ED%8F%AC%ED%8A%B8%ED%8F%B4%EB%A6%AC%EC%98%A4-2%EC%B0%A8-20%EC%9D%BC%EC%B0%A8</guid>
            <pubDate>Sun, 27 Jul 2025 16:17:46 GMT</pubDate>
            <description><![CDATA[<p>!youtube[AwqH3k6vluk]</p>
<hr>
<p><strong>[현재 영상에 대한 작업 완료 내용]</strong></p>
<ol>
<li>C++ 변환 작업
&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp    - 몬스터 AI
&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp - 스트레이프 대기 모드
&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp - 그룹 전투<br/></li>
</ol>
<p><strong>[트러블 슈팅(문제 발생 사항, 현재 고민 중인 사항)]</strong></p>
<p><strong>[솔루션(트러블 슈팅에 대한 해결 방안)]</strong></p>
<p><strong>[작업 예정 사항]</strong></p>
<ol>
<li>공중 공격</li>
</ol>
<br/>

<p><strong>[작업 완료 사항(누적)]</strong>
플레이어 이동
플레이어 공격
플레이어 방어 
&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp    - 저스트 가드</p>
<p>몬스터 AI
&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp    - 몬스터 이동 AI
&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp    - 몬스터 순찰 AI
&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp    - 몬스터 공격 AI 
&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp    - 몬스터 대기 모드 AI</p>
<p>몬스터 상태이상 
&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp    - 스턴</p>
<p>집단전
&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp    - 타겟 설정
&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp    - 전투 상태 돌입</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[DX] 직교화 (Orthogonalization)]]></title>
            <link>https://velog.io/@jwoo_/DX-%EC%A7%81%EA%B5%90%ED%99%94-Orthogonalization</link>
            <guid>https://velog.io/@jwoo_/DX-%EC%A7%81%EA%B5%90%ED%99%94-Orthogonalization</guid>
            <pubDate>Thu, 24 Jul 2025 16:35:53 GMT</pubDate>
            <description><![CDATA[<h2 id="정의">정의</h2>
<p>직교화(Orthogonalization)는 여러 벡터 집합에서 서로 수직(직교)인 벡터 집합을 만드는 과정이다. </p>
<p>두 벡터 u,v가 있다면, 이들 사이의 내적이 0이면 u⊥v라 하며, 이럴 때 <strong>두 벡터는 서로 직교한다</strong>고 한다.</p>
<p>직교화의 대표적인 목적은 주어진 벡터들로부터 직교기저(orthogonal basis) 혹은 정규직교집합(orthonormal set)을 만드는 것이다.</p>
<h2 id="그람---슈미트-과정을-이용한-직교화">그람 - 슈미트 과정을 이용한 직교화</h2>
<ul>
<li>일차독립 벡터들로부터 직교기저를 만드는 대표적인 방법이다.</li>
</ul>
<p>벡터 집합 $\vec{v}_0, \vec{v}_1$에 대해 데카르트 좌표계 (2D 평면) 상에서</p>
<ol>
<li>${w}_0 = {v}_0$</li>
<li>${w}<em>1 = {v}_1 - \text{proj}</em>{u_0}({v}_1)$</li>
</ol>
<p>으로 표현이 가능하다.</p>
<p><img src="https://velog.velcdn.com/images/jwoo_/post/13f4680b-2e88-439a-8050-7c70105b2e30/image.png" alt="그람-슈미트"></p>
<h2 id="외적을-이용한-직교화">외적을 이용한 직교화</h2>
<ul>
<li>벡터 $\vec{v}_1, \vec{v}_2$에서 시작해서 직교 벡터 3개를 만들 수 있다.<br/>


</li>
</ul>
<p>$\vec{v}_1 = (1, 0, 0) , \vec{v}_2 = (1, 1, 0)$으로 두 벡터가 주어져 있다고 가정한다.</p>
<ol>
<li><p>첫 번째 벡터는 그대로 사용:</p>
<p>$$
u_1 = v_1 = (1, 0, 0)
$$</p>
</li>
<li><p>$v_2$에서 $u_1$ 방향 성분을 제거:</p>
<p>$$
\text{proj}_{u_1}(v_2) = \frac{v_2 \cdot u_1}{u_1 \cdot u_1} u_1 = \frac{1}{1}(1, 0, 0) = (1, 0, 0)
$$</p>
<br/>

<p>$$
u_2 = v_2 - \text{proj}_{u_1}(v_2) = (1,1,0) - (1,0,0) = (0,1,0)
$$
이제 $u_1$과 $u_2$는 서로 직교한다.</p>
</li>
<li><p>$u_3$는 $u_1, u_2$의 외적을 이용해 구한다.</p>
<p>$$
u_3 = u_1 \times u_2 = (1,0,0) \times (0,1,0) = (0,0,1)
$$</p>
<br/>

</li>
</ol>
<p>이렇게 해서 구해진 직교 벡터 집합은 다음과 같다.
$$
{u_1 = (1,0,0),\quad u_2 = (0,1,0),\quad u_3 = (0,0,1)}
$$</p>
]]></description>
        </item>
    </channel>
</rss>