بعد باید خونه ها رو به صورت پیکسلی خاموش کنیم تا حروف الفبا رو از دلش در بیاریم:
float random(in float x){
return fract(sin(x)*43758.5453);
}
float random(in vec2 st){
return fract(sin(dot(st.xy ,vec2(12.9898,78.233))) * 43758.5453);
}
float randomChar(in vec2 outer,in vec2 inner){
float grid = 5.0;
return step(.5,random(outer+floor(inner*grid)));
}
vec3 matrix(in vec2 st){
float rows = 5.0;
vec2 ipos = floor(st*rows)+vec2(1.,0.);
ipos += vec2(.0,floor(iTime*20.*random(ipos.x)));
vec2 fpos = fract(st*rows);
vec2 center = (.5-fpos);
float pct = random(ipos);
float glow = (1.-dot(center,center)*3.)*2.0;
return vec3(randomChar(ipos,fpos) * pct * glow);
}
void mainImage( out vec4 fragColor, in vec2 fragCoord ){
vec2 st = fragCoord.xy / iResolution.xy;
st.y *= iResolution.y/iResolution.x;
fragColor = vec4(matrix(st),1.0);
}
return fract(sin(x)*43758.5453);
}
float random(in vec2 st){
return fract(sin(dot(st.xy ,vec2(12.9898,78.233))) * 43758.5453);
}
float randomChar(in vec2 outer,in vec2 inner){
float grid = 5.0;
return step(.5,random(outer+floor(inner*grid)));
}
vec3 matrix(in vec2 st){
float rows = 5.0;
vec2 ipos = floor(st*rows)+vec2(1.,0.);
ipos += vec2(.0,floor(iTime*20.*random(ipos.x)));
vec2 fpos = fract(st*rows);
vec2 center = (.5-fpos);
float pct = random(ipos);
float glow = (1.-dot(center,center)*3.)*2.0;
return vec3(randomChar(ipos,fpos) * pct * glow);
}
void mainImage( out vec4 fragColor, in vec2 fragCoord ){
vec2 st = fragCoord.xy / iResolution.xy;
st.y *= iResolution.y/iResolution.x;
fragColor = vec4(matrix(st),1.0);
}
float random(in float x){
return fract(sin(x)*43758.5453);
}
float random(in vec2 st){
return fract(sin(dot(st.xy ,vec2(12.9898,78.233))) * 43758.5453);
}
float randomChar(in vec2 outer,in vec2 inner){
float grid = 5.;
vec2 margin = vec2(.2,.05);
float seed = 23.;
vec2 borders = step(margin,inner)*step(margin,1.-inner);
return step(.5,random(outer*seed+floor(inner*grid))) * borders.x * borders.y;
}
vec3 matrix(in vec2 st){
float rows = 50.0;
vec2 ipos = floor(st*rows)+vec2(1.,0.);
ipos += vec2(.0,floor(iTime*20.*random(ipos.x)));
vec2 fpos = fract(st*rows);
vec2 center = (.5-fpos);
float pct = random(ipos);
float glow = (1.-dot(center,center)*3.)*2.0;
return vec3(randomChar(ipos,fpos) * pct * glow);
}
void mainImage( out vec4 fragColor, in vec2 fragCoord ){
vec2 st = fragCoord.xy / iResolution.xy;
st.y *= iResolution.y/iResolution.x;
fragColor = vec4(matrix(st),1.0);
}
return fract(sin(x)*43758.5453);
}
float random(in vec2 st){
return fract(sin(dot(st.xy ,vec2(12.9898,78.233))) * 43758.5453);
}
float randomChar(in vec2 outer,in vec2 inner){
float grid = 5.;
vec2 margin = vec2(.2,.05);
float seed = 23.;
vec2 borders = step(margin,inner)*step(margin,1.-inner);
return step(.5,random(outer*seed+floor(inner*grid))) * borders.x * borders.y;
}
vec3 matrix(in vec2 st){
float rows = 50.0;
vec2 ipos = floor(st*rows)+vec2(1.,0.);
ipos += vec2(.0,floor(iTime*20.*random(ipos.x)));
vec2 fpos = fract(st*rows);
vec2 center = (.5-fpos);
float pct = random(ipos);
float glow = (1.-dot(center,center)*3.)*2.0;
return vec3(randomChar(ipos,fpos) * pct * glow);
}
void mainImage( out vec4 fragColor, in vec2 fragCoord ){
vec2 st = fragCoord.xy / iResolution.xy;
st.y *= iResolution.y/iResolution.x;
fragColor = vec4(matrix(st),1.0);
}
در نهایت شیدرمون تکمیل شد😋
برای دیدن شیدر می تونید به لینک زیر مراجعه کنید:
برای دیدن شیدر می تونید به لینک زیر مراجعه کنید:
یکی از اعضای گروه سوالی در رابطه با صف رندر یا Render Queue پرسید که سوال متداولی هم هست که پاسخ آن را می توانید در زیر مشاهده کنید
چهار صف رندر از قبل تعریف شده وجود دارد:
اما بین آنها از پیش تعریف شده می تواند صف های بیشتری باشد. صفهای از پیش تعیین شده عبارتند از:
پس زمینه - این رندر صف قبل از هر چیز دیگر ارائه شده است. این برای 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 (هندسه به علاوه یک) باشد. این در شرایطی است که شما می خواهید برخی از اشیا همیشه بین دو مجموعه دیگر از اشیاء کشیده شده مفید باشد. به عنوان مثال، در اکثر موارد، آب شفاف باید پس از اشیای کدر، اما قبل از اشیای شفاف باشد.