چهار صف رندر از قبل تعریف شده وجود دارد:
اما بین آنها از پیش تعریف شده می تواند صف های بیشتری باشد. صفهای از پیش تعیین شده عبارتند از:
پس زمینه - این رندر صف قبل از هر چیز دیگر ارائه شده است. این برای skyboxes و مانند آن استفاده می شود.
هندسه یا Geometry (به طور پیش فرض) - این برای اکثر اشیاء استفاده می شود. جیامتری کدر( Opaque geometry ) از این صف استفاده می کند.
هندسه آزمایش شده با آلفا یا AlphaTest - alpha tested geometry از این صف استفاده می کند. این یک صف جداگانه از هندسه است؛ از آنجایی که کارآمدتر کردن اشیاء آزمایش شده با آلفا پس از آنکه تمام کدهای جامد کشیده شده، کارآمد تر است.
شفاف - این رندر صف پس از هندسه و AlphaTest، در جهت عقب به جلو ارائه شده است. هر آلفا مخلوط شده (به عنوان مثال شیدر هایی که روی بافر عمق ننویسند) باید به اینجا بروند (اثرات شیشه، ذرات).
این رندر صف برای اثرات پوشش یا overlay است. هر چیزی که آخرین ارائه شده باشد باید اینجا باشد (به عنوان مثال عنصر لنز).
اما بین آنها از پیش تعریف شده می تواند صف های بیشتری باشد. صفهای از پیش تعیین شده عبارتند از:
پس زمینه - این رندر صف قبل از هر چیز دیگر ارائه شده است. این برای skyboxes و مانند آن استفاده می شود.
هندسه یا Geometry (به طور پیش فرض) - این برای اکثر اشیاء استفاده می شود. جیامتری کدر( Opaque geometry ) از این صف استفاده می کند.
هندسه آزمایش شده با آلفا یا AlphaTest - alpha tested geometry از این صف استفاده می کند. این یک صف جداگانه از هندسه است؛ از آنجایی که کارآمدتر کردن اشیاء آزمایش شده با آلفا پس از آنکه تمام کدهای جامد کشیده شده، کارآمد تر است.
شفاف - این رندر صف پس از هندسه و AlphaTest، در جهت عقب به جلو ارائه شده است. هر آلفا مخلوط شده (به عنوان مثال شیدر هایی که روی بافر عمق ننویسند) باید به اینجا بروند (اثرات شیشه، ذرات).
این رندر صف برای اثرات پوشش یا overlay است. هر چیزی که آخرین ارائه شده باشد باید اینجا باشد (به عنوان مثال عنصر لنز).
Shader "Transparent Queue Example" {
SubShader {
Tags {"Queue" = "Transparent" }
Pass {
// rest of the shader body...
}
}
}
SubShader {
Tags {"Queue" = "Transparent" }
Pass {
// rest of the shader body...
}
}
}
یک مثال نشان دادن چگونگی ارائه چیزی در صف شفاف است
هندسه رندر صف، ترتیب اشیاء را برای بهترین عملکرد بهینه می کند. تمام دیگر ردیف صف ها اشیا را با فاصله مرتب می کنند، شروع به رندر کردن از دورترین ها و پایان دادن به نزدیکترین آنها.
برای استفاده خاص در بین صف می توان استفاده کرد. در داخل هر صف با عدد صحیح نشان داده شده است:
پس زمینه 1000 🏔
هندسه 2000 🔶
آلفا تست 2450 ☘
شفاف 3000 💎
پوشش 4000🔋
است. اگر یک شیدر از یک صف مانند این استفاده می کند:
هندسه رندر صف، ترتیب اشیاء را برای بهترین عملکرد بهینه می کند. تمام دیگر ردیف صف ها اشیا را با فاصله مرتب می کنند، شروع به رندر کردن از دورترین ها و پایان دادن به نزدیکترین آنها.
برای استفاده خاص در بین صف می توان استفاده کرد. در داخل هر صف با عدد صحیح نشان داده شده است:
پس زمینه 1000 🏔
هندسه 2000 🔶
آلفا تست 2450 ☘
شفاف 3000 💎
پوشش 4000🔋
است. اگر یک شیدر از یک صف مانند این استفاده می کند:
Tags { "Queue" = "Geometry+1" }
این شیء را پس از تمام اشیاء کدر ارائه می دهد، اما قبل از اینکه اشیای شفاف، به عنوان رندر صف 2001 (هندسه به علاوه یک) باشد. این در شرایطی است که شما می خواهید برخی از اشیا همیشه بین دو مجموعه دیگر از اشیاء کشیده شده مفید باشد. به عنوان مثال، در اکثر موارد، آب شفاف باید پس از اشیای کدر، اما قبل از اشیای شفاف باشد.
این شیء را پس از تمام اشیاء کدر ارائه می دهد، اما قبل از اینکه اشیای شفاف، به عنوان رندر صف 2001 (هندسه به علاوه یک) باشد. این در شرایطی است که شما می خواهید برخی از اشیا همیشه بین دو مجموعه دیگر از اشیاء کشیده شده مفید باشد. به عنوان مثال، در اکثر موارد، آب شفاف باید پس از اشیای کدر، اما قبل از اشیای شفاف باشد.
حال بیایید تگ های مختلف را بررسی کنیم:
⭐️برچسب RenderType
تگ RenderType شیدرها را به چند گروه از پیش تعریف شده طبقه بندی می کند، به عنوان مثال این یک شیدر کدر و یا یک شیدر تست شده با آلفا و غیره است که توسط Shader Replacement و در بعضی موارد برای ساخت بافت عمقی دوربین استفاده می شود.
⭐️برچسب ForceNoShadowCasting
اگر تگ ForceNoShadowCasting داده شده باشد و دارای مقدار "True" باشد، پس از آن یک شی که با استفاده از این زیرشاخه ارائه می شود، سایه ها را هرگز تولید نخواهد کرد. این بیشتر مفید است هنگامی که شما با استفاده از جایگزین شیدر در اشیاء شفاف استفاده می کنید و شما نمی خواهید به ارث بردن یک سایه عبور از subshader دیگر.
⭐️برچسب IgnoreProjector
اگر تگ IgnoreProjector داده شده است و دارای مقدار "True" باشد، پس از آن شیء ای که از این شیدر استفاده می کند، توسط پروژکتور ها تحت تاثیر قرار نمی گیرد. این عمدتا در اشیای نیمه شفاف مفید است، زیرا هیچ روش خوبی برای پروژکتورها برای تأثیرگذاری بر آنها وجود ندارد.
⭐️برچسب RenderType
تگ RenderType شیدرها را به چند گروه از پیش تعریف شده طبقه بندی می کند، به عنوان مثال این یک شیدر کدر و یا یک شیدر تست شده با آلفا و غیره است که توسط Shader Replacement و در بعضی موارد برای ساخت بافت عمقی دوربین استفاده می شود.
⭐️برچسب ForceNoShadowCasting
اگر تگ ForceNoShadowCasting داده شده باشد و دارای مقدار "True" باشد، پس از آن یک شی که با استفاده از این زیرشاخه ارائه می شود، سایه ها را هرگز تولید نخواهد کرد. این بیشتر مفید است هنگامی که شما با استفاده از جایگزین شیدر در اشیاء شفاف استفاده می کنید و شما نمی خواهید به ارث بردن یک سایه عبور از subshader دیگر.
⭐️برچسب IgnoreProjector
اگر تگ IgnoreProjector داده شده است و دارای مقدار "True" باشد، پس از آن شیء ای که از این شیدر استفاده می کند، توسط پروژکتور ها تحت تاثیر قرار نمی گیرد. این عمدتا در اشیای نیمه شفاف مفید است، زیرا هیچ روش خوبی برای پروژکتورها برای تأثیرگذاری بر آنها وجود ندارد.
یکی از دوستان زحمت کشیدند و فراز هایی از کتاب The book of shader رو نوشتند تا در اختیار شما قرار بگیره...
Forwarded from Kamali
ما نمی خوایم قسمت های منفی موج تو کار باشه چون می خوایم رنگ بین صفر و یک نوسان کنه
بنابراین یک قدرمطلق میگیریم و قسمت های پایینی رو حذف می کنیم
بنابراین یک قدرمطلق میگیریم و قسمت های پایینی رو حذف می کنیم