쉐더를 해야 할 때가 많지 않아요. 72가지 색깔의 그림자를 받았어요.

16370 단어 Unityshadertech

쉐더를 할 시간이 얼마 안 남았어요.


하마터면 Shader를 할 뻔했다.쉐더를 할 시간이 많지 않을 것 같아서요.
100부까지 열심히 하겠습니다.10년이 걸려도 돼요.
100편의 글을 배웠다면 초보자라도 이해할 수 있을 것 같아요.
이렇게 하는 거야.
※ 초보자는 필기 레벨로 기록
기술 보도로는 도움이 안 될 것 같습니다.

미리 준비하다


아래 참조
Shader 파트 1Unite 2017 애니메이션을 볼 때가 많지 않아요. (기초지식~종이 스크레이퍼로 색깔 바꾸기)

데모


컬러 그림자를 받은 플랜을 배열해 봤어요.
결이 반영되어 약간의 무늬가 있습니다.

Shader 샘플


3
Shader "Custom/ColorfulShadow"
{

    Properties
    {
        //ここに書いたものがInspectorに表示される
        _MainColor("MainColor",Color) = (1,1,1,1)
        _ShadowColor("ShadowColor",Color) = (0,0,0,1)
        _ShadowTex("ShadowTexture", 2D) = "white" {}
        _ShadowIntensity ("Shadow Intensity", Range (0, 1)) = 0.6
    }
    SubShader
    {
        CGINCLUDE
        #pragma vertex vert
        #pragma fragment frag
        #include "UnityCG.cginc"
        ENDCG

        //メインカラーのパス
        Pass
        {
            CGPROGRAM
            //変数の宣言 Propertiesで定義した名前と一致させる
            half4 _MainColor;

            struct v2f
            {
                float4 pos : SV_POSITION;
            };

            v2f vert(appdata_base v)
            {
                v2f o;
                o.pos = UnityObjectToClipPos(v.vertex);
                return o;
            }

            half4 frag(v2f i) : COLOR
            {
                //RGBAにそれぞれのプロパティを当てはめてみる
                return half4(_MainColor);
            }
            ENDCG
        }

        //影を塗りこむパス
        Pass
        {
            Tags
            {
                "Queue"="geometry"
                "LightMode" = "ForwardBase"
            }
            Blend SrcAlpha OneMinusSrcAlpha

            CGPROGRAM
            #pragma multi_compile_fwdbase
            #include "AutoLight.cginc"

            sampler2D _ShadowTex;
            float4 _ShadowTex_ST;
            float4 _ShadowColor;
            float _ShadowIntensity;

            //グローバル変数
            float _ShadowDistance;

            struct appdata
            {
                float4 vertex : POSITION;
                float2 shadow_uv : TEXCOORD0;
                float3 normal:NORMAL;
            };

            struct v2f
            {
                float2 shadow_uv : TEXCOORD0;
                float4 pos : SV_POSITION;
                float3 worldNormal:NORMAL;
                float3 worldPos : WORLD_POS;
                SHADOW_COORDS(1)
            };

            v2f vert(appdata v)
            {
                v2f o;
                o.pos = UnityObjectToClipPos(v.vertex);
                TRANSFER_SHADOW(o);
                //タイリングとオフセットの処理
                o.shadow_uv = TRANSFORM_TEX(v.shadow_uv, _ShadowTex);
                //法線方向のベクトル
                o.worldNormal = UnityObjectToWorldNormal(v.normal);
                o.worldPos = mul(unity_ObjectToWorld, v.vertex);
                return o;
            }

            float4 frag(v2f i) : COLOR
            {
                // カメラとオブジェクトの距離(長さ)を取得
                // _WorldSpaceCameraPos:定義済の値 ワールド座標系のカメラの位置
                float cameraToObjLength = clamp(length(_WorldSpaceCameraPos - i.worldPos), 0, _ShadowDistance);
                //1つ目のライトのベクトルを正規化
                float3 L = normalize(_WorldSpaceLightPos0.xyz);
                //ワールド座標系の法線を正規化
                float3 N = normalize(i.worldNormal);
                //内積の結果が0以上なら1 この値を使って裏側の影は描画しない
                float front = step(0, dot(N, L));
                //影の場合0、それ以外は1
                float attenuation = SHADOW_ATTENUATION(i);
                //影の減衰率
                float fade = 1 - pow(cameraToObjLength / _ShadowDistance, _ShadowDistance);
                //影の色
                float3 shadowColor = tex2D(_ShadowTex, i.shadow_uv) * _ShadowColor;
                //影の場所とそれ以外の場所を塗分け
                float4 finalColor = float4(shadowColor, (1 - attenuation) * _ShadowIntensity * front * fade);
                return finalColor;
            }
            ENDCG
        }
    }
}
는 기본적으로 과거에 보도된 내용이다.
[참조 링크]
Shader의 70번째 바이트용 Shader를 할 시간이 거의 없어요.
Shader 할 부분 71 그림자 받은 아욱용 Shader
섀도우의 색상을 텍스쳐의 샘플링 색상과 지정된 색상에 곱합니다.
이런 방법의 음영을 칠하는 것은 음영에서 개별적으로 설정할 수 있다는 장점이 있다.
각자 다른 소재에 부착된 플랜을 준비해 속성을 설정했다.

좋은 웹페이지 즐겨찾기