define TransparentMirrorReflection()
material if (viewerRenderType = $kRenderTypeShadow) create StandardShaderShadow() else if (viewerRenderType = $kRenderTypeThumbnail) create TransparentBlankMirrorMaterial($kRenderTypeThumbnail) else if (not $mirrorReflectionsEnabled) set currentType (viewerRenderType) create TransparentBlankMirrorMaterial($currentType) else create TransparentMirrorReflectionMaterial() endif endif endif end
enddef
define TransparentBlankMirrorMaterial(renderType)
shader validateRenderShaderContext -viewerRenderType &renderType pass shaderProgram -target vertexProgram -method assemble bindConstants 0 -bindingID geomToClip -constantCount 4 shaderSource vs_1_1 dcl_position v0 m4x4 oPos, v0, c0 endShaderSource end colorScalar (0,0,0) 0.5 stage textureBlend select(colorScalar) select(colorScalar) end end end
enddef
define TransparentMirrorReflectionMaterial()
shader -layer -9998 # this material must render first validateRenderShaderContext -viewerRenderType $kRenderTypeMirror # reflection render
pass -renderEachFrame renderTarget $reflectionRenderTarget -setViewport viewportFromParentRenderContext
depthTest true -enableDepthWrite true
applyStencilStateForOverlappingReflections
alphaBlend srcFactor(zero) add dstFactor(one)
cullmode none
shaderProgram -target vertexProgram -method assemble bindConstants 0 -bindingID geomToClipFromParentView -constantCount 4 shaderSource vs_1_1 dcl_position v0 def c5, 1,0,0,1 m4x4 r0, v0, c0 mov oPos.x, -r0 mov oPos.yzw, r0 endShaderSource end end end
shader -layer 6 validateRenderShaderContext -viewerRenderType $kRenderTypeNormal pass -modifiedEachFrameHint shaderProgram -target vertexProgram -method assemble bindConstants 0 -bindingID geomToClip -constantCount 4 bindConstants 4 -bindingID clipToViewTarget -constantCount 4 shaderSource vs_1_1 dcl_position v0 def c8, -0.5, -0.5, 1, 1 def c9, 0.5, 0.5, 0, 0 def c10, 0.25, 0.25, 0, 0 m4x4 r0, v0, c0 mov oPos, r0 mul r2, c9, r0.w mad r4, r0, c8, r2 rcp r3.x, c4.x rcp r3.y, c5.y mov r3.zw, c9.zw mul r3, r3, c10 mad r6, r0, r3, r4 mov oT0, r6.xyww endShaderSource end
alphaBlend srcFactor(srcAlpha) add dstFactor(invSrcAlpha) depthTest true -enableDepthWrite false colorScalar (0,0,0) 0.25
stage textureTransformType vector3 homogeneous textureAddressing clamp clamp texture $reflectionRenderTarget textureBlend select(texture) select(colorScalar) end end end shader -layer 6 validateRenderShaderContext -viewerRenderType $kRenderTypeNormal pass -modifiedEachFrameHint shaderProgram -target vertexProgram -method assemble bindConstants 0 -bindingID geomToClip -constantCount 4 bindConstants 4 -bindingID clipToViewTarget -constantCount 4 shaderSource vs_1_1 dcl_position v0 def c8, -0.5, -0.5, 1, 1 def c9, 0.5, 0.5, 0, 0 def c10, 0.25, 0.25, 0, 0 m4x4 r0, v0, c0 mov oPos, r0 mul r2, c9, r0.w mad r4, r0, c8, r2 rcp r3.x, c4.x rcp r3.y, c5.y mov r3.zw, c9.zw mul r3, r3, c10 mad r1, r0, r3, r4 rcp r1.w, r1.w mul oT0.xy, r1.w, r1.xy endShaderSource end
alphaBlend srcFactor(srcAlpha) add dstFactor(invSrcAlpha) depthTest true -enableDepthWrite false colorScalar (0,0,0) 0.25
stage textureAddressing clamp clamp texture $reflectionRenderTarget textureBlend select(texture) select(colorScalar) end end end
enddef
- ---------------------------------------------------------------------------------------------------------------#
materialDefinition transparent_mirror_reflection
setDefinition TransparentMirrorReflection
end