| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- jquery
- scroll-snap
- Unreal
- Agile 게임 개발
- page dot
- hlsl with unreal
- Riot Games
- unreal niagara
- IntersectionObserver
- HTML
- carousel indicator
- Game Developement
- League of Legend
- kanban
- unreal compute shader #unreal niagara #unreal #compute shader #unreal niagara with compute shader
- render target2d
- Compute Shader
- CSS
- unreal compute shader
- FRunnableThread
- unreal visual studio
- JavaScript
- niagara.pdb 로드되지 않음
- render target
- unreal niagara with compute shader
- texture render target
- unreal c++ #unreal #unreal build #unreal
- HLSL
- visual studio integration tool 상태
- FRunnable
- Today
- Total
목록전체 글 (17)
Nephrite21
Unreal C++ 프로젝트 생성시 항상 생기는 Generated.h가 무슨 파일인지 알아보기 위해 작성. 언리얼 공식문서상에 Generated.h 관련 자료가 없어서 직접 엔진 코드를 보며 이해하기로 했다.TestProject를 생성하고, TestActor를 C++클래스로 생성하여 TestActor.Generated.h를 확인해보겠다.클래스를 생성하고 나면 상단에 3개의 헤더가 자동으로 include 되어있는 것을 볼 수 있다.이후 에디터를 닫고 빌드를 한 뒤 다시 시작하게되면 TestActor.generated.h를 열 수 있다.// Copyright Epic Games, Inc. All Rights Reserved./*=============================================..
언리얼에서 비동기로 작업할 때 사용할 만한 것은 Async, TaskGraph등의 태스크 기반과 FRunnableThread 같은 스레딩 기반이 있다. 이중 Thread를 알아보겠다.1. 클래스Unreal에서 멀티스레딩을 할 때 중요한 클래스는 다음 두가지이다FRunnable은 스레드 상에서 작동해야 하는 작업에 대한 정의를 갖는다.FRunnableThread는 실제로 Game Thread에서 떨어져 나와 작동할 스레드 자체를 의미한다.FRunnableThread* thread = new FRunnableThread(FRunnable* runnable, const TCHAR* ThreadName)스레드의 생성은 위와 같이 실행되고, Thread가 생성되고 나면 FRunnable에 정의된 사용자의 작업이 ..
구면 상에 균일 분포로 입자를 배치할 때 사용하기 좋은 알고리즘이 있다피보나치 스피어이다.const cos = Math.cos, sin = Math.sin, asin = Math.asin, sqrt = Math.sqrt;const M_PI = Math.PI;function fibonacci_spiral_sphere(num_points) { const goldenRatio = (sqrt(5.0) + 1.0) / 2.0; // golden ratio = 1.6180339887498948482 const goldenAngle = (2.0 - goldenRatio) * (2.0 * M_PI); // golden angle = 2.39996322972865332 ..
전체 코드 구조파티클 개수만큼 각각의 위치, 속도, 예상위치와 spatial offset 값을 0으로 설정,이후 Execute Base Compute Shader를 통해서 각각의 위치를 네모나게 설정해준다.이후 나이아가라 설정.이후 Event tick마다 PreProcessing -> Update Spatial Hash -> Sort And Calc Offsets -> Calc Densities -> Apply Pressure -> SPH PostProcessing -> 나이아가라 업데이트 순서로 진행한다.모든 Compute Shader 프로세스가 Async 이므로, 프레임이 끝나야 다음 값으로 진행하도록 설정해두었다.모든 코드는 https://github.com/Nephrite21/SPHSlime 에 ..
기존에 Render Target을 이용해서 작업한 방식은 결과가 오염되는 현상?이 있어서 compute shader를 이용한 방식으로 변경했었다. Shadeup 플러그인을 통해 compute shader를 제작하고, 해당 셰이더를 호출하는 함수를 블루프린트에서 호출하는 방식이다.블루프린트 입력cpp로 이동셰이더 연산cpp로 데이터이동블루프린트로 데이터 이동나이아가라로 화면에 출력위와 같이 대규모 데이터를 블루프린트 -> cpp -> gpu -> cpp -> 블루프린트 -> 나이아가라 로 이동하는 과정을 각각의 단계마다 반복을 한다. 결과적으로 라이젠5 3700x, rtx2070슈퍼 환경에서 10만개의 파티클을 실시간으로 처리하지 못하고 3~4프레임씩 스킵되는 현상이 일어났고, 이를 해결하기 위해 단계를 ..
결론부터 말하자면 기존에 Render Target을 이용해서 값을 읽어오는 방식은 사용이 불가능해서 Vector Array를 이용하기로 했다.이유는 Render Target이 데이터를 읽고 쓰는 과정에서 한 프레임 내에서는 값이 유지되지만, 다음 프레임에 이것을 액세스 했을 때 기존의 값과 동일하다는 것을 보장할 수 없다는 것을 확인했기 때문이다.Render Target의 기존 값에 일정 값을 더해 재할당하는 셰이더코드를 작성했을 때, Render Target에 Game 씬의 일부가 렌더링 되는 것을 확인해서 이렇게 사용하는 것은 불가능할 것 같다고 판단했다.사실 굳이 Render Target을 이용하고자 했던 이유는 Shadeup에서 제공하는 Compute Shader의 구조도 단순했고, 데이터 입출력..