게임 개발
-
Compute Shader & CUDA-Python게임 개발 2021. 6. 22. 04:59
SIMT(Single Instruction, Multiple Thread) SIMD(Single Instruction, Multiple Data) 에서 변형된 방식. Multiple Thread로 인해서 그래픽 처리나 AI처리에 알맞다. NVIDIA GPU (물리적 구성) 따라서 RTX 3080 Ti의 코어개수는 32 * 4 * 80 = 10,240 이 된다. Compute Shader (논리적 구성) Dispatch()는 최초 실행하는 시점이다. Unity C#은 내장된 Dispatch()를 호출하고 파이썬은 함수객체를 직접 호출한다. 크기는 런타임에 변경할 수 있다. Thread Group(Block)은 Thread를 모은 덩어리다. Compute Shader에서는 컴파일 타임에 정해야한다. Thre..
-
Tangent Space 와 삼각함수게임 개발 2021. 6. 6. 01:33
사각형은 텍스처이고 구는 모델이다. 이를 감싸면 텍스처링 되는건데.... 다 알다시피 저 공간을 Tangent Space라 부른다. w-axis는 vertex의 normal과 동일하고 텍스처의 가로가 u-axis, 텍스처의 세로가 v-axis가 된다. 당연히 알겠지만 u-axis는 tangent 라 부르고 v-axis는 binormal 또는 bitangent라 부른다. 왜 tangent라 부를까? 지금까지의 tangent는 접선, 접면을 의미한다. bi는 binaray 같이 두개가 나오는 접두어이다. 즉 normal의 normal 또는 tangent의 tangent인 의미인데 사실 normal 두번이 더 정확한 의미라 binormal을 많이 쓴다. 그럼 삼각함수의 tangent는 무엇인가? 붙어있다는 어..
-
URP 약어게임 개발 2021. 6. 5. 04:05
1. 변수 약어 기존 유니티 변수는 vertex, normal 이었다. 대부분 surface shader를 썼으니 그 정도면 충분했다. 이제 URP 무슨 공간의 스페이스인지 명시하는 규칙을 사용한다. (왜냐면 surface shader와 빠이 빠이 했거든~~) 하지만.... surface shader 코드를 URP로 컨버팅할 때는 내 머리가 혼란하다. 해당 vertex, normal등이 이 뭘로 썼는가 그때 그때 잘 판단해야하니 혼란하지 말도록!!! OS Object Space VS ViewSpace CS ClipSpace NDC Noramlize Device Coordinate 2. 함수 그래서 함수 이름도 바뀌었다. 각각의 변환은 없는것 같고.. 대충 이런식으로 있다. 스페이스를 햇갈리지 않으면서 정..
-
MetaHuman to ALS v4 for UE4 #2게임 개발 2021. 6. 1. 00:56
이전 : MetaHuman to ALS v4 for UE4 #1 :: 게임개 발로그 (tistory.com) MetaHuman to ALS v4 for UE4 #1 Advanced Locomotion System에 MetaHuman 지원할거냐고 물어봤는데.. 대답이 없어서... 그냥 조금씩 해보다가 양이 많아져서 정리를 하게 되었다. 유튜브들도 참고하긴 했는데 마음에 썩 드는 부분이 없어 balrog.tistory.com 5. Ragdoll 1. 그냥 있는거 고치려면 빡세다. 애니메이터나 애니메이션 아는 TA면 모를까나.. 2. 그래서 기존에 있는 PhysicsAsset을 사용한다. a) 일단 다른 프로젝트에 해당 스켈레톤을 빼고 이주한다. b) 다른 프로젝트에 metahuman_base_skel, m_..
-
MetaHuman to ALS v4 for UE4 #1게임 개발 2021. 5. 26. 00:48
Advanced Locomotion System에 MetaHuman 지원할거냐고 물어봤는데.. 대답이 없어서... 그냥 조금씩 해보다가 양이 많아져서 정리를 하게 되었다. 유튜브들도 참고하긴 했는데 마음에 썩 드는 부분이 없어서 직접 정리하게 되었다. 1. 메타휴먼 준비 1. MetaHuman Creator (https://metahuman.unrealengine.com/) 에서 캐릭터를 만든다. 사용법은 쉬우니 패스! 2. 캐릭터를 만들고 나면 QuixelBridge (https://quixel.com/bridge) 에서 설치한다. - 캐릭터 생성이 굉장한 회사의 기술과 노하우이기 때문에 서버에 꽁꽁 숨기기 위해서 그런것 같다. - 또한 사용자의 데이터도 모을겸?? - MetaHuman Creator로..
-
S3, DXT, BC게임 개발 2021. 1. 6. 02:17
이게 사실 같은 놈인데 회사 및 저작권 관련인데... 변종이라 보면 되겠다. 요즘은 MS문서에서도 BC라고 하는나와있는거 보면 이젠 BC로 말하는게 맞는것 같다. 아무래도 BC는 Block Compress로 브랜드를 탈피한 용어니까... 예전 256 color 의 아이디어를 4x4 텍셀 단위로 바꾼것이다. 게다가 4x4라는게 큰것 같지만 크지 않은 텍셀이다. 그래서 대강 철저히 4x4로 뭉개는 느낌이라고 보면 될것이다. 1. BC1 크기 설명 color_0 2 Byte 16텍셀 중 최소 칼라 (vector로 봤을때 절대값이 최소) color_1 2 Byte 16텍셀 중 최대 칼라 (vector로 봤을때 절대값이 최대) d/c/b/a (텍셀) 1 Byte 한 텍셀당 2 bit h/g/f/e (텍셀) 1 B..
-
previousViewProjectionMatrix 를 가져오고 싶을때게임 개발 2020. 10. 8. 21:11
몇몇 특이한 상황에서는 View/Projection Matrix를 사용해야할 때가 있다. 하지만 SRP에서인가(아마도?)는 previousViewProjectionMatrix 이 업데이트 되지 않는다. 그렇다면 간단히 Projection * View를 하면 될것 같고 이에 해당하는 projectionMatrix * worldToCameraMatrix 를 구하면 바로 될 것 같지만... 다른값이 나온다. 아주 다른값도 아닌 뭔가 비슷한 이상한값이 나온다. 이게 좌표계 문제인데.. previousViewProjectionMatrix는 자동으로 DX좌표계로 변환해 주지만 그게 아니라면 직접 해줘야한다. DX에서라면 다음과 같이 해결할 수 있다. Matrix4x4 p = Camera.main.projection..
-
Compute Shader에서 Dispatch와 numthreads의 관계게임 개발 2020. 9. 23. 22:02
c# source shader.Dispatch(kernelID, 4, 4, 1); compute source #pragma kernel CSMain Texture2D Arg; RWTexture2D Result; [numthreads(5,5,1)] void CSMain (uint3 groupID : SV_GroupID, uint3 id : SV_DispatchThreadID) { if (groupID.x == 0 && groupID.y == 0) { Result[id.xy] = Arg[id.xy]; } else { Result[id.xy] = Arg[id.xy] - float4(0.3, 0.3, 0.3, 0.0); } }