Decal顶点没有烘焙的光照数据,因此无法在含前向管线的阴影下绘制。特效贴花为unlit自发光材质,阴影下表现影响不大。而场景Decal需要计算光照。

1. Decal实现原理

MobileDecalRendering.cpp
通过矩阵变换 得到FrustumComponentToClip,传入Pixel shader将组件投影到裁剪空间,直接替换组件表面材质属性
在PixelShader中逐像素剔除,覆盖材质属性,投影到屏幕空间

2. 解决方法

2.1 PC端直接开启DBuffer用来处理排序问题

UE4: Solution to Decals Not Rendering/Showing in Indirect Static Lighting

2.2 移动端:

1.在UE4的光照体系下,在DeferredDecal.usf的Pixiel Shader里计算Hack的stationary天光,从而能在阴影中有个粗糙的亮度,同时用Gbuffer中的一位标记Decal,在LightingPass抠掉天光计算即可。
伪代码:

#if ENABLE_SKY_LIGHTfloat2 SkyOcclusionUV = 0;uint SkyOcclusionDataIndex = 0u;float3 SkyDiffuseLighting;float3 SkySubsurfaceLighting;VTPageTableResult LightmapVTPageTableResult = (VTPageTableResult)0.0f;float3 VolumetricLightmapBrickTextureUVs = ComputeVolumetricLightmapBrickTextureUVs(MaterialParameters.AbsoluteWorldPosition);GetSkyLightingForPRT(MaterialParameters, LightmapVTPageTableResult, GBufferData, DiffuseDir, SkyOcclusionUV, SkyOcclusionDataIndex, VolumetricLightmapBrickTextureUVs, SkyDiffuseLighting, SkySubsurfaceLighting);SkyDiffuseLighting += SkySubsurfaceLighting;IndirectColor += SkyDiffuseLighting * ShadingModelDiffuseColor;IndirectColor += ShadingModelDiffuseColor * (SkyDiffuseLighting + SkySubsurfaceLighting) * View.IndirectLightingColorScale;IndirectIrradiance += Luminance(SkyDiffuseLighting);

2.管线的设计上,完全分离间接光计算至LightingPass。

3.贴花偏透明

移动端贴花材质没有Mask的混合模式,自己加一套,不混合底色的
DecalRenderingShared.cpp


看起来就没有那么透明

UE4 Decal 贴花不在静态光照下绘制相关推荐

  1. UE4学习总结(4) 光照 / 媒体配置

    UE4学习总结(4) 光照 / 媒体配置 光照 光照种类 蓝图控制照明效果 媒体框架 光照 推荐官方文档:https://docs.unrealengine.com/zh-CN/Engine/Rend ...

  2. 配置静态路由下一跳为本地出战接口和IP地址的区别

    配置静态路由下一跳为本地出战接口和IP地址的区别 在配置静态路由时,下一跳可以使用下一路由器的IP地址,也可以使用本路由器的出站接口.在点对点的网络中,两者可能没有什么差别,但在以太网中或者NBMA网 ...

  3. 图形杂记-Decal贴花

    ThreeJS WEBGL Decal 贴花 在图形学里主要指将特定图案,以类似粘贴或印刷的方式附着于其他物体上,能创造一种新颖的体验或逼真的效果,比较有趣,游戏中比较出名的有喷射战士splatoon ...

  4. 静态背景下运动目标检测

    前言:运动对象常用在视频监控领域,目的是从序列图像中将变化区域从背景图像中提取出来,运动区域的有效检测对目标分类.跟踪.行为理解等后期处理非常重要.根据摄像机与运动目标之间的关系可分为静态背景下的运动 ...

  5. 知乎问答 | 如何在同一坐标系下绘制多幅图形

    在知乎上看到这么一个问题:rstudio将两个图放在同一坐标轴用什么函数?在这里回答一下. 小编推测提问者是想问"使用R语言绘图时怎么把不同的图形绘制在同一个坐标系中".那么这个问 ...

  6. matlab中做出球面和圆柱面,如何用MATLAB在直角坐标系下绘制球面x^2+y^2+z^2=4被柱面(x-1)^2+y^2=1截得的部分曲面.急!谢谢...

    答:clear;clc; r=1;%r的值自己改 %柱面部分 t=linspace(0,2*pi,37); q=linspace(-1,1,11); [tt,qq]=meshgrid(t,q); x= ...

  7. 95---Python 直角坐标系下绘制双曲螺旋线

    阅读这篇以前,推荐优先阅读-94-Python 极坐标系下绘制双曲螺旋线(超链接点击跳转). 双曲螺旋线在极坐标系下的方程表达式为: ρ θ = a \rho\theta = a ρθ=

  8. 93---Python 极坐标系下绘制椭圆

    阅读这篇之前,推荐阅读-90-Python 直角坐标系下绘制椭圆形(超链接点击跳转). 直角坐标系下椭圆方程的表达式为: x 2 a 2 + y 2 b 2 = r 2

  9. C++OpenCV下绘制灰度直方图

    C++OpenCV下绘制直方图 直方图的定义:灰度直方图是对一幅灰度图像素分布的统计.对于一幅8Bit量化的图像来说.就是统计在0~255各个灰度级上,像素点的个数或者密度. 在OpenCV库提供了c ...

最新文章

  1. 2022-2028年中国麻纺织业投资分析及前景预测报告
  2. SSD+HDD双硬盘+MSI主板win8.1+ubuntu17.04双系统安装总结
  3. linux 怎么样复制文件夹内所有文件到另一个文件夹?
  4. kafka高可用集群课程介绍
  5. louvain算法python_复杂网络任务6:Louvain社区发现算法的原理、细节和实现,作业,六,以及...
  6. C语言 有符号字符型输出 面试题
  7. Linux中的crontab详解
  8. cmd窗口pip显示不是内部或外部命令,也不是可运行的程序或批处理文件
  9. VC++LNK2005错误:already defined in *.obj
  10. Speedoffice(Excel)怎么把边框线条加粗
  11. 使用VMware启动centos6.6并使用Qume+kvm虚拟化linux和windows虚机
  12. Linux redis ipv6,linux centOS 开启ipv6
  13. 微信html5小游戏源码70种
  14. Cardboard的学习(一)Cardboard的介绍
  15. 深入浅出RISC-V调试
  16. 百度之星2009程序设计大赛 初赛第一场试题
  17. Android Application Fundamentals——Android应用程序基础知识
  18. 华为服务器XH628配置软RAID
  19. RegExp (regular expression) object
  20. 离散数学_九章:关系(3)

热门文章

  1. 如何选购护眼灯呢?南卡/明基/孩视宝台灯哪个比较好?「测评三款热销护眼灯」
  2. Android 自定义相机 切换相机 参考线(辅助线) 闪光灯 缩放 自动聚焦 Demo
  3. php mtrand 范围,PHP mt_rand()函数
  4. IPC TCP/IP协议
  5. 随机森林分析共享单车的需求
  6. 我的第一台手提 | 关于你的第一台手提征文活动
  7. 搞懂它,带你学会高效配置交换机!
  8. 全民战疫,我们在行动!
  9. 如何申请Office365试用账号
  10. linux查看文档结构图,Linux之文本处理