BurningTimesAi/공유/대화로그/FirstRising/2026-09-19_비주얼개선_자율작업_인수인계.md

83 lines
10 KiB
Markdown
Raw Permalink Normal View History

# FirstRising 비주얼 개선 — 자율 작업 인수인계서 (2026-09-19 · 세션 2)
> ⚠️ **최신 인계서는 `2026-09-19_비주얼개선_세션3_인수인계.md`** 이다(세션 3 시작용). 이 문서는 세션 2 기록으로 보존한다.
> 작성: 총괄PM (세션 기록 10MB 도달 — C40). 이 문서 한 장으로 다음 세션을 시작한다. 이전 인계서 = `2026-09-19_비주얼개선_세션인수인계.md`(원칙·부록 A 원문).
## 0. 다음 세션 첫 프롬프트
```
FirstRising 비주얼 개선 자율 작업을 이어서 진행해.
인계서 E:\BurningTimes\공유\대화로그\FirstRising\2026-09-19_비주얼개선_자율작업_인수인계.md 를 먼저 읽어라.
목표(디아블로식 고퀄 3D 액션 RPG 비주얼 + 타격감)에 도달할 때까지 중단 없이 반복 개선한다.
§4 남은 작업부터 이어서 하고, 원칙(§1)은 그대로 지킨다.
```
## 1. PD 지시 (이번 세션 누적 — 모두 유효)
- 목표: 현재 에셋 + 셰이더·조명·후처리·VFX·카메라로 **디아블로식 핵앤슬래시 "고퀄리티 3D 액션 RPG 비주얼 + 타격감"**, 상업 판매 가능 수준
- **목표 도달까지 자율 반복, 절대 중단 금지**(허락 대기·파일 보고로 멈추지 말 것)
- 텍스처 개선 필요 시 ComfyUI(`C:\Comfyui`, Comfy Desktop) 연동, 참고 = pinterest.com · civitai.com
- **모델·LoRA·필터 등 자율 다운로드 허락**(파일 정보는 최종 보고에). 자체 원칙: `.safetensors` 만, 실행파일·pickle 금지
- 기존 원칙 유지: 게임 코드·원본 에셋·ProjectSettings·실제 게임 맵 무수정, 작업 위치 = `Assets/Scenes/TestVisual.unity`(+`TestVisual/TestVisual_Map.unity`) · `Assets/BurningTimes/Visual/`, `bt/work` Phase 커밋·**push 금지**, 감사 에이전트 금지
- **원본 반영은 TestVisual 에서 모두 마친 뒤 PD 지시 시**. 원본 URP·맵을 테스트에 쓸 땐 복사본으로 작업
- **세션 전환 권고·요구 금지**(PD 지적)
## 2. 핵심 발견 (보고 필수)
1. **맵 조명 8개가 실행 중 기여 0** — 서브씬이 L_FG 데모 `LightmapSnapshot.asset`(라이트맵 불일치)을 참조 → 조명이 Baked 로 처리돼 실시간에서 빠짐. TestVisual_Map 에서 참조 해제·Realtime 전환으로 해결
2. **게임 후처리 그레이딩이 원천 불가** — 프로젝트 `Assets/PostProcessData.asset` 이 게임 전용 `Assets/GameAssets/Shader/UberPost.shader` 를 사용: `ApplyColorGrading` 주석 처리 + 고정 곡선 `(c/(c+0.4))^2` → 톤매핑·노출·색보정 불가, 중간톤 0.18→0.096 으로 눌려 **게임 전체가 어둡게 뭉침**(PD 불만 1의 근본 원인). TestVisual 전용 렌더러만 URP 표준 PostProcessData 로 교체
3. `PlayerFresnelRenderFeature` = 보호막·부활 **무적 표시**(림 아님), 몬스터 `_RimColor` = 피격 색 → 림은 별도 패스로
4. 실제 게임 화면 캐릭터 = LODGroup **LOD1 `URP_Lit_Player`**(IDA Shader Graph 는 3.5 m 이내 LOD0), 몬스터 = Midium 에서 `Shader.globalMaximumLOD=999` 로 SimpleLit(블린퐁) 서브셰이더
5. 해상도: 게임 코드가 목표 세로 1600/1000/800 px → 1920 화면 Ultra 0.83 · Midium 0.52 · Low 0.42 (역전 없음). **PD 결정 대기**(추천 0.75)
6. 그림자 거리 10 m(3등급 공통)라 원래 화면에 그림자가 안 생김(카메라→캐릭터 16 m)
7. Unity 네이티브 크래시 1회(02:56, Play 직후 그림자 SRP Batcher `RenderShadowCasterPartsSRPBatcher→GetBindMasks`) — 리포트 `%LOCALAPPDATA%\Temp\Unity\Editor\Crashes\Crash_2026-09-18_175652936`. 씬 백업은 scratchpad 로 이동 보존. 재현 여부 확인 중
8. `L_FG.../Coffin01.mat` 이 URP 자동 업그레이드로 로컬 변경(임포트 때마다 재발) — 커밋 제외, 렌더링 동일
## 3. 완료 (FirstRising `bt/work`, push 없음)
| 커밋 | 내용 |
|---|---|
| `e3fbd5da85` Phase2 | 전용 URP(Midium 복제, 그림자 25 m·1024·하드) + `VisualProfileSwitcher`(Play 중에만 교체·종료 시 원복) · 맵 조명 실시간 복구 · Trilight 환경광 · 반사 큐브맵 · 블롭 · 키 라이트 |
| `7fb2c4b6c4` Phase4 | TV_Volume_Main (당시 그레이딩 미적용 — 발견 2) |
| `6d27d9aa19` Phase3+4b | 재질 변형 7(스펙 중립화·매끈함·노멀) + 노멀맵 11(그레이스케일→노멀) + 지형 복제(노멀 레이어, 4 m) · 표준 PostProcessData · 노출 1.25 대비 16 채도 12 WB+6 비네트 0.3 · FSR 샤프 0.85 · 달빛 2.5 · 히어로 라이트 14/r12 · 청록 1.2 |
| `27048aebf2` Phase6+7 | 림(전용 렌더러 PlayerRimLight + TV_PlayerRim, 지수4·배율0.35) · `HitFeelDirector`(ECS 피격값 읽기 → 흔들림·히트스톱·불꽃·섬광·처치 빛) |
| `bcc3b67a1b` Phase5 | 선형 안개 18~65 m 청회색 · 분위기 먼지 · 등불 일렁임(`TVLightFlicker`) · 가려짐 실루엣 복사 셰이더(발끝 오검출 제거·푸른 반투명) |
| `8e3c4942d3` Phase8 | 카메라 옵션 `TVCameraProfile`(기본 꺼짐, 14 m·FOV 48) · 식생 그림자 끔(캐스터 90→74) |
- 최종 수치(공터·카메라 16 m): 평균 밝기 0.075 → 0.120 · 암부 60% → 17% · Draw 181 → 286 · SetPass 35 → 55 · 삼각형 8.0만 → 13.5만
- 기록 완료: PD 지시 로그 BT18 ⑨ 결과 · 대화로그 `2026-09-19.md` §5
| 커밋 | 내용 |
|---|---|
| `031dc33fbf` 해상도 | `WorldManager.cs` Midium 목표 세로 1000→1440 — `9026d835ce` 로 원복(PD: Test 씬 완료 후 원본 반영) |
| `3a5a455771` Phase9 | 근접 카메라 켬(PD 결정, 14 m·FOV 48) · `TVEntityBlobShadows`(몬스터 발밑) · 소프트 섀도 Low · 캐릭터 노출 정리 |
| `828a5dabc5` Phase10 | `TVShadowCasterSanitizer` — 그림자 패스 없는 그림자 캐스터 엔티티 43개 정리 → 에디터 크래시 2회의 원인 제거(전투 재현 2회 무크래시) |
| `516fb88f28` | 보스 1마리(EvilUndead7 idx 71, TestVisual 스폰 목록만) · `TVBossScale` · 렌더 해상도 0.75 를 스위처 `renderScaleOverride` 로 이동(TestVisual 전용) |
| `4e955f04d1` | 보스 5배 → 2배 (PD) |
| `5fc02132f2` | PD 지시 4건: 보스 16 m 이내 카메라 14→18.5 m·FOV 48→52(`TVCameraProfile`) · 적 피격 섬광 최고 0.45·0.09 s(`HitFeelDirector`) · 플레이어 무적(`TVTestCheats`) · P09 여전사 외형 교체(`TVCharacterSwap` + `Visual/Characters/TV_P09_Female.prefab`, lilToon→URP Lit 복사본 8, 원래 몸체의 레이어·렌더링 레이어 복사로 림·X-ray·프레넬·키라이트·블롭 동일 적용) |
- 최종(렌더 0.75·카메라 14 m): 평균 밝기 0.119 · Draw 235 · SetPass 56
| `6dd1563c6e` | 보스 스폰 지점 → 문 밖 공터 (2,-47) · `TVCharacterSwap` 몸통 기준(루트의 부모) 변환 — 활 위치·방향 일치 |
| `058eac18a8` | 원래 캐릭터 복귀(`TVCharacterSwap` 끔) · `TVMonsterZones` 구역 5곳 5~8마리(순찰·피격 추격·10초 재스폰·5~8타) · `TVPlayerAttackRange`(사거리 ×0.7 = 6.3 m, 적 없으면 공격 중지, 테두리 원) · 평소 카메라 16 m/FOV 50 |
| `c8125d3857` | WL 타격감 이식(`HitFeelDirector` 재작성 + `TVPresentationHook`): 등급별 히트스톱·흔들림·펀치, 경직(0.09 s·히트 모션 유지), 넉백 0.2 m/0.12 m · 사거리 원 0.04 m·알파 0.16 |
| `06565f107c` | `TVDamageNumbers` 금색 외곽선 숫자(쌓임·팝, 게임 숫자 끔) · 베기 줄기·별 섬광 · 붉은 섬광 세기 0.1 |
| `9a66b66e60` | `TV_AnimatedProxy` 셰이더 + `TVMonsterProxies`(몬스터 그림자·보스 슈퍼 아머 외곽선) · `TVBossLights` · `TVMonsterLocomotion`(보폭 실측 표·속도/재생 맞춤) · `TVPreDamageHook`(플레이어 피격 숫자) · 이동 방향 · 원 0.012 m · 폰트 외곽선 0.13·dilate -0.15 |
- 테스트 전용 토글(원본 반영 대상 아님): `BT_Visual` 의 `TVTestCheats.invinciblePlayer` · `TVCharacterSwap`(켜면 P09 여전사) · `TVCameraProfile.bossPullBack` · `TVPlayerAttackRange`(rangeScale·holdFireWithoutTarget·alwaysShowRing) · `BT_Visual/MonsterZones`(구역 위치 = 자식 Zone1~5, 몬스터 번호·반경·수)
- 주의: 몬스터 GPU 애니메이션의 Walk(1) 칸은 전부 빈 클립 — 이동 애니메이션은 Run(2)만 쓸 것
## 4. 남은 작업 — PD 결정 사항 (게임 본편 반영)
1. ① 표준 PostProcessData(또는 커스텀 UberPost 에 그레이딩 복원) + 게임 씬 Volume ② 실제 맵 LightingData·조명 모드 점검 ③ 몬스터·드롭 프리팹 그림자 설정 정리(또는 셰이더 LOD 0 서브셰이더에 ShadowCaster 추가) — 그림자 거리를 늘리기 전 필수 ④ 그림자 거리 25 m ⑤ 타격감을 ECS 이벤트로 이식 ⑥ 품질 등급별 on/off(그림자 +86 Draw · 림 +24 · 후처리 +10)
2. 추가 반복 후보: 몬스터 림(BRG·GPU 스키닝 호환 셰이더 필요) · ComfyUI 지면 디테일 타일(텍스처용 모델 필요)
3. P09_Modular_Humanoid 구매 여부(PD) — 에셋 폴더는 미커밋(구매 결정 전), 원본 재질은 lilToon 전용(미설치)
## 5. 작업 방법 (실증)
- Unity CLI: `unity command --project-path C:\BurningTimes\FirstRising eval_file --file <cs>` (Roslyn, `return` 문자열). 한 호출이 5초 넘으면 응답만 끊김(실행은 계속) → 무거운 작업은 나눠서
- 캡처: `capture_game_view --source screen --width 1080 --height 1920 --json` → base64 → scratchpad 저장(Assets 저장 금지)
- 헬퍼(scratchpad `C:\Users\sw\AppData\Local\Temp\claude\E--BurningTimes\40033f44-40b9-4a47-bdbd-1903c584f36f\scratchpad`): `play.ps1`(Play+캐릭터 공터 이동+카메라 16 m) · `cap.ps1 <이름>` · `comp.ps1 -names -out`(JPEG 합성) · `lum.ps1 -names`(평균 밝기·암부 비율) · `p2_chk2.cs`(Draw/SetPass) · `p7_move.cs`(몬스터 근처로 이동 → 전투) · `p7_cnt.cs`(타격 감지 수)
- 주의: `AssetDatabase.SaveAssets()` 금지(원본 머티리얼 자동 저장 사고) → `SaveAssetIfDirty(obj)` · 조명/환경 색 입력은 sRGB · 서브씬 조명 transform 은 엔티티가 덮어씀(서브씬 파일에서 수정) · 테스트 몬스터는 레벨 1000 보스라 전투 수 초 뒤 캐릭터 사망(FAIL, timeScale 0) — 정상