Version: 2023.2
언어: 한국어
웹에서의 캐시 동작
웹의 오디오

웹 그래픽스

WebGL은 웹 브라우저에서 그래픽스를 렌더링하는 API로, OpenGL ES 그래픽스 라이브러리의 기능에 기반을 두고 있습니다. WebGL 1.0은 OpenGL ES 2.0과 기능이 유사하고, WebGL 2.0은 OpenGL ES 3.0과 기능이 유사합니다.

카메라 지우기

기본적으로 Unity 웹은 프레임마다 드로잉 버퍼를 지우므로 Camera.clearFlags 설정에 관계없이 프레임 버퍼의 콘텐츠가 지워집니다. 하지만 인스턴스화 시에 이 동작을 변경할 수 있습니다. 이렇게 하려면 웹 템플릿에서 webglContextAttributes.preserveDrawingBuffertrue로 설정합니다.

script.onload = () => {
       config['webglContextAttributes'] = {"preserveDrawingBuffer": true}; // Add this line to the index.html file in a Web Template
       createUnityInstance(canvas, config, (progress) => }

디퍼드 렌더링

WebGL 2.0이 사용 가능한 경우 Unity웹은 디퍼드 렌더링 경로만 지원합니다. WebGL 1.0에서는 Unity 웹 런타임이 포워드 렌더링으로 폴백됩니다.

전역 조명

Unity 웹은 베이크된 GI만 지원합니다. 실시간 전역 조명은 현재 웹에서 지원되지 않습니다. 또한 Unity 웹은 비방향성 라이트맵만 지원합니다.

리니어 렌더링

Unity 웹은 WebGL 2.0을 사용하는 리니어 색 공간 렌더링만 지원합니다. 리니어 색 공간 렌더링은 WebGL 1.0에 대한 폴백 지원을 제공하지 않습니다. 리니어 색 공간 렌더링을 사용하는 웹 플레이어를 빌드하려면 WebGL 1.0 API를 Player 설정에서 제거하고 Other Settings 패널을 열고 Automatic Graphics API 설정을 비활성화합니다.

일부 웹 브라우저에서는 sRGB DXT 텍스처 압축이 지원되지 않습니다. 따라서 리니어 렌더링을 사용하는 경우 런타임 시점에 모든 DXT 텍스처의 압축을 풀어야 하므로 렌더링 성능이 저하될 수 있습니다.

동영상 클립 임포터

초기 에셋 데이터 다운로드 크기가 커지고 네트워크 스트리밍을 방해할 수 있으므로 VideoClipImporter를 사용하여 동영상 클립을 Unity 프로젝트로 임포트할 수 없습니다.동영상 재생의 경우 VideoPlayer 컴포넌트의 URL 옵션을 사용하고 에셋을 StreamingAssets/ 디렉토리에 넣어 브라우저의 빌트인 네트워크 스트리밍을 사용하십시오.

웹 셰이더 코드 제한

WebGL 1.0 사양은 GLSLS 셰이더 코드에 몇 가지 제한을 적용하며, 이는 대부분의 OpenGL ES 2.0 구현보다 더 제한적입니다.이는 주로 셰이더를 직접 작성할 때 관련이 있습니다.

WebGL에는 배열이나 매트릭스를 인덱싱하는 데 사용할 값에 대한 특정 제한이 있습니다.예를 들어 WebGL은 상수식, 루프 인덱스, 조합을 사용한 동적 인덱싱만 허용하며, 아무 식이나 사용해서 인덱싱할 수 있는 버텍스 셰이더의 통합 액세스는 예외입니다.

WebGL 1.0에 대한 참고 사항:WebGL 1.0의 컨트롤 구조에는 while 루프와 대부분의 for 루프 타입이 허용되지 않는 추가 제한이 적용됩니다.그러나 필드 이니셜라이저가 변수를 상수로 설정하고, 업데이트가 변수에 상수를 더하거나 변수에서 상수를 빼고, 연속 테스트가 변수와 상수를 비교하는 for 루프 계산을 허용합니다.

참고: 웹에서는 사용 가능한 메모리가 제한되어 있으므로, 불필요한 메모리 사용으로 이어질 수 있는 불필요한 셰이더 배리언트를 포함하지 않아야 합니다. 따라서 Unity는 셰이더 배리언트셰이더 스트리핑을 숙지하고, Graphics SettingsAlways-included Shaders 섹션에 배리언트가 너무 많은 셰이더(예: Unity의 스탠다드 셰이더)를 추가하지 않도록 특별히 주의할 것을 권장합니다.

폰트 렌더링

Unity 웹은 다른 Unity 플랫폼처럼 동적 폰트 렌더링을 지원합니다. 하지만 사용자 기기에 설치된 폰트에 액세스할 수 없으므로, 사용하려는 폰트(국제 문자의 폴백 폰트나 폰트의 볼드/이탤릭 버전 등)를 프로젝트 폴더에 포함시키고 폴백 폰트 이름으로 설정해야 합니다.

안티앨리어싱

WebGL은 전부는 아니지만 대부분의 브라우저와 GPU 조합에서 안티앨리어싱을 지원합니다. 이를 사용하려면 웹 플랫폼의 기본 품질 설정에서 안티앨리어싱을 활성화해야 합니다.

반사 프로브

Unity 웹은 모든 반사 프로브를 지원합니다. 참고: WebGL 1.0은 매끄러운 실시간 반사 프로브를 지원하지 않습니다.

WebGL 2.0 지원

Unity에는 WebGL 2.0 API 지원이 포함되어 있어 OpenGL ES 3.0 수준의 렌더링 성능을 웹에서 사용할 수 있습니다.

기본적으로 Unity 웹 빌드는 WebGL 2.0 API를 지원합니다. Automatic Graphics API 프로퍼티를 비활성화하고 WebGL 1.0 API를 프로젝트에 추가하여 웹 Player 설정 > Other Settings 패널에서 이를 설정할 수 있습니다.

WebGL 2.0이 지원되는 브라우저는 다음과 같은 장점이 있습니다.

  • 스탠다드 셰이더의 콘텐츠가 고품질입니다.
  • GPU 인스턴싱과 방향 라이트맵이 지원됩니다.
  • 셰이더 코드의 인덱싱과 루프에 대한 제한이 없습니다.
  • 성능이 뛰어납니다.

런타임 시점에 SystemInfo.graphicsDeviceType을 사용하여 Unity 인스턴스가 OpenGLES3 (WebGL2.0) 또는 OpenGLES2 (WebGL1.0)로 렌더링되는지 확인할 수 있습니다.

추가 리소스:


  • Unity 2017.2에서 WebGL 2.0용 리니어 렌더링 추가됨 NewIn20172
웹에서의 캐시 동작
웹의 오디오