경고: 로그인하지 않았습니다. 편집을 하면 IP 주소가 공개되게 됩니다. 로그인하거나 계정을 생성하면 편집자가 사용자 이름으로 기록되고, 다른 장점도 있습니다.스팸 방지 검사입니다. 이것을 입력하지 마세요!=== PPUMASK - 렌더링 설정 ($2001 쓰기) === ---- 7 bit 0 ---- ---- BGRs bMmG |||| |||| |||| |||+- 그레이스케일 (0: 일반 색상, 1: 그레이스케일) |||| ||+-- 1: 화면 왼쪽 8픽셀에 배경 표시, 0: 숨기기 |||| |+--- 1: 화면 왼쪽 8픽셀에 스프라이트 표시, 0: 숨기기 |||| +---- 1: 배경 렌더링 활성화 |||+------ 1: 스프라이트 렌더링 활성화 ||+------- 빨간색 강조 (PAL/Dendy에서는 녹색) |+-------- 녹색 강조 (PAL/Dendy에서는 빨간색) +--------- 파란색 강조 PPUMASK ("마스크" 레지스터)는 스프라이트와 배경의 렌더링 및 색상 효과를 제어한다. [[PPU power up state|전원/리셋 후]], 이 레지스터에 대한 쓰기는 첫 번째 프리 렌더 스캔라인까지 무시된다. 가장 일반적으로, PPUMASK는 게임 플레이 외부에서 VRAM으로 대량의 데이터를 전송할 수 있도록 $00으로 설정되고, 게임 플레이 중에는 색상 효과 없이 모든 렌더링을 활성화하기 위해 $1E로 설정된다. ==== 렌더링 제어 ==== 렌더링은 PPU가 메모리를 적극적으로 가져와 화면에 이미지를 그리는 과정이다. PPUMASK에서 스프라이트 및 배경 렌더링 중 하나 또는 둘 다 활성화되어 있는 한 렌더링 전체가 활성화된다. 한 구성 요소가 활성화되고 다른 구성 요소가 활성화되지 않은 경우, 비활성화된 구성 요소는 단순히 투명하게 처리된다. 렌더링 프로세스는 그 외에는 영향을 받지 않는다. 비트 3과 4를 통해 두 구성 요소가 모두 비활성화되면 렌더링 프로세스가 중지되고 PPU는 배경색을 표시한다. 렌더링 중에는 PPU가 VRAM과 OAM을 적극적으로 사용한다. 이로 인해 CPU는 [[#PPUDATA|PPUDATA]]를 통해 VRAM에 접근하거나 [[#OAMDATA|OAMDATA]]를 통해 OAM에 접근할 수 없으므로, 이러한 접근은 렌더링 외부에서 수행되어야 한다. 즉, vblank 중(게임 플레이 중 데이터 전송) 또는 렌더링이 꺼진 상태(레벨 로드와 같은 대규모 데이터 전송)에서 수행해야 한다. 수많은 하드웨어 버그와 제한을 피하기 위해, 일반적으로 렌더링은 vblank 중에만 켜거나 끄는 것이 좋다. 이는 원하는 PPUMASK 값을 레지스터 자체가 아닌 변수에 쓰고 NMI 핸들러의 vblank 중에만 해당 변수를 PPUMASK에 복사하여 수행할 수 있다. PPU는 화면의 가장 왼쪽 8픽셀에서만 스프라이트와 배경을 선택적으로 숨길 수 있으며, 이를 투명하게 만들어 배경색을 그린다. 스프라이트의 경우, 이는 스프라이트가 오른쪽 가장자리에서처럼 화면 왼쪽 가장자리에서 부분적으로 걸칠 수 없는 제한인 스프라이트 팝인을 피하는 데 유용할 수 있다. 배경의 경우, 이는 수직 또는 단일 화면 네임테이블 배열로 수평으로 스크롤할 때 타일 아티팩트를 제거하고 속성 아티팩트를 줄일 수 있다. 이러한 배열은 스크롤 이음새를 화면 밖으로 숨길 수 없기 때문이다. 배경색은 배경 아트에 사용된 색상과 일치하지 않을 수 있으므로 왼쪽 열을 비활성화하는 것이 사소한 아티팩트보다 더 산만할 수 있다. 참고: * 렌더링 중에 PPUDATA에 쓰면 VRAM이 손상될 수 있으므로, 쓰기는 vblank 중이거나 PPUMASK 비트 3과 4에서 렌더링이 비활성화된 상태에서 수행해야 한다. * 배경이나 스프라이트가 비활성화된 영역에서는 스프라이트 0 히트가 트리거되지 않는다. * 렌더링 토글은 쓰기 후 약 3-4 도트 후에 적용된다. 이 지연은 Battletoads가 충돌을 피하기 위해 필요하다. * 화면 중간에 렌더링을 토글하면 종종 OAM의 1개 행이 손상되고 현재 및 다음 스캔라인에 대해 잘못된 스프라이트가 그려진다. (참조: [[Errata#OAM and Sprites|정오표]]) * 화면 중간에 렌더링을 끄면 [[#Internal registers|내부 v 레지스터]]의 하위 14비트 값이 $3C00-$3FFF 사이인 경우 팔레트 RAM이 손상될 수 있다. * 렌더링을 늦게 켜면 프리 렌더 끝의 도트가 절대 건너뛰지 않게 되어 정지된 화면에서 도트 크롤이 발생할 수 있다. * 렌더링을 늦게 켜면 [[PPU_scrolling#Split_X/Y_scroll|복잡한 쓰기 시리즈로 수동으로 설정]]하지 않는 한 PPU의 스크롤 값이 잘못된다. ==== 색상 제어 ==== 그레이스케일 모드는 모든 색상을 회색 또는 흰색 음영으로 강제한다. 이것은 색상을 $30과 비트 AND 연산하여 수행되며, 모든 색상이 회색 열($00, $10, $20, $30)에서 나오게 한다. 이 열에는 검은색이 없다는 점에 유의하라. 이 AND 동작은 색상이 뒤섞인 RGB PPU(2C04 시리즈)가 실제로 회색 음영을 얻는 것이 아니라 $x0 열에 있는 색상을 얻는다는 것을 의미한다. 팔레트 RAM에서 읽을 때 반환된 값은 이 AND 동작을 반영하지만 기본 데이터는 보존된다. 팔레트 쓰기는 그레이스케일 모드에 관계없이 정상적으로 작동한다. [[Color emphasis]]는 다른 두 색상 구성 요소를 어둡게 하여 선택한 구성 요소를 비교적 밝게 만들어 강조하는 색조 효과를 유발한다. 3가지 구성 요소를 모두 강조하면 모든 색상이 단순히 어두워진다. 이것은 그레이스케일과 독립적으로 작동하여 회색을 착색할 수 있다. PAL 및 Dendy PPU는 강조 비트 순서가 다르므로 포트 및 이중 지역 게임은 비트를 재정렬해야 한다. 또한 RGB PPU의 강조는 완전히 다르며, 대신 강조된 구성 요소의 밝기를 최대화하고 모든 구성 요소가 강조될 때 완전히 흰색 화면을 생성한다. RGB 강조는 훨씬 덜 유용하며 일반적으로 피하는 것이 가장 좋다. {{Anchor|PPUSTATUS}}{{Anchor|Reg2002}}{{Anchor|Status_($2002)_<_read}} 요약: 한식구 위키에서의 모든 기여는 크리에이티브 커먼즈 저작자표시-동일조건변경허락 라이선스로 배포된다는 점을 유의해 주세요(자세한 내용에 대해서는 한식구위키:저작권 문서를 읽어주세요). 만약 여기에 동의하지 않는다면 문서를 저장하지 말아 주세요. 또한, 직접 작성했거나 퍼블릭 도메인과 같은 자유 문서에서 가져왔다는 것을 보증해야 합니다. 저작권이 있는 내용을 허가 없이 저장하지 마세요! 자동 편집 스팸으로부터 위키를 보호하기 위해, 다음 CAPTCHA를 풀어주세요: 취소 편집 도움말 (새 창에서 열림)