Tracefolio REPORTS & ISSUES
← 모든 기록
P턴룸 › Pixel Foliage검토

Dylearn 원본과 Pixel Foliage·Camera 기능별 상세 대조

완료

원본과 현재 구현은 동일한 이식본이 아닙니다. 표현·성능 구조·추가 기능·미구현 항목과 실제 검증 수준을 소스로 구분했습니다.

작업 결과

현재 구현은 원본 잔디 시스템을 그대로 Unity에 이식한 상태가 아닙니다. 바람·접촉·단계별 시간 같은 개념을 다른 메시·셰이더로 구현하고 꽃·관목·나무용 구조를 더한 상태입니다. 원본의 외형을 만드는 일부 핵심 기능은 아직 빠져 있거나 단순화돼 있습니다. 원본과 같은 외형·더 낮은 GPU 비용을 달성했다고 검증한 상태가 아닙니다.

판정은 소스 기준입니다. ‘대응’도 같은 결과나 같은 성능을 뜻하지 않습니다. 최신 식생 개선은 컴파일·관리형 검사만 통과했으며 실제 화면 QA는 사용자 화면 조작 보류로 미실행입니다.

표현 기능

항목 Dylearn 원본 현재 Pixel Foliage 차이 판정
풀의 기본 모양 잔디 그림을 붙인 사각형 스프라이트1장. 알파로 윤곽을 자름 직접 작성한 잎3장의3D 메시. 묶음당36정점·12삼각형. 예제에 원본 잔디 그림을 쓰지 않음 다른 방식
카메라를 향함 카메라의 가로·세로·깊이 축으로 모델뷰를 구성하는 전체 billboard 높이축을 유지하고 카메라 쪽으로 수평 회전하는 Y축 billboard 선택 부분 대응
큰 초록색 덩어리/얼룩 풀과 지면에3색·노이즈2종·임계값 설정으로 넓은 색 영역을 만듦 구역별 tint와 해시 기반 작은 색 변화, 공유 구름 명암 원본의3색 영역 방식 미구현
잔디 사이 포인트2종 같은 잔디 셰이더에서 확률에 따라 포인트 텍스처를 선택 꽃·관목 등을 별도 메시·Patch로 배치 다른 방식
바람 월드 노이즈 회전과 화면 방향의 사인 회전을 따로 조절 공간 노이즈·이동 파동·잔흔들림으로 정점을 이동. 뿌리/높이별 가중치 개념 대응, 수식 다름
Fake perspective 바람·유닛 방향에 따라 UV 폭을 왜곡해 눕거나 돌아가는 깊이감을 흉내냄 정점 휘어짐만 있음. 대응하는 UV 왜곡 없음 미구현
단계별 애니메이션 시간을 설정 FPS로 끊고 풀마다 phase를 달리함 같은 개념의 시간 양자화·phase 선택. 기본 예제는 연속,06번은 단계 비교 대응 구현
유닛 접촉 현재 캐릭터 위치를 기준으로 스프라이트를 화면 축으로 회전시킴 현재 위치와 주변 풀의 거리로 밀어냄. 높이·뿌리·정점 알파로 반응 차등 다른 방식
유닛 통과 후 잔류 확인한 코드에는 과거 위치를 저장·감쇠시키는 기록이 없음 기본1.4초 흔적을 감쇠시키며 복원. 과거 위치 기록 최대64개 현재 쪽 추가
Toon 명암 Godot 조명·빛 감쇠와 그림자를 받는 light() 안에서 단계 경계를 부드럽게 섞음 자체 lightDirection/lightColor와3단계 기본 명암·부드러운 경계 단순화된 대응
구름 명암 표면 높이에서 광원 방향으로 구름 높이 평면에 투영, 노이즈2개 결합 월드XZ의2D 노이즈를 이동시켜 밝기에 곱함 높이·광원 투영 미구현
실제 씬 광원/그림자 연동 DirectionalLight 방향을 공유값으로 전송, Grass/Floor가 빛 감쇠 사용 World에 수동 광원값. 현재 색 계산은 실제 씬 shadow attenuation을 읽지 않음 원본과 동등하지 않음
셰이더 디버그 화면 바람 노이즈·접촉 방향을 색으로 표시하는 토글 선택 Gizmo만 있고 같은 셰이더 디버그 모드는 없음 미구현

렌더링·갱신·제품 도구

항목 원본 현재 구현 의미
저해상도 장면 640×360 SubViewport를3배 확대해1920×1080 표시 Pixel Camera 프리셋 높이270. Built-in은 원본 화면을 줄이거나 별도 저해상도 캡처를 추가 역할은 Camera지만 실행 경로 다름
대량 배치 MultiMesh에40000개 저장·30000개 표시 RenderMeshInstanced로최대256개씩 제출. 대표 정원 잔디12000묶음 인스턴스 수만으로 경량화 비교 불가
캐릭터 위치 갱신 기본10Hz, 배열 최대64캐릭터 기본10Hz 공유 수집. 구역별 현재/잔류 접촉 중 가까운 최대16개 전달 CPU 수집 빈도 대응, 범위 다름
안정화/추가 렌더 제공 씬의 저해상도 SubViewport 구조 안정화 프리셋은 추가 장면 캡처. Lightweight 프리셋은 기존 Automatic 조건에서 원본 화면 재사용 후자는 중복 캡처를 피하나 최초 렌더를 없애지 않음
범용 식생 설정 확인한 제공 범위는 잔디와 포인트 스프라이트 중심 Grass/Flower/Shrub/Tree Profile, World, Patch, 개별 Renderer 현재 쪽 확장
표면 배치/제품 UI Godot 씬·재질·스크립트 설정 중심 명시적 콜라이더 표면 Bake·Undo 코드, 공통 TurnRoom 창/Inspector·9언어·선택 연동 현재 쪽 제품화 기능, 현재 UI 실검증 대기

변경 내용

적용 내용

그래서 화면이 왜 다를 수 있나요?

차이는 밀도 숫자 하나가 아닙니다. 원본은 그림이 들어간 평면·카메라 전체 billboard·큰3색 영역·UV 가짜 원근·조명/구름 투영을 결합합니다. 현재 예제는 작은3D 잎·Y축 billboard·단순 색 변화·정점 휘어짐·자체 명암을 사용합니다. 이 방식 차이는 소스로 확인됐지만 각 요소가 최종 영상 차이에 기여하는 정도는 동일 조건의 분리 렌더로 아직 측정하지 않았습니다.

직전 개선에서는 잎의 폭·높이를 넓히고 대표 정원의 묶음을7000에서12000으로 늘렸습니다. 묶음당 정점은36개를 유지했지만 장면의 잔디 메시 총량은 증가합니다. 따라서 이 수정 자체를 전체 GPU 경량화로 설명하면 잘못입니다. 꽃·관목·나무 구조의 추가도 원본 잔디 표현을 재현했다는 근거는 아닙니다.

낮은 FPS가 줄여 주는 것은 무엇인가요?

  1. 시간 양자화: 움직임을 끊어 보이게 합니다. 현재 두 셰이더 모두 매 렌더에서 수식을 실행하므로 이것만으로 GPU 계산 생략을 주장할 수 없습니다.
  2. 위치 수집10Hz: 캐릭터 위치를 읽어 접촉 데이터를 갱신하는 CPU 작업의 횟수를 줄입니다. 현재 처리 클래스의600요청 모의 검사에서10Hz 수집100회·무제한600회를 확인했습니다. 전체 프레임 성능 측정은 아닙니다.
  3. 낮은 렌더 해상도: 원본의640×360과1920×1080은 픽셀 수가9배 다릅니다. 실제 속도가9배라는 뜻은 아닙니다. Unity Built-in의 사후 축소/재캡처를 이 원본 구조와 같은 최적화라고 부를 수 없습니다.

Pixel Camera와 무엇을 나누나요?

  • Pixel Camera: 저해상도 화면, 확대, 픽셀 격자, 색/윤곽 처리. 원본의 SubViewport/표시 역할과 연결됩니다.
  • Pixel Foliage: 풀/꽃/관목/나무의 배치·형상·바람·접촉·복원. 카메라를 꺼도 이 동작은 별도로 존재합니다.
  • Pixora: 이미지 작성/내보내기. 현재 식생 어댑터는 내보낸 Texture2D로 새 재질을 만드는 연결이며 실시간 문서 동기화가 아닙니다.

원본 재현을 목표로 할 경우의 우선순위

제안 순서는 원본 같은 스프라이트 카드 경로·3색 영역 → UV fake perspective와 billboard 정렬 → 광원/높이 투영 구름과 그림자 → 동일 조건 영상/성능 측정입니다. 아직 실행한 작업이 아니라 차이를 줄이기 위한 제안입니다. 기존 꽃·나무용 메시 경로와 선택할 수 있게 하는 구성이 적합하다는 판단입니다.

검증

원본 근거 · 커밋7486b9b

현재 근거 · 제품 소스fb79b35f 기준

파일 경로·SHA256·이전 검사 결과 JSON

C1 FoliageCommon.hlsl:3035 Y billboard,4243 시간,4752 바람,5467 접촉,70~79 자체 명암·XZ 구름·해시 색 변화. C2 PixelFoliage.shader는 ShadowCaster 패스가 있으나 색 출력은 C1 PFShade만 사용하며 실제 shadow attenuation을 읽지 않습니다. 패스 이름만으로 그림자 수신이 된다고 판단하지 않았습니다.

C3 FoliageWorld.cs와 C4 FoliageContactHistory.cs의10Hz/잔류 감쇠·64기록, C5 FoliagePatch.cs의256개 제출, C6 PixelCameraEffect.cs:81~124의OnRenderImage 이후 원본 축소/추가 캡처 조건, C7 공통 Inspector 상속, C8 메시·예제 생성, C9 명시적 표면 Bake를 대조했습니다. 추가로 현재 MeadowGrass.asset의36정점/36인덱스를 직접 확인했습니다.

이전 검증은6개 어셈블리 정적 컴파일·20,619개 관리형 단언과 셰이더 정적 검사입니다. 최신 개선의 실제 씬/9언어 UI/성능 검증은 미실행입니다. 이번 회차는 소스 분석이므로 Unity/화면을 새로 조작하지 않았습니다.

앞서 촬영한 Unity 기준 Camera 전후 GIF와 보고서는 잔디 개선 전 화면입니다. 원본 Godot와 최신 Unity 개선판의 동등 조건 영상 비교 자료는 아닙니다.

남은 사항

이번 기능 대조 검토는 소스·설정·기존 검증 근거로 완료했습니다. 원본과 최신 구현의 시각적 유사도·동일 하드웨어 성능 우열은 미확인입니다. 화면 조작 금지를 유지하며 기존 제품 메뉴얼의 실제 화면 QA도 보류 상태를 유지합니다.

이전 설명의 ‘혼합 toon/월드 구름/카메라 향하기’는 기능 계열만 같다는 뜻이었으며 원본과 같은 계산이라는 뜻은 아닙니다. 이번 표에서 단순화/부분 대응으로 바로잡았습니다.

교훈 검토: 같은 기능 이름과 같은 구현·실행 결과를 구분해야 합니다. 미검증 내용을 완료로 쓰지 않는 기존 전역 원칙과 중복되므로 전역 지침 변경 없음. 이번 프로젝트의 상세 차이는 본문과 소스 해시 근거로 보존합니다.

작업 시간

  • 제안 시간: 10~20분
  • 실제로 완료된 시간: 시작2026-11-03 23:25:38 KST. 소스 대조·보고서 작성 완료 시점이며 공개 배포 확인은 후속 메뉴얼에 실제 시각으로 기록합니다.
  • XERJ: 사용 — 샌드박스 Status/Search 실패 후 실제 로컬 연결에서 TemplateAssetInspector.cs:12 검색 성공 및 현재 상속 코드 대조. 원본 Godot와 Runtime/셰이더는 인덱스 범위 밖이므로 rg·직접 파일 확인.
Markdown 원본작성 기준
QA → DISCUSSION → NEXT ACTION

이 보고서의 QA 토론 0

토론 시작
이 프로젝트의 모든 토론 보기 →

자동 복사를 사용할 수 없습니다. 주소를 선택해 직접 복사해 주세요.