骑马与砍杀中文站论坛

 找回密码
 注册(Register!)

QQ登录

只需一步,快速开始

搜索
购买CDKEY 衣谷三国
查看: 478|回复: 1

[讨论] [Shader][战团]着色器折射和反射采样的讨论

[复制链接]

48

主题

695

回帖

513

积分

骑士

Rank: 4Rank: 4

UID
3398051
第纳尔
1997
精华
0
互助
48
荣誉
5
贡献
10
魅力
347
注册时间
2022-8-13
鲜花(60) 鸡蛋(0)
发表于 2025-8-26 08:09:25 | 显示全部楼层 |阅读模式
本帖最后由 ggfgfgf 于 2025-8-26 16:03 编辑

反射
ReflectionTextureSampler
EnvTextureSampler
折射
ScreenTextureSampler
如果你需要能够访问这些采样
你要着色器brf加 纹理调用 标签:100
并且勾选标签:use.env

骑砍的镜面反射性能非常好,相信很多人想过把反射应用到盔甲的金属上或制作镜子,折射则可以实现水晶或放大镜效果

这的确是可行的,但是问题在于骑砍的镜面反射是基于顶点计算,并且逆天的是所有有镜面反射的着色器当成一个整体计算,什么意思呢
就是如果你创建了一个有镜面反射着色器的物品,放在水面旁边,那么水面的镜面效果将改变,因为镜面计算不是单独顶点,比如先算水面顶点的反射,而是所有镜面的顶点同时计算
这可能对效果不会有什么影响,但会在前后产生闪烁。
这是一个问题,还有一个问题
在代码注释里看,似乎骑砍是想给物品用这两采样的

//for objects use env map (they use same texture register)
                tex = tex2D(EnvTextureSampler, (vView - normal).yx * 3.4f);

并且去分物品使用EnvTextureSampler
水面使用ReflectionTextureSampler

然而实际这两个区别不大,而且EnvTextureSampler存在莫名其妙的偏移问题
最不能接受的是水下效果问题
这也导致一般mod实际上根本不可能在水面外使用这种采样
一旦你的着色器勾选了use.env
那么在摄像机位置背向于模型法线时,所有着色器的雾化效果Out.Fog将被引擎设置得极大,以模拟水下能见度降低。。。
所以为了消除这种,必须重写get_fog_amount或get_fog_amount_new
根据实测设置fog为1不能解决问题
仍然存在一定的变化,当然可以指出是太阳辉光的变化
问题在于这样就少了模拟大气散射的fog效果
而且这种水下效果是引擎硬编码的,所以非常棘手

引擎并不是只改变某个着色器变量(fFogDensity),而是改变了fog参数

战团的代码在一些问题处理上的确是有问题的,毕竟初期主要由夫妻完成
太阳辉光变化是因为其着色器soft_sunflare,代码如下

PS_OUTPUT ps_main_depthed_flare(VS_DEPTHED_FLARE In, uniform const bool sun_like, uniform const bool blend_adding)
{
。。。。。
               
                if(sun_like) {
                        float my_depth = 0;        //STR?: wignette like volume? tc!
                        alpha_factor = depth;
                        float fog_factor = 1.001f - (10.f * (fFogDensity+0.001f));        //0.1 -> 0.0  & 0.01 -> 1.0
                        alpha_factor *= fog_factor;
                }
                else {
                        alpha_factor = saturate((depth-In.Depth) * 4096);
                }
               
。。。。


technique soft_sunflare
{
。。。
                PixelShader = compile ps_2_0 ps_main_depthed_flare(true,true);



其中sun_like的fFogDensity由引擎水下效果修改
可以注释掉或改成固定值,为了武器反射效果牺牲水下效果和大气散射,不知道值不值

232

主题

3065

回帖

1629

积分

骑士长

中级译典官

Rank: 5Rank: 5Rank: 5

UID
2572488
第纳尔
4642
精华
0
互助
122
荣誉
3
贡献
355
魅力
306
注册时间
2015-8-1

骑砍中文站APP会员勋章原版正版勋章战团正版勋章火与剑正版勋章拿破仑正版勋章维京征服正版勋章汉匈决战正版勋章霸主正版勋章骑士美德之英勇勋章[杰出会员活跃勋章]骑士美德之仁慈勋章[杰出会员互助勋章]骑士美德之奉献勋章元老骑士勋章丝绸之路勋章

QQ
鲜花(424) 鸡蛋(200)
发表于 2025-8-26 08:25:29 来自手机 | 显示全部楼层
可以啊来自: iPhone客户端
您需要登录后才可以回帖 登录 | 注册(Register!)

本版积分规则

Archiver|手机版|小黑屋|骑马与砍杀中文站

GMT+8, 2025-9-3 08:24 , Processed in 0.101610 second(s), 20 queries , Gzip On, MemCached On.

Powered by Discuz! X3.4 Licensed

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表