OSL(Open Shading Language)

OSL(Open Shading Language)을 통해 새 OSL 맵, 다양한 OSL 맵의 전체 범주를 사용할 수 있으며 개발 도구를 사용하여 모든 렌더러에서 사용할 수 있는 자체 OSL 맵을 만들 수 있습니다.

OSL(Open Shading Language)은 매우 간단하게 이해할 수 있는 오픈 소스 음영 처리 언어입니다. 이 언어는 다양한 방식으로 사용될 수 있습니다. 우선, 일반적인 기본 제공 3ds Max 맵처럼 작동하는, 3ds Max 내부의 OSL 셰이더용 실행 환경인 OSL 맵을 사용할 수 있습니다. 또한 쉽게 사용할 수 있는 미리 로드된 OSL 맵 범주도 있습니다. 뿐만 아니라 인터넷에서 OSL 맵을 다운로드하여 사용할 수도 있습니다. 마지막으로 개발 도구를 사용하여 OSL에서 셰이더 또는 맵을 만들 수 있습니다. 3ds Max C++ 맵과 동일한 기능을 개발하는 것보다 훨씬 간단한 방법으로 사용자 정의 맵을 만들 수 있습니다.

OSL은 일반 3ds Max 음영 처리 API(스캔라인, vRay, Corona 등)를 지원하는 모든 렌더러에서 작동합니다. 또한 렌더러 외부, 변위 수정자와 같이 일반 맵이 요청되는 3ds Max의 어디에서나 작동합니다. Arnold와 같은 OSL을 기본적으로 지원하는 렌더러에서도 작동합니다. 이러한 경우에는 OSL 맵 내의 실행 환경이 사용되지 않고 대신 OSL 소스 코드, 매개변수 값 및 셰이더 바인딩이 렌더러에 전송되어 OSL 코드를 실행합니다. OSL을 기본적으로 지원하는 렌더러는 매일 출시되고 있습니다.

음영 처리 트리의 모든 셰이더가 OSL 셰이더인 경우 OSL은 한 번에 전체 음영 처리 트리의 "JIT(just-in-time)" 컴파일 및 최적화를 사용합니다. OSL 셰이더와 일반 셰이더를 혼합할 수 있지만, 최적화가 힘들어집니다.

주: 컴퓨터 그래픽 용어가 항상 정확한 것은 아니며 셰이더, 맵, 텍스처, 절차 및 재질과 같은 단어가 다른 컨텍스트, 응용프로그램 및 렌더러에서 사용될 때는 서로 다른 의미를 가질 수 있습니다. 3ds Max에서 OSL은 closure를 지원하지 않으므로 맵으로 표시됩니다. 그러나 OSL은 음영 처리 언어이므로 셰이더와 맵이라는 용어는 OSL 컨텍스트에서 같은 의미로 사용됩니다.
주: 원래 렌더링 API는 다중 출력을 지원하지 않았습니다. OSL은 나중에 도입된 확장입니다. 따라서 대부분의 재질 및 맵은 다중 출력되는 맵에 연결할 수 없습니다. 이를 해결하기 위해 다중 출력되는 맵과 그렇지 않은 맵 사이에 자동으로 삽입되는 중개자로 출력 선택기 맵이 도입되었습니다. 출력 선택기 맵은 슬레이트 재질 편집기에서 자동으로 숨겨지며 와이어가 빨간색이 아닌 파란색인 것을 제외하면 일반 연결과 유사합니다. 슬레이트 재질 편집기의 옵션 메뉴에서 기본 설정을 선택하고 단일 맵 출력 선택기 숨기기를 토글하면 옵션을 켜거나 끌 수 있습니다.

OSL 제한 사항

OSL 맵은 3ds Max에서 몇 가지 제한이 있습니다.

제한 사항 설명
재질이 아닌 맵만 지원

OSL로 작성된 셰이더에는 색상, 부동 소수점 값, 정수, 문자열 등의 다양한 데이터 유형을 반환하는 여러 가지 출력이 있을 수 있습니다. 이 셰이더에서는 모든 유형이 지원됩니다.

그러나 OSL은 closure라는 특수 유형도 지원합니다. closure가 재질로 출력된다고 생각할 수 있지만 이는 지원되지 않습니다. 즉, 실제로 OSL 맵은 절차 텍스처(맵)를 작성하는 데만 사용할 수 있으며 재질을 작성하는 데는 사용할 수 없습니다.

따라서 OSL로 절차 텍스처 맵을 작성하되 표준화되고 잘 정의된, 물리적 재질과 같은 렌더러 독립적 재질에 출력을 연결하는 것이 좋습니다.

온라인에서 찾은 OSL 셰이더가 아무런 작업을 수행하지 않거나 아무런 출력이 없을 경우에는 OSL 재질일 수 있습니다.

일반 데이터 유형만 지원

3ds Max의 OSL 맵은 색상, 벡터, 부동, 정수 및 문자열과 같은 일반 데이터 유형만 지원합니다. 배열 또는 구조는 입력으로 지원하지 않습니다.

실제로 OSL 셰이더가 배열 또는 구조를 입력으로 사용하는 경우는 거의 없으므로 이는 크게 문제가 되지 않습니다. 매개변수, 배열 및 구조에만 적용되는 제한은 여전히 OSL 코드 내에서 잘 작동합니다.

#include 문 없음

3ds Max의 OSL 코드는 #include 문을 포함할 수 없습니다. OSL 코드에 #include <stdosl.h>가 포함된 경우 해당 문은 필요하지 않으며 제거할 수 있습니다. stdosl.h 파일은 컴파일러에 의해 암시적으로 포함됩니다.

뷰포트 지원

이제 많은 OSL 맵이 뷰포트를 표시하는 데 실제 셰이더를 사용하므로 성능 및 시각적 표현이 크게 향상됩니다. 이를 위해 "사실적 모드(맵 포함)"에서 뷰포트를 실행합니다. 셰이더를 사용하는 OSL 맵은 재질 편집기의 해당 매개변수 위에 뷰포트: 셰이더 사용 알림을 표시합니다. 여전히 적용을 사용하는 OSL 맵은 뷰포트: 적용된 텍스처 사용을 표시합니다.

현재 여전히 적용된 텍스처를 사용하는 OSL 셰이더는 다음과 같습니다.

UVW

루트

장면

주: 이 뷰포트의 향상된 기능은 항상 적용된 텍스처를 사용하는 Arnold 재질에서도 지원되지 않습니다.