일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- niagara.pdb 로드되지 않음
- League of Legend
- Riot Games
- texture render target
- unreal c++ #unreal #unreal build #unreal
- scroll-snap
- JavaScript
- Unreal
- carousel indicator
- kanban
- HLSL
- IntersectionObserver
- unreal niagara with compute shader
- unreal niagara
- jquery
- Game Developement
- visual studio integration tool 상태
- HTML
- unreal visual studio
- unreal compute shader #unreal niagara #unreal #compute shader #unreal niagara with compute shader
- page dot
- render target
- Agile 게임 개발
- Compute Shader
- render target2d
- hlsl with unreal
- Fluid simulation
- unreal compute shader
- Niagara
- CSS
- Today
- Total
Nephrite21
언리얼 유체 시뮬레이션 과정 4-1 - Render Target을 이용한 나이아가라 시스템 데이터 이동- Render Target 전달 본문
언리얼 유체 시뮬레이션 과정 4-1 - Render Target을 이용한 나이아가라 시스템 데이터 이동- Render Target 전달
Nephrite21 2024. 11. 12. 01:58나이아가라에서 파티클 각각의 위치를 받기 위해서는 먼저 Render Target을 나이아가라에 등록해야 한다.
이를 위해서 일단은 액터 블루프린트 클래스를 만들어준다.
나중에 언젠가는 슬라임 시뮬레이션에 쓰일 예정이므로 블루프린트 이름을 BP_Slime으로 설정했다.
이렇게 생성하고 좌측위 컴포넌트 추가를 통해 Niagara System을 만들고 이름을 NS_Renderer로 설정해준다.
이제 이 컴포넌트에 나이아가라 시스템을 달아주기 위해 새로운 나이아가라 시스템을 만들어주고, 이름을 똑같이 NS_Renderer로 설정해준다.
Empty Emitter가 하나 추가된 시스템을 만들고,
사용자노출값(User Exposed)에서 Texture Render Target을 지정하고, 이름을 TRT로 설정해준다.
프로퍼티를 GPU로 바꾸고 바운드를 Fixed로 변경한다. Bound는 일단은 나중에 생각하기로 한다.
일단은 다시 블루프린트로 돌아와서 이미터 업데이트에 Spawn Burst Instantaneous를 추가해준다.
이 모듈을 추가하면 처음에 파티클의 개수를 한번에 지정해서 spawn 해줄 수 있게 된다.
일단은 1개의 스프라이트만 그리도록 만들어 놓는다.
그리고 다음은 파티클의 위치를 Render Target의 값을 통해서 받아올 차례다. 이 과정은 파티클이 업데이트 될 때 마다 실행되어야 하므로, Particle Update에 모듈을 추가해준다. 이때 이와 같은 작업을 하는 사전 정의된 모듈이 없으므로, 새로 스크래치 패드로 모듈을 만들어야 한다
Particle Update -> + -> New Scratch Pad Module
스크래치 모듈의 구조는 이렇게 간단하게 생겼다.
렌더타겟에서 값을 읽어와서 파티클의 색을 변환해 주는 것이다. 실제 구현에서는 위치값을 저장하고 있어야 하겠지만 일단 우리는 값을 읽을 수 있는지 확인하는 것이 가장 급선무이므로 해당 값을 그대로 색깔으로 표현하도록 해보겠다.
여기에서 상당히 오랜 시간동안 헤맨 문제가 있다. Texture Render Target과 Render Target2D의 차이를 도저히 이해할 수 없어서 생기는 문제였는데, 어떻게 해도 둘 중에 하나만 사용해서는 나이아가라에서 값을 읽어올 수 없던 것이었다. Texture Render Target은 나이아가라 상에서 User Exposed로 설정해두면 바로 우리가 만든 Render Target 에셋을 끌어다가 넣을 수 있었지만, 스크래치 패드 모듈에서는 사용할 수 있는 함수가 없었고, Render Target2D는 위에서 보이는 것처럼 Sample Render Target Value를 통해서 값을 읽어올 수 있었지만, User Exposed로 등록을 하면
이런식으로 에셋을 등록할 수 있는 곳 자체가 나오지 않고, 그냥 Niagara가 가지고 있는 렌더 타겟을 설정만 할 수 있는 문제였다.
그래서 오랜 시간동안 잡고 쳐다도 보고 모듈도 만져보고 했는데 도저히 답을 찾지 못하다가, 유저 Exposed를 설정하는 창에서 힌트를 얻었다.
여기서 Texture Render Target은 Object에, Render Target2D는 Data Interface에 있던 것이었다.
이말은 즉슨 실제 데이터를 저장해야 할 녀석은 Texture Render Target이라는 것이었다.
그래서 바로 상위 액터 블루프린트에 접근해서
이렇게 설정을 해주고, 밑에는 RT_Target이 들어간 모습이 보인다.
User Exposed에는 TRT로 Texture Render Target을 설정해 준뒤, 스크래치 모듈에서는 위에서 본 것과 같이 Render Target2D를 이용해서 Input을 받고,
스크래치 모듈 설정에서는 이렇게 Render Target에다가 Texture Render Target을 연결해주었다.
여기서 직접 사이즈도 조절해줄 수 있는 것 같길래 일단은 정수값으로 설정해 두었는데, 나중에 이 값들도 반드시 User Exposed로 설정해서 상위 블루프린트 액터에서만 조정할수 있도록 바꿔주는 것이 좋다.
그 외에는 사이즈랑 타입 정도를 바꿔주었고, 실행을 하게되면
렌더 타겟의 색깔과 일치하는 아름다운 마젠타 색이 나오는 것을 볼 수 있다.
이게 가끔 색이 풀리는 경우도 있던데 이건 왜그런지 모르겠지만 일단은 값이 잘 넘어온다는 것을 확인했으니 1차적으로는 넘어가기로 했다.
오류 수정
갑자기 pdb가 로드 되지 않았다고 하면서 종료되었다.
이 문제는 간단하게 해결할 수 있었는데
엔진에서 옵션 -> 디버깅을 위한 편집기 기호 체크 하면 된다.
근데 굉장히 용량이 크다 무슨 79기가나 먹는다.
'Unreal SPH 시뮬레이션' 카테고리의 다른 글
언리얼 유체 시뮬레이션 과정 5-1 - Vector Array를 이용한 나이아가라 시스템 데이터 이동 (0) | 2024.11.26 |
---|---|
언리얼 유체 시뮬레이션 과정 3-2 - Shadeup을 이용한 Unreal Compute Shader 구현 및 이해 - 셰이더 실행 cpp 코드 (0) | 2024.11.04 |
언리얼 유체 시뮬레이션 과정 3-1 - Shadeup을 이용한 Unreal Compute Shader 구현 및 이해 - 셰이더 (0) | 2024.11.04 |
언리얼 유체 시뮬레이션 과정 2 - 컴퓨트 셰이더 세팅 (0) | 2024.11.04 |
언리얼 유체 시뮬레이션 과정 1 - 언리얼 프로젝트를 C++로 전환 및 Visual Studio For Unreal 셋업 (0) | 2024.11.03 |