আমি যখন খেলোয়াড়ের চরিত্রটি এলাকার ভিতরে বা বাইরে চলে যাই তখন কীভাবে আমি তাকে বিবর্ণ করব?


17

আমি যখন খেলোয়াড়ের অঞ্চল থেকে বাইরে যাই তখন আমি তাকে বিবর্ণ করতে চাই।

উদাহরণস্বরূপ, ধরুন কোনও ব্যক্তি একটি ভবনে প্রবেশ করেন। যখন কোনও ব্যক্তি ভবনের বাইরে থাকে তখন তাকে দেখা উচিত নয়, তবে তিনি প্রবেশ করলে ধীরে ধীরে দৃশ্যমান হয়ে যায় (বিবর্ণ প্রভাব ব্যবহার করে)।

যখন হাতি সবুজ অঞ্চলের ভিতরে থাকে তখন তার আলফাটি 1 হওয়া উচিত

photo_2019-04-15_07-21-39

যখন হাতি সবুজ অঞ্চলের বাইরে থাকে তখন তার আলফা 0 হওয়া উচিত

photo_2019-04-15_07-21-35

উত্তর:


34

আপনার চরিত্রটি বিবর্ণ করতে আপনি বিশ্ব স্থান ব্যবহার করতে পারেন।

অবজেক্ট স্পেস (বা অবজেক্ট কোঅর্ডিনেট সিস্টেম) প্রতিটি গেমের অবজেক্টের জন্য নির্দিষ্ট; তবে, সমস্ত গেমের অবজেক্টগুলি একটি সাধারণ স্থানাঙ্ক ব্যবস্থায় রূপান্তরিত হয় - বিশ্ব স্থান।

যদি কোনও গেমের অবজেক্ট সরাসরি বিশ্ব স্পেসে স্থাপন করা হয় তবে গেম অবজেক্টের ট্রান্সফর্ম উপাদান দ্বারা অবজেক্ট-টু-ওয়ার্ল্ড ট্রান্সফর্মেশন নির্দিষ্ট করা হয়।

https://en.wikibooks.org/wiki/Cg_Programming/Unity/Shading_in_World_Space

বিশ্ব স্থান দ্বারা বিলীন

Record_2019_04_15_07_13_25_154

Shader "Smkgames/worldSpaceFade" {
      Properties{
         _Size("Size",Vector) = (2,2,0,0)
      }
   SubShader {
      Pass {
         CGPROGRAM

         #pragma vertex vert  
         #pragma fragment frag 


         struct vertexInput {
            float4 vertex : POSITION;
         };
         struct vertexOutput {
            float4 pos : SV_POSITION;
            float4 position_in_world_space : TEXCOORD0;
         };

         vertexOutput vert(vertexInput input) 
         {
            vertexOutput output; 

            output.pos =  UnityObjectToClipPos(input.vertex);
            output.position_in_world_space = 
               mul(unity_ObjectToWorld, input.vertex);

            return output;
         }
         float2 _Size;

         float4 frag(vertexOutput input) : COLOR 
         {
             float3 world = input.position_in_world_space;

          float4 equation = pow(world.x/_Size.x,8) + pow(world.z/_Size.y,8);
          return smoothstep(1,0,equation);
         }

         ENDCG  
      }
   }
}

সারফেস শেডার

বিশ্ব স্থান বোঝার পরে আমরা এটি আমাদের পৃষ্ঠের শেডারে ব্যবহার করতে পারি:

Record_2019_04_15_07_14_24_876

Shader "Smkgames/worldSpaceFade" {
    Properties {
         _Size("Size",Vector) = (2,2,0,0)
        _Color ("Color", Color) = (1,1,1,1)
        _MainTex ("Albedo (RGB)", 2D) = "white" {}
        _Glossiness ("Smoothness", Range(0,1)) = 0.5
        _Metallic ("Metallic", Range(0,1)) = 0.0
    }
    SubShader {
 Tags {"Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent"}
     Pass {
        ZWrite On
        ColorMask 0
    }
        LOD 200

        CGPROGRAM
        #pragma surface surf Standard fullforwardshadows alpha:fade

        #pragma target 3.0

        sampler2D _MainTex;

        struct Input {
            float2 uv_MainTex;
            float3 worldPos: TEXCOORD2;
        };

        half _Glossiness;
        half _Metallic;
        fixed4 _Color;
        float2 _Size;

        void vert (inout appdata_full v, out Input o){
            UNITY_INITIALIZE_OUTPUT(Input,o);
            o.worldPos = mul(unity_ObjectToWorld, v.vertex);
        }


        UNITY_INSTANCING_BUFFER_START(Props)
        UNITY_INSTANCING_BUFFER_END(Props)

        void surf (Input IN, inout SurfaceOutputStandard o) {
            fixed4 c = tex2D (_MainTex, IN.uv_MainTex) * _Color;
            float4 equation = pow(IN.worldPos.x/_Size.x,8) + pow(IN.worldPos.z/_Size.y,8);
            o.Albedo = c.rgb;
            o.Metallic = _Metallic;
            o.Smoothness = _Glossiness;
            o.Alpha = smoothstep(1,0,equation);
        }
        ENDCG
    }
    FallBack "Diffuse"
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.