목록전체 글 (64)
Visual Studio
실제 게임 플레이시에는 BackBuffer에 직접 씬을 렌더링하지만,Unreal Editor에서 편집중인 월드를 뷰포트에 그릴 때는 BackBuffer에 그리지 않고 BufferedRT라는 텍스쳐를 렌더 타겟으로 하여 그린 후 Slate UI 그릴때 BufferedRT 텍스쳐를 가져와서 뷰포트에 그린다. RenderDoc에서 뜯어본 BufferedRT 텍스쳐
테스트를 위해 주어진 개수만큼 오브젝트를 범위내 랜덤 위치, 랜덤 회전값으로 배치시키도록 구성했다.쉐이더는 Blinn-phong 모델을 구현하였다. Debug, 인스턴스 100000개, Instance Buffer(= Second Vertex Buffer, Binding 1) 평균 25.52 fps Debug, 인스턴스 100000개, Storage Buffer 평균 25.78 fps Debug 모드에서는 Instance Buffer와 Storage Buffer가 큰 차이가 없었다.이제 Release 모드에서 해보자. Release, 인스턴스 100000개, Instance Buffer 평균 60.06 fps Release, 인스턴스 100000개, Storage Buffer 평균..
중요한 포인트는 "Relative"와 "Local"의 차이이다.Relative는 부모 Component의 트랜스폼에 기반한 좌표계를 의미하며,Local은 자기 자신의 트랜스폼에 기반한 좌표계를 의미한다.따라서 "AddRelativeLocation" 함수는 부모 트랜스폼의 좌표계에서 주어진 벡터만큼 이동하는 것이고,"AddLocalOffset" 함수는 자기 자신의 좌표계에서 주어진 벡터만큼 이동하는 것을 의미한다.참고자료https://forums.unrealengine.com/t/difference-between-addlocaloffset-and-addrelativelocation-nodes/53731/3
FFrameNumberFFrameRateFFrameTime 혹시 사용할 일이 있을 수도 있으니 기억해두자.
소량의 데이터를 빠르게 전달할 때 사용한다. 변환 행렬 등을 쉐이더로 넘길 때도 사용할 수 있다.모든 쉐이더 단계에 데이터를 전송할 수 있다.Command Buffer 자체에 저장되기 때문에 Command Buffer를 다시 만들지 않는 한 변경할 수 없다.vkCmdPushConstants() 함수를 사용하여 데이터를 Command Buffer에 입력한다.쉐이더에서는 다음과 같이 사용한다.layout( push_constant ) uniform constants{ vec4 data; mat4 render_matrix;} PushConstants;
Fragment Shader (Direct X에서는 Pixel Shader) 이후 Depth test를 수행하여 Depth test에 실패한 Fragment를 폐기하는 과정을 거치는데, 이를 Fragment Shader 이전으로 앞당겨 그려지지 않을 Fragment에 대한 불필요한 Fragment Shader 연산을 하지 않도록 할 수 있다. 장점- 불필요한 Fragment Shader 연산을 줄일 수 있다.- 따라서 GPU 부하가 감소한다. 단점- Fragment Shader가 깊이값을 변경하는 경우에는 의도대로 렌더링되지 않을 수 있다.- 반투명 오브젝트가 Depth test에 실패하여 렌더링되지 않을 수 있다.- 사용하는 Fragment shader의 연산이 가벼운 경우 Early depth tes..
Primary Command Buffer- Queue에 직접 제출할 수 있다.- 여러개의 Secondary Command Buffer를 호출할 수 있다.- Seconary Command Buffer와 달리 Render Pass 내부에서 호출되어야 한다는 제약이 없다.Secondary Command Buffer- Queue에 직접 제출할 수 없다.- Render Pass 내부에서만 호출될 수 있다.- Primary Command Buffer에서 Secondary Command Buffer를 호출하여 간접적으로 Queue에 제출할 수 있다.- 다른 Primary Command Buffer를 호출할 수 없다.- 여러 Primary Command Buffer에서 재사용이 가능하다.- Primary Command..
아이디어- 폰트 관련 데이터 객체들(FCodepointFontCacheData, FFontData, FFreeTypeFaceGlyphData)을 가져올 때 유효한지 검사하는 로직이 오버헤드가 큼. - 정확히는 아래 두 함수 내부의 검사 로직이 오버헤드가 크다. - FSlateFontRenderer::GetFontDataForCodepoint() - FCompositeFontCache::GetFontFaceForCodepoint()- 유효함이 이미 검증된 폰트 데이터는 한번 더 캐싱함. (편의를 위해 2차 캐시라고 부르겠음)- 이후 같은 글자에 대해서 폰트 데이터가 필요할 경우 2차 캐시가 있다면 검사 과정을 스킵하고 가져옴. 구현영향을 미치는 범위를 줄이기 위해 Ascii code 범위의..
어떤 연산을 여러번 적용하더라도 결과가 달라지지 않으면 그 연산은 멱등성을 갖는다고 할 수 있다.컴퓨터 공학에서도 자주 사용하는 개념인데, HTTP RFC 문서에서도 이 개념을 사용하고 있다.이 문서에서는 "안전한 메서드"와 "멱등성을 갖는 메서드"를 구분하여 설명하고 있다.GET, HEAD 메서드가 안전하고, GET, HEAD, PUT, DELETE 메서드가 멱등성을 갖는다.모든 안전한 메서드는 멱등성을 가지지만, 모든 멱등성을 가진 메서드가 안전한 것은 아니다. 참고자료https://velog.io/@dion/HTTP-%EB%A9%94%EC%86%8C%EB%93%9C%EC%9D%98-%EB%A9%B1%EB%93%B1%EC%84%B1-%EA%B7%B8%EA%B2%8C-%EB%AD%94%EB%8D%B0h..