CG-2026-solarsystem

6주차 — PBR 재질과 표면 마스크

실행 페이지

실습 1 — 텍스처 기반 PBR

의도와 구현

큐브의 각 면에 Poly Haven 재질을 적용하고, Diffuse 색상과 데이터 맵이 조명에 미치는 차이를 비교합니다. Diffuse 텍스처는 sRGB에서 선형 공간으로 변환하고, ARM은 R=AO, G=roughness, B=metallic 순서로 해석합니다. 데이터 맵에는 sRGB 변환을 하지 않습니다. GGX 분포와 Schlick Fresnel/Smith 기하항으로 직접광을 계산하고, AO가 적용된 상수 ambient와 roughness 밉맵을 사용하는 환경 반사를 별도 기여로 더합니다. 노멀 맵은 화면 미분으로 TBN을 구성해 적용합니다.

관찰 기록

실습 1 PBR 재질 캡처

실습 2 — 위도·세부값 조건 표면 마스크

의도와 구현

새 행성 니바(Niva)를 태양과 함께 만들었습니다. 구형 행성은 태양을 공전하고 자전하며, 태양과 행성 사이의 거리 설정은 행성의 궤도 위치와 행성 표면에 도달하는 빛의 거리 감쇠에 함께 연결됩니다. 휠/드래그로 시점을 바꾸고 자전·공전 멈춤을 눌러 고정 비교할 수 있습니다.

환경·사건 원인 장면 변수와 위치별 규칙 표면 재질 반응
태양 거리 · solar-condition task2.js의 climateMask: abs(vLocal.y)로 위도를 구하고 uSolarCondition으로 얼음 경계를 .96에서 .26까지 이동시킵니다. 같은 조건으로 궤도 반경을 2.4–4.8 장면 단위로 바꾸고, 직접광은 태양까지 거리의 제곱으로 감쇠합니다. 극지 얼음 색과 높은 roughness가 차가운 영역에 넓어집니다.
충돌 누적 · impact-amount task2.js의 impactMask: UV 셀별 해시로 고정된 충돌 중심·반경·테두리를 만들고, 누적량이 커질수록 표시되는 충돌 수를 연속적으로 늘립니다. 독립적인 어두운 크레이터와 밝은 테두리를 색에 섞고 충돌부 roughness를 높입니다.

행성은 돌 Diffuse, nor_gl, ARM 맵을 바탕으로 씁니다. ARM은 R=AO, G=roughness, B=metallic이며 데이터 맵은 선형 값 그대로 읽습니다. 위치는 로컬 좌표 vLocal, 직접광과 카메라·환경 반사는 월드 좌표 vP를 사용하고, uNormalMat으로 법선을 월드 좌표로 변환합니다. 실습 1의 GGX PBR·TBN 노멀 계산을 이어서 적용했습니다.

표면 보기에서 마스크 1·2를 각각 흑백으로 진단하고, 기본/변화 비교에서 같은 프레임의 미변화 표면과 두 마스크 적용 결과를 좌우로 비교할 수 있습니다.

관찰 기록

태양 거리 변화 (충돌 누적 50 고정)

태양 거리 조건 0·50·100 같은 시점 비교

충돌 누적 변화 (태양 거리 조건 50 고정)

충돌 누적 조건 0·50·100 같은 시점 비교

각 마스크 흑백 진단과 기본/변화 비교

극지 서리 마스크 충돌 흔적 마스크 기본 표면과 변경 표면
극지 서리 마스크 흑백 진단 충돌 흔적 마스크 흑백 진단 기본 표면과 두 마스크 적용 표면

이미지 출처와 라이선스

Diffuse, normal, ARM 재질 맵 및 studio_small_09_tonemapped.jpg 환경 이미지는 Poly Haven의 CC0 자산입니다. 파일별 원본 URL과 처리 내역은 assets/week06/sources.json에 기록했습니다. 캡처 이미지는 이 실습 페이지의 실행 화면입니다.

AI 활용 및 검증