본문 바로가기

그래픽스ㆍDirectX14

[DirectX 11] Phong Shading 본 내용은 강의를 토대로 작성하였습니다. honglab에서 강의를 구매하실 수 있습니다. Phong reflection model - 조명이 빛을 반사해서 우리 눈에 어떻게 보이는 지에 대한 모델 - 물체가 조명을 받았을 때 Ambient + Diffuse + Specular로 표현 Diffuse 어떤 표면의 normal vector →n과 조명을 향하는 벡터인 →l이 있을 경우 빛을 받는 강도는 두 벡터의 각도와 관련이 있다 각도가 작으면 작을수록 빛을 많이 받고 크면 클수록 적게 받음각도가 0일 때 가장 값이 크다 → cos를 사용한다 구현 예시 const vec3 dirToLight= glm::normalize(light.pos - hit.point); const float diff = glm::m.. 2023. 9. 25.
[DirectX] 3차원 구 그리기(구, 직선 충돌) 본 내용은 강의를 토대로 작성하였습니다. honglab에서 강의를 구매하실 수 있습니다. 원리 1. 모니터 픽셀을 시작으로 모니터와 수직인 방향으로 가상 공간을 향해 광선을 쏴준다. 2. 광선에 부딪힌 물체로부터 색을 가져온다. 여기서 z 방향은 const auto rayDir = vec3(0.0f, 0.0f, 1.0f); 색을 가져오기 위해서는 먼저 광선이 물체에 닿았는지 안 닿았는지 먼저 판단이 필요 const Hit hit = sphere->IntersectRayCollision(ray); // 광선이 물체에 닿으면 그 물체의 색 반환 vec3 traceRay(Ray &ray) { const Hit hit = sphere->IntersectRayCollision(ray); if (hit.d < 0... 2023. 8. 29.
[그래픽스 새싹코스] Separable Gaussian blur 본 내용은 강의를 토대로 작성하였습니다. honglab에서 강의를 구매하실 수 있습니다. 박스 블러 vs 가우시안 블러 Kernel Convolution - Kernel을 이미지의 모든 픽셀에 적용을 시키는 과정 컴퓨터 그래픽스에서 Gaussian Blur를 할 때는 Seperable Convolution을 사용한다. Gaussian Blur - 박스 블러 + weights - 이미지에 Gaussian 필터를 적용하여 흐림 효과를 생성 - 박스 블러 구현시 자기 자신을 포함해서 이웃 픽셀들의 색깔 값들을 동등하게 평균을 냈음 - 가우시안 블러는 가우시안 함수를 사용 - 모든 픽셀들을 동등하게 평균을 내지 않고 자기 자신은 가중치가 높고 멀어질수록 가중치가 낮아짐 - 따라서 멀리 있는 픽셀들은 가중치가 줄.. 2022. 9. 19.
Ray Casting, Ray Tracing, Real-Time Ray Tracing 배경 - 렌더링 기술 렌더링을 위한 첫 번째 단계는 물체의 형상을 선구조로 생성해야하며, 완성된 기하학적 형상에 다음과 같은 알고리즘이 적용된다. - 빛과 물체의 관계로부터 물체 표면의 밝기, 빛의 반사 및 굴절 효과 등을 처리하는 광선 추적법 - 빛의 성질로부터 물체의 광도를 계산하는 쉐이딩 알고리즘 - 빛과 물체의 관계에서 발생하는 그림자 생성 알고리즘 - 물리 기반 렌더링(Physically Based Rendering, PBR) Local Illumination(지역 조명) - 광원에서 빛이 방출되고, 표면에 충돌했을 때 관찰자에게 빛이 도달할 때까지 다른 빛의 영향을 받지 않는 것으로 가정 Global Illumination(전역 조명) - 표면에서 반사되는 빛에 다른 물체에서의 반사, 굴절 따.. 2022. 6. 6.
[KUOCW] 13. 캐릭터 애니메이션 - 2. 본 스페이스에서 캐릭터 스페이스로 본 내용은 강의를 토대로 작성하였습니다. 이제 뼈들이 움직인다. 근데.. 기껏 뼈 공간으로 들어 왔는데, 다시 캐릭터 공간으로 들어가야 한다고?? => 뼈 공간으로 들어 왔는데 (렌더링을 위해서 애니메이션 된 다음에) 다시 캐릭터 공간으로 와야 한다. 그림을 보면 forearm이 90도 회전해서 방향이 바뀜. 이 예에서는 forearm만 움직였지만 실제로는 온갖 뼈들이 다 움직임. 근데 이 움직인 결과를 우리는 렌더링을 해야함 화면에 보여줘야 하니까. 근데 화면에 보여줄려면 렌더링 파이프라인을 거쳐야함 렌더링 파이프라인의 첫 번째 변환? 월드 변환. 월드 변환은 어느 공간에서 어느 공간을 움직이는 것이지? 오브젝트에서 월드로 가는 것 그럼 캐릭터에서 오브젝트 공간이라는 것은 뭐지? 캐릭터 공간, 캐릭터 .. 2022. 6. 5.
[KUOCW] 13. 캐릭터 애니메이션 - 1. 관절체 애니메이션 본 내용은 강의를 토대로 작성하였습니다. Skeleton 캐릭터를 움직일 때는 기본적으로 골격을 사용함 골격은 뼈로 구성이 된건데 이 뼈들은 개별적으로 움직임 이것을 articulated body, 관절체라고 함 이렇게 스켈레톤을 이용해서 캐릭터 애니메이션을 하려면 리깅 작업을 거쳐야 함 Rigging 폴리곤 매쉬(a)에 스켈레톤을 맞춰 넣는 것(f) 기본적인 폴리곤 매쉬 자세 = default pose = dress pose 드레스 포즈로 폴리곤 매쉬가 만들어지면 그 안에 뼈(스켈레톤)를 박아야 하는데 3dsMax는 바이패드라고 하는, 기본적인 스켈레톤을 제공 * 바이패드를 구성하는 뼈의 개수가 많을 수도 있다. 근데 우리가 간단한, 특히 핸드폰에서 실시간 캐릭터 애니메이션을 하려면 뼈의 개수는 적을 .. 2022. 6. 4.