رفتن به مطلب

تو بحث ما شرکت کنید: D3D12 و VULKAN یا D3D11 کدام یک ؟


 اشتراک گذاری

Recommended Posts

درود دوستان

 

قصدم از ایجاد چنین تاپیکی، درباره API های جدیدی دارند استفاده و API های هنوزم مورد استفاده قرار میگیرند در صنعت بازی سازی و استفاده از آنها برای ساخت بازی ها و اجراء شدن انها توسط کارتهای گرافیکی برای بهتر و روان تر شدن بازی ها هستش که نظر شما دوستان به صورت فنی و تخصصی در این زمینه داشته باشیم و بدونیم که چه API موفق تر چه در حال و آینده عمل خواهد کرد.

 

بیایید در بحث شرکت کنید و نظراتتون حتی اندک کوتاه هم شده ارائه بدید می تونیم در این تاپیک به موضوعات و نتایج مناسب و خوبی برسیم . 

 

اما از قابلیت مهم و کارایی که گفته مثل CPU ovehead Reductions پیشتیبانی می کنند. در اصل باعث کاهش OverHead در پردازنده ها شده و باعث می شود داده ها بروی هسته ها و رشته های پردازشی دیگر شکسته شوند و سریعتر انجام شوند.

 
شروع این تاپیک زده شده  که از نظرات شما دوستان دراین باره رو جویا بشم به نظر شما ایا DirectX 12.0 موفق خواهد بود تا سربار از بخش پردازنده ها کم کنه و باعث بازپخش شدن دادهها و پردازش داده ها بروی رشته های پردازشی بشوند تا عمل پردازش سریعتر انجام شود یا Mantle عنوانی که شرکت AMD با همکاری پنهان Khorons ایجاد کرده اند موفق خواهند بود. زبان برنامه نویسی به کاربرده شده در تکنولوژی DX 12.0 زبان محبوب ++ C هستش توسط مهندسین نرم افزار این شرکت نوشته و پیاده سازی شده است.
 
نکته دوم: تکنولوژی Mantle ما در محصولات RADEON شرکت AMD مشاهده می کنیم فعلا در حالت BETA قرار دارد و در اینده قرار است ورژنهای مختلفی برای رفع بیشتر مشکلات Mantle عرضه شوند. VULKAN نسخه 1.0 ان عرضه شده است .
 
 

کارت گرافیک R9 290X با استفاده از قابلیت DX12 تونسته 474 Draw Calls در حالی که TITAN X گفته از قابلیت DX 12.0 و FL12.1 پشتیبانی میکنه با استفاده از DX 12 تونسته 419 هزار Draw Calls داشته باشه ، این نشون میده معماری GCN فوق العاده بهینه و از ردیف های Tier 1 - Tier 2 - Tier 3 از جداولی که شرکت مایکروسافت تعریف کرده برای قابلیتهای معماری کارت های گرافیک باید پشتیبانی کنند را این معماری از هر سه ردیف پشتیبانی می کند. در تست دیگری که انجام شده کارت گرافیک GTX 980 با استفاده از DX 12.0 توانسته به 15.67 Frame Per Second برسه ولی کارت گرافیک R9 290X با استفاده از قابلیت DX 12.0 تونسته 19.12 Frame Per Second پیدا کنه پرش قابل توجه ای هستش نسبت به GTX 980 در تستهای انجام داده 
 
 
86tp_dx12_api_perf_mantle-100575202-orig
 
 
> این هم نمونه کدی هستش بهینه شدن برای اجرای Stone - Water - Dirt و ... در بخش Shader :
 
 
 
const float PI = 3.1415;
const float EPSILON = 1e-3;
float EPSILON_NRM = 0.1 / iResolution.x;
 
 
// sea
const int ITER_GEOMETRY = 3;
const int ITER_FRAGMENT = 5;
const float SEA_HEIGHT = 0.6;
const float SEA_CHOPPY = 4.0;
const float SEA_SPEED = 0.8;
const float SEA_FREQ = 0.16;
const vec3 SEA_BASE = vec3(0.1,0.19,0.22);
const vec3 SEA_WATER_COLOR = vec3(0.8,0.9,0.6);
float SEA_TIME = iGlobalTime * SEA_SPEED;
mat2 octave_m = mat2(1.6,1.2,-1.2,1.6);
 
 
// math
mat3 fromEuler(vec3 ang) {
vec2 a1 = vec2(sin(ang.x),cos(ang.x));
vec2 a2 = vec2(sin(ang.y),cos(ang.y));
vec2 a3 = vec2(sin(ang.z),cos(ang.z));
mat3 m;
m[0] = vec3(a1.y*a3.y+a1.x*a2.x*a3.x,a1.y*a2.x*a3.x+a3.y* a1.x,-a2.y*a3.x);
m[1] = vec3(-a2.y*a1.x,a1.y*a2.y,a2.x);
m[2] = vec3(a3.y*a1.x*a2.x+a1.y*a3.x,a1.x*a3.x-a1.y*a3.y*a2.x,a2.y*a3.y);
return m;
}
float hash( vec2 p ) {
float h = dot(p,vec2(127.1,311.7));
return fract(sin(h)*43758.5453123);
}
float noise( in vec2 p ) {
vec2 i = floor( p );
vec2 f = fract( p );
vec2 u = f*f*(3.0-2.0*f);
return -1.0+2.0*mix( mix( hash( i + vec2(0.0,0.0) ), 
hash( i + vec2(1.0,0.0) ), u.x),
mix( hash( i + vec2(0.0,1.0) ), 
hash( i + vec2(1.0,1.0) ), u.x), u.y);
}
 
 
// lighting
float diffuse(vec3 n,vec3 l,float p) {
return pow(dot(n,l) * 0.4 + 0.6,p);
}
float specular(vec3 n,vec3 l,vec3 e,float s) { 
float nrm = (s + 8.0) / (3.1415 * 8.0);
return pow(max(dot(reflect(e,n),l),0.0),s) * nrm;
}
 
 
// sky
vec3 getSkyColor(vec3 e) {
e.y = max(e.y,0.0);
vec3 ret;
ret.x = pow(1.0-e.y,2.0);
ret.y = 1.0-e.y;
ret.z = 0.6+(1.0-e.y)*0.4;
return ret;
}
 
 
// sea
float sea_octave(vec2 uv, float choppy) {
uv += noise(uv); 
vec2 wv = 1.0-abs(sin(uv));
vec2 swv = abs(cos(uv)); 
wv = mix(wv,swv,wv);
return pow(1.0-pow(wv.x * wv.y,0.65),choppy);
}
 
 
float map(vec3 p) {
float freq = SEA_FREQ;
float amp = SEA_HEIGHT;
float choppy = SEA_CHOPPY;
vec2 uv = p.xz; uv.x *= 0.75;
 
float d, h = 0.0; 
for(int i = 0; i < ITER_GEOMETRY; i++) { 
d = sea_octave((uv+SEA_TIME)*freq,choppy);
d += sea_octave((uv-SEA_TIME)*freq,choppy);
h += d * amp; 
uv *= octave_m; freq *= 1.9; amp *= 0.22;
choppy = mix(choppy,1.0,0.2);
}
return p.y - h;
}
 
 
float map_detailed(vec3 p) {
float freq = SEA_FREQ;
float amp = SEA_HEIGHT;
float choppy = SEA_CHOPPY;
vec2 uv = p.xz; uv.x *= 0.75;
 
float d, h = 0.0; 
for(int i = 0; i < ITER_FRAGMENT; i++) { 
d = sea_octave((uv+SEA_TIME)*freq,choppy);
d += sea_octave((uv-SEA_TIME)*freq,choppy);
h += d * amp; 
uv *= octave_m; freq *= 1.9; amp *= 0.22;
choppy = mix(choppy,1.0,0.2);
}
return p.y - h;
}
 
 
vec3 getSeaColor(vec3 p, vec3 n, vec3 l, vec3 eye, vec3 dist) { 
float fresnel = 1.0 - max(dot(n,-eye),0.0);
fresnel = pow(fresnel,3.0) * 0.65;
 
vec3 reflected = getSkyColor(reflect(eye,n)); 
vec3 refracted = SEA_BASE + diffuse(n,l,80.0) * SEA_WATER_COLOR * 0.12; 
 
vec3 color = mix(refracted,reflected,fresnel);
 
float atten = max(1.0 - dot(dist,dist) * 0.001, 0.0);
color += SEA_WATER_COLOR * (p.y - SEA_HEIGHT) * 0.18 * atten;
 
color += vec3(specular(n,l,eye,60.0));
 
return color;
}
 
 
// tracing
vec3 getNormal(vec3 p, float eps) {
vec3 n;
n.y = map_detailed(p); 
n.x = map_detailed(vec3(p.x+eps,p.y,p.z)) - n.y;
n.z = map_detailed(vec3(p.x,p.y,p.z+eps)) - n.y;
n.y = eps;
return normalize(n);
}
 
 
float heightMapTracing(vec3 ori, vec3 dir, out vec3 p) { 
float tm = 0.0;
float tx = 1000.0; 
float hx = map(ori + dir * tx);
if(hx > 0.0) return tx; 
float hm = map(ori + dir * tm); 
float tmid = 0.0;
for(int i = 0; i < NUM_STEPS; i++) {
tmid = mix(tm,tx, hm/(hm-hx)); 
p = ori + dir * tmid; 
float hmid = map(p);
if(hmid < 0.0) {
tx = tmid;
hx = hmid;
} else {
tm = tmid;
hm = hmid;
}
}
return tmid;
}
 
 
// main
void mainImage( out vec4 fragColor, in vec2 fragCoord ) {
vec2 uv = fragCoord.xy / iResolution.xy;
uv = uv * 2.0 - 1.0;
uv.x *= iResolution.x / iResolution.y; 
float time = iGlobalTime * 0.3 + iMouse.x*0.01;
 
// ray
vec3 ang = vec3(sin(time*3.0)*0.1,sin(time)*0.2+0.3,time); 
vec3 ori = vec3(0.0,3.5,time*5.0);
vec3 dir = normalize(vec3(uv.xy,-2.0)); dir.z += length(uv) * 0.15;
dir = normalize(dir) * fromEuler(ang);
 
// tracing
vec3 p;
heightMapTracing(ori,dir,p);
vec3 dist = p - ori;
vec3 n = getNormal(p, dot(dist,dist) * EPSILON_NRM);
vec3 light = normalize(vec3(0.0,1.0,0.8)); 
 
// color
vec3 color = mix(
getSkyColor(dir),
getSeaColor(p,n,light,dir,dist),
pow(smoothstep(0.0,-0.05,dir.y),0.3));
 
// post
fragColor = vec4(pow(color,vec3(0.75)), 1.0);
}
ویرایش شده توسط TERRORIST
لینک به دیدگاه
Share on other sites

دایرتکس ۱۲ اگه بتونن تو بازیسازی بهینه استفاده کنن عالیه باعث افزایش کارایی هست ولکان هم برنامه واسط سطح پایین هست که با استفاده از اون به سطح پایین کارت گرافیک و پتانسیل کامل اون میرسه و پردازش رو از cpu به کارت گرافیک میاره واستفاده بهینه از پردازنده های چندهسته ای در دایرتکس ۱۲

لینک به دیدگاه
Share on other sites

چقدر بدوی شده کد نویسی با 12 

یا بهتره بگم به اوایل برگشته واقعا گفته بودند 12 

رابط هست که به زبان ماشین 

نزدیکتره خوب این کار رو برای توسعه دهنده سخت میکنه 

البته پورت نهایی وگرنه فکر کنم حالا حالاها تو بتن بازی از 11 استفاده کنند 

خوب معلومه هر چی زبان به سطح ماشین بره یا واپسگرا بشه پارسه های کمتری میطلبه 

و سریعتر اجرا میشه برای همینه که نسل 900 انویدیا مشکل دارن باهاش چون پارسه اون کارتها اساسن با 11 

کار میکنه و برای همینه که نسل جدید بهتر از پس 12 بر میاد یه توضیح کوچیک 

برنامه بر اساس زبانش و موتورش برای اجرا ب سطح ماشین بر میگرده و طی این فراینده پارسه یا چند پارسه بر اساس 

سطح زبان مورد نیازه مثلا تو سی شارپ خیلی زبان از سطح ماشین فاصله گرفته و پردازنده قوی تر میخواد تا 

مثلا وی بی که به سطح ماشین نزدیکتر چون که سی شارپ 6 بار ترجمه میکنه تا به سطح ماشین برسه 

خوب کدی بهینه هست که از ابتدا بدون نیاز به پارسه مترجم یا کامپایلر مستقیما اجرا بشه خوب زبانها هم 

یکی مفصری هست یکی کامپایلری ینی یکی تفصیر میکنه یکی ترجمه میکنه و... کاری به این ندارم 

ولی 11 خیلی دورتر است از زبان ماشین ولی 12 سطحش خیلی به ماشین نزدیکتره ولکانم باید همین قدر بهینه باشه 

که گیم در پورت نهایی با 12 پورت میشه و حالا حالاها هم کار داره بازیها اصالتن با 12 ساخته بشن تک و توک بازی ساختن اونام هنوز مشکل دارن

نمونش کوانتوم بریک خوب اونارم خود سازنده رابط 12 ساخته تا مثا یه ناشر یا یه توسعه دهنده بتونه خودشو با 12 وقف بده زمان میبره 

ولی 12 اگر بتونن درست بهنش کنن کاریی یه 380 در حد 390 تو 11 افزایش پیدا میکنه ولی خوب سری 900 

و معماری مکسول با 12 کمی مشکل دارن چون اساسن برای 11 طراحی شدن ولی ای ام دی اینده نگر بود و انویدیا 

نسل حاضرش رو بهترین کرد 

لینک به دیدگاه
Share on other sites

خوب باید بگیم هنوز دایرکس به طور کامل استفاده نشده (منظورم اینه بهینه نشده برا کارت گرافیک ها به طور کامل!) که اگه عملی شه و تمام سیستم ها به طور بهینه استفاده کنن قطعا یه پیشرفت خیلی و بزرگ و افزایش کارایی رو شاهد خواهیم بود.
راجب منتل و ولکان باید گفت که واقعا شرکت AMD بی نظیر عمل کرده! فقط چون تو مراحل اولیه است به طور کامل پشتیبانی نمیشه! بعضی از بازی ها و برنامه ها شاید به طور نیمه بهینه استفاده کنن مثل بازی بتلفیلد 4 که واقعا افزایش پرفورمنس بالایی رو تو کارت های ای ام دی شاهد بودبم.
ولی به هر حال من نظرم روی دایرکس برای برنامه های گرافیکی و بازی ها هست.
البته هنوز هیچی قطعی مشخص نیست چون به هر حال سال 2017 و 2018 سال پرکاریه هم برای شرکت AMD و هم برای شرکت Intel و Nvidia.باید منتظر نسل های جدید بود.(vega و سری جدید pascal)

 

ویرایش شده توسط Bravo
لینک به دیدگاه
Share on other sites

به نظر من vulkan از همه نظر بهتر از همه هست چرا که تو بازی مثل doom نشون داد بهم که فوق العاده روی بهبود فریم بازی تاثیر داره

من به شکل عادی با کارت 380 حدود 40 فریم میگرفتم ولی با Vulkan یکدفعه شد 70 فریم

تفاوت خیلی چشم گیری داره

لینک به دیدگاه
Share on other sites

به گفتگو بپیوندید

هم اکنون می توانید مطلب خود را ارسال نمایید و بعداً ثبت نام کنید. اگر حساب کاربری دارید، برای ارسال با حساب کاربری خود اکنون وارد شوید .
توجه: مطلب ارسالی شما پس از تایید مدیریت برای همه قابل رویت خواهد بود.

مهمان
ارسال پست در این تاپیک...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  تنها استفاده از 75 اموجی مجاز می باشد.

×   لینک شما به صورت اتوماتیک جای گذاری شد.   نمایش به صورت لینک

×   محتوای قبلی شما بازگردانی شد.   پاک کردن محتوای ویرایشگر

×   شما مستقیما نمی توانید تصویر خود را قرار دهید. یا آن را اینجا بارگذاری کنید یا از یک URL قرار دهید.

 اشتراک گذاری

×
  • اضافه کردن...