https://gall.dcinside.com/mgallery/board/view/?id=rendering&no=208&page=2
그래픽스 초보가 벌칸이랑 RTX로 phton beam 구현함https://youtu.be/CNZyZBfqwkYhttps://github.com/donguklim/vk_raytracing_tutorial_KHR/tree/master/photon_beam엔비디아에서 만든 벌칸 샘gall.dcinside.com위의 글 쓴 사람인데,
벌칸으로 2달 걸려서 구현한거 디렉12 공부해서 공부한지 3주만에 DXR로 구현함.
벌칸으로 이미 여러 개념이 잡혀있어서 DX12는 더 빠르게 익혔다.
벌칸 버전은 프레임 그릴때 마다 빛을 시뮬레이션 돌리지 않고 그냥 같은거 계속 썼는데,
디렉 버전에서는 프레임 그릴때 마다 빛을 시뮬레이션 함. 그래서 광원의 위치도 움직이고, 빛의 패턴도 계속 바뀜.
빛의 데이터를 담은 Tlas를 프레임 별로 새로 생성한다.
예전 벌칸 버전 쓴 글에서 어떤 사람이 댓글로 DXR에서는 일단 CPU에서 GPU에 Tlas 인스턴스 디스크립션 업로드 해야한다고 말했는데,
아님.
벌칸이든 디렉이든 GPU가 셰이더 돌리면서 Tlas 인스턴스 디스크립션 데이터 생성한거 GPU 내부에서 그냥 그대로 쓸 수 있음.
위 영상에서 보여준 프로그램에서는 각 프레임별로 레이트레이싱 파이프 라인이 두개 작동됨.
1. 1번째 파이프라인은 3D 모델로 만든 Tlas를 가지고 빛을 시뮬레이션 하고, 그렇게해서 생긴 빛의 데이터로 Tlas instance 디스크립션을 생성.
2. 시뮬레이션 완료되면 포톤과 빔의 Tlas를 생성함.
3. 2번재 파이프라인은 3D 모델 Tlas, 2에서 만든 포톤과 빔 Tlas 2개를 사용. 레이트레이싱을 해서 화면을 그리게됨.
벌칸 글에서 설명한거 다시 설명하자면,
구현한 알고리즘은 기본적인 포톤 매핑과 디즈니에서 만든 알고리즘인 포톤 매핑 알고리즘을 사용함.
포톤 매핑은 기본적인 PBR 알고리즘이고, 이건 3D 모델의 표면으로 인한 빛을 표현하기 위해 사용함.
포톤빔은 간섭매체로 인한 빛의 산란과 소실을 표현하는데 사용함.
여기서 간섭매체는 공기, 물 연기, 안개 구름 같이 볼륨을 가지고 있고, 빛의 산란과 소실이 일어나는 매체를 가리킨다.
디즈니 애니메이션 탱글드에서 사용된 알고리즘임.
벌칸 버전은 Nvida에서 기본적으로 제공해준 샘플 앱 가지고 구현해서 3D 모델 로딩이나, Gui 같은거 원래있던거 조금만 수정해서 간단히 썼는데,
디렉 버전은 Frank lua 책에서 나온 코드 베이스로 시작했기에 외부 라이브러리 써서 모델 로딩 하는 코드 만들 외부 라이브러리 Gui 붙이는 것도 내가 디렉용으로 포팅함.
고생스러웠지만 많이 배웠다.
https://github.com/donguklim/DirectX12PhotonBeam
https://github.com/donguklim/DirectX12PhotonBeam
GitHub - donguklim/DirectX12PhotonBeam: Photon beam rendering algorithm implemented with DirectX12 and RTXPhoton beam rendering algorithm implemented with DirectX12 and RTX - GitHub - donguklim/DirectX12PhotonBeam: Photon beam rendering algorithm implemented with DirectX12 and RTXgithub.com현재 readme에는 기술 레퍼런스랑, 외부 코드 사용한거 밖에 없는데 내일 내용 추가할 것임.
이제 게임회사나 여기저기 지원해보고 안되면 그냥 원래 하던거 하련다.
굳 게임회사 지원해보고 후기도 올려줘
초보 어디감ㅋㅋ
나 디렉 경험 3~4주임.