Unity Study 21

2026-01-10_ GetWorldSpaceNormalizeViewDir -Not Solved

Phong, Blinn Phong 제작시viewDir를 쉐이더에서 값을 받아와야 하는데 이를 받는 두가지 방법을 둘다 사용해 보면서 문제상황이 생겼다. veretx shader 부분 구조 정의할때 Varyings 안에o.viewDir = normalize(_WorldSpaceCameraPos - vertex.positionWS);fragment shader에서viewDirWS = IN.viewDir;fragment shader에서float3 viewDirWS = GetWorldSpaceNormalizeViewDir(IN.posWS); 둘이 값 차이가 발생하는데(특정 조건에서) 어느 부분에서 문제가 생긴건지 전혀 모르겠다. 현재 좌표축은 카메라가 +z 방향쪽에 있으므로 첫번째와 같이 푸른색이 나와야 ..

Unity Study 2026.01.10

2026-01-08_Gamma Correction & GPU Texture Compression

Cpu -> Gpu 데이터의 전달 흐름 Cpu에서 Asset을 메모리에 로드PNG, TGA, JPG 등의 파일을 메모리에 적재한다. 엔진 임포터에서 해당 텍스쳐에 대한 색공간을 처리함sRGB / Linear 기본적으로 모니터는 CRT의 역사상 전자총의 전압 세기와 실제 모니터에서 보여지는 밝기가 비선형적 관계이다. 우리는 a와 같은 색상을 기대하지만 모니터의 물리적 특성상 실제로는 b와 같은 값이 나오게 됨. 즉, 의도하고자 하는 (127,127,127)의 값이 이보다 더 낮은 값으로 나오게 됨 따라서 이러한 인지 부조화를 막기 위해 밝기 값이 떨어지는 물리적 색상 값에 대한 역보정 처리된 데이터를 저장해 놓아 이 데이터가 모니터에 출력될 때 물리적으로 밝기가 떨어져도 올바른 색상이 표시되도록 하는 것이..

Unity Study 2026.01.08

2026-01-03_Normal, Normal Mapping, Tangent Space, TBN(1)

Normal, Normal Mapping, Tangent Space, TBN Normal - 법선벡터노말의 종류에는 face normal, vertex normal 이 있음 Face normal은 평면의 방정식ax + by + cz + d =0에서점 p0와 임의의 점 p(x,y,z)에 대해(p-p0) dot n 이 0이 되도록 하는 점 p들의 집합이므로따라서 pdotn – p0dotn = 0 에 대응되어 (a,b,c) = n인 face normal을 가리킴 Hard edge에서 같은 위치의 vertex라도 인접한 face의 normal에 따라서 각각 다른 normal 값을 가질 수 있음예를 들어 큐브의 경우 한 꼭짓점에 대해서 3개의 face가 겹쳐 있기 때문에각 face의 normal vector를 한..

Unity Study 2026.01.03

2025-01-02_Unity Blender Coordinate Difference

Unity Blender Coordinate Difference 언리얼, 유니티,블랜더, maya 등에서 그래픽스 API의 LHS, RHS의 차이 등을 논하며 Model space, World space의 좌표계를 논하는 것은 사실상 틀린 말임. LHS, RHS은 기본적으로 Camera Space, Clip Space에서 통용되는 말 Directx – LHSOpenGL – RHS 엔진에서 사용하는 좌표계와그래픽스 API에서 사용하는 좌표계는서로 별개다. Model space -> World space 단계에서는 어떤 좌표계를 쓰는지 와는 무관한 동작으로단지 게임 엔진 내부에서 모델, 월드 공간의 좌표계 기준을 어떻게 정의했는지에 따라서 다르게 결과가 나타나는 것 뿐임 유니티는 front가 +z 방향이..

Unity Study 2026.01.03

2025-12-17_SmoothDamp, Critical Damped Oscillation

Damping, Critical Oscillation TPS 시스템에서는 사용자의 캐릭터 조작에 있어서 자연스럽고 부드러운 경험을 주는 것이 중요하다. 마우스의 동작이나 wasd의 동작을 input 값에 따라서 즉시 반응해 버리면갑자기 오브젝트가 0에서 1로 움직이는 느낌을 주게 되므로 연속적이지 못하다. 현실에서 물체들을 움직일 때는 속도가 0일 때 목표하는 속도 및 회전까지 가속도를 갖고 움직이며 중간에 일부 등속도가 유지되다가 다시 감소하는 형태를 띄게 된다. 현실의 현상들과 맞지 않는 로직 처리는 경험에 있어서 괴리감을 주기 때문에 이를 해결하기 위해서 감쇠라는 개념을 도입한다(Damping)게임은 하나의 실시간 변화형 영상 매체이다. 영상을 출력하기 위해서는 촬영을 사전에 해야 하며 이를 위해..

Unity Study 2025.12.17

2025-12-08_TPS System Basic

ThirdPersonCamera 목표마우스 x,y축에 대한 이동을 통해 카메라가 Capsule 오브젝트를 향하면서 공전하는 3인칭 시스템을 만들자화면 마우스 움직임과 독립적으로 작동하는 wasd 시스템을 만들자3인칭 카메라 시스템을 구축하자 3인칭은 1인칭과 다르게 카메라의 부모 자식 관계가 해제되어 있어야만 카메라에 여러 add-on을 자연스럽게 붙일 수 있다.(흔들림, damping, collison 등)카메라와 오브젝트간 부모 자식 관계를 1인칭 3인칭 변환을 고려한다면 먼저 부모 자식 관계로 둔 다음에 3인칭 mode일때는 카메라에 할당된 parent를 null로 바꾸는 방식을 통해서처리가 가능하다. TPS Rotatioina. Mouse Input bindingInput action으로 마우..

Unity Study 2025.12.08

2025-12-05_Script Cycle + GC

Script Cycle(2)Class Body, Class Scope변수 = 필드(Field)라고도 부름 데이터 변수의 선언을 할 때는 클래스 본문에 선언을 함변수를 선언하게 되면 public으로 할 시에 인스펙터 상에서 해당 변수에 대한 필드가 표시됨유니티에서는 변수에 대문자가 있을 때마다 이름에 공백을 삽입하여 띄워서 표시함. 플레이모드에서는 변수의 값을 변경할 때 중지할 필요 없이 바로 효과를 확인할 수 있음플레이 모드를 중지하게 되면 이전 값으로 재설정됨 데이터 변수가 아닌 객체(Object) 변수의 경우, 필드 선언부에서는 정의 및 인스턴스의 초기화가 불가능하다.스크립트 사이클에서 필드 초기화 시점은 아직 유니티 게임 공간에서 오브젝트가 생성되지 않은 상태이기 때문에 이를 해당 변수의 메모리에 ..

Unity Study 2025.12.05

2025-12-02_Quaternion(3)

Quaternion(3)쿼터니언은 unityengine.coremodule.dll에 unityengine.quaternion으로 타입이 선언되어 있으며각 구조체의 메서드, 연산자 오버로딩, 연산처리 및 return 타입 등이 선언되어 있음 Angle = rad * 57.29578f (180/π)각도와 라디안 표기법에 대한 결과값 변환식 Epsilon = 1E-06f;앱실론은 수학적으로 매우 작은 값을 의미하며, 컴퓨터에서 0으로 나누게 되면 IEEE-754 부동소수점 표기법에서 부호, 지수, 가수로 나누어 데이터를 저장할 때지수부의 표현이 최대가 되어(8비트 255) 결과적으로 메모리에서는 무한대, 의미적으로서는 유용하지 않은 값을 나타냄.따라서 해당 값이 처리되는 경우 NaN(not a number)을..

Unity Study 2025.12.02

2025-12-01_Parent + Child Hierarchy TRS

부모자식 계층구조의 변환 구현 목표Obj1(object), Obj2(target)가 있을 때Obj1(object)이 Obj2를 바라보면서(target)obj2의 로컬 공간에 obj2.up 방향을 축으로직선거리로 5만큼 차이를 두며Obj2를 바라보면서공전하는 기능을 넣고 싶다. 우선 유니티 관계에서 obj1을 obj2의 자식 관계로 집어 넣는다. 혹은 수동적으로 코드에서 obj1을 obj2의 로컬 트랜스폼에 종속되도록 변경한다. Unity Hierarchy유니티에서 hierarchy에 넣는다는 것은 부모 자식 관계의 형성을 의미하며, 부모자식 관계의 형성은 자식에서 SRT연산을 부모의 local 좌표계로 처리한다는 것을 의미함 게임엔진에서 오브젝트를 배치할 때는 n개의 오브젝트에 대해서 n개의 local..

Unity Study 2025.12.01

2025-11-28 Quaternion(2)

쿼터니언(2) 게임엔진에서 회전을 다루는 것은 모든 기초가 되므로 오브젝트의 회전에 대한 이해를 제대로 하고 있어야 함회전의 방식에는 오일러각과 쿼터니언을 통한 방식이 있음오일러각은 축을 고정하여 회전을 처리하기 때문에짐벌락 문제(특정 축의 회전이 다른축의 회전과 동일해지는 현상)가 발생하고, 선형보간시 축에 대한 회전량의 차이가 있어서 자연스럽게 보간이 안된다는 단점이 있어서 축이 고정되지 않는 한 주로 쿼터니언을 통해 회전을 처리하게 된다. 다음은 유니티에서 쿼터니언 처리를 위한 함수 및 메소드를 정리한 것Quaternion.AngleAxis(angle,axis)쿼터니언은 회전축과 회전각을 통해 나타낸다. Axis가 주어지고 이를 angle만큼(라디안 단위가 아닌 도 단위임) 회전시키는 사원수특정 벡..

Unity Study 2025.11.28