当前位置: 首页 > news >正文

重庆网站制作系统前端培训多少钱

重庆网站制作系统,前端培训多少钱,淘宝客必须做网站,福安seo试了一下在unity中使用raytrace方式实现体积光, 运行效果如下 raytrace开销较大,采样加到200几乎卡得跑不动了 首先在光源处拍摄场景(unity对mainlight做了这个处理,并且是级联可设置) 基本原理是在全屏路径下,根据场景深度,还原出世界坐标 根据世界坐标判断是哪个裁切球 (…试了一下在unity中使用raytrace方式实现体积光, 运行效果如下 raytrace开销较大,采样加到200几乎卡得跑不动了 首先在光源处拍摄场景(unity对mainlight做了这个处理,并且是级联可设置) 基本原理是在全屏路径下,根据场景深度,还原出世界坐标 根据世界坐标判断是哪个裁切球 (如果不是级联阴影,比如spotlight就不需要这个操作) 然后将世界坐标变换到光源观察坐标light_view_pos 再根据投影矩阵对应到光源纹理的深度纹理 比较当前点在光源摄像机的深度,判断是不是处于遮挡(即阴影) 原理和纹理阴影的处理方式类似 附shader代码如下 Shader lsc/RaytraceShader {Properties{_MainTex (Texture, 2D) white {}_raytrace_step_count(rayrace step count, Int) 5_scale(scale, float) 1.0}SubShader{// No culling or depthCull Off ZWrite Off ZTest AlwaysPass{HLSLPROGRAM#pragma vertex vert#pragma fragment frag#pragma multi_compile _ _MAIN_LIGHT_SHADOWS#pragma multi_compile _ _MAIN_LIGHT_SHADOWS_CASCADE#pragma multi_compile_fragment _ _ADDITIONAL_LIGHT_SHADOWS#pragma multi_compile_fragment _ _SHADOWS_SOFT#include Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl#include Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlslstruct appdata{float4 vertex : POSITION;float2 uv : TEXCOORD0;};struct v2f{float2 uv : TEXCOORD0;float4 vertex : SV_POSITION;float4 screen_pos : TEXCOORD1;};float4x4 _mtx_view_inv;float4x4 _mtx_proj_inv;TEXTURE2D_X_FLOAT(_CameraDepthTexture);SAMPLER(sampler_CameraDepthTexture);v2f vert (appdata v){v2f o;VertexPositionInputs vertexInput GetVertexPositionInputs(v.vertex.xyz);o.vertex vertexInput.positionCS;o.screen_pos ComputeScreenPos(o.vertex);o.uv v.uv;return o;}sampler2D _MainTex;int _raytrace_step_count;float _scale;float4 cal_world_pos_by_dep(float ndc_dep, float2 screen_space, out float4 view_pos){// 取出非线性深度与视深度float linearDepthZ LinearEyeDepth(ndc_dep, _ZBufferParams);// 屏幕转ndcfloat4 ndc_pos;ndc_pos.xy screen_space * 2.0 - 1.0;ndc_pos.zw float2(ndc_dep, 1);// 添加齐次因子ndc_pos ndc_pos * linearDepthZ;// 转成观察与世界坐标view_pos mul(_mtx_proj_inv, ndc_pos);float4 world_pos mul(_mtx_view_inv, float4(view_pos.xyz, 1));return world_pos;}float4 frag (v2f i) : SV_Target{float4 col tex2D(_MainTex, i.uv);// 插值后的屏幕坐标去除齐次因子float2 screen_space i.screen_pos.xy / i.screen_pos.w;// 取出非线性深度float org_depth SAMPLE_TEXTURE2D_X(_CameraDepthTexture, sampler_CameraDepthTexture, screen_space).x;// 计算世界坐标float4 view_pos;float4 world_pos cal_world_pos_by_dep(org_depth, screen_space, view_pos);float3 cam_wpos GetCameraPositionWS();float3 v_step (world_pos - cam_wpos) / _raytrace_step_count;float3 rt_start cam_wpos;float shadow_atten 0;UNITY_LOOPfor (int i 0; i _raytrace_step_count; i)//循环,超级低效{float4 shadow_coord TransformWorldToShadowCoord(rt_start);rt_start v_step;Light mainLight GetMainLight(shadow_coord);//这样产生了级联阴影采样shadow_atten mainLight.shadowAttenuation;}shadow_atten (shadow_atten / _raytrace_step_count) * _scale;col.rgb col.rgb * shadow_atten;return col;}ENDHLSL}} }对应的urp管线cs代码 using UnityEngine; using UnityEngine.Rendering; using UnityEngine.Rendering.Universal; using System;public class RayTraceFogRenderPassFeature : ScriptableRendererFeature {class CustomRenderPass : ScriptableRenderPass{public Material raytrace_material_;public RenderTargetIdentifier render_target_color_;public RenderTargetHandle temp_render_target_;public int raytrace_count_ 5;public float scale_ 1.0f;// This method is called before executing the render pass.// It can be used to configure render targets and their clear state. Also to create temporary render target textures.// When empty this render pass will render to the active camera render target.// You should never call CommandBuffer.SetRenderTarget. Instead call cConfigureTarget/c and cConfigureClear/c.// The render pipeline will ensure target setup and clearing happens in a performant manner.public override void OnCameraSetup(CommandBuffer cmd, ref RenderingData renderingData){}// Here you can implement the rendering logic.// Use cScriptableRenderContext/c to issue drawing commands or execute command buffers// https://docs.unity3d.com/ScriptReference/Rendering.ScriptableRenderContext.html// You dont have to call ScriptableRenderContext.submit, the render pipeline will call it at specific points in the pipeline.public override void Execute(ScriptableRenderContext context, ref RenderingData renderingData){if (!raytrace_material_)return;raytrace_material_.SetInt(_raytrace_step_count, raytrace_count_);raytrace_material_.SetFloat(_scale, scale_);{Camera cam renderingData.cameraData.camera;var mtx_view_inv cam.worldToCameraMatrix.inverse;var mtx_proj_inv cam.projectionMatrix.inverse;raytrace_material_.SetMatrix(_mtx_view_inv, mtx_view_inv);raytrace_material_.SetMatrix(_mtx_proj_inv, mtx_proj_inv);}const string CommandBufferTag raytrace fog Pass;var cmd CommandBufferPool.Get(CommandBufferTag);RenderTextureDescriptor opaqueDesc renderingData.cameraData.cameraTargetDescriptor;opaqueDesc.depthBufferBits 0;cmd.GetTemporaryRT(temp_render_target_.id, opaqueDesc);// 通过材质将计算结果存入临时缓冲区cmd.Blit(render_target_color_, temp_render_target_.Identifier(), raytrace_material_);// 再从临时缓冲区存入主纹理cmd.Blit(temp_render_target_.Identifier(), render_target_color_);// 执行命令缓冲区context.ExecuteCommandBuffer(cmd);// 释放命令缓存CommandBufferPool.Release(cmd);// 释放临时RTcmd.ReleaseTemporaryRT(temp_render_target_.id);}// Cleanup any allocated resources that were created during the execution of this render pass.public override void OnCameraCleanup(CommandBuffer cmd){}}CustomRenderPass m_ScriptablePass;public Material raytrace_material_;public int raytrace_count_ 5;public float scale_ 1.0f;/// inheritdoc/public override void Create(){m_ScriptablePass new CustomRenderPass();// Configures where the render pass should be injected.m_ScriptablePass.renderPassEvent RenderPassEvent.AfterRenderingOpaques;}// Here you can inject one or multiple render passes in the renderer.// This method is called when setting up the renderer once per-camera.public override void AddRenderPasses(ScriptableRenderer renderer, ref RenderingData renderingData){m_ScriptablePass.render_target_color_ renderer.cameraColorTarget;m_ScriptablePass.raytrace_material_ raytrace_material_;m_ScriptablePass.raytrace_count_ raytrace_count_;m_ScriptablePass.scale_ scale_;renderer.EnqueuePass(m_ScriptablePass);} }
http://www.hkea.cn/news/14276813/

相关文章:

  • 前端搜索网站引擎怎么做平台式建站
  • 天台县低价网站建设电子商务网站建设原则
  • 电子商务网站建设与实践重庆市建设网站
  • 来宾住房和建设局网站楼网络规划设计方案
  • 如何做网站搬家江苏建设工程信息网一体化平台官网
  • 做电商网站都需要学什么工业设计网站排名
  • 专业建站服务公司营销推广方案模板
  • 搭建网站费用wordpress的seo如何写关键词
  • 临沂专业网站建设公司哪家好聚名网域名转出
  • 阿里云怎么做网站小型企业网站建设的背景
  • 担保网站建设电商app开发价格表
  • 网站建设中应注意的问题网站建设费需要缴纳印花税吗
  • 晋中市住房与城乡建设厅网站网站开发工程师 课程大纲
  • 网站设计报价是多少有什么网站可以做毕业影像
  • 校园网站建设开题报告国外公司网站模板
  • 石家庄网站推广排名站长做旅游网站
  • 北京网站开发费用石家庄最新消息今天
  • 长春平原网站建设腾讯企业邮箱登录入口二维码
  • 网站建设公司推荐西安建设网站电话
  • 代码怎么生成网站企业网站改自适应
  • 如何把自己电脑做网站服务器吗广州建筑业企业排名
  • 婚礼策划网站设计公司网站ICP注销
  • 网站建设问题及对策百度账号设置
  • 做外贸生意用哪个网站最好深圳公司网站备案需要什么资料
  • 营销型网站有哪些app微信营销成功的案例有哪些
  • 网站前端设计培训中国城乡住房和建设部网站
  • 宜宾做网站的公司php网站开发工资
  • 网站建设的内容管理地图网站制作
  • 购物网站个人中心模板自己做网站网页文件在哪里
  • 怎么用自助网站珠宝设计制作培训