FPro Sensei
اینجوری که به به میشه نیازی هم به Planar RP پر هزینه هم ندارم
بنظر میرسه داره به چیز حق تبدیل میشه البته هنوز نمی خوام امکانات خاصشو نشون بدم اون موند اخر نشون بدم پس بهتره هایپ باشید 😁
کیفیت : 4k
کیفیت : 4k
🔥1
FPro Sensei
بنظر میرسه داره به چیز حق تبدیل میشه البته هنوز نمی خوام امکانات خاصشو نشون بدم اون موند اخر نشون بدم پس بهتره هایپ باشید 😁 کیفیت : 4k
فقط فریم ❤️🔥
دقت کن اون NON SRP ها مربوط به Terrain هست نه شیدر ❗️
دقت کن اون NON SRP ها مربوط به Terrain هست نه شیدر ❗️
🔥1
FPro Sensei
خب دوستان سایت جدید اوردم خدمت شما 🚀 باز هوش مصنوعی کلاد اوپس داره 130 دلار میده 💰 با لینک من برید اینو میده نرید کمتر میده 👇 لینک سایت ثبت نام با اکانت گیت هاب 📝
4 نفر گرفتن و تست کردن هر کس نگرفته بگیره که ممکنه روش ببندن پس حتما بگرید و تست کنید کسی هم نتونست میتونه سوال بپرسه
👏1
امروز تولدمه 🎂❤️
امیدوارم در سالهای آینده بتونم به تمام اهداف و آرزوهایی که برای خودم دارم برسم و نتیجهی تمام تلاشهایی که تا امروز کردم رو ببینم 🌟.
مدت زیادیه که در کنار شما هستم و از بودن در این جمع خوشحالم 🤝. امیدوارم همچنان بتونم در کنار شما به آموزش، یادگیری و کمک به پیشرفت اعضای گروه ادامه بدم و در این مسیر، همراه هم رشد کنیم 📚🚀.
ممنونم از همهی کسانی که در این مدت کنارم بودن و باعث شدن این مسیر برای من ارزشمندتر بشه 🌱❤️.
به امید روزهایی بهتر، موفقیتهای بزرگتر و رسیدن به تمام هدفهایی که هنوز در انتظارمون هستن ✨.
این طرح آرت یکی از دوستان برام فرستاده بود؛ میتونم بگم بهترین کادو تولدی بود که تا حالا از اعضای گروه گرفتم ❤️🎁🖼.
امیدوارم در سالهای آینده بتونم به تمام اهداف و آرزوهایی که برای خودم دارم برسم و نتیجهی تمام تلاشهایی که تا امروز کردم رو ببینم 🌟.
مدت زیادیه که در کنار شما هستم و از بودن در این جمع خوشحالم 🤝. امیدوارم همچنان بتونم در کنار شما به آموزش، یادگیری و کمک به پیشرفت اعضای گروه ادامه بدم و در این مسیر، همراه هم رشد کنیم 📚🚀.
ممنونم از همهی کسانی که در این مدت کنارم بودن و باعث شدن این مسیر برای من ارزشمندتر بشه 🌱❤️.
به امید روزهایی بهتر، موفقیتهای بزرگتر و رسیدن به تمام هدفهایی که هنوز در انتظارمون هستن ✨.
این طرح آرت یکی از دوستان برام فرستاده بود؛ میتونم بگم بهترین کادو تولدی بود که تا حالا از اعضای گروه گرفتم ❤️🎁🖼.
❤17
ولی من توصیه میکنم روی 9ROUTER بزارید و همشو یکجا داشته باشید ❗️❗️
❤2🔥1
در مجموعه آموزش های Anime Shader (NPR) قراره یک سری از دوره های خاص برای متخصص شدن در طراحی محیط فوق العاده استلایزد و خاص یاد بگیرید برای اینکه دوره دنبال کنید در کانال BlenderHints عضو شوید ❗️
❤2
FPro Sensei
در مجموعه آموزش های Anime Shader (NPR) قراره یک سری از دوره های خاص برای متخصص شدن در طراحی محیط فوق العاده استلایزد و خاص یاد بگیرید برای اینکه دوره دنبال کنید در کانال BlenderHints عضو شوید ❗️
در واقعه این دوره ها یک دوره طلایی هستن تا برای هنرمندان واقعی که یاد بگیرد چطوری اون صحنه های که توی انیمه که فوق العاده زیبا و استلایز هست رو چطوری میسازن جواب همشو توی این کانال پیدا خواهید کرد 👆
❤4
FPro Sensei
در واقعه این دوره ها یک دوره طلایی هستن تا برای هنرمندان واقعی که یاد بگیرد چطوری اون صحنه های که توی انیمه که فوق العاده زیبا و استلایز هست رو چطوری میسازن جواب همشو توی این کانال پیدا خواهید کرد 👆
در این آموزش به شما توضیح خواهم داد چطوری میتوانید از شکست نور واقعی در HDRP استفاده کنید ولی قبل از اینکه توضیح بدم جطوری از API استفادع کنید در داخل شیدر گراف این جدول را بخوبی دقت کنید : (آموزش تخصصی شیدر نویسی از FProSensei)
🔥1
FPro Sensei
در این آموزش به شما توضیح خواهم داد چطوری میتوانید از شکست نور واقعی در HDRP استفاده کنید ولی قبل از اینکه توضیح بدم جطوری از API استفادع کنید در داخل شیدر گراف این جدول را بخوبی دقت کنید : (آموزش تخصصی شیدر نویسی از FProSensei)
اول از همه باید تفاوت روش های ایجاد Refraction را بدونید پس با دقت زیاد جدول رو مرور کنید
در مسیر پکیج اگر به این :
متوجه میشوید که در این مسیر شکست نور را محاسبه میکند خبر خوب اینکه این نه قفل مارک زد با Stencil دارد ونه اینکه حتما باید از Gbuffer استفاده بشه که توی Lit هست بلکه این توی بافر Forward+ هست پس براحتی میشه توی شیدر آب استلایزد استفاده بشه :
"Packages/com.unity.render-pipelines.core/ShaderLibrary/Refraction.hlsl"
متوجه میشوید که در این مسیر شکست نور را محاسبه میکند خبر خوب اینکه این نه قفل مارک زد با Stencil دارد ونه اینکه حتما باید از Gbuffer استفاده بشه که توی Lit هست بلکه این توی بافر Forward+ هست پس براحتی میشه توی شیدر آب استلایزد استفاده بشه :
کد Custom Function برای شیدر گراف :
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Refraction.hlsl"
void AniToonRefractionSS_float(
in float3 PositionWS, // Position node, فضای World
in float3 Normal, // نرمال موجدار -- همان که به SSR میدهی
in float3 ViewDir, // View Direction node, فضای World
in float4 ScreenPosition, // Screen Position, حالت Default
in float IOR, // ~1.333 برای آب
in float Thickness, // ضخامت بر حسب متر -- DepthFade * Depth Distance
in float Roughness, // 0 شفاف .. 1 تار
in float3 AbsorptionColor, // ضریب جذب به تفکیک کانال
in float AbsorptionStrength,
out float3 RefractedColor,
out float Weight)
{
#ifdef SHADERGRAPH_PREVIEW
RefractedColor = float3(0.0, 0.0, 0.0);
Weight = 0.0;
#else
float3 V = normalize(ViewDir);
float3 N = normalize(Normal);
float ior = max(IOR, 1.0001);
float thickness = max(Thickness, 0.0);
RefractionModelResult refraction =
RefractionModelBox(V, PositionWS, N, ior, thickness);
float2 hitNDC = ComputeNormalizedDeviceCoordinates(
refraction.positionWS, GetWorldToHClipMatrix());
float hitDeviceDepth = SampleCameraDepth(hitNDC);
float hitLinearDepth = LinearEyeDepth(hitDeviceDepth, _ZBufferParams);
float surfaceLinearDepth = LinearEyeDepth(PositionWS, GetWorldToViewMatrix());
float offsetMultiplier = (hitLinearDepth > surfaceLinearDepth) ? 1.0 : 0.0;
float2 samplingNDC = lerp(ScreenPosition.xy, hitNDC, offsetMultiplier);
float mipLevel = PositivePow(saturate(Roughness), 1.3)
* max((float)_ColorPyramidLodCount - 1.0, 0.0);
float3 color = SampleCameraColor(samplingNDC, mipLevel);
color *= GetInverseCurrentExposureMultiplier();
float3 absorption = exp(-max(AbsorptionColor, 0.0)
* max(AbsorptionStrength, 0.0)
* refraction.dist);
color *= absorption;
float2 coordCS = samplingNDC * 2.0 - 1.0;
float2 t = Remap10(abs(coordCS),
_SSRefractionInvScreenWeightDistance,
_SSRefractionInvScreenWeightDistance);
float edgeFade = Smoothstep01(t.x) * Smoothstep01(t.y);
RefractedColor = max(color, 0.0);
Weight = saturate(edgeFade);
#endif
}
FPro Sensei
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Refraction.hlsl"
خب توضیح خط به خط شروع میکنم بر خلاف GLSL ما در HLSL زبان شیدر نویسی مطرح C++ میتوانیم یک کتابخانه - Api یا هر چیزی که بشه ازش چیزی رو وارد کرد و از کلاس ها یا تابع هاش استفاده کرد رو به کار بگیریم متد #include همانند متد Import در پایتون هست که در مسیر :
ماژول وارد کد نویسی ما میکند و ما حالا به کلاس و متد های داخلی ان درسترسی داریم ❗️
"Packages/com.unity.render-pipelines.core/ShaderLibrary/Refraction.hlsl"
ماژول وارد کد نویسی ما میکند و ما حالا به کلاس و متد های داخلی ان درسترسی داریم ❗️
FPro Sensei
void AniToonRefractionSS_float(
متد void یک تابع برای ما تعریف میکند ریشه این متد از زبان C میاد که امروزه توی زبان های C++ - C# هم دیده میشه که استفاده از _float برای شیدر گراف مهمه یعنی شیدر گراف با این میشناسه که این قرار یک کاستوم نود باشع ❗️
🔥1
FPro Sensei
in float3 PositionWS, // Position node, فضای World
in float3 Normal, // نرمال موجدار -- همان که به SSR میدهی
in float3 ViewDir, // View Direction node, فضای World
in float4 ScreenPosition, // Screen Position, حالت Default
in float IOR, // ~1.333 برای آب
in float Thickness, // ضخامت بر حسب متر -- DepthFade * Depth Distance
in float Roughness, // 0 شفاف .. 1 تار
in float3 AbsorptionColor, // ضریب جذب به تفکیک کانال
in float AbsorptionStrength,
out float3 RefractedColor,
out float Weight)
in float3 Normal, // نرمال موجدار -- همان که به SSR میدهی
in float3 ViewDir, // View Direction node, فضای World
in float4 ScreenPosition, // Screen Position, حالت Default
in float IOR, // ~1.333 برای آب
in float Thickness, // ضخامت بر حسب متر -- DepthFade * Depth Distance
in float Roughness, // 0 شفاف .. 1 تار
in float3 AbsorptionColor, // ضریب جذب به تفکیک کانال
in float AbsorptionStrength,
out float3 RefractedColor,
out float Weight)
این متغیر های ورودی هست که تعریف شده که اینظوری تعریف میشود :
A B C
A = از دو متد in و out میشه استفاده کرد
که اگر in باشد این متغیر ما ورودی هست یعنی داده میگیره و اگر out باشد باشد یعنی قراره خروجی بده
B = نوع داده را مشخص میکند برای مثال
float = عدد اعشاری که تک برداری هست
مثال = (1.3)
float2 = عدد اعشاری که بردار دو بعدی هست
مثال : (1.2658,2.565)
float3 = عدد اعشاری که بردار سه بعدی هست
برای مثال : (4.548,4.845.9)
و دیگر نوع داده : 2DUnityTexture و .....
C = اسم متغیر را تعریف میکنیم
برای مثال Normal
یک مثال کلی : in float3 PositionWS یعنی ورودی پوزیشین ابجکت را در فضای جهانی بگیر و out float3 RefractedColor یعنی خروجی شکست نور که در داخل شیدر محاسبه کردیم رو از نود بده بیرون
A B C
A = از دو متد in و out میشه استفاده کرد
که اگر in باشد این متغیر ما ورودی هست یعنی داده میگیره و اگر out باشد باشد یعنی قراره خروجی بده
B = نوع داده را مشخص میکند برای مثال
float = عدد اعشاری که تک برداری هست
مثال = (1.3)
float2 = عدد اعشاری که بردار دو بعدی هست
مثال : (1.2658,2.565)
float3 = عدد اعشاری که بردار سه بعدی هست
برای مثال : (4.548,4.845.9)
و دیگر نوع داده : 2DUnityTexture و .....
C = اسم متغیر را تعریف میکنیم
برای مثال Normal
یک مثال کلی : in float3 PositionWS یعنی ورودی پوزیشین ابجکت را در فضای جهانی بگیر و out float3 RefractedColor یعنی خروجی شکست نور که در داخل شیدر محاسبه کردیم رو از نود بده بیرون
🔥1
FPro Sensei
#ifdef SHADERGRAPH_PREVIEW
این دو شرط #ifdef SHADERGRAPH_PREVIEW و #else تعریف شده بخاطر اینکه
میره ماکرو های تعریف شده رو بررسی میکنه اگر SHADERGRAPH_PREVIEW باشه داخل شرط اجرا میکنه نبود میره داخل else اجرا میکنه منظور از SHADERGRAPH_PREVIEW همون پیش نمایش شیدر هست
میره ماکرو های تعریف شده رو بررسی میکنه اگر SHADERGRAPH_PREVIEW باشه داخل شرط اجرا میکنه نبود میره داخل else اجرا میکنه منظور از SHADERGRAPH_PREVIEW همون پیش نمایش شیدر هست
🔥1
FPro Sensei
RefractedColor = float3(0.0, 0.0, 0.0);
Weight = 0.0;
Weight = 0.0;
یک متعیر ساده تعریف میکنه که توضیح هم دادم چطوریه
🔥1
FPro Sensei
float3 V = normalize(ViewDir);
float3 N = normalize(Normal);
float3 N = normalize(Normal);
منظور از N نرمال سطح ابجکت و V همان زاویه دید دوربین هست که نرمالیز میکنه که مطمعن باشه خطا نباشه توی محاسبات
🔥1
FPro Sensei
float ior = max(IOR, 1.0001);
float thickness = max(Thickness, 0.0);
float thickness = max(Thickness, 0.0);
دو مقدار ior و thickness تعریف میکنه که با متد MAX میگه کمترین مقدار باید این باشه و زیر این نباید بره
🔥1