본문으로 건너뛰기
HY Devlog

아카이브

보관된 모든 글

202699
10월36
  • Height Map은 디스플레이스먼트가 아니라 패럴랙스다

    면접에서 테셀레이션 이야기를 듣고 그게 뭔지 찾다가 스크랩한 입문 글이다. 테셀레이션과 디스플레이스먼트를 한 쌍으로 묶은 건 Microsoft 문서가 그렇게 적는 그대로다. 그런데 Unity에서 그 짝으로 보이는 칸, Standard 셰이더의 Height Map은 디스플레이스먼트가 아니다 — 문서가 패럴랙스 매핑이라고 적는다.

  • 페이지는 2023년이라고 적고, 받아보면 2020 LTS판이다

    퀄리티 좋은 모델을 쓰면 낮은 사양 PC에서 안 돌아갈 수 있다는 생각이 들어 최적화를 공부하다 스크랩한 안내 페이지다. 페이지는 2023년 10월 19일이라고 적어두는데, Read now로 받은 PDF 표지에는 '2020 LTS edition'이라고 적혀 있다. 그 간극이 본문 어디에 남아 있는지 네 절을 골라 대조했다.

  • 노멀에 곱할 행렬을 정하는 건 역행렬이 아니라 벡터의 위치다

    셰이더를 적용하며 공부하던 중 스크랩한 정점 처리 강의 노트다. 규칙 세 개를 명세와 대조했다 — 노멀에 곱하는 행렬, 카메라 축 셋의 외적 순서, 오른손에서 왼손으로 넘어갈 때 바꿀 것. 노멀 쪽은 역행렬이 틀린 게 아니라 벡터를 어느 쪽에 두는지가 빠져 있었다.

  • 영상이 가르치는 세 단계가 이 에셋이 교체된 세 이유다

    툰 셰이더를 올릴 예시 모델로 유니티짱을 쓰면서 방법을 찾다 스크랩한 2022년 영상이다. 지금 저장소를 열면 '유지보수나 릴리스 계획 없이 제공된다'고 적혀 있고, 후속 패키지 문서가 교체 사유 셋을 적어둔다 — 설치 방식, 파이프라인, 라이선스. 그 셋이 영상의 챕터 번호와 겹친다.

  • 인스펙터에 띄우는 건 Exposed가 아니라 Show In Inspector다

    셰이더를 공부하던 중에 스크랩한 Unity 공식 입문 문서다. 그런데 URL이 10.8이고 지금 에디터에 붙는 건 17.6이다. 그 사이에 프로퍼티 옵션표가 가장 많이 썩었다 — Exposed는 이름만 남고 뜻이 바뀌었고, 인스펙터 노출은 Show In Inspector가 가져갔다.

  • z를 거리로 읽는 함수와 그냥 버리는 함수가 따로 있다

    FPS에서 커서를 숨겨 화면 중앙에 고정하고 그 지점에서 레이를 쏴 탄착점을 찾으려다 스크랩한 코드다. 원문은 z를 '카메라 기준으로 바꿔주는 보정'이라고 설명하는데, 문서는 그 z를 '결과 평면이 카메라에서 얼마나 떨어져 있는지'라고 적어둔다. 보정이 아니라 선택이고, 커서를 고정하면 그 값을 읽을 일조차 없어진다.

  • 바라볼 점을 정하는 건 레이가 아니라 평면이다

    탑다운 조작을 쓰려고 방법을 찾던 중 스크랩한, 마우스 쪽을 바라보게 하는 짧은 코드다. 방법이 맞는데, 평면을 원점에 두고 높이를 따로 끼워 넣는 모양이 되었다. 평면을 오브젝트 위치에 두면 그 보정이 사라진다.

  • 멈출 수 있는 건 '현재 설정된 클립'뿐이다

    동영상에서 뽑은 사운드를 한 번만 재생하는 방법을 찾다가 스크랩하고, TTS 프로젝트의 대사·효과음 작업에서 다시 꺼내 본 글이다. Play()와 PlayOneShot()의 차이를 두 문단으로 정리해뒀다. 차이는 맞는데, 그 차이가 데려오는 결과가 빠져 있다. 문서는 Play·Pause·Stop을 한 클립의 삼종으로 묶고, PlayOneShot을 그 바깥에 둔다.

  • 그리기 순서를 정하는 건 둘이 아니라 셋이다

    인스펙터의 Tag와 Layer가 무엇을 하는 칸인지 찾다가 걸린 학습 일지다. Sorting Layer와 Order in Layer로 2D 그리기 순서를 설명한다. 둘 다 맞는데, 문서는 그 둘을 '더 높은 우선순위의 기준'이라 부르고 그 아래에 하나를 더 둔다. 그리고 레이어 이름을 잘못 적으면 조용히 Default로 간다.

  • LocalLow에 있는 건 dataPath가 아니라 persistentDataPath다

    JSON 세이브를 dataPath에 쓰고 있었던 터라 정확한 경로를 기억해두려고 스크랩한 글이다. 동적으로 만든 파일이 어디로 가는지 정리해뒀다. 그런데 dataPath와 persistentDataPath의 설명이 서로 바뀌어 적혀 있다. 경로 멤버는 셋이 아니라 다섯이고, 상대 경로는 둘 중 어느 쪽 기준도 아니다.

  • 마스크가 고르는 건 부위고, 나머지를 채우는 건 아래 레이어다

    IK와 아바타 마스크를 조합해 상체에만 애니메이션을 걸려고 찾던 중 스크랩한 글이다. 아바타 마스크를 만들어 레이어에 꽂는 절차를 보여준다. 절차는 맞는데 마스크가 정하는 것은 어디까지인지가 빠져 있다. 부위 목록은 문서 두 곳에서 다르고, 마스크를 지탱하는 규칙은 본문이 아니라 툴팁에 있다.

  • 스크롤 위치를 쥐고 있는 건 설정이 아니라 쓰는 순서다

    스크롤 뷰 작업의 불편을 해결하려고 찾던 중 스크랩한, 팝업의 스크롤 뷰가 매번 맨 아래에서 열리는 기록이다. 저자는 원인을 부모의 오픈 애니메이션으로 찾아냈지만 어떤 상호작용인지는 모르겠다고 적었다. 문서도 프레임 안의 순서를 글로는 적지 않는다. 대신 알아내는 수단과 미루는 수단을 적어둔다.

  • 화질을 쥐고 있는 건 Color Format이 아니라 해상도와 Aspect Ratio다

    컷신을 동영상으로 돌리려고 UI에 동영상을 띄우는 글을 스크랩했다. 절차는 맞는데 화질이 나쁜 원인을 Color Format으로 지목하고, 끝났다는 사실을 아는 방법은 한 번도 안 나온다. 문서가 손잡이로 적어둔 것은 해상도와 Aspect Ratio이고, 렌더 텍스처를 아예 거치지 않는 모드가 따로 있다.

  • Content가 늘어나는 방향을 정하는 건 Anchor가 아니라 Pivot이다

    Scroll View에 Layout 컴포넌트로 항목을 넣는 강좌다. 절차대로 하면 만들어진다. 그런데 Content에 Anchor를 설정하라고 적힌 축은 Content Size Fitter가 가져가는 축이고, 방향을 정하는 Pivot은 한 번도 언급되지 않는다.

  • 에러 페이지가 돌아와도 result는 ConnectionError가 아니다

    유니티에서 TTS를 구현한 2022년 글이다. 구글 번역 웹 UI의 내부 주소를 호출한다. 그 주소가 언제 막히든 이 코드는 알 수 없다. 실패 다섯 가지 중 하나만 보고 있고, 나머지는 성공 분기로 들어간다.

  • 읽기 전용인 건 클립이 아니라 Animation 창의 뷰다

    에셋스토어에서 받은 애니메이션이 ReadOnly로 떠서 수정 방법을 찾던 중 스크랩한 글이다. 복제가 답이라고 적혀 있다. 그런데 읽기 전용인 것은 클립이 아니라 창 하나였고, 수정이라 부를 만한 일의 상당수는 복제 없이 된다.

  • 늘어나는 래그돌을 붙잡는 건 Strength가 아니라 projection이다

    래그돌 사용법 글이 엿가락처럼 늘어나는 몸을 Strength 값 탓으로 설명한다. 그런데 Strength는 유니티 매뉴얼 어디에도 설명이 없고, 늘어남에는 전용 페이지가 따로 있다. 그 페이지가 지목하는 것은 다른 것이다.

  • started와 performed 사이에 있는 건 press threshold다

    Input System 입문 글의 저자가 끝내 답을 못 찾고 남긴 질문이 있다. started와 performed가 왜 똑같이 동작하느냐는 것이다. 답은 프레임이 아니라 문턱값 두 개에 있고, 문서는 그 답을 적어놓은 페이지에서 자기 말을 뒤집는다.

  • 스냅샷을 권하고, 코드가 스냅샷에서 빼낸다

    Audio Mixer 설정 절차를 정리한 2023년 글이다. 믹서를 쓰는 이유로 스냅샷을 들고, 바로 뒤의 코드가 그 세 파라미터를 스냅샷의 손에서 영구히 빼낸다. 문서에 한 줄로 적혀 있다.

  • await Awaitable은 변수에 담을 값이 없다

    Awaitable을 소개하는 2025년 글이다. 지적한 제약은 지금도 맞는데, 그 제약을 보여주는 예제 두 줄이 컴파일되지 않는다. 그리고 글이 아쉬워한 기능 중 둘은 문서에 멤버로 있다.

  • 1 << -1은 에러가 아니라 31번 레이어다

    OverlapSphere로 주변을 탐색하는 2022년 글이다. 레이어를 이름으로 받아오는 것까지는 좋은데, 그 값을 직접 시프트한다. NameToLayer가 -1을 돌려주면 그 식은 예외 대신 31번 레이어를 가리킨다.

  • 익명 함수를 못 지우는 건 익명이라서가 아니다

    Action으로 이벤트를 등록하는 2022년 글이다. 동작 설명은 정확한데, 「익명 함수는 삭제 불가」라는 주석이 이유를 가린다. 못 지우는 건 익명이기 때문이 아니라 같은 인스턴스를 들고 있지 않아서다.

  • 백틱은 세 개가 아니라 세 개 이상이다

    옵시디언 코드 블록 정리글이다. 설명은 대체로 맞는데, 백틱을 '세 개'로 못 박은 자리에서 글 자신의 첫 예제가 걸린다. 코드 블록 안에 코드 블록을 넣으려고 백틱을 이스케이프했는데, 문서에는 그럴 필요가 없다고 적혀 있다.

  • Unload(false)는 인스턴스를 내리지 않는다

    Unite Seoul 2025 최적화 세션 필기다. 스무 항목쯤을 문서와 하나씩 대조했다. 대부분 맞는데 다섯이 걸린다. 가장 위험한 건 AssetBundle.Unload의 인자 설명이 뒤집혀 있는 쪽이다.

  • 아웃라인은 셰이더가 아니라 정점 복제다

    Outline 컴포넌트 문서를 스크랩했는데 Unity 5.3판이다. 그런데 현행 문서와 글자가 거의 같다. 안 바뀐 것이고, 그래서 Use Graphic Alpha의 설명이 프로퍼티 이름과 어긋나는 것도 그대로 남아 있다.

  • asmdef를 만들면 Assembly-CSharp가 안 보인다

    어셈블리 정의 파일 문서를 스크랩했는데 2017.4판이다. 종속성이 한 방향이라는 설명은 맞지만, 반대 방향이 '금지'라는 말이 없다. 그게 '전부 쓰거나 전혀 쓰지 말라'는 권고의 실제 이유다.

  • Lite 버전은 셰이더 목록에 뜨지 않는다

    lilToon 공식 문서의 소개 페이지다. Lite 버전은 직접 설정하지 말고 변환해서 쓰라고 권하면서 이유로 '직관적'을 적는다. 실제 이유는 그 셰이더 이름이 Hidden/으로 시작해서 머티리얼 드롭다운에 아예 뜨지 않는 것이다.

  • 정의가 설명한 건 셰이더가 아니라 픽셀 셰이더다

    셰이더가 무엇인지 정리한 2024년 글이다. 표기법 논증은 출처까지 들고 와서 정확한데, 정의 한 문장이 두 절 뒤의 구조 설명과 충돌한다. 거기 적힌 건 셰이더가 아니라 픽셀 셰이더다.

  • `--parameters`라는 플래그는 없다

    Ollama를 로컬에서 API로 띄우는 절차를 11절로 정리한 가이드다. 설치와 CLI는 그대로 쓸 수 있는데, 정작 호스팅에 관한 세 절이 각각 틀렸다. 그리고 여러 클라이언트가 붙을 때 가장 먼저 걸리는 설정이 가이드에 없다.

  • 첫 예제는 `type`이 아니라 `pizza`를 비교한다

    Head First를 따라 팩토리 패턴을 정리한 2016년 글이다. 개념 설명은 교과서대로인데 코드가 셋 다 깨져 있다. 그리고 그 셋이 전부 같은 구멍으로 떨어진다. 타입을 문자열로 받으면 컴파일러가 볼 수 있는 게 없다.

  • `--memory-swap=0`은 스왑을 끄지 않는다

    컨테이너 자원 제한 옵션을 표로 정리한 2017년 글이다. 지도로는 쓸모 있는데 복사해 쓰면 걸리는 자리가 셋 있다. 스왑 규칙 둘이 서로 반대로 적혀 있고, 예제의 스왑 용량이 두 배이고, period 기본값이 10배다.

  • 탄성과 마찰은 물체가 아니라 한 쌍이 가진 값이다

    Rigidbody와 Physics Material을 직접 돌려보며 정리한 2020년 학습 기록이다. 관찰은 좋은데 글쓴이가 끝까지 못 푼 의문이 둘 있다. 둘 다 같은 자리에서 풀린다. 탄성과 마찰은 한쪽 물체의 값이 아니라 충돌하는 두 콜라이더가 함께 만드는 값이다.

  • GC를 길게 만든 건 캐시 크기가 아니라 포인터 개수다

    Discord의 Go → Rust 전환 글은 진단이 정확하고 지금도 맞다. 그런데 돌려본 손잡이가 둘뿐이다. GOGC는 빈도만 바꾸고 캐시 크기는 적중률을 깎는다. 스캔 비용을 정하는 변수는 포인터 개수이고, Go는 포인터 없는 객체를 아예 스캔하지 않는다.

  • IsConnected가 Connecting을 보고 있다

    시그널링 서버부터 카메라 송출까지 통째로 보여주는 튜토리얼이다. 그런데 IsConnected가 Connecting과 비교하고 있어서, 연결이 실제로 성립한 순간 Disconnect 버튼이 죽는다. RemoveTrack과 OnNegotiationNeeded에도 각각 구멍이 있다.

  • Override Tags는 태그를 무시하지 않는다

    TextMeshPro 인스펙터 칸들을 훑은 정리 글인데, 네 칸이 다른 걸 가리킨다. Override Tags는 색 태그만 무시하고, Text Wrapping Mode에 Overflow라는 값은 없고, Extra Settings에는 윤곽선도 그림자도 없고, Text Style은 Font Style이 아니다.

  • SetActive(false)는 코루틴을 멈추는 게 아니라 끝낸다

    클리핑의 ObjectPool 구현은 공식 API를 제대로 쓴다. 그런데 OnGet과 OnRelease가 SetActive 한 줄뿐이다. 매뉴얼이 반납할 때 되돌리라고 적어둔 여섯 가지 중 하나도 안 하고, SetActive(false)가 끝낸 코루틴은 다시 켜도 돌아오지 않는다.

9월53
8월10