본문 바로가기

IT/Graphics15

Metal 스터디 8주차 (23.02.02) Interaction 게임의 실패 시나리오는 Player가 Paddle에서 공을 놓치고 공이 보드 뒤쪽이나 Paddle 뒤에서 튀는 경우이다. 또한 Player에게 3번의 기회를 준다. 먼저 lives 속성을 설정한다. var lives = 3 bounceBall에서는 공이 테두리의 상단과 하단에 대해 튕기는지 확인한다. func bounceBall() { ... if abs(ball.position.z) > gameArea.height / 2 { ballVelocity.z = -ballVelocity.z lives -= 1 if lives < 0 { print("GAME OVER - YOU LOST") } else { print("Lives: ", lives) } } ... } 볼 위치 Z를 확인한다... 2023. 4. 16.
Metal 스터디 7주차 (23.01.26) Introduction 게임 엔진에 대한 Metal Rendering 이후, 게임을 작성하는 방법에 대해 알아보자. Breakout* 게임을 따라 Raybreak라는 프로젝트를 만들어볼 것이다. Breakout (비디오 게임)은 1976년 아타리가 개발한 아케이드 게임. 간단한 게임이지만 대부분의 게임에서 사용하는 많은 원칙이 포함되어 있다. 새로운 Model이 있는 새로운 Scene을 만든다. 게임 경기장의 크기를 결정하고 모든 Model의 시작 위치를 계산한다. 그런 다음 Models bounding Box를 사용하여 2D에서 간단한 충돌 검사를 수행한다. (=모든 방향에서 모델의 높이와 너비를 알 수 있다.) 효과음과 음악을 게임에 추가하고 게임을 마무리하기 위해 승패 여부를 보여주는 두 번째 Sc.. 2023. 2. 11.
Metal 스터디 6주차 (23.01.19) Function Specialization 두 가지 다른 대안을 처리해야 하는 Fragment Shader에 문제가 있다. Model의 Texture에 UV 좌표가 있는 경우 Rendering에 Texture 색상을 사용한다. 그렇지 않은 경우 Material 색상을 사용한다. 예시는 단순한 상황이고, 대부분의 Model에는 Bump Map, Ambiens Occlusion 및 Spercularity에 대해 4개 또는 5개의 서로 다른 Texutre가 존재하기도 한다. Model은 사용 가능한 Texture 중 일부를 사용할 수 있지만 모든 Texture가 동일한 Texture를 사용하지는 않는다. 조건 분기와 GPU Shader 함수는 비용이 크므로 배제한다면, 함수 전문화Function Special.. 2023. 2. 6.
Metal 스터디 5주차 (23.01.12) Introduction Surface에 대해 배울 예정. 하드 코딩된 색상 배열 대신에 기존 Meterials의 색상으로 모델을 렌더링한 다음 alternative look으로 기차에 대한 Texture를 추가한다. 또한 성능 저하가 거의 없이 100개의 기차를 렌더링하는 방법과 성능에 대해 배운다. Materials Model I/O를 사용하여 Model을 읽는다. Index drawing을 위해 MDL mesh와 submesh를 MetalKit mesh와 submesh로 변환한다. submesh는 material도 갖고 있다. material 속성들은 mesh group의 surface를 보여준다. 각 모델 I/O submesh에는 material 관련 속성(base color, specular in.. 2023. 1. 15.
Metal 스터디 4주차 (23.01.06) Normals Scene이 원근감과 깊이를 갖고 있지만, 약간의 음영Shading이 있을 때까지는 완전한 3D가 아니다. 우리는 빛의 방향을 설정할 수 있으며 빛에서 멀어지는 Vertex는 빛을 바라보는 Vertex보다 어둡다. 그래서 꼭짓점들이 어느 방향을 바라보고 있는지를 알아야 한다. 표면 법선Surface Normal을 사용하여 이를 알아낸다. Surface Normal은 직각으로 가리키는 Vector로, 표면에 직각이다. Blender가 OBG 파일을 내보낼 때 파일에 Surface Normal이 포함된다. Surface Normal을 사용하여 표면의 기울기와 방향을 알 수 있다. Normal의 방향을 빛과 음영의 방향과 적절하게 비교할 수 있다. OBG 파일에서 Normal을 읽도록 코드를 변.. 2023. 1. 15.
Metal 스터디 3주차 (22.12.22) Introduction 3D 공간과 3D 공간에서 정점을 이동하는 방법. 장면에서 멀리 떨어져 있는 요소가 더 작게 표시되도록 원근감 있게 렌더링한다. 원근감 있는 모델을 렌더링할 수 있게 되면 모델에 조명을 비출 수 있으며 이것이 얼마나 큰 차이를 만드는지 알 수 있다. Position your model 우리는 x, y, z 축이 있는 좌표 공간에서 작업한 다. 이 축의 중심에 원점이 있다. 모든 방향에서 위치가 0이고 위쪽 축은 y축이 된다. (Blender와 같은 일부 앱은 위쪽 축에서 z을 사용한다) 모델의 각 정점은 일반적으로 -1과 1 사이의 위치를 가진다. 모델은 종종 이 범위 밖의 정점 위치를 갖지만 지금은 -1과 1 사이에서 작업할 것이다. (NDC) 행렬을 사용하면 이러한 정점을 쉽게.. 2022. 12. 28.
Metal 스터디 2주차 (22.12.15) Metal Buffers GPU의 Shader 파일에서 위치 및 색상 배열을 하드 코딩하는 대신 CPU에서 하드 코딩하고 vertexBuffer에서 GPU로 보낸다. 이것은 큰 차이가 아닌 것처럼 보이지만 하드 코딩된 정점 배열을 파일에서 가져온 3D 모델로 대체하게 만든다. 이와 같이 삼각형을 그릴 때 Swift에서는 세 개의 정점 위치로 배열을 만든다. GPU가 이 배열을 읽을 수 있도록 MTLBuffer 개체에 복사한다. 적절한 길이의 이 버퍼를 생성하도록 GPU 장치에 요청한다. 인수 테이블(Arugment Table)을 사용하여 MTLBuffer를 Shader에 Madpping한다. Metal에는 Buffer, Texture 등 다양한 유형의 리소스가 있으며 각 리소스 유형에는 고유한 인수 테이.. 2022. 12. 28.
Metal 스터디 1주차 (22.12.09) Notion Link Introduction Metal이란? 간단히 말해서, Metal은 GPU로 데이터를 전송하고 GPU 명령을 스케줄링하는 일을 하는 Swift, Objective-C API이다. 많은 스레드에서 병렬로 실행하기 위해 큰 작업을 분할할 수 있는 경우, CPU로 더 적은 수의 스레드에서 처리하도록 하는 것보다 GPU에 배치하는 것이 가장 좋다. Metal을 사용하면 작은 프로세스들을 보내서 GPU에서 병렬로 실행하고 하드웨어와 직접 통신할 수 있다. Metal은 기기 화면에 표시되는 모든 것을 뒷받침한다. 대부분의 Apple Visual framework(Core Animation, SpriteKit, SceneKit 등)는 Metal을 기반으로 구축된다. Metal은 Apple 기기에.. 2022. 12. 13.
컴퓨터 비전 스터디 7주차 : 21.05.23 1. 에지 검출의 기초 물체의 경계에서는 명암값에 급격한 변화가 일어난다. 그에 비해 물체 내부나 배경 영역은 변화가 없거나 있어도 작은 변화만 발생한다. 이것이 바로 에지 검출edge detection의 핵심 토대이다. 에지 : 영상의 명암, 컬러, 또는 텍스처와 같은 특성이 급격히 변화하는 지점 모든 에지 검출 알고리즘은 변화를 측정하고 변화량이 큰 곳을 에지로 취하는 원리를 따른다. 1. 디지털 영상의 미분 수학에서 변화를 측정하는 기초 이론은 미분이다. 하지만 컴퓨터 비전이 다루는 디지털 영상은 연속 공간이 아닌, 이산 공간에서 정의된다. 따라서 이산 공간에서 도함수를 근사화하는 방법이 필요하다. Δx를 얼마로 할 것인지가 핵심인데, 이산 공간에서 가장 작은 단위는 1이므로 Δx = 1이라고 가정.. 2021. 5. 24.
컴퓨터 비전 스터디 6주차 : 21.05.09 Chapter 2 연습문제 1. 명암 단계가 [0, 9]이고 크기가 5 X 5인 영상 (1) 히스토그램을 구하시오. h = (1, 3, 4, 6, 5, 1, 1, 3, 1) h(l) = (0.04, 0.12, 0.16, 0.24, 0.2, 0.04, 0.04, 0.12, 0.04) (2) 히스토그램 평활화를 위한 매핑 표를 구하시오. c(l) = (0.04, 0.16, 0.32, 0.56, 0.76, 0.8, 0.84, 0.96, 1) = 누적 히스토그램 (3) 평활화된 영상을 제시하시오. out(l) = (0.36, 1.44, 2.88, 5.04, 6.84, 7.2, 7.56, 8.64, 9) 1 1 3 3 3 0 1 5 7 5 3 5 8 9 5 7 7 9 9 9 5 7 7 7 5 2. 연결요소 번호 .. 2021. 5. 22.