设为首页收藏本站新闻投稿

MOD中国同盟社

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3526|回复: 22

自定义half-life cgshader的渲染效果     [复制链接]

Super Moderator

此人已辞职,有事找别人.

Rank: 10Rank: 10Rank: 10

帖子
2341
精华
3
声望
9852 点
金币
3913 Mold
被赞许
-37 次
注册时间
2004-7-17

Modchina元老

发表于 2010-10-4 16:07:25 |显示全部楼层
欢迎转载,但请保留本文出处http://www.modchina.com/thread-51176-1-1.html
========================================================
大家常说的bloom,次世代什么的插件其实本名叫:
half-life cgshader
官网:
http://www.madabouthats.org/projects/cgshader
是支持HL1所有mod的第三方dll
虽然效果很靓丽 但很多人反映其效果太亮 准星都看不清

其实这几个dll是提供了一套渲染算法 而部分算法及具体的设置是在cgprograms下的扩展名为.cg的6个文件中
渲染效果是可以自己修改的

用记事本打开.cg文件就会发现这是C/C++的语法格式

因为没有dll的源代码 具体算法无法完全掌握 只能靠猜测和尝试了
下面我只讲一下自己探索中的发现:
先看glow_combine_fp.cg
FragOut main(VertOut vin,
        uniform samplerRECT texNormal : TEXUNIT0,
        uniform samplerRECT texGlow : TEXUNIT1)
{
        FragOut fout;

        float4 colGlow = texRECT(texGlow, vin.tex1);
        float4 colNormal = texRECT(texNormal, vin.tex0);
        fout.col = colNormal + colGlow*2;//注意这里

        return fout;
}
fout.col = colNormal + colGlow*2;即未经过任何修改,官方原版效果如下:
ka_Doomsday0008.JPG

fout.col = colNormal + colGlow;效果如下:
ka_Doomsday0009.JPG

如果只写fout.col = colNormal; 效果与没开一样 即colNormal是原本正常的图像信息
如果只写fout.col = colGlow;效果如下:
ka_Doomsday0000.JPG

所以可认为colGlow是在colNormal基础之上叠加的发亮效果 而且本身已经是模糊的




下面再看glow_darken_fp.cg
FragOut main(VertOut vin, uniform samplerRECT tex0 : TEXUNIT0)
{
        FragOut fout;

        float4 newCol = texRECT(tex0, vin.tex0);
        fout.col = newCol * newCol * newCol;//注意这里

        return fout;
}
fout.col = newCol * newCol * newCol;看到这句话就会知道 变暗是三次方实现的 同时也可以想到
像素色彩信息RGB值很可能是用取值范围在[0.0f,1.0f]的浮点数表示的
值越小越暗 越大越亮 考虑n次方的衰减特性:
cgfunc.png

可知亮色衰减比暗色衰减要慢得多
让我们再来对比一下三种曲线的效果:
fout.col = newCol * newCol * newCol; 三次方衰减变暗
ka_Doomsday0000.JPG


fout.col = newCol * newCol; 平方衰减变暗
ka_Doomsday0001.JPG


fout.col = newCol; 线性 不变暗
ka_Doomsday0002.JPG



此时让我们再看看F1键的效果吧
关闭效果时:
ka_Doomsday0003.JPG

按1下F1:
ka_Doomsday0004.JPG

按10下F1:
ka_Doomsday0005.JPG

由此可以猜想 F1键决定的可能是模糊处理的迭代次数 或者是图像信号FFT的阶数 本身也不会改变亮度


因此 仅靠这样的darken算法根本无法解决过亮的问题(这样该怎么让F1能方便地调整亮度呢?这实在是一种功能上的设计缺陷啊)

让我们再回到glow_combine_fp.cg 考虑fout.col = colNormal + colGlow*2;
这句话的曲线是这样的:
cgfunc1.png

(学过PS的应该清楚这样的曲线会导致什么效果吧~)

所以要对曲线特性进行修改
例如我把它改成fout.col = newCol;fout.col = colNormal*0.5f + colGlow*0.5f;纯线形叠加
效果就是亮度不变 仅作图像模糊处理:
ka_Doomsday0006.JPG
ka_Doomsday0007.JPG


这样就解决了过亮的问题


最后我要说 目前我只知道四则运算 还不清楚应该怎样做其他运算,如对数、指数、开方、任意幂指数等
在此发这个帖子 只是抛砖引玉
至于如何做到既保留光晕和柔和的特效优点、又不至于亮度过高无法瞄准 就靠有兴趣的同志去做更多的尝试 设计更好的曲线来解决这个问题了

向HLcgshader制作团队致敬!谢谢~

PS:推荐阅读:http://itbbs.pconline.com.cn/diy/9823695.html 其中有对其他一些mod用到的渲染效果的展示 其中hlfx那个更是有镜像和动态光影功能
已有 3 人评分声望 金币 收起 理由
MARS-MAN + 1 我有水面特效的源码 LZ想要吗? ...
cN.SKy + 10
zx541591555 + 20 + 5 精品文章

总评分: 声望 + 31  金币 + 5   查看全部评分

此号待删除,不再登陆.

使用道具 举报

Rank: 7Rank: 7Rank: 7

帖子
743
精华
0
声望
3331 点
金币
1422 Mold
被赞许
31 次
注册时间
2009-9-3

起源天才奖 模纹达人奖

发表于 2010-10-4 16:25:22 |显示全部楼层
娃娃的!这个必须得精!!

使用道具 举报

Super Moderator

此人已辞职,有事找别人.

Rank: 10Rank: 10Rank: 10

帖子
2341
精华
3
声望
9852 点
金币
3913 Mold
被赞许
-37 次
注册时间
2004-7-17

Modchina元老

发表于 2010-10-4 16:33:23 |显示全部楼层
fout.col = (colNormal + colGlow*2.0f)/3.0f;
fout.col = 1.0f - (1.0f-newCol) * (1.0f-newCol);
效果:
ka_Doomsday0000.JPG
ka_Doomsday0001.JPG
此号待删除,不再登陆.

使用道具 举报

Rank: 10Rank: 10Rank: 10

帖子
1615
精华
0
声望
4725 点
金币
571 Mold
被赞许
1 次
注册时间
2009-2-24

黑暗使者 Modchina元老

发表于 2010-10-4 17:03:41 |显示全部楼层
不会弄咋办 我是小白啊

使用道具 举报

Rank: 3Rank: 3

帖子
195
精华
0
声望
762 点
金币
155 Mold
被赞许
0 次
注册时间
2009-7-3
发表于 2010-10-4 17:43:28 |显示全部楼层
太模糊感觉
这样黑累的

使用道具 举报

Developers

渣一样的潜水党

Rank: 8Rank: 8

帖子
648
精华
3
声望
4468 点
金币
1260 Mold
被赞许
33 次
注册时间
2009-6-24

黑暗使者

发表于 2010-10-4 18:52:42 |显示全部楼层
模糊效果的是好的,和开抗锯齿差不多,太模糊就看不见了。
那个光照效果也不错蛤~

使用道具 举报

Modchina God

丿Royal丶Spring .. ...

Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20

帖子
2086
精华
0
声望
41584 点
金币
5116 Mold
被赞许
10 次
注册时间
2009-10-7

优秀版主奖 热心会员奖 黑暗使者 星界财团 积分霸主 Modchina灌水王 可爱小猫

发表于 2010-10-4 19:03:14 |显示全部楼层
好厉害!
缘分就在一瞬间~ ~

使用道具 举报

Rank: 5Rank: 5

帖子
582
精华
0
声望
1012 点
金币
120 Mold
被赞许
0 次
注册时间
2010-2-20

黑暗使者

发表于 2010-10-4 19:29:53 |显示全部楼层
虽然效果好看,但是看的时间长了,对眼睛不好吧...
general丿无双
0)__(0   !   我的UID-78794:去吧,去就死!=+=!  吓我

使用道具 举报

Rank: 8Rank: 8

帖子
929
精华
0
声望
2457 点
金币
805 Mold
被赞许
16 次
注册时间
2009-5-16

新人进步奖 黑暗使者

发表于 2010-10-4 21:18:47 |显示全部楼层
强大的分析- -还是看不懂。

使用道具 举报

Modchina声望-崇拜

在逃模客

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

帖子
2536
精华
0
声望
8050 点
金币
1500 Mold
被赞许
120 次
注册时间
2010-2-7

懒人勋章

发表于 2010-10-4 21:51:16 |显示全部楼层
此物可否对配置有要求?貌似我的配置搞不起画面升级
已有 1 人评分声望 收起 理由
lovemarin + 5 很会拖fps,原本流畅的变得有些卡 ...

总评分: 声望 + 5   查看全部评分

その一   いつもと违う髪形に気が付くこと
その二   ちゃんと靴まで见ること   いいね?
その三   わたしの一言には三つの言叶で返

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

回顶部