[UE4] 서서히 석화하는 쉐이더를 만드는 +5색 마스크라든지 덤

9476 단어 위 4셰이더

사전 쓰기


  • 이 기사에는 필자의 성버전이 포함되어 있습니다. 미리 양해 바랍니다.
  • 이 기사 중에서는 이런 개념을 마스크라고 부르지만 마음껏 float 값입니다.
  • 구현의 늘어져 있기 때문에 배드 프랙티스일지도 모릅니다.

  • 목차


  • 점차 변화하는 함수 마스크
  • 5 색 마스크
  • 덤 : 구현 된 UE4 셰이더

  • 점차 변화하는 함수 마스크



    다양한 상황에 대응하기 위해 이번에 여러 함수를 준비했습니다.
    1. 전체가 페이드
    2. 얼룩무늬(드래곤즈드 ○마리스펙트)
    3. 아래에서 올라오는 녀석
    4. 그 반대
  • 전체가 페이드하는 녀석은 이런 느낌입니다
  • 얼룩 무늬는 이런 느낌입니다 (의외로 그림이 미묘했기 때문에 수정하고 싶다)

  • 3. 아래에서 올라오는 녀석 (의외로 ry


    노드와 수식은 다음과 같습니다.
    얼룩에 관해서는 역시 UV로 하는 편이 좋은 것은···? 생각하지 않아도


    mask.hlsl
    //mask_gen
    float outf=0.0f;
    float s_mlt=4.0f;
    switch(floor(num)){
    case 0: outf=in_alpha;break;
    //sin波5つを1~0にしてからpowをかけ0~-1にする
    case 1:outf=pow((sin(5*s_mlt*local_.x+6)+sin(7*s_mlt*local_.y+1)+sin(13*s_mlt*local_.z+13)
    +sin(11*s_mlt*atan2(local_.z,local_.x)*length(float2(local_.z,local_.x))+3)
    +sin(17*s_mlt*atan2(local_.z,local_.y)*length(float2(local_.z,local_.y))+23))/10+0.5,3)
    +in_alpha*2-1;break;
    //localzとの組み合わせでせり上がるとこ+うねうね
    case 2:outf=pow(in_alpha*1.02+(1-local_.z)+sin((atan2(local_.y,local_.x))*90)/50,20);break;
    case 3:outf=pow(in_alpha*1.02+local_.z+sin((atan2(local_.y,local_.x))*90)/50,20);break;
    }
    return outf;
    

    5색 마스크



    커스터마이즈 게이용으로 5개소의 칠할 수 있는 마스크
    RGBA 1장으로 실장할 수 있는 (아마) 최대 색수

    거동



    색 A, B, C, D, E가있을 때,
    - (0,0,0,0)→색 A100%
    - (1,0,0,0)→색 B100%
    - (0,0.5,0,0)→색 A50%, 색 C50%
    - (0.7,0.3,0,0)→색 B70%, 색 C30%
    - (7,3,0,0)→색 B70%, 색 C30%

    계산식



    무게 A = clamp (1- (R + G + B + A), 1,0);
    무게 (B, C, D, E) = (R, G, B, A)/clamp (R + G + B + A, 999,1);
    출력 색 = 색 A * 무게 A + 색 B * 무게 B + ...



    덤 : 구현 된 UE4 셰이더



    htps : // 이 m/ゔぁk/있어 ms/세 d4811350b438104f7d 의 내용을 포함합니다.

    4 층 구조로되어 있습니다
    A 레이어 : 쉐이더의 요구 사항마다베이스 색상, 파라미터를 준비 (이 쌍을 재질이라고 함) (이번 경우 5 색 마스크가 기본 색상으로)
    B층 : 상태 이상 번호와 베이스 컬러를 받아 상태 이상시의 머티리얼을 출력
    C층 : A층과 B층을 본 기사의 마스크로 머티리얼 합성
    D 레이어 : C 레이어로 합성 된 머티리얼에서 색상 출력

    파라미터는 베이스 컬러, 앰비언트 반영도, 스피어 맵, 큐브 맵 반영도의 4점

    문제점



    UE4의 머티리얼 함수 기능으로 샘플러를 출력할 수 없음
    따라서 스피어 맵의 계산은 모델에 적용하는 머티리얼인 A층에서 실시할 필요가 있다

    상기를 정리한 것이 이하가 됩니다


    구현 샘플



    htps : // 라고 해서 r. 코m/ゔぁk_DJ레기온/s타츠s/1195453585904943104
    steam에서 플레이 할 수 있으므로 감사합니다 (다이마 2)

    좋은 웹페이지 즐겨찾기