AI/Unity

AntiGravity를 이용한 SRPG만들기 8일차 (툰쉐이더 적용)

blacknabis 2026. 1. 20. 22:17

[개발 일지] 8일차: 툰 쉐이더 적용 & FBX 임포트 자동화 (feat. Antigravity)

*본 개발 일지는 Google의 차세대 AI 에이전트 **'Antigravity'*와 함께 작성되었습니다.


🏗️ 8일차 개발 목표: "캐릭터의 숨결과 공정의 효율화"

오늘은 시스템적인 완성도를 넘어, 게임의 시각적 정체성을 확립하는 날입니다. 기본 URP Lit 쉐이더의 사실적인 느낌 대신, SRPG 특유의 아기자기함을 살릴 **카툰 렌더링(Toon Shading)**을 구축했습니다.

또한, 수많은 캐릭터 에셋을 일일이 설정하는 번거로움을 해결하기 위해 FBX 자동 임포트 자동화 툴을 완성하여 개발 생산성을 극대화했습니다.


1. 커스텀 URP 툰 쉐이더 구현 (SimpleToonWithOutline)

Shader Graph 대신 제어력이 높은 HLSL 코딩을 통해 쉐이더를 작성했습니다.

🎨 주요 구현 기능

  • Cel Shading (Ramp Lighting): 빛의 각도($N \cdot L$)에 smoothstep을 적용하여 명암 경계를 뚜렷하게 처리했습니다. Ramp Smoothness 파라미터로 경계의 부드러움을 실시간 조절할 수 있습니다.
  • Backface Extrusion Outline: 모델의 뒷면(Backface)을 노멀 방향으로 미세하게 확장한 후 검은색으로 렌더링하여, 모델링 데이터에 상관없이 일정한 외곽선을 생성합니다.
  • Rim Light: 캐릭터 외곽에 역광 효과(Fresnel)를 부여하여 3D 공간 내에서의 입체감을 확보했습니다.
High-level shader language
 
// Toon Ramp 계산 핵심 로직
float halfLambert = NdotL * 0.5 + 0.5; 
float ramp = smoothstep(_RampThreshold - _RampSmoothness, _RampThreshold + _RampSmoothness, halfLambert);
float3 finalColor = lerp(shadeColor, litColor, ramp);

2. FBX 자동화 툴 개선 (FBXAutoSetupTools.cs)

캐릭터 에셋이 추가될 때마다 반복되는 단순 작업을 **"우클릭 한 번"**으로 끝내도록 툴을 고도화했습니다.

🛠️ 트러블 슈팅 & 해결 (The Senior's Perspective)

문제 상황 원인 분석 해결책
머티리얼 추출 실패 LoadAllAssetsAtPath가 FBX 내부 데이터를 잡지 못함 GameObject로 임시 로드 후 GetComponentsInChildren<Renderer>()를 통해 실제 연결된 머티리얼을 추적하는 로직으로 변경
변경 사항 휘발 쉐이더 변경 후 유니티 재시작 시 원복됨 EditorUtility.SetDirty(mat) 마킹 후 AssetDatabase.SaveAssets() 호출로 디스크 저장 강제화

3. 최종 결과물: "0.1초 만에 완성되는 에셋 셋업"

이제 새로운 캐릭터 FBX를 프로젝트에 넣고 메뉴 버튼 하나만 누르면 다음 과정이 즉시 완료됩니다.

  1. Rig 설정: 자동으로 Humanoid 타입 전환 및 아바타 생성
  2. 리소스 정리: 텍스처 추출 및 전용 폴더 자동 분류
  3. 쉐이더 할당: 커스텀 툰 쉐이더가 적용된 머티리얼 자동 매칭

📊 8일차 개발 통계

  • 신규 쉐이더: 1종 (HLSL 기반 커스텀 툰 쉐이더)
  • 자동화 기능: 3단계 통합 (Rig, Texture, Material)
  • 작업 효율: 캐릭터당 셋업 시간 약 95% 단축

(좌: 적용 전 / 우: 적용 후 - 외곽선과 셀 쉐이딩이 적용된 모습)
쉐이더 적용 전투화면

 

반응형