শেফার আলফা মিশ্রিত স্প্রাইটের মাধ্যমে সিলুয়েট দেখতে


12

আমি এই উদাহরণগুলির মতো একটিরূপের মাধ্যমে ityক্যতে একটি ফলাফল অর্জন করতে চাই:

আমার নির্দিষ্ট দৃশ্যে বেশ কয়েকটি প্রয়োজনীয়তা রয়েছে:

  • স্প্রাইটস আলফা মিশ্রণ ব্যবহার করছে এবং স্প্রাইটের স্বচ্ছ অঞ্চল রয়েছে।
  • 2 ধরণের উপাদান রয়েছে যা চরিত্রকে আবদ্ধ করে। একটিতে সিলুয়েট প্রভাব তৈরি করা উচিত, এবং অন্যটি স্বাভাবিকের মতো আচরণ করা উচিত।

সিলুয়েট তৈরি করে এমন উপাদানগুলিকে অন্তর্ভুক্ত করার জন্য আমি জেড রাইট সক্ষম করি এবং এমন উপাদানগুলির জন্য এটি অক্ষম করে।

চরিত্রটির জন্য আমি শেডারটির সারিটি স্বচ্ছ + 1 এ সেট করার চেষ্টা করেছি এবং এই পাসটি যুক্ত করেছি:

Pass
{
    ZTest Greater
    Lighting Off
    Color [_Color]
}

এবং প্রভাব আংশিকভাবে কাজ করে:

  • সিলুয়েটটি সমস্ত চরিত্রের মধ্যে আঁকা, এমনকি যে অংশগুলি স্বচ্ছ। স্বচ্ছ অংশগুলি একটি সিলুয়েট তৈরি করা উচিত নয়।

  • চরিত্রটি যখন কোনও স্প্রিটের পিছনে থাকে তখন সিলুয়েট তৈরি হয়, এমনকি স্প্রাইটের সেই অংশটি স্বচ্ছ হলেও। স্প্রাইটের স্বচ্ছ অংশের পিছনে থাকা সিলুয়েট তৈরি করা উচিত নয়।

  • চরিত্রটি বাকি উপাদানগুলির সামনে উপস্থিত হয়, এমনকি যদি এটি তাদের পিছনে থাকে। আমি অনুমান করি এটি হ'ল স্বচ্ছ + 1 এ সারি সেট করা। তবে আমি এটি স্বচ্ছ হিসাবে ছেড়ে দিলে চরিত্রটি সঠিক ক্রমে আঁকা হয় তবে সিলুয়েটটি কখনও দেখা যায় না।

আমি কেউ এই টিপসগুলি অনুসরণ করার চেষ্টা করেছি, তবে আমি এটি কার্যকর করতে অক্ষম:

1) স্প্রিটগুলি যেমন রেন্ডার করে সেই পাসটি ছেড়ে দিন।

২) জেড-বাফারে লেখার একটি পাস যোগ করুন, তবে একটি শেডার রয়েছে যা আলফা ভিত্তিক পিক্সেলগুলি বাতিল করতে ক্লিপ () ব্যবহার করে। আপনি এমএসএএ এবং আলফা-টু কভারেজ ব্যবহার না করে নরম জেড-পরীক্ষা করতে জেড-বাফার ব্যবহার করতে পারবেন না। এর মানটি দুর্দান্ত হবে না তবে এটি আপনি সবচেয়ে ভাল করতে পারেন। একটি দ্রুত বিকল্প হ'ল একটি প্যাটার্ন বা শব্দ দূরে, বা আপনার স্প্রাইটসগুলির মোটামুটি ধারালো প্রান্ত থাকলে একটি ভাল পুরানো ফ্যাশন থ্রেশহোল্ড।

3) জেড-টেস্ট ব্যবহার করে অবসমনীয় রঙের অঙ্কন করে এমন তৃতীয় পাস যুক্ত করুন এবং নিশ্চিত করুন যে এটি চূড়ান্ত পাস হিসাবে আঁকা।

আমি শেডারে নতুন ধরনের, বিশেষত ityক্যে, এবং কীভাবে এটি সঠিকভাবে কাজ করা যায় তা আমি ঠিক বুঝতে পারি না।


আপনার ২ য় উদাহরণটি কেবল অক্ষরের উপরে স্থানান্তরিত সবুজ স্প্রিটকে দেখায়। আপনি এটির থেকে মুক্তি পেতে পারেন এবং কেবল দ্বিতীয়টি ছেড়ে যেতে চাইছেন, যদি এটি আপনি সন্ধান করছেন।
স্টিভ হার্ডিং

উত্তর:


1

এই ভিডিওটি কি বেসিকগুলি কভার করে? এটি লোকেরা ইতিমধ্যে প্রকাশিত ছায়াগুলির থেকে রূপরেখা এবং সিলুয়েটের কয়েকটি ভিন্ন স্টাইল তৈরি করার উদাহরণ illust

https://www.youtube.com/watch?v=00qMZlacZQo

এটি আপনার ইউনিট উইকিতে প্রকাশিত শেডার ব্যবহারের উদাহরণ যা আপনার পরে কী হবে pretty শেডারটির সামগ্রী নীচে রয়েছে, যদিও আমি মনে করি শেডারটির বাহ্যিক অংশটি ইউ 5-তে প্রত্যাশা অনুযায়ী কাজ করতে পারে না।

Shader "Outlined/Silhouetted Diffuse" {
Properties {
    _Color ("Main Color", Color) = (.5,.5,.5,1)
    _OutlineColor ("Outline Color", Color) = (0,0,0,1)
    _Outline ("Outline width", Range (0.0, 0.03)) = .005
    _MainTex ("Base (RGB)", 2D) = "white" { }
}

CGINCLUDE
#include "UnityCG.cginc"

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

struct v2f {
    float4 pos : POSITION;
    float4 color : COLOR;
};

uniform float _Outline;
uniform float4 _OutlineColor;

v2f vert(appdata v) {
// just make a copy of incoming vertex data but scaled according to normal direction
    v2f o;
    o.pos = mul(UNITY_MATRIX_MVP, v.vertex);

    float3 norm   = mul ((float3x3)UNITY_MATRIX_IT_MV, v.normal);
    float2 offset = TransformViewToProjection(norm.xy);

    o.pos.xy += offset * o.pos.z * _Outline;
    o.color = _OutlineColor;
    return o;
}
ENDCG

SubShader {
    Tags { "Queue" = "Transparent" }

    // note that a vertex shader is specified here but its using the one above
    Pass {
        Name "OUTLINE"
        Tags { "LightMode" = "Always" }
        Cull Off
        ZWrite Off
        ZTest Always
        ColorMask RGB // alpha not used

        // you can choose what kind of blending mode you want for the outline
        Blend SrcAlpha OneMinusSrcAlpha // Normal
        //Blend One One // Additive
        //Blend One OneMinusDstColor // Soft Additive
        //Blend DstColor Zero // Multiplicative
        //Blend DstColor SrcColor // 2x Multiplicative

CGPROGRAM
#pragma vertex vert
#pragma fragment frag

half4 frag(v2f i) :COLOR {
    return i.color;
}
ENDCG
    }

    Pass {
        Name "BASE"
        ZWrite On
        ZTest LEqual
        Blend SrcAlpha OneMinusSrcAlpha
        Material {
            Diffuse [_Color]
            Ambient [_Color]
        }
        Lighting On
        SetTexture [_MainTex] {
            ConstantColor [_Color]
            Combine texture * constant
        }
        SetTexture [_MainTex] {
            Combine previous * primary DOUBLE
        }
    }
}

SubShader {
    Tags { "Queue" = "Transparent" }

    Pass {
        Name "OUTLINE"
        Tags { "LightMode" = "Always" }
        Cull Front
        ZWrite Off
        ZTest Always
        ColorMask RGB

        // you can choose what kind of blending mode you want for the outline
        Blend SrcAlpha OneMinusSrcAlpha // Normal
        //Blend One One // Additive
        //Blend One OneMinusDstColor // Soft Additive
        //Blend DstColor Zero // Multiplicative
        //Blend DstColor SrcColor // 2x Multiplicative

        CGPROGRAM
        #pragma vertex vert
        #pragma exclude_renderers gles xbox360 ps3
        ENDCG
        SetTexture [_MainTex] { combine primary }
    }

    Pass {
        Name "BASE"
        ZWrite On
        ZTest LEqual
        Blend SrcAlpha OneMinusSrcAlpha
        Material {
            Diffuse [_Color]
            Ambient [_Color]
        }
        Lighting On
        SetTexture [_MainTex] {
            ConstantColor [_Color]
            Combine texture * constant
        }
        SetTexture [_MainTex] {
            Combine previous * primary DOUBLE
        }
    }
}

Fallback "Diffuse"
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.