Hatching shader

本文介绍了一种名为HatchingShader的技术,该技术可以为场景渲染带来手绘风格的效果。通过混合预设纹理与场景渲染结果,利用特定的计算方法实现不同层次的手绘线条表现。文章详细介绍了其实现原理及步骤,并展示了不同HatchingMap带来的多样化视觉效果。

  Hatching Shader 是最初在NICONICO上看到的MME的效果( 手描き風シェーダー by ogugu )·前段时间把它改写为了适合自己引擎的方式·

  简单的讲它就是把预制的纹理和场景渲染的结果相互混合·

  实作上Hatching Shader本体是个ImageProcess·其输入除去场景的目标纹理·还需要UV纹理·和预制的Hatching纹理至少三张Texture2D·

  这里指的UV纹理只是简单的把模型变换后的TexCoord的两个值写入到纹理的RG通道就可以了·

 

  Hatching Shader的计算和Hatching纹理本体是相关的·(这里依旧使用的ogugu的4*4一共16个层级的格式)

	float4 t_OrgColor = SceneMap.Sample( SceneMapSampler, i_TexCoord );	
	const float t_Luminous = dot( float3( 0.29891f, 0.58661f, 0.11448f ), t_OrgColor.rgb );       //亮度值
	const int t_Index = min( 15.f, t_Luminous * 16.f );
	const float t_Weight = frac( t_Luminous * 16.f );

   首先计算原本场景的亮度值·然后计算对应到HatchingMap的十六个等级·和后面需要用到的权重·

        const float2 t_UV = UVMap.Sample( UVMapSampler, i_TexCoord ).rg;
	float t_f0 = HatchingMap.Sample( HatchingSampler, 0.25f * ( frac( t_UV * float2(-1.f,1.f) * s_TileRepeat) +
			 float2( 3.f - t_Index % 4, t_Index / 4 ) ) ).r;

	const int t_UIndex = t_Index + 1;
	float t_f1 = 1.f; 							                      //限界值
	if( t_UIndex < 16 ){
		t_f1 = HatchingMap.Sample( HatchingSampler, 0.25f * ( frac( t_UV * float2(-1.f,1.f) * s_TileRepeat) + 
			float2( 3.f - t_UIndex % 4, t_UIndex / 4 ))).r;
	}
	const float t_f = lerp( t_f0, t_f1, t_Weight );
	float3 t_Color = lerp( t_OrgColor.rgb, s_WhiteLineColor, t_f );

	float4 o_OutColor = float4( lerp( t_OrgColor.rgb, t_Color, s_Mixture ), t_OrgColor.a);

 然后通过UVMap来计算HatchingMap所对应的位置(UV决定X轴,亮度决定Y轴)·最后通过插值(其实这里想怎么弄都可以)得到最终的输出颜色···

(这里s_TileRepeat是HatchingMap的重复周期·s_Mixture为最终混合权重·)

 

更换不同的HatchingMap可以得到不同的效果·

(人物模型为 机巧少女TV官方配布的 yeye, 背景模型为 天界 )  

  

  

  

转载于:https://www.cnblogs.com/macom/p/3423819.html

内容概要:本文系统介绍了算术优化算法(AOA)的基本原理、核心思想及Python实现方法,并通过图像分割的实际案例展示了其应用价值。AOA是一种基于种群的元启发式算法,其核心思想来源于四则运算,利用乘除运算进行全局勘探,加减运算进行局部开发,通过数学优化器加速函数(MOA)和数学优化概率(MOP)动态控制搜索过程,在全局探索与局部开发之间实现平衡。文章详细解析了算法的初始化、勘探与开发阶段的更新策略,并提供了完整的Python代码实现,结合Rastrigin函数进行测试验证。进一步地,以Flask框架搭建前后端分离系统,将AOA应用于图像分割任务,展示了其在实际工程中的可行性与高效性。最后,通过收敛速度、寻优精度等指标评估算法性能,并提出自适应参数调整、模型优化和并行计算等改进策略。; 适合人群:具备一定Python编程基础和优化算法基础知识的高校学生、科研人员及工程技术人员,尤其适合从事人工智能、图像处理、智能优化等领域的从业者;; 使用场景及目标:①理解元启发式算法的设计思想与实现机制;②掌握AOA在函数优化、图像分割等实际问题中的建模与求解方法;③学习如何将优化算法集成到Web系统中实现工程化应用;④为算法性能评估与改进提供实践参考; 阅读建议:建议读者结合代码逐行调试,深入理解算法流程中MOA与MOP的作用机制,尝试在不同测试函数上运行算法以观察性能差异,并可进一步扩展图像分割模块,引入更复杂的预处理或后处理技术以提升分割效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值