감성을 위한 개발요소 - unite seouluniteseoul.com/2019/pdf/d2t1s3.pdfvertex color vertex...
TRANSCRIPT
사람이곧회사좋은사람들이좋은게임을만든다는믿음
서우원
—
—
—
—
—
—
—
— Design R&D (Character Rendering)
— Normal Shift (Face)
— EyeBrow Rendering
— Character FX
— Changing BG Colour (Color Grading , LUT)
— 2D Polygonal Imposters for 3D Crowds
Body Diffuse Body Normal
Head Diffuse Head Normal
디테일이좋은모델링?
—
—
—
Normal Map Cartoon Map
—
—
—
—
—
—
Character Shader Matcap Character Shader
—
—
Character Shader Matcap Character Shader
—
—
—
—
123456
float3 worldNorm = normalize(unity_WorldToObject[0].xyz * v.normal.x + unity_WorldToObject[1].xyz * v.normal.y + unity_WorldToObject[2].xyz * v.normal.z);
worldNorm = mul((float3x3)UNITY_MATRIX_V, worldNorm);
uv = (worldNorm.xy * 0.5) * v.color.a + 0.5;
Vertex Color Vertex Color Vertex Color
Eyebrow Back Eyebrow FrontEyebrow
—
—
Eyebrow
ZTest GEqual ZTest LEqual Alpha Eyebrow
—
Eyebrow
Hair Eyebrow
(inside)
Face Eyebrow(outside)
Render Queue 800
Ztest LEqualRender Queue 900
Ztest LEqualRender Queue 1000
Ztest LEqualRender Queue 900
Ztest GEqual
26
— Matcap
— Add / Multiply
—
— Matcap
30
—
—
Cloud Shadow
—
Default Map LUT + LUT +
Default LUT
Default LUT
Imposter
—
— Mesh Polygon
—
Imposter
— Camera
— Camera
— Texture
Texture
Imposter Shader
— Animation 2 Texture
— Animation Speed, Tempo, Start Time
Model & Imposter
Imposter Animation
— LookAt System
— Facial Animation
— Story Telling Tools
— PostEffect (Using UberShader)
— BTS
— Machine/Deep Learning ( )
— Bug Detection System
Facial Animation
Facial Animation
—
—
—
—
—
—
—
—
—
—
— α
—
—
Facial Animation
—
—
—
Facial Tool
LookAt System
LookAt System
— Bone Animation
— Idle Idle
—
—
—
—
—
LookAt System
—
—
—
—
90°90°
Pseudo-Code123456789
10111213141516171819
void execute_lookat_after_animation(){Vector3 vhead_dir; // 현재머리가향하는방향Vector3 vlookat_dest; // 바라볼목적지Vector3 vhead_pos; // 머리의현재위치Quat qhead_rot; // 현재 Bip 상의머리회전값
Vector3 _vlookat_dir; // LookAt 연산을위한임시변수Quat _qlookat; // LookAt 연산을위한임시변수float _fdegree; // LookAt 연산을위한임시변수
_vlookat_dir = normalize(vlookat_dest – vhead_pos);_fdegree = degree_a_to_b(vhead_dir , _vlookat_dir);_fdegree = clamp( _fdegree, MIN_HEAD_DEGREE * deltatime, MAX_HEAD_DEGREE * deltatime);_vlookat_dir = rotate_vector3_from_degree( vhead_dir, _fdegree);
_qlookat = quat_from_vector3( _vlookat_dir );
qhead_rot = _qlookat * qhead_rot;}
LookAt System
—
—
—
—
Problems on LookAt System
—
—
—
Problems on LookAt System
—
—
—
Problems on LookAt System
Story Telling
Strory Telling
—
—
—
—
—
—
PostEffect
Post Effect
— Bloom (Using DownScaled Buffer)
123456789101112131415161718
down_scaled_buffer_1_4 = downsample( current_bright_pass_buffer, 1/4 );down_scaled_buffer_1_8 = downsample( current_bright_pass_buffer, 1/8 );down_scaled_buffer_1_16 = downsample( current_bright_pass_buffer, 1/16 );
down_scaled_buffer_1_4 = gaussian_blur(down_scaled_buffer_1_4 );down_scaled_buffer_1_8 = gaussian_blur(down_scaled_buffer_1_8 );down_scaled_buffer_1_16 = gaussian_blur(down_scaled_buffer_1_16 );
bloom(down_scaled_buffer_1_4 , down_scaled_buffer_1_8, down_scaled_buffer_1_16);
Post Effect
— Chromatic Aberration Filter
123456789
101112131415161718
float2 texcoord = input.uv;
float k = _param.y;float kcube = _param.z;float r2 = (texcoord.x - 0.5) * (texcoord.x - 0.5) + (texcoord.y - 0.5) * (texcoord.y - 0.5);float f = 0.0f;if (kcube == 0.0f) {
f = 1.0f + r2 * k;}else {
f = 1.0f + r2 * (k + kcube * sqrt(r2));}
float x = f*(texcoord.x - 0.5f) + 0.5f;float y = f*(texcoord.y - 0.5f) + 0.5f;
float3 final_chromatic = tex2D(ScreenColor, float2(x, y)).rgb;final_chromatic.z = tex2D(ScreenColor, input.uv).b;
Pseudo-Code (Pixel Shader)
—
PostEffect
123456789
101112131415161718
// scratchfloat scratch_intensity = _scratch_intensity_smooth_vspd_hspd.x;float scratch_smooth = _scratch_intensity_smooth_vspd_hspd.y;float vert_scrach_spd = _scratch_intensity_smooth_vspd_hspd.z;float hori_scrach_spd = _scratch_intensity_smooth_vspd_hspd.w;
float _scratch_lerp = 1.0f; // outer value
float _vert_line = _Time.x * vert_scrach_spd;float _hori_line = _Time.x * hori_scrach_spd;
float2 _noise_texcoord = float2(i.uv.x + _hori_line, _vert_line);float _scratch = tex2D(noise_texture, _noise_texcoord).x;_scratch = 2.0 * (_scratch - scratch_intensity) / clamp(scratch_smooth, 0.01f, 0.1f);_scratch = clamp(1.0 - abs(1.0f - _scratch), 0.0f, 1.0f);_scratch = lerp(_scratch * _scratch_lerp, 0.0f, 1.0f - lookup_texture_desc.w);_scratch *= 0.6;_scratch = 1.0 - _scratch;
— Chromatic Aberration Filter
— Noise Filter
— Vignette Effect
— Scratched Film Filter
— Color Grading
PostEffectUsing UberShader
— Bloom Filter
— Radial Blur
— Invert Color Filter
Behavior Tree System
Behavior Tree System
—
—
—
—
—
—
—
Behavior Tree System
—
—
—
—
Root
Selector
IdleSequencer
attackDistance < 50
Behavior Tree System
Root
Selector
IdleSequencer
attackDistance < 50
Root
Selector
IdleSequencer
Distance < 50
Root
Selector
IdleSequencer
Distance < 50 Selector
attackSequencer
Run AwayHP < 50%
Selector
Behavior Tree System—
—
—
Behavior Tree System
—
—
—
—
Using BlackBoard1234567
Obj = ObjectMgr.get_object( object_id );Vector3 Diff = Obj.get_pos() – MainChr.get_pos();Float fDist = Diff.length();
If( fDist > 10.0f) return true;
Return false;
68
123456789
Vector3 obj_pos = BlackBoard.get_pos( object_id);Vector3 main_chr_pos = BlackBoard.get_pos( main_chr_id);Vector3 Diff = obj_pos– main_chr_pos;Float fDist = Diff.length();
If( fDist > 10.0f) return true;
Return false;
Machine & Deep Learning
Progressive Growing Of Gans (Tensorflow)Generative adversarial Network
Git : https://github.com/tkarras/progressive_growing_of_gans
Progressive Growing Of Gans (Tensorflow)Generative adversarial Network
학습구간
학습구간
학습구간
예측구간
예측구간
예측구간
1지역 2지역 3지역 4지역
SaftyZone
Machine Learning (Regression)
Etc …