UE4 Decal 贴花不在静态光照下绘制
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 贴花不在静态光照下绘制相关推荐
- UE4学习总结(4) 光照 / 媒体配置
UE4学习总结(4) 光照 / 媒体配置 光照 光照种类 蓝图控制照明效果 媒体框架 光照 推荐官方文档:https://docs.unrealengine.com/zh-CN/Engine/Rend ...
- 配置静态路由下一跳为本地出战接口和IP地址的区别
配置静态路由下一跳为本地出战接口和IP地址的区别 在配置静态路由时,下一跳可以使用下一路由器的IP地址,也可以使用本路由器的出站接口.在点对点的网络中,两者可能没有什么差别,但在以太网中或者NBMA网 ...
- 图形杂记-Decal贴花
ThreeJS WEBGL Decal 贴花 在图形学里主要指将特定图案,以类似粘贴或印刷的方式附着于其他物体上,能创造一种新颖的体验或逼真的效果,比较有趣,游戏中比较出名的有喷射战士splatoon ...
- 静态背景下运动目标检测
前言:运动对象常用在视频监控领域,目的是从序列图像中将变化区域从背景图像中提取出来,运动区域的有效检测对目标分类.跟踪.行为理解等后期处理非常重要.根据摄像机与运动目标之间的关系可分为静态背景下的运动 ...
- 知乎问答 | 如何在同一坐标系下绘制多幅图形
在知乎上看到这么一个问题:rstudio将两个图放在同一坐标轴用什么函数?在这里回答一下. 小编推测提问者是想问"使用R语言绘图时怎么把不同的图形绘制在同一个坐标系中".那么这个问 ...
- 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= ...
- 95---Python 直角坐标系下绘制双曲螺旋线
阅读这篇以前,推荐优先阅读-94-Python 极坐标系下绘制双曲螺旋线(超链接点击跳转). 双曲螺旋线在极坐标系下的方程表达式为: ρ θ = a \rho\theta = a ρθ=
- 93---Python 极坐标系下绘制椭圆
阅读这篇之前,推荐阅读-90-Python 直角坐标系下绘制椭圆形(超链接点击跳转). 直角坐标系下椭圆方程的表达式为: x 2 a 2 + y 2 b 2 = r 2
- C++OpenCV下绘制灰度直方图
C++OpenCV下绘制直方图 直方图的定义:灰度直方图是对一幅灰度图像素分布的统计.对于一幅8Bit量化的图像来说.就是统计在0~255各个灰度级上,像素点的个数或者密度. 在OpenCV库提供了c ...
最新文章
- 2022-2028年中国麻纺织业投资分析及前景预测报告
- SSD+HDD双硬盘+MSI主板win8.1+ubuntu17.04双系统安装总结
- linux 怎么样复制文件夹内所有文件到另一个文件夹?
- kafka高可用集群课程介绍
- louvain算法python_复杂网络任务6:Louvain社区发现算法的原理、细节和实现,作业,六,以及...
- C语言 有符号字符型输出 面试题
- Linux中的crontab详解
- cmd窗口pip显示不是内部或外部命令,也不是可运行的程序或批处理文件
- VC++LNK2005错误:already defined in *.obj
- Speedoffice(Excel)怎么把边框线条加粗
- 使用VMware启动centos6.6并使用Qume+kvm虚拟化linux和windows虚机
- Linux redis ipv6,linux centOS 开启ipv6
- 微信html5小游戏源码70种
- Cardboard的学习(一)Cardboard的介绍
- 深入浅出RISC-V调试
- 百度之星2009程序设计大赛 初赛第一场试题
- Android Application Fundamentals——Android应用程序基础知识
- 华为服务器XH628配置软RAID
- RegExp (regular expression) object
- 离散数学_九章:关系(3)