Skip to content
hanwoong kim edited this page Oct 23, 2018 · 23 revisions

Shading

  • 블랜더파일을 이용해서 쉐이더를 라이브러리화하면 하나의 쉐이더당 530k 용량을 소모하게됩니다.
  • Osl파일을 사용하면 3k정도의 용량을 사용합니다. 또한 코드이기 때문에 라이브러리 및 Git을 활용한 버전관리가 쉽습니다.
  • OSL은 GPU를 지원하지 않습니다.
  • 리눅스, 유닉스에서는 컴파일러가 설치되어 있어야 합니다. /usr/bin/cpp
  • OSL은 node방식으로 디자인되어있습니다.
  • a.osl파일을 컴파일하면 같은 경로에 a.oso 파일이 생성됩니다.
  • stdosl 소스코드 위치 : 블랜더소스코드/intern/cycles/kernel/shaders/stdosl.h

OSL 사용 조건

  • 렌더러는 Cycles로 셋팅해야 OSL쉐이더를 사용할 수 있습니다.
  • 렌더 옵션에서 Open Shading Language 옵션을 활성화해야 렌더링시 블랙으로 렌더링되지 않습니다.
  • Lazypic Init셋팅에 자동으로 활성화되도록 셋팅되어있습니다.

기본문법

shader simple_material(
    color Diffuse_Color = color(0.6, 0.8, 0.6),
    float Noise_Factor = 0.5,
    output closure color BSDF = principled_diffuse(N, 1))
{
    color material_color = Diffuse_Color * mix(1.0, noise(P * 10.0), Noise_Factor);
    BSDF = material_color * principled_diffuse(N, 1);
}

자주나오는 변수(source/intern/cycles/kernel/osl/osl_shader.cpp)

  • P : Point
  • I : Eye Vector
  • M_PI : 파이
  • dPdx :
  • dPdy :
  • dIdx :
  • dIdy :
  • N : Normal. 각이 지지 않도록 하려면 Tool Shelf에서 Shading Smooth를 한번 눌러줘야한다. N은 덮어쓰기를 할 수 있다.
  • Ng : 보간이 되지 않은 노말
  • u :
  • dudx :
  • dudy :
  • v :
  • dvdx :
  • dvdy :
  • dPdu :
  • dPdv :
  • surfacearea :
  • time :
  • raytype : bool
  • backfacing : bool

자주나오는 함수

  • normalize(Vector) : 벡터를 노멀라이즈 한다. Point Vector를 보통 많이 Normalize함.

Ref

쉐이딩 작업을 도와주는 Plugin

  • node Wrangler : 노드에디터에서 Ctrl + Shift + 마우스를 클릭하면 실시간 렌더링뷰에서 해당 노드연산만 프리뷰할 수 있습니다.

지원하는 소프트웨어

참고문서

Clone this wiki locally