Q100410: 텍스처를 전달하여 사용자 정의 GLSL에서 원시 텍스처 조회 호출을 만드는 방법

팔로우

요약

Mari 용 사용자 정의 셰이더, 레이어 또는 노드 XML을 작성할 때 사용자 정의 GLSL 함수를 별도의 파일에 포함하는 것이 더 편리한 경우가 있습니다. 이러한 함수를 별도의 파일에 유지하기로 선택한 경우 함수가 자체 특수 처리를 실행할 수 있도록 하는 큐브맵 텍스처 조회를 사용해야 합니다.

이 문서에서는 Mari 에서 원시 텍스처 조회 호출을 수행하여 동일한 호출이 다양한 셰이더 모드와 향후 Mari 릴리스 간에 일관되게 작동하도록 하는 방법을 설명합니다.

추가 정보

이것이 Mari 의 공식 기능은 아니지만, 이전에는 Custom Shader를 개발할 때 Custom Node의 imagecube 속성에서 SamplerCube를 얻을 수 있었습니다. 이를 통해 과거 Mari 버전에서는 사용자가 GLSL의 텍스처() 기능을 활용하는 원시 텍스처 조회를 생성할 수 있었습니다.

Mari 3.4v1 및 4.1v1에서 Mari 의 셰이더 시스템 내부 개선으로 이제 Mari 대신 텍스처 조회에 간접 변수를 사용합니다.

당신이해야 할 일

이러한 변경 사항을 해결하고 원시 텍스처 조회를 생성하려면 다음을 수행해야 합니다.

  1. XML에 Texture.glslh 포함
  2. 텍스처 샘플러를 CubemapToken 으로 선언하세요.
  3. GLSL에서 Texture()TextureLod()가 사용되는 것과 동일한 방식으로 텍스처 조회를 수행하려면 mriTexture() 또는 mriTextureLod ()를 사용하십시오.

개발자 예시

노드 XML 파일의 호출자 측에서 사용자 정의 GLSL 함수에 대한 호출은 아래와 같이 이루어질 수 있습니다.

...
<Attribute Name="Cubemap" PrettyName="Image" Type="imagecube"></Attribute>
...
textureSampleColor = customCubemapLookup( $Cubemap, coords, lod ); 


그런 다음 GLSL 헤더 파일에서 CubemapToken 인수를 사용하는 사용자 정의 함수를 다음과 같이 선언할 수 있습니다.

//! include | Texture.glslh
vec4 customCubemapLookup(cubemapToken cubemapTexture, vec3 dir, float lod);


이 외에도 GLSL 소스 코드 파일 내에서 CubemapToken 인수를 사용하는 사용자 정의 함수를 정의할 수 있습니다. mriTexture() 및 mriTextureLod() 함수는 다음과 같이 실제 텍스처 값을 조회하는 데 사용할 수 있습니다.

#version 150
//! include | Texture.glslh
vec4 customCubemapLookup(cubemapToken token, vec3 coords, float lod)
{
    return mriTextureLod(token, coords, lod);
}

    우리는 문제로 불편을 끼쳐 드려 죄송합니다

    이유를 알려주세요