no image
PBR
매끈매끈한 강철 공을 띄우고 , 이 공이 주변 환경 이미지를 반사하는 모습을 확인했다. PBR에 쓰이는 세부적인 공식들을 모두 이해하지는 못했지만, PBR은 다음과 같은 요소들을 중시한다는 점만 일단 새겨두면 될 것 같다. 1. 표면에 반사되는 굴절되는 빛의 합은 일정해야 한다. 즉, 에너지 보존 법칙을 고려해야 한다. 2. 빛의 반사율은 시선벡터가 표면의 법선 방향과 둔각을 이룰수록 높아진다는 프레넬 반사를 고려해야 한다. 3. PBR은 까끌까끌한 미세면의 존재를 의식하며, 국소면의 까끌까끌한 정도를 roughness라는 수치로 나타낸다. 표면은 roughness가 낮을수록(매끈매끈할수록) 정반사하는 성질이 생긴다.
2024.04.05
no image
Deferred Rendering에 대한 시도 : 큐브맵 적용
장면이 너무 허해서 큐브맵을 적용해 보았다. 확실히 태가 좀 살고 코딩할 맛이 더 난다. 하늘에서 내리쬐는 상수 디렉셔널 라이트를 만들어서 diffuse 색상과 N dot L 연산만 실행시켜 보았다. 지금은 탄젠트 스페이스에서 정의된 노멀 값을 그대로 가져다 썼기 때문에 제대로 된 노말 연산은 되지 않는 모습이다. 각 픽셀별 노말 값과 노말 텍스처의 값을 조합하여 제대로 된 N dot L 연산을 해본 다음 PBR 공식을 가져와 렌더링을 해봐야겠다. 모자의 머리통 부분에 계단 현상이 생기는게 아쉽다. 디퍼드 렌더링 방식은 안티얼라이싱 적용이 힘든 구조라고 하던데, 이건 먼 훗날에 개선해봐야겠다.
2024.03.18
no image
Deferred Rendering에 대한 첫번째 시도
디퍼드 렌더링은 물체들에 대한 정보들을 여러 장의 텍스처에 저장해놓고 마지막으로 출력물을 계산할 때 각 텍스처로부터 정보를 종합하여 빛 연산을 진행하는 렌더링 기법이다. 디퍼드 렌더링을 더 깎기 전에 물체 표면의 정보를 저장하는 g버퍼들의 정보를 항상 화면 상단에 띄워 확인할 수 있도록 만들었다. g버퍼들의 정보는 왼쪽에서 오른쪽으로 차례로 각 픽셀들의 위치, 노멀 방향, 알베도 색상, ambient occlusion, roughness, metallic 정보를 rgb 값으로 저장한 ARM 정보에 해당한다. 지금은 빛 연산은 배제하고 최종 출력값으로는 알베도 색상 값만 출력하게 했다.
2024.03.15
no image
맵 에디터 개발의 흔적
테스트 시연 피직스 충돌 기반 피킹 각 패널 기능 설계
2024.01.31
no image
게임 오브젝트 갯수 메모리 스트레스 테스트
게임 오브젝트를 100만개 만드니까 프로세스 메모리 4.4기가를 차지한다. 단순하게 생각하면 게임오브젝트들이 하나당 4000바이트를 차지하는 것 같은데, 좀 많다. 게임 오브젝트와 컴포넌트에 STL 떡칠을 해 놓으니 이렇게 덩치가 하염없이 커진 것 같다. 게임엔진을 만들 일이 또 생기면 게임오브젝트들도 여러 분류를 나누어서 경량 게임 오브젝트들은 메모리를 적게 차지할 수 있도록 최적화를 진득하게 고려해봐야겠다.
2024.01.18

PBR

yunu95
|2024. 4. 5. 19:55

 

 매끈매끈한 강철 공을 띄우고 , 이 공이 주변 환경 이미지를 반사하는 모습을 확인했다.

 PBR에 쓰이는 세부적인 공식들을 모두 이해하지는 못했지만, PBR은 다음과 같은 요소들을 중시한다는 점만 일단 새겨두면 될 것 같다.

 

1. 표면에 반사되는 굴절되는 빛의 합은 일정해야 한다. 즉, 에너지 보존 법칙을 고려해야 한다.

2. 빛의 반사율은 시선벡터가 표면의 법선 방향과 둔각을 이룰수록 높아진다는 프레넬 반사를 고려해야 한다.

3. PBR은 까끌까끌한 미세면의 존재를 의식하며, 국소면의 까끌까끌한 정도를 roughness라는 수치로 나타낸다. 표면은 roughness가 낮을수록(매끈매끈할수록) 정반사하는 성질이 생긴다.

 

 장면이 너무 허해서 큐브맵을 적용해 보았다. 확실히 태가 좀 살고 코딩할 맛이 더 난다.

 하늘에서 내리쬐는 상수 디렉셔널 라이트를 만들어서 diffuse 색상과 N dot L 연산만 실행시켜 보았다. 지금은 탄젠트 스페이스에서 정의된 노멀 값을 그대로 가져다 썼기 때문에 제대로 된 노말 연산은 되지 않는 모습이다. 각 픽셀별 노말 값과 노말 텍스처의 값을 조합하여 제대로 된 N dot L 연산을 해본 다음 PBR 공식을 가져와 렌더링을 해봐야겠다.

 

 모자의 머리통 부분에 계단 현상이 생기는게 아쉽다. 디퍼드 렌더링 방식은 안티얼라이싱 적용이 힘든 구조라고 하던데, 이건 먼 훗날에 개선해봐야겠다.

'개발의 편린' 카테고리의 다른 글

PBR  (0) 2024.04.05
Deferred Rendering에 대한 첫번째 시도  (0) 2024.03.15
맵 에디터 개발의 흔적  (0) 2024.01.31
게임 오브젝트 갯수 메모리 스트레스 테스트  (0) 2024.01.18

 

 디퍼드 렌더링은 물체들에 대한 정보들을 여러 장의 텍스처에 저장해놓고 마지막으로 출력물을 계산할 때 각 텍스처로부터 정보를 종합하여 빛 연산을 진행하는 렌더링 기법이다. 디퍼드 렌더링을 더 깎기 전에 물체 표면의 정보를 저장하는 g버퍼들의 정보를 항상 화면 상단에 띄워 확인할 수 있도록 만들었다. g버퍼들의 정보는 왼쪽에서 오른쪽으로 차례로 각 픽셀들의 위치, 노멀 방향, 알베도 색상, ambient occlusion, roughness, metallic 정보를 rgb 값으로 저장한 ARM 정보에 해당한다. 지금은 빛 연산은 배제하고 최종 출력값으로는 알베도 색상 값만 출력하게 했다.

테스트 시연

 

피직스 충돌 기반 피킹

각 패널 기능 설계

 

 

 게임 오브젝트를 100만개 만드니까 프로세스 메모리 4.4기가를 차지한다. 단순하게 생각하면 게임오브젝트들이 하나당 4000바이트를 차지하는 것 같은데, 좀 많다. 게임 오브젝트와 컴포넌트에 STL 떡칠을 해 놓으니 이렇게 덩치가 하염없이 커진 것 같다. 게임엔진을 만들 일이 또 생기면 게임오브젝트들도 여러 분류를 나누어서 경량 게임 오브젝트들은 메모리를 적게 차지할 수 있도록 최적화를 진득하게 고려해봐야겠다.

'개발의 편린' 카테고리의 다른 글

PBR  (0) 2024.04.05
Deferred Rendering에 대한 시도 : 큐브맵 적용  (0) 2024.03.18
Deferred Rendering에 대한 첫번째 시도  (0) 2024.03.15
맵 에디터 개발의 흔적  (0) 2024.01.31