목록DirectX12 (26)
For me

Euler 과 Quarternion Euler로 회전을 표현하게 되면, 회전 축 하나가 사라지는 짐벌락에 빠진다. 즉 한 축의 회전이 다른 축의 영향을 주는 것을 말한다. 3개의 차원으로 회전하던 축은 2개의 차원으로밖에 회전을 못한다는 단점이 생길 수 있다. Quaternion은 이를 해결하기위해 사용한다. 짐벌락이 발생하지 않을 뿐더러, 연산이 빠르고 정확도도 높다. 또한, 복소수를 이용하기 때문에 행렬보다 점유 메모리 영역이 작고 계산 부하가 낮다. 따라서 두 개 회전 사이의 보간(Lerp) 표현이 가능하다. 하지만 180보다 큰 값을 표현할 수 없다는 단점이 존재하다. 4개의 성분 (x,y,z,w) 로 이루어져 있고, (x,y,z)는 벡터 , (w)는 스칼라를 의미한다.
Cube 또는 Sphere로 Skybox 표현 Skybox Shader 더보기 #ifndef _SKYBOX_FX_ #define _SKYBOX_FX_ #include "params.fx" struct VS_IN { float3 localPos : POSITION; float2 uv : TEXCOORD; }; struct VS_OUT { float4 pos : SV_Position; float2 uv : TEXCOORD; }; VS_OUT VS_Main(VS_IN input) { VS_OUT output = (VS_OUT)0; // Translation은 하지 않고 Rotation만 적용한다 float4 viewPos = mul(float4(input.localPos, 0), g_matView); floa..

Normal Mapping (Bump Mapping) Normal Mapping을 사용하지 않을 때 Vertex Shader에서 정해준 각 정점의 값의 법선벡터로 내부의 점의 노말값을 보간 Normal Mapping을 사용하지 않고 Vertex 값을 무수히 늘릴 때 다양한 색 처리가 가능해짐. 하지만 프로그램 실행속도가 현저하게 느려지고, 연산량도 기하급수적으로 늘어남 Normal Texture u,v 좌표에 해당하는 각각의 픽셀에 Normal 값을 전달해주는 역할 Normal Texture은 local 좌표계를 사용하지 않고, 별도의 좌표계를 사용함. 그 이유는 Mesh 자체는 local 기준으로 지속적으로 변화하고, Normal Texture은 tangent Space(접하는 평면)을 사용 좌표 자체..
1. Light와 같은 위치, 방향, 크기만큼 Camera를 Setting 2. Render 하기 전, RenderShadow를 먼저 호출 ▶ 모든 물체를 그림 (바라보고 있는 깊이를 texture로 그림) 3. Shadow Render Target Map 에 그려짐 4. RenderLight 에서 함께 계산하여 그림자 생성 Shadow Shader 더보기 #ifndef _SHADOW_FX_ #define _SHADOW_FX_ #include "params.fx" struct VS_IN { float3 pos : POSITION; }; struct VS_OUT { float4 pos : SV_Position; float4 clipPos : POSITION; }; VS_OUT VS_Main(VS_IN in..
Dir viewLightDir = 처음에 세팅한 Direction에 View 행렬을 곱한후 단위벡터로 전환 diffuseRatio ( viewLightDir의 반대방향 과, view단위벡터 의 내적 ) Point Dir과 다르게 Position, Distance 이 추가됨. viewLightDir = 포지션 뷰에서 빛 포지션 뷰를 뺀 값 의 단위벡터 viewLightPos = 빛의 위치와 View 행렬을 곱한 값 Distance = 포지션뷰와 빛포지션 뷰의 거리 => distanceRatio = 1 - (Distance / 최대거리)의 제곱 멀어지면 멀어질수록 어두워 지기 위해 위와같이 구현 Spot Point의 viewLightPos 값을 구하는 과정까지 같은 과정 halfAngle = 최대각도 / 2..

조명과 음영의 개념 조명과 음영에 영향을 주는 요인들 Light Source Suface orientation Surface properties psychological effect contrast 차이와 Mach band효과 등 조도 함수와 광원의 색 기여도 조도 함수 위치 방향 파장 물체 면의 밝기는 광원의 모든 영향의 합으로 구함 지역 조명 모델만 고려 점광원 빛이 방사형으로 진행 위치성 광원 광원의 위치가 중요함 밝기는 광원과 표면사이의 거리의 제곱에 반비례 점 p에 도착하는 빛의 세기 원거리 광원 Distant Light, 광원이 태양과 같이 매우 먼 위치에 있음 기본 조명 모델 광-재질 상호작용 눈에 색이 감지되는 과정 현실에서는 태양으로부터 백색광 물체의 표면에서 일부 파장대는 흡수 나머지는..

Transform Camera를 구현하기전, 먼저 Transform을 구현해야함 ▶ 월드좌표, 로컬좌표를 구해야 하기 때문에 PushData를 통해 ConstantBuffer을 통해 transformParams를 GPU로 보내준다 Transfom.h 더보기 #pragma once #include "Component.h" class Transform : public Component { public: Transform(); virtual ~Transform(); virtual void FinalUpdate() override; void PushData(); public: // Parent 기준 const Vec3& GetLocalPosition() { return _localPosition; } const..
Scene 게임 설계에 따라, 게임은 단일 씬으로 구성되거나, 여러 개의 씬으로 구성될 수 있다. 각각의 스테이지에 대응하는 여러 개의 씬으로 구성할 수 있다 SceneManager.h (싱글톤) 더보기 #pragma once #include "EnginePch.h" class Scene; enum { MAX_LAYER = 32, }; class SceneManager { DECLARE_SINGLE(SceneManager); public: void Update(); void Render(); void LoadScene(wstring sceneName); void SetLayerName(uint8 index, const wstring& name); const wstring& IndexToLayerName(..
수많은 물체를 Resources(mesh, shader, texture)를 매 물체마다 만들고, 로딩하고, 연결하는 과정은 좋지않음. => Material이라는 개념을 사용하여 관리 Engine 에서 다음과 같이 선언 ▶ CreateConstantBuffer(CBV_REGISTER::b2, sizeof(MaterialParams), 256); CommandQueue에서 RenderBegin에서 다음과 같이 선언 ▶GEngine->GetConstantBuffer(CONSTANT_BUFFER_TYPE::MATERIAL)->Clear(); Material에서는 ConstantBuffer, ShaderResourceBuffer 를 업로드하여 파이트라인 세팅까지 하나로 관리함. Material.h 더보기 #pra..
Unity 에서는 각종 Component를 통해 오브젝트의 성질을 추가해줄 수 있다. ex) Mesh, Collider etc.. Unreal 에서는 빈 깡통의 오브젝트가 아닌 부모클래스의 상속을 받는 오브젝트로 생성을한다. GameObject GameObject.h 더보기 #pragma once #include "Component.h" #include "Object.h" class Transform; class MeshRenderer; class Camera; class Light; class MonoBehaviour; class ParticleSystem; class BaseCollider; class Terrain; class Animator; class GameObject : public Obje..