728x90

게임프로그래밍 55

3D 기본 도형의 핵심 개념 간단 정리

게임 개발에서 3D 공간을 다룰 때 등장하는 기본 도형들에 대한 개념의 핵심만 간단히 정리 3D 기본 도형들 Point : 정점 Line : 선분 (끝이 있는) Ray : 직선 (끝이 없는) Sphere : 구 AABB (Axis Aligned Bounding Box) : 축 정렬 충돌 박스 OBB (Oriented Bounding Box) : 방향/회전 충돌 박스 Plane : 평면 Triangle : 삼각형 Point 3개의 좌표값을 갖는 점. Line 2개의 Point로 구성 Ray 1개의 Point와 방향 벡터(노멀 벡터) Sphere 1개의 Point 중점과 반지름(Radius) AABB (Axis Aligned Bounding Box) 1개의 Point 중점과 Size 크기 OBB (Orien..

[Unity] Inspector Custom Editor 에 추가 버튼, 삭제 버튼 추가

아래 이미지처럼 Inspector 에 요소를 추가하는 버튼과, 해당 요소 우측에 삭제하는 버튼을 커스텀하게 만들어 넣는 방법. OnInspectorGUI() 함수를 override 해서 아래 코드처럼 작성. base.OnInspectorGUI() 로 기본 요소들을 그리고 추가 요소들 작성. #if UNITY_EDITOR [CustomEditor(typeof(TrackSegment))] class TrackSegmentEditor : Editor { protected TrackSegment m_Segment; public void OnEnable() { m_Segment = target as TrackSegment; } public override void OnInspectorGUI() { base.OnI..

[Unity] Inspector 에 Addressable AssetReference 배열 노출시키기

아래 이미지의 PossibleObstacles 처럼, Asset Reference 를 연결할 수 있도록 Inspector 에 배열 노출시키려면? 아래처럼 코드 추가. public AssetReference[] possibleObstacles; 이 외에도 여러 타입으로 강제할 수 있음. Asset​Reference​Game​Object Asset​Reference​Label​Restriction Asset​Reference​Sprite Asset​Reference​T Asset​Reference​Texture Asset​Reference​Texture2D Asset​Reference​Texture3D AssetReference https://docs.unity3d.com/Packages/com.unity...

[Unity] ScriptableObject의 CustomEditor가 있을 때 저장이 안 되는 문제

특정 ScriptableObject 에 CustomEditor를 선언하고 작업할 때, ScriptableObject가 저장되지 않는 경우가 있음. CustomEditor를 정의하면 직접 적용도 해줘야 하기 때문에 그런데, 아래처럼 serializedObject.ApplyModifiedProperties(); 함수를 호출해주면 됨. [CustomEditor(typeof(MyScriptableObject))] public class MyScriptableObjectEditor : Editor { public override void OnInspectorGUI() { DrawPropertiesExcluding(serializedObject, new string[] { "m_Script" }); serializ..

[Unity] 드로우 콜 최적화 (Optimize DrawCall) 요약 정리

[유니티 TIPS] 유니티 최적화를 위한 필수 기본기! Batching 방법 소개 https://www.youtube.com/watch?v=w14yjBlfNeQ 0. 여러 개 메시(mesh), 여러 개 머티리얼을 : 최적화 없음 1. 여러 개 메시, 단일 머티리얼에서 UV좌표 나눠쓰기 : Batches 는 그대로, SetPass call 최적화 2. 동적 배칭 (Dynamic Batching) : Batches, SetPass Call 최적화. 동일 머티리얼의 작은 메시들은 버텍스 버퍼를 재활용 처리. 저가형 기기에서 성능을 최적화하도록 설계. (900개 이상의 버텍스 속성과 300개 이상의 버텍스를 포함하는 메시에 동적 배칭을 적용할 수 없음. 문서 참조.) https://docs.unity3d.com..

[Unity] 비동기 처리를 위한 UniTask

UniTask GitHub https://github.com/Cysharp/UniTask GitHub - Cysharp/UniTask: Provides an efficient allocation free async/await integration for Unity. Provides an efficient allocation free async/await integration for Unity. - GitHub - Cysharp/UniTask: Provides an efficient allocation free async/await integration for Unity. github.com 정리 잘 돼있는 블로그 유니티 코루틴(Coroutine) 대신 유니테스크(UniTask) https://wlsdn6..

DirectX 11 그래픽스 스터디 초급 과정 정리 노트

DirectX SDK의 API를 활용해서 GPU에 일을 시키는 방법을 구체적으로 이해 하는 것이 중요. GPU에 일을 시키려면 코드상으로 어떤 핵심 객체들이 필요한지 DX도구를 개념적으로 이해해야 함. 그래야 DX가 아닌 OpenGL, Vulkan, Metal 등 다른 RHI(Render Hardware Interface) 를 보더라도 이해할 수 있음. 필수/중요 객체와 메소드 ID3D11Device : 필요한 서브 객체들을 생성하는데 사용하는 최상위 객체. ID3D11DeviceContext : 최상위 객체인 Device로부터 생성한 서브 객체들을 설정하고 연결하는데 사용하는 Bridge성격의 객체. Context(문맥)어휘대로 이해하면 좋다. IDXGISwapChain : 접두어 DXGI~(Graph..

수직 동기화 관련 자료 수집, DirectX SwapChain::Present()

VBlank (vertical blank) https://learn.microsoft.com/en-us/windows/win32/api/dxgi/nf-dxgi-idxgioutput-waitforvblank IDXGIOutput::WaitForVBlank (dxgi.h) - Win32 apps Halt a thread until the next vertical blank occurs. learn.microsoft.com DXGI(DirectX Graphics Infrastructure) 프레젠테이션 https://learn.microsoft.com/ko-kr/windows/win32/direct3ddxgi/d3d10-graphics-programming-guide-dxgi#presentation DXGI ..

DirectX 11 스터디 관련 글 스크랩 및 메모

인터넷 검색으로 찾아볼 수 있는 DirectX 관련. 포인터, C/C++ 기초 이해 필요. COM(Component Object Model) 이해 필요. DirectX 10과 11은 유사. 10에서 Compute Shader와 멀티 스레드 렌더링 관련 기능이 추가된게 11. DirectX 11부터 시작하면 되는데 DX10 샘플 코드는 도움 됨. DX11, DX12 간의 차이를 이해해야. 11, 12의 API이름이 거의 같음. 11의 기본적인 사항에서 무엇이 어떤 의도로 12에서 어떻게 변경되었는가를 이해해야. 학습 단계에서는 가능한 wrapper 클래스를 사용하지 말고 raw API를 사용해야. DX11 로 캐릭터 렌더링까지 해본 뒤 DX12 로 넘어가는 것이 좋음. DX11 이 어려울 것 같다고 DX9..

DirectX 11 스터디 - MeshRenderer 컴포넌트 (GameObject 완)

렌더링 관련 처리를 담당해줄 MeshRenderer 컴포넌트를 생성. GameObject 에 몰려있던 Device, DeviceContext를 모두 MeshRenderer 로 이동시켜주고 MeshRenderer 의 Render() 함수를 호출해서 렌더링 처리를 하게 해준다. 이제 GameObject 는 DirectX COM 객체를 가질 필요가 없어짐. class GameObject : public enable_shared_from_this { public: GameObject(); ~GameObject() {} void Awake(); void Start(); void Update(); void LateUpdate(); void FixedUpdate(); shared_ptr GetFixedComponen..

728x90
반응형