Babylon.js에서 PBR(Physically Based Rendering) 처리 방법 [문서 및 번역 +α】

19034 단어 babylonjspbrtech

개시하다


Babylon.js는 브라우저에서 실시간으로 실행되는 3D 렌더링 프레임 중 하나입니다.OSS이기 때문에 누구나 무료로 이용할 수 있다.
이 글은 Introduction to Physically Based Rendering, Babylon을 참고했다.다음은 js에서 PBR의 사용 방법을 소개합니다.
이 보도에서
  • PBR(Physically Based Rendering) 목표
  • PBRMetallicRoughnessMaterial
  • PBRSpecularGlossinessMaterial
  • 라이트의 설정
  • 라는 순서로 소개했다.

    PBR(Pohysically Based Rendering) 목표


    PBR(Physically Based Rendering)의 목표는 현실의 Lighting을 시뮬레이션하는 것입니다.
    PBR은 기술의 총칭이지 특정 기술을 강제로 선택하는 것이 아니다.
    예를 들면, 너에게 아래의 물건을 줄 수 있다.
  • Disney
  • Ashkimin Shirley BRDF
  • Babylon.PBRRMaterial 덕분에 js의 PBR을 실현했다.
    이 자료에는 현대 PBR에 필요한 모든 기능이 담겨 있다.이 글은 PBR을 시작할 수 있는 두 개의 미리 설정된 간이 버전을 살펴본다.
    PBRMaterial을 이용한 시위 행진은 베이비론이다.js 사이트에서 볼 수 있습니다.
    https://www.babylonjs.com/demos/pbrglossy/

    다음 두 개의 Material이 준비되어 있습니다.
  • PBRMetallicRoughnessMaterial
  • PBRSpecularGlossinessMaterial
  • 둘 다 GLTF 규격에 따라 구현됐다.

  • Metallic roughness convention(여기 추천)

  • Specular glossiness convention(링크 끊김으로 향후 조사)
  • PBRMetallicRoughnessMaterial


    이 Material은 5개의 값을 기준으로 합니다.
  • baseColor/baseTexture
  • matallic
  • roughness
  • metallicRoughnessTexture
  • environmentTexture
  • baseColor/baseTexture


    baseColor는 metalness의 값에 따라 두 가지 해석이 있습니다.
  • material이 metal(금속)인 경우
  • baseColor는 수직 입사(F0)를 통해 측정되는 특정 반사율 값입니다.
  • material이non-metal(비금속)일 때
  • 베이스컬러는 소재의 확산색을 반사한 것을 나타낸다.
  • metallic


    material의 metalic 스칼라 값을 지정합니다.또한 metallic texture의 값을 지정하는 데도 사용할 수 있습니다.

    roughness


    material의roughness의 스칼라 값을 지정합니다.metal Texture의 roughness 값을 지정하는 데도 사용할 수 있습니다.

    metallicRoughnessTexture


    두 값을 포함하는 Texture를 사용하여 정밀도를 유지할 수 있습니다.RGB의
  • B 채널의 metallic 값
  • G 채널의 roughness 값
    채널 R에 Ambient occlussion을 저장할 수도 있습니다.
  • environmentTexture


    환경 텍스쳐를 나타냅니다.

    Babylon Standard Material과 차별화 및 간단한 설정 방법


    인스턴스 생성
    var pbr = new BABYLON.PBRMetallicRoughnessMaterial("pbr", scene);
    
    응용 material
    sphere.material = pbr;
    
    아래 설정은 반사 없음(metallic는 0), 규격 없음(거친도 1)
    pbr.baseColor = new BABYLON.Color3(1.0, 0.766, 0.336);
    pbr.metallic = 0;
    pbr.roughness = 1.0;
    
    이 점을 반영한 코드는여기.
    반사할 때 메탈릭을 1로 설정하고 거친 정도를 0으로 설정합니다.
    환경 매핑을 추가하여 반사 활용
    var pbr = new BABYLON.PBRMetallicRoughnessMaterial("pbr", scene);
    pbr.baseColor = new BABYLON.Color3(1.0, 0.766, 0.336);
    pbr.metallic = 1.0;
    pbr.roughness = 0;
    pbr.environmentTexture = BABYLON.CubeTexture.CreateFromPrefilteredData(
      "/textures/environment.dds",
      scene
    );
    
    이를 반영하는 코드는여기.

    메탈릭 RoughnessTexture를 지정하여 대상의 금속감과 거칠음을 더욱 정확하게 표현할 수도 있다.
    pbr.baseColor = new BABYLON.Color3(1.0, 0.766, 0.336);
    pbr.metallic = 1.0; // set to 1 to only use it from the metallicRoughnessTexture
    pbr.roughness = 1.0; // set to 1 to only use it from the metallicRoughnessTexture
    pbr.environmentTexture = BABYLON.CubeTexture.CreateFromPrefilteredData(
      "/textures/environment.dds",
      scene
    );
    pbr.metallicRoughnessTexture = new BABYLON.Texture("/textures/mr.jpg", scene);
    
    mr.jpg의 내용은 다음과 같다.

    결과 여기.

    PBRSpecularGlossinessMaterial


    Material에는 5개의 값이 있습니다.
  • diffuseColor/diffuseTexture:
  • specularColor:
  • Material의 반사율
  • 표시
  • glossiness:
  • 광택도와 반사가 얼마나 날카로운가
  • specularGlossinessTexture:
  • RGBA에서 specular 색상을 픽셀 단위로 지정하는 RGB 및 glossiness
  • environmentTexture:
  • 환경 텍스쳐
  • 설정 예제를 표시합니다.
    var pbr = new BABYLON.PBRSpecularGlossinessMaterial("pbr", scene);
    pbr.diffuseColor = new BABYLON.Color3(1.0, 0.766, 0.336);
    pbr.specularColor = new BABYLON.Color3(1.0, 0.766, 0.336);
    pbr.glossiness = 0./images/babylon/;
    pbr.environmentTexture = BABYLON.CubeTexture.CreateFromPrefilteredData(
      "/textures/environment.dds",
      scene
    );
    
    PB R MetallicRoughnessMaterial의 다음 설정과 같습니다.
    var pbr = new BABYLON.PBRMetallicRoughnessMaterial("pbr", scene);
    pbr.baseColor = new BABYLON.Color3(1.0, 0.766, 0.336);
    pbr.metallic = 1.0;
    pbr.roughness = 0./images/babylon/;
    pbr.environmentTexture = BABYLON.CubeTexture.CreateFromPrefilteredData(
      "/textures/environment.dds",
      scene
    );
    
    specularGlossinessTexture는metallicRoughnessTexture와 같이 규격과 광택을 상세하게 제어할 수 있습니다.
    var pbr = new BABYLON.PBRMetallicRoughnessMaterial("pbr", scene);
    pbr.diffuseColor = new BABYLON.Color3(1.0, 0.766, 0.336);
    pbr.specularColor = new BABYLON.Color3(1.0, 1.0, 1.0);
    pbr.glossiness = 1.0;
    pbr.environmentTexture = BABYLON.CubeTexture.CreateFromPrefilteredData(
      "/textures/environment.dds",
      scene
    );
    pbr.specularGlossinessTexture = new BABYLON.Texture("/textures/sg.png", scene);
    
    sg.png의 내용은 다음과 같다.

    이 결과는여기.

    Light 설정


    다이내믹 라이트(Dynamic light)는 PBR 설정에서 중요한 요소다.
    조명 없이 환경도를 사용하여 장면을 비출 수도 있고 렌더링 효과를 높이기 위해 라이트를 추가할 수도 있습니다.
    빛의 강도에 관하여 물리학의 개념에 따르다
    기본적으로 라이트의 강도는 광원으로부터 역제곱을 사용하여 계산됩니다.
  • Point Light 및 Spot Light
  • 는 광도(luminous intensity)(candela, m/sr)에 의해 정의됩니다.
  • Directional Light 및 Hemispheric Light
  • 는 조도(illuminance)(nit, cd/m2)로 정의한다.
  • 동적 조명의 구조에 대해서는 Mastering PBR에 설명되어 있습니다.
    그렇긴 하지만 우선 PBR이 하이 다이내믹 레인지(HDR)를 사용하는 방법을 살펴보자.
    https://zenn.dev/iwaken71/articles/babylonjs-hdr-env

    총결산


    이 글은 Introduction to Physically Based Rendering, Babylon을 참고했다.js에서 PBR의 사용 방법을 소개했다.
    앞으로는 베이비론이다.저는 js의 가능성에 대해 발굴하고 싶습니다. 잘 부탁드립니다.

    좋은 웹페이지 즐겨찾기