位置: 编程技术 - 正文

unity3d shader之God Ray上帝之光

编辑:rootadmin
又是一个post-process后期效果,god ray 上帝之光,说起上帝之光就是咱们再看太阳时太阳周围一圈的针状光芒先放组效果,本文的场景资源均来自浅墨大神,效果为本文shader效果

推荐整理分享unity3d shader之God Ray上帝之光,希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

加入了前篇HDR和Bloom,效果大增:链接

本文的代码是来自unity圣典中某大神的分享,博主做了小小的改进 链接然后就来做下讲解,共有两个shader,一个负责制造ray,一个负责和原屏幕图像混合,于原屏幕图像混合很简单,就是单纯的把两个图像的颜色叠加,控制一下ray的权重,接下来我们着重讲解一下,制造ray的shader是一个fragement shader共有4个外部变量_ScreenLightPos屏幕上光线的位置,这个需要在c#脚本中计算并传出,稍后会讲解_Density密度_Decay衰减_Exposure曝光,用来控制亮度,大家都知道,在相机中,曝光时间越长图像越亮先看vertex shaderv.texcoord为当前点的坐标deltaTexCoord为当前点对光源点的反向向量,长度为两点间距离密度越大deltaTexCoord越大,不超过8,deltaTexCoord始终是个分数第一个采样点为此处本来位置采样点渐渐接进光源处_Density越大采样点间距越大从0到7,点的位置从光源处越来越近,离此处点越来越远看看我们的v2f结构体,存了多少坐标点

传入&#;的结构体v2in

我们就得到了当前点到光源点的一条直线中的八个点的坐标,为fragement shader取色混色用当然本步骤也可在fragement shader中完成,但效率没有vertex shader好,因为不用每个像素都取样,只是每个顶点取样就好再看fragement shader

illuminationDecay光照衰减,_Decay是我们外部可控衰减

_Exposure增加亮度

调整比重离此处像素点越远也就是离光源越近越衰减,可能有人会问,为什么会这样?因为我们还是要保留大部分为此处点的颜色,如果其他像素权重过大,则会造成此处点颜色不准确,甚至不好的模糊效果。然后就是混色,基本上的原理就是从光源处打出无数条射线,嗯,可以这么理解。Ray我们就制造好了,接下来我们需要把光线ray与原屏幕图像混合,这一步就比较简单了,只给出源代码,各位自己意会。然后就是最后一步,也是十分重要的一步就是通过脚本把它弄到屏幕上,此处的要点就是要求出光源在屏幕中的位置,Camera类中有这么一个函数可以把世界坐标转换为屏幕坐标Camera.WorldToScreenPoint(position)官网介绍如下Transforms position from world space into screen space.把position从世界坐标转换为屏幕坐标Screenspace is defined in pixels. The bottom-left of the screen is (0,0); the right-top is (pixelWidth,pixelHeight). The z position is in world units from the camera.左下角是屏幕坐标系的原点,右上角是屏幕的最大范围,超出这个范围的光源我们都不进行god ray渲染了,以此作为判断,否则就会进行错误渲染,屏幕超出光照范围了仍在闪烁。我们把光源的transport传入脚本,然后检验光源的position另外还有重要一点就是判断光源在相机前面还是在后面,如果只判断是否在屏幕内的话,相机转到光源后面也会被渲染god ray,解决方法在此,WorldToScreenPoint返回的z&#;为世界空间内光源与相机的距离,为矢量,所以我们就能用z&#;正负来判断前后了,为正则光源在相机前可渲染god ray,为负则光源在相机后不可渲染god rayif (lightScreenPos.z > 0 && lightScreenPos.x > 0 && lightScreenPos.x < camera.pixelWidth && lightScreenPos.y >0 && lightScreenPos.y < camera.pixelHeight) 其实就这么渲染也可以,但是效果并不好,god ray变成了“god point”,原因刚才分析的,shader的原理是取点到光源的八个点,那渲染的结果也就是出现了好多点,层次很分明,就是因为之混乱和了那8次,解决方式就是多次渲染,点多了,就变成线了我们要想使效果更好一点就要多次渲染建立两个renderTexure tempRtA和tempRtB用来互相传&#; Graphics.Blit(sourceTexture, tempRtA, material);第一次过滤结果存在tempRtA传到下一次渲染做_MainTex Graphics.Blit(tempRtA, tempRtB, material);再传出tempRtB到第三次渲染,再传出tempRtA。。。 Graphics.Blit(tempRtB, tempRtA, material); Graphics.Blit(tempRtA, tempRtB, material); Graphics.Blit(tempRtB, tempRtA, material);最后做混合,把ray texture传到blend shader作为GodRayTex。然后得到最终结果 materialBlend.SetTexture("_GodRayTex", tempRtA); Graphics.Blit(sourceTexture, destTexture, materialBlend, 0);

代码如下:

unity3d shader之God Ray上帝之光

本shader有几个缺点,在比较暗的场景不要使用,因为光源处不亮,所以效果不好,Ray的质量不高,从例子就可以看出来,Ray很不清晰,此处可以和Unity ImageEffect的Sun shafts作比较

最后放上两组效果

林中闪耀的光芒

------ by wolf

Unity3D【火星大战三】 一、背景的移动1、为背景写脚本Sky,然后将脚本附给背景对象,就可以了。背景脚本代码:publicclassSky:MonoBehaviour{floatspeed=2f;voidUpdate(){//如果背景的z坐

Unity3D学习笔记——NGUI之UIToggle UIToggle:切换,从名字就能知道这个组件能做什么。这个组件有两种状态ON/OFF.可以用于创建checkboxes,tabs,radiobuttongroups。该文章出自【狗刨学习网】效果

Unity3D【火星大战四】 利用协程使敌机和圆盘重复出现usingUnityEngine;usingSystem.Collections;publicclassRandomSp:MonoBehaviour{publicGameObject[]enemy2;//圆盘publicGameObject[]enemy1;//敌机publicGameObjectp

标签: unity3d shader之God Ray上帝之光

本文链接地址:https://www.jiuchutong.com/biancheng/383582.html 转载请保留说明!

上一篇:Unity3D粒子系统碰撞器,让粒子碰撞到物体之后消失(unity3d粒子系统创建火花)

下一篇:Unity3D【火星大战三】(unity星球模型)

  • 资产负债表应交税费
  • 企业申报个税软件怎么下载
  • 综合单价的调整计算公式
  • 关联方需要计提坏账准备吗?
  • 金融债券的利息收入
  • 给员工购买意外险进项税能不能抵扣
  • 合作建房分配比例 如何确定
  • 冲回存货跌价准备计提递延所得税
  • 事业单位如何计提工资
  • 结转应交所得税属于利润分配吗
  • 企业购买国债逆回购需要缴纳增值税吗
  • 研发项目领原料加工成产品会计处理是怎样的?
  • 报废固定资产增值税税率
  • 小微企业减免所得税优惠政策
  • 对方公司开支票怎么办
  • 开办费摊销时间税法规定
  • 增值税减免税备案什么时候开始
  • 免税农产品抵扣政策
  • 文件类型有几种分类
  • 苹果笔记本如何切换输入法
  • 以前年度损益调整属于哪类科目
  • 生产企业出口退税计算
  • php字符串函数有哪些
  • php数组函数 菜鸟
  • 木鱼的电脑
  • 水煮鱼的做法和步骤 家常
  • php如何实现多线程
  • 企业弥补亏损明细表
  • 逾期未收回包装物押金的实务处理
  • 集体土地使用权可以抵债吗
  • 大学网页制作作业dw
  • 处理固定资产时的账务处理
  • 研发支出属于哪个表
  • vue3.0安装
  • 金税盘锁死咋办
  • vue实战开发项目视频
  • opencv如何显示图片
  • 遍历目录文件
  • centos+php+coreseek+sphinx+mysql之一coreseek安装篇
  • 抵扣联丢失如何抵扣
  • 人民币跨境贸易占比
  • 短期投资的入账成本
  • 汇算清缴管理费用明细有哪些
  • php网站首页的源码在哪里
  • 质量扣款应收账款怎么算
  • 公司代扣代缴个人所得税是怎么算的
  • 本期数值与去年同期数值之差称为什么
  • 土地使用权被政府收回要交个税吗
  • 盈余公积包括哪两个明细科目
  • 挂靠的项目如何做账?
  • 小规模纳税人开专票可以抵扣进项吗
  • 固定资产可以一次性折旧吗
  • 住宿发票丢失
  • 房地产影响投资和消费,事关民生和发展
  • 销售款退回会计分录
  • 要约收购的条件和程序具体包括哪些?
  • 一般纳税人混凝土税负率
  • 购买方退货的会计分录怎么写
  • 公司购买的车辆
  • Windows 2008 R2 AD组策略-统一域用户桌面背景详细图文教程
  • 脱机文件怎么办
  • winxp系统设置密码
  • 苹果电脑注释
  • 中文版windows7的安装方式
  • windows远程登录命令
  • 在Windows Server 2012中,管理员默认的用户名是
  • mac系统简介
  • bsd模式是什么意思
  • OpwareSE2.exe - OpwareSE2是什么进程 有什么用
  • win7系统电脑开机后直接进入系统修复怎么办
  • win 7怎么设置开机启动
  • win8.1应用商店无法连接网络
  • unity 3d数学
  • osg uniform
  • 简要说明javascript的作用
  • jquery自动点击按钮
  • javascript面向对象 第三方类库
  • 12123人工咨询电话
  • 销售有机肥需要什么手续
  • 争议问题
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设