美文网首页
UE卡通渲染(二):漫画风格后处理

UE卡通渲染(二):漫画风格后处理

作者: Dragon_boy | 来源:发表于2022-05-24 13:25 被阅读0次

参考:https://spite.github.io/sketch/
这里想做的漫画风格后处理主要元素有三点:排线,网点以及描边。此外还有一定的三色偏移效果。

几个Pass

主要包含3个pass,第一个pass梯度化场景中的颜色,第二个pass描边,排线以及网点,最后一个pass三色偏移。




梯度化颜色

获得场景中的亮度




利用亮度采样一张梯度变化LUT图:



利用此梯度变化改变场景diffuse color,同时可以利用custom stencil有选择的变化:

漫画感

首先利用sobel算子处理场景法线纹理。

float normalEdge = 1.0 - length(sobel(normalTexture, uv, textureSize, contour)); // contour:轮廓宽度(纹理尺寸变化)

smoothstep调整轮廓:

normalEdge = smoothstep(0.5-thickness, 0.5+thickness, normalEdge);

获得调整后的场景颜色灰度,根据灰度的不同区分暗部,灰部以及亮部,前两者排线(灰部更细,角度不同),亮部放置亮色网点。

  if(l<dark) {
    vec2 uv = scale * vUv;
    float k = lines(l/dark, rot(uv, 45.), size, thickness);
    rgbscreen = mix(rgbscreen, mix(rgbscreen, inkColor/255., .5), 1.-k);
  } 

  if(l<mid) {
    vec2 uv = scale * vUv;
    float k = lines(l/mid, rot(uv, 15.), size, thickness);
    rgbscreen = mix(rgbscreen, mix(rgbscreen, inkColor/255., .5), 1.-k);
  } 

  if(l>light){
    vec2 uv = vUv * size;
    float frequency = .05;

    // adapted from https://github.com/libretro/glsl-shaders/blob/master/misc/cmyk-halftone-dot.glsl

    float w = mix(0., 1., thickness);
    mat2 k_matrix = mat2(0.707, 0.707, -0.707, 0.707);
    vec2 Kst = frequency * scale * mul(k_matrix , uv);
    vec2 Kuv = w * (2. * fract(Kst) - 1.);
    float k = step(0.0, sqrt(l-light) - length(Kuv));

    rgbscreen = blendScreen(rgbscreen, vec3(1.), k);
  }

lines方法:

float lines( in float l, in vec2 uv, in vec2 resolution, in float thickness){
  vec2 center = .5 * resolution;
  uv *= resolution;
  float c = .5 + .5 * sin(uv.x*.5);
  float f = (c+thickness)*l;
  float e = 1. * length(vec2(dFdx(uv.x), dFdy(uv.y))); 
  f = smoothstep(.5-e, .5+e, f);
  return f;
}

三色偏移

基于纹理空间中心点的uv方向偏移uv,采样3次叠加效果。

  vec2 dir = vUv - vec2( .5 );
    float d = .7 * length( dir );
  normalize( dir );
    vec2 value = d * dir * delta;
  vec2 resolution = vec2(textureSize(colorTexture, 0));

    vec4 c1 = texture(colorTexture, vUv - value / resolution.x );
    vec4 c2 = texture(colorTexture, vUv );
    vec4 c3 = texture(colorTexture, vUv + value / resolution.y );

  fragColor = vec4( c1.r, c2.g, c3.b, c1.a + c2.a + c3.b );

结果

相关文章

  • UE卡通渲染(二):漫画风格后处理

    参考:https://spite.github.io/sketch/[https://spite.github.i...

  • UE4全场景卡通渲染

    UE4全场景卡通渲染效果 这个配色实在是。。 大概效果就是这样了。 用后处理材质做卡通渲染 色块渲染和描边都是用后...

  • UE卡通渲染(一)

    前言 这里试着在UE里复现罪恶装备的渲染。GDC:https://www.youtube.com/watch?v=...

  • ue4卡通渲染

    什么是卡通渲染 使3D游戏看起来像是2d卡通动画。 比如这样: 卡通渲染的主要特征 就两个特征: 色块; 描边。 ...

  • Godot笔记: 内置卡通风格着色器

    Godot内置了一种卡通风格的着色器,确切地说是着色器的卡通渲染模式,可以很方便地将渲染效果设置为卡通风 所谓卡通...

  • Ⅸ非真实感渲染

    非真实感渲染 卡通风格的渲染 原理 要实现卡通渲染有很多方法,其中之一就是使用基于色调的着色技术(tone-bas...

  • UE4 卡通渲染要点(后期处理方式)

    UE4 卡通渲染,使用后期处理方式,要点主要有以下几点: 需要新建个后期处理材质,然后添加后期渲染体 用场景的Sc...

  • 在Unity3D中开发的Toon Shader

    SwordMaster Toon Shader 特点 此卡通渲染风格的Shader是顶点片元Shader,由本人手...

  • 专业漫画艺术特效PS动作

    如果你想要将你的照片制作成漫画风格,那么这组专业漫画艺术特效PS动作可以帮你完成哦!只需将这组卡通漫画特效PS动作...

  • 卡通渲染

    卡通渲染 卡通渲染也叫做Toon-Shading或Cel-Shading,属于非真实感渲染(Non-Photore...

网友评论

      本文标题:UE卡通渲染(二):漫画风格后处理

      本文链接:https://www.haomeiwen.com/subject/ffpjprtx.html