Contacts
صفحه اصلی پورتال | صفحه اصلی تالار | ثبت نام | اعضاء | گروه ها | جستجو | پرسش و پاسخ | فروشگاه الکترونیکی | خرید پستی بازی های کامپیوتری





صفحه اول انجمنها -> برنامه نویسی با زبان های C++ و Delphi و VB -> الگوریتم بلور
 

ارسال يك موضوع جديد   پاسخ به يك موضوع ديدن موضوع قبلي :: ديدن موضوع بعدي

الگوریتم بلور
نويسنده
پيغام
Pswin
متخصص ساخت بازی
متخصص ساخت بازی


تاريخ عضويت: جمعه 29 دي 1385
تعداد ارسالها: 261
محل سكونت: پشت کامپیوترم


3 شنبه 10 دي 1387 - 00:13
پاسخ بصورت نقل قول
سلام
از دوستان کسی الگوریتم یه بلور خوب و سریع رو داره. الگوریتمی رو که من دارم از اون استفاده میکنم از فرگمنتهای مجاور چهارتا نمونه بر میداره و اونها رو ترکیب میکنه که برای داشتن یه بلور زیاد مجبورم سه چهار دور اعمالش کنم. من دنبال الگوریتمی هستم که یه بلور شدید رو داخل یه پاس اعمال کنم.

_________________
سمینار تخصصی بازی سازی و گرافیک کامپیوتری (یکشنبه 29 آذر 1388 - 9:30 صبح تا 13 بعد از ظهر ):
http://barnamenevis.org/forum/forumdisplay.php?f=28
ارسال  بازگشت به بالا
ديدن مشخصات كاربر ارسال پيغام خصوصي ديدن وب سايت كاربر نام كاربري در پيغامگير Yahoo
 

نويسنده
پيغام
lord_akinak
متخصص ساخت بازی
متخصص ساخت بازی


تاريخ عضويت: شنبه 15 ارديبهشت 1386
تعداد ارسالها: 349
محل سكونت: Hell


3 شنبه 10 دي 1387 - 14:34
پاسخ بصورت نقل قول
سلام عزیز!...

من زیاد Blur انجام ندادم ، بیشتر Bloom بوده !
اما از اونجا که یک قسمتشون مشترکه ، توی Bloom بعد از Brightpass چند تا Downsample کردن مفیده ، اگر به Blur شدن بیشتری توی صحنت نیاز داری Downsample رو تا 4 برابر انجام بده که حسابی رنگ ها پخش میشن ، بعد هم عموما چیزی که دیدم( دیدیم! ) ، Blur با دو pass هستش که خودت میدونی یکی عمودی و یکی افقی ،
یه بار تست کردم و هر دو pass رو توی یکی انجام دادم یعنی توی یه pixel شیدر یه بار عمودی pixel ها رو جمع زدم بعد نتیجه رو با یه ردیف از pixel ها جمع زدم / نتیجه کم شدن Blur بود ، انجام دادنش توی 2 pass پشت سر هم باعث میشه مقدار ترکیب شدن رنگ ها بیشتر بشه ، این شکلی چون قبلا یه بار رنگ ها عمودی ترکیب شدن وقتی توی pass دوم افقی دارن ترکیب میشن اون ترکیبات عمودی قبلی دوباره توی قسمت افقی هم تاثیر میزارن ، واسه همین ترکیب رنگ بیشتر میشه ،
توی Sample های DX ، توی 2 پس ، 13 تا pixel عمودی و بعد 13 پیکسل افقی ترکیب میکنه ، اگه SDK رو داشته باشی ، کرنل اون پس توی sample: postprocess effects هست ، اگه نداری بگو تا برات کرنل رو بزارم /

در کل، فاکتور های بیشتر شدن بلور با همون الگوریتم ساده اول میشه :
1 - Downsample
2 - انجام دادن توی 2 pass جدا
3 - استفاده از کرنل بزرگتر

اگه الگوریتم دیگه ای باشه برای منم جالبه بدونم ، چیزه دیگه ای کسی میشناسه !
خودتم چیزی پیدا کردی بزار اینجا ....

موفق و پیروز ...!

_________________
And hell was so cold
All the vases are so broken
And the roses tear our hands all open
Mother mary miscarry
But we pray just like insects
The world is so ugly now
ارسال  بازگشت به بالا
ديدن مشخصات كاربر ارسال پيغام خصوصي ديدن وب سايت كاربر نام كاربري در پيغامگير Yahoo
 

نويسنده
پيغام
Pswin
متخصص ساخت بازی
متخصص ساخت بازی


تاريخ عضويت: جمعه 29 دي 1385
تعداد ارسالها: 261
محل سكونت: پشت کامپیوترم


4 شنبه 11 دي 1387 - 15:14
پاسخ بصورت نقل قول
سلام
بلور عمودیو افقی رو میشه توی یه اس انجام داد اما برای یه نتیجه خوب چند تا اس لازم داری. سایز کرنل من 4 هستش.

من برای یاده سازی Bloom از 6 تا پاس استفاده کردم که چهار تای اونها مربوط به بلور هستن. سرعت شیدرم خیلی ائینه و با 9800 همش 190 تا fps میده که خودش تکلیف همه چی رو معلوم میکنه.

_________________
سمینار تخصصی بازی سازی و گرافیک کامپیوتری (یکشنبه 29 آذر 1388 - 9:30 صبح تا 13 بعد از ظهر ):
http://barnamenevis.org/forum/forumdisplay.php?f=28
ارسال  بازگشت به بالا
ديدن مشخصات كاربر ارسال پيغام خصوصي ديدن وب سايت كاربر نام كاربري در پيغامگير Yahoo
 

نويسنده
پيغام
Pswin
متخصص ساخت بازی
متخصص ساخت بازی


تاريخ عضويت: جمعه 29 دي 1385
تعداد ارسالها: 261
محل سكونت: پشت کامپیوترم


3 شنبه 1 بهمن 1387 - 19:03
پاسخ بصورت نقل قول
سلام
من gaussian رو هم پیادش کردم(با کنرل 9). نتیجه خیلی بهتر و سریعتر شدش اما هنوز اون چیزی نیسش که من دنبالش هستم.
الگوریتم Downsample رو میذاری

_________________
سمینار تخصصی بازی سازی و گرافیک کامپیوتری (یکشنبه 29 آذر 1388 - 9:30 صبح تا 13 بعد از ظهر ):
http://barnamenevis.org/forum/forumdisplay.php?f=28
ارسال  بازگشت به بالا
ديدن مشخصات كاربر ارسال پيغام خصوصي ديدن وب سايت كاربر نام كاربري در پيغامگير Yahoo
 

نويسنده
پيغام
lord_akinak
متخصص ساخت بازی
متخصص ساخت بازی


تاريخ عضويت: شنبه 15 ارديبهشت 1386
تعداد ارسالها: 349
محل سكونت: Hell


3 شنبه 1 بهمن 1387 - 22:59
پاسخ بصورت نقل قول
سلام

downsample:
یه تکسچر به اندازه 1/4 صحنه بساز به عنوان RenderTarget /
یه fullscreen quad رندر کن.
تکسچری ( RenderTarget قبلی که صحنه توش رندر شده ) رو براش بفرست.
VertexProgram :: فقط texcoord های quad رو برای fragment shader لازم داریم.
FragmentProgram ::

كد:

float2 PixelCoordsDownFilter[16] =
{
    { 1.5,  -1.5 },
    { 1.5,  -0.5 },
    { 1.5,   0.5 },
    { 1.5,   1.5 },

    { 0.5,  -1.5 },
    { 0.5,  -0.5 },
    { 0.5,   0.5 },
    { 0.5,   1.5 },

    {-0.5,  -1.5 },
    {-0.5,  -0.5 },
    {-0.5,   0.5 },
    {-0.5,   1.5 },

    {-1.5,  -1.5 },
    {-1.5,  -0.5 },
    {-1.5,   0.5 },
    {-1.5,   1.5 },
};

float4 DownFilter( in float2 Tex : TEXCOORD0 ) : COLOR0
{
    float4 Color = 0;

    for (int i = 0; i < 16; i++)
    {
        Color += tex2D( g_samSrcColor, Tex + TexelCoordsDownFilter[i].xy );
    }

    return Color / 16;
}



از DirectXSDK -> PostProcesses Sample

این HLSL هست که بی شک خودت استادی و به GLSL تبدیل میکنی / 16 تکسل اطراف هر پیکسل رو ترکیب می کنه/ نتیجه یه تکسچر با اندازه 1/4 تکسچر اول که رنگها توش ترکیب شدن ( در واقع این downsample هم یه جورایی داره blur میکنه واست )

برای گرفتن نتیجه نهایی 2 راه وجود داره :
1
- همین تکسچر downsample رو بعد از blur کردن بزرگ کنی ( 4 برابر ) -> بلور خیــــــلــــی زیاد میشه!
برای بزگ کردن : کافیه توی یه پس دیگه دقیقا همون روند رو با همون fragmentprogram انجام بدی ، این دفعه روی یه rendertarget با اندازه برابر backbuffer یا کلا روی خود backbuffer ...

2 - blend کردن این تکسچر با تکسچر اصلی ( چیزی که توی Bloom انجام میشه ) ، blend کردن رو هم توی یه پس دیگه انجام بده ، هر جور که دوست داری 2 تا رنگ های تکسچرت رو میتونی جمع بزنی ، مثلا توی Bloom خودم ، همین جوری 2 تا texture lookup دارم بعدشم فرتی جمع میزنم ( یه ضریب برای تکسل downsample شده بزاری که میزان تاثیرش رو کنترل کنه بد نیست.. )

كد:

sampler2D Tex_Scene: register(s0);
sampler2D Tex_Blur: register(s1);
float4 bloom_blur_blend( tqFragmentData i ): COLOR
{
   float3 src = tex2D( Tex_Scene , i.uv );
   float3 blr = tex2D( Tex_Blur , i.uv );
   return float4( (blr*0.8+src) ,1);
}

_________________
And hell was so cold
All the vases are so broken
And the roses tear our hands all open
Mother mary miscarry
But we pray just like insects
The world is so ugly now
ارسال  بازگشت به بالا
ديدن مشخصات كاربر ارسال پيغام خصوصي ديدن وب سايت كاربر نام كاربري در پيغامگير Yahoo
 

نويسنده
پيغام
Pswin
متخصص ساخت بازی
متخصص ساخت بازی


تاريخ عضويت: جمعه 29 دي 1385
تعداد ارسالها: 261
محل سكونت: پشت کامپیوترم


4 شنبه 2 بهمن 1387 - 17:46
پاسخ بصورت نقل قول
مرسی

یکی از مشکلات این فروم اینه که دکمه تشکر نداره

_________________
سمینار تخصصی بازی سازی و گرافیک کامپیوتری (یکشنبه 29 آذر 1388 - 9:30 صبح تا 13 بعد از ظهر ):
http://barnamenevis.org/forum/forumdisplay.php?f=28
ارسال  بازگشت به بالا
ديدن مشخصات كاربر ارسال پيغام خصوصي ديدن وب سايت كاربر نام كاربري در پيغامگير Yahoo
 

نمايش نامه هاي ارسال شده قبلي:   
ارسال يك موضوع جديد   پاسخ به يك موضوع    صفحه 1 از 1 تمام ساعات و تاريخها بر حسب 3.5+ ساعت گرينويچ مي باشد


 
پرش به:  


شما نمي توانيد در اين انجمن نامه ارسال كنيد.
شما نمي توانيد به موضوعات اين انجمن پاسخ دهيد
شما نمي توانيد نامه هاي ارسالي خود را در اين انجمن ويرايش كنيد
شما نمي توانيد نامه هاي ارسالي خود را در اين انجمن حذف كنيد
شما نمي توانيد در نظر سنجي هاي اين انجمن شركت كنيد


unity3d

بازگردانی به فارسی : علی کسایی @ توسعه مجازی کادوس 2004-2011
Powered by phpBB © 2001, 2011 phpBB Group
| Home | عضويت | ليست اعضا | گروه هاي كاربران | جستجو | راهنماي اين انجمن | Log In |