장면과 플러그인

V-Ray는 렌더링하려는 장면을 기록하기 위한 자신만의 포맷을 정의해 놓고 있습니다. 장면은 텍스트로 표현된 수많은 플러그인 인스턴스로 채워집니다. 장면에 어떤 플러그인 인스턴스가 있고 각 플러그인 인스턴스의 파라미터가 어떻게 설정되었으냐에 따라 장면의 특성이 달라집니다.

V-Ray 플러그인이란?

V-Ray 플러그인이란 장면을 기술하는 기본단위로 재질, 카메라, 텍스처, 메시 등을 나타내는 객체나 그 책체의 타입을 가리킵니다. 각 플러그인에 대한 모든 정보는 V-Ray AppSDK 설치 디렉터리의 bin/plugins에 dll로 존재합니다. 이렇게 핵심 라이브러리와 분리된 별도의 dll로 존재하고 필요에 따라 V-Ray가 정보를 가져오는 방식이라서 '플러그인'이란 이름으로 불립니다.

장면 파일 예제

아래는 조명과 사각형 메시가 있는 아주 단순한 장면을 V-Ray 장면 포맷에 맞게 기술한 것입니다.

MtlSingleBRDF Material468 {
  brdf=Material468@brdf;
}

// Rectangle mesh
GeomStaticMesh Mesh354 {
  vertices=ListVector(Vector(-0.5, 0, -0.5), Vector(0.5, 0, 0.5), Vector(0.5, 0, -0.5), Vector(-0.5, 0, 0.5));
  faces=ListInt(2, 1, 0, 3, 0, 1);
  normals=ListVector(Vector(0, -1, 0), Vector(0, -1, 0), Vector(0, -1, 0), Vector(0, -1, 0));
  faceNormals=ListInt(2, 1, 0, 3, 0, 1);
  map_channels=List(List(1, ListVector(Vector(0, 0, 0), Vector(1, 1, 0), Vector(1, 0, 0), Vector(0, 1, 0)), ListInt(2, 1, 0, 3, 0, 1)));
}

Node MeshRenderer_3450 {
  geometry=Mesh354;
  material=Material468;
  transform=Transform(Matrix(Vector(1, 0, 0), Vector(0, -1.192093E-07, -0.9999999), Vector(0, 0.9999999, -1.192093E-07)), Vector(0, 0, 0));
}

BRDFVRayMtl Material468@brdf {
  diffuse=AColor(1, 0.5, 1, 1);
}

// Camera
RenderView RenderView_11126 {
  transform=Transform(Matrix(Vector(0.5978426, -0.8016136, -1.192093E-06), Vector(0.4765442, 0.355405, 0.80411), Vector(-0.6445851, -0.4807317, 0.5944806)), Vector(-0.3118779, -0.1691032, 0.3257624));
  fov=1.49780726;
}

LightSphere LightSphere_8658 {
  transform=Transform(Matrix(Vector(1, 0, 0), Vector(0, 1, 0), Vector(0, 0, 1)), Vector(0, -0.08, 0.211));
  color=AColor(1, 1, 1, 1);
  intensity=100;
  shadowBias=0.01;
  nsamples=0;
  bumped_below_surface_check=0;
  units=0;
  cutoffThreshold=0.001;
  radius=0.01;
  sphere_segments=20;
  subdivs=8;
}

SettingsOutput outputSettings {
  img_width=1280;
  img_height=720;
}

MtlSingleBRDF, GeomStaticMesh, Node, BRDFVRayMtl, RenderView, LightSphere, SettingsOutput 총 7개의 플러그인 타입을 사용했고 각각 인스턴스가 하나씩 존재하는 것을 알 수 있습니다.

플러그인 파라미터

플러그인 인스턴스 선언은 플러그인 타입과 인스턴스 이름, 파라미터 이름-값 목록으로 이루어집니다. 이는 C의 구조체 인스턴스를 만드는 방식과 유사하다고 볼 수 있습니다. 아래는 BitmapBuffer 타입의 플러그인 인스턴스를 선언한 것입니다.

BitmapBuffer Texture2D8592 {
  load_file=1;
  file="images/30jwdr.jpg";
  maya_compatible=1;
}

인스턴스의 이름은 Texture2D8592이고 load_file, file, maya_compatible 총 3개의 파라미터를 설정했다는 것을 볼 수 있습니다.

V-Ray 3.6.0의 BitmapBuffer에는 총 18개의 파라미터가 있습니다. 지금처럼 플러그인 인스턴스를 선언할 때 파라미터를 모두 설정할 필요는 없습니다. 모든 파라미터는 자기만의 기본값이 있으며 사용자가 값을 설정하지 않은 파라미터는 기본값으로 채워집니다. 파라미터의 타입과 기본값을 알아볼 때는 AppSDK 안에 포함된 plgparams를 사용하세요.

플러그인 파라미터 타입

모든 플러그인 파라미터 값이 숫자나 문자열인 것은 아닙니다. 그중에는 벡터나 행렬, 리스트처럼 복합적인 타입을 가지는 것들도 많이 있습니다. 위 예제의 BRDFVRayMtl 플러그인 인스턴스를 보면 diffuse 값이 AColor(1, 0.5, 1, 1)로 설정되어있으며 AColor는 V-Ray가 색상을 지정할 때 쓰는 기본 타입 입니다. 아래는 V-Ray가 지원하는 파라미터 타입 목록입니다.

  • int
  • bool
  • float
  • Color: 3 float RGB
  • AColor: 4 float RGBA
  • Vector: 3 float
  • string
  • Matrix: 3개의 열벡터로 이루어진 3x3 행렬
  • Transform: Matrix와 offset을 가리키는 벡터의 조합
  • Plugin: 참조하는 플러그인 인스턴스 이름
  • IntList
  • FloatList
  • ColorList
  • VectorList
  • List: 어떤 형식이든 담을 수 있는 일반화된 목록

장면 파일 포맷

V-Ray은 장면을 저장할 때 일반 텍스트 형식을 사용하며 확장자는 vrscene을 씁니다. 언뜻보면 JSON과 유사해보이지만 중첩된 선언을 허용하지 않는 등 여러 차이점이 있습니다. V-Ray 장면 파일을 만들 때는 아래 규칙을 따라야 합니다.

  • C++와 같이 // 은 주석의 시작을 나타냅니다.
  • 플러그인 인스턴스 선언은 타입 이름과 공백, 인스턴스 이름, 공백, 여는 중괄호로 시작하고 닫는 중괄호로 끝나야합니다.
  • 플러그인 인스턴스 선언에 쓰는 여는 중괄호와 닫는 중괄호는 같은 줄에 있을 수 없습니다.
  • 플러그인 파라미터는 인스턴스 선언의 중괄호 안에서 선언 해야합니다.
  • 플러그인 파라미터는 한 줄에 하나씩 선언해야합니다.
  • 플러그인 파라미터 선언은 들여 쓰기할 수 있습니다.
  • 플러그인 파라이터 이름과 값은 =으로 구분해야하며 사이에 공백이 있어서는 안됩니다.
  • 플러그인 파라미터 선언 끝에는 반드시 세미콜론이 와야합니다.
  • C처럼 #include "anotherfile.vrsecen"과 같은 표현으로 다른 파일을 포함할 수 있습니다.

올바르지 않은 플러그인 선언 예시

BitmapBuffer Texture2D8592 {} // 닫는 중괄호는 다른 줄에 있어야합니다.
BitmapBuffer Texture2D8592  // 플러그인 인스턴스 이름과 여는 중괄호는 같은 줄에 있어야합니다.
{
  file = "images/30jwdr.jpg"
}
BitmapBuffer Texture2D8592 {
  file = "images/30jwdr.jpg"  // 파라미터 이름과 '=', 파라미터 값 사이에는 공백이 없어야 합니다.
}
BitmapBuffer Texture2D8592 {
  load_file=1; file="images/30jwdr.jpg"; maya_compatible=1; // 파라미터는 한 줄에 하나씩 써야합니다.
}

results matching ""

    No results matching ""