XDGE-Render-HLSL组织结构

image-20201010005110602

前言

1、由于重新梳理了下Render部分,也方便总结,所以有了这一篇博客。

2、不涉及到关键部分的会大致说明过程,也方便检查编码结构的合理性

3、XDRender仅限Studio

正文

一、结构说明

1、四层结构
目录说明
APIOpenGL,ES,DX,Vu等细分底层Handle的API
Core公用库
CoreExtend利用公用库,集合和嵌套的着色模式
Simple基础案例(内置着色模型)
CustomSimple自定义(这里后期会分开为CustomNode,和ShaderGraph)
2、部分文件说明

XDArt_Common.hlsl

最基础的公用文件(对API的嵌套),坐标系,精度,纹理(XDArt_Texture.hlsl会再分化一层)操作,

image-20201010010344795
#if defined(SHADER_API_XBOXONE)
#include "../API/XDArt_XBoxOne.hlsl"
#elif defined(SHADER_API_PSSL)
#include "../API/XDArt_PSSL.hlsl"
#elif defined(SHADER_API_D3D11)
#include "../API/XDArt_D3D11.hlsl"
#elif defined(SHADER_API_METAL)
#include "../API/XDArt_Metal.hlsl"
#elif defined(SHADER_API_VULKAN)
#include "../API/XDArt_Vulkan.hlsl"
#elif defined(SHADER_API_SWITCH)
#include "../API/XDArt_Switch.hlsl"
#elif defined(SHADER_API_GLCORE)
#include "../API/XDArt_GLCore.hlsl"
#elif defined(SHADER_API_GLES3)
#include "../API/XDArt_GLES3.hlsl"
#elif defined(SHADER_API_GLES)
#include "../API/XDArt_GLES2.hlsl"
#else
#error unsupported shader api
#endif
uint GetMipCount(Texture2D tex)
{
#if defined(SHADER_API_D3D11) || defined(SHADER_API_D3D12) || defined(SHADER_API_D3D11_9X) || defined(SHADER_API_XBOXONE) || defined(SHADER_API_PSSL)
    #define MIP_COUNT_SUPPORTED 1
#endif
#if (defined(SHADER_API_OPENGL) || defined(SHADER_API_VULKAN)) && !defined(SHADER_STAGE_COMPUTE)
    // OpenGL only supports textureSize for width, height, depth
    // textureQueryLevels (GL_ARB_texture_query_levels) needs OpenGL 4.3 or above and doesn't compile in compute shaders
    // tex.GetDimensions converted to textureQueryLevels
    #define MIP_COUNT_SUPPORTED 1
#endif
    // Metal doesn't support high enough OpenGL version

#if defined(MIP_COUNT_SUPPORTED)
    uint mipLevel, width, height, mipCount;
    mipLevel = width = height = mipCount = 0;
    tex.GetDimensions(mipLevel, width, height, mipCount);
    return mipCount;
#else
    return 0;
#endif
}

XDArt_Macros.hlsl

常用宏定义:TEMPLATE_SWAP,REVERSED_Z等等

XDArt_Instancing.hlsl

实例化(共享)

XDArt_Packing.hlsl

编码: 如深度编码,R8G8B8编码到Float2等等

XDArt_SpaceTransforms.hlsl

空间变化

XDArt_RenderCoreInput.hlsl和XDArt_RenderCoreLib.hlsl

一些Uniform,和对Uniform的处理帮助

XDArt_RenderLightInput.hlsl和XDArt_RenderLightInputHelp.hlsl

光照数据相关,如灯光数据,材质属性,着色使用的结构(避免传递参数过多)

XDArt_RenderLightFunction.hlsl

光照模型涉及到函数,当积累过多后就会分化。由于一个着色算法经常会拆分为多个单项式,单项式所用的子着色函数会根据需要进行组合,所以也尽量单一放。

CoreExtends下

XDArt_RenderLight_BRDF.hlsl

已经构建好一些BRDF

XDArt_RenderLight_Lamb.hlsl

XDArt_RenderLight_BSSRDF.hlsl

部分Pass

按LightMode或者Tag中关键字来被包含使用

XDArt_RenderPass_DepthOnly.hlsl

用于early-z,深度获取等等

XDArt_RenderPass_Shadow.hlsl

包含正常ShaderMap, CSM, PanelShadow,等等。

XDArt_ShaderMode_DefaultLit.hlsl

默认的简单BRDF光照

部分Shader

内置部分:

XDArt_ShaderMode_Unlit.shader

XDArt_ShaderMode_BlinPhone.shader

XDArt_ShaderMode_DefaultLit.hlsl

后期使用:

颜色矫正:XDArt_ShaderMode_Post_ColorGrauding.hlsl

颜色映射等。

传统泛光,FAstBloom,等等 :XDArt_ShaderMode_Post_Bloom.hlsl

变形:DOF,鱼眼等等

未完待续

部分CustomShader

带AO纹理的:XDArt_ShaderMode_DefaultLit_AO.shader

带MRAO纹理的:XDArt_ShaderMode_DefaultLit_RoughAO.shader

自定义后期。

二、依赖关系

按层处理

备注

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值