{!See https://docs.google.com/document/d/1takg_GmIBBKKTj-GHZCwzxohpQz7Bhekivkk72kYMtE/edit for reference implementation of OneTrust, dataLayer and GTM} {!OneTrust Cookies Consent} {!OneTrust Cookies Consent end} {!dataLayer initialization push} {!dataLayer initialization push end} {!Google Tag Manager} {!Google Tag Manager end} Normal From Height 노드 | Shader Graph | 10.8.0
docs.unity3d.com
"{0}"의 검색 결과

    목차 표시/숨기기

    Normal From Height 노드

    설명

    Strength 입력에서 정의된 강도를 사용하여 Input 입력에서 정의된 높이 값으로 노멀 맵을 생성합니다.

    포트

    이름 방향 Type 설명
    In 입력 플로트 입력 높이 값
    Strength 입력 플로트 출력 노멀의 강도입니다. 실제 단위로 고려할 때 권장 범위는 0-0.1입니다.
    Out 출력 벡터 3 출력 값

    컨트롤

    이름 Type 옵션 설명
    Output Space 드롭다운 Tangent, World 출력 노멀의 좌표 공간을 설정합니다.

    생성된 코드 예제

    다음 예제 코드는 Output Space 모드에 대한 이 노드의 가능한 결과 중 하나입니다.

    Tangent

    void Unity_NormalFromHeight_Tangent_float(float In, float Strength, float3 Position, float3x3 TangentMatrix, out float3 Out)
    {
        float3 worldDerivativeX = ddx(Position);
        float3 worldDerivativeY = ddy(Position);
    
        float3 crossX = cross(TangentMatrix[2].xyz, worldDerivativeX);
        float3 crossY = cross(worldDerivativeY, TangentMatrix[2].xyz);
        float d = dot(worldDerivativeX, crossY);
        float sgn = d < 0.0 ? (-1.0f) : 1.0f;
        float surface = sgn / max(0.000000000000001192093f, abs(d));
    
        float dHdx = ddx(In);
        float dHdy = ddy(In);
        float3 surfGrad = surface * (dHdx*crossY + dHdy*crossX);
        Out = normalize(TangentMatrix[2].xyz - (Strength * surfGrad));
        Out = TransformWorldToTangent(Out, TangentMatrix);
    }
    

    World

    void Unity_NormalFromHeight_World_float(float In, float Strength, float3 Position, float3x3 TangentMatrix, out float3 Out)
    {
        float3 worldDerivativeX = ddx(Position);
        float3 worldDerivativeY = ddy(Position);
    
        float3 crossX = cross(TangentMatrix[2].xyz, worldDerivativeX);
        float3 crossY = cross(worldDerivativeY, TangentMatrix[2].xyz);
        float d = dot(worldDerivativeX, crossY);
        float sgn = d < 0.0 ? (-1.0f) : 1.0f;
        float surface = sgn / max(0.000000000000001192093f, abs(d));
    
        float dHdx = ddx(In);
        float dHdy = ddy(In);
        float3 surfGrad = surface * (dHdx*crossY + dHdy*crossX);
        Out = normalize(TangentMatrix[2].xyz - (Strength * surfGrad));
    }
    
    문서 개요
    맨 위로
    Copyright © 2023 Unity Technologies — 상표 및 이용약관
    • 법률정보
    • 개인정보처리방침
    • 쿠키
    • 내 개인정보 판매 금지
    • Your Privacy Choices (Cookie Settings)