Roble

색을 생성해보자GPUGrassCommon.hlsl 파일을 새로 만들어서 공통 요소들을 묶고 색 함수를 추가했다. GPUGrass.cspublic struct Constants { p/////// public float4 RootColor; public float4 TopColor; } public struct Grass { /////// public uint2 ColorParams; } [SerializeField] private Color rootColor; [SerializeField] private Color topColor; _cons..
저번 시간에 풀 하나 그리기를 성공 했으니, 여러개의 풀을 한꺼번에 그려보도록 해보자. GPUGrass.compute#pragma kernel Init#pragma kernel Tick//추가#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"#define VERTEX_PER_BLADE 15cbuffer Constants{ uint Capacity;}RWByteAddressBuffer GrassBuffer;RWByteAddressBuffer CommandBuffer;[numthreads(1, 1, 1)]void Init(){ CommandBuffer.Store4(0, uint4(VERTEX_PER_BL..
GPU 인스턴싱과 잔디 기하학(Geometry) 생성 로직을 완성했습니다. 이로써 CPU는 렌더링 명령을 단 한 번만 내리고, 모든 잔디의 위치 계산과 렌더링은 GPU가 전담하는 진정한 GPU-Driven 파이프라인이 구축되었습니다. 잔디 메쉬를 GPU에서 직접 생성(Geometry)하고, GrassBuffer에서 위치 데이터를 읽어와 그리는 구조를 확립했습니다. 코드 업데이트 핵심 요약 GPUGrass.csC# 스크립트는 이제 GPU 리소스를 관리하고, 매 프레임 Compute Shader와 렌더링 셰이더를 순서대로 실행하는 파이프라인 관리자 역할을 수행합니다. private void OnValidate(){ // capacity를 0과 MaxCapacity(10000) 사이로 안전하게 ..
대규모 잔디 렌더링 시스템의 실제 실행 로직이 구현되었습니다. 이번 업데이트는 Compute Shader 파일(GPUGrass.compute)을 생성하고, 잔디 시스템의 핵심인 GPU 버퍼 초기화 및 실제 렌더링 명령 실행 로직을 완성했습니다. Compute Shader (GPUGrass.compute) 생성이 파일은 GPU에서 실행되는 두 가지 핵심 커널(Kernel)을 정의합니다.#pragma kernel Init // 초기 설정(CommandBuffer 작성)을 위한 커널 선언#pragma kernel Tick // 매 프레임 잔디 업데이트를 위한 커널 선언#define VERTEX_PER_BLADE 15 // 잔디 블레이드 하나당 구성되는 정점 개수 (렌더링 명령에 사용)cbuffer Const..
지난번 포스팅에서 Compute Shader 기반 잔디 시스템의 기본 데이터 구조(Grass Struct)와 리소스 관리(Init, Dispose)를 살펴보았습니다. 이번 업데이트에서는 CPU 개입을 최소화하고 GPU가 직접 렌더링 명령을 처리하는 인다이렉트 드로우(Indirect Draw) 방식을 도입했습니다. 이 업데이트의 핵심은 다음과 같습니다.renderMaterial: 잔디를 실제로 그릴 때 사용할 머티리얼(Material) 추가._renderParams: 렌더링에 필요한 모든 설정(머티리얼 등)을 담는 구조체 추가._commandBuffer: 렌더링 명령어(몇 개의 잔디를 그릴지 등)를 GPU에 저장하는 커맨드 버퍼 추가.Tick(): Graphics.RenderPrimitivesIndirec..
Unity에서 수많은 오브젝트를 효율적으로 렌더링하기 위해 Compute Shader를 활용하는 시스템, GPU 기반 잔디 렌더링 시스템을 구현해보겠다. 게임에서 맵 중 땅에 넓게 심는 풀들을 생각하면 될 것이다. CPU 초기 전체 코드using System.Runtime.InteropServices;using Unity.Mathematics;using UnityEditor.Experimental.GraphView;using UnityEngine;namespace GPUGrass{ public struct Grass { public static readonly int Size = Marshal.SizeOf(); public float3 Position; } ..
노멀 맵 입력 속성 생성Properties { // 텍스처 입력: 기본 색상 또는 패턴 텍스처 _BaseColor ("Base Color (Texture)", 2D) = "white" {} // 노멀 입력: [Normal] _Normal ("Normal", 2D) = "bump" {} // UV 스케일링을 위한 실수 값 _UVScale ("UV Scale", Float) = 1.0 } 노멀 구현// 텍스처 선언 Texture2D _BaseColor; Texture2D _Normal; // 텍스처 샘플러 상태 선언 SamplerState ..
Unity와 Rider를 이용하여 스토카스틱 타일링 쉐이더를 구현 실습 정리이다. 실습에 사용한 텍스처는 Poly Haven 사이트에서 가져왔다. 스토캐스틱 타일링은 반복되는 텍스처 패턴의 시각적 반복성을 줄이기 위해, 각 타일 영역(coordinate로 구분되는 영역)마다 약간의 무작위성(Stochasticity)을 적용하여 텍스처 오프셋이나 회전 등을 주는 고급 텍스처링 기법이다. 01. 타일 영역 분리기본 Plane 메쉬에 머티리얼에 기본 셰이더를 적용하고 준비한 텍스처를 입히고 시작했다. Tilling x,y 값을 10으로 두면 간단하게 영역을 나누어 볼 수 있다. 새로운 셰이더 파일을 작성하면서 구현하는 것이기 때문에 new file을 해주었다. 기본적인 셰이더 파일 구조는 다음과 같다. ..
Roble
'분류 전체보기' 카테고리의 글 목록