Godot: ์…ฐ์ด๋” ์ฝ”๋“œ์˜ isnan ()์€ ๋ถ€๋™์ด ์•„๋‹Œ ๊ฐ’์ด ์ „๋‹ฌ ๋  ๋•Œ ์…ฐ์ด๋”๋ฅผ ์ค‘๋‹จํ•ฉ๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2018๋…„ 05์›” 26์ผ  ยท  1๋…ผํ‰  ยท  ์ถœ์ฒ˜: godotengine/godot

Godot ๋ฒ„์ „ :
3.0.2 ๋ชจ๋…ธ

๋ฒ„์ „์„ ํฌํ•จํ•œ OS / ์žฅ์น˜ :
KDE ๋„ค์˜จ
GTX 1060

๋ฌธ์ œ ์„ค๋ช… :
์…ฐ์ด๋”์—์„œ isnan() ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ float๊ฐ€ NaN์ธ์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ float๊ฐ€ ์•„๋‹Œ ๊ฒƒ์„ ์ „๋‹ฌํ•˜๋ฉด (์˜ˆ : ์ •์ˆ˜, ๋ฒกํ„ฐ, ํ–‰๋ ฌ ๋“ฑ) ์…ฐ์ด๋”๊ฐ€ ์ค‘๋‹จ๋˜์ง€๋งŒ ํŽธ์ง‘๊ธฐ์—์„œ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ฒŒ์ž„์ด ์‹คํ–‰๋  ๋•Œ ๋งŽ์€ ์˜ค๋ฅ˜ ์ŠคํŒธ์„ ๋ฐ›๊ฒŒ๋ฉ๋‹ˆ๋‹ค.

 drivers/gles3/shader_gles3.h:377 - Condition ' !version ' is true. returned: -1

์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ ์…ฐ์ด๋”๋ฅผ ์‚ฌ์šฉํ•ด๋ณด์‹ญ์‹œ์˜ค.

shader_type spatial;

void fragment()
{
    ALBEDO = isnan(vec2(0,0)) ? vec3(1.0) : vec3(0.0);
}

์—ฌ๊ธฐ ๊ตฌ์— ํ• ๋‹นํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ณด์‹œ๋‹ค์‹œํ”ผ ๊ตฌ๊ฐ€ ์ด์ƒํ•˜๊ฒŒ ๋Š˜์–ด๋‚˜ ํ™”๋ฉด ๊ณต๊ฐ„์— ๊ทธ๋ ค์ง‘๋‹ˆ๋‹ค.
bug

์žฌํ˜„ ๋‹จ๊ณ„ :

  1. ์žฅ๋ฉด์— MeshInstance๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ๊ตฌ๋ฅผ ํ• ๋‹น ํ•œ ๋‹ค์Œ ์ƒˆ ShaderMaterial์„ ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค.
  2. ๊ทธ ์œ„์— ์…ฐ์ด๋”๋ฅผ ๋„ฃ๊ณ  ๊ฒฐ๊ณผ๋ฅผ ๊ด€์ฐฐํ•˜์‹ญ์‹œ์˜ค.

์ตœ์†Œ ์žฌ์ƒ์‚ฐ ํ”„๋กœ์ ํŠธ :

shadernanbug.zip

bug core rendering

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์žฌํ˜„ ๊ฐ€๋Šฅํ•œ ๋ฒ„๊ทธ ์‹ ๊ณ ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ์ด ๋ฒ„๊ทธ๋ฅผ ์ˆ˜์ •ํ•ด์•ผํ•˜๋Š” ํ’€ ์š”์ฒญ์„ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

isnan (vec2)๊ฐ€ ๋ถ€์šธ vec2๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์…ฐ์ด๋” ์ฝ”๋“œ๊ฐ€ ์ˆ˜์ • ๋˜์–ด๋„ ์ปดํŒŒ์ผ๋˜์ง€ ์•Š์Œ์„ ์•Œ๋ ค ๋“œ๋ฆฌ๊ณ ์žํ•ฉ๋‹ˆ๋‹ค. ํ™•์ธํ•˜๋ ค๋Š” vec2์˜ ์š”์†Œ๋ฅผ ์ง€์ •ํ•˜๋ฉด ์ฝ”๋“œ๊ฐ€ ์ปดํŒŒ์ผ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด :

shader_type spatial;

void fragment()
{
    ALBEDO = isnan(vec2(0,0)).x ? vec3(1.0) : vec3(0.0);
}

>๋ชจ๋“  ๋Œ“๊ธ€

์žฌํ˜„ ๊ฐ€๋Šฅํ•œ ๋ฒ„๊ทธ ์‹ ๊ณ ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ์ด ๋ฒ„๊ทธ๋ฅผ ์ˆ˜์ •ํ•ด์•ผํ•˜๋Š” ํ’€ ์š”์ฒญ์„ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

isnan (vec2)๊ฐ€ ๋ถ€์šธ vec2๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์…ฐ์ด๋” ์ฝ”๋“œ๊ฐ€ ์ˆ˜์ • ๋˜์–ด๋„ ์ปดํŒŒ์ผ๋˜์ง€ ์•Š์Œ์„ ์•Œ๋ ค ๋“œ๋ฆฌ๊ณ ์žํ•ฉ๋‹ˆ๋‹ค. ํ™•์ธํ•˜๋ ค๋Š” vec2์˜ ์š”์†Œ๋ฅผ ์ง€์ •ํ•˜๋ฉด ์ฝ”๋“œ๊ฐ€ ์ปดํŒŒ์ผ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด :

shader_type spatial;

void fragment()
{
    ALBEDO = isnan(vec2(0,0)).x ? vec3(1.0) : vec3(0.0);
}
์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰