微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

光线行进体积材料上的阴影

如何解决光线行进体积材料上的阴影

我正在尝试通过 UE4 DMX 插件在光束材质中实现阴影,因此我可以将它与手电筒一起使用,而不必担心体积雾引起的光迹,问题是我真的不知道如何,实际上,我对 HLSL 一无所知。

所以,如果任何技术美工巫师能像我五岁那样帮助我解释或给我一些学习材料,那就太棒了。

光束代码

float traversalDepth = FDepth - NDepth ;
uint numSteps = floor(traversalDepth / StepSize) ;
float3 posOffset = normalize(FSlice-NSlice) * StepSize ;

float Adj = AdjOpp.x;
float Opp = AdjOpp.y + ConeRadius;

float3 cumul = 0;

for(uint i=0; i<numSteps; i++){

///Position & depth at rayHit
float3 pos = NSlice + posOffset * i ;
float depth = NDepth + StepSize * i ;

float dist = length(pos);
float falloff = 1.0f-(length(pos)/Maxdistance);

///Domain Transform
pos.z = -pos.z;
pos /= float3(OpP*2,OpP*2,Adj);

float div = ConeRadius / Opp;
div = (pos.z*(1-div))+div;
pos.xy /= div;

//Falloff old
//float falloff = 1.0-saturate(length(pos));

//Center domain
pos.z -= 0.5 ;

///Clip domain edges.
float maskX = (1-abs(pos.x)) > 0.5 ;
float maskY = (1-abs(pos.y)) > 0.5 ;
float maskZ = (1-abs(pos.z)) > 0.5 ;
if( (maskX*maskY*maskZ) - 0.5 < 0 ) continue ;

///Soft clipping with scene depth.
float dClip = saturate((ScDepth-depth)/SoftClipSize);

// UVs from pos
pos.xy = saturate(pos.xy+0.5);
float2 GoboUV = pos.xy;
float2 ColorUV = pos.xy;

// Gobo scale offset
GoboUV.x = GoboUV.x / NumGobos;
GoboUV.x = GoboUV.x + (GoboIndex/NumGobos) ;

// Gobo scrolling
GoboUV.x = GoboUV.x + (Time*GoboScrollingSpeed);

// Sample Gobo
float GoboSample = TXTpGobo.SampleLevel(TXTpGoboSampler,GoboUV.xy,0) ;

// Color Wheel scale offset
ColorUV.x = ColorUV.x / NumColors;
ColorUV.x = ColorUV.x + (ColorIndex/NumColors) ;

// Color scrolling
ColorUV.x = ColorUV.x + ((Time-CurrentTime) * ColorScrollingSpeed);

材料: https://blueprintue.com/blueprint/zf-3xwb_/

Beam Material

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。