首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >阴影距离淡入淡出x3

阴影距离淡入淡出x3
EN

Stack Overflow用户
提问于 2017-09-22 19:56:13
回答 1查看 287关注 0票数 0

大家好,我试着在3个距离之间淡出。例如,我有一个草系统,所有人都使用相同的着色器和3种类型的LOD,所以我需要在3个不同的距离之间交叉淡入淡出,这样它们就不会突然出现。这就是我一直在尝试的方法。

代码语言:javascript
复制
float dist_near1 = 60; //farthest away from camera
float dist_far1 = 110; //farthest away from camera

float dist_near2 = 30;
float dist_far2 = 70;

float dist_near3 = 0 ; //Closest to camera
float dist_far3 = 50 ; //Closest to camera

float4 fading1 = 1-saturate((distance(Input.wpos,Input.cpos)-dist_near1)/(dist_far1-dist_near1));
float4 fading2 = fading1-saturate((distance(Input.wpos,Input.cpos)-dist_near2)/(dist_far2-dist_near2));
float4 fading3 = fading2-saturate((distance(Input.wpos,Input.cpos)-dist_near3)/(dist_far3-dist_near3));
float4 baseColour=tex2D( baseMap,Input.Texcoord);


color = lerp(fading2,fading3,fading1);

wpos = world position

cpos = camera position.

这段代码不工作,只是从dist_near3淡出到dist_far3,其余的就不算了,就像它忽略它们或被覆盖一样。我试过其他也不管用的方法

EN

回答 1

Stack Overflow用户

发布于 2017-09-22 23:52:52

代码语言:javascript
复制
float3 ComputeWeights(float vMin, float vMid, float vMax, float val)
{
    float wMinMid = (val - vMin) / (vMid - vMin);
    float wMidMax = (val - vMid) / (vMax - vMid);

    float kMinMid = 1 - step(1.0f, wMinMid);
    float kMidMax = step(0.0f, wMidMax);

    wMinMid = saturate(wMinMid);
    wMidMax = saturate(wMidMax);

    return float3
    (
        ( 1 - wMinMid ) * kMinMid,
        wMinMid * kMinMid + ( 1 - wMidMax ) * kMidMax,
        wMidMax * kMidMax
    );
}

// ...

float dist_near = distance(Input.wpos,Input.cpos);

float3 weights = ComputeWeights( dist_near3, dist_near2, dist_near1, dist_near );

float dist_far = dist_far3 * weights.x + dist_far2 * weights.y + dist_far1 * weights.z;

我不知道为什么你需要这么复杂的方法,但是上面的代码对我来说工作得很好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46364234

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档