본문 바로가기

전체 글25

유도 미사일 보호되어 있는 글 입니다. 2024. 10. 18.
게임에서의 확률 게임에서 확률은 흔하게 쓰인다.크리티컬 확률, 아이템 가챠, 스킬 발동률, 아이템 드랍률 등...이런 확률을 구현하는 데 필요한 지식은 어떤 것이 있을까 찾아보다가 이 글을 쓰게 되었다. 난수먼저, 게임에서 확률을 구현할 때 가장 핵심이 되는 것은 난수이다.컴퓨터에서 쓰이는 난수란 엄밀히 말하면 난수가 아니다. 난수는 랜덤한 값을 의미하는데, 컴퓨터는 사람이 결정해놓은 규칙과 값을 토대로 계산하는 장치이기 때문에 순수하게 예측할 수 없는 난수를 생성할 수는 없다.그래서 컴퓨터에서는 난수처럼 보이는 의사 난수(pseudo-random number)를 생성한다.의사 난수는 일정하게 존재하는 수(예를 들어 시간)를 수학적 알고리즘으로 가공하여 난수를 흉내낸 수로, 초기값(seed)을 입력받아 seed값을 기반.. 2024. 10. 17.
[UE5] HLSL로 커스텀 셰이더 만들기 이 포스트는 언리얼 기능 구현 공유 커뮤니티인 SEEN 활동의 일환으로 쓰여진 글입니다. 구현 주제특정 메쉬에 비주얼적으로 특별한 효과를 주고 싶을 때, 이를 수행하는 커스텀 셰이더를 만드는 방법을 다룹니다. 이런 사람이 읽으면 좋아요동적인 게임 환경을 만들고 싶으신 분사실적인 그래픽을 구현하고 싶으신 분그래픽스에 흥미가 있는 분머티리얼 그래프(블루프린트) 말고도 HLSL과 수식으로 셰이더를 만들고 싶으신 분 이 구현 경험을 통해 얻은 인사이트언리얼 엔진에서의 셰이더 사용 방법과 처리 과정언리얼 엔진이 커스텀 셰이더의 종류를 구분하는 방법https://dev.epicgames.com/documentation/ko-kr/unreal-engine/unreal-engine-materials          구.. 2024. 10. 13.
해쉬 테이블 Key-Value 구조로 데이터를 저장하는 자료구조로, 배열보다 검색과 삽입에 더 빠른 효율을 보인다. C++을 사용할 때 흔히 사용하는 map 자료구조를 구현할 때 가장 효율적으로 사용되는 방법이다. Hash란 무엇일까? 해쉬 테이블은 내부에 array와 같은 구조가 있지만, hash function 덕분에 선형 검색을 하지 않고 빠르게 값을 찾을 수 있다. 해쉬 함수는 우리가 입력하는 key 값을 어떠한 정수값으로 치환하여 array의 index로 변환한다. 이 때, 각각 다른 key에 대해 해시함수가 동일한 index를 부여하는 경우 해쉬 충돌(hash collision)이라고 한다. 이 해쉬 충돌의 대표적인 대처 방법은 다음과 같다. index가 가리키는 저장소 안에 또 다른 배열을 생성하여 같은.. 2024. 2. 11.
[프로그래머스/level2] 귤 고르기 문제 풀이과정 문제에서 가장 주의해야 할 점은 지금까지 담은 귤의 개수가 k개에 꼭 맞게 담아야 하는 게 아니라, k개 이상일 때의 서로 다른 종류의 수의 최솟값을 찾아야 한다는 것이다. 입출력 예 #1에 나온 것처럼 k가 6일 때, 넣을 귤의 개수를 딱 6개로 맞춰야 할 필요가 없고 개수가 k개를 넘어가되 종류의 수가 최소이기만 하면 된다. 입출력 예 #1로 더 자세하게 설명하면, tangerine = [1, 3, 2, 5, 4, 5, 2, 3] 일 때 수확한 귤 8개 중, 크기가 2인 귤 2개 + 크기가 3인 귤 2개 + 크기가 5인 귤 2개 = 6개 = k (귤 종류는 3가지로 정답) tangerine = [1, 3, 2, 5, 5, 4, 5, 2, 3] 일 때 수확한 귤 9개 중, 크기가 2인 귤.. 2024. 1. 24.
[프로그래머스/level2] JadenCase 문자열 만들기 문제 풀이과정 문자열에 들어갈 수 있는 문자 종류는 대문자, 소문자, ③숫자, ④공백 총 4종류이다. 공백문자가 연속해서 나올 수 있다는 것을 유의하며 케이스를 분석하면, ① 단어 첫 글자가 소문자면 대문자로 바꾸기 ② 첫 글자가 아닌 대문자면 모두 소문자로 바꾸기 이외에는 숫자와 공백 포함 모두 그대로 answer에 넣어주면 된다. ①번, 현재 가리키고 있는 글자가 단어의 첫 글자임을 판별하려면 바로 앞 글자가 공백인지 확인하면 된다. i - 1번째 요소가 공백인지를 확인하면 되는데, i = 0일 때 에러가 나기 때문에 s[0]은 따로 판별해주었다. ②번은 이전 요소가 공백이 아님을 확인하고, 현재 요소가 대문자인지를 확인하면 소문자로 바꿔주면 된다. 공백과 대문자/소문자 확인은 라이브러리의 isspa.. 2024. 1. 22.