ShaderForge에서 자체 환경 맵을 얻고 IBL 수행

추가



본 기사의 수법은 Skybox 이미지의 취득에 한정한다. Scene의 Environment Lighting 설정을 반영한다면, 다음 기사의 코드를 Code 노드에 기술해 환경광을 취득하는 것이 좋다.

요지



ShaderForge는 셰이더를 구축하는 데 반복 속도를 높일 수있는 매우 중요한 도구입니다. 하지만 디폴트로 준비되어 있다 Blinn-Phong 이나 PBL 이 기사에서는 그 중 하나인 IBL의 취득을 예로 들어, PBL 라이팅의 Specular항을 사용하지 않고 IBL을 실현한다.

환경


  • Unity 2017.2.0f3
  • ShaderForge v1.38

  • ShaderForge의 PBL 조명에서 IBL (Image based lighting)



    IBL, 즉 금속과 같은 주변 환경의 비추기를 실현하는 라이팅을 하기 위해서는 ShaderForge 가 준비한다 PBR 이 예가 그림 1에 나와 있습니다. 미리보기 이미지와 같이 Unity Default-Skybox가 표면에 비치고 있음을 알 수 있습니다.
    하지만 ShaderForge의 PBL 라이팅은 Unity의 Standard Shader의 라이팅 계산 매크로에 근거하고 있어, 또한, 노드도 없기 때문에 IBL의 취득은 완전하게 은폐되어 IBL를 독자적인 라이팅에 반영시킬 수 없다.


    그림 1 : ShaderForge 기본 PBL 조명을 사용하여 IBL을 반영하는 예제. 불행히도 IBL은 내부에 숨겨져 있습니다.

    Unity 환경 맵 획득 매크로를 사용한 IBL



    Unity 에서는 Vertex and fragment shader examples 의 Environment reflection using world-space normals 절에 나타나 있는 바와 같이, 환경 맵과 법선 벡터를 입력에 UNITY_SAMPLE_TEXCUBE 를 매크로를 이용하는 것으로 환경광을 취득할 수 있다. 다행히 환경 맵은 Global 의 프로퍼티이며, 법선 벡터도 노드로 취득할 수 있기 (위해)때문에 Code 노드를 사용하는 것으로 용이하게 실현 가능하다. 이 예는 그림 2에 나와 있습니다.


    그림 2. Code 노드에 IBL 획득 매크로를 작성하여 환경 빛을 그대로 표시하는 예.

    환경 맵의 bokeh 상태를 가미한다



    전절에서 든 셰이더는 하나 신경이 쓰이는 점이 보인다. 그것은 환경 맵이 너무 선명하게 선명하게 비치고 있는 것이다. 가능한 경우 그림 1의 Glossiness 속성과 같은 bokeh 방법을 제어하는 ​​매개 변수를 원합니다.
    Unity의 환경 맵은 LOD를 이용하여 몇 단계로 보카한 환경 맵을 취득할 수 있다. 그 bokeh의 단계 수는 UnityStandardConfig.cgincUNITY_SPECCUBE_LOD_STEPS로 정의되기 때문에 이용한다. 구현은 그림 3에 나와 있습니다.


    그림 3 : LOD를 사용하여 보컬 된 환경 맵을 얻고 적용한 예.

    사이고에게



    이걸로 깨끗하게 IBL을 취득했다고 할 수 있을 것이다. 환경의 반영은 현대적인 렌더링에 필수적인 요소 중 하나이기 때문에 다양한 응용 범위가 생각된다. 정직 ShaderForge 에 노드로서 구현해 주었으면 좋겠지만, Forum 를 보는 한, Unity 의 흐릿한 사양에는 추종할 생각은 그다지 없는 것 같다.

    좋은 웹페이지 즐겨찾기