Skip to content

절차적 잔디 (Procedural Grass) ​

RedGPU.Landscape.GrassManager는 카메라 주변의 지형 표면 위에 수십만~수백만 개의 잔디 및 초목 클럼프를 GPU 컴퓨트 셰이더에서 16m 셀 단위로 실시간 베이킹 및 컬링하여 렌더링하는 시스템입니다.


1. 잔디 타입 등록 (grassManager.addType) ​

잔디 클럼프 형태의 Mesh를 준비한 뒤 landscape.grassManager.addType(options)를 호출하여 등록합니다. 복수 종류의 잔디나 들꽃을 함께 배치하려면 addType()을 추가로 호출합니다.

  • 양면 식생 PBR 및 서브서피스 스캐터링: 풀잎을 통과하는 태양광의 투과광 (subsurfaceStrength, subsurfaceColor)과 지형 바닥 색상이 풀뿌리로 자연스럽게 스며드는 지면 블렌딩 (groundBlendStrength)을 지원합니다.
  • 전역 바람 연동: scene.windManager의 풍향·풍속에 따라 일렁이는 정점 바람 애니메이션이 자동 적용됩니다.
javascript
new RedGPU.GLTFLoader(
    redGPUContext,
    './assets/terrain/grass.glb',
    (loader) => {
        const grass = landscape.grassManager.addType({
            name: 'Lawn Clump',
            mesh: loader.resultMesh,            // 인스턴싱할 잔디 클럼프 Mesh
            densityPerHectare: 20000,           // 헥타르(10,000㎡)당 20,000개 밀도
            cullingDistance: 110,               // 최대 가시 거리 (110m)
            targetLayer: 'Grass',               // 'Grass' 지형 레이어 영역에만 생성
            maxSlope: 35,                       // 35도 이하 경사면에만 생성
            minScale: [12.0, 8.0, 12.0],        // 최소 랜덤 스케일 [x, y, z]
            maxScale: [18.0, 12.0, 18.0],       // 최대 랜덤 스케일 [x, y, z]
            roughness: 0.55,
            subsurfaceStrength: 0.35,           // 역광 투과(SSS) 강도
            subsurfaceColor: [0.35, 0.65, 0.15],
            groundBlendStrength: 0.85,          // 지형 바닥(VBT) 색상과의 하단 블렌딩 강도
            receiveShadow: true,
            castShadow: true
        });
    }
);

라이브 예제: 절차적 잔디 ​


2. GrassOptions 주요 설정 속성 ​

분류속성명기본값설명
식별 및 메시name필수잔디 타입의 고유 식별 이름
mesh필수잔디 지오메트리 및 기본 텍스처를 추출할 원본 Mesh 인스턴스
baseColorTexture메시 재질 참조잔디 베이스 컬러 텍스처 경로 또는 BitmapTexture
밀도 및 컬링densityPerHectare5000.0헥타르(10,000㎡)당 기준 배치 밀도
densityMultiplier1.0기준 밀도에 곱해지는 실시간 밀도 배율
cullingDistance100.0잔디가 렌더링되는 최대 카메라 거리 (원거리 자동 스케일 페이드아웃)
targetLayer''배치 밀도를 참조할 LandscapeLayer 이름 또는 인덱스
트랜스폼 및 경사minSlope / maxSlope0.0 / 35.0잔디가 자랄 수 있는 최소·최대 지형 경사각 (단위: 도)
minScale / maxScale[0.7, 0.7] / [1.3, 1.4]인스턴스 랜덤 스케일 범위 ([width, height] 또는 [x, y, z])
bottomOffset0.0지형 표면 대비 인스턴스 수직(Y) 오프셋
재질 및 PBRalphaCutoff0.2텍스처 알파 마스크 컷오프 임계값 (0.01 ~ 1.0)
roughness0.55잔디 표면 거칠기 (0.04 ~ 1.0)
subsurfaceStrength0.25잎사귀 역광 투과(Subsurface Scattering) 강도 (0.0 ~ 3.0)
subsurfaceColor[0.35, 0.65, 0.15]서브서피스 스캐터링 RGB 색상 (0.0 ~ 1.0)
exposureBoost1.0밝기 노출 부스트 배율
groundBlendStrength1.0지형 바닥 색상(VBT) 및 법선과의 하단 블렌딩 강도 (0.0 ~ 1.0)
그림자receiveShadow / castShadowtrue / true그림자 수신 및 투사 여부
shadowStrength1.0수신된 그림자의 어두움 강도 (0.0 ~ 1.0)

관련 예제 ​


다음 단계: 대규모 식생과 임포스터 배우기