Version: Unity 6.0 (6000.0)
언어 : 한국어
싱글 패스 인스턴스화 렌더링과 커스텀 셰이더
VR 프레임 타이밍

포비티드 렌더링

포비티드 렌더링은 사용자의 시야 주변에 있는 디스플레이 영역이 더 낮은 해상도로 렌더링되는 최적화 기법입니다. 포비티드 렌더링은 시각적 품질에 미치는 영향 없이 렌더링 성능을 개선할 수 있습니다.

포비티드 렌더링 예시. 색이 옅게 칠해진 영역은 낮은 해상도로 렌더링되어 더 적은 GPU 리소스를 사용하는 화면 영역을 나타냅니다.
포비티드 렌더링 예시. 색이 옅게 칠해진 영역은 낮은 해상도로 렌더링되어 더 적은 GPU 리소스를 사용하는 화면 영역을 나타냅니다.

포비티드 렌더링이라는 이름은 광수용체 신경이 가장 밀집되어 있는 눈의 작은 부분인 와(fovea)에서 유래되었습니다. 포비티드 렌더링의 목표는 화면 전체에서 렌더링 해상도를 다양화하여 와가 인식할 수 있는 부분만 최고 해상도로 렌더링하도록 하는 것입니다.

XR 플랫폼은 VRS(가변 속도 셰이딩) 및 VRR(가변 속도 래스터화) 같은 다양한 기법을 사용하여 포비티드 렌더링을 구현합니다. 사용되는 기법은 포비티드 렌더링이 활성화된 경우 셰이더가 텍스처를 샘플링해야 하는 방식을 변경할 수 있습니다. Unity는 에셋이 모든 플랫폼에서 작동하도록 셰이더 매크로, 키워드, 프리 프로세서 심볼을 제공하여 화면 공간 계산을 통해 모든 플랫폼에서 정확한 결과를 얻을 수 있도록 셰이더를 조정할 수 있습니다. 사용 방법에 대한 자세한 내용은 포비티드 렌더링 셰이더를 참조하십시오. (Unity와 URP에서 제공하는 셰이더는 이미 이 매크로를 사용함)

XR 기기는 다음 두 가지 모드 중 하나의 포비티드 렌더링을 지원할 수 있습니다.

  • 고정 포비티드 렌더링은 각 눈에 디스플레이의 중앙 영역을 가장 높은 해상도로 렌더링하고 주변의 해상도는 낮춥니다.
  • 시선 기반 포비티드 렌더링은 시선을 추적하여 화면의 최고 해상도 영역을 결정합니다. 이러한 형태의 포비티드 렌더링은 시선 추적 기능이 있는 기기에서만 지원할 수 있습니다.

현재 포비티드 렌더링을 위해 VRS와 균일 래스터를 사용하는__ XR__XR은 VR(가상 현실), AR(증강 현실)과 MR(혼합 현실) 애플리케이션을 모두 포함하는 포괄적인 용어입니다. 이러한 형태의 인터랙티브 애플리케이션을 지원하는 기기를 XR 기기라고 합니다. 자세한 정보
See in Glossary
플랫폼은 OpenXRMeta Quest입니다. 포비티드 렌더링을 위해 VRR과 비균일 래스터를 사용하는 XR 플랫폼은 visionOS(Metal 그래픽스 API로 렌더링하는 경우)입니다.

선행 조건

포비티드 렌더링을 사용하려면 프로젝트가 다음 선행 조건을 충족해야 합니다.

  • Unity 6 이상, 2022.3, 2023.2
  • URP(유니버설 렌더 파이프라인)
  • 필요한 경우 XR 공급자 플러그인에 구성된 설정
  • PC 스탠드얼론 XR에서는 프로젝트가 Direct3D12 또는 Vulkan 그래픽스 API를 사용해야 합니다.
  • PC 스탠드얼론 XR에서는 앱을 실행하는 컴퓨터에 최신 GPU(예: Nvidia RTX2000+ 또는 AMD RX6000+)가 있어야 합니다.
  • 스탠드얼론 XR 플랫폼에서는 XR 공급자 플러그인과 기기가 모두 포비티드 렌더링을 지원해야 합니다. (자세한 내용은 공급자 플러그인 기술 자료 참조)

참고:

  • 일부 XR 공급자 플러그인은 다른 API 및 구현을 사용하는 2022.3 및 빌트인 렌더 파이프라인에서 포비티드 렌더링을 지원합니다. 자세한 내용은 플러그인 기술 자료를 참조하십시오. 이러한 플러그인에는 OpenXR과 Oculus가 포함됩니다.
  • 포비티드 렌더링은 다이내믹 해상도와 호환되지 않습니다.
  • Unity는 빌트인 렌더링 파이프라인을 사용하는 프로젝트에서 포비티드 렌더링을 지원하지 않습니다.

포비티드 렌더링 활성화

Unity 프로젝트에 포비티드 렌더링을 활성화하려면 Project SettingsXR Plug-in Management 섹션으로 이동합니다(메뉴: Edit > Project Settings). 포비티드 렌더링을 지원하는 각 플러그인의 설정 섹션에 기능을 활성화하는 옵션이 표시됩니다. 사용 가능한 설정에 대한 내용은 XR 공급자 플러그인 기술 자료를 참조하십시오.

설정에서 옵션을 활성화하는 것 외에도 포비티드 렌더링 제어에 설명된 대로 런타임 시 포비티드 렌더링 레벨을 설정해야 합니다.

참고: XR 플랫폼은 포비티드 렌더링에 대한 다양한 수준의 제어를 제공할 수 있습니다. 예를 들어 visionOS에서 Metal 렌더링을 사용하는 경우 고정 포비티드 렌더링이 활성화되면 항상 최대 강도로 작동합니다.

포비티드 렌더링 컨트롤

XRDisplaySubsystemfoveatedRenderingLevel 프로퍼티를 0에서 1 사이의 값으로 설정하여 포비티드 렌더링을 컨트롤할 수 있습니다. 프로젝트의 공급자 플러그인 설정에서 포비티드 런타임을 활성화해야 하며, 그러지 않으면 런타임 설정이 무시됩니다.

다음 예시 메서드를 통해 포비테이션 수준을 설정합니다.

public void SetFRLevel(XRDisplaySubsystem xrDisplaySubsystem, float strength)
{
    xrDisplaySubsystem.foveatedRenderingLevel = strength;
}

포비티드 렌더링 수준을 0으로 설정하면 포비티션이 비활성화되고 렌더링에 영향을 주지 않습니다.

시선 추적 또는 시선 기반 포비티드 렌더링을 지원하는 기기에서는 XRDisplaySubsystemfoveatedRenderingFlags 프로퍼티를 설정하여 이 기능을 활성화할 수 있습니다.

// xrDisplaySubsystem is the active XRDisplaySystem instance
xrDisplaySubsystem.foveatedRenderingFlags = XRDisplaySubsystem.FoveatedRenderingFlags.GazeAllowed;

런타임 시 고정 포비티드 렌더링을 선택한 경우에도 이를 지원하는 기기에서 foveatedRenderingFlags 프로퍼티를 설정하여 시선 기반 포비티드 렌더링을 활성화할 수 있습니다.

참고: SubsystemManager에서 XRDisplaySubsystem을 가져옵니다.

using System.Collections.Generic;
using UnityEngine;
using UnityEngine.XR;

public class FoveationControl : MonoBehaviour
{
    XRDisplaySubsystem xrDisplaySubsystem;
    public float strength = 1.0f;
    
    void Start()
    {
        // Find the XR display subsystem
        var xrDisplaySubsystems = new List<XRDisplaySubsystem>();
        SubsystemManager.GetSubsystems<XRDisplaySubsystem>(xrDisplaySubsystems);
    
        if (xrDisplaySubsystems.Count < 1)
        {
            Debug.LogError("No XR display subsystems found.");
            return;
        }
        foreach(var subsystem in xrDisplaySubsystems)
        {
            if (subsystem.running)
            {
                xrDisplaySubsystem = subsystem;
                break;
            }
        }
        xrDisplaySubsystem.foveatedRenderingFlags = XRDisplaySubsystem.FoveatedRenderingFlags.GazeAllowed;
        SetFRLevel();
    }
    
    public void SetFRLevel()
    {
        xrDisplaySubsystem.foveatedRenderingLevel = strength;
    }
}

포비티드 렌더링 기능 가져오기

현재 기기의 포비티드 렌더링 기능은 SystemInfo 오브젝트의 foveatedRenderingCaps 프로퍼티에서 가져올 수 있습니다.

FoveatedRenderingCaps caps = SystemInfo.foveatedRenderingCaps;

프로퍼티가 FoveatedRenderingCaps.None을 보고하면 기기가 포비티드 렌더링을 지원하지 않는 것입니다. 미지원은 소프트웨어, 기기 런타임, 드라이버 등 다양한 이유로 인해 발생할 수 있으므로 플랫폼이 포비티드 렌더링을 지원하더라도 특정 기기에서 사용할 수 없을 수 있습니다.

FoveatedRenderingCaps, FoveationImage, NonUniformRaster 같은 다른 값은 기기가 포비티드 렌더링을 구현하는 방식에 대한 정보를 제공하며, 커스텀 렌더 파이프라인을 구현하는 경우 유용할 수 있습니다. FoveationImage는 포비티드 렌더링 구현이 VRS를 사용함을 나타내고, NonUniformRaster는 VRR을 사용함을 나타냅니다.

포비티드 렌더링 세이더

Unity 엔진에 포함된 셰이더는 포비티드 렌더링에 균일 래스터화와 비균일 래스터화를 모두 지원합니다. 화면 공간 계산을 수행하는 커스텀 셰이더가 있는 경우 비균일 래스터 기법을 사용하는 플랫폼에서 포비티드 렌더링을 지원하도록 업데이트해야 할 수 있습니다.

비균일 래스터로 렌더링된 픽셀은 더 이상 정규 그리드를 나타내지 않으므로 정규 그리드를 가정하는 스크린 공간 계산을 변경해야 VRR에서 올바르게 작동합니다. Unity는 셰이더를 조정하는 데 사용할 수 있는 셰이더 매크로, 키워드, 프리 프로세서 심볼을 제공하므로 화면 공간 계산의 결과가 모든 플랫폼에서 올바르게 나올 수 있습니다. (Unity와 URP에서 제공하는 셰이더는 이미 이 매크로를 사용함)

예를 들어 다음 왼쪽 이미지는 비균일 래스터화를 수정하지 않고 VRR로 렌더링된 씬의 뷰입니다. 오른쪽 이미지는 올바르게 렌더링된 경우의 동일한 뷰입니다.

보정되지 않은 비균일 래스터화(왼쪽)와 리니어 래스터화(오른쪽) 비교
보정되지 않은 비균일 래스터화(왼쪽)와 리니어 래스터화(오른쪽) 비교

왼쪽 이미지의 가장자리 부근의 영역이 찌그러진 것을 확인할 수 있습니다. 이 시각적 압축은 텍스처의 주변 영역이 더 낮은 픽셀 밀도로 래스터화되었기 때문에 발생합니다. 이 텍스처를 샘플링할 때는 비균일 UV 좌표를 사용해야 합니다(또는 제공된 포비티드 렌더링 셰이더 함수 중 하나를 사용하여 리니어 UV 좌표를 비균일로 전환해야 함).

참고: Unity는 VRR 기법을 사용할 때 픽셀이 래스터화된 공간을 설명하는 데 ‘비균일 래스터’라는 용어를 사용하고, 규칙적인 그리드가 있는 더 일반적인 래스터화 공간을 나타낼 때는 ‘리니어 래스터’라는 용어를 사용합니다.

URP용 화면 공간 셰이더를 업데이트하여 포비티드 렌더링에서 올바른 결과를 생성하려면 다음 포함 파일(Core RP Library 패키지)을 추가합니다.

#include_with_pragmas "Packages/com.unity.render-pipelines.core/ShaderLibrary/FoveatedRenderingKeywords.hlsl"
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/FoveatedRendering.hlsl"

이 파일에는 포비티드 렌더링을 위한 키워드와 매크로가 포함되어 있으며, 화면 공간 좌표를 비균일에서 리니어로 매핑하거나 리니어에서 비균일로 매핑하는 함수도 포함되어 있습니다.

포비티드 렌더링이 셰이더 호환성에 미치는 영향

VRS(가변 속도 셰이딩) 기법은 영역이 사용자의 시야각 내에 있는 위치에 따라 프래그먼트 셰이더에 대한 각 호출에서 셰이딩되는 화면 픽셀 수를 변경하는 것입니다. 가변 속도 셰이딩은 기존 셰이더와 호환됩니다. VRS를 사용하는 XR 플랫폼에서 포비티드 렌더링으로 작동하도록 커스텀 셰이더를 수정할 필요는 없습니다.

VRR(가변 속도 래스터화) 기법은 인접 픽셀 간의 유효한 거리가 더 이상 균일하지 않도록 래스터화를 조정하는 것입니다. 예를 들어 시야각의 주변 영역은 낮은 해상도 텍스처로 렌더링되어 최종 디스플레이에 합성되면 늘어날 수 있습니다. 래스터화가 비균일하기 때문에 스크린 공간 계산을 수행하는 셰이더는 래스터화가 균일한 그리드를 사용한다고 가정하면 VRR에서 잘못된 결과를 생성할 수 있습니다. VRR을 사용하는 XR 플랫폼에서 포비티드 렌더링으로 작동하도록 커스텀 셰이더를 수정해야 할 수 있습니다.

포비티드 렌더링 함수를 사용해야 하는 경우

리니어 텍스처를 샘플링할 때는 리니어 좌표를 사용해야 합니다. 반대로 비균일 텍스처를 샘플링할 때 비균일 좌표를 사용해야 합니다.

버텍스 셰이더에서 프래그먼트(픽셀) 셰이더로 전달되는 모든 버텍스 속성은 항상 SV_POSITION을 제외하고 리니어 공간에 있습니다. SV_POSITION 좌표를 사용하여 비균일 텍스처를 직접 샘플링할 수 있지만, 샘플링에 다른 버텍스 속성을 사용하는 경우 적절한 리니어-비균일 리매핑 함수를 사용해야 합니다. 마찬가지로 SV_POSITION을 사용하여 리니어 텍스처를 샘플링하는 경우에는 FoveatedRemapNonUniformToLinear 함수를 사용해야 합니다.

텍스처의 좌표 공간은 생성 방식에 따라 달라집니다. Unity 엔진에서 생성한 대부분의 텍스처(예: 뎁스 버퍼 및 G 버퍼)는 VRR로 렌더링할 때 비균일 공간에 있습니다. 하지만 현재 문서화되지 않은 예외가 있습니다. 아티스트가 그린__ UI__(사용자 인터페이스) 사용자가 애플리케이션과 상호 작용하도록 해 줍니다. Unity는 현재 3개의 UI 시스템을 지원합니다. 자세한 정보
See in Glossary
오버레이와 같은 수동으로 생성된 화면 공간 텍스처는 일반적으로 리니어이며 리니어 UV 좌표로 샘플링해야 합니다.

컴퓨트 셰이더에서 소스 텍스처와 대상 텍스처가 리니어 공간인지 비균일 공간인지 고려하고 샘플링 또는 텍스처에 쓰기 전에 필요에 따라 좌표를 다시 매핑해야 합니다. 마찬가지로 UV 좌표의 소스, 컴퓨트 셰이더 내에서 계산되는 방식, 리니어 좌표 또는 비균일 좌표를 예상하기 위해 전달되는 함수가 있는지 고려하십시오. Unity의 컴퓨트 셰이더에 대한 일반적인 내용은 컴퓨트 셰이더 주제와 ComputeShader API를 참조하십시오.

포비티드 렌더링을 위한 셰이더 함수

FoveatedRendering.hlsl은 커스텀 셰이더에서 포비티드 렌더링을 지원하는 데 사용할 수 있는 함수 집합을 정의합니다. 이 함수는 현재 포비티드 렌더링 유형이 리니어든 비균일이든, 포비티드 렌더링이 사용되지 않는 경우 올바른 결과를 반환합니다. 또한 함수는 플랫폼이 스크린 공간 원점을 화면의 상단과 하단 중 어디에 배치하는지에 따라 y축을 반전 처리합니다.

참고: 이러한 함수는 VRR(비균일 포비티드 렌더링)을 사용하지 않는 플랫폼에서 성능에 영향을 미치지 않습니다. 조건부 #ifdef 문을 사용하여 제외할 필요가 없습니다. 그러나 VRR을 사용하는 플랫폼에는 포비티드 렌더링이 비활성화된 경우에도 약간의 오버헤드가 추가되는 셰이더 상수를 확인하는 동적 브랜치가 있습니다.

FoveatedRemapLinearToNonUniform

선언: float2 FoveatedRemapLinearToNonUniform(float2 uv)

필요한 y축 반전을 포함하여 리니어 화면 공간 UV 좌표를 비균일 좌표로 전환합니다. 포비티드 렌더링이 활성화되어 있지 않거나 플랫폼이 비균일 래스터화를 사용하지 않는 경우 함수는 변경되지 않은 UV 좌표를 반환합니다.

FoveatedRemapNonUniformToLinear

선언: float2 FoveatedRemapNonUniformToLinear(float2 uv)

필요한 y축 반전을 포함하여 비균일 화면 공간 UV 좌표를 리니어로 전환합니다. 포비티드 렌더링이 활성화되어 있지 않거나 플랫폼이 비균일 래스터화를 사용하지 않는 경우 함수는 변경되지 않은 UV 좌표를 반환합니다.

FoveatedRemapPrevFrameLinearToNonUniform

선언: float2 FoveatedRemapPrevFrameLinearToNonUniform(float2 uv)

이전에 렌더링된 프레임을 기반으로 리니어 화면 공간 UV 좌표를 다시 매핑합니다. (Metal에는 구현되지 않음)

FoveatedRemapPrevFrameNonUniformToLinear

선언: float2 FoveatedRemapPrevFrameNonUniformToLinear(float2 uv)

이전에 렌더링된 프레임을 기반으로 비균일 화면 공간 UV 좌표를 다시 매핑합니다. (Metal에는 구현되지 않음)

FoveatedRemapDensity

선언: float2 FoveatedRemapDensity(float2 uv)

지정된 화면 UV 좌표의 화면 해상도와 래스터 해상도 간의 비율입니다. 포비티드 렌더링이 활성화되어 있지 않거나 플랫폼이 비균일 래스터화를 사용하지 않는 경우 함수는 (1.0, 1.0)을 반환합니다. (Metal에는 구현되지 않음)

FoveatedRemapPrevFrameDensity

선언: float2 FoveatedRemapPrevFrameDensity(float2 uv)

이전 프레임 시점의 밀도 비율입니다. (Metal에는 구현되지 않음)

FoveatedRemapLinearToNonUniformCS

선언: float2 FoveatedRemapLinearToNonUniformCS(float2 positionCS)

리니어 공간 화면 좌표를 비균일 공간 화면 좌표로 전환합니다. 포비티드 렌더링이 활성화되어 있지 않거나 플랫폼이 비균일 래스터화를 사용하지 않는 경우 함수는 변경되지 않은 좌표를 반환합니다.

FoveatedRemapNonUniformToLinearCS

선언: float2 FoveatedRemapNonUniformToLinearCS(float2 positionCS)

비균일 공간 화면 좌표를 리니어 공간 화면 좌표로 전환합니다. 포비티드 렌더링이 활성화되어 있지 않거나 플랫폼이 비균일 래스터화를 사용하지 않는 경우 함수는 변경되지 않은 좌표를 반환합니다.

UV 전환

리니어 스크린 공간 UV 좌표를 비균일 래스터 스크린 공간으로 전환하려면 다음을 사용하십시오.

uvNonUniform = FoveatedRemapLinearToNonUniform(uvLinear);

비균일 래스터 스크린 공간 UV 좌표를 리니어 스크린 공간으로 전환하려면 다음을 사용하십시오.

uvLinear = FoveatedRemapNonUniformToLinear(uvNonUniform);

효과 업데이트

가우시안 블러와 같은 효과를 업데이트하려면 다음을 사용하십시오.

uvNonUniform = FoveatedRemapDensity(uvLinear);

Shader Graph 효과 업데이트

Shader Graph의 화면 위치 노드는 포비티드 렌더링의 영향을 받는 텍스처를 샘플링하는 데 자주 사용되는 좌표를 제공합니다. 이 Shader Graph 노드의 Mode 설정에 따라 좌표가 제공되는 형식이 결정됩니다. 대부분의 모드에서는 VRR로 렌더링할 때 좌표 공간이 비균일합니다. 반면에 Raw 모드는 항상 리니어입니다.

| 화면 위치 모드 | UV 좌표 공간 || | | VRS(가변 속도 셰이딩) 및 비포비티드 렌더링 | VRR(가변 속도 래스터화) | | :——– | :—-: | :———: | Default | 리니어 | 비균일 Raw | 리니어 | 리니어 Center | 리니어 | 비균일 Tiled | 리니어 | 비균일 Pixel | 리니어 | 비균일

화면 위치 노드의 Raw 모드를 사용하여 비균일한 텍스처를 샘플링하면 결과가 올바르지 않습니다.

상황을 설명하기 위해 화면 위치 노드가 씬 뎁스 노드에 연결된 Shader Graph가 프래그먼트 셰이더의 기본 컬러에 연결되어 있다고 가정해 보겠습니다.

화면 위치 노드가 씬 뎁스 노드에 연결된 Shader Graph
화면 위치 노드가 씬 뎁스 노드에 연결된 Shader Graph

이 셰이더는 씬 뎁스 버퍼의 뎁스 값에 따라 컬러를 렌더링합니다. 이 셰이더는 뎁스 버퍼와 같은 공간에서 결과를 반환하는 Default 모드의 화면 위치 노드를 사용하기 때문에 포비티드 렌더링에서 올바르게 작동합니다. 그러나 모드를 Raw로 변경하면 변수 속도 래스터화를 사용하는 플랫폼에서 포비티드 렌더링이 활성화된 경우 더 이상 올바른 결과가 나오지 않습니다.

올바른 샘플링과 불일치 샘플링 비교
올바른 좌표 공간 불일치 좌표 공간
왼쪽 이미지는 사각형의 셰이더를 나타내며 씬 뎁스 버퍼를 샘플링하기 위해 올바른 좌표 공간을 사용합니다. 오른쪽 이미지는 샘플링된 텍스처에 잘못된 좌표 공간을 사용하는 포비티드 렌더링을 나타냅니다. 샘플링된 텍스처가 더 이상 씬 지오메트리와 일치하지 않는 것을 볼 수 있습니다.

Shader Graph가 원시 화면 위치를 사용하며 다른 모드를 사용할 수 없는 경우 커스텀 함수 노드 내에서 포비티드 렌더링을 위해 셰이더 함수를 사용하여 원시 좌표(정규화해야 함)를 다시 매핑할 수 있습니다.

#include_with_pragmas "Packages/com.unity.render-pipelines.core/ShaderLibrary/FoveatedRenderingKeywords.hlsl"
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/FoveatedRendering.hlsl"

// The Raw mode screenPosition must first be normalized: position.xy/position.ww
void CorrectedScreenPosition_float(float4 screenPosition, out float2 correctedScreenPosition)
{
    correctedScreenPosition = FoveatedRemapLinearToNonUniform(screenPosition);
}

참고: 이 경우 파일을 참조하기 위해 커스텀 함수 노드를 생성해야 합니다. 문자열 유형을 사용하면 #include 문이 함수 본문 안에 있고 구문 오류가 발생하기 때문입니다.

예를 들어 다음 Shader Graph는 두 개의 커스텀 함수 노드를 통해 원시 좌표를 라우팅합니다.

커스텀 함수 노드로 원시 UV 좌표를 전환하는 Shader Graph
커스텀 함수 노드로 원시 UV 좌표를 전환하는 Shader Graph

첫 번째 커스텀 함수는 x 및 y 요소를 w 요소(B = A.xy/A.ww)로 나누어 원시 좌표를 정규화합니다. 두 번째 커스텀 함수는 필요한 경우 FoveatedRemapLinearToNonUniform을 사용하여 리니어 좌표를 비균일 공간에 매핑합니다. 포비티드 렌더링이 비활성화되어 있거나 현재 플랫폼이 포비티드 렌더링에 VRR을 사용하지 않는 경우 FoveatedRemapLinearToNonUniform은 변경되지 않은 리니어 좌표를 반환합니다. 따라서 셰이더가 모든 상황에서 씬 뎁스를 올바르게 샘플링합니다.

싱글 패스 인스턴스화 렌더링과 커스텀 셰이더
VR 프레임 타이밍
Copyright © 2023 Unity Technologies
优美缔软件(上海)有限公司 版权所有
"Unity"、Unity 徽标及其他 Unity 商标是 Unity Technologies 或其附属机构在美国及其他地区的商标或注册商标。其他名称或品牌是其各自所有者的商标。
公安部备案号:
31010902002961