找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 14023|回复: 27

【更新中】其他格式贴图应用于YR激光/动画绘制

[复制链接]
发表于 2021-3-12 20:11:03 | 显示全部楼层 |阅读模式
本帖最后由 k002300 于 2022-4-3 17:49 编辑

2022 4 03预告
目前已经初步实现了特定格式Mesh的绘制。


2022 3 11 更新
2022 3 11:贴图激光支持贴图序列,详见说明书;减免切换显示模式时贴图资源的加载负担。
注意使用包内配套的ddraw.dll和ddraw.ini(cncddraw)


关于d3d9中shader的运作流程和可以参考:https://docs.microsoft.com/en-us/windows/win32/direct3d9/direct3d-architecture
https://docs.microsoft.com/en-us/windows/win32/direct3dhlsl/dx-graphics-hlsl-pguide
注意需要配合ares注射器进行使用,同时内含的案例需要ares2.0以上才能使用注意:需要系统为32位色,若需要窗口化请通过补丁的ddraw.ini的windowed=true完成!
开启游戏时提示d3dx9_29错误请下载此处d3dx9_29补丁或百度搜索下载d3dx9_29.dll安装到根目录或者%systemroot%\sysWOW64(按下win+R输入此目录即可打开)下。

2022 03 02:考虑到本插件的一些技术因素,强烈建议下载使用附件中的注射器"syringe.exe"替代ares自带的注射器使用,否则可能导致大量随机崩溃!

鉴于shader对于大家都是很陌生的东西,我从自定义程度较小的激光贴图像素着色器(Pixel shader)的基本使用给大家进行介绍。
※前排提示:本插件使用的贴图激光/动画shader均用HLSL语言编写。
※在能够正常使用激光贴图的前提下,若按照本示例方法不能成功,请先下载本层提供的最新版本文件,其次检查文件是否正确覆盖和编写。
※若仍然不能成功,打开debug\debug.laser.log,查找GOLDEN.HLSL,并查看其后面的编译错误提示(如果提示unexpected token 'texture'....说明没有覆盖为最新版本的文件(laserPSdefinitions.hlsl))。

场景:我们正在正常使用一个激光贴图(来源:cnc3,见附件Original.PNG的效果),现在我们需要一个形状一样,亮度差不多的金色的激光,也就是说,把整体颜色换成金色。以此我们可以用同一个素材绘制出不同的效果而不需要再造素材。
粗略的思路:在PS中,我们可以粗略地通过将贴图转为灰度,再去掉RGB通道中的B来完成这一过程,现在我们通过PixelShader完成这样一个过程。

方法:
1.取出shader辅助文件夹中的helpers.hlsl和laserPSdefinitions.hlsl放入游戏根目录中(可以放入mix内,但是对于有shader开发环境的情况而言,这种情况更加易于编写);
2.在根目录下新建我们要用的shader文件(新建一个txt就行),然后命名"golden.hlsl";

代码基本思路:
我们可以通过文件中已经提供的通用颜色和遮挡处理完成基本处理,最后修改返回的颜色(即最终颜色)即可。
首先是包含辅助hlsl:

#include "laserPSdefinitions.hlsl"

这里laserPSdefinitions.hlsl已经包含了helpers.hlsl因此无需再去包含helpers.hlsl而只需按照前文所说的取出文件放好就行。
然后是定义我们的着色器主函数

vector golden_laser(in pixel_input input) : COLOR0

这里vector是返回类型,即一个包含4个浮点数的向量用以表示颜色的argb分量(范围都是0.0~1.0),input是一个pixel_input结构稍后由自动处理例程使用,COLOR0是绑定语义,表示渲染到目标0上,在这里作为PixelShader主函数,返回类型必须是vector或者float4,且必须有COLOR0语义。
※在一个代码文件里可以存在多个主函数,只要ini填写对应的名字就可以了。

然后就是定义我们的函数体了,简要说一下过程:首先通过通用自动处理例程完成对input参数的处理,返回一些我们“容易利用”的数据(通过一个generally_used_parameters结构返回,内含了多种常用数据,具体见文件该结构体定义的注释),然后就是转成灰度,然后“关掉B通道”,这里我们通过RGB中的RG都等于灰度值而B=0来实现就可以了:
{
    generally_used_parameters paras = general_color_calculation(input);
    float gray_scale = color2grayscale(paras.final_color.rgb);
    return vector(gray_scale.xx, 0.0f, 1.0f);
}


※这里xx的作用就是相当于填了两个gray_scale值在这,也就是r=g=gray_scale

保存代码文件,现在我们完成了shader的编写,然后转到贴图激光的ini处:

PixelShader=golden.hlsl
ShaderEntry=golden_laser


进入游戏,发射激光,我们看到了图GOLDEN.png所示的效果。此时各种hlsl可以放入mix内以保持文件夹干净了。

大概率很多人不愿意读上面的一堆解释,简而言之:
1、取出附件中的helpers.hlsl、laserPSdefinitions.hlsl文件放入游戏根目录;
2、根目录新建文本文档改名golden.hlsl;
3、输入以下代码:
#include "laserPSdefinitions.hlsl"

vector golden_laser(in pixel_input input) : COLOR0
{
    generally_used_parameters paras = general_color_calculation(input);
    float gray_scale = color2grayscale(paras.final_color.rgb);
    return vector(gray_scale.xx, 0.0f, 1.0f);
}

4、保存、转到激光贴图ini处:
PixelShader=golden.hlsl
ShaderEntry=golden_laser

5、启动游戏查看效果,各种hlsl也可以放到mix内,只是放在根目录方便有开发环境的人编辑。


※代码从文件直接复制的带了格式但是颜色懒得改了实在抱歉...







本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×

评分

参与人数 4威严 +12 DIY币 +20 素材区入场券 +9999 收起 理由
Zero_Fanker + 3 + 20 + 9999 民间RA2高清重制版又近了一步
双杀步枪 + 3 神乎其技!
2244106363 + 3 神乎其技!
雷德克里莫 + 3 新时代炫酷插件

查看全部评分

发表于 2021-5-8 14:16:41 | 显示全部楼层
这个挺好看的
回复

使用道具 举报

 楼主| 发表于 2022-2-1 19:39:19 | 显示全部楼层
贴图(.bmp, .dds(推荐), .dib, .hdr, .jpg, .pfm, .png, .ppm, and .tga.)动画/激光(激光可做子弹型,粒子激光不可用),目的/源颜色混合模式,以及自定义像素着色器(贴图动画/激光均有)已经初步支持(依赖reshade-ares基本框架),目前较大动画使用则速度快于原版shp,小动画反之,支持和原版其他对象如建筑、迷雾等的遮挡关系处理(也可以不处理,完全可以自己写,默认模拟游戏自己的计算方式)。
目前进一步开发中。
暂无展示动图(好像展示了也没有用)。



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
回复

使用道具 举报

 楼主| 发表于 2022-2-2 15:09:08 | 显示全部楼层
本帖最后由 k002300 于 2022-2-2 15:11 编辑

根据上述代码添加了一些展示图,包含遮挡处理(zbuffer)和“迷雾处理”(abuffer),自定义shader测试,原图见xcc fiew图片,hlsl代码见图。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
回复

使用道具 举报

 楼主| 发表于 2022-2-3 15:49:09 | 显示全部楼层
更新:完成顶点缓冲效率优化,当前效率描述:
同时显示80个上楼回复中的贴图大动画和80个上楼回复中的贴图激光,
FPS从播放前的~220降低为播放时的~180。

动图太大故暂时无展示。
回复

使用道具 举报

 楼主| 发表于 2022-2-11 03:16:54 | 显示全部楼层
现已经支持自定义顶点着色器,详见:
https://t.bilibili.com/625699477162251164
回复

使用道具 举报

发表于 2022-2-11 12:19:25 | 显示全部楼层
使用时runares必须不加-win,shader会自动窗口化运行
回复

使用道具 举报

发表于 2022-2-11 14:28:44 | 显示全部楼层
神乎其技
回复

使用道具 举报

发表于 2022-2-11 14:58:39 来自手机 | 显示全部楼层
太强啦
回复

使用道具 举报

发表于 2022-2-11 16:15:04 来自手机 | 显示全部楼层
有教程嘛大佬,这效果太好了点
回复

使用道具 举报

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

本版积分规则

小黑屋|Archiver|手机版|管理员邮箱|红警DIY论坛

GMT+8, 2024-10-4 07:11 , Processed in 0.055107 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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