游戏开发论坛

 找回密码
 立即注册
搜索
查看: 5893|回复: 1

随机数在HLSL Shader中的应用

[复制链接]

36

主题

100

帖子

725

积分

高级会员

Rank: 4

积分
725
发表于 2010-10-28 21:04:00 | 显示全部楼层 |阅读模式
  三维场景中,特别是自然景观,我们经常会用到Perlin随机数。但在dx9 HLSL中,并没有提供随机数生成函数。怎么办?一种简单的思路,把纹理图片看成数据库,uv坐标就是索引,任何需要的数据都可以通过这种方式引入到 shader中。我们可以利用引入的数据实时生成地形起伏,表面凹凸等等。下面是我最近在Shader中使用Perlin Noise的一个实例。



  1. sampler texbase; //基础贴图
  2. sampler texnoise=sampler_state { //随机数纹理
  3. Texture = <tTX1>;
  4. };

  5. float4 mainps(VS_OUTPUT i) : COLOR0
  6. {
  7. float4 base=tex2D(texbase,i.uv);
  8. float3 color=base.xyz;
  9. float2 uv=i.pos.xy*0.0001; //i.pos为顶点在world space中的位置,变换一下作为uv坐标到noise纹理中取出随机数
  10. float factor=tex2D(texnoise,uv).r;
  11. factor+=tex2D(texnoise,uv*20).r/4; //利用多次随机数迭加,可以产生更好的效果
  12. color.rb *= 0.7+factor/3; //根据生成的随机数改变颜色
  13. color=color*i.Diffuse.xyz*2+i.Specular.xyz;
  14. //color=factor; //查看随机数生成结果
  15. return float4(color,base.a);
  16. }
复制代码



详细请看这儿

1

主题

14

帖子

14

积分

新手上路

Rank: 1

积分
14
发表于 2010-11-2 00:16:00 | 显示全部楼层

Re:随机数在HLSL Shader中的应用

似乎在生成地形的方法中,heightmap 应用的比较多,不多楼主这个idea不错,值得参考
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-5-30 11:57

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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